@northern.tech/store 0.5.2 → 0.5.3
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/dist/actions.cjs +47 -0
- package/dist/actions.cjs.map +1 -1
- package/dist/actions.d.cts +6 -2
- package/dist/actions.d.ts +6 -2
- package/dist/actions.js +10 -10
- package/dist/api/general-api.cjs +1 -1
- package/dist/api/general-api.cjs.map +1 -1
- package/dist/api/general-api.d.cts +8 -8
- package/dist/api/general-api.d.ts +8 -8
- package/dist/api/general-api.js +4 -4
- package/dist/api/users-api.cjs +1 -1
- package/dist/api/users-api.cjs.map +1 -1
- package/dist/api/users-api.d.cts +1 -1
- package/dist/api/users-api.d.ts +1 -1
- package/dist/api/users-api.js +5 -5
- package/dist/appSlice/constants.cjs +1 -0
- package/dist/appSlice/constants.cjs.map +1 -1
- package/dist/appSlice/constants.d.cts +5 -0
- package/dist/appSlice/constants.d.ts +5 -0
- package/dist/appSlice/constants.js +1 -1
- package/dist/appSlice/index.cjs +1 -0
- package/dist/appSlice/index.cjs.map +1 -1
- package/dist/appSlice/index.js +3 -3
- package/dist/appSlice/mocks.cjs +1 -0
- package/dist/appSlice/mocks.cjs.map +1 -1
- package/dist/appSlice/mocks.js +3 -3
- package/dist/appSlice/thunks.cjs +76 -20
- package/dist/appSlice/thunks.cjs.map +1 -1
- package/dist/appSlice/thunks.js +25 -25
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.js +3 -3
- package/dist/{chunk-MZNANSS2.js → chunk-4DOSYAJY.js} +2 -2
- package/dist/{chunk-R6KRH2IY.js → chunk-4UJXT6RF.js} +3 -3
- package/dist/{chunk-VUFRP6P3.js → chunk-5HYHE4HO.js} +2 -2
- package/dist/chunk-5HYHE4HO.js.map +1 -0
- package/dist/{chunk-ZJW3QIPM.js → chunk-66NK2ZV2.js} +2 -2
- package/dist/{chunk-PGFVHKP5.js → chunk-AVCIWAZB.js} +2 -2
- package/dist/{chunk-RS37Y2PQ.js → chunk-BNSSPYCA.js} +4 -4
- package/dist/chunk-BNSSPYCA.js.map +1 -0
- package/dist/{chunk-UE5N5VO3.js → chunk-CEEXZF5E.js} +3 -3
- package/dist/{chunk-UGSLGUS6.js → chunk-CWZKWW74.js} +2 -2
- package/dist/{chunk-3P3IE42O.js → chunk-DE25YP6N.js} +62 -54
- package/dist/chunk-DE25YP6N.js.map +1 -0
- package/dist/{chunk-QYLGIR4W.js → chunk-DXJ2WS3N.js} +3 -2
- package/dist/chunk-DXJ2WS3N.js.map +1 -0
- package/dist/{chunk-H5FAPMJJ.js → chunk-DYN7AU7R.js} +9 -9
- package/dist/{chunk-JXQUFKID.js → chunk-GRVTVLIZ.js} +7 -2
- package/dist/chunk-GRVTVLIZ.js.map +1 -0
- package/dist/{chunk-KC7SKI3U.js → chunk-HLTP624H.js} +8 -5
- package/dist/{chunk-KC7SKI3U.js.map → chunk-HLTP624H.js.map} +1 -1
- package/dist/{chunk-F26IKSML.js → chunk-I6JE3OLT.js} +8 -8
- package/dist/{chunk-ABJLRDCO.js → chunk-IY76MO6R.js} +2 -2
- package/dist/{chunk-V3QEONX7.js → chunk-J74LNK6P.js} +11 -11
- package/dist/{chunk-QKPV5RRN.js → chunk-JOK26PI7.js} +51 -18
- package/dist/chunk-JOK26PI7.js.map +1 -0
- package/dist/{chunk-KJNNEDRV.js → chunk-JZXNRDO2.js} +2 -2
- package/dist/{chunk-MSOXMRF7.js → chunk-KGSJ7CSA.js} +12 -3
- package/dist/{chunk-MSOXMRF7.js.map → chunk-KGSJ7CSA.js.map} +1 -1
- package/dist/{chunk-OOICURFL.js → chunk-KJJ47UIO.js} +48 -2
- package/dist/chunk-KJJ47UIO.js.map +1 -0
- package/dist/{chunk-7C4SQBEE.js → chunk-MRXTMI6O.js} +1 -1
- package/dist/chunk-MRXTMI6O.js.map +1 -0
- package/dist/{chunk-HFOTAPIJ.js → chunk-PY6ID7TL.js} +2 -1
- package/dist/chunk-PY6ID7TL.js.map +1 -0
- package/dist/{chunk-SCZLNFB5.js → chunk-VCTZ25Q5.js} +9 -9
- package/dist/{chunk-YY6SKZDF.js → chunk-W37ETKI6.js} +3 -12
- package/dist/chunk-W37ETKI6.js.map +1 -0
- package/dist/{chunk-QHK7GGV4.js → chunk-ZZ3YDCYZ.js} +3 -3
- package/dist/commonConstants.cjs.map +1 -1
- package/dist/commonConstants.d.cts +6 -5
- package/dist/commonConstants.d.ts +6 -5
- package/dist/commonConstants.js +2 -2
- package/dist/commonSelectors.cjs +8 -18
- package/dist/commonSelectors.cjs.map +1 -1
- package/dist/commonSelectors.js +9 -9
- package/dist/constants.cjs +1 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +2 -2
- package/dist/deploymentsSlice/constants.js +2 -2
- package/dist/deploymentsSlice/index.cjs.map +1 -1
- package/dist/deploymentsSlice/index.d.cts +2 -2
- package/dist/deploymentsSlice/index.d.ts +2 -2
- package/dist/deploymentsSlice/index.js +3 -3
- package/dist/deploymentsSlice/mocks.cjs.map +1 -1
- package/dist/deploymentsSlice/mocks.js +3 -3
- package/dist/deploymentsSlice/selectors.cjs +6 -0
- package/dist/deploymentsSlice/selectors.cjs.map +1 -1
- package/dist/deploymentsSlice/selectors.d.cts +22 -1
- package/dist/deploymentsSlice/selectors.d.ts +22 -1
- package/dist/deploymentsSlice/selectors.js +5 -3
- package/dist/deploymentsSlice/thunks.cjs +78 -20
- package/dist/deploymentsSlice/thunks.cjs.map +1 -1
- package/dist/deploymentsSlice/thunks.d.cts +14 -1
- package/dist/deploymentsSlice/thunks.d.ts +14 -1
- package/dist/deploymentsSlice/thunks.js +27 -25
- package/dist/devicesSlice/constants.js +2 -2
- package/dist/devicesSlice/index.js +3 -3
- package/dist/devicesSlice/mocks.js +3 -3
- package/dist/devicesSlice/selectors.cjs.map +1 -1
- package/dist/devicesSlice/selectors.js +3 -3
- package/dist/devicesSlice/thunks.cjs +76 -20
- package/dist/devicesSlice/thunks.cjs.map +1 -1
- package/dist/devicesSlice/thunks.js +25 -25
- package/dist/liststatehook.cjs +6 -3
- package/dist/liststatehook.cjs.map +1 -1
- package/dist/liststatehook.d.cts +4 -2
- package/dist/liststatehook.d.ts +4 -2
- package/dist/liststatehook.js +3 -3
- package/dist/locationutils.cjs +6 -3
- package/dist/locationutils.cjs.map +1 -1
- package/dist/locationutils.d.cts +3 -1
- package/dist/locationutils.d.ts +3 -1
- package/dist/locationutils.js +3 -3
- package/dist/monitorSlice/index.js +3 -3
- package/dist/monitorSlice/mocks.js +3 -3
- package/dist/monitorSlice/thunks.cjs +56 -9
- package/dist/monitorSlice/thunks.cjs.map +1 -1
- package/dist/monitorSlice/thunks.js +21 -21
- package/dist/onboardingSlice/thunks.cjs +76 -20
- package/dist/onboardingSlice/thunks.cjs.map +1 -1
- package/dist/onboardingSlice/thunks.js +25 -25
- package/dist/organizationSlice/constants.js +2 -2
- package/dist/organizationSlice/index.js +3 -3
- package/dist/organizationSlice/mocks.js +3 -3
- package/dist/organizationSlice/selectors.cjs +0 -20
- package/dist/organizationSlice/selectors.cjs.map +1 -1
- package/dist/organizationSlice/selectors.d.cts +1 -155
- package/dist/organizationSlice/selectors.d.ts +1 -155
- package/dist/organizationSlice/selectors.js +3 -5
- package/dist/organizationSlice/thunks.cjs +99 -43
- package/dist/organizationSlice/thunks.cjs.map +1 -1
- package/dist/organizationSlice/thunks.d.cts +5 -5
- package/dist/organizationSlice/thunks.d.ts +5 -5
- package/dist/organizationSlice/thunks.js +25 -25
- package/dist/releasesSlice/index.cjs +46 -0
- package/dist/releasesSlice/index.cjs.map +1 -1
- package/dist/releasesSlice/index.d.cts +51 -3
- package/dist/releasesSlice/index.d.ts +51 -3
- package/dist/releasesSlice/index.js +3 -3
- package/dist/releasesSlice/mocks.cjs +46 -0
- package/dist/releasesSlice/mocks.cjs.map +1 -1
- package/dist/releasesSlice/mocks.d.cts +13 -0
- package/dist/releasesSlice/mocks.d.ts +13 -0
- package/dist/releasesSlice/mocks.js +3 -3
- package/dist/releasesSlice/selectors.cjs +13 -0
- package/dist/releasesSlice/selectors.cjs.map +1 -1
- package/dist/releasesSlice/selectors.d.cts +186 -1
- package/dist/releasesSlice/selectors.d.ts +186 -1
- package/dist/releasesSlice/selectors.js +12 -4
- package/dist/releasesSlice/thunks.cjs +99 -17
- package/dist/releasesSlice/thunks.cjs.map +1 -1
- package/dist/releasesSlice/thunks.d.cts +68 -3
- package/dist/releasesSlice/thunks.d.ts +68 -3
- package/dist/releasesSlice/thunks.js +26 -22
- package/dist/selectors.cjs +19 -20
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +5 -3
- package/dist/selectors.d.ts +5 -3
- package/dist/selectors.js +19 -11
- package/dist/sockethook.cjs.map +1 -1
- package/dist/sockethook.js +2 -2
- package/dist/store.cjs +47 -0
- package/dist/store.cjs.map +1 -1
- package/dist/store.d.cts +11 -110
- package/dist/store.d.ts +11 -110
- package/dist/store.js +12 -12
- package/dist/storehooks.cjs +142 -54
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.js +26 -25
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +146 -53
- package/dist/thunks.cjs.map +1 -1
- package/dist/thunks.d.cts +3 -3
- package/dist/thunks.d.ts +3 -3
- package/dist/thunks.js +33 -27
- package/dist/useDeploymentDevice.cjs +76 -20
- package/dist/useDeploymentDevice.cjs.map +1 -1
- package/dist/useDeploymentDevice.js +25 -25
- package/dist/usersSlice/constants.js +2 -2
- package/dist/usersSlice/index.js +3 -3
- package/dist/usersSlice/mocks.js +3 -3
- package/dist/usersSlice/selectors.cjs.map +1 -1
- package/dist/usersSlice/selectors.js +4 -4
- package/dist/usersSlice/thunks.cjs +78 -22
- package/dist/usersSlice/thunks.cjs.map +1 -1
- package/dist/usersSlice/thunks.d.cts +18 -10
- package/dist/usersSlice/thunks.d.ts +18 -10
- package/dist/usersSlice/thunks.js +27 -27
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +3 -3
- package/package.json +5 -5
- package/dist/chunk-3P3IE42O.js.map +0 -1
- package/dist/chunk-7C4SQBEE.js.map +0 -1
- package/dist/chunk-HFOTAPIJ.js.map +0 -1
- package/dist/chunk-JXQUFKID.js.map +0 -1
- package/dist/chunk-OOICURFL.js.map +0 -1
- package/dist/chunk-QKPV5RRN.js.map +0 -1
- package/dist/chunk-QYLGIR4W.js.map +0 -1
- package/dist/chunk-RS37Y2PQ.js.map +0 -1
- package/dist/chunk-VUFRP6P3.js.map +0 -1
- package/dist/chunk-YY6SKZDF.js.map +0 -1
- /package/dist/{chunk-MZNANSS2.js.map → chunk-4DOSYAJY.js.map} +0 -0
- /package/dist/{chunk-R6KRH2IY.js.map → chunk-4UJXT6RF.js.map} +0 -0
- /package/dist/{chunk-ZJW3QIPM.js.map → chunk-66NK2ZV2.js.map} +0 -0
- /package/dist/{chunk-PGFVHKP5.js.map → chunk-AVCIWAZB.js.map} +0 -0
- /package/dist/{chunk-UE5N5VO3.js.map → chunk-CEEXZF5E.js.map} +0 -0
- /package/dist/{chunk-UGSLGUS6.js.map → chunk-CWZKWW74.js.map} +0 -0
- /package/dist/{chunk-H5FAPMJJ.js.map → chunk-DYN7AU7R.js.map} +0 -0
- /package/dist/{chunk-F26IKSML.js.map → chunk-I6JE3OLT.js.map} +0 -0
- /package/dist/{chunk-ABJLRDCO.js.map → chunk-IY76MO6R.js.map} +0 -0
- /package/dist/{chunk-V3QEONX7.js.map → chunk-J74LNK6P.js.map} +0 -0
- /package/dist/{chunk-KJNNEDRV.js.map → chunk-JZXNRDO2.js.map} +0 -0
- /package/dist/{chunk-SCZLNFB5.js.map → chunk-VCTZ25Q5.js.map} +0 -0
- /package/dist/{chunk-QHK7GGV4.js.map → chunk-ZZ3YDCYZ.js.map} +0 -0
package/dist/storehooks.js
CHANGED
|
@@ -15,68 +15,68 @@ import {
|
|
|
15
15
|
getUserSettings as getUserSettings2,
|
|
16
16
|
saveGlobalSettings,
|
|
17
17
|
saveUserSettings
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-DE25YP6N.js";
|
|
19
19
|
import {
|
|
20
20
|
getReleases
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-JOK26PI7.js";
|
|
22
|
+
import "./chunk-DYN7AU7R.js";
|
|
23
|
+
import "./chunk-J74LNK6P.js";
|
|
24
|
+
import "./chunk-ZZ3YDCYZ.js";
|
|
25
|
+
import "./chunk-BNSSPYCA.js";
|
|
26
26
|
import {
|
|
27
27
|
actions_default
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
28
|
+
} from "./chunk-I6JE3OLT.js";
|
|
29
|
+
import "./chunk-KJJ47UIO.js";
|
|
30
|
+
import "./chunk-CWZKWW74.js";
|
|
31
|
+
import "./chunk-4DOSYAJY.js";
|
|
32
|
+
import "./chunk-AVCIWAZB.js";
|
|
33
33
|
import "./chunk-VANBSJS5.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-5HYHE4HO.js";
|
|
35
|
+
import "./chunk-DXJ2WS3N.js";
|
|
36
|
+
import "./chunk-IY76MO6R.js";
|
|
37
37
|
import {
|
|
38
38
|
getSessionInfo
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import "./chunk-
|
|
39
|
+
} from "./chunk-66NK2ZV2.js";
|
|
40
|
+
import "./chunk-HLTP624H.js";
|
|
41
41
|
import "./chunk-NMAXZ3ZY.js";
|
|
42
42
|
import {
|
|
43
43
|
getIsEnterprise,
|
|
44
44
|
getOnboardingState,
|
|
45
45
|
getUserCapabilities
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-VCTZ25Q5.js";
|
|
47
|
+
import "./chunk-KGSJ7CSA.js";
|
|
48
48
|
import {
|
|
49
49
|
getGlobalSettings,
|
|
50
50
|
getOfflineThresholdSettings,
|
|
51
51
|
getUserSettings
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-4UJXT6RF.js";
|
|
53
53
|
import {
|
|
54
54
|
getIsServiceProvider
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-W37ETKI6.js";
|
|
56
56
|
import "./chunk-YO22XLHI.js";
|
|
57
57
|
import "./chunk-JIS4PA3R.js";
|
|
58
58
|
import {
|
|
59
59
|
getDevicesByStatus,
|
|
60
60
|
getSortedFilteringAttributes
|
|
61
|
-
} from "./chunk-
|
|
62
|
-
import "./chunk-
|
|
61
|
+
} from "./chunk-JZXNRDO2.js";
|
|
62
|
+
import "./chunk-GRVTVLIZ.js";
|
|
63
63
|
import {
|
|
64
64
|
getFeatures
|
|
65
65
|
} from "./chunk-BYUPW7RA.js";
|
|
66
66
|
import {
|
|
67
67
|
getComparisonCompatibleVersion,
|
|
68
68
|
stringToBoolean
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-CEEXZF5E.js";
|
|
70
70
|
import {
|
|
71
71
|
DEPLOYMENT_STATES,
|
|
72
72
|
DEVICE_STATES,
|
|
73
73
|
TIMEOUTS,
|
|
74
74
|
timeUnits
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-MRXTMI6O.js";
|
|
76
76
|
import "./chunk-2DYA3X77.js";
|
|
77
77
|
import "./chunk-FAJ3I2UQ.js";
|
|
78
78
|
import "./chunk-ZKAH3APE.js";
|
|
79
|
-
import "./chunk-
|
|
79
|
+
import "./chunk-PY6ID7TL.js";
|
|
80
80
|
|
|
81
81
|
// src/storehooks.ts
|
|
82
82
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -89,6 +89,7 @@ var cookies = new Cookies();
|
|
|
89
89
|
dayjs.extend(durationDayJs);
|
|
90
90
|
var { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = actions_default;
|
|
91
91
|
var featureFlags = [
|
|
92
|
+
"hasAiEnabled",
|
|
92
93
|
"hasAuditlogs",
|
|
93
94
|
"hasMultitenancy",
|
|
94
95
|
"hasDeltaProgress",
|
package/dist/storehooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimit,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getLatestReleaseInfo,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport { getComparisonCompatibleVersion, stringToBoolean } from './utils';\n\nconst cookies = new Cookies();\ndayjs.extend(durationDayJs);\n\nconst { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io'),\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n return Promise.all([\n dispatch(getDeviceAttributes()),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.accepted })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.pending })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.preauth })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.rejected })),\n dispatch(getDynamicGroups()),\n dispatch(getGroups()),\n dispatch(getIntegrations()),\n dispatch(getReleases()),\n dispatch(getDeviceLimit()),\n dispatch(getRoles())\n ]);\n }, [dispatch, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
|
|
1
|
+
{"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimit,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getLatestReleaseInfo,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport { getComparisonCompatibleVersion, stringToBoolean } from './utils';\n\nconst cookies = new Cookies();\ndayjs.extend(durationDayJs);\n\nconst { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAiEnabled',\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n return Promise.all([\n dispatch(getDeviceAttributes()),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.accepted })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.pending })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.preauth })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.rejected })),\n dispatch(getDynamicGroups()),\n dispatch(getGroups()),\n dispatch(getIntegrations()),\n dispatch(getReleases()),\n dispatch(getDeviceLimit()),\n dispatch(getRoles())\n ]);\n }, [dispatch, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AACzD,SAAS,aAAa,mBAAmB;AAEzC,SAAS,2BAA2B;AACpC,OAAO,WAAW;AAClB,OAAO,mBAAmB;AAC1B,OAAO,aAAa;AAsCpB,IAAM,UAAU,IAAI,QAAQ;AAC5B,MAAM,OAAO,aAAa;AAE1B,IAAM,EAAE,oBAAoB,0BAA0B,kBAAkB,2BAA2B,IAAI;AAEvG,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,mBAAmB,CAAC,UAAU,uBAAuB,eAAe,sBAAsB,oBAAoB,UAAU,gBAAgB,aAAa;AAEpJ,IAAM,uBAAuB,MAAM,CAAC,UAAU,aAAa;AAChE,QAAM,QAAQ,SAAS;AACvB,MAAI,qBAAqB,MAAM,WAAW,YAAY,CAAC,CAAC,KAAK,MAAM,OAAO,aAAa,QAAQ,oBAAoB,KAAK,OAAO;AAC/H,MAAI,mBAAmB;AACvB,MAAI,kBAAkB,CAAC;AACvB,MAAI,sBAAsB,CAAC;AAC3B,MAAI,cAAc,CAAC;AACnB,MAAI,oBAAoB;AACtB,UAAM;AAAA,MACJ,WAAW,CAAC;AAAA,MACZ,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,uBAAmB,QAAQ;AAC3B,sBAAkB,iBAAiB,OAAO,CAAC,MAAM,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,mBAAmB,IAAI,KAAK,MAAM,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;AAChI,0BAAsB;AAAA,MACpB,GAAG,aAAa,OAAO,CAAC,MAAM,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,gBAAgB,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,MACjG,UAAU,gBAAgB,SAAS,QAAQ,KAAK,OAAO,SAAS,SAAS,SAAS,kBAAkB;AAAA,IACtG;AACA,yBAAqB,CAAC,gBAAgB,oBAAoB,QAAQ,KAAK,gBAAgB,iBAAiB,KAAK;AAC7G,kBAAc;AAAA,MACZ,MAAM,MAAM,mBAAmB,OAAO,CAAC,CAAC,IAAI,KAAK,mBAAmB,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,MACnG,WAAW;AAAA,QACT,aAAa,+BAA+B,kBAAkB;AAAA,QAC9D,iBAAiB,+BAA+B,aAAa;AAAA,QAC7D,mBAAmB;AAAA,QACnB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACA,SAAO,QAAQ,IAAI;AAAA,IACjB,SAAS,gBAAa,qBAAqB,eAAe,CAAC,CAAC;AAAA,IAC5D,SAAS,gBAAa,sBAAsB,kBAAkB,CAAC;AAAA,IAC/D,SAAS,gBAAa,oBAAoB,gBAAgB,CAAC;AAAA,IAC3D,SAAS,gBAAa,YAAY,mBAAmB,CAAC;AAAA,IACtD,SAAS,gBAAa,sBAAsB,EAAE,GAAG,YAAY,WAAW,aAAa,YAAY,KAAK,CAAC,CAAC;AAAA,IACxG,SAAS,gBAAa,mBAAmB,eAAe,CAAC;AAAA,IACzD,SAAS,qBAAqB,CAAC;AAAA,EACjC,CAAC;AACH;AAEA,IAAM,0BAA0B,CAAC,EAAE,iBAAiB,UAAU,iBAAiB,MAAM,MAAM;AACzF,MAAI,CAAC,gBAAgB,YAAY,gBAAgB,UAAU;AACzD,WAAO;AAAA,EACT;AAIA,SAAO,gBAAgB,cAAc,QAAQ,EAAE,UAAU,OAAO,CAAC,MAAM,OAAO;AAC5E,SAAK,KAAK,SAAS,cAAc,EAAE,CAAC,CAAC;AACrC,WAAO;AAAA,EACT,GAAG,KAAK;AACV;AAEO,IAAM,aAAa,YAAU;AAClC,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,eAAe,YAAY,eAAe;AAChD,QAAM,EAAE,iBAAiB,SAAS,IAAI,YAAY,WAAW;AAC7D,QAAM,kBAAkB,YAAY,kBAA0B;AAC9D,QAAM,kBAAkB,YAAY,kBAA0B;AAC9D,QAAM,EAAE,kBAAkB,CAAC,GAAG,sBAAsB,oBAAoB,WAAW,CAAC,EAAE,IAAI,YAAY,eAAuB;AAC7H,QAAM,EAAE,eAAe,IAAI,YAAY,mBAAmB;AAC1D,QAAM,EAAE,UAAU,aAAa,IAAI,YAAY,2BAA2B;AAC1E,QAAM,EAAE,aAAa,IAAI,YAAY,iBAAyB;AAC9D,QAAM,EAAE,mBAAmB,IAAI,YAAY,4BAA4B;AACvE,QAAM,oBAAoB,YAAY,oBAAoB;AAC1D,QAAM,kBAAkB,OAAO,KAAK;AACpC,QAAM,kBAAkB,OAAO,KAAK;AAEpC,QAAM,mBAAmB,YAAY,MAAM;AACzC,UAAM,QAAQ;AAAA,MACZ,SAAS,qBAAqB,CAAC;AAAA,MAC/B,SAASA,iBAAgB,CAAC;AAAA,MAC1B,SAASC,mBAAkB,CAAC;AAAA,MAC5B,SAAS,yBAAyB,gBAAgB,QAAQ,IAAI,uBAAuB,CAAC,CAAC,CAAC;AAAA,IAC1F;AACA,UAAM,eAAe,mBAAmB,YAAY;AACpD,QAAI,cAAc;AAChB,YAAM,KAAK,SAAS,oBAAoB,CAAC,CAAC;AAAA,IAC5C;AACA,WAAO,QAAQ,IAAI,KAAK;AAAA,EAC1B,GAAG,CAAC,UAAU,iBAAiB,UAAU,YAAY,CAAC;AAEtD,QAAM,kBAAkB,YAAY,MAAM;AACxC,QAAI,mBAAmB;AACrB,aAAO,QAAQ,QAAQ,SAAS,SAAS,CAAC,CAAC;AAAA,IAC7C;AACA,WAAO,QAAQ,IAAI;AAAA,MACjB,SAAS,oBAAoB,CAAC;AAAA,MAC9B,SAAS,uBAAuB,EAAE,QAAQ,kBAAkB,UAAU,cAAc,MAAM,CAAC,CAAC;AAAA,MAC5F,SAAS,uBAAuB,EAAE,QAAQ,kBAAkB,WAAW,CAAC,CAAC;AAAA,MACzE,SAASC,oBAAmB,EAAE,QAAQ,cAAc,SAAS,CAAC,CAAC;AAAA,MAC/D,SAASA,oBAAmB,EAAE,QAAQ,cAAc,QAAQ,CAAC,CAAC;AAAA,MAC9D,SAASA,oBAAmB,EAAE,QAAQ,cAAc,QAAQ,CAAC,CAAC;AAAA,MAC9D,SAASA,oBAAmB,EAAE,QAAQ,cAAc,SAAS,CAAC,CAAC;AAAA,MAC/D,SAAS,iBAAiB,CAAC;AAAA,MAC3B,SAAS,UAAU,CAAC;AAAA,MACpB,SAAS,gBAAgB,CAAC;AAAA,MAC1B,SAAS,YAAY,CAAC;AAAA,MACtB,SAAS,eAAe,CAAC;AAAA,MACzB,SAAS,SAAS,CAAC;AAAA,IACrB,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,iBAAiB,CAAC;AAEhC,QAAM,mBAAmB,YAAY,MAAM;AACzC,UAAM,WAAW,CAAC;AAClB,QAAI,QAAQ,IAAI,KAAK,KAAK,OAAO,uBAAuB,aAAa;AACnE,eAAS,uBAAuB;AAAA,IAClC;AACA,QAAI,QAAQ;AAAA,MACV,SAAS,mBAAmB,EAAE,oBAAoB,gBAAgB,IAAI,aAAW,EAAE,WAAW,OAAO,KAAK,OAAO,OAAO,MAAM,EAAE,EAAE,CAAC,CAAC;AAAA,MACpI,SAAS,iBAAiB,QAAQ,CAAC;AAAA;AAAA,MACnC,SAAS,iBAAiB,QAAQ,CAAC;AAAA,IACrC;AAEA,YAAQ,wBAAwB,EAAE,iBAAiB,UAAU,OAAO,gBAAgB,CAAC;AAErF,QAAI,kBAAkB,gBAAgB,iBAAiB,UAAU,MAAM;AACrE,YAAM,WAAW,MAAM,SAAS,UAAU,YAAY;AACtD,YAAM,OAAO,SAAS,OAAO;AAC7B,UAAI,OAAO,GAAG;AACZ,cAAM,KAAK,QAAQ,QAAQ,WAAW,MAAM,SAAS,2BAA2B,IAAI,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC;AAAA,MAChH,OAAO;AACL,cAAM,cAAc,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC;AAChD,cAAM,KAAK,SAAS,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,aAAa,cAAc,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;AAAA,MACxH;AAAA,IACF;AAKA,UAAM,kBAAkB,mBAAmB,OAAO,eAAa,CAAC,CAAC,MAAM,aAAa,QAAQ,EAAE,SAAS,SAAS,CAAC;AACjH,QAAI,CAAC,gBAAgB,gBAAgB,QAAQ;AAC3C,YAAM,KAAK,SAAS,mBAAmB,EAAE,cAAc,EAAE,WAAW,gBAAgB,CAAC,GAAG,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;AAAA,IACjH,WAAW,OAAO,iBAAiB,UAAU;AAC3C,UAAI,YAAY;AAChB,UAAI,cAAc,aAAa;AAC7B,oBAAY;AAAA,MACd;AACA,YAAM,KAAK,SAAS,mBAAmB,EAAE,cAAc,EAAE,WAAW,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;AAAA,IAC7F;AACA,WAAO,QAAQ,IAAI,KAAK;AAAA,EAC1B,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,oBAAoB;AAAA,IACxB,MACE,gBAAgB,EACb,KAAK,gBAAgB,EAErB,MAAM,SAAO,QAAQ,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAClD,KAAK,MAAM,SAASC,oBAAmB,CAAC,CAAC;AAAA,IAC9C,CAAC,UAAU,iBAAiB,gBAAgB;AAAA,EAC9C;AAEA,YAAU,MAAM;AACd,QAAI,CAAC,UAAU,gBAAgB,SAAS;AACtC;AAAA,IACF;AACA,oBAAgB,UAAU;AAC1B,qBAAiB,EAAE,KAAK,MAAM,gBAAgB,IAAI,CAAC;AAAA,EACrD,GAAG,CAAC,QAAQ,gBAAgB,CAAC;AAE7B,YAAU,MAAM;AACd,QAAI,gBAAgB,WAAW,CAAC,cAAc;AAC5C;AAAA,IACF;AACA,oBAAgB,UAAU;AAC1B,sBAAkB;AAAA,EACpB,GAAG,CAAC,mBAAmB,YAAY,CAAC;AAEpC,SAAO,EAAE,aAAa;AACxB;","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
|
package/dist/thunks.cjs
CHANGED
|
@@ -68,6 +68,7 @@ __export(thunks_exports, {
|
|
|
68
68
|
editTenantDeviceLimit: () => editTenantDeviceLimit,
|
|
69
69
|
editUser: () => editUser,
|
|
70
70
|
enableUser2fa: () => enableUser2fa,
|
|
71
|
+
generateDeploymentLogAnalysis: () => generateDeploymentLogAnalysis,
|
|
71
72
|
generateToken: () => generateToken,
|
|
72
73
|
get2FAQRCode: () => get2FAQRCode,
|
|
73
74
|
getAllDeviceCounts: () => getAllDeviceCounts,
|
|
@@ -81,6 +82,8 @@ __export(thunks_exports, {
|
|
|
81
82
|
getBillingPreview: () => getBillingPreview,
|
|
82
83
|
getCurrentCard: () => getCurrentCard,
|
|
83
84
|
getCurrentSubscription: () => getCurrentSubscription,
|
|
85
|
+
getDeltaGenerationJobDetails: () => getDeltaGenerationJobDetails,
|
|
86
|
+
getDeltaGenerationJobs: () => getDeltaGenerationJobs,
|
|
84
87
|
getDeploymentDevices: () => getDeploymentDevices,
|
|
85
88
|
getDeploymentsByStatus: () => getDeploymentsByStatus2,
|
|
86
89
|
getDeploymentsConfig: () => getDeploymentsConfig,
|
|
@@ -183,7 +186,7 @@ __export(thunks_exports, {
|
|
|
183
186
|
startCardUpdate: () => startCardUpdate,
|
|
184
187
|
startUpgrade: () => startUpgrade,
|
|
185
188
|
storeSsoConfig: () => storeSsoConfig,
|
|
186
|
-
|
|
189
|
+
submitUserFeedback: () => submitUserFeedback,
|
|
187
190
|
switchUserOrganization: () => switchUserOrganization,
|
|
188
191
|
tenantDataDivergedMessage: () => tenantDataDivergedMessage,
|
|
189
192
|
triggerDeviceUpdate: () => triggerDeviceUpdate,
|
|
@@ -225,6 +228,7 @@ var emptyChartSelection = { software: "", group: "", chartType: chartTypes.bar.k
|
|
|
225
228
|
var defaultReportType = "distribution";
|
|
226
229
|
var defaultReports = [{ ...emptyChartSelection, group: null, attribute: "artifact_name", type: defaultReportType }];
|
|
227
230
|
var locations = {
|
|
231
|
+
cn: { key: "cn", title: "China", location: "cn.hosted.mender.io" },
|
|
228
232
|
eu: { key: "eu", title: "EU", location: "eu.hosted.mender.io" },
|
|
229
233
|
us: { key: "us", title: "US", location: "hosted.mender.io" }
|
|
230
234
|
};
|
|
@@ -947,6 +951,7 @@ var initialState = {
|
|
|
947
951
|
},
|
|
948
952
|
// return boolean rather than organization details
|
|
949
953
|
features: {
|
|
954
|
+
hasAiEnabled: false,
|
|
950
955
|
hasAuditlogs: false,
|
|
951
956
|
hasDeltaProgress: false,
|
|
952
957
|
hasMultitenancy: false,
|
|
@@ -1110,7 +1115,7 @@ var cleanUp = () => {
|
|
|
1110
1115
|
|
|
1111
1116
|
// src/api/general-api.ts
|
|
1112
1117
|
var unauthorizedRedirect = (error) => {
|
|
1113
|
-
if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken()) {
|
|
1118
|
+
if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken() && !window.location.pathname.endsWith("/subscription")) {
|
|
1114
1119
|
cleanUp();
|
|
1115
1120
|
window.location.replace("/ui/");
|
|
1116
1121
|
}
|
|
@@ -1170,6 +1175,10 @@ var getDeploymentsById = (state) => state.deployments.byId;
|
|
|
1170
1175
|
var getDeploymentsByStatus = (state) => state.deployments.byStatus;
|
|
1171
1176
|
var getSelectedDeploymentDeviceIds = (state) => state.deployments.selectedDeviceIds;
|
|
1172
1177
|
var getDeploymentsSelectionState = (state) => state.deployments.selectionState;
|
|
1178
|
+
var getDeploymentById = (0, import_toolkit3.createSelector)(
|
|
1179
|
+
[getDeploymentsById, (_, deploymentId) => deploymentId],
|
|
1180
|
+
(deploymentsById, deploymentId = "") => deploymentsById[deploymentId]
|
|
1181
|
+
);
|
|
1173
1182
|
var getMappedDeploymentSelection = (0, import_toolkit3.createSelector)(
|
|
1174
1183
|
[getDeploymentsSelectionState, (_, deploymentsState) => deploymentsState, getDeploymentsById],
|
|
1175
1184
|
(selectionState, deploymentsState, deploymentsById) => {
|
|
@@ -1319,8 +1328,6 @@ var getOnboarding = (state) => state.onboarding;
|
|
|
1319
1328
|
|
|
1320
1329
|
// src/organizationSlice/selectors.ts
|
|
1321
1330
|
var import_toolkit5 = require("@reduxjs/toolkit");
|
|
1322
|
-
var import_dayjs = __toESM(require("dayjs"), 1);
|
|
1323
|
-
var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"), 1);
|
|
1324
1331
|
var getOrganization = (state) => state.organization.organization;
|
|
1325
1332
|
var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
|
|
1326
1333
|
var getAuditlogState = (state) => state.organization.auditlog.selectionState;
|
|
@@ -1349,12 +1356,6 @@ var getAuditLogEntry = (0, import_toolkit5.createSelector)([getAuditLog, getAudi
|
|
|
1349
1356
|
const [eventAction, eventTime] = atob(selectedId).split("|");
|
|
1350
1357
|
return events.find((item) => item.action === eventAction && item.time === eventTime);
|
|
1351
1358
|
});
|
|
1352
|
-
import_dayjs.default.extend(import_relativeTime.default);
|
|
1353
|
-
var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
|
|
1354
|
-
var getHasCurrentPricing = (0, import_toolkit5.createSelector)(
|
|
1355
|
-
[getOrganization],
|
|
1356
|
-
({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
|
|
1357
|
-
);
|
|
1358
1359
|
|
|
1359
1360
|
// src/releasesSlice/selectors.ts
|
|
1360
1361
|
var import_toolkit6 = require("@reduxjs/toolkit");
|
|
@@ -1505,6 +1506,10 @@ var getHasReleases = (0, import_toolkit6.createSelector)(
|
|
|
1505
1506
|
);
|
|
1506
1507
|
var getSelectedRelease = (0, import_toolkit6.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
|
|
1507
1508
|
var getSelectedReleases = (0, import_toolkit6.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
|
|
1509
|
+
var getDeltaJobsById = (state) => state.releases.deltaJobs;
|
|
1510
|
+
var getDeltaJobById = (0, import_toolkit6.createSelector)([getDeltaJobsById, (_, jobId) => jobId], (byId, jobId) => byId[jobId]);
|
|
1511
|
+
var getSelectedJobId = (state) => state.releases.selectedJob;
|
|
1512
|
+
var getSelectedJob = (0, import_toolkit6.createSelector)([getDeltaJobsById, getSelectedJobId], (byId, jobId) => byId[jobId || ""]);
|
|
1508
1513
|
|
|
1509
1514
|
// src/usersSlice/selectors.ts
|
|
1510
1515
|
var import_toolkit7 = require("@reduxjs/toolkit");
|
|
@@ -2301,6 +2306,23 @@ var initialState7 = {
|
|
|
2301
2306
|
}
|
|
2302
2307
|
*/
|
|
2303
2308
|
},
|
|
2309
|
+
deltaJobs: {
|
|
2310
|
+
/*
|
|
2311
|
+
[jobId]: {
|
|
2312
|
+
id: '',
|
|
2313
|
+
...
|
|
2314
|
+
}
|
|
2315
|
+
*/
|
|
2316
|
+
},
|
|
2317
|
+
deltaJobsList: {
|
|
2318
|
+
...import_constants5.DEVICE_LIST_DEFAULTS,
|
|
2319
|
+
jobIds: [],
|
|
2320
|
+
total: 0,
|
|
2321
|
+
sort: {
|
|
2322
|
+
direction: import_constants5.SORTING_OPTIONS.desc,
|
|
2323
|
+
key: "started"
|
|
2324
|
+
}
|
|
2325
|
+
},
|
|
2304
2326
|
releasesList: {
|
|
2305
2327
|
...import_constants5.DEVICE_LIST_DEFAULTS,
|
|
2306
2328
|
searchedIds: [],
|
|
@@ -2319,6 +2341,7 @@ var initialState7 = {
|
|
|
2319
2341
|
},
|
|
2320
2342
|
tags: [],
|
|
2321
2343
|
updateTypes: [],
|
|
2344
|
+
selectedJob: null,
|
|
2322
2345
|
/*
|
|
2323
2346
|
* Return single release with corresponding Artifacts
|
|
2324
2347
|
*/
|
|
@@ -2351,6 +2374,34 @@ var releaseSlice = (0, import_toolkit14.createSlice)({
|
|
|
2351
2374
|
},
|
|
2352
2375
|
setReleaseListState: (state, action) => {
|
|
2353
2376
|
state.releasesList = action.payload;
|
|
2377
|
+
},
|
|
2378
|
+
receivedDeltaJobs: (state, action) => {
|
|
2379
|
+
const { jobs, total } = action.payload;
|
|
2380
|
+
state.deltaJobs = jobs.reduce(
|
|
2381
|
+
(accu, job) => {
|
|
2382
|
+
accu[job.id] = {
|
|
2383
|
+
...accu[job.id],
|
|
2384
|
+
...job
|
|
2385
|
+
};
|
|
2386
|
+
return accu;
|
|
2387
|
+
},
|
|
2388
|
+
{ ...state.deltaJobs }
|
|
2389
|
+
);
|
|
2390
|
+
state.deltaJobsList.jobIds = jobs.map((job) => job.id);
|
|
2391
|
+
state.deltaJobsList.total = total;
|
|
2392
|
+
},
|
|
2393
|
+
receivedDeltaJobDetails: (state, action) => {
|
|
2394
|
+
const job = action.payload;
|
|
2395
|
+
state.deltaJobs[job.id] = {
|
|
2396
|
+
...state.deltaJobs[job.id],
|
|
2397
|
+
...job
|
|
2398
|
+
};
|
|
2399
|
+
},
|
|
2400
|
+
setDeltaJobsListState: (state, action) => {
|
|
2401
|
+
state.deltaJobsList = { ...state.deltaJobsList, ...action.payload };
|
|
2402
|
+
},
|
|
2403
|
+
setSelectedJob: (state, action) => {
|
|
2404
|
+
state.selectedJob = action.payload;
|
|
2354
2405
|
}
|
|
2355
2406
|
}
|
|
2356
2407
|
});
|
|
@@ -3052,6 +3103,15 @@ var saveDeltaDeploymentsConfig = createAppAsyncThunk(
|
|
|
3052
3103
|
});
|
|
3053
3104
|
}
|
|
3054
3105
|
);
|
|
3106
|
+
var generateDeploymentLogAnalysis = createAppAsyncThunk(
|
|
3107
|
+
`${sliceName2}/generateDeploymentLogAnalysis`,
|
|
3108
|
+
({ deploymentId, deviceId }, { dispatch, rejectWithValue }) => general_api_default.get(`${import_constants5.apiRoot}/v1alpha1/deployments/deployments/${deploymentId}/devices/${deviceId}/log/explain`).then(({ data: result }) => Promise.resolve(result)).catch((err) => {
|
|
3109
|
+
if (err.response.status === 429) {
|
|
3110
|
+
return rejectWithValue(err.response);
|
|
3111
|
+
}
|
|
3112
|
+
commonErrorHandler(err, "There was an error analysing the deployment log:", dispatch);
|
|
3113
|
+
})
|
|
3114
|
+
);
|
|
3055
3115
|
|
|
3056
3116
|
// src/devicesSlice/thunks.tsx
|
|
3057
3117
|
var import_react_router_dom = require("react-router-dom");
|
|
@@ -3131,15 +3191,15 @@ var removeDevicesFromGroup = createAppAsyncThunk(
|
|
|
3131
3191
|
)
|
|
3132
3192
|
);
|
|
3133
3193
|
var getGroupNotification = (newGroup, selectedGroup) => {
|
|
3134
|
-
const
|
|
3194
|
+
const successMessage = "The group was updated successfully";
|
|
3135
3195
|
if (newGroup === selectedGroup) {
|
|
3136
|
-
return { message:
|
|
3196
|
+
return { message: successMessage, autoHideDuration: TIMEOUTS.fiveSeconds };
|
|
3137
3197
|
}
|
|
3138
3198
|
return {
|
|
3139
3199
|
action: "",
|
|
3140
3200
|
autoHideDuration: TIMEOUTS.fiveSeconds,
|
|
3141
3201
|
message: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
3142
|
-
|
|
3202
|
+
successMessage,
|
|
3143
3203
|
" - ",
|
|
3144
3204
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom.Link, { to: `/devices?inventory=group:eq:${newGroup}`, children: "click here" }),
|
|
3145
3205
|
" to see it."
|
|
@@ -3671,9 +3731,10 @@ var getDeviceConnect = createAppAsyncThunk(
|
|
|
3671
3731
|
var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
|
|
3672
3732
|
var triggerDeviceUpdate = createAppAsyncThunk(
|
|
3673
3733
|
`${sliceName3}/triggerDeviceUpdate`,
|
|
3674
|
-
({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
|
|
3675
|
-
(
|
|
3676
|
-
|
|
3734
|
+
({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).catch((err) => commonErrorHandler(err, `The request couldn\u2019t be sent.`, dispatch)).then(() => {
|
|
3735
|
+
dispatch(setSnackbar3("Request has been sent."));
|
|
3736
|
+
return new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds));
|
|
3737
|
+
})
|
|
3677
3738
|
);
|
|
3678
3739
|
var getSessionDetails = createAppAsyncThunk(
|
|
3679
3740
|
`${sliceName3}/getSessionDetails`,
|
|
@@ -4109,13 +4170,13 @@ var advanceOnboarding = createAppAsyncThunk(`${sliceName5}/advanceOnboarding`, (
|
|
|
4109
4170
|
// src/organizationSlice/thunks.ts
|
|
4110
4171
|
var import_MenderTypes2 = require("@northern.tech/types/MenderTypes");
|
|
4111
4172
|
var import_helpers11 = require("@northern.tech/utils/helpers");
|
|
4112
|
-
var
|
|
4173
|
+
var import_dayjs = __toESM(require("dayjs"), 1);
|
|
4113
4174
|
var import_utc = __toESM(require("dayjs/plugin/utc.js"), 1);
|
|
4114
4175
|
var import_jwt_decode = require("jwt-decode");
|
|
4115
4176
|
var import_md5 = __toESM(require("md5"), 1);
|
|
4116
4177
|
var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
|
|
4117
4178
|
var cookies4 = new import_universal_cookie4.default();
|
|
4118
|
-
|
|
4179
|
+
import_dayjs.default.extend(import_utc.default);
|
|
4119
4180
|
var { setAnnouncement, setSnackbar: setSnackbar4 } = actions_default;
|
|
4120
4181
|
var { page: defaultPage4, perPage: defaultPerPage4 } = import_constants5.DEVICE_LIST_DEFAULTS;
|
|
4121
4182
|
var cancelRequest = createAppAsyncThunk(`${sliceName6}/cancelRequest`, (reason, { dispatch, getState }) => {
|
|
@@ -4142,10 +4203,12 @@ var createOrganizationTrial = createAppAsyncThunk(`${sliceName6}/createOrganizat
|
|
|
4142
4203
|
const targetLocation = getTargetLocation(key);
|
|
4143
4204
|
const target = `${targetLocation}${import_constants5.tenantadmApiUrlv2}/tenants/trial`;
|
|
4144
4205
|
return general_api_default.postUnauthorized(target, data).catch((err) => {
|
|
4145
|
-
if (err.response
|
|
4206
|
+
if (err.response?.status >= 400 && err.response?.status < 500) {
|
|
4146
4207
|
dispatch(setSnackbar4({ message: err.response.data.error, autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
4147
|
-
|
|
4208
|
+
} else {
|
|
4209
|
+
dispatch(setSnackbar4({ message: "There was an error creating your account", autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
4148
4210
|
}
|
|
4211
|
+
return Promise.reject(err);
|
|
4149
4212
|
}).then(({ headers }) => {
|
|
4150
4213
|
cookies4.remove("oauth");
|
|
4151
4214
|
cookies4.remove("externalID");
|
|
@@ -4327,32 +4390,29 @@ var getUserOrganization = createAppAsyncThunk(
|
|
|
4327
4390
|
);
|
|
4328
4391
|
var getUserBilling = createAppAsyncThunk(
|
|
4329
4392
|
`${sliceName6}/getUserBilling`,
|
|
4330
|
-
(_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).then((res) => dispatch(actions6.setBillingProfile(res.data)))
|
|
4393
|
+
(_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).catch((err) => commonErrorHandler(err, "There was an error getting your billing profile:", dispatch, commonErrorFallback)).then((res) => dispatch(actions6.setBillingProfile(res.data)))
|
|
4331
4394
|
);
|
|
4332
|
-
var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, (_, { dispatch }) => {
|
|
4333
|
-
const
|
|
4334
|
-
|
|
4395
|
+
var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, async (_, { dispatch }) => {
|
|
4396
|
+
const currentSubscription = await dispatch(getCurrentSubscription()).unwrap();
|
|
4397
|
+
const currentPreview = await dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap();
|
|
4398
|
+
return dispatch(actions6.setSubscription({ ...currentPreview, ...currentSubscription }));
|
|
4335
4399
|
});
|
|
4336
4400
|
var getBillingPreview = createAppAsyncThunk(
|
|
4337
4401
|
`${sliceName6}/getBillingPreview`,
|
|
4338
|
-
(order) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).then(
|
|
4339
|
-
({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data
|
|
4340
|
-
)
|
|
4402
|
+
(order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).catch((err) => commonErrorHandler(err, "There was an error getting your billing information:", dispatch, commonErrorFallback)).then(({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data)
|
|
4341
4403
|
);
|
|
4342
4404
|
var getCurrentSubscription = createAppAsyncThunk(
|
|
4343
4405
|
`${sliceName6}/getCurrentSubscription`,
|
|
4344
|
-
() => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data)
|
|
4406
|
+
(_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data).catch((err) => {
|
|
4407
|
+
if (err.response && err.response.status === 404) {
|
|
4408
|
+
throw new Error("Request failed with status code 404");
|
|
4409
|
+
}
|
|
4410
|
+
return commonErrorHandler(err, "There was an error retrieving your current subscription", dispatch, commonErrorFallback);
|
|
4411
|
+
})
|
|
4345
4412
|
);
|
|
4346
|
-
var successMessage = (planId) => `Thank you! You have successfully subscribed to the ${PLANS[planId].name} plan. You can view and edit your billing details on the Organization and billing page.`;
|
|
4347
4413
|
var requestPlanUpgrade = createAppAsyncThunk(
|
|
4348
4414
|
`${sliceName6}/requestPlanUpgrade`,
|
|
4349
|
-
(order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`, order).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(
|
|
4350
|
-
() => Promise.all([
|
|
4351
|
-
dispatch(setSnackbar4(successMessage(order.plan))),
|
|
4352
|
-
setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds),
|
|
4353
|
-
dispatch(getUserOrganization())
|
|
4354
|
-
])
|
|
4355
|
-
)
|
|
4415
|
+
(order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`, order).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(() => Promise.all([setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds), dispatch(getUserOrganization())]))
|
|
4356
4416
|
);
|
|
4357
4417
|
var sendSupportMessage = createAppAsyncThunk(
|
|
4358
4418
|
`${sliceName6}/sendSupportMessage`,
|
|
@@ -4469,7 +4529,7 @@ var commonFields = {
|
|
|
4469
4529
|
issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
|
|
4470
4530
|
open: { parse: Boolean, select: defaultSelector, target: "open" }
|
|
4471
4531
|
};
|
|
4472
|
-
var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type }).reduce(
|
|
4532
|
+
var formatReleases = ({ pageState: { id, searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type, id }).reduce(
|
|
4473
4533
|
(accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
|
|
4474
4534
|
selectedTags.map((tag) => `tag=${tag}`)
|
|
4475
4535
|
).join("&");
|
|
@@ -4565,6 +4625,18 @@ var getArtifactUrl = createAppAsyncThunk(
|
|
|
4565
4625
|
return dispatch(actions7.receiveRelease(release));
|
|
4566
4626
|
})
|
|
4567
4627
|
);
|
|
4628
|
+
var pollLocation = async (location, attempt = 1, maxAttempts = 5, delay = TIMEOUTS.oneSecond) => {
|
|
4629
|
+
try {
|
|
4630
|
+
await general_api_default.get(location);
|
|
4631
|
+
return Promise.resolve();
|
|
4632
|
+
} catch {
|
|
4633
|
+
if (attempt >= maxAttempts) {
|
|
4634
|
+
throw new Error(`Couldn't get ${location} after ${maxAttempts} attempts`);
|
|
4635
|
+
}
|
|
4636
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
4637
|
+
return pollLocation(location, attempt + 1, maxAttempts, delay);
|
|
4638
|
+
}
|
|
4639
|
+
};
|
|
4568
4640
|
var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file, meta }, { dispatch }) => {
|
|
4569
4641
|
const formData = Object.entries(meta).reduce((accu, [key, value]) => {
|
|
4570
4642
|
if (Array.isArray(value)) {
|
|
@@ -4589,13 +4661,18 @@ var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file
|
|
|
4589
4661
|
(e) => dispatch(uploadProgress3({ id: uploadId, progress: progress(e) })),
|
|
4590
4662
|
cancelSource.signal
|
|
4591
4663
|
)
|
|
4592
|
-
]).then(() => {
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4664
|
+
]).then((tasks) => {
|
|
4665
|
+
const generateResponse = tasks[tasks.length - 1];
|
|
4666
|
+
const generateLocation = generateResponse.headers[import_constants5.headerNames.location];
|
|
4667
|
+
const location = generateLocation.replace("/generate", "");
|
|
4668
|
+
return pollLocation(location);
|
|
4669
|
+
}).then(
|
|
4670
|
+
() => Promise.all([
|
|
4671
|
+
dispatch(getReleases()),
|
|
4672
|
+
dispatch(selectRelease(meta.name)),
|
|
4673
|
+
dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds }))
|
|
4674
|
+
])
|
|
4675
|
+
).catch((err) => {
|
|
4599
4676
|
if ((0, import_axios3.isCancel)(err)) {
|
|
4600
4677
|
return dispatch(setSnackbar5({ message: "The artifact generation has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
4601
4678
|
}
|
|
@@ -4818,6 +4895,20 @@ var getUpdateTypes = createAppAsyncThunk(
|
|
|
4818
4895
|
`${sliceName7}/getReleaseTypes`,
|
|
4819
4896
|
(_, { dispatch }) => general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/releases/all/types`).catch((err) => commonErrorHandler(err, `Existing update types couldn't be retrieved.`, dispatch)).then(({ data: types }) => Promise.resolve(dispatch(actions7.receiveReleaseTypes(types))))
|
|
4820
4897
|
);
|
|
4898
|
+
var getDeltaGenerationJobs = createAppAsyncThunk(`${sliceName7}/getDeltaGenerationJobs`, (options = {}, { dispatch }) => {
|
|
4899
|
+
const { page = defaultPage5, perPage = defaultPerPage5, sort = {} } = options;
|
|
4900
|
+
const { key: sortKey, direction: sortDirection } = sort;
|
|
4901
|
+
const sortParam = sortKey && sortDirection ? `&sort=${sortKey}:${sortDirection}` : "";
|
|
4902
|
+
return general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs?page=${page}&per_page=${perPage}${sortParam}`).then(({ data, headers }) => {
|
|
4903
|
+
const total = Number(headers[import_constants5.headerNames.total]) || data.length;
|
|
4904
|
+
const result = { jobs: data, total };
|
|
4905
|
+
return Promise.all([dispatch(actions7.receivedDeltaJobs(result)), result]);
|
|
4906
|
+
}).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation jobs:", dispatch));
|
|
4907
|
+
});
|
|
4908
|
+
var getDeltaGenerationJobDetails = createAppAsyncThunk(
|
|
4909
|
+
`${sliceName7}/getDeltaGenerationJobDetails`,
|
|
4910
|
+
(jobId, { dispatch }) => general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs/${jobId}`).then(({ data }) => dispatch(actions7.receivedDeltaJobDetails(data))).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation job details:", dispatch))
|
|
4911
|
+
);
|
|
4821
4912
|
|
|
4822
4913
|
// src/usersSlice/thunks.ts
|
|
4823
4914
|
var import_helpers14 = require("@northern.tech/utils/helpers");
|
|
@@ -5472,15 +5563,14 @@ var setAllTooltipsReadState = createAppAsyncThunk(
|
|
|
5472
5563
|
return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
|
|
5473
5564
|
}
|
|
5474
5565
|
);
|
|
5475
|
-
var
|
|
5566
|
+
var submitUserFeedback = createAppAsyncThunk(
|
|
5476
5567
|
`${sliceName8}/submitFeedback`,
|
|
5477
|
-
({
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
|
|
5481
|
-
|
|
5482
|
-
|
|
5483
|
-
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
5568
|
+
({ formId, feedback }, { dispatch }) => general_api_default.post(`${import_constants5.useradmApiUrlv2}/support/feedback/${formId}`, feedback).then(() => {
|
|
5569
|
+
if (formId === "product") {
|
|
5570
|
+
const today = /* @__PURE__ */ new Date();
|
|
5571
|
+
dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
|
|
5572
|
+
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
5573
|
+
}
|
|
5484
5574
|
})
|
|
5485
5575
|
);
|
|
5486
5576
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -5523,6 +5613,7 @@ var submitFeedback = createAppAsyncThunk(
|
|
|
5523
5613
|
editTenantDeviceLimit,
|
|
5524
5614
|
editUser,
|
|
5525
5615
|
enableUser2fa,
|
|
5616
|
+
generateDeploymentLogAnalysis,
|
|
5526
5617
|
generateToken,
|
|
5527
5618
|
get2FAQRCode,
|
|
5528
5619
|
getAllDeviceCounts,
|
|
@@ -5536,6 +5627,8 @@ var submitFeedback = createAppAsyncThunk(
|
|
|
5536
5627
|
getBillingPreview,
|
|
5537
5628
|
getCurrentCard,
|
|
5538
5629
|
getCurrentSubscription,
|
|
5630
|
+
getDeltaGenerationJobDetails,
|
|
5631
|
+
getDeltaGenerationJobs,
|
|
5539
5632
|
getDeploymentDevices,
|
|
5540
5633
|
getDeploymentsByStatus,
|
|
5541
5634
|
getDeploymentsConfig,
|
|
@@ -5638,7 +5731,7 @@ var submitFeedback = createAppAsyncThunk(
|
|
|
5638
5731
|
startCardUpdate,
|
|
5639
5732
|
startUpgrade,
|
|
5640
5733
|
storeSsoConfig,
|
|
5641
|
-
|
|
5734
|
+
submitUserFeedback,
|
|
5642
5735
|
switchUserOrganization,
|
|
5643
5736
|
tenantDataDivergedMessage,
|
|
5644
5737
|
triggerDeviceUpdate,
|