@northern.tech/store 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.js +75 -13
- package/dist/actions.js.map +1 -1
- package/dist/actions.mjs +10 -10
- package/dist/api/general-api.js +64 -0
- package/dist/api/general-api.js.map +1 -1
- package/dist/api/general-api.mjs +4 -4
- package/dist/api/users-api.js +64 -0
- package/dist/api/users-api.js.map +1 -1
- package/dist/api/users-api.mjs +5 -5
- package/dist/appSlice/index.js +64 -0
- package/dist/appSlice/index.js.map +1 -1
- package/dist/appSlice/index.mjs +3 -3
- package/dist/appSlice/thunks.js +93 -15
- package/dist/appSlice/thunks.js.map +1 -1
- package/dist/appSlice/thunks.mjs +24 -24
- package/dist/auth.js +64 -0
- package/dist/auth.js.map +1 -1
- package/dist/auth.mjs +3 -3
- package/dist/{chunk-HVHZG2H4.mjs → chunk-2HCZYULZ.mjs} +3 -3
- package/dist/chunk-2HCZYULZ.mjs.map +1 -0
- package/dist/{chunk-R2GBNXLV.mjs → chunk-2P4VECEE.mjs} +3 -3
- package/dist/{chunk-HXPYJ6QN.mjs → chunk-4C6IY46N.mjs} +2 -2
- package/dist/{chunk-BRHSKNFC.mjs → chunk-4U4X4KAC.mjs} +4 -4
- package/dist/{chunk-DZBVTSIX.mjs → chunk-BWFTQHNM.mjs} +2 -2
- package/dist/{chunk-BJSH2G7W.mjs → chunk-EFHEROXZ.mjs} +2 -2
- package/dist/{chunk-6667TCAJ.mjs → chunk-EM2HUGUY.mjs} +3 -3
- package/dist/{chunk-IPPIKGIB.mjs → chunk-ENLZPHTQ.mjs} +8 -8
- package/dist/{chunk-IVSYYXTC.mjs → chunk-L4HIW3KB.mjs} +3 -3
- package/dist/{chunk-G7LATUT6.mjs → chunk-MJW4632R.mjs} +10 -10
- package/dist/{chunk-ZNST5R6O.mjs → chunk-MQIKQKSW.mjs} +61 -2
- package/dist/chunk-MQIKQKSW.mjs.map +1 -0
- package/dist/{chunk-7E7KJHY3.mjs → chunk-NCI6JV5R.mjs} +2 -2
- package/dist/{chunk-G3I53JGW.mjs → chunk-OGAMVFPS.mjs} +2 -1
- package/dist/{chunk-G3I53JGW.mjs.map → chunk-OGAMVFPS.mjs.map} +1 -1
- package/dist/{chunk-F37LUTBX.mjs → chunk-OWHFMKTA.mjs} +2 -2
- package/dist/{chunk-ZIYGEXSJ.mjs → chunk-QG4PT5WK.mjs} +3 -3
- package/dist/{chunk-XYVPYFSM.mjs → chunk-RWYS5MKN.mjs} +12 -12
- package/dist/{chunk-G32LAKW4.mjs → chunk-U6YTBIDT.mjs} +3 -3
- package/dist/{chunk-YNVSU3AA.mjs → chunk-UPMSYTWW.mjs} +22 -22
- package/dist/chunk-UPMSYTWW.mjs.map +1 -0
- package/dist/{chunk-TD45YTYK.mjs → chunk-WS3YYLTJ.mjs} +14 -16
- package/dist/chunk-WS3YYLTJ.mjs.map +1 -0
- package/dist/{chunk-HRWZJQMH.mjs → chunk-X65NMDPS.mjs} +3 -3
- package/dist/{chunk-O6O3D52B.mjs → chunk-XJNI62IP.mjs} +2 -2
- package/dist/{chunk-RQOE5OOT.mjs → chunk-Y47SYXII.mjs} +32 -12
- package/dist/chunk-Y47SYXII.mjs.map +1 -0
- package/dist/{chunk-N7G6QK2E.mjs → chunk-ZLRZO4EY.mjs} +10 -10
- package/dist/{chunk-RH6ONMG7.mjs → chunk-ZZ6VIQ3U.mjs} +3 -3
- package/dist/commonConstants.d.mts +18 -19
- package/dist/commonConstants.d.ts +18 -19
- package/dist/commonConstants.js +1 -0
- package/dist/commonConstants.js.map +1 -1
- package/dist/commonConstants.mjs +1 -1
- package/dist/commonSelectors.d.mts +42 -1
- package/dist/commonSelectors.d.ts +42 -1
- package/dist/commonSelectors.js +82 -0
- package/dist/commonSelectors.js.map +1 -1
- package/dist/commonSelectors.mjs +11 -9
- package/dist/constants.d.mts +3 -3
- package/dist/constants.d.ts +3 -3
- package/dist/constants.js +62 -0
- package/dist/constants.js.map +1 -1
- package/dist/constants.mjs +6 -2
- package/dist/deploymentsSlice/constants.js +64 -0
- package/dist/deploymentsSlice/constants.js.map +1 -1
- package/dist/deploymentsSlice/constants.mjs +2 -2
- package/dist/deploymentsSlice/index.js +64 -0
- package/dist/deploymentsSlice/index.js.map +1 -1
- package/dist/deploymentsSlice/index.mjs +3 -3
- package/dist/deploymentsSlice/selectors.js +64 -0
- package/dist/deploymentsSlice/selectors.js.map +1 -1
- package/dist/deploymentsSlice/selectors.mjs +3 -3
- package/dist/deploymentsSlice/thunks.js +93 -15
- package/dist/deploymentsSlice/thunks.js.map +1 -1
- package/dist/deploymentsSlice/thunks.mjs +24 -24
- package/dist/devicesSlice/constants.js +64 -0
- package/dist/devicesSlice/constants.js.map +1 -1
- package/dist/devicesSlice/constants.mjs +2 -2
- package/dist/devicesSlice/index.js +64 -0
- package/dist/devicesSlice/index.js.map +1 -1
- package/dist/devicesSlice/index.mjs +3 -3
- package/dist/devicesSlice/selectors.js +64 -0
- package/dist/devicesSlice/selectors.js.map +1 -1
- package/dist/devicesSlice/selectors.mjs +3 -3
- package/dist/devicesSlice/thunks.js +93 -15
- package/dist/devicesSlice/thunks.js.map +1 -1
- package/dist/devicesSlice/thunks.mjs +24 -24
- package/dist/monitorSlice/constants.js +64 -0
- package/dist/monitorSlice/constants.js.map +1 -1
- package/dist/monitorSlice/constants.mjs +2 -2
- package/dist/monitorSlice/index.js +64 -0
- package/dist/monitorSlice/index.js.map +1 -1
- package/dist/monitorSlice/index.mjs +3 -3
- package/dist/monitorSlice/thunks.js +91 -13
- package/dist/monitorSlice/thunks.js.map +1 -1
- package/dist/monitorSlice/thunks.mjs +21 -21
- package/dist/onboardingSlice/thunks.js +93 -15
- package/dist/onboardingSlice/thunks.js.map +1 -1
- package/dist/onboardingSlice/thunks.mjs +24 -24
- package/dist/organizationSlice/constants.d.mts +6 -1
- package/dist/organizationSlice/constants.d.ts +6 -1
- package/dist/organizationSlice/constants.js +60 -0
- package/dist/organizationSlice/constants.js.map +1 -1
- package/dist/organizationSlice/constants.mjs +4 -2
- package/dist/organizationSlice/index.d.mts +224 -246
- package/dist/organizationSlice/index.d.ts +224 -246
- package/dist/organizationSlice/index.js +75 -13
- package/dist/organizationSlice/index.js.map +1 -1
- package/dist/organizationSlice/index.mjs +3 -3
- package/dist/organizationSlice/selectors.js +65 -1
- package/dist/organizationSlice/selectors.js.map +1 -1
- package/dist/organizationSlice/selectors.mjs +3 -3
- package/dist/organizationSlice/thunks.js +93 -15
- package/dist/organizationSlice/thunks.js.map +1 -1
- package/dist/organizationSlice/thunks.mjs +24 -24
- package/dist/releasesSlice/index.js +64 -0
- package/dist/releasesSlice/index.js.map +1 -1
- package/dist/releasesSlice/index.mjs +3 -3
- package/dist/releasesSlice/selectors.js +64 -0
- package/dist/releasesSlice/selectors.js.map +1 -1
- package/dist/releasesSlice/selectors.mjs +4 -4
- package/dist/releasesSlice/thunks.js +91 -13
- package/dist/releasesSlice/thunks.js.map +1 -1
- package/dist/releasesSlice/thunks.mjs +21 -21
- package/dist/selectors.d.mts +1 -1
- package/dist/selectors.d.ts +1 -1
- package/dist/selectors.js +83 -1
- package/dist/selectors.js.map +1 -1
- package/dist/selectors.mjs +11 -9
- package/dist/store.d.mts +235 -135
- package/dist/store.d.ts +235 -135
- package/dist/store.js +75 -13
- package/dist/store.js.map +1 -1
- package/dist/store.mjs +13 -13
- package/dist/storehooks.d.mts +3 -1
- package/dist/storehooks.d.ts +3 -1
- package/dist/storehooks.js +125 -29
- package/dist/storehooks.js.map +1 -1
- package/dist/storehooks.mjs +59 -39
- package/dist/storehooks.mjs.map +1 -1
- package/dist/thunks.js +93 -15
- package/dist/thunks.js.map +1 -1
- package/dist/thunks.mjs +24 -24
- package/dist/usersSlice/constants.d.mts +192 -17
- package/dist/usersSlice/constants.d.ts +192 -17
- package/dist/usersSlice/constants.js +66 -0
- package/dist/usersSlice/constants.js.map +1 -1
- package/dist/usersSlice/constants.mjs +4 -2
- package/dist/usersSlice/index.d.mts +1628 -704
- package/dist/usersSlice/index.d.ts +1628 -704
- package/dist/usersSlice/index.js +64 -0
- package/dist/usersSlice/index.js.map +1 -1
- package/dist/usersSlice/index.mjs +3 -3
- package/dist/usersSlice/selectors.js +64 -0
- package/dist/usersSlice/selectors.js.map +1 -1
- package/dist/usersSlice/selectors.mjs +4 -4
- package/dist/usersSlice/thunks.js +93 -15
- package/dist/usersSlice/thunks.js.map +1 -1
- package/dist/usersSlice/thunks.mjs +24 -24
- package/dist/utils.d.mts +6 -5
- package/dist/utils.d.ts +6 -5
- package/dist/utils.js +64 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-HVHZG2H4.mjs.map +0 -1
- package/dist/chunk-RQOE5OOT.mjs.map +0 -1
- package/dist/chunk-TD45YTYK.mjs.map +0 -1
- package/dist/chunk-YNVSU3AA.mjs.map +0 -1
- package/dist/chunk-ZNST5R6O.mjs.map +0 -1
- /package/dist/{chunk-R2GBNXLV.mjs.map → chunk-2P4VECEE.mjs.map} +0 -0
- /package/dist/{chunk-HXPYJ6QN.mjs.map → chunk-4C6IY46N.mjs.map} +0 -0
- /package/dist/{chunk-BRHSKNFC.mjs.map → chunk-4U4X4KAC.mjs.map} +0 -0
- /package/dist/{chunk-DZBVTSIX.mjs.map → chunk-BWFTQHNM.mjs.map} +0 -0
- /package/dist/{chunk-BJSH2G7W.mjs.map → chunk-EFHEROXZ.mjs.map} +0 -0
- /package/dist/{chunk-6667TCAJ.mjs.map → chunk-EM2HUGUY.mjs.map} +0 -0
- /package/dist/{chunk-IPPIKGIB.mjs.map → chunk-ENLZPHTQ.mjs.map} +0 -0
- /package/dist/{chunk-IVSYYXTC.mjs.map → chunk-L4HIW3KB.mjs.map} +0 -0
- /package/dist/{chunk-G7LATUT6.mjs.map → chunk-MJW4632R.mjs.map} +0 -0
- /package/dist/{chunk-7E7KJHY3.mjs.map → chunk-NCI6JV5R.mjs.map} +0 -0
- /package/dist/{chunk-F37LUTBX.mjs.map → chunk-OWHFMKTA.mjs.map} +0 -0
- /package/dist/{chunk-ZIYGEXSJ.mjs.map → chunk-QG4PT5WK.mjs.map} +0 -0
- /package/dist/{chunk-XYVPYFSM.mjs.map → chunk-RWYS5MKN.mjs.map} +0 -0
- /package/dist/{chunk-G32LAKW4.mjs.map → chunk-U6YTBIDT.mjs.map} +0 -0
- /package/dist/{chunk-HRWZJQMH.mjs.map → chunk-X65NMDPS.mjs.map} +0 -0
- /package/dist/{chunk-O6O3D52B.mjs.map → chunk-XJNI62IP.mjs.map} +0 -0
- /package/dist/{chunk-N7G6QK2E.mjs.map → chunk-ZLRZO4EY.mjs.map} +0 -0
- /package/dist/{chunk-RH6ONMG7.mjs.map → chunk-ZZ6VIQ3U.mjs.map} +0 -0
package/dist/storehooks.mjs
CHANGED
|
@@ -15,74 +15,76 @@ import {
|
|
|
15
15
|
getUserSettings as getUserSettings2,
|
|
16
16
|
saveGlobalSettings,
|
|
17
17
|
saveUserSettings
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-UPMSYTWW.mjs";
|
|
19
19
|
import {
|
|
20
20
|
getReleases
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-ZLRZO4EY.mjs";
|
|
22
|
+
import "./chunk-MJW4632R.mjs";
|
|
23
|
+
import "./chunk-L4HIW3KB.mjs";
|
|
24
|
+
import "./chunk-2P4VECEE.mjs";
|
|
25
25
|
import "./chunk-V32GTKOS.mjs";
|
|
26
26
|
import {
|
|
27
27
|
getIsEnterprise,
|
|
28
28
|
getOnboardingState,
|
|
29
29
|
getUserCapabilities
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-Y47SYXII.mjs";
|
|
31
31
|
import {
|
|
32
32
|
getGlobalSettings,
|
|
33
33
|
getOfflineThresholdSettings,
|
|
34
34
|
getUserSettings
|
|
35
|
-
} from "./chunk-
|
|
36
|
-
import
|
|
37
|
-
|
|
35
|
+
} from "./chunk-4U4X4KAC.mjs";
|
|
36
|
+
import {
|
|
37
|
+
getIsServiceProvider
|
|
38
|
+
} from "./chunk-2HCZYULZ.mjs";
|
|
39
|
+
import "./chunk-XJNI62IP.mjs";
|
|
38
40
|
import "./chunk-H2PQQMRY.mjs";
|
|
39
41
|
import "./chunk-QBKCUIWO.mjs";
|
|
40
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-BWFTQHNM.mjs";
|
|
41
43
|
import {
|
|
42
44
|
getDevicesByStatus,
|
|
43
45
|
getSortedFilteringAttributes
|
|
44
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-QG4PT5WK.mjs";
|
|
45
47
|
import {
|
|
46
48
|
getFeatures
|
|
47
49
|
} from "./chunk-C2YZYTJ6.mjs";
|
|
48
|
-
import "./chunk-
|
|
50
|
+
import "./chunk-RWYS5MKN.mjs";
|
|
49
51
|
import {
|
|
50
52
|
actions_default
|
|
51
|
-
} from "./chunk-
|
|
52
|
-
import "./chunk-
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
55
|
-
import "./chunk-
|
|
53
|
+
} from "./chunk-ENLZPHTQ.mjs";
|
|
54
|
+
import "./chunk-EFHEROXZ.mjs";
|
|
55
|
+
import "./chunk-WS3YYLTJ.mjs";
|
|
56
|
+
import "./chunk-NCI6JV5R.mjs";
|
|
57
|
+
import "./chunk-ZZ6VIQ3U.mjs";
|
|
56
58
|
import "./chunk-M4U5R7A4.mjs";
|
|
57
|
-
import "./chunk-
|
|
58
|
-
import "./chunk-
|
|
59
|
-
import "./chunk-
|
|
59
|
+
import "./chunk-EM2HUGUY.mjs";
|
|
60
|
+
import "./chunk-X65NMDPS.mjs";
|
|
61
|
+
import "./chunk-OWHFMKTA.mjs";
|
|
60
62
|
import {
|
|
61
63
|
getSessionInfo
|
|
62
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-4C6IY46N.mjs";
|
|
63
65
|
import {
|
|
64
66
|
extractErrorMessage,
|
|
65
67
|
getComparisonCompatibleVersion,
|
|
66
68
|
stringToBoolean
|
|
67
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-U6YTBIDT.mjs";
|
|
68
70
|
import {
|
|
69
71
|
DEPLOYMENT_STATES,
|
|
70
72
|
DEVICE_STATES
|
|
71
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-MQIKQKSW.mjs";
|
|
72
74
|
import "./chunk-G4FGNSV3.mjs";
|
|
73
75
|
import "./chunk-IU4OXOPA.mjs";
|
|
74
76
|
import "./chunk-BOSBROA3.mjs";
|
|
75
77
|
import {
|
|
76
78
|
TIMEOUTS,
|
|
77
79
|
timeUnits
|
|
78
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-OGAMVFPS.mjs";
|
|
79
81
|
import {
|
|
80
82
|
__spreadProps,
|
|
81
83
|
__spreadValues
|
|
82
84
|
} from "./chunk-XWBD7VOK.mjs";
|
|
83
85
|
|
|
84
86
|
// src/storehooks.ts
|
|
85
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
87
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
86
88
|
import { useDispatch, useSelector } from "react-redux";
|
|
87
89
|
import dayjs from "dayjs";
|
|
88
90
|
import durationDayJs from "dayjs/plugin/duration";
|
|
@@ -164,6 +166,7 @@ var maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tas
|
|
|
164
166
|
};
|
|
165
167
|
var useAppInit = (userId) => {
|
|
166
168
|
const dispatch = useDispatch();
|
|
169
|
+
const [coreInitDone, setCoreInitDone] = useState(false);
|
|
167
170
|
const isEnterprise = useSelector(getIsEnterprise);
|
|
168
171
|
const { hasMultitenancy, isHosted } = useSelector(getFeatures);
|
|
169
172
|
const devicesByStatus = useSelector(getDevicesByStatus);
|
|
@@ -173,12 +176,27 @@ var useAppInit = (userId) => {
|
|
|
173
176
|
const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);
|
|
174
177
|
const { id_attribute } = useSelector(getGlobalSettings);
|
|
175
178
|
const { identityAttributes } = useSelector(getSortedFilteringAttributes);
|
|
176
|
-
const
|
|
177
|
-
const
|
|
179
|
+
const isServiceProvider = useSelector(getIsServiceProvider);
|
|
180
|
+
const coreInitRunning = useRef(false);
|
|
181
|
+
const fullInitRunning = useRef(false);
|
|
182
|
+
const retrieveCoreData = useCallback(() => {
|
|
178
183
|
let tasks = [
|
|
179
184
|
dispatch(parseEnvironmentInfo()),
|
|
180
185
|
dispatch(getUserSettings2()),
|
|
181
186
|
dispatch(getGlobalSettings2()),
|
|
187
|
+
dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get("firstLoginAfterSignup"))))
|
|
188
|
+
];
|
|
189
|
+
const multitenancy = hasMultitenancy || isHosted || isEnterprise;
|
|
190
|
+
if (multitenancy) {
|
|
191
|
+
tasks.push(dispatch(getUserOrganization()));
|
|
192
|
+
}
|
|
193
|
+
return Promise.all(tasks);
|
|
194
|
+
}, [dispatch, hasMultitenancy, isHosted, isEnterprise]);
|
|
195
|
+
const retrieveAppData = useCallback(() => {
|
|
196
|
+
if (isServiceProvider) {
|
|
197
|
+
return Promise.resolve(dispatch(getRoles()));
|
|
198
|
+
}
|
|
199
|
+
return Promise.all([
|
|
182
200
|
dispatch(getDeviceAttributes()),
|
|
183
201
|
dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),
|
|
184
202
|
dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),
|
|
@@ -191,15 +209,9 @@ var useAppInit = (userId) => {
|
|
|
191
209
|
dispatch(getIntegrations()),
|
|
192
210
|
dispatch(getReleases()),
|
|
193
211
|
dispatch(getDeviceLimit()),
|
|
194
|
-
dispatch(getRoles())
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const multitenancy = hasMultitenancy || isHosted || isEnterprise;
|
|
198
|
-
if (multitenancy) {
|
|
199
|
-
tasks.push(dispatch(getUserOrganization()));
|
|
200
|
-
}
|
|
201
|
-
return Promise.all(tasks);
|
|
202
|
-
}, [dispatch, hasMultitenancy, isHosted, isEnterprise]);
|
|
212
|
+
dispatch(getRoles())
|
|
213
|
+
]);
|
|
214
|
+
}, [dispatch, isServiceProvider]);
|
|
203
215
|
const interpretAppData = useCallback(() => {
|
|
204
216
|
let settings = {};
|
|
205
217
|
if (cookies.get("_ga") && typeof hasTrackingEnabled === "undefined") {
|
|
@@ -251,12 +263,20 @@ var useAppInit = (userId) => {
|
|
|
251
263
|
[dispatch, retrieveAppData, interpretAppData]
|
|
252
264
|
);
|
|
253
265
|
useEffect(() => {
|
|
254
|
-
if (!userId ||
|
|
266
|
+
if (!userId || coreInitRunning.current) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
coreInitRunning.current = true;
|
|
270
|
+
retrieveCoreData().then(() => setCoreInitDone(true));
|
|
271
|
+
}, [userId, retrieveCoreData]);
|
|
272
|
+
useEffect(() => {
|
|
273
|
+
if (fullInitRunning.current || !coreInitDone) {
|
|
255
274
|
return;
|
|
256
275
|
}
|
|
257
|
-
|
|
276
|
+
fullInitRunning.current = true;
|
|
258
277
|
initializeAppData();
|
|
259
|
-
}, [
|
|
278
|
+
}, [initializeAppData, coreInitDone]);
|
|
279
|
+
return { coreInitDone };
|
|
260
280
|
};
|
|
261
281
|
export {
|
|
262
282
|
parseEnvironmentInfo,
|
package/dist/storehooks.mjs.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 } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration';\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 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 { extractErrorMessage, 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 = ['feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', '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 isDemoMode,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion,\n services = {}\n } = mender_environment;\n onboardingComplete = stringToBoolean(features.isEnterprise) || stringToBoolean(disableOnboarding) || onboardingComplete;\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: features.isHosted || window.location.hostname.includes('hosted.mender.io'),\n isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)\n };\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 Deployments: services.deploymentsVersion,\n Deviceauth: services.deviceauthVersion,\n Inventory: services.inventoryVersion,\n GUI: services.guiVersion\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({ docsVersion: versionInfo.docs, value: versionInfo.remainder })),\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 isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n let { 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 initRunning = useRef(false);\n\n const retrieveAppData = useCallback(() => {\n let tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\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 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 interpretAppData = useCallback(() => {\n let 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 || initRunning.current) {\n return;\n }\n initRunning.current = true;\n initializeAppData();\n }, [userId, initializeAppData]);\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 dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration';\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 { extractErrorMessage, 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 = ['feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', '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 isDemoMode,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion,\n services = {}\n } = mender_environment;\n onboardingComplete = stringToBoolean(features.isEnterprise) || stringToBoolean(disableOnboarding) || onboardingComplete;\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: features.isHosted || window.location.hostname.includes('hosted.mender.io'),\n isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)\n };\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 Deployments: services.deploymentsVersion,\n Deviceauth: services.deviceauthVersion,\n Inventory: services.inventoryVersion,\n GUI: services.guiVersion\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({ docsVersion: versionInfo.docs, value: versionInfo.remainder })),\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 let { 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 let 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 let 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"]}
|
package/dist/thunks.js
CHANGED
|
@@ -954,6 +954,7 @@ var emptyUiPermissions = Object.freeze({
|
|
|
954
954
|
deployments: [],
|
|
955
955
|
groups: Object.freeze({}),
|
|
956
956
|
releases: Object.freeze({}),
|
|
957
|
+
tenantManagement: [],
|
|
957
958
|
userManagement: []
|
|
958
959
|
});
|
|
959
960
|
var emptyRole = Object.freeze({
|
|
@@ -1201,6 +1202,13 @@ var SSO_TYPES = {
|
|
|
1201
1202
|
configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
|
|
1202
1203
|
}
|
|
1203
1204
|
};
|
|
1205
|
+
var AUDIT_LOGS_TYPES = [
|
|
1206
|
+
{ title: "Artifact", queryParameter: "object_type", value: "artifact" },
|
|
1207
|
+
{ title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
|
|
1208
|
+
{ title: "Device", queryParameter: "object_id", value: "device" },
|
|
1209
|
+
{ title: "User", queryParameter: "object_id", value: "user" }
|
|
1210
|
+
];
|
|
1211
|
+
var SP_AUDIT_LOGS_TYPES = [AUDIT_LOGS_TYPES[3], { title: "Tenant", queryParameter: "object_id", value: "tenant" }];
|
|
1204
1212
|
var emptyWebhook = {
|
|
1205
1213
|
description: "",
|
|
1206
1214
|
enabled: true,
|
|
@@ -1249,10 +1257,12 @@ var permissionSetIds = {
|
|
|
1249
1257
|
DeployToDevices: "DeployToDevices",
|
|
1250
1258
|
ManageDevices: "ManageDevices",
|
|
1251
1259
|
ManageReleases: "ManageReleases",
|
|
1260
|
+
ManageTenants: "ManageTenants",
|
|
1252
1261
|
ManageUsers: "ManageUsers",
|
|
1253
1262
|
ReadAuditLogs: "ReadAuditLogs",
|
|
1254
1263
|
ReadDevices: "ReadDevices",
|
|
1255
1264
|
ReadReleases: "ReadReleases",
|
|
1265
|
+
ReadTenants: "ReadTenants",
|
|
1256
1266
|
ReadUsers: "ReadUsers",
|
|
1257
1267
|
SuperUser: "SuperUser",
|
|
1258
1268
|
UploadArtifacts: "UploadArtifacts"
|
|
@@ -1291,6 +1301,7 @@ var uiPermissionsById = {
|
|
|
1291
1301
|
permissionSets: {
|
|
1292
1302
|
groups: permissionSetIds.ManageDevices,
|
|
1293
1303
|
releases: permissionSetIds.ManageReleases,
|
|
1304
|
+
tenantManagement: permissionSetIds.ManageTenants,
|
|
1294
1305
|
userManagement: permissionSetIds.ManageUsers
|
|
1295
1306
|
},
|
|
1296
1307
|
title: "Manage",
|
|
@@ -1304,6 +1315,7 @@ var uiPermissionsById = {
|
|
|
1304
1315
|
auditlog: permissionSetIds.ReadAuditLogs,
|
|
1305
1316
|
groups: permissionSetIds.ReadDevices,
|
|
1306
1317
|
releases: permissionSetIds.ReadReleases,
|
|
1318
|
+
tenantManagement: permissionSetIds.ReadTenants,
|
|
1307
1319
|
userManagement: permissionSetIds.ReadUsers
|
|
1308
1320
|
},
|
|
1309
1321
|
title: "Read",
|
|
@@ -1328,6 +1340,7 @@ var uiPermissionsByArea = {
|
|
|
1328
1340
|
auditlog: {
|
|
1329
1341
|
endpoints: [{ path: /\/(auditlog)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] }],
|
|
1330
1342
|
explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
|
|
1343
|
+
key: "auditlog",
|
|
1331
1344
|
uiPermissions: [uiPermissionsById.read],
|
|
1332
1345
|
title: "System audit log"
|
|
1333
1346
|
},
|
|
@@ -1338,6 +1351,7 @@ var uiPermissionsByArea = {
|
|
|
1338
1351
|
{ path: /\/(deployments\/config)/i, types: [PermissionTypes.Get, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] }
|
|
1339
1352
|
],
|
|
1340
1353
|
explanation: "Providing deploy permissions will allow deployments to be created using the releases and devices a user has access to.",
|
|
1354
|
+
key: "deployments",
|
|
1341
1355
|
uiPermissions: [uiPermissionsById.read, uiPermissionsById.deploy],
|
|
1342
1356
|
title: "Deployments"
|
|
1343
1357
|
},
|
|
@@ -1353,6 +1367,7 @@ var uiPermissionsByArea = {
|
|
|
1353
1367
|
{ path: /\/(deviceconnect\/devices)/i, types: [PermissionTypes.Get, PermissionTypes.Post], uiPermissions: [uiPermissionsById.connect] }
|
|
1354
1368
|
],
|
|
1355
1369
|
explanation: "Device group management permissions control the degree to which devices in a group can be accessed and moved to other groups.",
|
|
1370
|
+
key: "groups",
|
|
1356
1371
|
scope: scopedPermissionAreas.groups.scopeType,
|
|
1357
1372
|
uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.deploy, uiPermissionsById.configure, uiPermissionsById.connect],
|
|
1358
1373
|
title: "Group Management"
|
|
@@ -1372,16 +1387,29 @@ var uiPermissionsByArea = {
|
|
|
1372
1387
|
}
|
|
1373
1388
|
],
|
|
1374
1389
|
explanation: "Release permissions can be granted to allow artifact & release modifications, as well as the creation of new releases.",
|
|
1390
|
+
key: "releases",
|
|
1375
1391
|
scope: "ReleaseTags",
|
|
1376
1392
|
uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.upload],
|
|
1377
1393
|
title: "Release Management"
|
|
1378
1394
|
},
|
|
1395
|
+
tenantManagement: {
|
|
1396
|
+
endpoints: [
|
|
1397
|
+
{ path: /\/(tenantadm\/tenants)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
|
|
1398
|
+
{ path: /\/(tenantadm\/tenants)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] },
|
|
1399
|
+
{ path: /\/(users\/exists)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.manage] }
|
|
1400
|
+
],
|
|
1401
|
+
explanation: "Tenant management permissions allow listing, creating and modifying child tenants",
|
|
1402
|
+
key: "tenantManagement",
|
|
1403
|
+
uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],
|
|
1404
|
+
title: "Tenant Management"
|
|
1405
|
+
},
|
|
1379
1406
|
userManagement: {
|
|
1380
1407
|
endpoints: [
|
|
1381
1408
|
{ path: /\/(useradm)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
|
|
1382
1409
|
{ path: /\/(useradm)/i, types: [PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] }
|
|
1383
1410
|
],
|
|
1384
1411
|
explanation: "User management permissions should be granted carefully, as these allow privilege increases for any users managed by a user with user management permissions",
|
|
1412
|
+
key: "userManagement",
|
|
1385
1413
|
uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],
|
|
1386
1414
|
title: "User Management"
|
|
1387
1415
|
}
|
|
@@ -1445,6 +1473,30 @@ var rolesById = Object.freeze({
|
|
|
1445
1473
|
})
|
|
1446
1474
|
}
|
|
1447
1475
|
});
|
|
1476
|
+
var serviceProviderRolesById = {
|
|
1477
|
+
admin: {
|
|
1478
|
+
name: "Admin",
|
|
1479
|
+
value: staticRolesByName.admin,
|
|
1480
|
+
description: "Full access",
|
|
1481
|
+
permissions: [],
|
|
1482
|
+
uiPermissions: __spreadProps(__spreadValues({}, emptyUiPermissions), {
|
|
1483
|
+
auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),
|
|
1484
|
+
userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper),
|
|
1485
|
+
tenantManagement: uiPermissionsByArea.tenantManagement.uiPermissions.map(permissionMapper)
|
|
1486
|
+
})
|
|
1487
|
+
},
|
|
1488
|
+
readOnly: {
|
|
1489
|
+
name: "Read access",
|
|
1490
|
+
value: staticRolesByName.admin,
|
|
1491
|
+
description: "This role can see all linked organizations but cannot make any changes",
|
|
1492
|
+
permissions: [],
|
|
1493
|
+
uiPermissions: __spreadProps(__spreadValues({}, emptyUiPermissions), {
|
|
1494
|
+
auditlog: [uiPermissionsById.read.value],
|
|
1495
|
+
userManagement: [uiPermissionsById.read.value],
|
|
1496
|
+
tenantManagement: [uiPermissionsById.read.value]
|
|
1497
|
+
})
|
|
1498
|
+
}
|
|
1499
|
+
};
|
|
1448
1500
|
var defaultPermissionSets = {
|
|
1449
1501
|
[permissionSetIds.Basic]: {
|
|
1450
1502
|
name: permissionSetIds.Basic,
|
|
@@ -1475,6 +1527,18 @@ var defaultPermissionSets = {
|
|
|
1475
1527
|
releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }
|
|
1476
1528
|
}
|
|
1477
1529
|
},
|
|
1530
|
+
[permissionSetIds.ReadTenants]: {
|
|
1531
|
+
name: permissionSetIds.ReadTenants,
|
|
1532
|
+
result: {
|
|
1533
|
+
tenantManagement: [uiPermissionsById.read.value]
|
|
1534
|
+
}
|
|
1535
|
+
},
|
|
1536
|
+
[permissionSetIds.ManageTenants]: {
|
|
1537
|
+
name: permissionSetIds.ManageTenants,
|
|
1538
|
+
result: {
|
|
1539
|
+
tenantManagement: [uiPermissionsById.manage.value]
|
|
1540
|
+
}
|
|
1541
|
+
},
|
|
1478
1542
|
[permissionSetIds.ReadUsers]: {
|
|
1479
1543
|
name: permissionSetIds.ReadUsers,
|
|
1480
1544
|
result: {
|
|
@@ -1811,7 +1875,7 @@ var getExternalIntegrations = (state) => state.organization.externalDeviceIntegr
|
|
|
1811
1875
|
var getAuditlogState = (state) => state.organization.auditlog.selectionState;
|
|
1812
1876
|
var getAuditLog = (state) => state.organization.auditlog.events;
|
|
1813
1877
|
var getAuditLogSelectionState = (state) => state.organization.auditlog.selectionState;
|
|
1814
|
-
var getTenantsList = (state) => state.organization.
|
|
1878
|
+
var getTenantsList = (state) => state.organization.tenantList;
|
|
1815
1879
|
var getWebhookEvents = (state) => state.organization.webhooks.events;
|
|
1816
1880
|
var getWebhookEventTotal = (state) => state.organization.webhooks.eventTotal;
|
|
1817
1881
|
var getDeviceTwinIntegrations = (0, import_toolkit4.createSelector)(
|
|
@@ -2220,6 +2284,22 @@ var getAuditlogDevice = (0, import_toolkit7.createSelector)([getAuditLogEntry, g
|
|
|
2220
2284
|
}
|
|
2221
2285
|
return __spreadValues(__spreadValues({}, auditlogDevice), devicesById[auditlogDevice.id]);
|
|
2222
2286
|
});
|
|
2287
|
+
var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
|
|
2288
|
+
if (service_provider) {
|
|
2289
|
+
return roles.reduce((accu, role) => {
|
|
2290
|
+
if (rolesById[role.id]) {
|
|
2291
|
+
return accu;
|
|
2292
|
+
}
|
|
2293
|
+
accu.push(role);
|
|
2294
|
+
return accu;
|
|
2295
|
+
}, Object.values(serviceProviderRolesById));
|
|
2296
|
+
}
|
|
2297
|
+
return Object.keys(rolesById).reverse().reduce((accu, key) => {
|
|
2298
|
+
const index = accu.findIndex(({ id }) => id === key);
|
|
2299
|
+
accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
|
|
2300
|
+
return accu;
|
|
2301
|
+
}, roles);
|
|
2302
|
+
});
|
|
2223
2303
|
|
|
2224
2304
|
// src/appSlice/thunks.ts
|
|
2225
2305
|
var import_helpers5 = require("@northern.tech/utils/helpers");
|
|
@@ -2832,16 +2912,16 @@ var initialState6 = {
|
|
|
2832
2912
|
brand: ""
|
|
2833
2913
|
},
|
|
2834
2914
|
intentId: null,
|
|
2915
|
+
tenantList: __spreadProps(__spreadValues({}, TENANT_LIST_DEFAULT), {
|
|
2916
|
+
total: 0,
|
|
2917
|
+
tenants: [],
|
|
2918
|
+
selectedTenant: null,
|
|
2919
|
+
sort: {
|
|
2920
|
+
direction: SORTING_OPTIONS.desc,
|
|
2921
|
+
key: "name"
|
|
2922
|
+
}
|
|
2923
|
+
}),
|
|
2835
2924
|
organization: {
|
|
2836
|
-
tenantList: __spreadProps(__spreadValues({}, TENANT_LIST_DEFAULT), {
|
|
2837
|
-
total: 0,
|
|
2838
|
-
tenants: [],
|
|
2839
|
-
selectedTenant: null,
|
|
2840
|
-
sort: {
|
|
2841
|
-
direction: SORTING_OPTIONS.desc,
|
|
2842
|
-
key: "name"
|
|
2843
|
-
}
|
|
2844
|
-
})
|
|
2845
2925
|
// id, name, status, tenant_token, plan
|
|
2846
2926
|
},
|
|
2847
2927
|
auditlog: {
|
|
@@ -2887,12 +2967,10 @@ var organizationSlice = (0, import_toolkit14.createSlice)({
|
|
|
2887
2967
|
state.intentId = action.payload;
|
|
2888
2968
|
},
|
|
2889
2969
|
setOrganization: (state, action) => {
|
|
2890
|
-
state.organization =
|
|
2891
|
-
tenantList: __spreadValues(__spreadValues({}, state.organization.tenantList), action.payload.tenantList)
|
|
2892
|
-
});
|
|
2970
|
+
state.organization = __spreadValues(__spreadValues({}, state.organization), action.payload);
|
|
2893
2971
|
},
|
|
2894
2972
|
setTenantListState: (state, action) => {
|
|
2895
|
-
state.
|
|
2973
|
+
state.tenantList = action.payload;
|
|
2896
2974
|
},
|
|
2897
2975
|
receiveExternalDeviceIntegrations: (state, action) => {
|
|
2898
2976
|
state.externalDeviceIntegrations = action.payload;
|
|
@@ -4713,7 +4791,7 @@ var tenantListRetrieval = (config) => __async(void 0, null, function* () {
|
|
|
4713
4791
|
const params = new URLSearchParams({ page, per_page: perPage }).toString();
|
|
4714
4792
|
const tenantList = yield general_api_default.get(`${tenantadmApiUrlv2}/tenants?${params}`);
|
|
4715
4793
|
const totalCount = tenantList.headers[headerNames.total] || TENANT_LIST_DEFAULT.perPage;
|
|
4716
|
-
return [tenantList.data, totalCount];
|
|
4794
|
+
return [tenantList.data, Number(totalCount)];
|
|
4717
4795
|
});
|
|
4718
4796
|
var getTenants = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/getTenants`, (_0, _1) => __async(void 0, [_0, _1], function* (_, { dispatch, getState }) {
|
|
4719
4797
|
const currentState = getTenantsList(getState());
|