@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.
Files changed (197) hide show
  1. package/dist/actions.cjs +20 -17
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.js +8 -8
  4. package/dist/api/general-api.js +2 -2
  5. package/dist/api/types/Tenant.ts +17 -12
  6. package/dist/api/users-api.js +2 -2
  7. package/dist/appSlice/constants.cjs +18 -10
  8. package/dist/appSlice/constants.cjs.map +1 -1
  9. package/dist/appSlice/constants.d.cts +41 -84
  10. package/dist/appSlice/constants.d.ts +41 -84
  11. package/dist/appSlice/constants.js +1 -1
  12. package/dist/appSlice/index.js +2 -2
  13. package/dist/appSlice/thunks.cjs +137 -94
  14. package/dist/appSlice/thunks.cjs.map +1 -1
  15. package/dist/appSlice/thunks.js +19 -19
  16. package/dist/auth.js +2 -2
  17. package/dist/{chunk-Q6M5TTDQ.js → chunk-2CYOM4BK.js} +1 -1
  18. package/dist/chunk-2CYOM4BK.js.map +1 -0
  19. package/dist/{chunk-74OJIKXF.js → chunk-2JHFUQ6B.js} +133 -96
  20. package/dist/chunk-2JHFUQ6B.js.map +1 -0
  21. package/dist/{chunk-YETZPQFR.js → chunk-4XJMRVFI.js} +12 -11
  22. package/dist/chunk-4XJMRVFI.js.map +1 -0
  23. package/dist/{chunk-RX55KAKX.js → chunk-7JKWI5FK.js} +2 -2
  24. package/dist/{chunk-A6CT6GTI.js → chunk-C5NEDBJI.js} +17 -11
  25. package/dist/chunk-C5NEDBJI.js.map +1 -0
  26. package/dist/{chunk-NNADGHSL.js → chunk-DAPAXWA5.js} +8 -8
  27. package/dist/{chunk-ANB5BM5J.js → chunk-DCK2DBOA.js} +27 -20
  28. package/dist/chunk-DCK2DBOA.js.map +1 -0
  29. package/dist/{chunk-E5LEU5PF.js → chunk-HPBE6KYY.js} +2 -2
  30. package/dist/{chunk-2RJIDREZ.js → chunk-LEMVXAYP.js} +25 -16
  31. package/dist/chunk-LEMVXAYP.js.map +1 -0
  32. package/dist/{chunk-NI4SZOCF.js → chunk-LGNOTPUG.js} +9 -9
  33. package/dist/{chunk-MDC7Y3EX.js → chunk-LTKOV26W.js} +22 -20
  34. package/dist/chunk-LTKOV26W.js.map +1 -0
  35. package/dist/{chunk-YTQUNAZP.js → chunk-QRGTG4YB.js} +2 -2
  36. package/dist/{chunk-XTRPX7JZ.js → chunk-TI2RL5P2.js} +2 -2
  37. package/dist/chunk-TI2RL5P2.js.map +1 -0
  38. package/dist/{chunk-YGBFDXXA.js → chunk-TUACATJA.js} +2 -2
  39. package/dist/{chunk-25AKG5HH.js → chunk-UWMYZNUB.js} +19 -11
  40. package/dist/chunk-UWMYZNUB.js.map +1 -0
  41. package/dist/{chunk-UEP36GCI.js → chunk-VMNMD6KF.js} +2 -2
  42. package/dist/{chunk-KAQJH2YL.js → chunk-WXL7PVI5.js} +12 -4
  43. package/dist/chunk-WXL7PVI5.js.map +1 -0
  44. package/dist/{chunk-VOCOFE4I.js → chunk-X7IEZBM4.js} +2 -2
  45. package/dist/{chunk-XXHONFSQ.js → chunk-YDS36ALB.js} +3 -3
  46. package/dist/{chunk-XXHONFSQ.js.map → chunk-YDS36ALB.js.map} +1 -1
  47. package/dist/commonSelectors.cjs +40 -18
  48. package/dist/commonSelectors.cjs.map +1 -1
  49. package/dist/commonSelectors.d.cts +54 -46
  50. package/dist/commonSelectors.d.ts +54 -46
  51. package/dist/commonSelectors.js +9 -9
  52. package/dist/constants.cjs +35 -19
  53. package/dist/constants.cjs.map +1 -1
  54. package/dist/constants.d.cts +3 -3
  55. package/dist/constants.d.ts +3 -3
  56. package/dist/constants.js +6 -2
  57. package/dist/deploymentdevicehook.cjs +143 -99
  58. package/dist/deploymentdevicehook.cjs.map +1 -1
  59. package/dist/deploymentdevicehook.d.cts +1 -1
  60. package/dist/deploymentdevicehook.d.ts +1 -1
  61. package/dist/deploymentdevicehook.js +24 -22
  62. package/dist/deploymentdevicehook.js.map +1 -1
  63. package/dist/deploymentsSlice/constants.cjs +8 -8
  64. package/dist/deploymentsSlice/constants.cjs.map +1 -1
  65. package/dist/deploymentsSlice/constants.js +2 -2
  66. package/dist/deploymentsSlice/index.cjs +8 -8
  67. package/dist/deploymentsSlice/index.cjs.map +1 -1
  68. package/dist/deploymentsSlice/index.js +3 -3
  69. package/dist/deploymentsSlice/selectors.cjs +8 -8
  70. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  71. package/dist/deploymentsSlice/selectors.js +3 -3
  72. package/dist/deploymentsSlice/thunks.cjs +137 -94
  73. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  74. package/dist/deploymentsSlice/thunks.js +19 -19
  75. package/dist/devicesSlice/constants.cjs +11 -8
  76. package/dist/devicesSlice/constants.cjs.map +1 -1
  77. package/dist/devicesSlice/constants.d.cts +2 -1
  78. package/dist/devicesSlice/constants.d.ts +2 -1
  79. package/dist/devicesSlice/constants.js +4 -2
  80. package/dist/devicesSlice/index.cjs +8 -8
  81. package/dist/devicesSlice/index.cjs.map +1 -1
  82. package/dist/devicesSlice/index.js +3 -3
  83. package/dist/devicesSlice/selectors.cjs +9 -9
  84. package/dist/devicesSlice/selectors.cjs.map +1 -1
  85. package/dist/devicesSlice/selectors.js +3 -3
  86. package/dist/devicesSlice/thunks.cjs +139 -94
  87. package/dist/devicesSlice/thunks.cjs.map +1 -1
  88. package/dist/devicesSlice/thunks.d.cts +12 -2
  89. package/dist/devicesSlice/thunks.d.ts +12 -2
  90. package/dist/devicesSlice/thunks.js +21 -19
  91. package/dist/flag-eu-5477R2P4.svg +130 -0
  92. package/dist/flag-us-HNQAF66I.svg +63 -0
  93. package/dist/monitorSlice/constants.cjs +8 -8
  94. package/dist/monitorSlice/constants.cjs.map +1 -1
  95. package/dist/monitorSlice/constants.js +2 -2
  96. package/dist/monitorSlice/index.cjs +8 -8
  97. package/dist/monitorSlice/index.cjs.map +1 -1
  98. package/dist/monitorSlice/index.js +3 -3
  99. package/dist/monitorSlice/thunks.cjs +59 -37
  100. package/dist/monitorSlice/thunks.cjs.map +1 -1
  101. package/dist/monitorSlice/thunks.js +17 -17
  102. package/dist/onboardingSlice/thunks.cjs +146 -100
  103. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  104. package/dist/onboardingSlice/thunks.d.cts +1 -32
  105. package/dist/onboardingSlice/thunks.d.ts +1 -32
  106. package/dist/onboardingSlice/thunks.js +19 -19
  107. package/dist/organizationSlice/constants.cjs +22 -17
  108. package/dist/organizationSlice/constants.cjs.map +1 -1
  109. package/dist/organizationSlice/constants.d.cts +33 -1
  110. package/dist/organizationSlice/constants.d.ts +33 -1
  111. package/dist/organizationSlice/constants.js +4 -2
  112. package/dist/organizationSlice/index.cjs +18 -15
  113. package/dist/organizationSlice/index.cjs.map +1 -1
  114. package/dist/organizationSlice/index.d.cts +26 -1012
  115. package/dist/organizationSlice/index.d.ts +26 -1012
  116. package/dist/organizationSlice/index.js +3 -3
  117. package/dist/organizationSlice/selectors.cjs.map +1 -1
  118. package/dist/organizationSlice/selectors.d.cts +9 -1
  119. package/dist/organizationSlice/selectors.d.ts +9 -1
  120. package/dist/organizationSlice/selectors.js +3 -3
  121. package/dist/organizationSlice/thunks.cjs +1605 -1539
  122. package/dist/organizationSlice/thunks.cjs.map +1 -1
  123. package/dist/organizationSlice/thunks.d.cts +61 -36
  124. package/dist/organizationSlice/thunks.d.ts +61 -36
  125. package/dist/organizationSlice/thunks.js +19 -19
  126. package/dist/organizationSlice/types.cjs +19 -0
  127. package/dist/organizationSlice/types.cjs.map +1 -0
  128. package/dist/organizationSlice/types.d.cts +114 -0
  129. package/dist/organizationSlice/types.d.ts +114 -0
  130. package/dist/organizationSlice/types.js +1 -0
  131. package/dist/organizationSlice/types.js.map +1 -0
  132. package/dist/releasesSlice/index.js +2 -2
  133. package/dist/releasesSlice/selectors.cjs +11 -0
  134. package/dist/releasesSlice/selectors.cjs.map +1 -1
  135. package/dist/releasesSlice/selectors.js +4 -4
  136. package/dist/releasesSlice/thunks.cjs +73 -49
  137. package/dist/releasesSlice/thunks.cjs.map +1 -1
  138. package/dist/releasesSlice/thunks.d.cts +1 -4
  139. package/dist/releasesSlice/thunks.d.ts +1 -4
  140. package/dist/releasesSlice/thunks.js +17 -17
  141. package/dist/selectors.cjs +46 -18
  142. package/dist/selectors.cjs.map +1 -1
  143. package/dist/selectors.d.cts +9 -1
  144. package/dist/selectors.d.ts +9 -1
  145. package/dist/selectors.js +36 -30
  146. package/dist/store.cjs +36 -23
  147. package/dist/store.cjs.map +1 -1
  148. package/dist/store.d.cts +12 -231
  149. package/dist/store.d.ts +12 -231
  150. package/dist/store.js +13 -11
  151. package/dist/storehooks.cjs +216 -137
  152. package/dist/storehooks.cjs.map +1 -1
  153. package/dist/storehooks.js +36 -24
  154. package/dist/storehooks.js.map +1 -1
  155. package/dist/thunks.cjs +193 -122
  156. package/dist/thunks.cjs.map +1 -1
  157. package/dist/thunks.d.cts +5 -1
  158. package/dist/thunks.d.ts +5 -1
  159. package/dist/thunks.js +21 -19
  160. package/dist/usersSlice/constants.cjs +10 -10
  161. package/dist/usersSlice/constants.cjs.map +1 -1
  162. package/dist/usersSlice/constants.js +2 -2
  163. package/dist/usersSlice/index.cjs +10 -10
  164. package/dist/usersSlice/index.cjs.map +1 -1
  165. package/dist/usersSlice/index.js +3 -3
  166. package/dist/usersSlice/selectors.cjs +35 -13
  167. package/dist/usersSlice/selectors.cjs.map +1 -1
  168. package/dist/usersSlice/selectors.d.cts +44 -1
  169. package/dist/usersSlice/selectors.d.ts +44 -1
  170. package/dist/usersSlice/selectors.js +12 -6
  171. package/dist/usersSlice/thunks.cjs +135 -94
  172. package/dist/usersSlice/thunks.cjs.map +1 -1
  173. package/dist/usersSlice/thunks.d.cts +10 -9
  174. package/dist/usersSlice/thunks.d.ts +10 -9
  175. package/dist/usersSlice/thunks.js +19 -19
  176. package/dist/utils.cjs +17 -16
  177. package/dist/utils.cjs.map +1 -1
  178. package/dist/utils.js +3 -3
  179. package/package.json +7 -7
  180. package/dist/chunk-25AKG5HH.js.map +0 -1
  181. package/dist/chunk-2RJIDREZ.js.map +0 -1
  182. package/dist/chunk-74OJIKXF.js.map +0 -1
  183. package/dist/chunk-A6CT6GTI.js.map +0 -1
  184. package/dist/chunk-ANB5BM5J.js.map +0 -1
  185. package/dist/chunk-KAQJH2YL.js.map +0 -1
  186. package/dist/chunk-MDC7Y3EX.js.map +0 -1
  187. package/dist/chunk-Q6M5TTDQ.js.map +0 -1
  188. package/dist/chunk-XTRPX7JZ.js.map +0 -1
  189. package/dist/chunk-YETZPQFR.js.map +0 -1
  190. /package/dist/{chunk-RX55KAKX.js.map → chunk-7JKWI5FK.js.map} +0 -0
  191. /package/dist/{chunk-NNADGHSL.js.map → chunk-DAPAXWA5.js.map} +0 -0
  192. /package/dist/{chunk-E5LEU5PF.js.map → chunk-HPBE6KYY.js.map} +0 -0
  193. /package/dist/{chunk-NI4SZOCF.js.map → chunk-LGNOTPUG.js.map} +0 -0
  194. /package/dist/{chunk-YTQUNAZP.js.map → chunk-QRGTG4YB.js.map} +0 -0
  195. /package/dist/{chunk-YGBFDXXA.js.map → chunk-TUACATJA.js.map} +0 -0
  196. /package/dist/{chunk-UEP36GCI.js.map → chunk-VMNMD6KF.js.map} +0 -0
  197. /package/dist/{chunk-VOCOFE4I.js.map → chunk-X7IEZBM4.js.map} +0 -0
