@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.
Files changed (251) hide show
  1. package/dist/BillingProfile-ChP2_Sqw.d.cts +45 -0
  2. package/dist/BillingProfile-ChP2_Sqw.d.ts +45 -0
  3. package/dist/actions.cjs +22 -23
  4. package/dist/actions.cjs.map +1 -1
  5. package/dist/actions.js +12 -12
  6. package/dist/api/general-api.cjs.map +1 -1
  7. package/dist/api/general-api.js +5 -5
  8. package/dist/api/types/Tenant.ts +17 -12
  9. package/dist/api/users-api.cjs.map +1 -1
  10. package/dist/api/users-api.js +6 -6
  11. package/dist/appSlice/constants.cjs +18 -10
  12. package/dist/appSlice/constants.cjs.map +1 -1
  13. package/dist/appSlice/constants.d.cts +41 -84
  14. package/dist/appSlice/constants.d.ts +41 -84
  15. package/dist/appSlice/constants.js +1 -1
  16. package/dist/appSlice/index.cjs +1 -3
  17. package/dist/appSlice/index.cjs.map +1 -1
  18. package/dist/appSlice/index.js +4 -4
  19. package/dist/appSlice/thunks.cjs +153 -120
  20. package/dist/appSlice/thunks.cjs.map +1 -1
  21. package/dist/appSlice/thunks.js +28 -27
  22. package/dist/auth.cjs.map +1 -1
  23. package/dist/auth.js +4 -4
  24. package/dist/{chunk-NI4SZOCF.js → chunk-4RWZR3BN.js} +23 -25
  25. package/dist/{chunk-NI4SZOCF.js.map → chunk-4RWZR3BN.js.map} +1 -1
  26. package/dist/{chunk-YGBFDXXA.js → chunk-7YZCUAXZ.js} +2 -2
  27. package/dist/{chunk-7PVGDMNM.js → chunk-AFICTIVU.js} +3 -5
  28. package/dist/{chunk-7PVGDMNM.js.map → chunk-AFICTIVU.js.map} +1 -1
  29. package/dist/{chunk-YT73QWCN.js → chunk-AUBJUUP3.js} +3 -3
  30. package/dist/{chunk-UEP36GCI.js → chunk-AVX7VVOK.js} +3 -3
  31. package/dist/{chunk-4B3IMP4I.js → chunk-BSN2TOQC.js} +1 -1
  32. package/dist/{chunk-4B3IMP4I.js.map → chunk-BSN2TOQC.js.map} +1 -1
  33. package/dist/{chunk-VOCOFE4I.js → chunk-DCEKU6UV.js} +2 -2
  34. package/dist/{chunk-E5LEU5PF.js → chunk-DGQKXSRI.js} +3 -3
  35. package/dist/{chunk-74OJIKXF.js → chunk-EQLHIPPR.js} +182 -142
  36. package/dist/chunk-EQLHIPPR.js.map +1 -0
  37. package/dist/{chunk-MDC7Y3EX.js → chunk-EYCORLYU.js} +44 -40
  38. package/dist/chunk-EYCORLYU.js.map +1 -0
  39. package/dist/{chunk-KAQJH2YL.js → chunk-FQDSV3NK.js} +13 -5
  40. package/dist/chunk-FQDSV3NK.js.map +1 -0
  41. package/dist/{chunk-XTRPX7JZ.js → chunk-FRSA2YB5.js} +3 -3
  42. package/dist/chunk-FRSA2YB5.js.map +1 -0
  43. package/dist/{chunk-ANB5BM5J.js → chunk-FVCYB5OP.js} +37 -32
  44. package/dist/chunk-FVCYB5OP.js.map +1 -0
  45. package/dist/{chunk-AMGWP7A4.js → chunk-GAI4VYRZ.js} +2 -2
  46. package/dist/{chunk-YETZPQFR.js → chunk-GWJIY56H.js} +19 -20
  47. package/dist/chunk-GWJIY56H.js.map +1 -0
  48. package/dist/{chunk-Q6M5TTDQ.js → chunk-JO33IORF.js} +2 -2
  49. package/dist/chunk-JO33IORF.js.map +1 -0
  50. package/dist/chunk-K4MMUDYT.js +391 -0
  51. package/dist/chunk-K4MMUDYT.js.map +1 -0
  52. package/dist/{chunk-XXHONFSQ.js → chunk-L3SY3J5M.js} +4 -4
  53. package/dist/{chunk-XXHONFSQ.js.map → chunk-L3SY3J5M.js.map} +1 -1
  54. package/dist/{chunk-JAROCU6M.js → chunk-NCSKCF2S.js} +3 -3
  55. package/dist/{chunk-CYV6632F.js → chunk-NOQR3TE7.js} +2 -2
  56. package/dist/{chunk-A6CT6GTI.js → chunk-OEP2D6QL.js} +18 -12
  57. package/dist/chunk-OEP2D6QL.js.map +1 -0
  58. package/dist/{chunk-2RJIDREZ.js → chunk-PAIB5V27.js} +32 -23
  59. package/dist/chunk-PAIB5V27.js.map +1 -0
  60. package/dist/{chunk-FGKMJS3B.js → chunk-RX32WLVJ.js} +2 -4
  61. package/dist/chunk-RX32WLVJ.js.map +1 -0
  62. package/dist/{chunk-YTQUNAZP.js → chunk-X3GZILYD.js} +3 -3
  63. package/dist/{chunk-25AKG5HH.js → chunk-Y575RZHR.js} +19 -11
  64. package/dist/chunk-Y575RZHR.js.map +1 -0
  65. package/dist/{chunk-RX55KAKX.js → chunk-ZWOAFHAR.js} +2 -2
  66. package/dist/{chunk-NNADGHSL.js → chunk-ZZMFXRQK.js} +14 -14
  67. package/dist/commonConstants.cjs.map +1 -1
  68. package/dist/commonConstants.d.cts +1 -1
  69. package/dist/commonConstants.d.ts +1 -1
  70. package/dist/commonConstants.js +1 -1
  71. package/dist/commonSelectors.cjs +47 -29
  72. package/dist/commonSelectors.cjs.map +1 -1
  73. package/dist/commonSelectors.d.cts +55 -46
  74. package/dist/commonSelectors.d.ts +55 -46
  75. package/dist/commonSelectors.js +11 -11
  76. package/dist/constants.cjs +35 -19
  77. package/dist/constants.cjs.map +1 -1
  78. package/dist/constants.d.cts +3 -3
  79. package/dist/constants.d.ts +3 -3
  80. package/dist/constants.js +7 -3
  81. package/dist/deploymentdevicehook.cjs +159 -125
  82. package/dist/deploymentdevicehook.cjs.map +1 -1
  83. package/dist/deploymentdevicehook.d.cts +1 -1
  84. package/dist/deploymentdevicehook.d.ts +1 -1
  85. package/dist/deploymentdevicehook.js +34 -31
  86. package/dist/deploymentdevicehook.js.map +1 -1
  87. package/dist/deploymentsSlice/constants.cjs +8 -8
  88. package/dist/deploymentsSlice/constants.cjs.map +1 -1
  89. package/dist/deploymentsSlice/constants.js +3 -3
  90. package/dist/deploymentsSlice/index.cjs +8 -8
  91. package/dist/deploymentsSlice/index.cjs.map +1 -1
  92. package/dist/deploymentsSlice/index.js +4 -4
  93. package/dist/deploymentsSlice/selectors.cjs +8 -8
  94. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  95. package/dist/deploymentsSlice/selectors.js +4 -4
  96. package/dist/deploymentsSlice/thunks.cjs +153 -120
  97. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  98. package/dist/deploymentsSlice/thunks.js +28 -27
  99. package/dist/devicesSlice/constants.cjs +11 -8
  100. package/dist/devicesSlice/constants.cjs.map +1 -1
  101. package/dist/devicesSlice/constants.d.cts +2 -1
  102. package/dist/devicesSlice/constants.d.ts +2 -1
  103. package/dist/devicesSlice/constants.js +5 -3
  104. package/dist/devicesSlice/index.cjs +8 -8
  105. package/dist/devicesSlice/index.cjs.map +1 -1
  106. package/dist/devicesSlice/index.js +4 -4
  107. package/dist/devicesSlice/selectors.cjs +9 -9
  108. package/dist/devicesSlice/selectors.cjs.map +1 -1
  109. package/dist/devicesSlice/selectors.js +4 -4
  110. package/dist/devicesSlice/thunks.cjs +155 -120
  111. package/dist/devicesSlice/thunks.cjs.map +1 -1
  112. package/dist/devicesSlice/thunks.d.cts +12 -2
  113. package/dist/devicesSlice/thunks.d.ts +12 -2
  114. package/dist/devicesSlice/thunks.js +30 -27
  115. package/dist/flag-eu-5477R2P4.svg +130 -0
  116. package/dist/flag-us-HNQAF66I.svg +63 -0
  117. package/dist/liststatehook.cjs +971 -0
  118. package/dist/liststatehook.cjs.map +1 -0
  119. package/dist/liststatehook.d.cts +246 -0
  120. package/dist/liststatehook.d.ts +246 -0
  121. package/dist/liststatehook.js +88 -0
  122. package/dist/liststatehook.js.map +1 -0
  123. package/dist/locationutils.cjs +942 -0
  124. package/dist/locationutils.cjs.map +1 -0
  125. package/dist/locationutils.d.cts +113 -0
  126. package/dist/locationutils.d.ts +113 -0
  127. package/dist/locationutils.js +46 -0
  128. package/dist/locationutils.js.map +1 -0
  129. package/dist/monitorSlice/constants.cjs +8 -8
  130. package/dist/monitorSlice/constants.cjs.map +1 -1
  131. package/dist/monitorSlice/constants.js +3 -3
  132. package/dist/monitorSlice/index.cjs +8 -8
  133. package/dist/monitorSlice/index.cjs.map +1 -1
  134. package/dist/monitorSlice/index.js +4 -4
  135. package/dist/monitorSlice/thunks.cjs +74 -62
  136. package/dist/monitorSlice/thunks.cjs.map +1 -1
  137. package/dist/monitorSlice/thunks.js +24 -24
  138. package/dist/onboardingSlice/index.cjs +1 -3
  139. package/dist/onboardingSlice/index.cjs.map +1 -1
  140. package/dist/onboardingSlice/index.js +1 -1
  141. package/dist/onboardingSlice/thunks.cjs +157 -124
  142. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  143. package/dist/onboardingSlice/thunks.d.cts +2 -34
  144. package/dist/onboardingSlice/thunks.d.ts +2 -34
  145. package/dist/onboardingSlice/thunks.js +28 -29
  146. package/dist/organizationSlice/constants.cjs +22 -17
  147. package/dist/organizationSlice/constants.cjs.map +1 -1
  148. package/dist/organizationSlice/constants.d.cts +33 -1
  149. package/dist/organizationSlice/constants.d.ts +33 -1
  150. package/dist/organizationSlice/constants.js +5 -3
  151. package/dist/organizationSlice/index.cjs +18 -15
  152. package/dist/organizationSlice/index.cjs.map +1 -1
  153. package/dist/organizationSlice/index.d.cts +27 -1012
  154. package/dist/organizationSlice/index.d.ts +27 -1012
  155. package/dist/organizationSlice/index.js +4 -4
  156. package/dist/organizationSlice/selectors.cjs.map +1 -1
  157. package/dist/organizationSlice/selectors.d.cts +10 -1
  158. package/dist/organizationSlice/selectors.d.ts +10 -1
  159. package/dist/organizationSlice/selectors.js +4 -4
  160. package/dist/organizationSlice/thunks.cjs +1619 -1559
  161. package/dist/organizationSlice/thunks.cjs.map +1 -1
  162. package/dist/organizationSlice/thunks.d.cts +62 -37
  163. package/dist/organizationSlice/thunks.d.ts +62 -37
  164. package/dist/organizationSlice/thunks.js +28 -27
  165. package/dist/organizationSlice/types.cjs +19 -0
  166. package/dist/organizationSlice/types.cjs.map +1 -0
  167. package/dist/organizationSlice/types.d.cts +5 -0
  168. package/dist/organizationSlice/types.d.ts +5 -0
  169. package/dist/organizationSlice/types.js +1 -0
  170. package/dist/organizationSlice/types.js.map +1 -0
  171. package/dist/releasesSlice/index.cjs.map +1 -1
  172. package/dist/releasesSlice/index.js +4 -4
  173. package/dist/releasesSlice/selectors.cjs +17 -8
  174. package/dist/releasesSlice/selectors.cjs.map +1 -1
  175. package/dist/releasesSlice/selectors.js +5 -5
  176. package/dist/releasesSlice/thunks.cjs +123 -94
  177. package/dist/releasesSlice/thunks.cjs.map +1 -1
  178. package/dist/releasesSlice/thunks.d.cts +1 -4
  179. package/dist/releasesSlice/thunks.d.ts +1 -4
  180. package/dist/releasesSlice/thunks.js +25 -24
  181. package/dist/selectors.cjs +53 -29
  182. package/dist/selectors.cjs.map +1 -1
  183. package/dist/selectors.d.cts +10 -1
  184. package/dist/selectors.d.ts +10 -1
  185. package/dist/selectors.js +49 -43
  186. package/dist/sockethook.cjs +529 -0
  187. package/dist/sockethook.cjs.map +1 -0
  188. package/dist/sockethook.d.cts +10 -0
  189. package/dist/sockethook.d.ts +10 -0
  190. package/dist/sockethook.js +141 -0
  191. package/dist/sockethook.js.map +1 -0
  192. package/dist/store.cjs +38 -29
  193. package/dist/store.cjs.map +1 -1
  194. package/dist/store.d.cts +13 -231
  195. package/dist/store.d.ts +13 -231
  196. package/dist/store.js +18 -16
  197. package/dist/storehooks.cjs +273 -198
  198. package/dist/storehooks.cjs.map +1 -1
  199. package/dist/storehooks.js +38 -37
  200. package/dist/storehooks.js.map +1 -1
  201. package/dist/thunks.cjs +259 -184
  202. package/dist/thunks.cjs.map +1 -1
  203. package/dist/thunks.d.cts +6 -2
  204. package/dist/thunks.d.ts +6 -2
  205. package/dist/thunks.js +30 -29
  206. package/dist/types-DBj17FZO.d.cts +135 -0
  207. package/dist/types-DnfZa6xd.d.ts +135 -0
  208. package/dist/usersSlice/constants.cjs +10 -10
  209. package/dist/usersSlice/constants.cjs.map +1 -1
  210. package/dist/usersSlice/constants.d.cts +6 -6
  211. package/dist/usersSlice/constants.d.ts +6 -6
  212. package/dist/usersSlice/constants.js +3 -3
  213. package/dist/usersSlice/index.cjs +10 -10
  214. package/dist/usersSlice/index.cjs.map +1 -1
  215. package/dist/usersSlice/index.js +4 -4
  216. package/dist/usersSlice/selectors.cjs +35 -13
  217. package/dist/usersSlice/selectors.cjs.map +1 -1
  218. package/dist/usersSlice/selectors.d.cts +44 -1
  219. package/dist/usersSlice/selectors.d.ts +44 -1
  220. package/dist/usersSlice/selectors.js +13 -7
  221. package/dist/usersSlice/thunks.cjs +151 -120
  222. package/dist/usersSlice/thunks.cjs.map +1 -1
  223. package/dist/usersSlice/thunks.d.cts +10 -9
  224. package/dist/usersSlice/thunks.d.ts +10 -9
  225. package/dist/usersSlice/thunks.js +28 -27
  226. package/dist/utils.cjs +23 -24
  227. package/dist/utils.cjs.map +1 -1
  228. package/dist/utils.js +4 -4
  229. package/package.json +7 -6
  230. package/dist/chunk-25AKG5HH.js.map +0 -1
  231. package/dist/chunk-2RJIDREZ.js.map +0 -1
  232. package/dist/chunk-74OJIKXF.js.map +0 -1
  233. package/dist/chunk-A6CT6GTI.js.map +0 -1
  234. package/dist/chunk-ANB5BM5J.js.map +0 -1
  235. package/dist/chunk-FGKMJS3B.js.map +0 -1
  236. package/dist/chunk-KAQJH2YL.js.map +0 -1
  237. package/dist/chunk-MDC7Y3EX.js.map +0 -1
  238. package/dist/chunk-Q6M5TTDQ.js.map +0 -1
  239. package/dist/chunk-XTRPX7JZ.js.map +0 -1
  240. package/dist/chunk-YETZPQFR.js.map +0 -1
  241. /package/dist/{chunk-YGBFDXXA.js.map → chunk-7YZCUAXZ.js.map} +0 -0
  242. /package/dist/{chunk-YT73QWCN.js.map → chunk-AUBJUUP3.js.map} +0 -0
  243. /package/dist/{chunk-UEP36GCI.js.map → chunk-AVX7VVOK.js.map} +0 -0
  244. /package/dist/{chunk-VOCOFE4I.js.map → chunk-DCEKU6UV.js.map} +0 -0
  245. /package/dist/{chunk-E5LEU5PF.js.map → chunk-DGQKXSRI.js.map} +0 -0
  246. /package/dist/{chunk-AMGWP7A4.js.map → chunk-GAI4VYRZ.js.map} +0 -0
  247. /package/dist/{chunk-JAROCU6M.js.map → chunk-NCSKCF2S.js.map} +0 -0
  248. /package/dist/{chunk-CYV6632F.js.map → chunk-NOQR3TE7.js.map} +0 -0
  249. /package/dist/{chunk-YTQUNAZP.js.map → chunk-X3GZILYD.js.map} +0 -0
  250. /package/dist/{chunk-RX55KAKX.js.map → chunk-ZWOAFHAR.js.map} +0 -0
  251. /package/dist/{chunk-NNADGHSL.js.map → chunk-ZZMFXRQK.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: {
@@ -1232,9 +1237,7 @@ var appSlice = (0, import_toolkit.createSlice)({
1232
1237
  ...action.payload
1233
1238
  };
1234
1239
  },
1235
- setEnvironmentData: (state, action) => {
1236
- return { ...state, ...action.payload };
1237
- }
1240
+ setEnvironmentData: (state, action) => ({ ...state, ...action.payload })
1238
1241
  }
1239
1242
  });
