@northern.tech/store 0.3.1 → 0.3.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 +20 -17
- package/dist/actions.cjs.map +1 -1
- package/dist/actions.js +8 -8
- package/dist/api/general-api.js +2 -2
- package/dist/api/types/Tenant.ts +17 -12
- package/dist/api/users-api.js +2 -2
- package/dist/appSlice/constants.cjs +18 -10
- package/dist/appSlice/constants.cjs.map +1 -1
- package/dist/appSlice/constants.d.cts +41 -84
- package/dist/appSlice/constants.d.ts +41 -84
- package/dist/appSlice/constants.js +1 -1
- package/dist/appSlice/index.js +2 -2
- package/dist/appSlice/thunks.cjs +140 -96
- package/dist/appSlice/thunks.cjs.map +1 -1
- package/dist/appSlice/thunks.js +19 -19
- package/dist/auth.js +2 -2
- package/dist/{chunk-Q6M5TTDQ.js → chunk-2CYOM4BK.js} +1 -1
- package/dist/chunk-2CYOM4BK.js.map +1 -0
- package/dist/{chunk-APHL4JZP.js → chunk-2JHFUQ6B.js} +141 -102
- package/dist/chunk-2JHFUQ6B.js.map +1 -0
- package/dist/{chunk-YETZPQFR.js → chunk-4XJMRVFI.js} +12 -11
- package/dist/chunk-4XJMRVFI.js.map +1 -0
- package/dist/{chunk-RX55KAKX.js → chunk-7JKWI5FK.js} +2 -2
- package/dist/{chunk-A6CT6GTI.js → chunk-C5NEDBJI.js} +17 -11
- package/dist/chunk-C5NEDBJI.js.map +1 -0
- package/dist/{chunk-NNADGHSL.js → chunk-DAPAXWA5.js} +8 -8
- package/dist/{chunk-ANB5BM5J.js → chunk-DCK2DBOA.js} +27 -20
- package/dist/chunk-DCK2DBOA.js.map +1 -0
- package/dist/{chunk-E5LEU5PF.js → chunk-HPBE6KYY.js} +2 -2
- package/dist/{chunk-2RJIDREZ.js → chunk-LEMVXAYP.js} +25 -16
- package/dist/chunk-LEMVXAYP.js.map +1 -0
- package/dist/{chunk-NI4SZOCF.js → chunk-LGNOTPUG.js} +9 -9
- package/dist/{chunk-MDC7Y3EX.js → chunk-LTKOV26W.js} +22 -20
- package/dist/chunk-LTKOV26W.js.map +1 -0
- package/dist/{chunk-YTQUNAZP.js → chunk-QRGTG4YB.js} +2 -2
- package/dist/{chunk-XTRPX7JZ.js → chunk-TI2RL5P2.js} +2 -2
- package/dist/chunk-TI2RL5P2.js.map +1 -0
- package/dist/{chunk-YGBFDXXA.js → chunk-TUACATJA.js} +2 -2
- package/dist/{chunk-25AKG5HH.js → chunk-UWMYZNUB.js} +19 -11
- package/dist/chunk-UWMYZNUB.js.map +1 -0
- package/dist/{chunk-UEP36GCI.js → chunk-VMNMD6KF.js} +2 -2
- package/dist/{chunk-KAQJH2YL.js → chunk-WXL7PVI5.js} +12 -4
- package/dist/chunk-WXL7PVI5.js.map +1 -0
- package/dist/{chunk-VOCOFE4I.js → chunk-X7IEZBM4.js} +2 -2
- package/dist/{chunk-XXHONFSQ.js → chunk-YDS36ALB.js} +3 -3
- package/dist/{chunk-XXHONFSQ.js.map → chunk-YDS36ALB.js.map} +1 -1
- package/dist/commonSelectors.cjs +40 -18
- package/dist/commonSelectors.cjs.map +1 -1
- package/dist/commonSelectors.d.cts +54 -46
- package/dist/commonSelectors.d.ts +54 -46
- package/dist/commonSelectors.js +9 -9
- package/dist/constants.cjs +35 -19
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +3 -3
- package/dist/constants.d.ts +3 -3
- package/dist/constants.js +6 -2
- package/dist/deploymentdevicehook.cjs +146 -101
- package/dist/deploymentdevicehook.cjs.map +1 -1
- package/dist/deploymentdevicehook.d.cts +1 -1
- package/dist/deploymentdevicehook.d.ts +1 -1
- package/dist/deploymentdevicehook.js +24 -22
- package/dist/deploymentdevicehook.js.map +1 -1
- package/dist/deploymentsSlice/constants.cjs +8 -8
- package/dist/deploymentsSlice/constants.cjs.map +1 -1
- package/dist/deploymentsSlice/constants.js +2 -2
- package/dist/deploymentsSlice/index.cjs +8 -8
- package/dist/deploymentsSlice/index.cjs.map +1 -1
- package/dist/deploymentsSlice/index.js +3 -3
- package/dist/deploymentsSlice/selectors.cjs +8 -8
- package/dist/deploymentsSlice/selectors.cjs.map +1 -1
- package/dist/deploymentsSlice/selectors.js +3 -3
- package/dist/deploymentsSlice/thunks.cjs +140 -96
- package/dist/deploymentsSlice/thunks.cjs.map +1 -1
- package/dist/deploymentsSlice/thunks.js +19 -19
- package/dist/devicesSlice/constants.cjs +11 -8
- package/dist/devicesSlice/constants.cjs.map +1 -1
- package/dist/devicesSlice/constants.d.cts +2 -1
- package/dist/devicesSlice/constants.d.ts +2 -1
- package/dist/devicesSlice/constants.js +4 -2
- package/dist/devicesSlice/index.cjs +8 -8
- package/dist/devicesSlice/index.cjs.map +1 -1
- package/dist/devicesSlice/index.js +3 -3
- package/dist/devicesSlice/selectors.cjs +9 -9
- package/dist/devicesSlice/selectors.cjs.map +1 -1
- package/dist/devicesSlice/selectors.js +3 -3
- package/dist/devicesSlice/thunks.cjs +142 -96
- package/dist/devicesSlice/thunks.cjs.map +1 -1
- package/dist/devicesSlice/thunks.d.cts +12 -2
- package/dist/devicesSlice/thunks.d.ts +12 -2
- package/dist/devicesSlice/thunks.js +21 -19
- package/dist/flag-eu-5477R2P4.svg +130 -0
- package/dist/flag-us-HNQAF66I.svg +63 -0
- package/dist/monitorSlice/constants.cjs +8 -8
- package/dist/monitorSlice/constants.cjs.map +1 -1
- package/dist/monitorSlice/constants.js +2 -2
- package/dist/monitorSlice/index.cjs +8 -8
- package/dist/monitorSlice/index.cjs.map +1 -1
- package/dist/monitorSlice/index.js +3 -3
- package/dist/monitorSlice/thunks.cjs +59 -37
- package/dist/monitorSlice/thunks.cjs.map +1 -1
- package/dist/monitorSlice/thunks.js +17 -17
- package/dist/onboardingSlice/thunks.cjs +149 -102
- package/dist/onboardingSlice/thunks.cjs.map +1 -1
- package/dist/onboardingSlice/thunks.d.cts +1 -32
- package/dist/onboardingSlice/thunks.d.ts +1 -32
- package/dist/onboardingSlice/thunks.js +19 -19
- package/dist/organizationSlice/constants.cjs +22 -17
- package/dist/organizationSlice/constants.cjs.map +1 -1
- package/dist/organizationSlice/constants.d.cts +33 -1
- package/dist/organizationSlice/constants.d.ts +33 -1
- package/dist/organizationSlice/constants.js +4 -2
- package/dist/organizationSlice/index.cjs +18 -15
- package/dist/organizationSlice/index.cjs.map +1 -1
- package/dist/organizationSlice/index.d.cts +26 -1012
- package/dist/organizationSlice/index.d.ts +26 -1012
- package/dist/organizationSlice/index.js +3 -3
- package/dist/organizationSlice/selectors.cjs.map +1 -1
- package/dist/organizationSlice/selectors.d.cts +9 -1
- package/dist/organizationSlice/selectors.d.ts +9 -1
- package/dist/organizationSlice/selectors.js +3 -3
- package/dist/organizationSlice/thunks.cjs +1608 -1540
- package/dist/organizationSlice/thunks.cjs.map +1 -1
- package/dist/organizationSlice/thunks.d.cts +61 -36
- package/dist/organizationSlice/thunks.d.ts +61 -36
- package/dist/organizationSlice/thunks.js +19 -19
- package/dist/organizationSlice/types.cjs +19 -0
- package/dist/organizationSlice/types.cjs.map +1 -0
- package/dist/organizationSlice/types.d.cts +114 -0
- package/dist/organizationSlice/types.d.ts +114 -0
- package/dist/organizationSlice/types.js +1 -0
- package/dist/organizationSlice/types.js.map +1 -0
- package/dist/releasesSlice/index.js +2 -2
- package/dist/releasesSlice/selectors.cjs +11 -0
- package/dist/releasesSlice/selectors.cjs.map +1 -1
- package/dist/releasesSlice/selectors.js +4 -4
- package/dist/releasesSlice/thunks.cjs +73 -49
- package/dist/releasesSlice/thunks.cjs.map +1 -1
- package/dist/releasesSlice/thunks.d.cts +1 -4
- package/dist/releasesSlice/thunks.d.ts +1 -4
- package/dist/releasesSlice/thunks.js +17 -17
- package/dist/selectors.cjs +46 -18
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +9 -1
- package/dist/selectors.d.ts +9 -1
- package/dist/selectors.js +36 -30
- package/dist/store.cjs +36 -23
- package/dist/store.cjs.map +1 -1
- package/dist/store.d.cts +12 -231
- package/dist/store.d.ts +12 -231
- package/dist/store.js +13 -11
- package/dist/storehooks.cjs +222 -141
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.js +36 -24
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +199 -126
- package/dist/thunks.cjs.map +1 -1
- package/dist/thunks.d.cts +5 -1
- package/dist/thunks.d.ts +5 -1
- package/dist/thunks.js +21 -19
- package/dist/usersSlice/constants.cjs +10 -10
- package/dist/usersSlice/constants.cjs.map +1 -1
- package/dist/usersSlice/constants.js +2 -2
- package/dist/usersSlice/index.cjs +10 -10
- package/dist/usersSlice/index.cjs.map +1 -1
- package/dist/usersSlice/index.js +3 -3
- package/dist/usersSlice/selectors.cjs +35 -13
- package/dist/usersSlice/selectors.cjs.map +1 -1
- package/dist/usersSlice/selectors.d.cts +44 -1
- package/dist/usersSlice/selectors.d.ts +44 -1
- package/dist/usersSlice/selectors.js +12 -6
- package/dist/usersSlice/thunks.cjs +138 -96
- package/dist/usersSlice/thunks.cjs.map +1 -1
- package/dist/usersSlice/thunks.d.cts +10 -9
- package/dist/usersSlice/thunks.d.ts +10 -9
- package/dist/usersSlice/thunks.js +19 -19
- package/dist/utils.cjs +17 -16
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +3 -3
- package/package.json +7 -7
- package/dist/chunk-25AKG5HH.js.map +0 -1
- package/dist/chunk-2RJIDREZ.js.map +0 -1
- package/dist/chunk-A6CT6GTI.js.map +0 -1
- package/dist/chunk-ANB5BM5J.js.map +0 -1
- package/dist/chunk-APHL4JZP.js.map +0 -1
- package/dist/chunk-KAQJH2YL.js.map +0 -1
- package/dist/chunk-MDC7Y3EX.js.map +0 -1
- package/dist/chunk-Q6M5TTDQ.js.map +0 -1
- package/dist/chunk-XTRPX7JZ.js.map +0 -1
- package/dist/chunk-YETZPQFR.js.map +0 -1
- /package/dist/{chunk-RX55KAKX.js.map → chunk-7JKWI5FK.js.map} +0 -0
- /package/dist/{chunk-NNADGHSL.js.map → chunk-DAPAXWA5.js.map} +0 -0
- /package/dist/{chunk-E5LEU5PF.js.map → chunk-HPBE6KYY.js.map} +0 -0
- /package/dist/{chunk-NI4SZOCF.js.map → chunk-LGNOTPUG.js.map} +0 -0
- /package/dist/{chunk-YTQUNAZP.js.map → chunk-QRGTG4YB.js.map} +0 -0
- /package/dist/{chunk-YGBFDXXA.js.map → chunk-TUACATJA.js.map} +0 -0
- /package/dist/{chunk-UEP36GCI.js.map → chunk-VMNMD6KF.js.map} +0 -0
- /package/dist/{chunk-VOCOFE4I.js.map → chunk-X7IEZBM4.js.map} +0 -0
|
@@ -74,28 +74,28 @@ var PLANS = {
|
|
|
74
74
|
id: "os",
|
|
75
75
|
name: "Basic",
|
|
76
76
|
offer: true,
|
|
77
|
-
price: "$32/month",
|
|
77
|
+
price: "$32 / month",
|
|
78
78
|
deviceCount: startingDeviceCount.os,
|
|
79
|
-
offerprice: "$23/month for first 50 devices",
|
|
79
|
+
offerprice: "$23 / month for first 50 devices",
|
|
80
80
|
price2: "for first 6 months;\n$29/month thereafter",
|
|
81
|
-
features: ["
|
|
81
|
+
features: ["Access to core features of Mender", "Basic support"]
|
|
82
82
|
},
|
|
83
83
|
professional: {
|
|
84
84
|
id: "professional",
|
|
85
85
|
name: "Professional",
|
|
86
86
|
offer: true,
|
|
87
|
-
price: "$269/month",
|
|
87
|
+
price: "$269 / month",
|
|
88
88
|
deviceCount: startingDeviceCount.professional,
|
|
89
|
-
offerprice: "$200/month for first 50 devices",
|
|
89
|
+
offerprice: "$200 / month for first 50 devices",
|
|
90
90
|
price2: "for first 6 months;\n$249/month thereafter",
|
|
91
|
-
features: ["
|
|
91
|
+
features: ["Advanced OTA features", "Higher priority support"]
|
|
92
92
|
},
|
|
93
93
|
enterprise: {
|
|
94
94
|
id: "enterprise",
|
|
95
95
|
name: "Enterprise",
|
|
96
96
|
price: "Custom pricing",
|
|
97
|
-
deviceCount: "
|
|
98
|
-
features: ["
|
|
97
|
+
deviceCount: "Unlimited devices",
|
|
98
|
+
features: ["All Mender features", "Advanced security features", "SLA-backed support"]
|
|
99
99
|
}
|
|
100
100
|
};
|
|
101
101
|
var ADDONS = {
|
|
@@ -566,6 +566,7 @@ var DEVICE_STATES = {
|
|
|
566
566
|
rejected: "rejected"
|
|
567
567
|
};
|
|
568
568
|
var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
|
|
569
|
+
var REPORT_CHART_SIZE_LIMIT = 6;
|
|
569
570
|
|
|
570
571
|
// src/monitorSlice/constants.ts
|
|
571
572
|
var alertChannels = { email: "email" };
|
|
@@ -647,13 +648,16 @@ var SSO_TYPES = {
|
|
|
647
648
|
configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
|
|
648
649
|
}
|
|
649
650
|
};
|
|
650
|
-
var
|
|
651
|
-
{ title: "Artifact", queryParameter: "object_type", value: "artifact" },
|
|
652
|
-
{ title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
|
|
653
|
-
{ title: "Device", queryParameter: "object_id", value: "device" },
|
|
654
|
-
{ title: "
|
|
655
|
-
|
|
656
|
-
|
|
651
|
+
var auditlogTypes = {
|
|
652
|
+
artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
|
|
653
|
+
deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
|
|
654
|
+
device: { title: "Device", queryParameter: "object_id", value: "device" },
|
|
655
|
+
user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
|
|
656
|
+
user: { title: "User", queryParameter: "object_id", value: "user" },
|
|
657
|
+
tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
|
|
658
|
+
};
|
|
659
|
+
var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
|
|
660
|
+
var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
|
|
657
661
|
var emptyWebhook = {
|
|
658
662
|
description: "",
|
|
659
663
|
enabled: true,
|
|
@@ -786,7 +790,7 @@ var uiPermissionsByArea = {
|
|
|
786
790
|
explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
|
|
787
791
|
key: "auditlog",
|
|
788
792
|
uiPermissions: [uiPermissionsById.read],
|
|
789
|
-
title: "System
|
|
793
|
+
title: "System Audit Log"
|
|
790
794
|
},
|
|
791
795
|
deployments: {
|
|
792
796
|
endpoints: [
|
|
@@ -937,7 +941,7 @@ var serviceProviderRolesById = {
|
|
|
937
941
|
},
|
|
938
942
|
readOnly: {
|
|
939
943
|
name: "Read access",
|
|
940
|
-
value: staticRolesByName.
|
|
944
|
+
value: staticRolesByName.readOnly,
|
|
941
945
|
description: "This role can see all linked organizations but cannot make any changes",
|
|
942
946
|
permissions: [],
|
|
943
947
|
uiPermissions: {
|
|
@@ -2142,7 +2146,7 @@ var getGroups = (0, import_toolkit11.createSelector)([getGroupsById], (groupsByI
|
|
|
2142
2146
|
(accu, [groupname, group]) => {
|
|
2143
2147
|
const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
|
|
2144
2148
|
const groupItem = { ...group, groupId: name, name: groupname };
|
|
2145
|
-
if (group.filters
|
|
2149
|
+
if (group.filters?.length > 0) {
|
|
2146
2150
|
if (groupname !== UNGROUPED_GROUP.id) {
|
|
2147
2151
|
accu.dynamic.push(groupItem);
|
|
2148
2152
|
} else {
|
|
@@ -2215,14 +2219,15 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
|
|
|
2215
2219
|
// src/utils.ts
|
|
2216
2220
|
var import_helpers4 = require("@northern.tech/utils/helpers");
|
|
2217
2221
|
var filterProcessors = {
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2222
|
+
[DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
|
|
2223
|
+
[DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
|
|
2224
|
+
[DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
|
|
2225
|
+
[DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
|
|
2226
|
+
[DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
|
|
2227
|
+
[DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
|
|
2228
|
+
[DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
|
|
2229
|
+
[DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers4.yes,
|
|
2230
|
+
[DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
|
|
2226
2231
|
};
|
|
2227
2232
|
var filterAliases = {
|
|
2228
2233
|
$nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
|
|
@@ -2346,8 +2351,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
|
|
|
2346
2351
|
var getGlobalSettings = (state) => state.users.globalSettings;
|
|
2347
2352
|
var getCurrentUserId = (state) => state.users.currentUser;
|
|
2348
2353
|
var getUsersById = (state) => state.users.byId;
|
|
2354
|
+
var getUsersList = (0, import_toolkit14.createSelector)([getUsersById], (usersById) => Object.values(usersById));
|
|
2349
2355
|
var getCurrentUser = (0, import_toolkit14.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
|
|
2350
2356
|
var getUserSettings = (state) => state.users.userSettings;
|
|
2357
|
+
var getSelectedDeviceAttribute = (0, import_toolkit14.createSelector)(
|
|
2358
|
+
[getUserSettings],
|
|
2359
|
+
({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
|
|
2360
|
+
);
|
|
2351
2361
|
var getIsDarkMode = (0, import_toolkit14.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
|
|
2352
2362
|
var getShowHelptips = (0, import_toolkit14.createSelector)(
|
|
2353
2363
|
[getTooltipsById],
|
|
@@ -2372,7 +2382,7 @@ var getOfflineThresholdSettings = (0, import_toolkit14.createSelector)([getGloba
|
|
|
2372
2382
|
interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
|
|
2373
2383
|
intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
|
|
2374
2384
|
}));
|
|
2375
|
-
var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([
|
|
2385
|
+
var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
|
|
2376
2386
|
|
|
2377
2387
|
// src/commonSelectors.ts
|
|
2378
2388
|
var getIsEnterprise = (0, import_toolkit15.createSelector)(
|
|
@@ -2433,12 +2443,18 @@ var getUserCapabilities = (0, import_toolkit15.createSelector)([getUserRoles, ge
|
|
|
2433
2443
|
});
|
|
2434
2444
|
var getTenantCapabilities = (0, import_toolkit15.createSelector)(
|
|
2435
2445
|
[getFeatures, getOrganization, getIsEnterprise],
|
|
2436
|
-
({
|
|
2446
|
+
({
|
|
2447
|
+
hasAuditlogs: isAuditlogEnabled,
|
|
2448
|
+
hasDeviceConfig: isDeviceConfigEnabled,
|
|
2449
|
+
hasDeviceConnect: isDeviceConnectEnabled,
|
|
2450
|
+
hasMonitor: isMonitorEnabled,
|
|
2451
|
+
isHosted
|
|
2452
|
+
}, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
|
|
2437
2453
|
const canDelta = isEnterprise || plan === PLANS.professional.id;
|
|
2438
2454
|
const hasAuditlogs = isAuditlogEnabled && isEnterprise;
|
|
2439
|
-
const hasDeviceConfig =
|
|
2440
|
-
const hasDeviceConnect =
|
|
2441
|
-
const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name ===
|
|
2455
|
+
const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
|
|
2456
|
+
const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
|
|
2457
|
+
const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
|
|
2442
2458
|
return {
|
|
2443
2459
|
canDelta,
|
|
2444
2460
|
canRetry: canDelta,
|
|
@@ -2568,7 +2584,7 @@ var getAuditlogDevice = (0, import_toolkit15.createSelector)([getAuditLogEntry,
|
|
|
2568
2584
|
var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
|
|
2569
2585
|
if (service_provider) {
|
|
2570
2586
|
return roles.reduce((accu, role) => {
|
|
2571
|
-
if (rolesById[role.
|
|
2587
|
+
if (rolesById[role.value]) {
|
|
2572
2588
|
return accu;
|
|
2573
2589
|
}
|
|
2574
2590
|
accu.push(role);
|
|
@@ -2576,20 +2592,19 @@ var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, ge
|
|
|
2576
2592
|
}, Object.values(serviceProviderRolesById));
|
|
2577
2593
|
}
|
|
2578
2594
|
return Object.keys(rolesById).reverse().reduce((accu, key) => {
|
|
2579
|
-
const index = accu.findIndex(({
|
|
2595
|
+
const index = accu.findIndex(({ value }) => value === key);
|
|
2580
2596
|
accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
|
|
2581
2597
|
return accu;
|
|
2582
2598
|
}, roles);
|
|
2583
2599
|
});
|
|
2584
2600
|
|
|
2585
2601
|
// src/store.ts
|
|
2602
|
+
var import_react_redux = require("react-redux");
|
|
2586
2603
|
var import_helpers6 = require("@northern.tech/utils/helpers");
|
|
2587
2604
|
var import_toolkit16 = require("@reduxjs/toolkit");
|
|
2588
2605
|
var { setSnackbar, uploadProgress } = actions_default;
|
|
2589
2606
|
var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
|
|
2590
|
-
var resetEnvironment = () =>
|
|
2591
|
-
keys.map((key) => window.sessionStorage.removeItem(key));
|
|
2592
|
-
};
|
|
2607
|
+
var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
|
|
2593
2608
|
resetEnvironment();
|
|
2594
2609
|
var commonErrorFallback = "Please check your connection.";
|
|
2595
2610
|
var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
|
|
@@ -2615,6 +2630,14 @@ var sessionReducer = (state, action) => {
|
|
|
2615
2630
|
}
|
|
2616
2631
|
return rootReducer(state, action);
|
|
2617
2632
|
};
|
|
2633
|
+
var rejectionLoggerMiddleware = () => (next) => (action) => {
|
|
2634
|
+
if (action.type.endsWith("/rejected")) {
|
|
2635
|
+
const { error } = action;
|
|
2636
|
+
console.error("Rejection in action:", action);
|
|
2637
|
+
console.error(error.stack);
|
|
2638
|
+
}
|
|
2639
|
+
return next(action);
|
|
2640
|
+
};
|
|
2618
2641
|
var getConfiguredStore = (options = {}) => {
|
|
2619
2642
|
const { preloadedState = {}, ...config } = options;
|
|
2620
2643
|
return (0, import_toolkit16.configureStore)({
|
|
@@ -2630,7 +2653,7 @@ var getConfiguredStore = (options = {}) => {
|
|
|
2630
2653
|
ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
|
|
2631
2654
|
ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
|
|
2632
2655
|
}
|
|
2633
|
-
})
|
|
2656
|
+
}).concat(rejectionLoggerMiddleware)
|
|
2634
2657
|
});
|
|
2635
2658
|
};
|
|
2636
2659
|
var store = getConfiguredStore({
|
|
@@ -3182,7 +3205,7 @@ var getDevicesByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceName3}/
|
|
|
3182
3205
|
page = defaultPage,
|
|
3183
3206
|
perPage = defaultPerPage,
|
|
3184
3207
|
sortOptions = [],
|
|
3185
|
-
selectedAttributes =
|
|
3208
|
+
selectedAttributes = getSelectedDeviceAttribute(getState())
|
|
3186
3209
|
} = options;
|
|
3187
3210
|
const state = getState();
|
|
3188
3211
|
const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
|
|
@@ -3295,7 +3318,6 @@ var getReportingLimits = (0, import_toolkit18.createAsyncThunk)(
|
|
|
3295
3318
|
})
|
|
3296
3319
|
);
|
|
3297
3320
|
var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
|
|
3298
|
-
var REPORT_CHART_SIZE_LIMIT = 6;
|
|
3299
3321
|
var getSingleReportData = (reportConfig, groups) => {
|
|
3300
3322
|
const { attribute, group, software = "" } = reportConfig;
|
|
3301
3323
|
const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
|
|
@@ -3375,9 +3397,17 @@ var getDeviceConnect = (0, import_toolkit18.createAsyncThunk)(
|
|
|
3375
3397
|
({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
|
|
3376
3398
|
)
|
|
3377
3399
|
);
|
|
3400
|
+
var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
|
|
3401
|
+
var triggerDeviceUpdate = (0, import_toolkit18.createAsyncThunk)(
|
|
3402
|
+
`${sliceName3}/triggerDeviceUpdate`,
|
|
3403
|
+
({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
|
|
3404
|
+
() => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
|
|
3405
|
+
)
|
|
3406
|
+
);
|
|
3378
3407
|
var getSessionDetails = (0, import_toolkit18.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
|
|
3379
|
-
const
|
|
3380
|
-
const
|
|
3408
|
+
const { start: startUnix, end: endUnix } = (0, import_helpers8.dateRangeToUnix)(startDate, endDate);
|
|
3409
|
+
const createdAfter = startDate ? `&created_after=${startUnix}` : "";
|
|
3410
|
+
const createdBefore = endDate ? `&created_before=${endUnix}` : "";
|
|
3381
3411
|
const objectSearch = `&object_id=${deviceId}`;
|
|
3382
3412
|
return general_api_default.get(`${auditLogsApiUrl}/logs?per_page=500${createdAfter}${createdBefore}&actor_id=${userId}${objectSearch}`).then(
|
|
3383
3413
|
({ data: auditLogEntries }) => {
|
|
@@ -3476,12 +3506,12 @@ var deleteAuthset = (0, import_toolkit18.createAsyncThunk)(
|
|
|
3476
3506
|
);
|
|
3477
3507
|
var preauthDevice = (0, import_toolkit18.createAsyncThunk)(
|
|
3478
3508
|
`${sliceName3}/preauthDevice`,
|
|
3479
|
-
(authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
|
|
3509
|
+
(authset, { dispatch, rejectWithValue }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).then(() => Promise.resolve(dispatch(setSnackbar2("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds)))).catch((err) => {
|
|
3480
3510
|
if (err.response.status === 409) {
|
|
3481
|
-
return
|
|
3511
|
+
return rejectWithValue("A device with a matching identity data set already exists");
|
|
3482
3512
|
}
|
|
3483
3513
|
return commonErrorHandler(err, "The device could not be added:", dispatch);
|
|
3484
|
-
})
|
|
3514
|
+
})
|
|
3485
3515
|
);
|
|
3486
3516
|
var decommissionDevice = (0, import_toolkit18.createAsyncThunk)(
|
|
3487
3517
|
`${sliceName3}/decommissionDevice`,
|
|
@@ -3708,6 +3738,9 @@ var changeNotificationSetting = (0, import_toolkit19.createAsyncThunk)(
|
|
|
3708
3738
|
}
|
|
3709
3739
|
);
|
|
3710
3740
|
|
|
3741
|
+
// src/usersSlice/thunks.ts
|
|
3742
|
+
var import_helptips = require("@northern.tech/common-ui/helptips");
|
|
3743
|
+
|
|
3711
3744
|
// src/api/users-api.ts
|
|
3712
3745
|
var import_axios3 = __toESM(require("axios"), 1);
|
|
3713
3746
|
var Api2 = {
|
|
@@ -3741,7 +3774,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
|
|
|
3741
3774
|
}
|
|
3742
3775
|
const twoFAError = is2FABackend ? " and verification code" : "";
|
|
3743
3776
|
const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
|
|
3744
|
-
return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.preformatWithRequestID)(err.response, errorMessage),
|
|
3777
|
+
return Promise.reject(dispatch(setSnackbar3({ message: (0, import_helpers9.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
|
|
3745
3778
|
};
|
|
3746
3779
|
var loginUser = (0, import_toolkit20.createAsyncThunk)(
|
|
3747
3780
|
`${sliceName8}/loginUser`,
|
|
@@ -3765,19 +3798,16 @@ var loginUser = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3765
3798
|
const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
|
|
3766
3799
|
setSessionInfo({ token, expiresAt });
|
|
3767
3800
|
cookies3.remove("JWT", { path: "/" });
|
|
3768
|
-
return (
|
|
3769
|
-
|
|
3770
|
-
Promise.
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
window.
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
|
|
3779
|
-
})
|
|
3780
|
-
);
|
|
3801
|
+
return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
|
|
3802
|
+
cleanUp();
|
|
3803
|
+
return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.extractErrorMessage)(e))));
|
|
3804
|
+
}).then(() => {
|
|
3805
|
+
window.sessionStorage.removeItem("pendings-redirect");
|
|
3806
|
+
if (window.location.pathname !== "/ui/") {
|
|
3807
|
+
window.location.replace("/ui/");
|
|
3808
|
+
}
|
|
3809
|
+
return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
|
|
3810
|
+
});
|
|
3781
3811
|
})
|
|
3782
3812
|
);
|
|
3783
3813
|
var logoutUser = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
|
|
@@ -3795,6 +3825,7 @@ var switchUserOrganization = (0, import_toolkit20.createAsyncThunk)(`${sliceName
|
|
|
3795
3825
|
return Promise.reject();
|
|
3796
3826
|
}
|
|
3797
3827
|
return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
|
|
3828
|
+
window.sessionStorage.setItem("tenantChanged", "true");
|
|
3798
3829
|
setSessionInfo({ ...getSessionInfo(), token });
|
|
3799
3830
|
window.location.reload();
|
|
3800
3831
|
});
|
|
@@ -3835,11 +3866,18 @@ var verify2FA = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3835
3866
|
);
|
|
3836
3867
|
var getUserList = (0, import_toolkit20.createAsyncThunk)(
|
|
3837
3868
|
`${sliceName8}/getUserList`,
|
|
3838
|
-
(_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
|
|
3839
|
-
const
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3869
|
+
(_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
|
|
3870
|
+
const currentUsersById = getUsersById(getState());
|
|
3871
|
+
const users = res.data.reduce(
|
|
3872
|
+
(accu, item) => {
|
|
3873
|
+
accu[item.id] = {
|
|
3874
|
+
...accu[item.id],
|
|
3875
|
+
...item
|
|
3876
|
+
};
|
|
3877
|
+
return accu;
|
|
3878
|
+
},
|
|
3879
|
+
{ ...currentUsersById }
|
|
3880
|
+
);
|
|
3843
3881
|
return dispatch(actions8.receivedUserList(users));
|
|
3844
3882
|
}).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
|
|
3845
3883
|
);
|
|
@@ -3848,9 +3886,7 @@ var getUser = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3848
3886
|
(id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
|
|
3849
3887
|
({ data: user }) => Promise.all([
|
|
3850
3888
|
dispatch(actions8.receivedUser(user)),
|
|
3851
|
-
// @ts-ignore
|
|
3852
3889
|
dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
|
|
3853
|
-
// @ts-ignore
|
|
3854
3890
|
dispatch(updateUserColumnSettings({ currentUserId: user.id })),
|
|
3855
3891
|
user
|
|
3856
3892
|
])
|
|
@@ -3897,10 +3933,7 @@ var createUser = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3897
3933
|
);
|
|
3898
3934
|
var removeUser = (0, import_toolkit20.createAsyncThunk)(
|
|
3899
3935
|
`${sliceName8}/removeUser`,
|
|
3900
|
-
(userId, { dispatch }) => (
|
|
3901
|
-
// @ts-ignore
|
|
3902
|
-
general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar3(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
|
|
3903
|
-
)
|
|
3936
|
+
(userId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar3(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
|
|
3904
3937
|
);
|
|
3905
3938
|
var editUser = (0, import_toolkit20.createAsyncThunk)(
|
|
3906
3939
|
`${sliceName8}/editUser`,
|
|
@@ -3921,7 +3954,7 @@ var enableUser2fa = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3921
3954
|
);
|
|
3922
3955
|
var disableUser2fa = (0, import_toolkit20.createAsyncThunk)(
|
|
3923
3956
|
`${sliceName8}/disableUser2fa`,
|
|
3924
|
-
(userId = OWN_USER_ID, { dispatch }) => general_api_default.post(`${useradmApiUrlv1}/users/${userId}/2fa/disable`).catch((err) => commonErrorHandler(err, `There was an error disabling Two Factor authentication for the user.`, dispatch)).then(() => Promise.
|
|
3957
|
+
(userId = OWN_USER_ID, { dispatch }) => general_api_default.post(`${useradmApiUrlv1}/users/${userId}/2fa/disable`).catch((err) => commonErrorHandler(err, `There was an error disabling Two Factor authentication for the user.`, dispatch)).then(() => Promise.all([dispatch(getUser(userId)), dispatch(actions8.receivedQrCode(null))]))
|
|
3925
3958
|
);
|
|
3926
3959
|
var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
|
|
3927
3960
|
(accu, [area, definition]) => {
|
|
@@ -4074,7 +4107,6 @@ var getPermissionSets = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4074
4107
|
accu[permissionSet.name] = permissionSetObject;
|
|
4075
4108
|
return accu;
|
|
4076
4109
|
},
|
|
4077
|
-
// @ts-ignore
|
|
4078
4110
|
{ ...getState().users.permissionSetsById }
|
|
4079
4111
|
);
|
|
4080
4112
|
return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
|
|
@@ -4167,7 +4199,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
|
|
|
4167
4199
|
role: {
|
|
4168
4200
|
...emptyRole,
|
|
4169
4201
|
name,
|
|
4170
|
-
// @ts-ignore
|
|
4171
4202
|
description: description ? description : roleState.description,
|
|
4172
4203
|
uiPermissions: {
|
|
4173
4204
|
...emptyUiPermissions,
|
|
@@ -4210,10 +4241,7 @@ var editRole = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/editRole`,
|
|
|
4210
4241
|
});
|
|
4211
4242
|
var removeRole = (0, import_toolkit20.createAsyncThunk)(
|
|
4212
4243
|
`${sliceName8}/removeRole`,
|
|
4213
|
-
(roleId, { dispatch }) => (
|
|
4214
|
-
// @ts-ignore
|
|
4215
|
-
general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar3(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
|
|
4216
|
-
)
|
|
4244
|
+
(roleId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar3(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
|
|
4217
4245
|
);
|
|
4218
4246
|
var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
|
|
4219
4247
|
`${sliceName8}/getGlobalSettings`,
|
|
@@ -4224,7 +4252,6 @@ var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4224
4252
|
);
|
|
4225
4253
|
var saveGlobalSettings = (0, import_toolkit20.createAsyncThunk)(
|
|
4226
4254
|
`${sliceName8}/saveGlobalSettings`,
|
|
4227
|
-
// @ts-ignore
|
|
4228
4255
|
({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
|
|
4229
4256
|
if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
|
|
4230
4257
|
return;
|
|
@@ -4270,11 +4297,9 @@ var saveUserSettings = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/sav
|
|
|
4270
4297
|
const tooltipState = getTooltipsState(getState());
|
|
4271
4298
|
const updatedSettings = {
|
|
4272
4299
|
...userSettings,
|
|
4273
|
-
// @ts-ignore
|
|
4274
4300
|
...settings,
|
|
4275
4301
|
onboarding: {
|
|
4276
4302
|
...onboardingState,
|
|
4277
|
-
// @ts-ignore
|
|
4278
4303
|
...settings.onboarding
|
|
4279
4304
|
},
|
|
4280
4305
|
tooltips: tooltipState
|
|
@@ -4318,10 +4343,7 @@ var generateToken = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4318
4343
|
);
|
|
4319
4344
|
var revokeToken = (0, import_toolkit20.createAsyncThunk)(
|
|
4320
4345
|
`${sliceName8}/revokeToken`,
|
|
4321
|
-
(token, { dispatch }) => (
|
|
4322
|
-
// @ts-ignore
|
|
4323
|
-
general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
4324
|
-
)
|
|
4346
|
+
(token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
4325
4347
|
);
|
|
4326
4348
|
var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
|
|
4327
4349
|
let tasks = [dispatch(actions8.setTooltipState(remainder))];
|
|
@@ -4330,27 +4352,25 @@ var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/
|
|
|
4330
4352
|
}
|
|
4331
4353
|
return Promise.all(tasks);
|
|
4332
4354
|
});
|
|
4333
|
-
var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (
|
|
4334
|
-
const updatedTips =
|
|
4355
|
+
var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
|
|
4356
|
+
const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
|
|
4335
4357
|
return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
|
|
4336
4358
|
});
|
|
4337
4359
|
var submitFeedback = (0, import_toolkit20.createAsyncThunk)(
|
|
4338
4360
|
`${sliceName8}/submitFeedback`,
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
4348
|
-
});
|
|
4349
|
-
}
|
|
4361
|
+
({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
|
|
4362
|
+
subject: "feedback submission",
|
|
4363
|
+
body: JSON.stringify({ feedback, satisfaction, meta })
|
|
4364
|
+
}).then(() => {
|
|
4365
|
+
const today = /* @__PURE__ */ new Date();
|
|
4366
|
+
dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
|
|
4367
|
+
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
4368
|
+
})
|
|
4350
4369
|
);
|
|
4351
4370
|
|
|
4352
4371
|
// src/deploymentsSlice/thunks.ts
|
|
4353
4372
|
var import_helpers10 = require("@northern.tech/utils/helpers");
|
|
4373
|
+
var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
|
|
4354
4374
|
var import_toolkit21 = require("@reduxjs/toolkit");
|
|
4355
4375
|
var import_validator = require("validator");
|
|
4356
4376
|
var { receivedDevice, setSnackbar: setSnackbar4 } = actions_default;
|
|
@@ -4407,6 +4427,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit21.createAsyncThunk)(`${sliceNam
|
|
|
4407
4427
|
return Promise.all(tasks);
|
|
4408
4428
|
});
|
|
4409
4429
|
});
|
|
4430
|
+
var isWithinFirstMonth = (expirationDate) => {
|
|
4431
|
+
if (!expirationDate) {
|
|
4432
|
+
return false;
|
|
4433
|
+
}
|
|
4434
|
+
const endOfFirstMonth = new Date(expirationDate);
|
|
4435
|
+
endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
|
|
4436
|
+
return endOfFirstMonth > /* @__PURE__ */ new Date();
|
|
4437
|
+
};
|
|
4438
|
+
var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
|
|
4439
|
+
import_tracking.default.event({ category: "deployments", action: "create" });
|
|
4440
|
+
if (!totalDeploymentCount) {
|
|
4441
|
+
if (!hasDeployments) {
|
|
4442
|
+
import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
|
|
4443
|
+
if (isWithinFirstMonth(trial_expiration)) {
|
|
4444
|
+
import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
|
|
4445
|
+
}
|
|
4446
|
+
}
|
|
4447
|
+
import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
|
|
4448
|
+
}
|
|
4449
|
+
};
|
|
4410
4450
|
var MAX_PREVIOUS_PHASES_COUNT = 5;
|
|
4411
4451
|
var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
|
|
4412
4452
|
let request;
|
|
@@ -4417,6 +4457,9 @@ var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/cre
|
|
|
4417
4457
|
} else {
|
|
4418
4458
|
request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
|
|
4419
4459
|
}
|
|
4460
|
+
const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
|
|
4461
|
+
const { hasDeployments } = getGlobalSettings(getState());
|
|
4462
|
+
const { trial_expiration } = getOrganization(getState());
|
|
4420
4463
|
return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
|
|
4421
4464
|
const lastslashindex = data.headers.location.lastIndexOf("/");
|
|
4422
4465
|
const deploymentId = data.headers.location.substring(lastslashindex + 1);
|
|
@@ -4431,6 +4474,7 @@ var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/cre
|
|
|
4431
4474
|
dispatch(getSingleDeployment(deploymentId)),
|
|
4432
4475
|
dispatch(setSnackbar4("Deployment created successfully", TIMEOUTS.fiveSeconds))
|
|
4433
4476
|
];
|
|
4477
|
+
trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
|
|
4434
4478
|
const { canManageUsers } = getUserCapabilities(getState());
|
|
4435
4479
|
if (canManageUsers) {
|
|
4436
4480
|
const { phases, retries } = newDeployment;
|