@northern.tech/store 0.3.2 → 0.3.4
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/BillingProfile-ChP2_Sqw.d.cts +45 -0
- package/dist/BillingProfile-ChP2_Sqw.d.ts +45 -0
- package/dist/actions.cjs +22 -23
- package/dist/actions.cjs.map +1 -1
- package/dist/actions.js +12 -12
- package/dist/api/general-api.cjs.map +1 -1
- package/dist/api/general-api.js +5 -5
- package/dist/api/types/Tenant.ts +17 -12
- package/dist/api/users-api.cjs.map +1 -1
- package/dist/api/users-api.js +6 -6
- 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.cjs +1 -3
- package/dist/appSlice/index.cjs.map +1 -1
- package/dist/appSlice/index.js +4 -4
- package/dist/appSlice/thunks.cjs +153 -120
- package/dist/appSlice/thunks.cjs.map +1 -1
- package/dist/appSlice/thunks.js +28 -27
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.js +4 -4
- package/dist/{chunk-NI4SZOCF.js → chunk-4RWZR3BN.js} +23 -25
- package/dist/{chunk-NI4SZOCF.js.map → chunk-4RWZR3BN.js.map} +1 -1
- package/dist/{chunk-YGBFDXXA.js → chunk-7YZCUAXZ.js} +2 -2
- package/dist/{chunk-7PVGDMNM.js → chunk-AFICTIVU.js} +3 -5
- package/dist/{chunk-7PVGDMNM.js.map → chunk-AFICTIVU.js.map} +1 -1
- package/dist/{chunk-YT73QWCN.js → chunk-AUBJUUP3.js} +3 -3
- package/dist/{chunk-UEP36GCI.js → chunk-AVX7VVOK.js} +3 -3
- package/dist/{chunk-4B3IMP4I.js → chunk-BSN2TOQC.js} +1 -1
- package/dist/{chunk-4B3IMP4I.js.map → chunk-BSN2TOQC.js.map} +1 -1
- package/dist/{chunk-VOCOFE4I.js → chunk-DCEKU6UV.js} +2 -2
- package/dist/{chunk-E5LEU5PF.js → chunk-DGQKXSRI.js} +3 -3
- package/dist/{chunk-74OJIKXF.js → chunk-EQLHIPPR.js} +182 -142
- package/dist/chunk-EQLHIPPR.js.map +1 -0
- package/dist/{chunk-MDC7Y3EX.js → chunk-EYCORLYU.js} +44 -40
- package/dist/chunk-EYCORLYU.js.map +1 -0
- package/dist/{chunk-KAQJH2YL.js → chunk-FQDSV3NK.js} +13 -5
- package/dist/chunk-FQDSV3NK.js.map +1 -0
- package/dist/{chunk-XTRPX7JZ.js → chunk-FRSA2YB5.js} +3 -3
- package/dist/chunk-FRSA2YB5.js.map +1 -0
- package/dist/{chunk-ANB5BM5J.js → chunk-FVCYB5OP.js} +37 -32
- package/dist/chunk-FVCYB5OP.js.map +1 -0
- package/dist/{chunk-AMGWP7A4.js → chunk-GAI4VYRZ.js} +2 -2
- package/dist/{chunk-YETZPQFR.js → chunk-GWJIY56H.js} +19 -20
- package/dist/chunk-GWJIY56H.js.map +1 -0
- package/dist/{chunk-Q6M5TTDQ.js → chunk-JO33IORF.js} +2 -2
- package/dist/chunk-JO33IORF.js.map +1 -0
- package/dist/chunk-K4MMUDYT.js +391 -0
- package/dist/chunk-K4MMUDYT.js.map +1 -0
- package/dist/{chunk-XXHONFSQ.js → chunk-L3SY3J5M.js} +4 -4
- package/dist/{chunk-XXHONFSQ.js.map → chunk-L3SY3J5M.js.map} +1 -1
- package/dist/{chunk-JAROCU6M.js → chunk-NCSKCF2S.js} +3 -3
- package/dist/{chunk-CYV6632F.js → chunk-NOQR3TE7.js} +2 -2
- package/dist/{chunk-A6CT6GTI.js → chunk-OEP2D6QL.js} +18 -12
- package/dist/chunk-OEP2D6QL.js.map +1 -0
- package/dist/{chunk-2RJIDREZ.js → chunk-PAIB5V27.js} +32 -23
- package/dist/chunk-PAIB5V27.js.map +1 -0
- package/dist/{chunk-FGKMJS3B.js → chunk-RX32WLVJ.js} +2 -4
- package/dist/chunk-RX32WLVJ.js.map +1 -0
- package/dist/{chunk-YTQUNAZP.js → chunk-X3GZILYD.js} +3 -3
- package/dist/{chunk-25AKG5HH.js → chunk-Y575RZHR.js} +19 -11
- package/dist/chunk-Y575RZHR.js.map +1 -0
- package/dist/{chunk-RX55KAKX.js → chunk-ZWOAFHAR.js} +2 -2
- package/dist/{chunk-NNADGHSL.js → chunk-ZZMFXRQK.js} +14 -14
- package/dist/commonConstants.cjs.map +1 -1
- package/dist/commonConstants.d.cts +1 -1
- package/dist/commonConstants.d.ts +1 -1
- package/dist/commonConstants.js +1 -1
- package/dist/commonSelectors.cjs +47 -29
- package/dist/commonSelectors.cjs.map +1 -1
- package/dist/commonSelectors.d.cts +55 -46
- package/dist/commonSelectors.d.ts +55 -46
- package/dist/commonSelectors.js +11 -11
- 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 +7 -3
- package/dist/deploymentdevicehook.cjs +159 -125
- 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 +34 -31
- 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 +3 -3
- package/dist/deploymentsSlice/index.cjs +8 -8
- package/dist/deploymentsSlice/index.cjs.map +1 -1
- package/dist/deploymentsSlice/index.js +4 -4
- package/dist/deploymentsSlice/selectors.cjs +8 -8
- package/dist/deploymentsSlice/selectors.cjs.map +1 -1
- package/dist/deploymentsSlice/selectors.js +4 -4
- package/dist/deploymentsSlice/thunks.cjs +153 -120
- package/dist/deploymentsSlice/thunks.cjs.map +1 -1
- package/dist/deploymentsSlice/thunks.js +28 -27
- 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 +5 -3
- package/dist/devicesSlice/index.cjs +8 -8
- package/dist/devicesSlice/index.cjs.map +1 -1
- package/dist/devicesSlice/index.js +4 -4
- package/dist/devicesSlice/selectors.cjs +9 -9
- package/dist/devicesSlice/selectors.cjs.map +1 -1
- package/dist/devicesSlice/selectors.js +4 -4
- package/dist/devicesSlice/thunks.cjs +155 -120
- 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 +30 -27
- package/dist/flag-eu-5477R2P4.svg +130 -0
- package/dist/flag-us-HNQAF66I.svg +63 -0
- package/dist/liststatehook.cjs +971 -0
- package/dist/liststatehook.cjs.map +1 -0
- package/dist/liststatehook.d.cts +246 -0
- package/dist/liststatehook.d.ts +246 -0
- package/dist/liststatehook.js +88 -0
- package/dist/liststatehook.js.map +1 -0
- package/dist/locationutils.cjs +942 -0
- package/dist/locationutils.cjs.map +1 -0
- package/dist/locationutils.d.cts +113 -0
- package/dist/locationutils.d.ts +113 -0
- package/dist/locationutils.js +46 -0
- package/dist/locationutils.js.map +1 -0
- package/dist/monitorSlice/constants.cjs +8 -8
- package/dist/monitorSlice/constants.cjs.map +1 -1
- package/dist/monitorSlice/constants.js +3 -3
- package/dist/monitorSlice/index.cjs +8 -8
- package/dist/monitorSlice/index.cjs.map +1 -1
- package/dist/monitorSlice/index.js +4 -4
- package/dist/monitorSlice/thunks.cjs +74 -62
- package/dist/monitorSlice/thunks.cjs.map +1 -1
- package/dist/monitorSlice/thunks.js +24 -24
- package/dist/onboardingSlice/index.cjs +1 -3
- package/dist/onboardingSlice/index.cjs.map +1 -1
- package/dist/onboardingSlice/index.js +1 -1
- package/dist/onboardingSlice/thunks.cjs +157 -124
- package/dist/onboardingSlice/thunks.cjs.map +1 -1
- package/dist/onboardingSlice/thunks.d.cts +2 -34
- package/dist/onboardingSlice/thunks.d.ts +2 -34
- package/dist/onboardingSlice/thunks.js +28 -29
- 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 +5 -3
- package/dist/organizationSlice/index.cjs +18 -15
- package/dist/organizationSlice/index.cjs.map +1 -1
- package/dist/organizationSlice/index.d.cts +27 -1012
- package/dist/organizationSlice/index.d.ts +27 -1012
- package/dist/organizationSlice/index.js +4 -4
- package/dist/organizationSlice/selectors.cjs.map +1 -1
- package/dist/organizationSlice/selectors.d.cts +10 -1
- package/dist/organizationSlice/selectors.d.ts +10 -1
- package/dist/organizationSlice/selectors.js +4 -4
- package/dist/organizationSlice/thunks.cjs +1619 -1559
- package/dist/organizationSlice/thunks.cjs.map +1 -1
- package/dist/organizationSlice/thunks.d.cts +62 -37
- package/dist/organizationSlice/thunks.d.ts +62 -37
- package/dist/organizationSlice/thunks.js +28 -27
- package/dist/organizationSlice/types.cjs +19 -0
- package/dist/organizationSlice/types.cjs.map +1 -0
- package/dist/organizationSlice/types.d.cts +5 -0
- package/dist/organizationSlice/types.d.ts +5 -0
- package/dist/organizationSlice/types.js +1 -0
- package/dist/organizationSlice/types.js.map +1 -0
- package/dist/releasesSlice/index.cjs.map +1 -1
- package/dist/releasesSlice/index.js +4 -4
- package/dist/releasesSlice/selectors.cjs +17 -8
- package/dist/releasesSlice/selectors.cjs.map +1 -1
- package/dist/releasesSlice/selectors.js +5 -5
- package/dist/releasesSlice/thunks.cjs +123 -94
- 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 +25 -24
- package/dist/selectors.cjs +53 -29
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +10 -1
- package/dist/selectors.d.ts +10 -1
- package/dist/selectors.js +49 -43
- package/dist/sockethook.cjs +529 -0
- package/dist/sockethook.cjs.map +1 -0
- package/dist/sockethook.d.cts +10 -0
- package/dist/sockethook.d.ts +10 -0
- package/dist/sockethook.js +141 -0
- package/dist/sockethook.js.map +1 -0
- package/dist/store.cjs +38 -29
- package/dist/store.cjs.map +1 -1
- package/dist/store.d.cts +13 -231
- package/dist/store.d.ts +13 -231
- package/dist/store.js +18 -16
- package/dist/storehooks.cjs +273 -198
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.js +38 -37
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +259 -184
- package/dist/thunks.cjs.map +1 -1
- package/dist/thunks.d.cts +6 -2
- package/dist/thunks.d.ts +6 -2
- package/dist/thunks.js +30 -29
- package/dist/types-DBj17FZO.d.cts +135 -0
- package/dist/types-DnfZa6xd.d.ts +135 -0
- package/dist/usersSlice/constants.cjs +10 -10
- package/dist/usersSlice/constants.cjs.map +1 -1
- package/dist/usersSlice/constants.d.cts +6 -6
- package/dist/usersSlice/constants.d.ts +6 -6
- package/dist/usersSlice/constants.js +3 -3
- package/dist/usersSlice/index.cjs +10 -10
- package/dist/usersSlice/index.cjs.map +1 -1
- package/dist/usersSlice/index.js +4 -4
- 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 +13 -7
- package/dist/usersSlice/thunks.cjs +151 -120
- 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 +28 -27
- package/dist/utils.cjs +23 -24
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +4 -4
- package/package.json +7 -6
- 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-FGKMJS3B.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-YGBFDXXA.js.map → chunk-7YZCUAXZ.js.map} +0 -0
- /package/dist/{chunk-YT73QWCN.js.map → chunk-AUBJUUP3.js.map} +0 -0
- /package/dist/{chunk-UEP36GCI.js.map → chunk-AVX7VVOK.js.map} +0 -0
- /package/dist/{chunk-VOCOFE4I.js.map → chunk-DCEKU6UV.js.map} +0 -0
- /package/dist/{chunk-E5LEU5PF.js.map → chunk-DGQKXSRI.js.map} +0 -0
- /package/dist/{chunk-AMGWP7A4.js.map → chunk-GAI4VYRZ.js.map} +0 -0
- /package/dist/{chunk-JAROCU6M.js.map → chunk-NCSKCF2S.js.map} +0 -0
- /package/dist/{chunk-CYV6632F.js.map → chunk-NOQR3TE7.js.map} +0 -0
- /package/dist/{chunk-YTQUNAZP.js.map → chunk-X3GZILYD.js.map} +0 -0
- /package/dist/{chunk-RX55KAKX.js.map → chunk-ZWOAFHAR.js.map} +0 -0
- /package/dist/{chunk-NNADGHSL.js.map → chunk-ZZMFXRQK.js.map} +0 -0
package/dist/thunks.cjs
CHANGED
|
@@ -38,7 +38,6 @@ __export(thunks_exports, {
|
|
|
38
38
|
addUserToCurrentTenant: () => addUserToCurrentTenant,
|
|
39
39
|
advanceOnboarding: () => advanceOnboarding,
|
|
40
40
|
applyDeviceConfig: () => applyDeviceConfig,
|
|
41
|
-
applyOnboardingFallbacks: () => applyOnboardingFallbacks,
|
|
42
41
|
cancelFileUpload: () => cancelFileUpload,
|
|
43
42
|
cancelRequest: () => cancelRequest,
|
|
44
43
|
cancelUpgrade: () => cancelUpgrade,
|
|
@@ -182,6 +181,7 @@ __export(thunks_exports, {
|
|
|
182
181
|
submitFeedback: () => submitFeedback,
|
|
183
182
|
switchUserOrganization: () => switchUserOrganization,
|
|
184
183
|
tenantDataDivergedMessage: () => tenantDataDivergedMessage,
|
|
184
|
+
triggerDeviceUpdate: () => triggerDeviceUpdate,
|
|
185
185
|
updateDeploymentControlMap: () => updateDeploymentControlMap,
|
|
186
186
|
updateDeviceAuth: () => updateDeviceAuth,
|
|
187
187
|
updateDevicesAuth: () => updateDevicesAuth,
|
|
@@ -203,6 +203,14 @@ var import_universal_cookie = __toESM(require("universal-cookie"), 1);
|
|
|
203
203
|
|
|
204
204
|
// src/appSlice/constants.ts
|
|
205
205
|
var import_icons_material = require("@mui/icons-material");
|
|
206
|
+
|
|
207
|
+
// ../../assets/img/flag-eu.svg
|
|
208
|
+
var flag_eu_default = "./flag-eu-5477R2P4.svg";
|
|
209
|
+
|
|
210
|
+
// ../../assets/img/flag-us.svg
|
|
211
|
+
var flag_us_default = "./flag-us-HNQAF66I.svg";
|
|
212
|
+
|
|
213
|
+
// src/appSlice/constants.ts
|
|
206
214
|
var startingDeviceCount = {
|
|
207
215
|
os: "for first 50 devices",
|
|
208
216
|
professional: "for first 250 devices"
|
|
@@ -225,36 +233,36 @@ var emptyChartSelection = { software: "", group: "", chartType: chartTypes.bar.k
|
|
|
225
233
|
var defaultReportType = "distribution";
|
|
226
234
|
var defaultReports = [{ ...emptyChartSelection, group: null, attribute: "artifact_name", type: defaultReportType }];
|
|
227
235
|
var locations = {
|
|
228
|
-
eu: { key: "eu", title: "EU", location: "eu.hosted.mender.io" },
|
|
229
|
-
us: { key: "us", title: "US", location: "hosted.mender.io" }
|
|
236
|
+
eu: { key: "eu", title: "EU", location: "eu.hosted.mender.io", icon: flag_eu_default },
|
|
237
|
+
us: { key: "us", title: "US", location: "hosted.mender.io", icon: flag_us_default }
|
|
230
238
|
};
|
|
231
239
|
var PLANS = {
|
|
232
240
|
os: {
|
|
233
241
|
id: "os",
|
|
234
242
|
name: "Basic",
|
|
235
243
|
offer: true,
|
|
236
|
-
price: "$32/month",
|
|
244
|
+
price: "$32 / month",
|
|
237
245
|
deviceCount: startingDeviceCount.os,
|
|
238
|
-
offerprice: "$23/month for first 50 devices",
|
|
246
|
+
offerprice: "$23 / month for first 50 devices",
|
|
239
247
|
price2: "for first 6 months;\n$29/month thereafter",
|
|
240
|
-
features: ["
|
|
248
|
+
features: ["Access to core features of Mender", "Basic support"]
|
|
241
249
|
},
|
|
242
250
|
professional: {
|
|
243
251
|
id: "professional",
|
|
244
252
|
name: "Professional",
|
|
245
253
|
offer: true,
|
|
246
|
-
price: "$269/month",
|
|
254
|
+
price: "$269 / month",
|
|
247
255
|
deviceCount: startingDeviceCount.professional,
|
|
248
|
-
offerprice: "$200/month for first 50 devices",
|
|
256
|
+
offerprice: "$200 / month for first 50 devices",
|
|
249
257
|
price2: "for first 6 months;\n$249/month thereafter",
|
|
250
|
-
features: ["
|
|
258
|
+
features: ["Advanced OTA features", "Higher priority support"]
|
|
251
259
|
},
|
|
252
260
|
enterprise: {
|
|
253
261
|
id: "enterprise",
|
|
254
262
|
name: "Enterprise",
|
|
255
263
|
price: "Custom pricing",
|
|
256
|
-
deviceCount: "
|
|
257
|
-
features: ["
|
|
264
|
+
deviceCount: "Unlimited devices",
|
|
265
|
+
features: ["All Mender features", "Advanced security features", "SLA-backed support"]
|
|
258
266
|
}
|
|
259
267
|
};
|
|
260
268
|
var ADDONS = {
|
|
@@ -725,6 +733,7 @@ var DEVICE_STATES = {
|
|
|
725
733
|
rejected: "rejected"
|
|
726
734
|
};
|
|
727
735
|
var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
|
|
736
|
+
var REPORT_CHART_SIZE_LIMIT = 6;
|
|
728
737
|
|
|
729
738
|
// src/monitorSlice/constants.ts
|
|
730
739
|
var alertChannels = { email: "email" };
|
|
@@ -806,13 +815,16 @@ var SSO_TYPES = {
|
|
|
806
815
|
configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
|
|
807
816
|
}
|
|
808
817
|
};
|
|
809
|
-
var
|
|
810
|
-
{ title: "Artifact", queryParameter: "object_type", value: "artifact" },
|
|
811
|
-
{ title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
|
|
812
|
-
{ title: "Device", queryParameter: "object_id", value: "device" },
|
|
813
|
-
{ title: "
|
|
814
|
-
|
|
815
|
-
|
|
818
|
+
var auditlogTypes = {
|
|
819
|
+
artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
|
|
820
|
+
deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
|
|
821
|
+
device: { title: "Device", queryParameter: "object_id", value: "device" },
|
|
822
|
+
user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
|
|
823
|
+
user: { title: "User", queryParameter: "object_id", value: "user" },
|
|
824
|
+
tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
|
|
825
|
+
};
|
|
826
|
+
var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
|
|
827
|
+
var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
|
|
816
828
|
var emptyWebhook = {
|
|
817
829
|
description: "",
|
|
818
830
|
enabled: true,
|
|
@@ -946,7 +958,7 @@ var uiPermissionsByArea = {
|
|
|
946
958
|
explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
|
|
947
959
|
key: "auditlog",
|
|
948
960
|
uiPermissions: [uiPermissionsById.read],
|
|
949
|
-
title: "System
|
|
961
|
+
title: "System Audit Log"
|
|
950
962
|
},
|
|
951
963
|
deployments: {
|
|
952
964
|
endpoints: [
|
|
@@ -1097,7 +1109,7 @@ var serviceProviderRolesById = {
|
|
|
1097
1109
|
},
|
|
1098
1110
|
readOnly: {
|
|
1099
1111
|
name: "Read access",
|
|
1100
|
-
value: staticRolesByName.
|
|
1112
|
+
value: staticRolesByName.readOnly,
|
|
1101
1113
|
description: "This role can see all linked organizations but cannot make any changes",
|
|
1102
1114
|
permissions: [],
|
|
1103
1115
|
uiPermissions: {
|
|
@@ -1429,7 +1441,7 @@ var getGroups = (0, import_toolkit3.createSelector)([getGroupsById], (groupsById
|
|
|
1429
1441
|
(accu, [groupname, group]) => {
|
|
1430
1442
|
const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
|
|
1431
1443
|
const groupItem = { ...group, groupId: name, name: groupname };
|
|
1432
|
-
if (group.filters
|
|
1444
|
+
if (group.filters?.length > 0) {
|
|
1433
1445
|
if (groupname !== UNGROUPED_GROUP.id) {
|
|
1434
1446
|
accu.dynamic.push(groupItem);
|
|
1435
1447
|
} else {
|
|
@@ -1504,14 +1516,15 @@ var getAuditLogEntry = (0, import_toolkit4.createSelector)([getAuditLog, getAudi
|
|
|
1504
1516
|
// src/utils.ts
|
|
1505
1517
|
var import_helpers3 = require("@northern.tech/utils/helpers");
|
|
1506
1518
|
var filterProcessors = {
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1519
|
+
[DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
|
|
1520
|
+
[DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
|
|
1521
|
+
[DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
|
|
1522
|
+
[DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
|
|
1523
|
+
[DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
|
|
1524
|
+
[DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
|
|
1525
|
+
[DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
|
|
1526
|
+
[DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers3.yes,
|
|
1527
|
+
[DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
|
|
1515
1528
|
};
|
|
1516
1529
|
var filterAliases = {
|
|
1517
1530
|
$nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
|
|
@@ -1555,14 +1568,12 @@ var filtersFilter = (item, index, array) => {
|
|
|
1555
1568
|
const firstIndex = array.findIndex((filter) => filterCompare(filter, item));
|
|
1556
1569
|
return firstIndex === index;
|
|
1557
1570
|
};
|
|
1558
|
-
var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => {
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
}, []);
|
|
1565
|
-
};
|
|
1571
|
+
var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
|
|
1572
|
+
if (id && byId[id]) {
|
|
1573
|
+
accu.push({ ...defaultObject, ...byId[id] });
|
|
1574
|
+
}
|
|
1575
|
+
return accu;
|
|
1576
|
+
}, []);
|
|
1566
1577
|
var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
|
|
1567
1578
|
(accu, [key, value]) => {
|
|
1568
1579
|
let values;
|
|
@@ -1635,8 +1646,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
|
|
|
1635
1646
|
var getGlobalSettings = (state) => state.users.globalSettings;
|
|
1636
1647
|
var getCurrentUserId = (state) => state.users.currentUser;
|
|
1637
1648
|
var getUsersById = (state) => state.users.byId;
|
|
1649
|
+
var getUsersList = (0, import_toolkit6.createSelector)([getUsersById], (usersById) => Object.values(usersById));
|
|
1638
1650
|
var getCurrentUser = (0, import_toolkit6.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
|
|
1639
1651
|
var getUserSettings = (state) => state.users.userSettings;
|
|
1652
|
+
var getSelectedDeviceAttribute = (0, import_toolkit6.createSelector)(
|
|
1653
|
+
[getUserSettings],
|
|
1654
|
+
({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
|
|
1655
|
+
);
|
|
1640
1656
|
var getIsDarkMode = (0, import_toolkit6.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
|
|
1641
1657
|
var getShowHelptips = (0, import_toolkit6.createSelector)(
|
|
1642
1658
|
[getTooltipsById],
|
|
@@ -1661,7 +1677,7 @@ var getOfflineThresholdSettings = (0, import_toolkit6.createSelector)([getGlobal
|
|
|
1661
1677
|
interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
|
|
1662
1678
|
intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
|
|
1663
1679
|
}));
|
|
1664
|
-
var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([
|
|
1680
|
+
var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
|
|
1665
1681
|
var getCurrentSession = (state) => state.users.currentSession;
|
|
1666
1682
|
|
|
1667
1683
|
// src/commonSelectors.ts
|
|
@@ -1723,12 +1739,18 @@ var getUserCapabilities = (0, import_toolkit7.createSelector)([getUserRoles, get
|
|
|
1723
1739
|
});
|
|
1724
1740
|
var getTenantCapabilities = (0, import_toolkit7.createSelector)(
|
|
1725
1741
|
[getFeatures, getOrganization, getIsEnterprise],
|
|
1726
|
-
({
|
|
1742
|
+
({
|
|
1743
|
+
hasAuditlogs: isAuditlogEnabled,
|
|
1744
|
+
hasDeviceConfig: isDeviceConfigEnabled,
|
|
1745
|
+
hasDeviceConnect: isDeviceConnectEnabled,
|
|
1746
|
+
hasMonitor: isMonitorEnabled,
|
|
1747
|
+
isHosted
|
|
1748
|
+
}, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
|
|
1727
1749
|
const canDelta = isEnterprise || plan === PLANS.professional.id;
|
|
1728
1750
|
const hasAuditlogs = isAuditlogEnabled && isEnterprise;
|
|
1729
|
-
const hasDeviceConfig =
|
|
1730
|
-
const hasDeviceConnect =
|
|
1731
|
-
const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name ===
|
|
1751
|
+
const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
|
|
1752
|
+
const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
|
|
1753
|
+
const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
|
|
1732
1754
|
return {
|
|
1733
1755
|
canDelta,
|
|
1734
1756
|
canRetry: canDelta,
|
|
@@ -1832,9 +1854,7 @@ var getGroupNames = (0, import_toolkit7.createSelector)([getGroupsById, getUserR
|
|
|
1832
1854
|
});
|
|
1833
1855
|
var getDeviceReportsForUser = (0, import_toolkit7.createSelector)(
|
|
1834
1856
|
[getUserSettings, getCurrentUser, getGlobalSettings, getDevicesById],
|
|
1835
|
-
({ reports }, { id: currentUserId }, globalSettings, devicesById) => {
|
|
1836
|
-
return reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : []);
|
|
1837
|
-
}
|
|
1857
|
+
({ reports }, { id: currentUserId }, globalSettings, devicesById) => reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : [])
|
|
1838
1858
|
);
|
|
1839
1859
|
var listTypeDeviceIdMap = {
|
|
1840
1860
|
deviceList: getListedDevices,
|
|
@@ -1858,7 +1878,7 @@ var getAuditlogDevice = (0, import_toolkit7.createSelector)([getAuditLogEntry, g
|
|
|
1858
1878
|
var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
|
|
1859
1879
|
if (service_provider) {
|
|
1860
1880
|
return roles.reduce((accu, role) => {
|
|
1861
|
-
if (rolesById[role.
|
|
1881
|
+
if (rolesById[role.value]) {
|
|
1862
1882
|
return accu;
|
|
1863
1883
|
}
|
|
1864
1884
|
accu.push(role);
|
|
@@ -1866,7 +1886,7 @@ var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, get
|
|
|
1866
1886
|
}, Object.values(serviceProviderRolesById));
|
|
1867
1887
|
}
|
|
1868
1888
|
return Object.keys(rolesById).reverse().reduce((accu, key) => {
|
|
1869
|
-
const index = accu.findIndex(({
|
|
1889
|
+
const index = accu.findIndex(({ value }) => value === key);
|
|
1870
1890
|
accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
|
|
1871
1891
|
return accu;
|
|
1872
1892
|
}, roles);
|
|
@@ -2009,9 +2029,7 @@ var appSlice = (0, import_toolkit8.createSlice)({
|
|
|
2009
2029
|
...action.payload
|
|
2010
2030
|
};
|
|
2011
2031
|
},
|
|
2012
|
-
setEnvironmentData: (state, action) => {
|
|
2013
|
-
return { ...state, ...action.payload };
|
|
2014
|
-
}
|
|
2032
|
+
setEnvironmentData: (state, action) => ({ ...state, ...action.payload })
|
|
2015
2033
|
}
|
|
2016
2034
|
});
|
|
2017
2035
|
var actions = appSlice.actions;
|
|
@@ -2491,9 +2509,7 @@ var onboardingSlice = (0, import_toolkit13.createSlice)({
|
|
|
2491
2509
|
name: sliceName5,
|
|
2492
2510
|
initialState: initialState5,
|
|
2493
2511
|
reducers: {
|
|
2494
|
-
setOnboardingState: (state, action) => {
|
|
2495
|
-
return { ...state, ...action.payload };
|
|
2496
|
-
},
|
|
2512
|
+
setOnboardingState: (state, action) => ({ ...state, ...action.payload }),
|
|
2497
2513
|
setDemoArtifactPort: (state, action) => {
|
|
2498
2514
|
state.demoArtifactPort = action.payload;
|
|
2499
2515
|
},
|
|
@@ -2852,13 +2868,12 @@ var actions_default = {
|
|
|
2852
2868
|
};
|
|
2853
2869
|
|
|
2854
2870
|
// src/store.ts
|
|
2871
|
+
var import_react_redux = require("react-redux");
|
|
2855
2872
|
var import_helpers7 = require("@northern.tech/utils/helpers");
|
|
2856
2873
|
var import_toolkit17 = require("@reduxjs/toolkit");
|
|
2857
2874
|
var { setSnackbar, uploadProgress } = actions_default;
|
|
2858
2875
|
var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
|
|
2859
|
-
var resetEnvironment = () =>
|
|
2860
|
-
keys.map((key) => window.sessionStorage.removeItem(key));
|
|
2861
|
-
};
|
|
2876
|
+
var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
|
|
2862
2877
|
resetEnvironment();
|
|
2863
2878
|
var commonErrorFallback = "Please check your connection.";
|
|
2864
2879
|
var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
|
|
@@ -2884,6 +2899,14 @@ var sessionReducer = (state, action) => {
|
|
|
2884
2899
|
}
|
|
2885
2900
|
return rootReducer(state, action);
|
|
2886
2901
|
};
|
|
2902
|
+
var rejectionLoggerMiddleware = () => (next) => (action) => {
|
|
2903
|
+
if (action.type.endsWith("/rejected")) {
|
|
2904
|
+
const { error } = action;
|
|
2905
|
+
console.error("Rejection in action:", action);
|
|
2906
|
+
console.error(error.stack);
|
|
2907
|
+
}
|
|
2908
|
+
return next(action);
|
|
2909
|
+
};
|
|
2887
2910
|
var getConfiguredStore = (options = {}) => {
|
|
2888
2911
|
const { preloadedState = {}, ...config } = options;
|
|
2889
2912
|
return (0, import_toolkit17.configureStore)({
|
|
@@ -2899,7 +2922,7 @@ var getConfiguredStore = (options = {}) => {
|
|
|
2899
2922
|
ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
|
|
2900
2923
|
ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
|
|
2901
2924
|
}
|
|
2902
|
-
})
|
|
2925
|
+
}).concat(rejectionLoggerMiddleware)
|
|
2903
2926
|
});
|
|
2904
2927
|
};
|
|
2905
2928
|
var store = getConfiguredStore({
|
|
@@ -2908,12 +2931,13 @@ var store = getConfiguredStore({
|
|
|
2908
2931
|
|
|
2909
2932
|
// src/deploymentsSlice/thunks.ts
|
|
2910
2933
|
var import_helpers8 = require("@northern.tech/utils/helpers");
|
|
2934
|
+
var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
|
|
2911
2935
|
var import_toolkit18 = require("@reduxjs/toolkit");
|
|
2912
2936
|
var import_validator = require("validator");
|
|
2913
2937
|
var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
|
|
2914
2938
|
var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
|
|
2915
2939
|
var deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => group || groups.length === 1 && !(0, import_validator.isUUID)(name) ? groups[0] : filter.name;
|
|
2916
|
-
var transformDeployments = (deployments, deploymentsById) => deployments.sort(import_helpers8.
|
|
2940
|
+
var transformDeployments = (deployments, deploymentsById) => deployments.sort((0, import_helpers8.customSort)(true, "created")).reduce(
|
|
2917
2941
|
(accu, item) => {
|
|
2918
2942
|
const filter = item.filter ?? {};
|
|
2919
2943
|
let deployment = {
|
|
@@ -2964,6 +2988,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceNam
|
|
|
2964
2988
|
return Promise.all(tasks);
|
|
2965
2989
|
});
|
|
2966
2990
|
});
|
|
2991
|
+
var isWithinFirstMonth = (expirationDate) => {
|
|
2992
|
+
if (!expirationDate) {
|
|
2993
|
+
return false;
|
|
2994
|
+
}
|
|
2995
|
+
const endOfFirstMonth = new Date(expirationDate);
|
|
2996
|
+
endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
|
|
2997
|
+
return endOfFirstMonth > /* @__PURE__ */ new Date();
|
|
2998
|
+
};
|
|
2999
|
+
var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
|
|
3000
|
+
import_tracking.default.event({ category: "deployments", action: "create" });
|
|
3001
|
+
if (!totalDeploymentCount) {
|
|
3002
|
+
if (!hasDeployments) {
|
|
3003
|
+
import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
|
|
3004
|
+
if (isWithinFirstMonth(trial_expiration)) {
|
|
3005
|
+
import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
|
|
3006
|
+
}
|
|
3007
|
+
}
|
|
3008
|
+
import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
|
|
3009
|
+
}
|
|
3010
|
+
};
|
|
2967
3011
|
var MAX_PREVIOUS_PHASES_COUNT = 5;
|
|
2968
3012
|
var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
|
|
2969
3013
|
let request;
|
|
@@ -2974,6 +3018,9 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
|
|
|
2974
3018
|
} else {
|
|
2975
3019
|
request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
|
|
2976
3020
|
}
|
|
3021
|
+
const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
|
|
3022
|
+
const { hasDeployments } = getGlobalSettings(getState());
|
|
3023
|
+
const { trial_expiration } = getOrganization(getState());
|
|
2977
3024
|
return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
|
|
2978
3025
|
const lastslashindex = data.headers.location.lastIndexOf("/");
|
|
2979
3026
|
const deploymentId = data.headers.location.substring(lastslashindex + 1);
|
|
@@ -2988,6 +3035,7 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
|
|
|
2988
3035
|
dispatch(getSingleDeployment(deploymentId)),
|
|
2989
3036
|
dispatch(setSnackbar2("Deployment created successfully", TIMEOUTS.fiveSeconds))
|
|
2990
3037
|
];
|
|
3038
|
+
trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
|
|
2991
3039
|
const { canManageUsers } = getUserCapabilities(getState());
|
|
2992
3040
|
if (canManageUsers) {
|
|
2993
3041
|
const { phases, retries } = newDeployment;
|
|
@@ -3662,7 +3710,7 @@ var getDevicesByStatus2 = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/
|
|
|
3662
3710
|
page = defaultPage2,
|
|
3663
3711
|
perPage = defaultPerPage2,
|
|
3664
3712
|
sortOptions = [],
|
|
3665
|
-
selectedAttributes =
|
|
3713
|
+
selectedAttributes = getSelectedDeviceAttribute(getState())
|
|
3666
3714
|
} = options;
|
|
3667
3715
|
const state = getState();
|
|
3668
3716
|
const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
|
|
@@ -3775,7 +3823,6 @@ var getReportingLimits = (0, import_toolkit19.createAsyncThunk)(
|
|
|
3775
3823
|
})
|
|
3776
3824
|
);
|
|
3777
3825
|
var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
|
|
3778
|
-
var REPORT_CHART_SIZE_LIMIT = 6;
|
|
3779
3826
|
var getSingleReportData = (reportConfig, groups) => {
|
|
3780
3827
|
const { attribute, group, software = "" } = reportConfig;
|
|
3781
3828
|
const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
|
|
@@ -3855,6 +3902,13 @@ var getDeviceConnect = (0, import_toolkit19.createAsyncThunk)(
|
|
|
3855
3902
|
({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
|
|
3856
3903
|
)
|
|
3857
3904
|
);
|
|
3905
|
+
var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
|
|
3906
|
+
var triggerDeviceUpdate = (0, import_toolkit19.createAsyncThunk)(
|
|
3907
|
+
`${sliceName3}/triggerDeviceUpdate`,
|
|
3908
|
+
({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
|
|
3909
|
+
() => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
|
|
3910
|
+
)
|
|
3911
|
+
);
|
|
3858
3912
|
var getSessionDetails = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
|
|
3859
3913
|
const { start: startUnix, end: endUnix } = (0, import_helpers9.dateRangeToUnix)(startDate, endDate);
|
|
3860
3914
|
const createdAfter = startDate ? `&created_after=${startUnix}` : "";
|
|
@@ -3957,12 +4011,12 @@ var deleteAuthset = (0, import_toolkit19.createAsyncThunk)(
|
|
|
3957
4011
|
);
|
|
3958
4012
|
var preauthDevice = (0, import_toolkit19.createAsyncThunk)(
|
|
3959
4013
|
`${sliceName3}/preauthDevice`,
|
|
3960
|
-
(authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
|
|
4014
|
+
(authset, { dispatch, rejectWithValue }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).then(() => Promise.resolve(dispatch(setSnackbar3("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds)))).catch((err) => {
|
|
3961
4015
|
if (err.response.status === 409) {
|
|
3962
|
-
return
|
|
4016
|
+
return rejectWithValue("A device with a matching identity data set already exists");
|
|
3963
4017
|
}
|
|
3964
4018
|
return commonErrorHandler(err, "The device could not be added:", dispatch);
|
|
3965
|
-
})
|
|
4019
|
+
})
|
|
3966
4020
|
);
|
|
3967
4021
|
var decommissionDevice = (0, import_toolkit19.createAsyncThunk)(
|
|
3968
4022
|
`${sliceName3}/decommissionDevice`,
|
|
@@ -4179,18 +4233,17 @@ var getDeviceMonitorConfig = (0, import_toolkit20.createAsyncThunk)(
|
|
|
4179
4233
|
);
|
|
4180
4234
|
var changeNotificationSetting = (0, import_toolkit20.createAsyncThunk)(
|
|
4181
4235
|
`${sliceName4}/changeNotificationSetting`,
|
|
4182
|
-
({ enabled, channel = alertChannels.email }, { dispatch }) => {
|
|
4183
|
-
|
|
4184
|
-
(
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
);
|
|
4189
|
-
}
|
|
4236
|
+
({ enabled, channel = alertChannels.email }, { dispatch }) => general_api_default.put(`${monitorApiUrlv1}/settings/global/channel/alerts/${channel}/status`, { enabled }).catch((err) => commonErrorHandler(err, `${enabled ? "En" : "Dis"}abling ${channel} alerts failed:`, dispatch)).then(
|
|
4237
|
+
() => Promise.all([
|
|
4238
|
+
dispatch(actions4.changeAlertChannel({ channel, enabled })),
|
|
4239
|
+
dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
|
|
4240
|
+
])
|
|
4241
|
+
)
|
|
4190
4242
|
);
|
|
4191
4243
|
|
|
4192
4244
|
// src/onboardingSlice/thunks.ts
|
|
4193
4245
|
var import_helpers10 = require("@northern.tech/utils/helpers");
|
|
4246
|
+
var import_tracking2 = __toESM(require("@northern.tech/utils/tracking"), 1);
|
|
4194
4247
|
var import_toolkit21 = require("@reduxjs/toolkit");
|
|
4195
4248
|
var import_universal_cookie3 = __toESM(require("universal-cookie"), 1);
|
|
4196
4249
|
var cookies3 = new import_universal_cookie3.default();
|
|
@@ -4272,7 +4325,7 @@ var setOnboardingCanceled = (0, import_toolkit21.createAsyncThunk)(
|
|
|
4272
4325
|
Promise.resolve(dispatch(actions5.setShowOnboardingHelp(false))),
|
|
4273
4326
|
Promise.resolve(dispatch(actions5.setShowDismissOnboardingTipsDialog(false))),
|
|
4274
4327
|
Promise.resolve(dispatch(actions5.setOnboardingComplete(true)))
|
|
4275
|
-
]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE)))
|
|
4328
|
+
]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE))).then(() => import_tracking2.default.event({ category: "onboarding", action: onboardingSteps.ONBOARDING_CANCELED }))
|
|
4276
4329
|
);
|
|
4277
4330
|
var advanceOnboarding = (0, import_toolkit21.createAsyncThunk)(`${sliceName5}/advanceOnboarding`, (stepId, { dispatch, getState }) => {
|
|
4278
4331
|
const steps = orderedOnboardingSteps;
|
|
@@ -4283,7 +4336,8 @@ var advanceOnboarding = (0, import_toolkit21.createAsyncThunk)(`${sliceName5}/ad
|
|
|
4283
4336
|
}
|
|
4284
4337
|
const madeProgress = steps[stepIndex + 1];
|
|
4285
4338
|
const state = { ...getOnboardingState(getState()), progress: madeProgress };
|
|
4286
|
-
state.complete = stepIndex + 1 >=
|
|
4339
|
+
state.complete = stepIndex + 1 >= orderedOnboardingSteps.findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
|
|
4340
|
+
import_tracking2.default.event({ category: "onboarding", action: stepId });
|
|
4287
4341
|
return Promise.all([dispatch(actions5.setOnboardingProgress(madeProgress)), dispatch(saveUserSettings({ onboarding: state }))]);
|
|
4288
4342
|
});
|
|
4289
4343
|
|
|
@@ -4362,7 +4416,7 @@ var startUpgrade = (0, import_toolkit22.createAsyncThunk)(
|
|
|
4362
4416
|
var cancelUpgrade = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/cancelUpgrade`, (tenantId) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/cancel`));
|
|
4363
4417
|
var completeUpgrade = (0, import_toolkit22.createAsyncThunk)(
|
|
4364
4418
|
`${sliceName6}/completeUpgrade`,
|
|
4365
|
-
({ tenantId, plan }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/complete`, { plan }).catch((err) => commonErrorHandler(err, `There was an error upgrading your account:`, dispatch)).then(() => Promise.
|
|
4419
|
+
({ tenantId, plan, billing_profile }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/complete`, { plan, billing_profile }).catch((err) => commonErrorHandler(err, `There was an error upgrading your account:`, dispatch)).then(() => Promise.all([dispatch(getDeviceLimit2()), dispatch(getUserOrganization())]))
|
|
4366
4420
|
);
|
|
4367
4421
|
var prepareAuditlogQuery = ({ startDate, endDate, user: userFilter, type, detail: detailFilter, sort = {} }) => {
|
|
4368
4422
|
const userId = userFilter?.id || userFilter;
|
|
@@ -4410,9 +4464,15 @@ var setAuditlogsState = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/se
|
|
|
4410
4464
|
return Promise.all(tasks);
|
|
4411
4465
|
});
|
|
4412
4466
|
var tenantDataDivergedMessage = "The system detected there is a change in your plan or purchased add-ons. Please log out and log in again";
|
|
4413
|
-
var addTenant = (0, import_toolkit22.createAsyncThunk)(
|
|
4414
|
-
|
|
4415
|
-
})
|
|
4467
|
+
var addTenant = (0, import_toolkit22.createAsyncThunk)(
|
|
4468
|
+
`${sliceName6}/createTenant`,
|
|
4469
|
+
(selectionState, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants`, selectionState).then(
|
|
4470
|
+
() => Promise.all([
|
|
4471
|
+
dispatch(setSnackbar4("Tenant was created successfully.")),
|
|
4472
|
+
new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
|
|
4473
|
+
])
|
|
4474
|
+
).catch((err) => commonErrorHandler(err, "There was an error creating tenant", dispatch, commonErrorFallback))
|
|
4475
|
+
);
|
|
4416
4476
|
var tenantListRetrieval = async (config) => {
|
|
4417
4477
|
const { page, perPage } = config;
|
|
4418
4478
|
const params = new URLSearchParams({ page, per_page: perPage }).toString();
|
|
@@ -4437,21 +4497,29 @@ var setTenantsListState = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/
|
|
|
4437
4497
|
}
|
|
4438
4498
|
return dispatch(actions6.setTenantListState({ ...nextState }));
|
|
4439
4499
|
});
|
|
4440
|
-
var editTenantDeviceLimit = (0, import_toolkit22.createAsyncThunk)(
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
|
|
4448
|
-
|
|
4449
|
-
|
|
4450
|
-
|
|
4451
|
-
|
|
4452
|
-
})
|
|
4453
|
-
|
|
4454
|
-
|
|
4500
|
+
var editTenantDeviceLimit = (0, import_toolkit22.createAsyncThunk)(
|
|
4501
|
+
`${sliceName6}/editDeviceLimit`,
|
|
4502
|
+
({ newLimit, id, name }, { dispatch }) => general_api_default.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limit: newLimit, name }).catch((err) => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(
|
|
4503
|
+
() => Promise.all([
|
|
4504
|
+
dispatch(setSnackbar4("Device Limit was changed successfully")),
|
|
4505
|
+
dispatch(getUserOrganization()),
|
|
4506
|
+
new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
|
|
4507
|
+
])
|
|
4508
|
+
)
|
|
4509
|
+
);
|
|
4510
|
+
var removeTenant = (0, import_toolkit22.createAsyncThunk)(
|
|
4511
|
+
`${sliceName6}/editDeviceLimit`,
|
|
4512
|
+
({ id }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${id}/remove/start`).catch((err) => commonErrorHandler(err, `There was an error removing the tenant`, dispatch)).then(
|
|
4513
|
+
() => Promise.all([
|
|
4514
|
+
dispatch(setSnackbar4("The tenant was removed successfully")),
|
|
4515
|
+
dispatch(getUserOrganization()),
|
|
4516
|
+
new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
|
|
4517
|
+
])
|
|
4518
|
+
)
|
|
4519
|
+
);
|
|
4520
|
+
var getUserOrganization = (0, import_toolkit22.createAsyncThunk)(
|
|
4521
|
+
`${sliceName6}/getUserOrganization`,
|
|
4522
|
+
(_, { dispatch, getState }) => general_api_default.get(`${tenantadmApiUrlv1}/user/tenant`).then((res) => {
|
|
4455
4523
|
let tasks = [dispatch(actions6.setOrganization(res.data))];
|
|
4456
4524
|
const { addons, plan, trial } = res.data;
|
|
4457
4525
|
const { token } = getCurrentSession(getState());
|
|
@@ -4463,15 +4531,18 @@ var getUserOrganization = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/
|
|
|
4463
4531
|
tasks.push(dispatch(setAnnouncement(tenantDataDivergedMessage)));
|
|
4464
4532
|
}
|
|
4465
4533
|
return Promise.all(tasks);
|
|
4466
|
-
})
|
|
4467
|
-
|
|
4534
|
+
})
|
|
4535
|
+
);
|
|
4468
4536
|
var sendSupportMessage = (0, import_toolkit22.createAsyncThunk)(
|
|
4469
4537
|
`${sliceName6}/sendSupportMessage`,
|
|
4470
4538
|
(content, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, content).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(() => Promise.resolve(dispatch(setSnackbar4({ message: "Your request was sent successfully", autoHideDuration: TIMEOUTS.fiveSeconds }))))
|
|
4471
4539
|
);
|
|
4472
4540
|
var requestPlanChange = (0, import_toolkit22.createAsyncThunk)(
|
|
4473
4541
|
`${sliceName6}/requestPlanChange`,
|
|
4474
|
-
({ content, tenantId }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/plan`, content).catch(
|
|
4542
|
+
({ content, tenantId }, { dispatch, rejectWithValue }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/plan`, content).catch(async (err) => {
|
|
4543
|
+
await commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback);
|
|
4544
|
+
rejectWithValue(err);
|
|
4545
|
+
}).then(() => Promise.resolve(dispatch(setSnackbar4({ message: "Your request was sent successfully", autoHideDuration: TIMEOUTS.fiveSeconds }))))
|
|
4475
4546
|
);
|
|
4476
4547
|
var downloadLicenseReport = (0, import_toolkit22.createAsyncThunk)(
|
|
4477
4548
|
`${sliceName6}/downloadLicenseReport`,
|
|
@@ -4563,9 +4634,22 @@ var getSsoConfigs = (0, import_toolkit22.createAsyncThunk)(
|
|
|
4563
4634
|
)
|
|
4564
4635
|
);
|
|
4565
4636
|
|
|
4566
|
-
// src/
|
|
4637
|
+
// src/locationutils.ts
|
|
4567
4638
|
var import_helpers12 = require("@northern.tech/utils/helpers");
|
|
4568
|
-
var
|
|
4639
|
+
var defaultSelector = (result) => result[0];
|
|
4640
|
+
var commonFields = {
|
|
4641
|
+
...Object.keys(DEVICE_LIST_DEFAULTS).reduce((accu, key) => ({ ...accu, [key]: { parse: Number, select: defaultSelector, target: key } }), {}),
|
|
4642
|
+
id: { parse: String, select: (i) => i, target: "id" },
|
|
4643
|
+
issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
|
|
4644
|
+
open: { parse: Boolean, select: defaultSelector, target: "open" }
|
|
4645
|
+
};
|
|
4646
|
+
var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type }).reduce(
|
|
4647
|
+
(accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
|
|
4648
|
+
selectedTags.map((tag) => `tag=${tag}`)
|
|
4649
|
+
).join("&");
|
|
4650
|
+
|
|
4651
|
+
// src/releasesSlice/thunks.ts
|
|
4652
|
+
var import_helpers13 = require("@northern.tech/utils/helpers");
|
|
4569
4653
|
var import_toolkit23 = require("@reduxjs/toolkit");
|
|
4570
4654
|
var import_axios3 = require("axios");
|
|
4571
4655
|
var import_uuid2 = require("uuid");
|
|
@@ -4573,7 +4657,7 @@ var { setSnackbar: setSnackbar5, initUpload: initUpload2, uploadProgress: upload
|
|
|
4573
4657
|
var { page: defaultPage5, perPage: defaultPerPage5 } = DEVICE_LIST_DEFAULTS;
|
|
4574
4658
|
var sortingDefaults = { direction: SORTING_OPTIONS.desc, key: "modified" };
|
|
4575
4659
|
var flattenRelease = (release, stateRelease) => {
|
|
4576
|
-
const updatedArtifacts = release.artifacts?.sort((0,
|
|
4660
|
+
const updatedArtifacts = release.artifacts?.sort((0, import_helpers13.customSort)(true, "modified")) || [];
|
|
4577
4661
|
const { artifacts, deviceTypes, modified } = updatedArtifacts.reduce(
|
|
4578
4662
|
(accu, item) => {
|
|
4579
4663
|
accu.deviceTypes.push(...item.device_types_compatible);
|
|
@@ -4587,7 +4671,7 @@ var flattenRelease = (release, stateRelease) => {
|
|
|
4587
4671
|
},
|
|
4588
4672
|
{ artifacts: [], deviceTypes: [], modified: void 0 }
|
|
4589
4673
|
);
|
|
4590
|
-
return { ...stateRelease, ...release, artifacts, device_types_compatible: deviceTypes.filter(
|
|
4674
|
+
return { ...stateRelease, ...release, artifacts, device_types_compatible: deviceTypes.filter(import_helpers13.duplicateFilter), modified };
|
|
4591
4675
|
};
|
|
4592
4676
|
var reduceReceivedReleases = (releases, stateReleasesById) => releases.reduce((accu, release) => {
|
|
4593
4677
|
const stateRelease = stateReleasesById[release.name] || {};
|
|
@@ -4611,7 +4695,7 @@ var getArtifactInstallCount = (0, import_toolkit23.createAsyncThunk)(`${sliceNam
|
|
|
4611
4695
|
}
|
|
4612
4696
|
const releaseArtifacts = [...release.artifacts];
|
|
4613
4697
|
const artifact = releaseArtifacts[index];
|
|
4614
|
-
const { key, name, version } = (0,
|
|
4698
|
+
const { key, name, version } = (0, import_helpers13.extractSoftwareItem)(artifact.artifact_provides) ?? {};
|
|
4615
4699
|
const attribute = `${key}${name ? `.${name}` : ""}.version`;
|
|
4616
4700
|
const { filterTerms } = convertDeviceListStateToFilters({
|
|
4617
4701
|
filters: [{ ...emptyFilter, key: attribute, value: version, scope: "inventory" }]
|
|
@@ -4729,9 +4813,12 @@ var editArtifact = (0, import_toolkit23.createAsyncThunk)(
|
|
|
4729
4813
|
if (!release || index === -1) {
|
|
4730
4814
|
return dispatch(getReleases());
|
|
4731
4815
|
}
|
|
4732
|
-
|
|
4816
|
+
const updatedRelease = {
|
|
4817
|
+
...release,
|
|
4818
|
+
artifacts: release.artifacts.map((artifact, i) => i === index ? { ...artifact, description: body.description } : artifact)
|
|
4819
|
+
};
|
|
4733
4820
|
return Promise.all([
|
|
4734
|
-
dispatch(actions7.receiveRelease(
|
|
4821
|
+
dispatch(actions7.receiveRelease(updatedRelease)),
|
|
4735
4822
|
dispatch(setSnackbar5("Artifact details were updated successfully.", TIMEOUTS.fiveSeconds, "")),
|
|
4736
4823
|
dispatch(getRelease(release.name)),
|
|
4737
4824
|
dispatch(selectRelease(release.name))
|
|
@@ -4784,7 +4871,7 @@ var setReleasesListState = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}
|
|
|
4784
4871
|
let tasks = [];
|
|
4785
4872
|
const { isLoading: currentLoading, ...currentRequestState } = currentState;
|
|
4786
4873
|
const { isLoading: selectionLoading, ...selectionRequestState } = nextState;
|
|
4787
|
-
if (!(0,
|
|
4874
|
+
if (!(0, import_helpers13.deepCompare)(currentRequestState, selectionRequestState)) {
|
|
4788
4875
|
nextState.isLoading = true;
|
|
4789
4876
|
tasks.push(dispatch(getReleases(nextState)).finally(() => dispatch(setReleasesListState({ isLoading: false }))));
|
|
4790
4877
|
}
|
|
@@ -4794,7 +4881,7 @@ var setReleasesListState = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}
|
|
|
4794
4881
|
var releaseListRetrieval = (config) => {
|
|
4795
4882
|
const { searchTerm = "", page = defaultPage5, perPage = defaultPerPage5, sort = sortingDefaults, selectedTags = [], type = "" } = config;
|
|
4796
4883
|
const { key: attribute, direction } = sort;
|
|
4797
|
-
const filterQuery =
|
|
4884
|
+
const filterQuery = formatReleases({ pageState: { searchTerm, selectedTags } });
|
|
4798
4885
|
const updateType = type ? `update_type=${type}` : "";
|
|
4799
4886
|
const sorting = attribute ? `sort=${attribute}:${direction}`.toLowerCase() : "";
|
|
4800
4887
|
return general_api_default.get(
|
|
@@ -4804,7 +4891,7 @@ var releaseListRetrieval = (config) => {
|
|
|
4804
4891
|
var deductSearchState = (receivedReleases, config, total, state) => {
|
|
4805
4892
|
let releaseListState = { ...state.releasesList };
|
|
4806
4893
|
const { searchTerm, searchOnly, sort = {}, selectedTags = [], type } = config;
|
|
4807
|
-
const flattenedReleases = Object.values(receivedReleases).sort((0,
|
|
4894
|
+
const flattenedReleases = Object.values(receivedReleases).sort((0, import_helpers13.customSort)(sort.direction === SORTING_OPTIONS.desc, sort.key));
|
|
4808
4895
|
const releaseIds = flattenedReleases.map((item) => item.name);
|
|
4809
4896
|
const isFiltering = !!(selectedTags.length || type || searchTerm);
|
|
4810
4897
|
if (searchOnly) {
|
|
@@ -4832,33 +4919,32 @@ var getReleases = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}/getRelea
|
|
|
4832
4919
|
return Promise.all(tasks);
|
|
4833
4920
|
}).catch((err) => commonErrorHandler(err, `Please check your connection`, dispatch));
|
|
4834
4921
|
});
|
|
4835
|
-
var getRelease = (0, import_toolkit23.createAsyncThunk)(
|
|
4836
|
-
`${
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
);
|
|
4922
|
+
var getRelease = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}/getReleases`, async (name, { dispatch, getState }) => {
|
|
4923
|
+
const releaseResponse = await general_api_default.get(`${deploymentsApiUrlV2}/deployments/releases/${name}`);
|
|
4924
|
+
const { data: release } = releaseResponse;
|
|
4925
|
+
if (release) {
|
|
4926
|
+
const stateRelease = getReleasesById(getState())[release.name] || {};
|
|
4927
|
+
await dispatch(actions7.receiveRelease(flattenRelease(release, stateRelease)));
|
|
4928
|
+
}
|
|
4929
|
+
return Promise.resolve(null);
|
|
4930
|
+
});
|
|
4845
4931
|
var updateReleaseInfo = (0, import_toolkit23.createAsyncThunk)(
|
|
4846
4932
|
`${sliceName7}/updateReleaseInfo`,
|
|
4847
|
-
({ name, info }, { dispatch, getState }) => general_api_default.patch(`${deploymentsApiUrlV2}/deployments/releases/${name}`, info).catch((err) => commonErrorHandler(err, `Release details couldn't be updated.`, dispatch)).then(
|
|
4848
|
-
|
|
4933
|
+
({ name, info }, { dispatch, getState }) => general_api_default.patch(`${deploymentsApiUrlV2}/deployments/releases/${name}`, info).catch((err) => commonErrorHandler(err, `Release details couldn't be updated.`, dispatch)).then(
|
|
4934
|
+
() => Promise.all([
|
|
4849
4935
|
dispatch(actions7.receiveRelease({ ...getReleasesById(getState())[name], ...info, name })),
|
|
4850
4936
|
dispatch(setSnackbar5("Release details were updated successfully.", TIMEOUTS.fiveSeconds, ""))
|
|
4851
|
-
])
|
|
4852
|
-
|
|
4937
|
+
])
|
|
4938
|
+
)
|
|
4853
4939
|
);
|
|
4854
4940
|
var setReleaseTags = (0, import_toolkit23.createAsyncThunk)(
|
|
4855
4941
|
`${sliceName7}/setReleaseTags`,
|
|
4856
|
-
({ name, tags = [] }, { dispatch, getState }) => general_api_default.put(`${deploymentsApiUrlV2}/deployments/releases/${name}/tags`, tags).catch((err) => commonErrorHandler(err, `Release tags couldn't be set.`, dispatch)).then(
|
|
4857
|
-
|
|
4942
|
+
({ name, tags = [] }, { dispatch, getState }) => general_api_default.put(`${deploymentsApiUrlV2}/deployments/releases/${name}/tags`, tags).catch((err) => commonErrorHandler(err, `Release tags couldn't be set.`, dispatch)).then(
|
|
4943
|
+
() => Promise.all([
|
|
4858
4944
|
dispatch(actions7.receiveRelease({ ...getReleasesById(getState())[name], name, tags })),
|
|
4859
4945
|
dispatch(setSnackbar5("Release tags were set successfully.", TIMEOUTS.fiveSeconds, ""))
|
|
4860
|
-
])
|
|
4861
|
-
|
|
4946
|
+
])
|
|
4947
|
+
)
|
|
4862
4948
|
);
|
|
4863
4949
|
var getExistingReleaseTags = (0, import_toolkit23.createAsyncThunk)(
|
|
4864
4950
|
`${sliceName7}/getReleaseTags`,
|
|
@@ -4869,6 +4955,9 @@ var getUpdateTypes = (0, import_toolkit23.createAsyncThunk)(
|
|
|
4869
4955
|
(_, { dispatch }) => general_api_default.get(`${deploymentsApiUrlV2}/releases/all/types`).catch((err) => commonErrorHandler(err, `Existing update types couldn't be retrieved.`, dispatch)).then(({ data: types }) => Promise.resolve(dispatch(actions7.receiveReleaseTypes(types))))
|
|
4870
4956
|
);
|
|
4871
4957
|
|
|
4958
|
+
// src/usersSlice/thunks.ts
|
|
4959
|
+
var import_helptips = require("@northern.tech/common-ui/helptips");
|
|
4960
|
+
|
|
4872
4961
|
// src/api/users-api.ts
|
|
4873
4962
|
var import_axios4 = __toESM(require("axios"), 1);
|
|
4874
4963
|
var Api2 = {
|
|
@@ -4884,7 +4973,7 @@ var Api2 = {
|
|
|
4884
4973
|
var users_api_default = Api2;
|
|
4885
4974
|
|
|
4886
4975
|
// src/usersSlice/thunks.ts
|
|
4887
|
-
var
|
|
4976
|
+
var import_helpers14 = require("@northern.tech/utils/helpers");
|
|
4888
4977
|
var import_retrytimer = require("@northern.tech/utils/retrytimer");
|
|
4889
4978
|
var import_toolkit24 = require("@reduxjs/toolkit");
|
|
4890
4979
|
var import_md52 = __toESM(require("md5"), 1);
|
|
@@ -4892,7 +4981,7 @@ var import_universal_cookie5 = __toESM(require("universal-cookie"), 1);
|
|
|
4892
4981
|
var cookies5 = new import_universal_cookie5.default();
|
|
4893
4982
|
var { setAnnouncement: setAnnouncement2, setSnackbar: setSnackbar6 } = actions_default;
|
|
4894
4983
|
var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) => (dispatch) => {
|
|
4895
|
-
const errorText = (0,
|
|
4984
|
+
const errorText = (0, import_helpers14.extractErrorMessage)(err);
|
|
4896
4985
|
const is2FABackend = errorText.includes("2fa");
|
|
4897
4986
|
if (is2FABackend && !has2FA) {
|
|
4898
4987
|
return rejectWithValue({ error: "2fa code missing" });
|
|
@@ -4902,7 +4991,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
|
|
|
4902
4991
|
}
|
|
4903
4992
|
const twoFAError = is2FABackend ? " and verification code" : "";
|
|
4904
4993
|
const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
|
|
4905
|
-
return Promise.reject(dispatch(setSnackbar6((0,
|
|
4994
|
+
return Promise.reject(dispatch(setSnackbar6({ message: (0, import_helpers14.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
|
|
4906
4995
|
};
|
|
4907
4996
|
var loginUser = (0, import_toolkit24.createAsyncThunk)(
|
|
4908
4997
|
`${sliceName8}/loginUser`,
|
|
@@ -4926,19 +5015,16 @@ var loginUser = (0, import_toolkit24.createAsyncThunk)(
|
|
|
4926
5015
|
const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
|
|
4927
5016
|
setSessionInfo({ token, expiresAt });
|
|
4928
5017
|
cookies5.remove("JWT", { path: "/" });
|
|
4929
|
-
return (
|
|
4930
|
-
|
|
4931
|
-
Promise.
|
|
4932
|
-
|
|
4933
|
-
|
|
4934
|
-
|
|
4935
|
-
window.
|
|
4936
|
-
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
|
|
4940
|
-
})
|
|
4941
|
-
);
|
|
5018
|
+
return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
|
|
5019
|
+
cleanUp();
|
|
5020
|
+
return Promise.reject(dispatch(setSnackbar6((0, import_helpers14.extractErrorMessage)(e))));
|
|
5021
|
+
}).then(() => {
|
|
5022
|
+
window.sessionStorage.removeItem("pendings-redirect");
|
|
5023
|
+
if (window.location.pathname !== "/ui/") {
|
|
5024
|
+
window.location.replace("/ui/");
|
|
5025
|
+
}
|
|
5026
|
+
return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
|
|
5027
|
+
});
|
|
4942
5028
|
})
|
|
4943
5029
|
);
|
|
4944
5030
|
var logoutUser = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
|
|
@@ -4956,6 +5042,7 @@ var switchUserOrganization = (0, import_toolkit24.createAsyncThunk)(`${sliceName
|
|
|
4956
5042
|
return Promise.reject();
|
|
4957
5043
|
}
|
|
4958
5044
|
return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
|
|
5045
|
+
window.sessionStorage.setItem("tenantChanged", "true");
|
|
4959
5046
|
setSessionInfo({ ...getSessionInfo(), token });
|
|
4960
5047
|
window.location.reload();
|
|
4961
5048
|
});
|
|
@@ -4996,11 +5083,18 @@ var verify2FA = (0, import_toolkit24.createAsyncThunk)(
|
|
|
4996
5083
|
);
|
|
4997
5084
|
var getUserList = (0, import_toolkit24.createAsyncThunk)(
|
|
4998
5085
|
`${sliceName8}/getUserList`,
|
|
4999
|
-
(_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
|
|
5000
|
-
const
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5086
|
+
(_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
|
|
5087
|
+
const currentUsersById = getUsersById(getState());
|
|
5088
|
+
const users = res.data.reduce(
|
|
5089
|
+
(accu, item) => {
|
|
5090
|
+
accu[item.id] = {
|
|
5091
|
+
...accu[item.id],
|
|
5092
|
+
...item
|
|
5093
|
+
};
|
|
5094
|
+
return accu;
|
|
5095
|
+
},
|
|
5096
|
+
{ ...currentUsersById }
|
|
5097
|
+
);
|
|
5004
5098
|
return dispatch(actions8.receivedUserList(users));
|
|
5005
5099
|
}).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
|
|
5006
5100
|
);
|
|
@@ -5009,9 +5103,7 @@ var getUser = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5009
5103
|
(id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
|
|
5010
5104
|
({ data: user }) => Promise.all([
|
|
5011
5105
|
dispatch(actions8.receivedUser(user)),
|
|
5012
|
-
// @ts-ignore
|
|
5013
5106
|
dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
|
|
5014
|
-
// @ts-ignore
|
|
5015
5107
|
dispatch(updateUserColumnSettings({ currentUserId: user.id })),
|
|
5016
5108
|
user
|
|
5017
5109
|
])
|
|
@@ -5058,10 +5150,7 @@ var createUser = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5058
5150
|
);
|
|
5059
5151
|
var removeUser = (0, import_toolkit24.createAsyncThunk)(
|
|
5060
5152
|
`${sliceName8}/removeUser`,
|
|
5061
|
-
(userId, { dispatch }) => (
|
|
5062
|
-
// @ts-ignore
|
|
5063
|
-
general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar6(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
|
|
5064
|
-
)
|
|
5153
|
+
(userId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar6(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
|
|
5065
5154
|
);
|
|
5066
5155
|
var editUser = (0, import_toolkit24.createAsyncThunk)(
|
|
5067
5156
|
`${sliceName8}/editUser`,
|
|
@@ -5082,7 +5171,7 @@ var enableUser2fa = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5082
5171
|
);
|
|
5083
5172
|
var disableUser2fa = (0, import_toolkit24.createAsyncThunk)(
|
|
5084
5173
|
`${sliceName8}/disableUser2fa`,
|
|
5085
|
-
(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.
|
|
5174
|
+
(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))]))
|
|
5086
5175
|
);
|
|
5087
5176
|
var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
|
|
5088
5177
|
(accu, [area, definition]) => {
|
|
@@ -5096,9 +5185,9 @@ var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).redu
|
|
|
5096
5185
|
permissionsAccu.push(uiPermission.value);
|
|
5097
5186
|
}
|
|
5098
5187
|
return permissionsAccu;
|
|
5099
|
-
}, []).filter(
|
|
5188
|
+
}, []).filter(import_helpers14.duplicateFilter);
|
|
5100
5189
|
if (Array.isArray(accu[area])) {
|
|
5101
|
-
accu[area] = [...accu[area], ...collector].filter(
|
|
5190
|
+
accu[area] = [...accu[area], ...collector].filter(import_helpers14.duplicateFilter);
|
|
5102
5191
|
} else {
|
|
5103
5192
|
accu[area] = mergePermissions(accu[area], { [scopedPermissionAreas[area].excessiveAccessSelector]: collector });
|
|
5104
5193
|
}
|
|
@@ -5123,7 +5212,7 @@ var permissionActionTypes = {
|
|
|
5123
5212
|
};
|
|
5124
5213
|
var combinePermissions = (existingPermissions, additionalPermissions = {}) => Object.entries(additionalPermissions).reduce((accu, [name, permissions]) => {
|
|
5125
5214
|
let maybeExistingPermissions = accu[name] || [];
|
|
5126
|
-
accu[name] = [...permissions, ...maybeExistingPermissions].filter(
|
|
5215
|
+
accu[name] = [...permissions, ...maybeExistingPermissions].filter(import_helpers14.duplicateFilter);
|
|
5127
5216
|
return accu;
|
|
5128
5217
|
}, existingPermissions);
|
|
5129
5218
|
var tryParseCustomPermission = (permission) => {
|
|
@@ -5148,7 +5237,7 @@ var isEmptyPermissionSet = (permissionSet) => !Object.values(permissionSet).redu
|
|
|
5148
5237
|
if (Array.isArray(permissions)) {
|
|
5149
5238
|
return accu || !!permissions.length;
|
|
5150
5239
|
}
|
|
5151
|
-
return accu || !(0,
|
|
5240
|
+
return accu || !(0, import_helpers14.isEmpty)(permissions);
|
|
5152
5241
|
}, false);
|
|
5153
5242
|
var parseRolePermissions = ({ permission_sets_with_scope = [], permissions = [] }, permissionSets) => {
|
|
5154
5243
|
const preliminaryResult = permission_sets_with_scope.reduce(
|
|
@@ -5216,7 +5305,7 @@ var getPermissionSets = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5216
5305
|
return collector;
|
|
5217
5306
|
}
|
|
5218
5307
|
if (permissionSet2 === permissionSetObject.name) {
|
|
5219
|
-
collector[area] = [...collector[area], item.value].filter(
|
|
5308
|
+
collector[area] = [...collector[area], item.value].filter(import_helpers14.duplicateFilter);
|
|
5220
5309
|
}
|
|
5221
5310
|
return collector;
|
|
5222
5311
|
}, accu2),
|
|
@@ -5235,7 +5324,6 @@ var getPermissionSets = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5235
5324
|
accu[permissionSet.name] = permissionSetObject;
|
|
5236
5325
|
return accu;
|
|
5237
5326
|
},
|
|
5238
|
-
// @ts-ignore
|
|
5239
5327
|
{ ...getState().users.permissionSetsById }
|
|
5240
5328
|
);
|
|
5241
5329
|
return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
|
|
@@ -5285,7 +5373,7 @@ var transformAreaRoleDataToScopedPermissionsSets = (area, areaPermissions, exces
|
|
|
5285
5373
|
if (value.includes(excessiveAccessSelector)) {
|
|
5286
5374
|
return { name };
|
|
5287
5375
|
}
|
|
5288
|
-
return { name, scope: { ...scope, value: value.filter(
|
|
5376
|
+
return { name, scope: { ...scope, value: value.filter(import_helpers14.duplicateFilter) } };
|
|
5289
5377
|
});
|
|
5290
5378
|
};
|
|
5291
5379
|
var transformRoleDataToRole = (roleData, roleState = {}) => {
|
|
@@ -5328,7 +5416,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
|
|
|
5328
5416
|
role: {
|
|
5329
5417
|
...emptyRole,
|
|
5330
5418
|
name,
|
|
5331
|
-
// @ts-ignore
|
|
5332
5419
|
description: description ? description : roleState.description,
|
|
5333
5420
|
uiPermissions: {
|
|
5334
5421
|
...emptyUiPermissions,
|
|
@@ -5371,10 +5458,7 @@ var editRole = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/editRole`,
|
|
|
5371
5458
|
});
|
|
5372
5459
|
var removeRole = (0, import_toolkit24.createAsyncThunk)(
|
|
5373
5460
|
`${sliceName8}/removeRole`,
|
|
5374
|
-
(roleId, { dispatch }) => (
|
|
5375
|
-
// @ts-ignore
|
|
5376
|
-
general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar6(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
|
|
5377
|
-
)
|
|
5461
|
+
(roleId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar6(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
|
|
5378
5462
|
);
|
|
5379
5463
|
var getGlobalSettings2 = (0, import_toolkit24.createAsyncThunk)(
|
|
5380
5464
|
`${sliceName8}/getGlobalSettings`,
|
|
@@ -5385,7 +5469,6 @@ var getGlobalSettings2 = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5385
5469
|
);
|
|
5386
5470
|
var saveGlobalSettings = (0, import_toolkit24.createAsyncThunk)(
|
|
5387
5471
|
`${sliceName8}/saveGlobalSettings`,
|
|
5388
|
-
// @ts-ignore
|
|
5389
5472
|
({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
|
|
5390
5473
|
if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
|
|
5391
5474
|
return;
|
|
@@ -5431,11 +5514,9 @@ var saveUserSettings = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/sav
|
|
|
5431
5514
|
const tooltipState = getTooltipsState(getState());
|
|
5432
5515
|
const updatedSettings = {
|
|
5433
5516
|
...userSettings,
|
|
5434
|
-
// @ts-ignore
|
|
5435
5517
|
...settings,
|
|
5436
5518
|
onboarding: {
|
|
5437
5519
|
...onboardingState,
|
|
5438
|
-
// @ts-ignore
|
|
5439
5520
|
...settings.onboarding
|
|
5440
5521
|
},
|
|
5441
5522
|
tooltips: tooltipState
|
|
@@ -5479,10 +5560,7 @@ var generateToken = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5479
5560
|
);
|
|
5480
5561
|
var revokeToken = (0, import_toolkit24.createAsyncThunk)(
|
|
5481
5562
|
`${sliceName8}/revokeToken`,
|
|
5482
|
-
(token, { dispatch }) => (
|
|
5483
|
-
// @ts-ignore
|
|
5484
|
-
general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
5485
|
-
)
|
|
5563
|
+
(token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
5486
5564
|
);
|
|
5487
5565
|
var setTooltipReadState = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
|
|
5488
5566
|
let tasks = [dispatch(actions8.setTooltipState(remainder))];
|
|
@@ -5491,23 +5569,20 @@ var setTooltipReadState = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/
|
|
|
5491
5569
|
}
|
|
5492
5570
|
return Promise.all(tasks);
|
|
5493
5571
|
});
|
|
5494
|
-
var setAllTooltipsReadState = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (
|
|
5495
|
-
const updatedTips =
|
|
5572
|
+
var setAllTooltipsReadState = (0, import_toolkit24.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
|
|
5573
|
+
const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
|
|
5496
5574
|
return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
|
|
5497
5575
|
});
|
|
5498
5576
|
var submitFeedback = (0, import_toolkit24.createAsyncThunk)(
|
|
5499
5577
|
`${sliceName8}/submitFeedback`,
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
5509
|
-
});
|
|
5510
|
-
}
|
|
5578
|
+
({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
|
|
5579
|
+
subject: "feedback submission",
|
|
5580
|
+
body: JSON.stringify({ feedback, satisfaction, meta })
|
|
5581
|
+
}).then(() => {
|
|
5582
|
+
const today = /* @__PURE__ */ new Date();
|
|
5583
|
+
dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
|
|
5584
|
+
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
5585
|
+
})
|
|
5511
5586
|
);
|
|
5512
5587
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5513
5588
|
0 && (module.exports = {
|
|
@@ -5519,7 +5594,6 @@ var submitFeedback = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5519
5594
|
addUserToCurrentTenant,
|
|
5520
5595
|
advanceOnboarding,
|
|
5521
5596
|
applyDeviceConfig,
|
|
5522
|
-
applyOnboardingFallbacks,
|
|
5523
5597
|
cancelFileUpload,
|
|
5524
5598
|
cancelRequest,
|
|
5525
5599
|
cancelUpgrade,
|
|
@@ -5663,6 +5737,7 @@ var submitFeedback = (0, import_toolkit24.createAsyncThunk)(
|
|
|
5663
5737
|
submitFeedback,
|
|
5664
5738
|
switchUserOrganization,
|
|
5665
5739
|
tenantDataDivergedMessage,
|
|
5740
|
+
triggerDeviceUpdate,
|
|
5666
5741
|
updateDeploymentControlMap,
|
|
5667
5742
|
updateDeviceAuth,
|
|
5668
5743
|
updateDevicesAuth,
|