@northern.tech/store 0.3.2 → 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 +137 -94
- 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-74OJIKXF.js → chunk-2JHFUQ6B.js} +133 -96
- 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 +143 -99
- 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 +137 -94
- 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 +139 -94
- 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 +146 -100
- 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 +1605 -1539
- 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 +216 -137
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.js +36 -24
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +193 -122
- 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 +135 -94
- 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-74OJIKXF.js.map +0 -1
- package/dist/chunk-A6CT6GTI.js.map +0 -1
- package/dist/chunk-ANB5BM5J.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,6 +3397,13 @@ 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
3408
|
const { start: startUnix, end: endUnix } = (0, import_helpers8.dateRangeToUnix)(startDate, endDate);
|
|
3380
3409
|
const createdAfter = startDate ? `&created_after=${startUnix}` : "";
|
|
@@ -3477,12 +3506,12 @@ var deleteAuthset = (0, import_toolkit18.createAsyncThunk)(
|
|
|
3477
3506
|
);
|
|
3478
3507
|
var preauthDevice = (0, import_toolkit18.createAsyncThunk)(
|
|
3479
3508
|
`${sliceName3}/preauthDevice`,
|
|
3480
|
-
(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) => {
|
|
3481
3510
|
if (err.response.status === 409) {
|
|
3482
|
-
return
|
|
3511
|
+
return rejectWithValue("A device with a matching identity data set already exists");
|
|
3483
3512
|
}
|
|
3484
3513
|
return commonErrorHandler(err, "The device could not be added:", dispatch);
|
|
3485
|
-
})
|
|
3514
|
+
})
|
|
3486
3515
|
);
|
|
3487
3516
|
var decommissionDevice = (0, import_toolkit18.createAsyncThunk)(
|
|
3488
3517
|
`${sliceName3}/decommissionDevice`,
|
|
@@ -3709,6 +3738,9 @@ var changeNotificationSetting = (0, import_toolkit19.createAsyncThunk)(
|
|
|
3709
3738
|
}
|
|
3710
3739
|
);
|
|
3711
3740
|
|
|
3741
|
+
// src/usersSlice/thunks.ts
|
|
3742
|
+
var import_helptips = require("@northern.tech/common-ui/helptips");
|
|
3743
|
+
|
|
3712
3744
|
// src/api/users-api.ts
|
|
3713
3745
|
var import_axios3 = __toESM(require("axios"), 1);
|
|
3714
3746
|
var Api2 = {
|
|
@@ -3742,7 +3774,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
|
|
|
3742
3774
|
}
|
|
3743
3775
|
const twoFAError = is2FABackend ? " and verification code" : "";
|
|
3744
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.`;
|
|
3745
|
-
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" })));
|
|
3746
3778
|
};
|
|
3747
3779
|
var loginUser = (0, import_toolkit20.createAsyncThunk)(
|
|
3748
3780
|
`${sliceName8}/loginUser`,
|
|
@@ -3766,19 +3798,16 @@ var loginUser = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3766
3798
|
const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
|
|
3767
3799
|
setSessionInfo({ token, expiresAt });
|
|
3768
3800
|
cookies3.remove("JWT", { path: "/" });
|
|
3769
|
-
return (
|
|
3770
|
-
|
|
3771
|
-
Promise.
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
window.
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
|
|
3780
|
-
})
|
|
3781
|
-
);
|
|
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
|
+
});
|
|
3782
3811
|
})
|
|
3783
3812
|
);
|
|
3784
3813
|
var logoutUser = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
|
|
@@ -3796,6 +3825,7 @@ var switchUserOrganization = (0, import_toolkit20.createAsyncThunk)(`${sliceName
|
|
|
3796
3825
|
return Promise.reject();
|
|
3797
3826
|
}
|
|
3798
3827
|
return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
|
|
3828
|
+
window.sessionStorage.setItem("tenantChanged", "true");
|
|
3799
3829
|
setSessionInfo({ ...getSessionInfo(), token });
|
|
3800
3830
|
window.location.reload();
|
|
3801
3831
|
});
|
|
@@ -3836,11 +3866,18 @@ var verify2FA = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3836
3866
|
);
|
|
3837
3867
|
var getUserList = (0, import_toolkit20.createAsyncThunk)(
|
|
3838
3868
|
`${sliceName8}/getUserList`,
|
|
3839
|
-
(_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
|
|
3840
|
-
const
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
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
|
+
);
|
|
3844
3881
|
return dispatch(actions8.receivedUserList(users));
|
|
3845
3882
|
}).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
|
|
3846
3883
|
);
|
|
@@ -3849,9 +3886,7 @@ var getUser = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3849
3886
|
(id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
|
|
3850
3887
|
({ data: user }) => Promise.all([
|
|
3851
3888
|
dispatch(actions8.receivedUser(user)),
|
|
3852
|
-
// @ts-ignore
|
|
3853
3889
|
dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
|
|
3854
|
-
// @ts-ignore
|
|
3855
3890
|
dispatch(updateUserColumnSettings({ currentUserId: user.id })),
|
|
3856
3891
|
user
|
|
3857
3892
|
])
|
|
@@ -3898,10 +3933,7 @@ var createUser = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3898
3933
|
);
|
|
3899
3934
|
var removeUser = (0, import_toolkit20.createAsyncThunk)(
|
|
3900
3935
|
`${sliceName8}/removeUser`,
|
|
3901
|
-
(userId, { dispatch }) => (
|
|
3902
|
-
// @ts-ignore
|
|
3903
|
-
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
|
-
)
|
|
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))
|
|
3905
3937
|
);
|
|
3906
3938
|
var editUser = (0, import_toolkit20.createAsyncThunk)(
|
|
3907
3939
|
`${sliceName8}/editUser`,
|
|
@@ -3922,7 +3954,7 @@ var enableUser2fa = (0, import_toolkit20.createAsyncThunk)(
|
|
|
3922
3954
|
);
|
|
3923
3955
|
var disableUser2fa = (0, import_toolkit20.createAsyncThunk)(
|
|
3924
3956
|
`${sliceName8}/disableUser2fa`,
|
|
3925
|
-
(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))]))
|
|
3926
3958
|
);
|
|
3927
3959
|
var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
|
|
3928
3960
|
(accu, [area, definition]) => {
|
|
@@ -4075,7 +4107,6 @@ var getPermissionSets = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4075
4107
|
accu[permissionSet.name] = permissionSetObject;
|
|
4076
4108
|
return accu;
|
|
4077
4109
|
},
|
|
4078
|
-
// @ts-ignore
|
|
4079
4110
|
{ ...getState().users.permissionSetsById }
|
|
4080
4111
|
);
|
|
4081
4112
|
return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
|
|
@@ -4168,7 +4199,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
|
|
|
4168
4199
|
role: {
|
|
4169
4200
|
...emptyRole,
|
|
4170
4201
|
name,
|
|
4171
|
-
// @ts-ignore
|
|
4172
4202
|
description: description ? description : roleState.description,
|
|
4173
4203
|
uiPermissions: {
|
|
4174
4204
|
...emptyUiPermissions,
|
|
@@ -4211,10 +4241,7 @@ var editRole = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/editRole`,
|
|
|
4211
4241
|
});
|
|
4212
4242
|
var removeRole = (0, import_toolkit20.createAsyncThunk)(
|
|
4213
4243
|
`${sliceName8}/removeRole`,
|
|
4214
|
-
(roleId, { dispatch }) => (
|
|
4215
|
-
// @ts-ignore
|
|
4216
|
-
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
|
-
)
|
|
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))
|
|
4218
4245
|
);
|
|
4219
4246
|
var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
|
|
4220
4247
|
`${sliceName8}/getGlobalSettings`,
|
|
@@ -4225,7 +4252,6 @@ var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4225
4252
|
);
|
|
4226
4253
|
var saveGlobalSettings = (0, import_toolkit20.createAsyncThunk)(
|
|
4227
4254
|
`${sliceName8}/saveGlobalSettings`,
|
|
4228
|
-
// @ts-ignore
|
|
4229
4255
|
({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
|
|
4230
4256
|
if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
|
|
4231
4257
|
return;
|
|
@@ -4271,11 +4297,9 @@ var saveUserSettings = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/sav
|
|
|
4271
4297
|
const tooltipState = getTooltipsState(getState());
|
|
4272
4298
|
const updatedSettings = {
|
|
4273
4299
|
...userSettings,
|
|
4274
|
-
// @ts-ignore
|
|
4275
4300
|
...settings,
|
|
4276
4301
|
onboarding: {
|
|
4277
4302
|
...onboardingState,
|
|
4278
|
-
// @ts-ignore
|
|
4279
4303
|
...settings.onboarding
|
|
4280
4304
|
},
|
|
4281
4305
|
tooltips: tooltipState
|
|
@@ -4319,10 +4343,7 @@ var generateToken = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4319
4343
|
);
|
|
4320
4344
|
var revokeToken = (0, import_toolkit20.createAsyncThunk)(
|
|
4321
4345
|
`${sliceName8}/revokeToken`,
|
|
4322
|
-
(token, { dispatch }) => (
|
|
4323
|
-
// @ts-ignore
|
|
4324
|
-
general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
4325
|
-
)
|
|
4346
|
+
(token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
4326
4347
|
);
|
|
4327
4348
|
var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
|
|
4328
4349
|
let tasks = [dispatch(actions8.setTooltipState(remainder))];
|
|
@@ -4331,27 +4352,25 @@ var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/
|
|
|
4331
4352
|
}
|
|
4332
4353
|
return Promise.all(tasks);
|
|
4333
4354
|
});
|
|
4334
|
-
var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (
|
|
4335
|
-
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 } }), {});
|
|
4336
4357
|
return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
|
|
4337
4358
|
});
|
|
4338
4359
|
var submitFeedback = (0, import_toolkit20.createAsyncThunk)(
|
|
4339
4360
|
`${sliceName8}/submitFeedback`,
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
4349
|
-
});
|
|
4350
|
-
}
|
|
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
|
+
})
|
|
4351
4369
|
);
|
|
4352
4370
|
|
|
4353
4371
|
// src/deploymentsSlice/thunks.ts
|
|
4354
4372
|
var import_helpers10 = require("@northern.tech/utils/helpers");
|
|
4373
|
+
var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
|
|
4355
4374
|
var import_toolkit21 = require("@reduxjs/toolkit");
|
|
4356
4375
|
var import_validator = require("validator");
|
|
4357
4376
|
var { receivedDevice, setSnackbar: setSnackbar4 } = actions_default;
|
|
@@ -4408,6 +4427,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit21.createAsyncThunk)(`${sliceNam
|
|
|
4408
4427
|
return Promise.all(tasks);
|
|
4409
4428
|
});
|
|
4410
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
|
+
};
|
|
4411
4450
|
var MAX_PREVIOUS_PHASES_COUNT = 5;
|
|
4412
4451
|
var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
|
|
4413
4452
|
let request;
|
|
@@ -4418,6 +4457,9 @@ var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/cre
|
|
|
4418
4457
|
} else {
|
|
4419
4458
|
request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
|
|
4420
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());
|
|
4421
4463
|
return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
|
|
4422
4464
|
const lastslashindex = data.headers.location.lastIndexOf("/");
|
|
4423
4465
|
const deploymentId = data.headers.location.substring(lastslashindex + 1);
|
|
@@ -4432,6 +4474,7 @@ var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/cre
|
|
|
4432
4474
|
dispatch(getSingleDeployment(deploymentId)),
|
|
4433
4475
|
dispatch(setSnackbar4("Deployment created successfully", TIMEOUTS.fiveSeconds))
|
|
4434
4476
|
];
|
|
4477
|
+
trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
|
|
4435
4478
|
const { canManageUsers } = getUserCapabilities(getState());
|
|
4436
4479
|
if (canManageUsers) {
|
|
4437
4480
|
const { phases, retries } = newDeployment;
|