1240
1243
  var actions = appSlice.actions;
@@ -1609,9 +1612,7 @@ var onboardingSlice = (0, import_toolkit5.createSlice)({
1609
1612
  name: sliceName5,
1610
1613
  initialState: initialState5,
1611
1614
  reducers: {
1612
- setOnboardingState: (state, action) => {
1613
- return { ...state, ...action.payload };
1614
- },
1615
+ setOnboardingState: (state, action) => ({ ...state, ...action.payload }),
1615
1616
  setDemoArtifactPort: (state, action) => {
1616
1617
  state.demoArtifactPort = action.payload;
1617
1618
  },
@@ -2179,7 +2180,7 @@ var getGroups = (0, import_toolkit11.createSelector)([getGroupsById], (groupsByI
2179
2180
  (accu, [groupname, group]) => {
2180
2181
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
2181
2182
  const groupItem = { ...group, groupId: name, name: groupname };
2182
- if (group.filters.length > 0) {
2183
+ if (group.filters?.length > 0) {
2183
2184
  if (groupname !== UNGROUPED_GROUP.id) {
2184
2185
  accu.dynamic.push(groupItem);
2185
2186
  } else {
@@ -2252,14 +2253,15 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
2252
2253
  // src/utils.ts
2253
2254
  var import_helpers4 = require("@northern.tech/utils/helpers");
2254
2255
  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
2256
+ [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
2257
+ [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
2258
+ [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
2259
+ [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
2260
+ [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
2261
+ [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2262
+ [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2263
+ [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers4.yes,
2264
+ [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
2263
2265
  };
2264
2266
  var filterAliases = {
2265
2267
  $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
@@ -2303,14 +2305,12 @@ var filtersFilter = (item, index, array) => {
2303
2305
  const firstIndex = array.findIndex((filter) => filterCompare(filter, item));
2304
2306
  return firstIndex === index;
2305
2307
  };
2306
- var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => {
2307
- return ids.slice(0, cutOffSize).reduce((accu, id) => {
2308
- if (id && byId[id]) {
2309
- accu.push({ ...defaultObject, ...byId[id] });
2310
- }
2311
- return accu;
2312
- }, []);
2313
- };
2308
+ var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
2309
+ if (id && byId[id]) {
2310
+ accu.push({ ...defaultObject, ...byId[id] });
2311
+ }
2312
+ return accu;
2313
+ }, []);
2314
2314
  var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
2315
2315
  (accu, [key, value]) => {
2316
2316
  let values;
@@ -2383,8 +2383,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
2383
2383
  var getGlobalSettings = (state) => state.users.globalSettings;
2384
2384
  var getCurrentUserId = (state) => state.users.currentUser;
2385
2385
  var getUsersById = (state) => state.users.byId;
2386
+ var getUsersList = (0, import_toolkit14.createSelector)([getUsersById], (usersById) => Object.values(usersById));
2386
2387
  var getCurrentUser = (0, import_toolkit14.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
2387
2388
  var getUserSettings = (state) => state.users.userSettings;
2389
+ var getSelectedDeviceAttribute = (0, import_toolkit14.createSelector)(
2390
+ [getUserSettings],
2391
+ ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
2392
+ );
2388
2393
  var getIsDarkMode = (0, import_toolkit14.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
2389
2394
  var getShowHelptips = (0, import_toolkit14.createSelector)(
2390
2395
  [getTooltipsById],
@@ -2409,7 +2414,7 @@ var getOfflineThresholdSettings = (0, import_toolkit14.createSelector)([getGloba
2409
2414
  interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
2410
2415
  intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
2411
2416
  }));
2412
- var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([id, role]) => ({ id, ...role })));
2417
+ var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
2413
2418
 
2414
2419
  // src/commonSelectors.ts
2415
2420
  var getIsEnterprise = (0, import_toolkit15.createSelector)(
@@ -2470,12 +2475,18 @@ var getUserCapabilities = (0, import_toolkit15.createSelector)([getUserRoles, ge
2470
2475
  });
2471
2476
  var getTenantCapabilities = (0, import_toolkit15.createSelector)(
2472
2477
  [getFeatures, getOrganization, getIsEnterprise],
2473
- ({ hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
2478
+ ({
2479
+ hasAuditlogs: isAuditlogEnabled,
2480
+ hasDeviceConfig: isDeviceConfigEnabled,
2481
+ hasDeviceConnect: isDeviceConnectEnabled,
2482
+ hasMonitor: isMonitorEnabled,
2483
+ isHosted
2484
+ }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
2474
2485
  const canDelta = isEnterprise || plan === PLANS.professional.id;
2475
2486
  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));
2487
+ const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
2488
+ const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
2489
+ const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
2479
2490
  return {
2480
2491
  canDelta,
2481
2492
  canRetry: canDelta,
@@ -2579,9 +2590,7 @@ var getGroupNames = (0, import_toolkit15.createSelector)([getGroupsById, getUser
2579
2590
  });
2580
2591
  var getDeviceReportsForUser = (0, import_toolkit15.createSelector)(
2581
2592
  [getUserSettings, getCurrentUser, getGlobalSettings, getDevicesById],
2582
- ({ reports }, { id: currentUserId }, globalSettings, devicesById) => {
2583
- return reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : []);
2584
- }
2593
+ ({ reports }, { id: currentUserId }, globalSettings, devicesById) => reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : [])
2585
2594
  );
2586
2595
  var listTypeDeviceIdMap = {
2587
2596
  deviceList: getListedDevices,
@@ -2605,7 +2614,7 @@ var getAuditlogDevice = (0, import_toolkit15.createSelector)([getAuditLogEntry,
2605
2614
  var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
2606
2615
  if (service_provider) {
2607
2616
  return roles.reduce((accu, role) => {
2608
- if (rolesById[role.id]) {
2617
+ if (rolesById[role.value]) {
2609
2618
  return accu;
2610
2619
  }
2611
2620
  accu.push(role);
@@ -2613,20 +2622,19 @@ var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, ge
2613
2622
  }, Object.values(serviceProviderRolesById));
2614
2623
  }
2615
2624
  return Object.keys(rolesById).reverse().reduce((accu, key) => {
2616
- const index = accu.findIndex(({ id }) => id === key);
2625
+ const index = accu.findIndex(({ value }) => value === key);
2617
2626
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
2618
2627
  return accu;
2619
2628
  }, roles);
2620
2629
  });
2621
2630
 
2622
2631
  // src/store.ts
2632
+ var import_react_redux = require("react-redux");
2623
2633
  var import_helpers6 = require("@northern.tech/utils/helpers");
2624
2634
  var import_toolkit16 = require("@reduxjs/toolkit");
2625
2635
  var { setSnackbar, uploadProgress } = actions_default;
2626
2636
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2627
- var resetEnvironment = () => {
2628
- keys.map((key) => window.sessionStorage.removeItem(key));
2629
- };
2637
+ var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
2630
2638
  resetEnvironment();
2631
2639
  var commonErrorFallback = "Please check your connection.";
2632
2640
  var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
@@ -2652,6 +2660,14 @@ var sessionReducer = (state, action) => {
2652
2660
  }
2653
2661
  return rootReducer(state, action);
2654
2662
  };
2663
+ var rejectionLoggerMiddleware = () => (next) => (action) => {
2664
+ if (action.type.endsWith("/rejected")) {
2665
+ const { error } = action;
2666
+ console.error("Rejection in action:", action);
2667
+ console.error(error.stack);
2668
+ }
2669
+ return next(action);
2670
+ };
2655
2671
  var getConfiguredStore = (options = {}) => {
2656
2672
  const { preloadedState = {}, ...config } = options;
2657
2673
  return (0, import_toolkit16.configureStore)({
@@ -2667,7 +2683,7 @@ var getConfiguredStore = (options = {}) => {
2667
2683
  ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2668
2684
  ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2669
2685
  }
2670
- })
2686
+ }).concat(rejectionLoggerMiddleware)
2671
2687
  });
2672
2688
  };
2673
2689
  var store = getConfiguredStore({
@@ -2784,12 +2800,13 @@ var setSearchState = (0, import_toolkit17.createAsyncThunk)(`${sliceName}/setSea
2784
2800
 
2785
2801
  // src/deploymentsSlice/thunks.ts
2786
2802
  var import_helpers8 = require("@northern.tech/utils/helpers");
2803
+ var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
2787
2804
  var import_toolkit18 = require("@reduxjs/toolkit");
2788
2805
  var import_validator = require("validator");
2789
2806
  var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
2790
2807
  var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
2791
2808
  var deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => group || groups.length === 1 && !(0, import_validator.isUUID)(name) ? groups[0] : filter.name;
2792
- var transformDeployments = (deployments, deploymentsById) => deployments.sort(import_helpers8.startTimeSort).reduce(
2809
+ var transformDeployments = (deployments, deploymentsById) => deployments.sort((0, import_helpers8.customSort)(true, "created")).reduce(
2793
2810
  (accu, item) => {
2794
2811
  const filter = item.filter ?? {};
2795
2812
  let deployment = {
@@ -2840,6 +2857,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceNam
2840
2857
  return Promise.all(tasks);
2841
2858
  });
2842
2859
  });
2860
+ var isWithinFirstMonth = (expirationDate) => {
2861
+ if (!expirationDate) {
2862
+ return false;
2863
+ }
2864
+ const endOfFirstMonth = new Date(expirationDate);
2865
+ endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
2866
+ return endOfFirstMonth > /* @__PURE__ */ new Date();
2867
+ };
2868
+ var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
2869
+ import_tracking.default.event({ category: "deployments", action: "create" });
2870
+ if (!totalDeploymentCount) {
2871
+ if (!hasDeployments) {
2872
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
2873
+ if (isWithinFirstMonth(trial_expiration)) {
2874
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
2875
+ }
2876
+ }
2877
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
2878
+ }
2879
+ };
2843
2880
  var MAX_PREVIOUS_PHASES_COUNT = 5;
2844
2881
  var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
2845
2882
  let request;
@@ -2850,6 +2887,9 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2850
2887
  } else {
2851
2888
  request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
2852
2889
  }
2890
+ const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
2891
+ const { hasDeployments } = getGlobalSettings(getState());
2892
+ const { trial_expiration } = getOrganization(getState());
2853
2893
  return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
2854
2894
  const lastslashindex = data.headers.location.lastIndexOf("/");
2855
2895
  const deploymentId = data.headers.location.substring(lastslashindex + 1);
@@ -2864,6 +2904,7 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2864
2904
  dispatch(getSingleDeployment(deploymentId)),
2865
2905
  dispatch(setSnackbar2("Deployment created successfully", TIMEOUTS.fiveSeconds))
2866
2906
  ];
2907
+ trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
2867
2908
  const { canManageUsers } = getUserCapabilities(getState());
2868
2909
  if (canManageUsers) {
2869
2910
  const { phases, retries } = newDeployment;
@@ -3154,16 +3195,17 @@ var getDeviceMonitorConfig = (0, import_toolkit19.createAsyncThunk)(
3154
3195
  );
3155
3196
  var changeNotificationSetting = (0, import_toolkit19.createAsyncThunk)(
3156
3197
  `${sliceName4}/changeNotificationSetting`,
3157
- ({ enabled, channel = alertChannels.email }, { dispatch }) => {
3158
- return 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(
3159
- () => Promise.all([
3160
- dispatch(actions4.changeAlertChannel({ channel, enabled })),
3161
- dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
3162
- ])
3163
- );
3164
- }
3198
+ ({ 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(
3199
+ () => Promise.all([
3200
+ dispatch(actions4.changeAlertChannel({ channel, enabled })),
3201
+ dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
3202
+ ])
3203
+ )
3165
3204
  );
3166
3205
 
3206
+ // src/usersSlice/thunks.ts
3207
+ var import_helptips = require("@northern.tech/common-ui/helptips");
3208
+
3167
3209
  // src/api/users-api.ts
3168
3210
  var import_axios2 = __toESM(require("axios"), 1);
3169
3211
  var Api2 = {
@@ -3197,7 +3239,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
3197
3239
  }
3198
3240
  const twoFAError = is2FABackend ? " and verification code" : "";
3199
3241
  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")));
3242
+ return Promise.reject(dispatch(setSnackbar3({ message: (0, import_helpers9.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
3201
3243
  };
3202
3244
  var loginUser = (0, import_toolkit20.createAsyncThunk)(
3203
3245
  `${sliceName8}/loginUser`,
@@ -3221,19 +3263,16 @@ var loginUser = (0, import_toolkit20.createAsyncThunk)(
3221
3263
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
3222
3264
  setSessionInfo({ token, expiresAt });
3223
3265
  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
- );
3266
+ return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
3267
+ cleanUp();
3268
+ return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.extractErrorMessage)(e))));
3269
+ }).then(() => {
3270
+ window.sessionStorage.removeItem("pendings-redirect");
3271
+ if (window.location.pathname !== "/ui/") {
3272
+ window.location.replace("/ui/");
3273
+ }
3274
+ return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
3275
+ });
3237
3276
  })
3238
3277
  );
3239
3278
  var logoutUser = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -3251,6 +3290,7 @@ var switchUserOrganization = (0, import_toolkit20.createAsyncThunk)(`${sliceName
3251
3290
  return Promise.reject();
3252
3291
  }
3253
3292
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
3293
+ window.sessionStorage.setItem("tenantChanged", "true");
3254
3294
  setSessionInfo({ ...getSessionInfo(), token });
3255
3295
  window.location.reload();
3256
3296
  });
@@ -3291,11 +3331,18 @@ var verify2FA = (0, import_toolkit20.createAsyncThunk)(
3291
3331
  );
3292
3332
  var getUserList = (0, import_toolkit20.createAsyncThunk)(
3293
3333
  `${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
- }, {});
3334
+ (_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
3335
+ const currentUsersById = getUsersById(getState());
3336
+ const users = res.data.reduce(
3337
+ (accu, item) => {
3338
+ accu[item.id] = {
3339
+ ...accu[item.id],
3340
+ ...item
3341
+ };
3342
+ return accu;
3343
+ },
3344
+ { ...currentUsersById }
3345
+ );
3299
3346
  return dispatch(actions8.receivedUserList(users));
3300
3347
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
3301
3348
  );
@@ -3304,9 +3351,7 @@ var getUser = (0, import_toolkit20.createAsyncThunk)(
3304
3351
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
3305
3352
  ({ data: user }) => Promise.all([
3306
3353
  dispatch(actions8.receivedUser(user)),
3307
- // @ts-ignore
3308
3354
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
3309
- // @ts-ignore
3310
3355
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
3311
3356
  user
3312
3357
  ])
@@ -3353,10 +3398,7 @@ var createUser = (0, import_toolkit20.createAsyncThunk)(
3353
3398
  );
3354
3399
  var removeUser = (0, import_toolkit20.createAsyncThunk)(
3355
3400
  `${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
- )
3401
+ (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
3402
  );
3361
3403
  var editUser = (0, import_toolkit20.createAsyncThunk)(
3362
3404
  `${sliceName8}/editUser`,
@@ -3377,7 +3419,7 @@ var enableUser2fa = (0, import_toolkit20.createAsyncThunk)(
3377
3419
  );
3378
3420
  var disableUser2fa = (0, import_toolkit20.createAsyncThunk)(
3379
3421
  `${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))))
3422
+ (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
3423
  );
3382
3424
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
3383
3425
  (accu, [area, definition]) => {
@@ -3530,7 +3572,6 @@ var getPermissionSets = (0, import_toolkit20.createAsyncThunk)(
3530
3572
  accu[permissionSet.name] = permissionSetObject;
3531
3573
  return accu;
3532
3574
  },
3533
- // @ts-ignore
3534
3575
  { ...getState().users.permissionSetsById }
3535
3576
  );
3536
3577
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -3623,7 +3664,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
3623
3664
  role: {
3624
3665
  ...emptyRole,
3625
3666
  name,
3626
- // @ts-ignore
3627
3667
  description: description ? description : roleState.description,
3628
3668
  uiPermissions: {
3629
3669
  ...emptyUiPermissions,
@@ -3666,10 +3706,7 @@ var editRole = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/editRole`,
3666
3706
  });
3667
3707
  var removeRole = (0, import_toolkit20.createAsyncThunk)(
3668
3708
  `${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
- )
3709
+ (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
3710
  );
3674
3711
  var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
3675
3712
  `${sliceName8}/getGlobalSettings`,
@@ -3680,7 +3717,6 @@ var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
3680
3717
  );
3681
3718
  var saveGlobalSettings = (0, import_toolkit20.createAsyncThunk)(
3682
3719
  `${sliceName8}/saveGlobalSettings`,
3683
- // @ts-ignore
3684
3720
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
3685
3721
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
3686
3722
  return;
@@ -3726,11 +3762,9 @@ var saveUserSettings = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/sav
3726
3762
  const tooltipState = getTooltipsState(getState());
3727
3763
  const updatedSettings = {
3728
3764
  ...userSettings,
3729
- // @ts-ignore
3730
3765
  ...settings,
3731
3766
  onboarding: {
3732
3767
  ...onboardingState,
3733
- // @ts-ignore
3734
3768
  ...settings.onboarding
3735
3769
  },
3736
3770
  tooltips: tooltipState
@@ -3774,10 +3808,7 @@ var generateToken = (0, import_toolkit20.createAsyncThunk)(
3774
3808
  );
3775
3809
  var revokeToken = (0, import_toolkit20.createAsyncThunk)(
3776
3810
  `${sliceName8}/revokeToken`,
3777
- (token, { dispatch }) => (
3778
- // @ts-ignore
3779
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
3780
- )
3811
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
3781
3812
  );
3782
3813
  var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
3783
3814
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -3786,23 +3817,20 @@ var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/
3786
3817
  }
3787
3818
  return Promise.all(tasks);
3788
3819
  });
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 } }), {});
3820
+ var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
3821
+ const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
3791
3822
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
3792
3823
  });
3793
3824
  var submitFeedback = (0, import_toolkit20.createAsyncThunk)(
3794
3825
  `${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
- }
3826
+ ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
3827
+ subject: "feedback submission",
3828
+ body: JSON.stringify({ feedback, satisfaction, meta })
3829
+ }).then(() => {
3830
+ const today = /* @__PURE__ */ new Date();
3831
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
3832
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
3833
+ })
3806
3834
  );
3807
3835
 
3808
3836
  // src/devicesSlice/thunks.tsx
@@ -4241,7 +4269,7 @@ var getDevicesByStatus2 = (0, import_toolkit21.createAsyncThunk)(`${sliceName3}/
4241
4269
  page = defaultPage3,
4242
4270
  perPage = defaultPerPage3,
4243
4271
  sortOptions = [],
4244
- selectedAttributes = []
4272
+ selectedAttributes = getSelectedDeviceAttribute(getState())
4245
4273
  } = options;
4246
4274
  const state = getState();
4247
4275
  const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
@@ -4354,7 +4382,6 @@ var getReportingLimits = (0, import_toolkit21.createAsyncThunk)(
4354
4382
  })
4355
4383
  );
4356
4384
  var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
4357
- var REPORT_CHART_SIZE_LIMIT = 6;
4358
4385
  var getSingleReportData = (reportConfig, groups) => {
4359
4386
  const { attribute, group, software = "" } = reportConfig;
4360
4387
  const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
@@ -4434,6 +4461,13 @@ var getDeviceConnect = (0, import_toolkit21.createAsyncThunk)(
4434
4461
  ({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
4435
4462
  )
4436
4463
  );
4464
+ var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
4465
+ var triggerDeviceUpdate = (0, import_toolkit21.createAsyncThunk)(
4466
+ `${sliceName3}/triggerDeviceUpdate`,
4467
+ ({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
4468
+ () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
4469
+ )
4470
+ );
4437
4471
  var getSessionDetails = (0, import_toolkit21.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
4438
4472
  const { start: startUnix, end: endUnix } = (0, import_helpers10.dateRangeToUnix)(startDate, endDate);
4439
4473
  const createdAfter = startDate ? `&created_after=${startUnix}` : "";
@@ -4536,12 +4570,12 @@ var deleteAuthset = (0, import_toolkit21.createAsyncThunk)(
4536
4570
  );
4537
4571
  var preauthDevice = (0, import_toolkit21.createAsyncThunk)(
4538
4572
  `${sliceName3}/preauthDevice`,
4539
- (authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
4573
+ (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
4574
  if (err.response.status === 409) {
4541
- return Promise.reject("A device with a matching identity data set already exists");
4575
+ return rejectWithValue("A device with a matching identity data set already exists");
4542
4576
  }
4543
4577
  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))))
4578
+ })
4545
4579
  );
4546
4580
  var decommissionDevice = (0, import_toolkit21.createAsyncThunk)(
4547
4581
  `${sliceName3}/decommissionDevice`,
@@ -4752,6 +4786,7 @@ var getDevicesInBounds = (0, import_toolkit21.createAsyncThunk)(`${sliceName3}/g
4752
4786
  setDeviceListState,
4753
4787
  setDeviceTags,
4754
4788
  setDeviceTwin,
4789
+ triggerDeviceUpdate,
4755
4790
  updateDeviceAuth,
4756
4791
  updateDevicesAuth,
4757
4792
  updateDynamicGroup