@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
@@ -27,14 +27,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // src/deploymentdevicehook.js
30
+ // src/deploymentdevicehook.ts
31
31
  var deploymentdevicehook_exports = {};
32
32
  __export(deploymentdevicehook_exports, {
33
33
  useDeploymentDevice: () => useDeploymentDevice
34
34
  });
35
35
  module.exports = __toCommonJS(deploymentdevicehook_exports);
36
36
  var import_react = require("react");
37
- var import_react_redux = require("react-redux");
37
+ var import_react_redux2 = require("react-redux");
38
38
 
39
39
  // src/appSlice/selectors.ts
40
40
  var import_helpers = require("@northern.tech/utils/helpers");
@@ -86,28 +86,28 @@ var PLANS = {
86
86
  id: "os",
87
87
  name: "Basic",
88
88
  offer: true,
89
- price: "$32/month",
89
+ price: "$32 / month",
90
90
  deviceCount: startingDeviceCount.os,
91
- offerprice: "$23/month for first 50 devices",
91
+ offerprice: "$23 / month for first 50 devices",
92
92
  price2: "for first 6 months;\n$29/month thereafter",
93
- features: ["Basic OTA features"]
93
+ features: ["Access to core features of Mender", "Basic support"]
94
94
  },
95
95
  professional: {
96
96
  id: "professional",
97
97
  name: "Professional",
98
98
  offer: true,
99
- price: "$269/month",
99
+ price: "$269 / month",
100
100
  deviceCount: startingDeviceCount.professional,
101
- offerprice: "$200/month for first 50 devices",
101
+ offerprice: "$200 / month for first 50 devices",
102
102
  price2: "for first 6 months;\n$249/month thereafter",
103
- features: ["+ Advanced OTA features", "+ Standard support"]
103
+ features: ["Advanced OTA features", "Higher priority support"]
104
104
  },
105
105
  enterprise: {
106
106
  id: "enterprise",
107
107
  name: "Enterprise",
108
108
  price: "Custom pricing",
109
- deviceCount: "unlimited devices",
110
- features: ["+ Enterprise-grade OTA features", "+ Premium support"]
109
+ deviceCount: "Unlimited devices",
110
+ features: ["All Mender features", "Advanced security features", "SLA-backed support"]
111
111
  }
112
112
  };
113
113
  var ADDONS = {
@@ -440,6 +440,7 @@ var DEVICE_STATES = {
440
440
  rejected: "rejected"
441
441
  };
442
442
  var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
443
+ var REPORT_CHART_SIZE_LIMIT = 6;
443
444
 
444
445
  // src/monitorSlice/constants.ts
445
446
  var alertChannels = { email: "email" };
@@ -521,13 +522,16 @@ var SSO_TYPES = {
521
522
  configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
522
523
  }
523
524
  };
