@kalisio/kdk 2.1.7 → 2.1.9
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.
- package/.codeclimate.yml +34 -34
- package/.nycrc +5 -5
- package/.travis.doc.sh +8 -8
- package/.travis.test.sh +40 -40
- package/CHANGELOG.md +727 -727
- package/LICENSE +21 -21
- package/README.md +32 -32
- package/core/api/application.js +591 -591
- package/core/api/authentication.js +203 -203
- package/core/api/db.js +226 -226
- package/core/api/hooks/hooks.authentication.js +73 -73
- package/core/api/hooks/hooks.authorisations.js +376 -376
- package/core/api/hooks/hooks.groups.js +48 -48
- package/core/api/hooks/hooks.logger.js +26 -26
- package/core/api/hooks/hooks.model.js +290 -290
- package/core/api/hooks/hooks.organisations.js +156 -156
- package/core/api/hooks/hooks.push.js +56 -56
- package/core/api/hooks/hooks.query.js +246 -246
- package/core/api/hooks/hooks.schemas.js +73 -73
- package/core/api/hooks/hooks.service.js +78 -78
- package/core/api/hooks/hooks.storage.js +36 -36
- package/core/api/hooks/hooks.users.js +261 -261
- package/core/api/hooks/index.js +12 -12
- package/core/api/index.js +21 -21
- package/core/api/marshall.js +90 -90
- package/core/api/models/groups.model.mongodb.js +8 -8
- package/core/api/models/organisations.model.mongodb.js +3 -3
- package/core/api/models/tags.model.mongodb.js +10 -10
- package/core/api/models/users.model.mongodb.js +10 -10
- package/core/api/services/account/account.hooks.js +37 -37
- package/core/api/services/account/account.service.js +117 -117
- package/core/api/services/authorisations/authorisations.hooks.js +33 -33
- package/core/api/services/authorisations/authorisations.service.js +139 -139
- package/core/api/services/databases/databases.hooks.js +36 -36
- package/core/api/services/databases/databases.service.js +5 -5
- package/core/api/services/groups/groups.hooks.js +31 -31
- package/core/api/services/index.js +126 -126
- package/core/api/services/mailer/mailer.hooks.js +35 -35
- package/core/api/services/mailer/mailer.service.js +11 -11
- package/core/api/services/organisations/organisations.hooks.js +31 -31
- package/core/api/services/organisations/organisations.service.js +86 -86
- package/core/api/services/push/push.hooks.js +35 -35
- package/core/api/services/push/push.service.js +12 -12
- package/core/api/services/storage/storage.hooks.js +35 -35
- package/core/api/services/storage/storage.service.js +29 -29
- package/core/api/services/tags/tags.hooks.js +31 -31
- package/core/api/services/users/users.hooks.js +75 -75
- package/core/api/utils.js +11 -11
- package/core/client/api.js +293 -293
- package/core/client/capabilities.js +22 -22
- package/core/client/components/KAction.vue +393 -393
- package/core/client/components/KAvatar.vue +129 -129
- package/core/client/components/KBlock.vue +67 -67
- package/core/client/components/KChip.vue +68 -68
- package/core/client/components/KChipsPane.vue +103 -103
- package/core/client/components/KContent.vue +105 -105
- package/core/client/components/KDialog.vue +160 -160
- package/core/client/components/KExpandable.vue +49 -49
- package/core/client/components/KLogo.vue +32 -32
- package/core/client/components/KModal.vue +173 -173
- package/core/client/components/KPanel.vue +64 -64
- package/core/client/components/KScrollArea.vue +88 -88
- package/core/client/components/KSponsor.vue +40 -40
- package/core/client/components/KStamp.vue +65 -65
- package/core/client/components/KStore.vue +102 -102
- package/core/client/components/KTextArea.vue +143 -143
- package/core/client/components/KTree.vue +31 -31
- package/core/client/components/KVersion.vue +19 -19
- package/core/client/components/account/KAccount.vue +68 -68
- package/core/client/components/account/KDeleteAccountManager.vue +62 -62
- package/core/client/components/account/KEmailManager.vue +128 -128
- package/core/client/components/account/KPasswordManager.vue +90 -90
- package/core/client/components/account/KProfile.vue +109 -109
- package/core/client/components/account/KResetPassword.vue +126 -120
- package/core/client/components/account/KSendResetPassword.vue +97 -97
- package/core/client/components/account/KSubscription.vue +71 -71
- package/core/client/components/account/KSubscriptionsManager.vue +46 -46
- package/core/client/components/account/KVerifyEmailManager.vue +105 -105
- package/core/client/components/account/index.js +7 -7
- package/core/client/components/app/KAbout.vue +98 -98
- package/core/client/components/app/KHome.vue +12 -12
- package/core/client/components/app/KPlatform.vue +55 -55
- package/core/client/components/app/KSettings.vue +42 -42
- package/core/client/components/app/KTerms.vue +41 -41
- package/core/client/components/app/KTour.vue +448 -448
- package/core/client/components/app/KWelcome.vue +133 -133
- package/core/client/components/app/index.js +11 -11
- package/core/client/components/chart/KChart.vue +197 -197
- package/core/client/components/chart/KDataTable.vue +183 -183
- package/core/client/components/chart/KStatisticsChart.vue +94 -94
- package/core/client/components/chart/KTimeSeriesChart.vue +431 -431
- package/core/client/components/chart/index.js +9 -9
- package/core/client/components/collection/KBoard.vue +65 -65
- package/core/client/components/collection/KCard.vue +196 -196
- package/core/client/components/collection/KCardSection.vue +52 -52
- package/core/client/components/collection/KColumn.vue +229 -229
- package/core/client/components/collection/KFilter.vue +158 -158
- package/core/client/components/collection/KGrid.vue +121 -121
- package/core/client/components/collection/KHistory.vue +118 -118
- package/core/client/components/collection/KHistoryEntry.vue +111 -111
- package/core/client/components/collection/KItem.vue +128 -128
- package/core/client/components/collection/KList.vue +135 -135
- package/core/client/components/collection/KSorter.vue +46 -46
- package/core/client/components/collection/KTable.vue +238 -238
- package/core/client/components/collection/index.js +19 -19
- package/core/client/components/editor/KEditor.vue +52 -52
- package/core/client/components/editor/KModalEditor.vue +96 -96
- package/core/client/components/editor/index.js +7 -7
- package/core/client/components/form/KChipsField.vue +162 -162
- package/core/client/components/form/KColorField.vue +69 -69
- package/core/client/components/form/KColorScaleField.vue +86 -86
- package/core/client/components/form/KDateTimeRangeField.vue +65 -65
- package/core/client/components/form/KDatetimeField.vue +70 -70
- package/core/client/components/form/KEmailField.vue +33 -33
- package/core/client/components/form/KFileField.vue +161 -161
- package/core/client/components/form/KForm.vue +247 -247
- package/core/client/components/form/KIconField.vue +101 -101
- package/core/client/components/form/KItemField.vue +123 -123
- package/core/client/components/form/KNumberField.vue +33 -33
- package/core/client/components/form/KOptionsField.vue +63 -63
- package/core/client/components/form/KPasswordField.vue +57 -57
- package/core/client/components/form/KPhoneField.vue +32 -32
- package/core/client/components/form/KPropertyItemField.vue +119 -119
- package/core/client/components/form/KRoleField.vue +60 -60
- package/core/client/components/form/KSelectField.vue +143 -143
- package/core/client/components/form/KTextField.vue +48 -48
- package/core/client/components/form/KTextareaField.vue +88 -88
- package/core/client/components/form/KToggleField.vue +46 -46
- package/core/client/components/form/KTokenField.vue +80 -80
- package/core/client/components/form/KUnitField.vue +57 -57
- package/core/client/components/form/KUrlField.vue +32 -32
- package/core/client/components/form/KView.vue +118 -118
- package/core/client/components/form/index.js +7 -7
- package/core/client/components/index.js +48 -48
- package/core/client/components/input/KColorChooser.vue +63 -63
- package/core/client/components/input/KIconChooser.vue +308 -308
- package/core/client/components/input/KOptionsChooser.vue +122 -122
- package/core/client/components/input/KPalette.vue +40 -40
- package/core/client/components/input/index.js +11 -11
- package/core/client/components/layout/KFab.vue +113 -113
- package/core/client/components/layout/KLayout.vue +64 -64
- package/core/client/components/layout/KOpener.vue +140 -140
- package/core/client/components/layout/KPage.vue +320 -320
- package/core/client/components/layout/KPageSticky.vue +53 -53
- package/core/client/components/layout/KWindow.vue +443 -443
- package/core/client/components/layout/index.js +13 -13
- package/core/client/components/media/KColorScale.vue +254 -254
- package/core/client/components/media/KImageViewer.vue +44 -44
- package/core/client/components/media/KMarkdownViewer.vue +55 -55
- package/core/client/components/media/KMediaBrowser.vue +301 -340
- package/core/client/components/media/KShape.vue +120 -120
- package/core/client/components/media/index.js +13 -13
- package/core/client/components/menu/KMenu.vue +147 -147
- package/core/client/components/menu/KRadialFab.vue +122 -122
- package/core/client/components/menu/KRadialFabItem.vue +73 -73
- package/core/client/components/menu/index.js +9 -9
- package/core/client/components/screen/KEndpointScreen.vue +80 -80
- package/core/client/components/screen/KErrorScreen.vue +24 -24
- package/core/client/components/screen/KLoginScreen.vue +84 -84
- package/core/client/components/screen/KLogoutScreen.vue +20 -20
- package/core/client/components/screen/KRegisterScreen.vue +114 -114
- package/core/client/components/screen/KScreen.vue +106 -106
- package/core/client/components/screen/KScreenFooter.vue +32 -32
- package/core/client/components/screen/KScreenHeader.vue +17 -17
- package/core/client/components/screen/index.js +5 -5
- package/core/client/components/team/KAddMember.vue +384 -375
- package/core/client/components/team/KAddTag.vue +121 -121
- package/core/client/components/team/KChangeRole.vue +118 -118
- package/core/client/components/team/KGroupCard.vue +110 -110
- package/core/client/components/team/KGroupsActivity.vue +66 -66
- package/core/client/components/team/KJoinGroup.vue +132 -132
- package/core/client/components/team/KMemberCard.vue +328 -328
- package/core/client/components/team/KMemberFilter.vue +49 -49
- package/core/client/components/team/KMembersActivity.vue +126 -126
- package/core/client/components/team/KOrganisationsActivity.vue +53 -53
- package/core/client/components/team/KTagCard.vue +72 -72
- package/core/client/components/team/KTagsActivity.vue +61 -61
- package/core/client/components/team/index.js +9 -9
- package/core/client/components/time/KAbsoluteTimeRange.vue +183 -183
- package/core/client/components/time/KDate.vue +75 -75
- package/core/client/components/time/KDateTime.vue +172 -172
- package/core/client/components/time/KDateTimeRange.vue +118 -118
- package/core/client/components/time/KRelativeTimeRanges.vue +193 -193
- package/core/client/components/time/KTime.vue +74 -74
- package/core/client/components/time/index.js +7 -7
- package/core/client/components/viewer/KModalViewer.vue +47 -47
- package/core/client/components/viewer/KViewer.vue +30 -30
- package/core/client/composables/activity.js +67 -67
- package/core/client/composables/collection.js +181 -181
- package/core/client/composables/index.js +8 -8
- package/core/client/composables/pwa.js +71 -71
- package/core/client/composables/schema.js +64 -64
- package/core/client/composables/selection.js +88 -88
- package/core/client/composables/session.js +172 -172
- package/core/client/composables/store.js +49 -49
- package/core/client/composables/version.js +47 -47
- package/core/client/events.js +3 -3
- package/core/client/filter.js +60 -60
- package/core/client/guards.js +101 -101
- package/core/client/hooks/hooks.events.js +7 -7
- package/core/client/hooks/hooks.logger.js +24 -24
- package/core/client/hooks/hooks.users.js +22 -22
- package/core/client/hooks/index.js +3 -3
- package/core/client/i18n/core_en.json +846 -845
- package/core/client/i18n/core_fr.json +844 -843
- package/core/client/i18n.js +88 -88
- package/core/client/index.js +84 -84
- package/core/client/layout.js +323 -323
- package/core/client/local-storage.js +28 -28
- package/core/client/mixins/index.js +12 -12
- package/core/client/mixins/mixin.account.js +61 -61
- package/core/client/mixins/mixin.base-activity.js +232 -232
- package/core/client/mixins/mixin.base-collection.js +162 -162
- package/core/client/mixins/mixin.base-context.js +54 -54
- package/core/client/mixins/mixin.base-editor.js +194 -194
- package/core/client/mixins/mixin.base-field.js +105 -105
- package/core/client/mixins/mixin.base-item.js +166 -166
- package/core/client/mixins/mixin.base-modal.js +36 -36
- package/core/client/mixins/mixin.base-viewer.js +43 -43
- package/core/client/mixins/mixin.object-proxy.js +46 -46
- package/core/client/mixins/mixin.schema-proxy.js +97 -97
- package/core/client/mixins/mixin.service.js +22 -22
- package/core/client/reader.js +65 -65
- package/core/client/readers/index.js +3 -3
- package/core/client/readers/reader.blob.js +39 -39
- package/core/client/readers/reader.csv.js +36 -36
- package/core/client/readers/reader.json.js +34 -34
- package/core/client/search.js +47 -47
- package/core/client/services/index.js +49 -49
- package/core/client/services/local-settings.service.js +67 -67
- package/core/client/sorter.js +31 -31
- package/core/client/storage.js +110 -102
- package/core/client/store.js +39 -39
- package/core/client/theme.js +40 -40
- package/core/client/time.js +167 -167
- package/core/client/units.js +218 -218
- package/core/client/utils/index.js +203 -203
- package/core/client/utils/utils.account.js +52 -52
- package/core/client/utils/utils.colors.js +36 -36
- package/core/client/utils/utils.content.js +185 -185
- package/core/client/utils/utils.locale.js +28 -28
- package/core/client/utils/utils.platform.js +11 -11
- package/core/client/utils/utils.push.js +53 -53
- package/core/client/utils/utils.pwa.js +62 -62
- package/core/client/utils/utils.session.js +89 -89
- package/core/common/errors.js +1 -1
- package/core/common/index.js +10 -10
- package/core/common/permissions.js +318 -318
- package/core/common/schema.js +35 -35
- package/core/common/schemas/groups.create.json +28 -28
- package/core/common/schemas/groups.update.json +28 -28
- package/core/common/schemas/organisations.create.json +28 -28
- package/core/common/schemas/organisations.update.json +49 -49
- package/core/common/schemas/settings.update.json +234 -234
- package/core/common/schemas/tags.create.json +35 -35
- package/core/common/schemas/tags.update.json +35 -35
- package/core/common/schemas/users.update-profile.json +33 -33
- package/core/common/utils.js +45 -45
- package/core.api.js +5 -5
- package/core.client.js +5 -5
- package/core.common.js +1 -1
- package/extras/css/core.variables.scss +38 -38
- package/extras/icons/center-on-feature.svg +315 -315
- package/extras/icons/json.svg +83 -83
- package/extras/icons/map-legend.svg +251 -251
- package/extras/icons/target.svg +37 -37
- package/extras/tours/core/account-profile.js +32 -32
- package/extras/tours/core/account.js +143 -143
- package/extras/tours/core/add-member.js +74 -74
- package/extras/tours/core/add-tag.js +12 -12
- package/extras/tours/core/create-group.js +19 -19
- package/extras/tours/core/create-organisation.js +19 -19
- package/extras/tours/core/create-tag.js +26 -26
- package/extras/tours/core/edit-member-role.js +13 -13
- package/extras/tours/core/groups.js +65 -65
- package/extras/tours/core/join-group.js +13 -13
- package/extras/tours/core/login.js +41 -41
- package/extras/tours/core/members.js +108 -108
- package/extras/tours/core/register.js +61 -61
- package/extras/tours/core/send-reset-password.js +14 -14
- package/extras/tours/core/tags.js +65 -65
- package/extras/tours/map/add-layer.js +28 -28
- package/extras/tours/map/catalog-categories.js +59 -59
- package/extras/tours/map/catalog-panel.js +112 -112
- package/extras/tours/map/connect-layer.js +39 -39
- package/extras/tours/map/create-layer.js +33 -33
- package/extras/tours/map/create-view.js +25 -25
- package/extras/tours/map/fab.js +26 -26
- package/extras/tours/map/import-layer.js +33 -33
- package/extras/tours/map/navigation-bar.js +185 -185
- package/extras/tours/map/side-nav.js +35 -35
- package/extras/tours/map/timeline.js +77 -77
- package/map/api/config/categories.cjs +42 -42
- package/map/api/config/layers.cjs +43 -43
- package/map/api/config/sublegends.cjs +42 -42
- package/map/api/hooks/hooks.catalog.js +85 -85
- package/map/api/hooks/hooks.features.js +84 -84
- package/map/api/hooks/hooks.query.js +361 -361
- package/map/api/hooks/index.js +3 -3
- package/map/api/index.js +18 -18
- package/map/api/marshall.js +31 -31
- package/map/api/models/alerts.model.mongodb.js +7 -7
- package/map/api/models/catalog.model.mongodb.js +14 -14
- package/map/api/models/features.model.mongodb.js +37 -37
- package/map/api/services/alerts/alerts.hooks.js +63 -63
- package/map/api/services/alerts/alerts.service.js +175 -175
- package/map/api/services/catalog/catalog.hooks.js +76 -76
- package/map/api/services/daptiles/daptiles.service.js +475 -475
- package/map/api/services/features/features.hooks.js +40 -40
- package/map/api/services/features/features.service.js +52 -52
- package/map/api/services/geocoder/geocoder.hooks.js +31 -31
- package/map/api/services/geocoder/geocoder.service.js +79 -79
- package/map/api/services/index.js +228 -228
- package/map/client/canvas-draw-context.js +16 -16
- package/map/client/cesium/utils.js +133 -133
- package/map/client/components/KCaptureToolbar.vue +155 -155
- package/map/client/components/KColorLegend.vue +349 -349
- package/map/client/components/KCompass.vue +143 -143
- package/map/client/components/KEditLayerData.vue +85 -85
- package/map/client/components/KFeatureActionButton.vue +119 -119
- package/map/client/components/KFeatureEditor.vue +92 -92
- package/map/client/components/KFeaturesChart.vue +285 -285
- package/map/client/components/KFeaturesFilter.vue +259 -259
- package/map/client/components/KFeaturesTable.vue +99 -99
- package/map/client/components/KLayerEditionToolbar.vue +54 -54
- package/map/client/components/KLayerEditor.vue +48 -48
- package/map/client/components/KLayerStyleEditor.vue +118 -118
- package/map/client/components/KLayerStyleForm.vue +906 -906
- package/map/client/components/KLevelSlider.vue +100 -100
- package/map/client/components/KMeasureTool.vue +568 -568
- package/map/client/components/KPositionIndicator.vue +90 -90
- package/map/client/components/KTimeline.vue +293 -293
- package/map/client/components/KTimezoneMap.vue +158 -158
- package/map/client/components/KUrlLegend.vue +122 -122
- package/map/client/components/catalog/KAddLayer.vue +66 -66
- package/map/client/components/catalog/KBaseLayersSelector.vue +114 -114
- package/map/client/components/catalog/KConnectLayer.vue +323 -323
- package/map/client/components/catalog/KCreateLayer.vue +184 -184
- package/map/client/components/catalog/KCreateView.vue +108 -108
- package/map/client/components/catalog/KFilteredLayerItem.vue +53 -53
- package/map/client/components/catalog/KImportLayer.vue +168 -168
- package/map/client/components/catalog/KLayerCategories.vue +274 -274
- package/map/client/components/catalog/KLayerItem.vue +70 -70
- package/map/client/components/catalog/KLayersPanel.vue +137 -137
- package/map/client/components/catalog/KLayersSelector.vue +78 -78
- package/map/client/components/catalog/KViewSelector.vue +46 -46
- package/map/client/components/catalog/KViewsPanel.vue +123 -123
- package/map/client/components/catalog/KWeatherLayersSelector.vue +129 -129
- package/map/client/components/form/KDirectionField.vue +113 -113
- package/map/client/components/form/KLayerCategoryField.vue +46 -46
- package/map/client/components/form/KLocationField.vue +189 -189
- package/map/client/components/form/KOwsLayerField.vue +130 -130
- package/map/client/components/form/KOwsServiceField.vue +238 -238
- package/map/client/components/form/KTimezoneField.vue +142 -142
- package/map/client/components/index.js +1 -1
- package/map/client/components/legend/KColorScaleLegend.vue +31 -31
- package/map/client/components/legend/KImageLegend.vue +52 -52
- package/map/client/components/legend/KLegend.vue +191 -191
- package/map/client/components/legend/KLegendRenderer.vue +20 -20
- package/map/client/components/legend/KSymbolsLegend.vue +101 -101
- package/map/client/components/location/KGeocodersFilter.vue +44 -44
- package/map/client/components/location/KLocationCardSection.vue +61 -61
- package/map/client/components/location/KLocationMap.vue +280 -280
- package/map/client/components/location/KLocationSearch.vue +144 -144
- package/map/client/components/location/KLocationTip.vue +29 -29
- package/map/client/components/tools/KGeolocateTool.vue +46 -46
- package/map/client/components/tools/KSearchTool.vue +93 -93
- package/map/client/components/widget/KElevationProfile.vue +454 -454
- package/map/client/components/widget/KInformationBox.vue +145 -145
- package/map/client/components/widget/KMapillaryViewer.vue +178 -178
- package/map/client/components/widget/KStackableTimeSeries.vue +214 -214
- package/map/client/components/widget/KTimeSeries.vue +500 -500
- package/map/client/composables/activity.js +88 -88
- package/map/client/composables/highlight.js +214 -214
- package/map/client/composables/index.js +7 -7
- package/map/client/composables/location.js +53 -53
- package/map/client/composables/measure.js +42 -42
- package/map/client/composables/probe.js +133 -133
- package/map/client/composables/selection.js +300 -300
- package/map/client/composables/weather.js +213 -213
- package/map/client/elevation-utils.js +258 -258
- package/map/client/geolocation.js +119 -119
- package/map/client/globe.js +13 -13
- package/map/client/i18n/map_en.json +645 -645
- package/map/client/i18n/map_fr.json +646 -646
- package/map/client/index.js +18 -18
- package/map/client/init.js +80 -80
- package/map/client/leaflet/GSMaPLayer.js +55 -55
- package/map/client/leaflet/GradientPath.js +180 -180
- package/map/client/leaflet/MaskLayer.js +57 -57
- package/map/client/leaflet/TiledFeatureLayer.js +572 -572
- package/map/client/leaflet/TiledMeshLayer.js +486 -486
- package/map/client/leaflet/TiledWindLayer.js +384 -384
- package/map/client/leaflet/utils.js +246 -246
- package/map/client/map.js +15 -15
- package/map/client/mixins/globe/index.js +8 -8
- package/map/client/mixins/globe/mixin.base-globe.js +462 -462
- package/map/client/mixins/globe/mixin.file-layers.js +40 -40
- package/map/client/mixins/globe/mixin.geojson-layers.js +314 -314
- package/map/client/mixins/globe/mixin.globe-activity.js +52 -52
- package/map/client/mixins/globe/mixin.opendap-layers.js +51 -51
- package/map/client/mixins/globe/mixin.popup.js +82 -82
- package/map/client/mixins/globe/mixin.style.js +110 -110
- package/map/client/mixins/globe/mixin.tooltip.js +101 -101
- package/map/client/mixins/index.js +9 -9
- package/map/client/mixins/map/index.js +16 -16
- package/map/client/mixins/map/mixin.base-map.js +592 -592
- package/map/client/mixins/map/mixin.canvas-layers.js +529 -529
- package/map/client/mixins/map/mixin.edit-layers.js +493 -474
- package/map/client/mixins/map/mixin.file-layers.js +49 -49
- package/map/client/mixins/map/mixin.forecast-layers.js +79 -79
- package/map/client/mixins/map/mixin.geojson-layers.js +557 -557
- package/map/client/mixins/map/mixin.georaster-layers.js +114 -114
- package/map/client/mixins/map/mixin.gsmap-layers.js +27 -27
- package/map/client/mixins/map/mixin.heatmap-layers.js +116 -116
- package/map/client/mixins/map/mixin.map-activity.js +38 -38
- package/map/client/mixins/map/mixin.mapillary-layers.js +45 -45
- package/map/client/mixins/map/mixin.popup.js +53 -53
- package/map/client/mixins/map/mixin.style.js +73 -73
- package/map/client/mixins/map/mixin.tiled-mesh-layers.js +120 -120
- package/map/client/mixins/map/mixin.tiled-wind-layers.js +126 -126
- package/map/client/mixins/map/mixin.tooltip.js +47 -47
- package/map/client/mixins/mixin.activity.js +477 -477
- package/map/client/mixins/mixin.catalog-panel.js +26 -26
- package/map/client/mixins/mixin.context.js +262 -262
- package/map/client/mixins/mixin.feature-selection.js +28 -28
- package/map/client/mixins/mixin.feature-service.js +403 -403
- package/map/client/mixins/mixin.infobox.js +29 -29
- package/map/client/mixins/mixin.levels.js +66 -66
- package/map/client/mixins/mixin.style.js +29 -29
- package/map/client/mixins/mixin.weacast.js +212 -212
- package/map/client/pixi-utils.js +256 -256
- package/map/client/readers/index.js +4 -4
- package/map/client/readers/reader.geojson.js +64 -64
- package/map/client/readers/reader.gpx.js +36 -36
- package/map/client/readers/reader.kml.js +36 -36
- package/map/client/readers/reader.shp.js +82 -82
- package/map/client/utils/index.js +3 -3
- package/map/client/utils/utils.js +228 -228
- package/map/client/utils/utils.location.js +45 -45
- package/map/client/utils/utils.schema.js +75 -75
- package/map/client/utils.all.js +3 -3
- package/map/client/utils.globe.js +2 -2
- package/map/client/utils.js +4 -4
- package/map/client/utils.map.js +2 -2
- package/map/common/dynamic-grid-source.js +127 -127
- package/map/common/errors.js +3 -3
- package/map/common/geotiff-grid-source.js +150 -150
- package/map/common/grid.js +509 -509
- package/map/common/index.js +29 -29
- package/map/common/meteo-model-grid-source.js +157 -157
- package/map/common/moment-utils.js +24 -24
- package/map/common/opendap-grid-source.js +261 -261
- package/map/common/opendap-utils.js +247 -247
- package/map/common/permissions.js +11 -11
- package/map/common/schemas/catalog.update.json +28 -28
- package/map/common/time-based-grid-source.js +111 -111
- package/map/common/tms-utils.js +63 -63
- package/map/common/wcs-grid-source.js +93 -93
- package/map/common/wcs-utils.js +167 -167
- package/map/common/weacast-grid-source.js +316 -316
- package/map/common/wfs-utils.js +163 -163
- package/map/common/wms-utils.js +117 -117
- package/map/common/wmts-utils.js +154 -154
- package/map.api.js +5 -5
- package/map.client.globe.js +5 -5
- package/map.client.js +5 -5
- package/map.client.map.js +5 -5
- package/map.common.js +1 -1
- package/map.config.cjs +9 -9
- package/package.json +161 -161
- package/test/api/core/account.test.js +485 -485
- package/test/api/core/client.test.js.skip +37 -37
- package/test/api/core/config/default.cjs +118 -118
- package/test/api/core/config/email-templates/confirmInvitation/html.ejs +18 -18
- package/test/api/core/config/email-templates/identityChange/html.ejs +14 -14
- package/test/api/core/config/email-templates/newDevice/html.ejs +7 -7
- package/test/api/core/config/email-templates/newSubscription/html.ejs +7 -7
- package/test/api/core/config/email-templates/passwordChange/html.ejs +5 -5
- package/test/api/core/config/email-templates/resendVerifySignup/html.ejs +12 -12
- package/test/api/core/config/email-templates/resetPwd/html.ejs +5 -5
- package/test/api/core/config/email-templates/sendResetPwd/html.ejs +12 -12
- package/test/api/core/config/email-templates/verifySignup/html.ejs +3 -3
- package/test/api/core/data/invalid-objects.json +59 -59
- package/test/api/core/data/schema.json +57 -57
- package/test/api/core/data/valid-objects.json +37 -37
- package/test/api/core/hooks.test.js +330 -330
- package/test/api/core/index.js +1 -1
- package/test/api/core/index.test.js +478 -478
- package/test/api/core/push.test.js +197 -197
- package/test/api/core/schemas.test.js +82 -82
- package/test/api/core/storage.test.js +153 -153
- package/test/api/core/team.test.js +670 -670
- package/test/api/core/test-log-2023-12-19.log +7 -0
- package/test/api/core/utils.js +92 -92
- package/test/api/index.js +3 -3
- package/test/api/map/alerts.test.js +560 -560
- package/test/api/map/config/default.cjs +125 -125
- package/test/api/map/config/layers.json +38 -38
- package/test/api/map/data/DescribeCoverage.xml +54 -54
- package/test/api/map/data/adsb.observations.json +131 -131
- package/test/api/map/data/dataset.grb.das +55 -55
- package/test/api/map/data/dataset.grb.dds +17 -17
- package/test/api/map/data/vigicrues.observations.json +47041 -47041
- package/test/api/map/data/vigicrues.stations.json +15421 -15421
- package/test/api/map/data/zones.json +1227 -1227
- package/test/api/map/grid-sources.test.js +313 -313
- package/test/api/map/hooks.test.js +98 -98
- package/test/api/map/index.test.js +563 -563
- package/test/api/map/test-log-2023-11-24.log +121 -0
- package/test/api/map/test-log-2023-12-12.log +29 -0
- package/test/api/map/test-log-2023-12-13.log +5 -0
- package/test/client/core/account.js +36 -36
- package/test/client/core/api.js +361 -361
- package/test/client/core/collection.js +64 -64
- package/test/client/core/index.js +8 -8
- package/test/client/core/layout.js +116 -116
- package/test/client/core/runner.js +224 -224
- package/test/client/core/screens.js +35 -35
- package/test/client/core/time.js +10 -10
- package/test/client/core/utils.js +260 -260
- package/test/client/index.js +3 -3
- package/test/client/map/catalog.js +193 -193
- package/test/client/map/controls.js +41 -41
- package/test/client/map/index.js +4 -4
- package/test/client/map/time.js +24 -24
- package/test/client/map/utils.js +27 -27
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/core/api/application.js.html +0 -1789
- package/coverage/core/api/authentication.js.html +0 -694
- package/coverage/core/api/db.js.html +0 -751
- package/coverage/core/api/hooks/hooks.account.js.html +0 -169
- package/coverage/core/api/hooks/hooks.authentication.js.html +0 -274
- package/coverage/core/api/hooks/hooks.authorisations.js.html +0 -1201
- package/coverage/core/api/hooks/hooks.devices.js.html +0 -211
- package/coverage/core/api/hooks/hooks.groups.js.html +0 -229
- package/coverage/core/api/hooks/hooks.logger.js.html +0 -163
- package/coverage/core/api/hooks/hooks.model.js.html +0 -988
- package/coverage/core/api/hooks/hooks.organisations.js.html +0 -823
- package/coverage/core/api/hooks/hooks.pusher.js.html +0 -730
- package/coverage/core/api/hooks/hooks.query.js.html +0 -838
- package/coverage/core/api/hooks/hooks.schemas.js.html +0 -244
- package/coverage/core/api/hooks/hooks.service.js.html +0 -319
- package/coverage/core/api/hooks/hooks.storage.js.html +0 -193
- package/coverage/core/api/hooks/hooks.tags.js.html +0 -850
- package/coverage/core/api/hooks/hooks.users.js.html +0 -889
- package/coverage/core/api/hooks/index.html +0 -341
- package/coverage/core/api/hooks/index.js.html +0 -130
- package/coverage/core/api/index.html +0 -176
- package/coverage/core/api/index.js.html +0 -148
- package/coverage/core/api/marshall.js.html +0 -355
- package/coverage/core/api/models/groups.model.mongodb.js.html +0 -109
- package/coverage/core/api/models/index.html +0 -161
- package/coverage/core/api/models/organisations.model.mongodb.js.html +0 -94
- package/coverage/core/api/models/tags.model.mongodb.js.html +0 -115
- package/coverage/core/api/models/users.model.mongodb.js.html +0 -115
- package/coverage/core/api/oauth2-handler.js.html +0 -202
- package/coverage/core/api/oauth2-verifier.js.html +0 -355
- package/coverage/core/api/services/account/account.hooks.js.html +0 -196
- package/coverage/core/api/services/account/account.service.js.html +0 -448
- package/coverage/core/api/services/account/index.html +0 -131
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +0 -502
- package/coverage/core/api/services/authorisations/index.html +0 -131
- package/coverage/core/api/services/databases/databases.hooks.js.html +0 -193
- package/coverage/core/api/services/databases/databases.service.js.html +0 -100
- package/coverage/core/api/services/databases/index.html +0 -131
- package/coverage/core/api/services/devices/devices.hooks.js.html +0 -190
- package/coverage/core/api/services/devices/devices.service.js.html +0 -382
- package/coverage/core/api/services/devices/index.html +0 -131
- package/coverage/core/api/services/groups/groups.hooks.js.html +0 -184
- package/coverage/core/api/services/groups/index.html +0 -116
- package/coverage/core/api/services/index.html +0 -116
- package/coverage/core/api/services/index.js.html +0 -472
- package/coverage/core/api/services/mailer/index.html +0 -131
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +0 -190
- package/coverage/core/api/services/mailer/mailer.service.js.html +0 -118
- package/coverage/core/api/services/organisations/index.html +0 -131
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +0 -178
- package/coverage/core/api/services/organisations/organisations.service.js.html +0 -319
- package/coverage/core/api/services/pusher/index.html +0 -146
- package/coverage/core/api/services/pusher/pusher.channels.js.html +0 -94
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +0 -193
- package/coverage/core/api/services/pusher/pusher.service.js.html +0 -1420
- package/coverage/core/api/services/storage/index.html +0 -131
- package/coverage/core/api/services/storage/storage.hooks.js.html +0 -190
- package/coverage/core/api/services/storage/storage.service.js.html +0 -172
- package/coverage/core/api/services/tags/index.html +0 -116
- package/coverage/core/api/services/tags/tags.hooks.js.html +0 -220
- package/coverage/core/api/services/users/index.html +0 -116
- package/coverage/core/api/services/users/users.hooks.js.html +0 -313
- package/coverage/core/common/errors.js.html +0 -88
- package/coverage/core/common/index.html +0 -176
- package/coverage/core/common/index.js.html +0 -115
- package/coverage/core/common/permissions.js.html +0 -1015
- package/coverage/core/common/schema.js.html +0 -190
- package/coverage/core/common/utils.js.html +0 -220
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -491
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/core/api/application.js.html +0 -1789
- package/coverage/lcov-report/core/api/authentication.js.html +0 -694
- package/coverage/lcov-report/core/api/db.js.html +0 -751
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +0 -169
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +0 -274
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +0 -1201
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +0 -211
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +0 -229
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +0 -163
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +0 -988
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -823
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +0 -730
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +0 -838
- package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +0 -244
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +0 -319
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +0 -193
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +0 -850
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +0 -889
- package/coverage/lcov-report/core/api/hooks/index.html +0 -341
- package/coverage/lcov-report/core/api/hooks/index.js.html +0 -130
- package/coverage/lcov-report/core/api/index.html +0 -176
- package/coverage/lcov-report/core/api/index.js.html +0 -148
- package/coverage/lcov-report/core/api/marshall.js.html +0 -355
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +0 -109
- package/coverage/lcov-report/core/api/models/index.html +0 -161
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +0 -94
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +0 -115
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +0 -115
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +0 -202
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +0 -355
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +0 -196
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +0 -448
- package/coverage/lcov-report/core/api/services/account/index.html +0 -131
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +0 -502
- package/coverage/lcov-report/core/api/services/authorisations/index.html +0 -131
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +0 -193
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +0 -100
- package/coverage/lcov-report/core/api/services/databases/index.html +0 -131
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +0 -190
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +0 -382
- package/coverage/lcov-report/core/api/services/devices/index.html +0 -131
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +0 -184
- package/coverage/lcov-report/core/api/services/groups/index.html +0 -116
- package/coverage/lcov-report/core/api/services/index.html +0 -116
- package/coverage/lcov-report/core/api/services/index.js.html +0 -472
- package/coverage/lcov-report/core/api/services/mailer/index.html +0 -131
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +0 -190
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +0 -118
- package/coverage/lcov-report/core/api/services/organisations/index.html +0 -131
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +0 -178
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -319
- package/coverage/lcov-report/core/api/services/pusher/index.html +0 -146
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +0 -94
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +0 -193
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +0 -1420
- package/coverage/lcov-report/core/api/services/storage/index.html +0 -131
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +0 -190
- package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +0 -172
- package/coverage/lcov-report/core/api/services/tags/index.html +0 -116
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +0 -220
- package/coverage/lcov-report/core/api/services/users/index.html +0 -116
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +0 -313
- package/coverage/lcov-report/core/common/errors.js.html +0 -88
- package/coverage/lcov-report/core/common/index.html +0 -176
- package/coverage/lcov-report/core/common/index.js.html +0 -115
- package/coverage/lcov-report/core/common/permissions.js.html +0 -1015
- package/coverage/lcov-report/core/common/schema.js.html +0 -190
- package/coverage/lcov-report/core/common/utils.js.html +0 -220
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -491
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +0 -340
- package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +0 -337
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +0 -1162
- package/coverage/lcov-report/map/api/hooks/index.html +0 -161
- package/coverage/lcov-report/map/api/hooks/index.js.html +0 -94
- package/coverage/lcov-report/map/api/index.html +0 -131
- package/coverage/lcov-report/map/api/index.js.html +0 -139
- package/coverage/lcov-report/map/api/marshall.js.html +0 -178
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +0 -106
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +0 -127
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +0 -202
- package/coverage/lcov-report/map/api/models/index.html +0 -146
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +0 -274
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +0 -610
- package/coverage/lcov-report/map/api/services/alerts/index.html +0 -131
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +0 -313
- package/coverage/lcov-report/map/api/services/catalog/index.html +0 -116
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +0 -1510
- package/coverage/lcov-report/map/api/services/daptiles/index.html +0 -116
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +0 -205
- package/coverage/lcov-report/map/api/services/features/features.service.js.html +0 -241
- package/coverage/lcov-report/map/api/services/features/index.html +0 -131
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +0 -178
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +0 -322
- package/coverage/lcov-report/map/api/services/geocoder/index.html +0 -131
- package/coverage/lcov-report/map/api/services/index.html +0 -116
- package/coverage/lcov-report/map/api/services/index.js.html +0 -760
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +0 -466
- package/coverage/lcov-report/map/common/errors.js.html +0 -94
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +0 -535
- package/coverage/lcov-report/map/common/grid.js.html +0 -1612
- package/coverage/lcov-report/map/common/index.html +0 -371
- package/coverage/lcov-report/map/common/index.js.html +0 -172
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +0 -556
- package/coverage/lcov-report/map/common/moment-utils.js.html +0 -157
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +0 -868
- package/coverage/lcov-report/map/common/opendap-utils.js.html +0 -826
- package/coverage/lcov-report/map/common/permissions.js.html +0 -118
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +0 -418
- package/coverage/lcov-report/map/common/tms-utils.js.html +0 -274
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +0 -364
- package/coverage/lcov-report/map/common/wcs-utils.js.html +0 -586
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +0 -1033
- package/coverage/lcov-report/map/common/wfs-utils.js.html +0 -574
- package/coverage/lcov-report/map/common/wms-utils.js.html +0 -436
- package/coverage/lcov-report/map/common/wmts-utils.js.html +0 -547
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -12501
- package/coverage/map/api/hooks/hooks.catalog.js.html +0 -340
- package/coverage/map/api/hooks/hooks.features.js.html +0 -337
- package/coverage/map/api/hooks/hooks.query.js.html +0 -1162
- package/coverage/map/api/hooks/index.html +0 -161
- package/coverage/map/api/hooks/index.js.html +0 -94
- package/coverage/map/api/index.html +0 -131
- package/coverage/map/api/index.js.html +0 -139
- package/coverage/map/api/marshall.js.html +0 -178
- package/coverage/map/api/models/alerts.model.mongodb.js.html +0 -106
- package/coverage/map/api/models/catalog.model.mongodb.js.html +0 -127
- package/coverage/map/api/models/features.model.mongodb.js.html +0 -202
- package/coverage/map/api/models/index.html +0 -146
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +0 -274
- package/coverage/map/api/services/alerts/alerts.service.js.html +0 -610
- package/coverage/map/api/services/alerts/index.html +0 -131
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +0 -313
- package/coverage/map/api/services/catalog/index.html +0 -116
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +0 -1510
- package/coverage/map/api/services/daptiles/index.html +0 -116
- package/coverage/map/api/services/features/features.hooks.js.html +0 -205
- package/coverage/map/api/services/features/features.service.js.html +0 -241
- package/coverage/map/api/services/features/index.html +0 -131
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +0 -178
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +0 -322
- package/coverage/map/api/services/geocoder/index.html +0 -131
- package/coverage/map/api/services/index.html +0 -116
- package/coverage/map/api/services/index.js.html +0 -760
- package/coverage/map/common/dynamic-grid-source.js.html +0 -466
- package/coverage/map/common/errors.js.html +0 -94
- package/coverage/map/common/geotiff-grid-source.js.html +0 -535
- package/coverage/map/common/grid.js.html +0 -1612
- package/coverage/map/common/index.html +0 -371
- package/coverage/map/common/index.js.html +0 -172
- package/coverage/map/common/meteo-model-grid-source.js.html +0 -556
- package/coverage/map/common/moment-utils.js.html +0 -157
- package/coverage/map/common/opendap-grid-source.js.html +0 -868
- package/coverage/map/common/opendap-utils.js.html +0 -826
- package/coverage/map/common/permissions.js.html +0 -118
- package/coverage/map/common/time-based-grid-source.js.html +0 -418
- package/coverage/map/common/tms-utils.js.html +0 -274
- package/coverage/map/common/wcs-grid-source.js.html +0 -364
- package/coverage/map/common/wcs-utils.js.html +0 -586
- package/coverage/map/common/weacast-grid-source.js.html +0 -1033
- package/coverage/map/common/wfs-utils.js.html +0 -574
- package/coverage/map/common/wms-utils.js.html +0 -436
- package/coverage/map/common/wmts-utils.js.html +0 -547
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -196
- package/coverage/tmp/coverage-19264-1684834146599-0.json +0 -1
- package/coverage/tmp/coverage-2508-1684834182408-0.json +0 -1
- package/coverage/tmp/coverage-25908-1684834189369-0.json +0 -1
- package/coverage/tmp/coverage-32364-1684834189420-0.json +0 -1
- package/coverage/tmp/coverage-36604-1684834189485-0.json +0 -1
- package/coverage/tmp/coverage-40652-1684834182272-0.json +0 -1
- package/coverage/tmp/coverage-48484-1684834182342-0.json +0 -1
- package/coverage/tmp/coverage-51652-1684834189584-0.json +0 -1
- package/coverage/tmp/coverage-9776-1684834189519-0.json +0 -1
- package/test/api/core/test-log-2023-06-05.log +0 -0
- package/test/api/map/test-log-2022-12-01.log +0 -19
- package/test/api/map/test-log-2023-01-05.log +0 -4
- package/test/api/map/test-log-2023-01-09.log +0 -3
- package/test/api/map/test-log-2023-02-05.log +0 -11
- package/test/api/map/test-log-2023-02-14.log +0 -82
- package/test/api/map/test-log-2023-02-28.log +0 -28
- package/test/api/map/test-log-2023-03-02.log +0 -11
- package/test/api/map/test-log-2023-03-06.log +0 -11
- package/test/api/map/test-log-2023-03-07.log +0 -61
- package/test/api/map/test-log-2023-03-31.log +0 -11
- package/test/api/map/test-log-2023-05-23.log +0 -11
- package/test/api/map/test-log-2023-05-24.log +0 -11
package/core/api/marshall.js
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import moment from 'moment'
|
|
2
|
-
import _ from 'lodash'
|
|
3
|
-
|
|
4
|
-
// Helper function to convert comparison operator values to numbers or dates
|
|
5
|
-
export function marshallComparisonFields (queryObject) {
|
|
6
|
-
_.forOwn(queryObject, (value, key) => {
|
|
7
|
-
// Process current attributes or recurse
|
|
8
|
-
if (typeof value === 'object') {
|
|
9
|
-
marshallComparisonFields(value)
|
|
10
|
-
} else if ((key === '$lt') || (key === '$lte') || (key === '$gt') || (key === '$gte')) {
|
|
11
|
-
const number = _.toNumber(value)
|
|
12
|
-
// Update from query string to number if required
|
|
13
|
-
if (!Number.isNaN(number)) {
|
|
14
|
-
queryObject[key] = number
|
|
15
|
-
} else {
|
|
16
|
-
// try for dates as well
|
|
17
|
-
const date = moment.utc(value)
|
|
18
|
-
if (date.isValid()) {
|
|
19
|
-
queryObject[key] = date.toDate()
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
})
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Helper function to convert sort operator values to numbers
|
|
27
|
-
export function marshallSortFields (queryObject) {
|
|
28
|
-
_.forOwn(queryObject, (value, key) => {
|
|
29
|
-
// Process current attributes or recurse
|
|
30
|
-
if (typeof value === 'object') {
|
|
31
|
-
marshallSortFields(value)
|
|
32
|
-
} else {
|
|
33
|
-
const number = _.toNumber(value)
|
|
34
|
-
// Update from query string to number if required
|
|
35
|
-
if (!Number.isNaN(number)) {
|
|
36
|
-
queryObject[key] = number
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
})
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Helper function to convert time objects or array of time objects
|
|
43
|
-
export function marshallTime (item, property) {
|
|
44
|
-
if (!item) return
|
|
45
|
-
const time = _.get(item, property)
|
|
46
|
-
if (!time) return
|
|
47
|
-
if (Array.isArray(time)) {
|
|
48
|
-
_.set(item, property, time.map(t => {
|
|
49
|
-
if (moment.isMoment(t)) return t.toDate()
|
|
50
|
-
else if (typeof t === 'string') return new Date(t)
|
|
51
|
-
else return t
|
|
52
|
-
}))
|
|
53
|
-
} else if (moment.isMoment(time)) {
|
|
54
|
-
_.set(item, property, time.toDate())
|
|
55
|
-
} else if (typeof time === 'string') {
|
|
56
|
-
_.set(item, property, new Date(time))
|
|
57
|
-
} else if (typeof time === 'object') { // Check if complex object such as comparison operator
|
|
58
|
-
// If so this will recurse
|
|
59
|
-
_.keys(time).forEach(key => marshallTime(time, key))
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Helper function to convert time objects or array of time objects for a fixed set of properties on a given object
|
|
64
|
-
export function marshallTimes (object, properties) {
|
|
65
|
-
properties.forEach(property => marshallTime(object, property))
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Helper function to convert time objects or array of time objects
|
|
69
|
-
export function unmarshallTime (item, property) {
|
|
70
|
-
if (!item) return
|
|
71
|
-
const time = _.get(item, property)
|
|
72
|
-
if (!time) return
|
|
73
|
-
if (Array.isArray(time)) {
|
|
74
|
-
_.set(item, property, time.map(t => {
|
|
75
|
-
if (typeof t === 'string') return moment.utc(t)
|
|
76
|
-
else if (typeof t.toISOString === 'function') return moment.utc(t)
|
|
77
|
-
else return t
|
|
78
|
-
}))
|
|
79
|
-
} else if (!moment.isMoment(time)) {
|
|
80
|
-
if (typeof time === 'string') _.set(item, property, moment.utc(time))
|
|
81
|
-
else if (typeof time.toISOString === 'function') _.set(item, property, moment.utc(time))
|
|
82
|
-
// Recurse on complex object such as comparison operator
|
|
83
|
-
else if (typeof time === 'object') _.keys(time).forEach(key => unmarshallTime(time, key))
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Helper function to convert time objects or array of time objects for a fixed set of properties on a given object
|
|
88
|
-
export function unmarshallTimes (object, properties) {
|
|
89
|
-
properties.forEach(property => unmarshallTime(object, property))
|
|
90
|
-
}
|
|
1
|
+
import moment from 'moment'
|
|
2
|
+
import _ from 'lodash'
|
|
3
|
+
|
|
4
|
+
// Helper function to convert comparison operator values to numbers or dates
|
|
5
|
+
export function marshallComparisonFields (queryObject) {
|
|
6
|
+
_.forOwn(queryObject, (value, key) => {
|
|
7
|
+
// Process current attributes or recurse
|
|
8
|
+
if (typeof value === 'object') {
|
|
9
|
+
marshallComparisonFields(value)
|
|
10
|
+
} else if ((key === '$lt') || (key === '$lte') || (key === '$gt') || (key === '$gte')) {
|
|
11
|
+
const number = _.toNumber(value)
|
|
12
|
+
// Update from query string to number if required
|
|
13
|
+
if (!Number.isNaN(number)) {
|
|
14
|
+
queryObject[key] = number
|
|
15
|
+
} else {
|
|
16
|
+
// try for dates as well
|
|
17
|
+
const date = moment.utc(value)
|
|
18
|
+
if (date.isValid()) {
|
|
19
|
+
queryObject[key] = date.toDate()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Helper function to convert sort operator values to numbers
|
|
27
|
+
export function marshallSortFields (queryObject) {
|
|
28
|
+
_.forOwn(queryObject, (value, key) => {
|
|
29
|
+
// Process current attributes or recurse
|
|
30
|
+
if (typeof value === 'object') {
|
|
31
|
+
marshallSortFields(value)
|
|
32
|
+
} else {
|
|
33
|
+
const number = _.toNumber(value)
|
|
34
|
+
// Update from query string to number if required
|
|
35
|
+
if (!Number.isNaN(number)) {
|
|
36
|
+
queryObject[key] = number
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Helper function to convert time objects or array of time objects
|
|
43
|
+
export function marshallTime (item, property) {
|
|
44
|
+
if (!item) return
|
|
45
|
+
const time = _.get(item, property)
|
|
46
|
+
if (!time) return
|
|
47
|
+
if (Array.isArray(time)) {
|
|
48
|
+
_.set(item, property, time.map(t => {
|
|
49
|
+
if (moment.isMoment(t)) return t.toDate()
|
|
50
|
+
else if (typeof t === 'string') return new Date(t)
|
|
51
|
+
else return t
|
|
52
|
+
}))
|
|
53
|
+
} else if (moment.isMoment(time)) {
|
|
54
|
+
_.set(item, property, time.toDate())
|
|
55
|
+
} else if (typeof time === 'string') {
|
|
56
|
+
_.set(item, property, new Date(time))
|
|
57
|
+
} else if (typeof time === 'object') { // Check if complex object such as comparison operator
|
|
58
|
+
// If so this will recurse
|
|
59
|
+
_.keys(time).forEach(key => marshallTime(time, key))
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Helper function to convert time objects or array of time objects for a fixed set of properties on a given object
|
|
64
|
+
export function marshallTimes (object, properties) {
|
|
65
|
+
properties.forEach(property => marshallTime(object, property))
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Helper function to convert time objects or array of time objects
|
|
69
|
+
export function unmarshallTime (item, property) {
|
|
70
|
+
if (!item) return
|
|
71
|
+
const time = _.get(item, property)
|
|
72
|
+
if (!time) return
|
|
73
|
+
if (Array.isArray(time)) {
|
|
74
|
+
_.set(item, property, time.map(t => {
|
|
75
|
+
if (typeof t === 'string') return moment.utc(t)
|
|
76
|
+
else if (typeof t.toISOString === 'function') return moment.utc(t)
|
|
77
|
+
else return t
|
|
78
|
+
}))
|
|
79
|
+
} else if (!moment.isMoment(time)) {
|
|
80
|
+
if (typeof time === 'string') _.set(item, property, moment.utc(time))
|
|
81
|
+
else if (typeof time.toISOString === 'function') _.set(item, property, moment.utc(time))
|
|
82
|
+
// Recurse on complex object such as comparison operator
|
|
83
|
+
else if (typeof time === 'object') _.keys(time).forEach(key => unmarshallTime(time, key))
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Helper function to convert time objects or array of time objects for a fixed set of properties on a given object
|
|
88
|
+
export function unmarshallTimes (object, properties) {
|
|
89
|
+
properties.forEach(property => unmarshallTime(object, property))
|
|
90
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export default function (app, options) {
|
|
2
|
-
const db = options.db || app.db
|
|
3
|
-
options.Model = db.collection('groups')
|
|
4
|
-
// Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
|
|
5
|
-
// We built indices with collation to cover the most used languages, it requires different naming...
|
|
6
|
-
options.Model.createIndex({ name: 1 }, { name: 'name-en', collation: { locale: 'en', strength: 1 } })
|
|
7
|
-
options.Model.createIndex({ name: 1 }, { name: 'name-fr', collation: { locale: 'fr', strength: 1 } })
|
|
8
|
-
}
|
|
1
|
+
export default function (app, options) {
|
|
2
|
+
const db = options.db || app.db
|
|
3
|
+
options.Model = db.collection('groups')
|
|
4
|
+
// Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
|
|
5
|
+
// We built indices with collation to cover the most used languages, it requires different naming...
|
|
6
|
+
options.Model.createIndex({ name: 1 }, { name: 'name-en', collation: { locale: 'en', strength: 1 } })
|
|
7
|
+
options.Model.createIndex({ name: 1 }, { name: 'name-fr', collation: { locale: 'fr', strength: 1 } })
|
|
8
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export default function (app, options) {
|
|
2
|
-
options.Model = app.db.collection('organisations')
|
|
3
|
-
}
|
|
1
|
+
export default function (app, options) {
|
|
2
|
+
options.Model = app.db.collection('organisations')
|
|
3
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export default function (app, options) {
|
|
2
|
-
const db = options.db || app.db
|
|
3
|
-
options.Model = db.collection('tags')
|
|
4
|
-
// Use compound index to have unique pairs scope/value
|
|
5
|
-
options.Model.createIndex({ scope: 1, value: 1 }, { unique: true })
|
|
6
|
-
// Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
|
|
7
|
-
// We built indices with collation to cover the most used languages, it requires different naming...
|
|
8
|
-
options.Model.createIndex({ value: 1 }, { name: 'value-en', collation: { locale: 'en', strength: 1 } })
|
|
9
|
-
options.Model.createIndex({ value: 1 }, { name: 'value-fr', collation: { locale: 'fr', strength: 1 } })
|
|
10
|
-
}
|
|
1
|
+
export default function (app, options) {
|
|
2
|
+
const db = options.db || app.db
|
|
3
|
+
options.Model = db.collection('tags')
|
|
4
|
+
// Use compound index to have unique pairs scope/value
|
|
5
|
+
options.Model.createIndex({ scope: 1, value: 1 }, { unique: true })
|
|
6
|
+
// Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
|
|
7
|
+
// We built indices with collation to cover the most used languages, it requires different naming...
|
|
8
|
+
options.Model.createIndex({ value: 1 }, { name: 'value-en', collation: { locale: 'en', strength: 1 } })
|
|
9
|
+
options.Model.createIndex({ value: 1 }, { name: 'value-fr', collation: { locale: 'fr', strength: 1 } })
|
|
10
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export default function (app, options) {
|
|
2
|
-
options.Model = app.db.collection('users')
|
|
3
|
-
options.Model.createIndex({ email: 1 }, { unique: true })
|
|
4
|
-
// Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
|
|
5
|
-
// We built indices with collation to cover the most used languages, it requires different naming...
|
|
6
|
-
options.Model.createIndex({ 'profile.name': 1 }, { name: 'name-en', collation: { locale: 'en', strength: 1 } })
|
|
7
|
-
options.Model.createIndex({ 'profile.name': 1 }, { name: 'name-fr', collation: { locale: 'fr', strength: 1 } })
|
|
8
|
-
// Inactive user account might expire at a given date
|
|
9
|
-
options.Model.createIndex({ expireAt: 1 }, { expireAfterSeconds: 0 })
|
|
10
|
-
}
|
|
1
|
+
export default function (app, options) {
|
|
2
|
+
options.Model = app.db.collection('users')
|
|
3
|
+
options.Model.createIndex({ email: 1 }, { unique: true })
|
|
4
|
+
// Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
|
|
5
|
+
// We built indices with collation to cover the most used languages, it requires different naming...
|
|
6
|
+
options.Model.createIndex({ 'profile.name': 1 }, { name: 'name-en', collation: { locale: 'en', strength: 1 } })
|
|
7
|
+
options.Model.createIndex({ 'profile.name': 1 }, { name: 'name-fr', collation: { locale: 'fr', strength: 1 } })
|
|
8
|
+
// Inactive user account might expire at a given date
|
|
9
|
+
options.Model.createIndex({ expireAt: 1 }, { expireAfterSeconds: 0 })
|
|
10
|
+
}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import common from 'feathers-hooks-common'
|
|
2
|
-
import { enforcePasswordPolicy } from '../../hooks/index.js'
|
|
3
|
-
|
|
4
|
-
const { when } = common
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
before: {
|
|
8
|
-
all: [],
|
|
9
|
-
find: [],
|
|
10
|
-
get: [],
|
|
11
|
-
create: [when(hook => hook.data.action === 'resetPwdShort' || hook.data.action === 'passwordChange',
|
|
12
|
-
enforcePasswordPolicy({ userAsItem: false, passwordField: 'value.password' }))],
|
|
13
|
-
update: [],
|
|
14
|
-
patch: [],
|
|
15
|
-
remove: []
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
after: {
|
|
19
|
-
all: [],
|
|
20
|
-
find: [],
|
|
21
|
-
get: [],
|
|
22
|
-
create: [],
|
|
23
|
-
update: [],
|
|
24
|
-
patch: [],
|
|
25
|
-
remove: []
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
error: {
|
|
29
|
-
all: [],
|
|
30
|
-
find: [],
|
|
31
|
-
get: [],
|
|
32
|
-
create: [],
|
|
33
|
-
update: [],
|
|
34
|
-
patch: [],
|
|
35
|
-
remove: []
|
|
36
|
-
}
|
|
37
|
-
}
|
|
1
|
+
import common from 'feathers-hooks-common'
|
|
2
|
+
import { enforcePasswordPolicy } from '../../hooks/index.js'
|
|
3
|
+
|
|
4
|
+
const { when } = common
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
before: {
|
|
8
|
+
all: [],
|
|
9
|
+
find: [],
|
|
10
|
+
get: [],
|
|
11
|
+
create: [when(hook => hook.data.action === 'resetPwdShort' || hook.data.action === 'passwordChange',
|
|
12
|
+
enforcePasswordPolicy({ userAsItem: false, passwordField: 'value.password' }))],
|
|
13
|
+
update: [],
|
|
14
|
+
patch: [],
|
|
15
|
+
remove: []
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
after: {
|
|
19
|
+
all: [],
|
|
20
|
+
find: [],
|
|
21
|
+
get: [],
|
|
22
|
+
create: [],
|
|
23
|
+
update: [],
|
|
24
|
+
patch: [],
|
|
25
|
+
remove: []
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
error: {
|
|
29
|
+
all: [],
|
|
30
|
+
find: [],
|
|
31
|
+
get: [],
|
|
32
|
+
create: [],
|
|
33
|
+
update: [],
|
|
34
|
+
patch: [],
|
|
35
|
+
remove: []
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
import { AuthenticationManagementService } from 'feathers-authentication-management'
|
|
2
|
-
import errors from '@feathersjs/errors'
|
|
3
|
-
import emails from 'email-templates'
|
|
4
|
-
import path from 'path'
|
|
5
|
-
import makeDebug from 'debug'
|
|
6
|
-
import _ from 'lodash'
|
|
7
|
-
|
|
8
|
-
const { BadRequest } = errors
|
|
9
|
-
const debug = makeDebug('kdk:core:account:service')
|
|
10
|
-
|
|
11
|
-
class AccountService extends AuthenticationManagementService {
|
|
12
|
-
// add a method to verify whether en email exist or not
|
|
13
|
-
async verifyEmail (params) {
|
|
14
|
-
const usersService = this.app.getService('users')
|
|
15
|
-
const response = await usersService.find({ query: { email: params.email } })
|
|
16
|
-
return { status: response.total === 1 ? 200 : 404 }
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default function (name, app, options) {
|
|
21
|
-
// Keep track of notifier in service options
|
|
22
|
-
options.notifier = async function (type, user, notifierOptions) {
|
|
23
|
-
const userService = app.getService('users')
|
|
24
|
-
// Using OAuth2 providers disallow some operations
|
|
25
|
-
let identityProvider
|
|
26
|
-
for (const provider of app.authenticationProviders) {
|
|
27
|
-
if (user[provider + 'Id']) identityProvider = _.startCase(provider)
|
|
28
|
-
}
|
|
29
|
-
// Password/Identity change is already filtered by the fact the user does not have an old password to be provided
|
|
30
|
-
if (identityProvider && (type === 'resendVerifySignup')) {
|
|
31
|
-
const userWithPassword = await userService.get(user._id.toString())
|
|
32
|
-
if (!userWithPassword.password) {
|
|
33
|
-
return Promise.reject(new BadRequest(`You cannot update your account because it is managed by ${identityProvider}`, {
|
|
34
|
-
translation: {
|
|
35
|
-
key: 'OAUTH2_PROVIDER',
|
|
36
|
-
params: { provider: identityProvider }
|
|
37
|
-
}
|
|
38
|
-
}))
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const mailerService = app.getService('mailer')
|
|
43
|
-
const domainPath = app.get('domain') + '/#/'
|
|
44
|
-
const email = {
|
|
45
|
-
from: mailerService.options.auth.user,
|
|
46
|
-
// When changing email send to the new one so that it can be verified
|
|
47
|
-
to: (type === 'identityChange' ? user.verifyChanges.email : user.email),
|
|
48
|
-
domainPath
|
|
49
|
-
}
|
|
50
|
-
// Build the subject & link to the app to perform the different actions
|
|
51
|
-
let emailTemplateDir = type
|
|
52
|
-
switch (type) {
|
|
53
|
-
case 'resendVerifySignup': // send another email with token for verifying user's email addr
|
|
54
|
-
email.subject = 'Confirm your signup'
|
|
55
|
-
break
|
|
56
|
-
case 'verifySignup': // inform that user's email is now confirmed
|
|
57
|
-
email.subject = 'Thank you, your email has been verified'
|
|
58
|
-
break
|
|
59
|
-
case 'sendResetPwd': // send email with token to reset password
|
|
60
|
-
email.subject = 'Reset your password'
|
|
61
|
-
email.link = domainPath + 'reset-password/' + user.email
|
|
62
|
-
break
|
|
63
|
-
case 'resetPwd': // inform that user's password is now reset
|
|
64
|
-
email.subject = 'Your password was reset'
|
|
65
|
-
break
|
|
66
|
-
case 'passwordChange': // inform that user's password is now changed
|
|
67
|
-
email.subject = 'Your password was changed'
|
|
68
|
-
break
|
|
69
|
-
case 'identityChange': // inform that user's email has now changed
|
|
70
|
-
email.subject = 'Your account information was changed'
|
|
71
|
-
break
|
|
72
|
-
case 'sendInvitation':
|
|
73
|
-
if (_.has(user, 'sponsor.name')) {
|
|
74
|
-
email.sponsor = _.get(user, 'sponsor.name')
|
|
75
|
-
} else if (_.has(user, 'sponsor.id')) {
|
|
76
|
-
try {
|
|
77
|
-
const sponsor = await userService.get(user.sponsor.id)
|
|
78
|
-
email.sponsor = _.get(sponsor, 'profile.name')
|
|
79
|
-
} catch (error) {
|
|
80
|
-
// We will not send the sponsor name in this case
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
email.subject = 'Welcome'
|
|
84
|
-
email.link = domainPath + 'login'
|
|
85
|
-
emailTemplateDir = 'confirmInvitation'
|
|
86
|
-
break
|
|
87
|
-
}
|
|
88
|
-
const templateDir = path.join(mailerService.options.templateDir, emailTemplateDir)
|
|
89
|
-
const template = new emails.EmailTemplate(templateDir)
|
|
90
|
-
// Errors does not seem to be correctly catched by the caller
|
|
91
|
-
// so we catch them here to avoid any problem
|
|
92
|
-
try {
|
|
93
|
-
const emailContent = await template.render({ email, user }, user.locale || 'en-us')
|
|
94
|
-
// Update compiled content
|
|
95
|
-
email.html = emailContent.html
|
|
96
|
-
debug('Sending email ', email)
|
|
97
|
-
return mailerService.create(email)
|
|
98
|
-
} catch (error) {
|
|
99
|
-
debug('Sending email failed', error)
|
|
100
|
-
app.logger.error(error)
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const servicePath = app.get('apiPath') + '/account'
|
|
105
|
-
const userService = app.getService('users')
|
|
106
|
-
|
|
107
|
-
return new AccountService(app, {
|
|
108
|
-
// By default it is impossible to reset password if email is not verified
|
|
109
|
-
// The problem is that if you loose your password before validating your email you are blocked,
|
|
110
|
-
// as a consequence we release this constraint
|
|
111
|
-
skipIsVerifiedCheck: true,
|
|
112
|
-
service: userService.getPath(true),
|
|
113
|
-
path: servicePath,
|
|
114
|
-
notifier: options.notifier,
|
|
115
|
-
reuseResetToken: true
|
|
116
|
-
})
|
|
117
|
-
}
|
|
1
|
+
import { AuthenticationManagementService } from 'feathers-authentication-management'
|
|
2
|
+
import errors from '@feathersjs/errors'
|
|
3
|
+
import emails from 'email-templates'
|
|
4
|
+
import path from 'path'
|
|
5
|
+
import makeDebug from 'debug'
|
|
6
|
+
import _ from 'lodash'
|
|
7
|
+
|
|
8
|
+
const { BadRequest } = errors
|
|
9
|
+
const debug = makeDebug('kdk:core:account:service')
|
|
10
|
+
|
|
11
|
+
class AccountService extends AuthenticationManagementService {
|
|
12
|
+
// add a method to verify whether en email exist or not
|
|
13
|
+
async verifyEmail (params) {
|
|
14
|
+
const usersService = this.app.getService('users')
|
|
15
|
+
const response = await usersService.find({ query: { email: params.email } })
|
|
16
|
+
return { status: response.total === 1 ? 200 : 404 }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default function (name, app, options) {
|
|
21
|
+
// Keep track of notifier in service options
|
|
22
|
+
options.notifier = async function (type, user, notifierOptions) {
|
|
23
|
+
const userService = app.getService('users')
|
|
24
|
+
// Using OAuth2 providers disallow some operations
|
|
25
|
+
let identityProvider
|
|
26
|
+
for (const provider of app.authenticationProviders) {
|
|
27
|
+
if (user[provider + 'Id']) identityProvider = _.startCase(provider)
|
|
28
|
+
}
|
|
29
|
+
// Password/Identity change is already filtered by the fact the user does not have an old password to be provided
|
|
30
|
+
if (identityProvider && (type === 'resendVerifySignup')) {
|
|
31
|
+
const userWithPassword = await userService.get(user._id.toString())
|
|
32
|
+
if (!userWithPassword.password) {
|
|
33
|
+
return Promise.reject(new BadRequest(`You cannot update your account because it is managed by ${identityProvider}`, {
|
|
34
|
+
translation: {
|
|
35
|
+
key: 'OAUTH2_PROVIDER',
|
|
36
|
+
params: { provider: identityProvider }
|
|
37
|
+
}
|
|
38
|
+
}))
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const mailerService = app.getService('mailer')
|
|
43
|
+
const domainPath = app.get('domain') + '/#/'
|
|
44
|
+
const email = {
|
|
45
|
+
from: mailerService.options.auth.user,
|
|
46
|
+
// When changing email send to the new one so that it can be verified
|
|
47
|
+
to: (type === 'identityChange' ? user.verifyChanges.email : user.email),
|
|
48
|
+
domainPath
|
|
49
|
+
}
|
|
50
|
+
// Build the subject & link to the app to perform the different actions
|
|
51
|
+
let emailTemplateDir = type
|
|
52
|
+
switch (type) {
|
|
53
|
+
case 'resendVerifySignup': // send another email with token for verifying user's email addr
|
|
54
|
+
email.subject = 'Confirm your signup'
|
|
55
|
+
break
|
|
56
|
+
case 'verifySignup': // inform that user's email is now confirmed
|
|
57
|
+
email.subject = 'Thank you, your email has been verified'
|
|
58
|
+
break
|
|
59
|
+
case 'sendResetPwd': // send email with token to reset password
|
|
60
|
+
email.subject = 'Reset your password'
|
|
61
|
+
email.link = domainPath + 'reset-password/' + user.email
|
|
62
|
+
break
|
|
63
|
+
case 'resetPwd': // inform that user's password is now reset
|
|
64
|
+
email.subject = 'Your password was reset'
|
|
65
|
+
break
|
|
66
|
+
case 'passwordChange': // inform that user's password is now changed
|
|
67
|
+
email.subject = 'Your password was changed'
|
|
68
|
+
break
|
|
69
|
+
case 'identityChange': // inform that user's email has now changed
|
|
70
|
+
email.subject = 'Your account information was changed'
|
|
71
|
+
break
|
|
72
|
+
case 'sendInvitation':
|
|
73
|
+
if (_.has(user, 'sponsor.name')) {
|
|
74
|
+
email.sponsor = _.get(user, 'sponsor.name')
|
|
75
|
+
} else if (_.has(user, 'sponsor.id')) {
|
|
76
|
+
try {
|
|
77
|
+
const sponsor = await userService.get(user.sponsor.id)
|
|
78
|
+
email.sponsor = _.get(sponsor, 'profile.name')
|
|
79
|
+
} catch (error) {
|
|
80
|
+
// We will not send the sponsor name in this case
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
email.subject = 'Welcome'
|
|
84
|
+
email.link = domainPath + 'login'
|
|
85
|
+
emailTemplateDir = 'confirmInvitation'
|
|
86
|
+
break
|
|
87
|
+
}
|
|
88
|
+
const templateDir = path.join(mailerService.options.templateDir, emailTemplateDir)
|
|
89
|
+
const template = new emails.EmailTemplate(templateDir)
|
|
90
|
+
// Errors does not seem to be correctly catched by the caller
|
|
91
|
+
// so we catch them here to avoid any problem
|
|
92
|
+
try {
|
|
93
|
+
const emailContent = await template.render({ email, user }, user.locale || 'en-us')
|
|
94
|
+
// Update compiled content
|
|
95
|
+
email.html = emailContent.html
|
|
96
|
+
debug('Sending email ', email)
|
|
97
|
+
return mailerService.create(email)
|
|
98
|
+
} catch (error) {
|
|
99
|
+
debug('Sending email failed', error)
|
|
100
|
+
app.logger.error(error)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const servicePath = app.get('apiPath') + '/account'
|
|
105
|
+
const userService = app.getService('users')
|
|
106
|
+
|
|
107
|
+
return new AccountService(app, {
|
|
108
|
+
// By default it is impossible to reset password if email is not verified
|
|
109
|
+
// The problem is that if you loose your password before validating your email you are blocked,
|
|
110
|
+
// as a consequence we release this constraint
|
|
111
|
+
skipIsVerifiedCheck: true,
|
|
112
|
+
service: userService.getPath(true),
|
|
113
|
+
path: servicePath,
|
|
114
|
+
notifier: options.notifier,
|
|
115
|
+
reuseResetToken: true
|
|
116
|
+
})
|
|
117
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { populateSubjects, populateResource } from '../../hooks/index.js'
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
before: {
|
|
5
|
-
all: [],
|
|
6
|
-
find: [],
|
|
7
|
-
get: [],
|
|
8
|
-
create: [populateSubjects, populateResource],
|
|
9
|
-
update: [],
|
|
10
|
-
patch: [],
|
|
11
|
-
remove: [populateSubjects, populateResource]
|
|
12
|
-
},
|
|
13
|
-
|
|
14
|
-
after: {
|
|
15
|
-
all: [],
|
|
16
|
-
find: [],
|
|
17
|
-
get: [],
|
|
18
|
-
create: [],
|
|
19
|
-
update: [],
|
|
20
|
-
patch: [],
|
|
21
|
-
remove: []
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
error: {
|
|
25
|
-
all: [],
|
|
26
|
-
find: [],
|
|
27
|
-
get: [],
|
|
28
|
-
create: [],
|
|
29
|
-
update: [],
|
|
30
|
-
patch: [],
|
|
31
|
-
remove: []
|
|
32
|
-
}
|
|
33
|
-
}
|
|
1
|
+
import { populateSubjects, populateResource } from '../../hooks/index.js'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
before: {
|
|
5
|
+
all: [],
|
|
6
|
+
find: [],
|
|
7
|
+
get: [],
|
|
8
|
+
create: [populateSubjects, populateResource],
|
|
9
|
+
update: [],
|
|
10
|
+
patch: [],
|
|
11
|
+
remove: [populateSubjects, populateResource]
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
after: {
|
|
15
|
+
all: [],
|
|
16
|
+
find: [],
|
|
17
|
+
get: [],
|
|
18
|
+
create: [],
|
|
19
|
+
update: [],
|
|
20
|
+
patch: [],
|
|
21
|
+
remove: []
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
error: {
|
|
25
|
+
all: [],
|
|
26
|
+
find: [],
|
|
27
|
+
get: [],
|
|
28
|
+
create: [],
|
|
29
|
+
update: [],
|
|
30
|
+
patch: [],
|
|
31
|
+
remove: []
|
|
32
|
+
}
|
|
33
|
+
}
|