@@ -76,6 +76,7 @@ __export(thunks_exports, {
76
76
  setDeviceListState: () => setDeviceListState,
77
77
  setDeviceTags: () => setDeviceTags,
78
78
  setDeviceTwin: () => setDeviceTwin,
79
+ triggerDeviceUpdate: () => triggerDeviceUpdate,
79
80
  updateDeviceAuth: () => updateDeviceAuth,
80
81
  updateDevicesAuth: () => updateDevicesAuth,
81
82
  updateDynamicGroup: () => updateDynamicGroup
@@ -111,28 +112,28 @@ var PLANS = {
111
112
  id: "os",
112
113
  name: "Basic",
113
114
  offer: true,
114
- price: "$32/month",
115
+ price: "$32 / month",
115
116
  deviceCount: startingDeviceCount.os,
116
- offerprice: "$23/month for first 50 devices",
117
+ offerprice: "$23 / month for first 50 devices",
117
118
  price2: "for first 6 months;\n$29/month thereafter",
118
- features: ["Basic OTA features"]
119
+ features: ["Access to core features of Mender", "Basic support"]
119
120
  },
120
121
  professional: {
121
122
  id: "professional",
122
123
  name: "Professional",
123
124
  offer: true,
124
- price: "$269/month",
125
+ price: "$269 / month",
125
126
  deviceCount: startingDeviceCount.professional,
126
- offerprice: "$200/month for first 50 devices",
127
+ offerprice: "$200 / month for first 50 devices",
127
128
  price2: "for first 6 months;\n$249/month thereafter",
128
- features: ["+ Advanced OTA features", "+ Standard support"]
129
+ features: ["Advanced OTA features", "Higher priority support"]
129
130
  },
130
131
  enterprise: {
131
132
  id: "enterprise",
132
133
  name: "Enterprise",
133
134
  price: "Custom pricing",
134
- deviceCount: "unlimited devices",
135
- features: ["+ Enterprise-grade OTA features", "+ Premium support"]
135
+ deviceCount: "Unlimited devices",
136
+ features: ["All Mender features", "Advanced security features", "SLA-backed support"]
136
137
  }
137
138
  };
138
139
  var ADDONS = {
@@ -603,6 +604,7 @@ var DEVICE_STATES = {
603
604
  rejected: "rejected"
604
605
  };
605
606
  var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
607
+ var REPORT_CHART_SIZE_LIMIT = 6;
606
608
 
607
609
  // src/monitorSlice/constants.ts
608
610
  var alertChannels = { email: "email" };
@@ -684,13 +686,16 @@ var SSO_TYPES = {
684
686
  configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
685
687
  }
686
688
  };
687
- var AUDIT_LOGS_TYPES = [
688
- { title: "Artifact", queryParameter: "object_type", value: "artifact" },
689
- { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
690
- { title: "Device", queryParameter: "object_id", value: "device" },
691
- { title: "User", queryParameter: "object_id", value: "user" }
692
- ];
693
- var SP_AUDIT_LOGS_TYPES = [AUDIT_LOGS_TYPES[3], { title: "Tenant", queryParameter: "object_id", value: "tenant" }];
689
+ var auditlogTypes = {
690
+ artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
691
+ deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
692
+ device: { title: "Device", queryParameter: "object_id", value: "device" },
693
+ user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
694
+ user: { title: "User", queryParameter: "object_id", value: "user" },
695
+ tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
696
+ };
697
+ var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
698
+ var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
694
699
  var emptyWebhook = {
695
700
  description: "",
696
701
  enabled: true,
@@ -823,7 +828,7 @@ var uiPermissionsByArea = {
823
828
  explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
824
829
  key: "auditlog",
825
830
  uiPermissions: [uiPermissionsById.read],
826
- title: "System audit log"
831
+ title: "System Audit Log"
827
832
  },
828
833
  deployments: {
829
834
  endpoints: [
@@ -974,7 +979,7 @@ var serviceProviderRolesById = {
974
979
  },
975
980
  readOnly: {
976
981
  name: "Read access",
977
- value: staticRolesByName.admin,
982
+ value: staticRolesByName.readOnly,
978
983
  description: "This role can see all linked organizations but cannot make any changes",
979
984
  permissions: [],
980
985
  uiPermissions: {
@@ -2179,7 +2184,7 @@ var getGroups = (0, import_toolkit11.createSelector)([getGroupsById], (groupsByI
2179
2184
  (accu, [groupname, group]) => {
2180
2185
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
2181
2186
  const groupItem = { ...group, groupId: name, name: groupname };
2182
- if (group.filters.length > 0) {
2187
+ if (group.filters?.length > 0) {
2183
2188
  if (groupname !== UNGROUPED_GROUP.id) {
2184
2189
  accu.dynamic.push(groupItem);
2185
2190
  } else {
@@ -2252,14 +2257,15 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
2252
2257
  // src/utils.ts
2253
2258
  var import_helpers4 = require("@northern.tech/utils/helpers");
2254
2259
  var filterProcessors = {
2255
- $gt: (val) => Number(val) || val,
2256
- $gte: (val) => Number(val) || val,
2257
- $lt: (val) => Number(val) || val,
2258
- $lte: (val) => Number(val) || val,
2259
- $in: (val) => ("" + val).split(",").map((i) => i.trim()),
2260
- $nin: (val) => ("" + val).split(",").map((i) => i.trim()),
2261
- $exists: import_helpers4.yes,
2262
- $nexists: () => false
2260
+ [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
2261
+ [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
2262
+ [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
2263
+ [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
2264
+ [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
2265
+ [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2266
+ [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2267
+ [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers4.yes,
2268
+ [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
2263
2269
  };
2264
2270
  var filterAliases = {
2265
2271
  $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
@@ -2383,8 +2389,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
2383
2389
  var getGlobalSettings = (state) => state.users.globalSettings;
2384
2390
  var getCurrentUserId = (state) => state.users.currentUser;
2385
2391
  var getUsersById = (state) => state.users.byId;
2392
+ var getUsersList = (0, import_toolkit14.createSelector)([getUsersById], (usersById) => Object.values(usersById));
2386
2393
  var getCurrentUser = (0, import_toolkit14.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
2387
2394
  var getUserSettings = (state) => state.users.userSettings;
2395
+ var getSelectedDeviceAttribute = (0, import_toolkit14.createSelector)(
2396
+ [getUserSettings],
2397
+ ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
2398
+ );
2388
2399
  var getIsDarkMode = (0, import_toolkit14.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
2389
2400
  var getShowHelptips = (0, import_toolkit14.createSelector)(
2390
2401
  [getTooltipsById],
@@ -2409,7 +2420,7 @@ var getOfflineThresholdSettings = (0, import_toolkit14.createSelector)([getGloba
2409
2420
  interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
2410
2421
  intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
2411
2422
  }));
2412
- var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([id, role]) => ({ id, ...role })));
2423
+ var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
2413
2424
 
2414
2425
  // src/commonSelectors.ts
2415
2426
  var getIsEnterprise = (0, import_toolkit15.createSelector)(
@@ -2470,12 +2481,18 @@ var getUserCapabilities = (0, import_toolkit15.createSelector)([getUserRoles, ge
2470
2481
  });
2471
2482
  var getTenantCapabilities = (0, import_toolkit15.createSelector)(
2472
2483
  [getFeatures, getOrganization, getIsEnterprise],
2473
- ({ hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
2484
+ ({
2485
+ hasAuditlogs: isAuditlogEnabled,
2486
+ hasDeviceConfig: isDeviceConfigEnabled,
2487
+ hasDeviceConnect: isDeviceConnectEnabled,
2488
+ hasMonitor: isMonitorEnabled,
2489
+ isHosted
2490
+ }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
2474
2491
  const canDelta = isEnterprise || plan === PLANS.professional.id;
2475
2492
  const hasAuditlogs = isAuditlogEnabled && isEnterprise;
2476
- const hasDeviceConfig = isDeviceConfigEnabled && addons.some((addon) => addon.name === "configure" && Boolean(addon.enabled));
2477
- const hasDeviceConnect = isDeviceConnectEnabled && (!isEnterprise || addons.some((addon) => addon.name === "troubleshoot" && Boolean(addon.enabled)));
2478
- const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === "monitor" && Boolean(addon.enabled));
2493
+ const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
2494
+ const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
2495
+ const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
2479
2496
  return {
2480
2497
  canDelta,
2481
2498
  canRetry: canDelta,
@@ -2605,7 +2622,7 @@ var getAuditlogDevice = (0, import_toolkit15.createSelector)([getAuditLogEntry,
2605
2622
  var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
2606
2623
  if (service_provider) {
2607
2624
  return roles.reduce((accu, role) => {
2608
- if (rolesById[role.id]) {
2625
+ if (rolesById[role.value]) {
2609
2626
  return accu;
2610
2627
  }
2611
2628
  accu.push(role);
@@ -2613,20 +2630,19 @@ var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, ge
2613
2630
  }, Object.values(serviceProviderRolesById));
2614
2631
  }
2615
2632
  return Object.keys(rolesById).reverse().reduce((accu, key) => {
2616
- const index = accu.findIndex(({ id }) => id === key);
2633
+ const index = accu.findIndex(({ value }) => value === key);
2617
2634
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
2618
2635
  return accu;
2619
2636
  }, roles);
2620
2637
  });
2621
2638
 
2622
2639
  // src/store.ts
2640
+ var import_react_redux = require("react-redux");
2623
2641
  var import_helpers6 = require("@northern.tech/utils/helpers");
2624
2642
  var import_toolkit16 = require("@reduxjs/toolkit");
2625
2643
  var { setSnackbar, uploadProgress } = actions_default;
2626
2644
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2627
- var resetEnvironment = () => {
2628
- keys.map((key) => window.sessionStorage.removeItem(key));
2629
- };
2645
+ var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
2630
2646
  resetEnvironment();
2631
2647
  var commonErrorFallback = "Please check your connection.";
2632
2648
  var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
@@ -2652,6 +2668,14 @@ var sessionReducer = (state, action) => {
2652
2668
  }
2653
2669
  return rootReducer(state, action);
2654
2670
  };
2671
+ var rejectionLoggerMiddleware = () => (next) => (action) => {
2672
+ if (action.type.endsWith("/rejected")) {
2673
+ const { error } = action;
2674
+ console.error("Rejection in action:", action);
2675
+ console.error(error.stack);
2676
+ }
2677
+ return next(action);
2678
+ };
2655
2679
  var getConfiguredStore = (options = {}) => {
2656
2680
  const { preloadedState = {}, ...config } = options;
2657
2681
  return (0, import_toolkit16.configureStore)({
@@ -2667,7 +2691,7 @@ var getConfiguredStore = (options = {}) => {
2667
2691
  ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2668
2692
  ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2669
2693
  }
2670
- })
2694
+ }).concat(rejectionLoggerMiddleware)
2671
2695
  });
2672
2696
  };
2673
2697
  var store = getConfiguredStore({
@@ -2784,6 +2808,7 @@ var setSearchState = (0, import_toolkit17.createAsyncThunk)(`${sliceName}/setSea
2784
2808
 
2785
2809
  // src/deploymentsSlice/thunks.ts
2786
2810
  var import_helpers8 = require("@northern.tech/utils/helpers");
2811
+ var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
2787
2812
  var import_toolkit18 = require("@reduxjs/toolkit");
2788
2813
  var import_validator = require("validator");
2789
2814
  var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
@@ -2840,6 +2865,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceNam
2840
2865
  return Promise.all(tasks);
2841
2866
  });
2842
2867
  });
2868
+ var isWithinFirstMonth = (expirationDate) => {
2869
+ if (!expirationDate) {
2870
+ return false;
2871
+ }
2872
+ const endOfFirstMonth = new Date(expirationDate);
2873
+ endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
2874
+ return endOfFirstMonth > /* @__PURE__ */ new Date();
2875
+ };
2876
+ var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
2877
+ import_tracking.default.event({ category: "deployments", action: "create" });
2878
+ if (!totalDeploymentCount) {
2879
+ if (!hasDeployments) {
2880
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
2881
+ if (isWithinFirstMonth(trial_expiration)) {
2882
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
2883
+ }
2884
+ }
2885
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
2886
+ }
2887
+ };
2843
2888
  var MAX_PREVIOUS_PHASES_COUNT = 5;
2844
2889
  var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
2845
2890
  let request;
@@ -2850,6 +2895,9 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2850
2895
  } else {
2851
2896
  request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
2852
2897
  }
2898
+ const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
2899
+ const { hasDeployments } = getGlobalSettings(getState());
2900
+ const { trial_expiration } = getOrganization(getState());
2853
2901
  return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
2854
2902
  const lastslashindex = data.headers.location.lastIndexOf("/");
2855
2903
  const deploymentId = data.headers.location.substring(lastslashindex + 1);
@@ -2864,6 +2912,7 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2864
2912
  dispatch(getSingleDeployment(deploymentId)),
2865
2913
  dispatch(setSnackbar2("Deployment created successfully", TIMEOUTS.fiveSeconds))
2866
2914
  ];
2915
+ trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
2867
2916
  const { canManageUsers } = getUserCapabilities(getState());
2868
2917
  if (canManageUsers) {
2869
2918
  const { phases, retries } = newDeployment;
@@ -3164,6 +3213,9 @@ var changeNotificationSetting = (0, import_toolkit19.createAsyncThunk)(
3164
3213
  }
3165
3214
  );
3166
3215
 
3216
+ // src/usersSlice/thunks.ts
3217
+ var import_helptips = require("@northern.tech/common-ui/helptips");
3218
+
3167
3219
  // src/api/users-api.ts
3168
3220
  var import_axios2 = __toESM(require("axios"), 1);
3169
3221
  var Api2 = {
@@ -3197,7 +3249,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
3197
3249
  }
3198
3250
  const twoFAError = is2FABackend ? " and verification code" : "";
3199
3251
  const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
3200
- return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.preformatWithRequestID)(err.response, errorMessage), null, "Copy to clipboard")));
3252
+ return Promise.reject(dispatch(setSnackbar3({ message: (0, import_helpers9.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
3201
3253
  };
3202
3254
  var loginUser = (0, import_toolkit20.createAsyncThunk)(
3203
3255
  `${sliceName8}/loginUser`,
@@ -3221,19 +3273,16 @@ var loginUser = (0, import_toolkit20.createAsyncThunk)(
3221
3273
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
3222
3274
  setSessionInfo({ token, expiresAt });
3223
3275
  cookies3.remove("JWT", { path: "/" });
3224
- return (
3225
- // @ts-ignore
3226
- Promise.resolve(dispatch(getUser(OWN_USER_ID))).unwrap().catch((e) => {
3227
- cleanUp();
3228
- return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.extractErrorMessage)(e))));
3229
- }).then(() => {
3230
- window.sessionStorage.removeItem("pendings-redirect");
3231
- if (window.location.pathname !== "/ui/") {
3232
- window.location.replace("/ui/");
3233
- }
3234
- return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
3235
- })
3236
- );
3276
+ return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
3277
+ cleanUp();
3278
+ return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.extractErrorMessage)(e))));
3279
+ }).then(() => {
3280
+ window.sessionStorage.removeItem("pendings-redirect");
3281
+ if (window.location.pathname !== "/ui/") {
3282
+ window.location.replace("/ui/");
3283
+ }
3284
+ return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
3285
+ });
3237
3286
  })
3238
3287
  );
3239
3288
  var logoutUser = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -3251,6 +3300,7 @@ var switchUserOrganization = (0, import_toolkit20.createAsyncThunk)(`${sliceName
3251
3300
  return Promise.reject();
3252
3301
  }
3253
3302
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
3303
+ window.sessionStorage.setItem("tenantChanged", "true");
3254
3304
  setSessionInfo({ ...getSessionInfo(), token });
3255
3305
  window.location.reload();
3256
3306
  });
@@ -3291,11 +3341,18 @@ var verify2FA = (0, import_toolkit20.createAsyncThunk)(
3291
3341
  );
3292
3342
  var getUserList = (0, import_toolkit20.createAsyncThunk)(
3293
3343
  `${sliceName8}/getUserList`,
3294
- (_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
3295
- const users = res.data.reduce((accu, item) => {
3296
- accu[item.id] = item;
3297
- return accu;
3298
- }, {});
3344
+ (_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
3345
+ const currentUsersById = getUsersById(getState());
3346
+ const users = res.data.reduce(
3347
+ (accu, item) => {
3348
+ accu[item.id] = {
3349
+ ...accu[item.id],
3350
+ ...item
3351
+ };
3352
+ return accu;
3353
+ },
3354
+ { ...currentUsersById }
3355
+ );
3299
3356
  return dispatch(actions8.receivedUserList(users));
3300
3357
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
3301
3358
  );
@@ -3304,9 +3361,7 @@ var getUser = (0, import_toolkit20.createAsyncThunk)(
3304
3361
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
3305
3362
  ({ data: user }) => Promise.all([
3306
3363
  dispatch(actions8.receivedUser(user)),
3307
- // @ts-ignore
3308
3364
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
3309
- // @ts-ignore
3310
3365
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
3311
3366
  user
3312
3367
  ])
@@ -3353,10 +3408,7 @@ var createUser = (0, import_toolkit20.createAsyncThunk)(
3353
3408
  );
3354
3409
  var removeUser = (0, import_toolkit20.createAsyncThunk)(
3355
3410
  `${sliceName8}/removeUser`,
3356
- (userId, { dispatch }) => (
3357
- // @ts-ignore
3358
- 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))
3359
- )
3411
+ (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))
3360
3412
  );
3361
3413
  var editUser = (0, import_toolkit20.createAsyncThunk)(
3362
3414
  `${sliceName8}/editUser`,
@@ -3377,7 +3429,7 @@ var enableUser2fa = (0, import_toolkit20.createAsyncThunk)(
3377
3429
  );
3378
3430
  var disableUser2fa = (0, import_toolkit20.createAsyncThunk)(
3379
3431
  `${sliceName8}/disableUser2fa`,
3380
- (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.resolve(dispatch(getUser(userId))))
3432
+ (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))]))
3381
3433
  );
3382
3434
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
3383
3435
  (accu, [area, definition]) => {
@@ -3530,7 +3582,6 @@ var getPermissionSets = (0, import_toolkit20.createAsyncThunk)(
3530
3582
  accu[permissionSet.name] = permissionSetObject;
3531
3583
  return accu;
3532
3584
  },
3533
- // @ts-ignore
3534
3585
  { ...getState().users.permissionSetsById }
3535
3586
  );
3536
3587
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -3623,7 +3674,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
3623
3674
  role: {
3624
3675
  ...emptyRole,
3625
3676
  name,
3626
- // @ts-ignore
3627
3677
  description: description ? description : roleState.description,
3628
3678
  uiPermissions: {
3629
3679
  ...emptyUiPermissions,
@@ -3666,10 +3716,7 @@ var editRole = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/editRole`,
3666
3716
  });
3667
3717
  var removeRole = (0, import_toolkit20.createAsyncThunk)(
3668
3718
  `${sliceName8}/removeRole`,
3669
- (roleId, { dispatch }) => (
3670
- // @ts-ignore
3671
- 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))
3672
- )
3719
+ (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))
3673
3720
  );
3674
3721
  var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
3675
3722
  `${sliceName8}/getGlobalSettings`,
@@ -3680,7 +3727,6 @@ var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
3680
3727
  );
3681
3728
  var saveGlobalSettings = (0, import_toolkit20.createAsyncThunk)(
3682
3729
  `${sliceName8}/saveGlobalSettings`,
3683
- // @ts-ignore
3684
3730
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
3685
3731
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
3686
3732
  return;
@@ -3726,11 +3772,9 @@ var saveUserSettings = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/sav
3726
3772
  const tooltipState = getTooltipsState(getState());
3727
3773
  const updatedSettings = {
3728
3774
  ...userSettings,
3729
- // @ts-ignore
3730
3775
  ...settings,
3731
3776
  onboarding: {
3732
3777
  ...onboardingState,
3733
- // @ts-ignore
3734
3778
  ...settings.onboarding
3735
3779
  },
3736
3780
  tooltips: tooltipState
@@ -3774,10 +3818,7 @@ var generateToken = (0, import_toolkit20.createAsyncThunk)(
3774
3818
  );
3775
3819
  var revokeToken = (0, import_toolkit20.createAsyncThunk)(
3776
3820
  `${sliceName8}/revokeToken`,
3777
- (token, { dispatch }) => (
3778
- // @ts-ignore
3779
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
3780
- )
3821
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
3781
3822
  );
3782
3823
  var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
3783
3824
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -3786,23 +3827,20 @@ var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/
3786
3827
  }
3787
3828
  return Promise.all(tasks);
3788
3829
  });
3789
- var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {
3790
- const updatedTips = tooltips.reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
3830
+ var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
3831
+ const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
3791
3832
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
3792
3833
  });
3793
3834
  var submitFeedback = (0, import_toolkit20.createAsyncThunk)(
3794
3835
  `${sliceName8}/submitFeedback`,
3795
- // @ts-ignore
3796
- ({ satisfaction, feedback, ...meta }, { dispatch }) => {
3797
- return general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
3798
- subject: "feedback submission",
3799
- body: JSON.stringify({ feedback, satisfaction, meta })
3800
- }).then(() => {
3801
- const today = /* @__PURE__ */ new Date();
3802
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
3803
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
3804
- });
3805
- }
3836
+ ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
3837
+ subject: "feedback submission",
3838
+ body: JSON.stringify({ feedback, satisfaction, meta })
3839
+ }).then(() => {
3840
+ const today = /* @__PURE__ */ new Date();
3841
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
3842
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
3843
+ })
3806
3844
  );
3807
3845
 
3808
3846
  // src/devicesSlice/thunks.tsx
@@ -4241,7 +4279,7 @@ var getDevicesByStatus2 = (0, import_toolkit21.createAsyncThunk)(`${sliceName3}/
4241
4279
  page = defaultPage3,
4242
4280
  perPage = defaultPerPage3,
4243
4281
  sortOptions = [],
4244
- selectedAttributes = []
4282
+ selectedAttributes = getSelectedDeviceAttribute(getState())
4245
4283
  } = options;
4246
4284
  const state = getState();
4247
4285
  const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
@@ -4354,7 +4392,6 @@ var getReportingLimits = (0, import_toolkit21.createAsyncThunk)(
4354
4392
  })
4355
4393
  );
4356
4394
  var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
4357
- var REPORT_CHART_SIZE_LIMIT = 6;
4358
4395
  var getSingleReportData = (reportConfig, groups) => {
4359
4396
  const { attribute, group, software = "" } = reportConfig;
4360
4397
  const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
@@ -4434,6 +4471,13 @@ var getDeviceConnect = (0, import_toolkit21.createAsyncThunk)(
4434
4471
  ({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
4435
4472
  )
4436
4473
  );
4474
+ var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
4475
+ var triggerDeviceUpdate = (0, import_toolkit21.createAsyncThunk)(
4476
+ `${sliceName3}/triggerDeviceUpdate`,
4477
+ ({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
4478
+ () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
4479
+ )
4480
+ );
4437
4481
  var getSessionDetails = (0, import_toolkit21.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
4438
4482
  const { start: startUnix, end: endUnix } = (0, import_helpers10.dateRangeToUnix)(startDate, endDate);
4439
4483
  const createdAfter = startDate ? `&created_after=${startUnix}` : "";
@@ -4536,12 +4580,12 @@ var deleteAuthset = (0, import_toolkit21.createAsyncThunk)(
4536
4580
  );
4537
4581
  var preauthDevice = (0, import_toolkit21.createAsyncThunk)(
4538
4582
  `${sliceName3}/preauthDevice`,
4539
- (authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
4583
+ (authset, { dispatch, rejectWithValue }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).then(() => Promise.resolve(dispatch(setSnackbar4("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds)))).catch((err) => {
4540
4584
  if (err.response.status === 409) {
4541
- return Promise.reject("A device with a matching identity data set already exists");
4585
+ return rejectWithValue("A device with a matching identity data set already exists");
4542
4586
  }
4543
4587
  return commonErrorHandler(err, "The device could not be added:", dispatch);
4544
- }).then(() => Promise.resolve(dispatch(setSnackbar4("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds))))
4588
+ })
4545
4589
  );
4546
4590
  var decommissionDevice = (0, import_toolkit21.createAsyncThunk)(
4547
4591
  `${sliceName3}/decommissionDevice`,
@@ -4752,6 +4796,7 @@ var getDevicesInBounds = (0, import_toolkit21.createAsyncThunk)(`${sliceName3}/g
4752
4796
  setDeviceListState,
4753
4797
  setDeviceTags,
4754
4798
  setDeviceTwin,
4799
+ triggerDeviceUpdate,
4755
4800
  updateDeviceAuth,
4756
4801
  updateDevicesAuth,
4757
4802
  updateDynamicGroup