524
- var AUDIT_LOGS_TYPES = [
525
- { title: "Artifact", queryParameter: "object_type", value: "artifact" },
526
- { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
527
- { title: "Device", queryParameter: "object_id", value: "device" },
528
- { title: "User", queryParameter: "object_id", value: "user" }
529
- ];
530
- var SP_AUDIT_LOGS_TYPES = [AUDIT_LOGS_TYPES[3], { title: "Tenant", queryParameter: "object_id", value: "tenant" }];
525
+ var auditlogTypes = {
526
+ artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
527
+ deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
528
+ device: { title: "Device", queryParameter: "object_id", value: "device" },
529
+ user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
530
+ user: { title: "User", queryParameter: "object_id", value: "user" },
531
+ tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
532
+ };
533
+ var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
534
+ var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
531
535
  var emptyWebhook = {
532
536
  description: "",
533
537
  enabled: true,
@@ -660,7 +664,7 @@ var uiPermissionsByArea = {
660
664
  explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
661
665
  key: "auditlog",
662
666
  uiPermissions: [uiPermissionsById.read],
663
- title: "System audit log"
667
+ title: "System Audit Log"
664
668
  },
665
669
  deployments: {
666
670
  endpoints: [
@@ -811,7 +815,7 @@ var serviceProviderRolesById = {
811
815
  },
812
816
  readOnly: {
813
817
  name: "Read access",
814
- value: staticRolesByName.admin,
818
+ value: staticRolesByName.readOnly,
815
819
  description: "This role can see all linked organizations but cannot make any changes",
816
820
  permissions: [],
817
821
  uiPermissions: {
@@ -1183,7 +1187,7 @@ var getGroups = (0, import_toolkit3.createSelector)([getGroupsById], (groupsById
1183
1187
  (accu, [groupname, group]) => {
1184
1188
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
1185
1189
  const groupItem = { ...group, groupId: name, name: groupname };
1186
- if (group.filters.length > 0) {
1190
+ if (group.filters?.length > 0) {
1187
1191
  if (groupname !== UNGROUPED_GROUP.id) {
1188
1192
  accu.dynamic.push(groupItem);
1189
1193
  } else {
@@ -1256,14 +1260,15 @@ var getAuditLogEntry = (0, import_toolkit4.createSelector)([getAuditLog, getAudi
1256
1260
  // src/utils.ts
1257
1261
  var import_helpers3 = require("@northern.tech/utils/helpers");
1258
1262
  var filterProcessors = {
1259
- $gt: (val) => Number(val) || val,
1260
- $gte: (val) => Number(val) || val,
1261
- $lt: (val) => Number(val) || val,
1262
- $lte: (val) => Number(val) || val,
1263
- $in: (val) => ("" + val).split(",").map((i) => i.trim()),
1264
- $nin: (val) => ("" + val).split(",").map((i) => i.trim()),
1265
- $exists: import_helpers3.yes,
1266
- $nexists: () => false
1263
+ [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
1264
+ [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
1265
+ [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
1266
+ [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
1267
+ [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
1268
+ [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1269
+ [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1270
+ [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers3.yes,
1271
+ [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
1267
1272
  };
1268
1273
  var filterAliases = {
1269
1274
  $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
@@ -1307,14 +1312,12 @@ var filtersFilter = (item, index, array) => {
1307
1312
  const firstIndex = array.findIndex((filter) => filterCompare(filter, item));
1308
1313
  return firstIndex === index;
1309
1314
  };
1310
- var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => {
1311
- return ids.slice(0, cutOffSize).reduce((accu, id) => {
1312
- if (id && byId[id]) {
1313
- accu.push({ ...defaultObject, ...byId[id] });
1314
- }
1315
- return accu;
1316
- }, []);
1317
- };
1315
+ var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
1316
+ if (id && byId[id]) {
1317
+ accu.push({ ...defaultObject, ...byId[id] });
1318
+ }
1319
+ return accu;
1320
+ }, []);
1318
1321
  var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
1319
1322
  (accu, [key, value]) => {
1320
1323
  let values;
@@ -1387,8 +1390,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
1387
1390
  var getGlobalSettings = (state) => state.users.globalSettings;
1388
1391
  var getCurrentUserId = (state) => state.users.currentUser;
1389
1392
  var getUsersById = (state) => state.users.byId;
1393
+ var getUsersList = (0, import_toolkit6.createSelector)([getUsersById], (usersById) => Object.values(usersById));
1390
1394
  var getCurrentUser = (0, import_toolkit6.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
1391
1395
  var getUserSettings = (state) => state.users.userSettings;
1396
+ var getSelectedDeviceAttribute = (0, import_toolkit6.createSelector)(
1397
+ [getUserSettings],
1398
+ ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
1399
+ );
1392
1400
  var getIsDarkMode = (0, import_toolkit6.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
1393
1401
  var getShowHelptips = (0, import_toolkit6.createSelector)(
1394
1402
  [getTooltipsById],
@@ -1413,7 +1421,7 @@ var getOfflineThresholdSettings = (0, import_toolkit6.createSelector)([getGlobal
1413
1421
  interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
1414
1422
  intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
1415
1423
  }));
1416
- var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([id, role]) => ({ id, ...role })));
1424
+ var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
1417
1425
 
1418
1426
  // src/commonSelectors.ts
1419
1427
  var getIsEnterprise = (0, import_toolkit7.createSelector)(
@@ -1474,12 +1482,18 @@ var getUserCapabilities = (0, import_toolkit7.createSelector)([getUserRoles, get
1474
1482
  });
1475
1483
  var getTenantCapabilities = (0, import_toolkit7.createSelector)(
1476
1484
  [getFeatures, getOrganization, getIsEnterprise],
1477
- ({ hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
1485
+ ({
1486
+ hasAuditlogs: isAuditlogEnabled,
1487
+ hasDeviceConfig: isDeviceConfigEnabled,
1488
+ hasDeviceConnect: isDeviceConnectEnabled,
1489
+ hasMonitor: isMonitorEnabled,
1490
+ isHosted
1491
+ }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
1478
1492
  const canDelta = isEnterprise || plan === PLANS.professional.id;
1479
1493
  const hasAuditlogs = isAuditlogEnabled && isEnterprise;
1480
- const hasDeviceConfig = isDeviceConfigEnabled && addons.some((addon) => addon.name === "configure" && Boolean(addon.enabled));
1481
- const hasDeviceConnect = isDeviceConnectEnabled && (!isEnterprise || addons.some((addon) => addon.name === "troubleshoot" && Boolean(addon.enabled)));
1482
- const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === "monitor" && Boolean(addon.enabled));
1494
+ const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
1495
+ const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
1496
+ const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
1483
1497
  return {
1484
1498
  canDelta,
1485
1499
  canRetry: canDelta,
@@ -1583,9 +1597,7 @@ var getGroupNames = (0, import_toolkit7.createSelector)([getGroupsById, getUserR
1583
1597
  });
1584
1598
  var getDeviceReportsForUser = (0, import_toolkit7.createSelector)(
1585
1599
  [getUserSettings, getCurrentUser, getGlobalSettings, getDevicesById],
1586
- ({ reports }, { id: currentUserId }, globalSettings, devicesById) => {
1587
- return reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : []);
1588
- }
1600
+ ({ reports }, { id: currentUserId }, globalSettings, devicesById) => reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : [])
1589
1601
  );
1590
1602
  var listTypeDeviceIdMap = {
1591
1603
  deviceList: getListedDevices,
@@ -1609,7 +1621,7 @@ var getAuditlogDevice = (0, import_toolkit7.createSelector)([getAuditLogEntry, g
1609
1621
  var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
1610
1622
  if (service_provider) {
1611
1623
  return roles.reduce((accu, role) => {
1612
- if (rolesById[role.id]) {
1624
+ if (rolesById[role.value]) {
1613
1625
  return accu;
1614
1626
  }
1615
1627
  accu.push(role);
@@ -1617,7 +1629,7 @@ var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, get
1617
1629
  }, Object.values(serviceProviderRolesById));
1618
1630
  }
1619
1631
  return Object.keys(rolesById).reverse().reduce((accu, key) => {
1620
- const index = accu.findIndex(({ id }) => id === key);
1632
+ const index = accu.findIndex(({ value }) => value === key);
1621
1633
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
1622
1634
  return accu;
1623
1635
  }, roles);
@@ -1842,9 +1854,7 @@ var appSlice = (0, import_toolkit8.createSlice)({
1842
1854
  ...action.payload
1843
1855
  };
1844
1856
  },
1845
- setEnvironmentData: (state, action) => {
1846
- return { ...state, ...action.payload };
1847
- }
1857
+ setEnvironmentData: (state, action) => ({ ...state, ...action.payload })
1848
1858
  }
1849
1859
  });
1850
1860
  var actions = appSlice.actions;
@@ -2324,9 +2334,7 @@ var onboardingSlice = (0, import_toolkit13.createSlice)({
2324
2334
  name: sliceName5,
2325
2335
  initialState: initialState5,
2326
2336
  reducers: {
2327
- setOnboardingState: (state, action) => {
2328
- return { ...state, ...action.payload };
2329
- },
2337
+ setOnboardingState: (state, action) => ({ ...state, ...action.payload }),
2330
2338
  setDemoArtifactPort: (state, action) => {
2331
2339
  state.demoArtifactPort = action.payload;
2332
2340
  },
@@ -2685,13 +2693,12 @@ var actions_default = {
2685
2693
  };
2686
2694
 
2687
2695
  // src/store.ts
2696
+ var import_react_redux = require("react-redux");
2688
2697
  var import_helpers7 = require("@northern.tech/utils/helpers");
2689
2698
  var import_toolkit17 = require("@reduxjs/toolkit");
2690
2699
  var { setSnackbar, uploadProgress } = actions_default;
2691
2700
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2692
- var resetEnvironment = () => {
2693
- keys.map((key) => window.sessionStorage.removeItem(key));
2694
- };
2701
+ var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
2695
2702
  resetEnvironment();
2696
2703
  var commonErrorFallback = "Please check your connection.";
2697
2704
  var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
@@ -2717,6 +2724,14 @@ var sessionReducer = (state, action) => {
2717
2724
  }
2718
2725
  return rootReducer(state, action);
2719
2726
  };
2727
+ var rejectionLoggerMiddleware = () => (next) => (action) => {
2728
+ if (action.type.endsWith("/rejected")) {
2729
+ const { error } = action;
2730
+ console.error("Rejection in action:", action);
2731
+ console.error(error.stack);
2732
+ }
2733
+ return next(action);
2734
+ };
2720
2735
  var getConfiguredStore = (options = {}) => {
2721
2736
  const { preloadedState = {}, ...config } = options;
2722
2737
  return (0, import_toolkit17.configureStore)({
@@ -2732,21 +2747,23 @@ var getConfiguredStore = (options = {}) => {
2732
2747
  ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2733
2748
  ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2734
2749
  }
2735
- })
2750
+ }).concat(rejectionLoggerMiddleware)
2736
2751
  });
2737
2752
  };
2738
2753
  var store = getConfiguredStore({
2739
2754
  preloadedState: {}
2740
2755
  });
2756
+ var useAppDispatch = import_react_redux.useDispatch;
2741
2757
 
2742
2758
  // src/deploymentsSlice/thunks.ts
2743
2759
  var import_helpers8 = require("@northern.tech/utils/helpers");
2760
+ var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
2744
2761
  var import_toolkit18 = require("@reduxjs/toolkit");
2745
2762
  var import_validator = require("validator");
2746
2763
  var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
2747
2764
  var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
2748
2765
  var deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => group || groups.length === 1 && !(0, import_validator.isUUID)(name) ? groups[0] : filter.name;
2749
- var transformDeployments = (deployments, deploymentsById) => deployments.sort(import_helpers8.startTimeSort).reduce(
2766
+ var transformDeployments = (deployments, deploymentsById) => deployments.sort((0, import_helpers8.customSort)(true, "created")).reduce(
2750
2767
  (accu, item) => {
2751
2768
  const filter = item.filter ?? {};
2752
2769
  let deployment = {
@@ -2797,6 +2814,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceNam
2797
2814
  return Promise.all(tasks);
2798
2815
  });
2799
2816
  });
2817
+ var isWithinFirstMonth = (expirationDate) => {
2818
+ if (!expirationDate) {
2819
+ return false;
2820
+ }
2821
+ const endOfFirstMonth = new Date(expirationDate);
2822
+ endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
2823
+ return endOfFirstMonth > /* @__PURE__ */ new Date();
2824
+ };
2825
+ var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
2826
+ import_tracking.default.event({ category: "deployments", action: "create" });
2827
+ if (!totalDeploymentCount) {
2828
+ if (!hasDeployments) {
2829
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
2830
+ if (isWithinFirstMonth(trial_expiration)) {
2831
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
2832
+ }
2833
+ }
2834
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
2835
+ }
2836
+ };
2800
2837
  var MAX_PREVIOUS_PHASES_COUNT = 5;
2801
2838
  var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
2802
2839
  let request;
@@ -2807,6 +2844,9 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2807
2844
  } else {
2808
2845
  request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
2809
2846
  }
2847
+ const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
2848
+ const { hasDeployments } = getGlobalSettings(getState());
2849
+ const { trial_expiration } = getOrganization(getState());
2810
2850
  return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
2811
2851
  const lastslashindex = data.headers.location.lastIndexOf("/");
2812
2852
  const deploymentId = data.headers.location.substring(lastslashindex + 1);
@@ -2821,6 +2861,7 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2821
2861
  dispatch(getSingleDeployment(deploymentId)),
2822
2862
  dispatch(setSnackbar2("Deployment created successfully", TIMEOUTS.fiveSeconds))
2823
2863
  ];
2864
+ trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
2824
2865
  const { canManageUsers } = getUserCapabilities(getState());
2825
2866
  if (canManageUsers) {
2826
2867
  const { phases, retries } = newDeployment;
@@ -3495,7 +3536,7 @@ var getDevicesByStatus2 = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/
3495
3536
  page = defaultPage2,
3496
3537
  perPage = defaultPerPage2,
3497
3538
  sortOptions = [],
3498
- selectedAttributes = []
3539
+ selectedAttributes = getSelectedDeviceAttribute(getState())
3499
3540
  } = options;
3500
3541
  const state = getState();
3501
3542
  const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
@@ -3608,7 +3649,6 @@ var getReportingLimits = (0, import_toolkit19.createAsyncThunk)(
3608
3649
  })
3609
3650
  );
3610
3651
  var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
3611
- var REPORT_CHART_SIZE_LIMIT = 6;
3612
3652
  var getSingleReportData = (reportConfig, groups) => {
3613
3653
  const { attribute, group, software = "" } = reportConfig;
3614
3654
  const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
@@ -3688,6 +3728,13 @@ var getDeviceConnect = (0, import_toolkit19.createAsyncThunk)(
3688
3728
  ({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
3689
3729
  )
3690
3730
  );
3731
+ var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
3732
+ var triggerDeviceUpdate = (0, import_toolkit19.createAsyncThunk)(
3733
+ `${sliceName3}/triggerDeviceUpdate`,
3734
+ ({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
3735
+ () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
3736
+ )
3737
+ );
3691
3738
  var getSessionDetails = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
3692
3739
  const { start: startUnix, end: endUnix } = (0, import_helpers9.dateRangeToUnix)(startDate, endDate);
3693
3740
  const createdAfter = startDate ? `&created_after=${startUnix}` : "";
@@ -3790,12 +3837,12 @@ var deleteAuthset = (0, import_toolkit19.createAsyncThunk)(
3790
3837
  );
3791
3838
  var preauthDevice = (0, import_toolkit19.createAsyncThunk)(
3792
3839
  `${sliceName3}/preauthDevice`,
3793
- (authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
3840
+ (authset, { dispatch, rejectWithValue }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).then(() => Promise.resolve(dispatch(setSnackbar3("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds)))).catch((err) => {
3794
3841
  if (err.response.status === 409) {
3795
- return Promise.reject("A device with a matching identity data set already exists");
3842
+ return rejectWithValue("A device with a matching identity data set already exists");
3796
3843
  }
3797
3844
  return commonErrorHandler(err, "The device could not be added:", dispatch);
3798
- }).then(() => Promise.resolve(dispatch(setSnackbar3("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds))))
3845
+ })
3799
3846
  );
3800
3847
  var decommissionDevice = (0, import_toolkit19.createAsyncThunk)(
3801
3848
  `${sliceName3}/decommissionDevice`,
@@ -4012,16 +4059,17 @@ var getDeviceMonitorConfig = (0, import_toolkit20.createAsyncThunk)(
4012
4059
  );
4013
4060
  var changeNotificationSetting = (0, import_toolkit20.createAsyncThunk)(
4014
4061
  `${sliceName4}/changeNotificationSetting`,
4015
- ({ enabled, channel = alertChannels.email }, { dispatch }) => {
4016
- 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(
4017
- () => Promise.all([
4018
- dispatch(actions4.changeAlertChannel({ channel, enabled })),
4019
- dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
4020
- ])
4021
- );
4022
- }
4062
+ ({ 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(
4063
+ () => Promise.all([
4064
+ dispatch(actions4.changeAlertChannel({ channel, enabled })),
4065
+ dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
4066
+ ])
4067
+ )
4023
4068
  );
4024
4069
 
4070
+ // src/usersSlice/thunks.ts
4071
+ var import_helptips = require("@northern.tech/common-ui/helptips");
4072
+
4025
4073
  // src/api/users-api.ts
4026
4074
  var import_axios3 = __toESM(require("axios"), 1);
4027
4075
  var Api2 = {
@@ -4055,7 +4103,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
4055
4103
  }
4056
4104
  const twoFAError = is2FABackend ? " and verification code" : "";
4057
4105
  const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
4058
- return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.preformatWithRequestID)(err.response, errorMessage), null, "Copy to clipboard")));
4106
+ return Promise.reject(dispatch(setSnackbar4({ message: (0, import_helpers10.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
4059
4107
  };
4060
4108
  var loginUser = (0, import_toolkit21.createAsyncThunk)(
4061
4109
  `${sliceName8}/loginUser`,
@@ -4079,19 +4127,16 @@ var loginUser = (0, import_toolkit21.createAsyncThunk)(
4079
4127
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
4080
4128
  setSessionInfo({ token, expiresAt });
4081
4129
  cookies3.remove("JWT", { path: "/" });
4082
- return (
4083
- // @ts-ignore
4084
- Promise.resolve(dispatch(getUser(OWN_USER_ID))).unwrap().catch((e) => {
4085
- cleanUp();
4086
- return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.extractErrorMessage)(e))));
4087
- }).then(() => {
4088
- window.sessionStorage.removeItem("pendings-redirect");
4089
- if (window.location.pathname !== "/ui/") {
4090
- window.location.replace("/ui/");
4091
- }
4092
- return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
4093
- })
4094
- );
4130
+ return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
4131
+ cleanUp();
4132
+ return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.extractErrorMessage)(e))));
4133
+ }).then(() => {
4134
+ window.sessionStorage.removeItem("pendings-redirect");
4135
+ if (window.location.pathname !== "/ui/") {
4136
+ window.location.replace("/ui/");
4137
+ }
4138
+ return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
4139
+ });
4095
4140
  })
4096
4141
  );
4097
4142
  var logoutUser = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -4109,6 +4154,7 @@ var switchUserOrganization = (0, import_toolkit21.createAsyncThunk)(`${sliceName
4109
4154
  return Promise.reject();
4110
4155
  }
4111
4156
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
4157
+ window.sessionStorage.setItem("tenantChanged", "true");
4112
4158
  setSessionInfo({ ...getSessionInfo(), token });
4113
4159
  window.location.reload();
4114
4160
  });
@@ -4149,11 +4195,18 @@ var verify2FA = (0, import_toolkit21.createAsyncThunk)(
4149
4195
  );
4150
4196
  var getUserList = (0, import_toolkit21.createAsyncThunk)(
4151
4197
  `${sliceName8}/getUserList`,
4152
- (_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
4153
- const users = res.data.reduce((accu, item) => {
4154
- accu[item.id] = item;
4155
- return accu;
4156
- }, {});
4198
+ (_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
4199
+ const currentUsersById = getUsersById(getState());
4200
+ const users = res.data.reduce(
4201
+ (accu, item) => {
4202
+ accu[item.id] = {
4203
+ ...accu[item.id],
4204
+ ...item
4205
+ };
4206
+ return accu;
4207
+ },
4208
+ { ...currentUsersById }
4209
+ );
4157
4210
  return dispatch(actions8.receivedUserList(users));
4158
4211
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
4159
4212
  );
@@ -4162,9 +4215,7 @@ var getUser = (0, import_toolkit21.createAsyncThunk)(
4162
4215
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
4163
4216
  ({ data: user }) => Promise.all([
4164
4217
  dispatch(actions8.receivedUser(user)),
4165
- // @ts-ignore
4166
4218
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
4167
- // @ts-ignore
4168
4219
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
4169
4220
  user
4170
4221
  ])
@@ -4211,10 +4262,7 @@ var createUser = (0, import_toolkit21.createAsyncThunk)(
4211
4262
  );
4212
4263
  var removeUser = (0, import_toolkit21.createAsyncThunk)(
4213
4264
  `${sliceName8}/removeUser`,
4214
- (userId, { dispatch }) => (
4215
- // @ts-ignore
4216
- general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar4(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
4217
- )
4265
+ (userId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar4(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
4218
4266
  );
4219
4267
  var editUser = (0, import_toolkit21.createAsyncThunk)(
4220
4268
  `${sliceName8}/editUser`,
@@ -4235,7 +4283,7 @@ var enableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4235
4283
  );
4236
4284
  var disableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4237
4285
  `${sliceName8}/disableUser2fa`,
4238
- (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))))
4286
+ (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))]))
4239
4287
  );
4240
4288
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
4241
4289
  (accu, [area, definition]) => {
@@ -4388,7 +4436,6 @@ var getPermissionSets = (0, import_toolkit21.createAsyncThunk)(
4388
4436
  accu[permissionSet.name] = permissionSetObject;
4389
4437
  return accu;
4390
4438
  },
4391
- // @ts-ignore
4392
4439
  { ...getState().users.permissionSetsById }
4393
4440
  );
4394
4441
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -4481,7 +4528,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
4481
4528
  role: {
4482
4529
  ...emptyRole,
4483
4530
  name,
4484
- // @ts-ignore
4485
4531
  description: description ? description : roleState.description,
4486
4532
  uiPermissions: {
4487
4533
  ...emptyUiPermissions,
@@ -4524,10 +4570,7 @@ var editRole = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/editRole`,
4524
4570
  });
4525
4571
  var removeRole = (0, import_toolkit21.createAsyncThunk)(
4526
4572
  `${sliceName8}/removeRole`,
4527
- (roleId, { dispatch }) => (
4528
- // @ts-ignore
4529
- general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar4(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
4530
- )
4573
+ (roleId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar4(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
4531
4574
  );
4532
4575
  var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4533
4576
  `${sliceName8}/getGlobalSettings`,
@@ -4538,7 +4581,6 @@ var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4538
4581
  );
4539
4582
  var saveGlobalSettings = (0, import_toolkit21.createAsyncThunk)(
4540
4583
  `${sliceName8}/saveGlobalSettings`,
4541
- // @ts-ignore
4542
4584
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
4543
4585
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
4544
4586
  return;
@@ -4584,11 +4626,9 @@ var saveUserSettings = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/sav
4584
4626
  const tooltipState = getTooltipsState(getState());
4585
4627
  const updatedSettings = {
4586
4628
  ...userSettings,
4587
- // @ts-ignore
4588
4629
  ...settings,
4589
4630
  onboarding: {
4590
4631
  ...onboardingState,
4591
- // @ts-ignore
4592
4632
  ...settings.onboarding
4593
4633
  },
4594
4634
  tooltips: tooltipState
@@ -4632,10 +4672,7 @@ var generateToken = (0, import_toolkit21.createAsyncThunk)(
4632
4672
  );
4633
4673
  var revokeToken = (0, import_toolkit21.createAsyncThunk)(
4634
4674
  `${sliceName8}/revokeToken`,
4635
- (token, { dispatch }) => (
4636
- // @ts-ignore
4637
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4638
- )
4675
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4639
4676
  );
4640
4677
  var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
4641
4678
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -4644,31 +4681,28 @@ var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/
4644
4681
  }
4645
4682
  return Promise.all(tasks);
4646
4683
  });
4647
- var setAllTooltipsReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {
4648
- const updatedTips = tooltips.reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
4684
+ var setAllTooltipsReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
4685
+ const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
4649
4686
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
4650
4687
  });
4651
4688
  var submitFeedback = (0, import_toolkit21.createAsyncThunk)(
4652
4689
  `${sliceName8}/submitFeedback`,
4653
- // @ts-ignore
4654
- ({ satisfaction, feedback, ...meta }, { dispatch }) => {
4655
- return general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4656
- subject: "feedback submission",
4657
- body: JSON.stringify({ feedback, satisfaction, meta })
4658
- }).then(() => {
4659
- const today = /* @__PURE__ */ new Date();
4660
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4661
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4662
- });
4663
- }
4690
+ ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4691
+ subject: "feedback submission",
4692
+ body: JSON.stringify({ feedback, satisfaction, meta })
4693
+ }).then(() => {
4694
+ const today = /* @__PURE__ */ new Date();
4695
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4696
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4697
+ })
4664
4698
  );
4665
4699
 
4666
- // src/deploymentdevicehook.js
4700
+ // src/deploymentdevicehook.ts
4667
4701
  var import_validator2 = require("validator");
4668
4702
  var useDeploymentDevice = (deploymentName) => {
4669
4703
  const isLoading = (0, import_react.useRef)(false);
4670
- const dispatch = (0, import_react_redux.useDispatch)();
4671
- const devicesById = (0, import_react_redux.useSelector)(getDevicesById);
4704
+ const dispatch = useAppDispatch();
4705
+ const devicesById = (0, import_react_redux2.useSelector)(getDevicesById);
4672
4706
  const hasDeviceInfo = !!devicesById[deploymentName];
4673
4707
  (0, import_react.useEffect)(() => {
4674
4708
  if (isLoading.current) {