@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
@@ -31,7 +31,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var thunks_exports = {};
32
32
  __export(thunks_exports, {
33
33
  advanceOnboarding: () => advanceOnboarding,
34
- applyOnboardingFallbacks: () => applyOnboardingFallbacks,
35
34
  getOnboardingState: () => getOnboardingState2,
36
35
  setOnboardingApproach: () => setOnboardingApproach,
37
36
  setOnboardingCanceled: () => setOnboardingCanceled,
@@ -68,28 +67,28 @@ var PLANS = {
68
67
  id: "os",
69
68
  name: "Basic",
70
69
  offer: true,
71
- price: "$32/month",
70
+ price: "$32 / month",
72
71
  deviceCount: startingDeviceCount.os,
73
- offerprice: "$23/month for first 50 devices",
72
+ offerprice: "$23 / month for first 50 devices",
74
73
  price2: "for first 6 months;\n$29/month thereafter",
75
- features: ["Basic OTA features"]
74
+ features: ["Access to core features of Mender", "Basic support"]
76
75
  },
77
76
  professional: {
78
77
  id: "professional",
79
78
  name: "Professional",
80
79
  offer: true,
81
- price: "$269/month",
80
+ price: "$269 / month",
82
81
  deviceCount: startingDeviceCount.professional,
83
- offerprice: "$200/month for first 50 devices",
82
+ offerprice: "$200 / month for first 50 devices",
84
83
  price2: "for first 6 months;\n$249/month thereafter",
85
- features: ["+ Advanced OTA features", "+ Standard support"]
84
+ features: ["Advanced OTA features", "Higher priority support"]
86
85
  },
87
86
  enterprise: {
88
87
  id: "enterprise",
89
88
  name: "Enterprise",
90
89
  price: "Custom pricing",
91
- deviceCount: "unlimited devices",
92
- features: ["+ Enterprise-grade OTA features", "+ Premium support"]
90
+ deviceCount: "Unlimited devices",
91
+ features: ["All Mender features", "Advanced security features", "SLA-backed support"]
93
92
  }
94
93
  };
95
94
  var ADDONS = {
@@ -560,6 +559,7 @@ var DEVICE_STATES = {
560
559
  rejected: "rejected"
561
560
  };
562
561
  var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
562
+ var REPORT_CHART_SIZE_LIMIT = 6;
563
563
 
564
564
  // src/monitorSlice/constants.ts
565
565
  var alertChannels = { email: "email" };
@@ -641,13 +641,16 @@ var SSO_TYPES = {
641
641
  configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
642
642
  }
643
643
  };
644
- var AUDIT_LOGS_TYPES = [
645
- { title: "Artifact", queryParameter: "object_type", value: "artifact" },
646
- { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
647
- { title: "Device", queryParameter: "object_id", value: "device" },
648
- { title: "User", queryParameter: "object_id", value: "user" }
649
- ];
650
- var SP_AUDIT_LOGS_TYPES = [AUDIT_LOGS_TYPES[3], { title: "Tenant", queryParameter: "object_id", value: "tenant" }];
644
+ var auditlogTypes = {
645
+ artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
646
+ deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
647
+ device: { title: "Device", queryParameter: "object_id", value: "device" },
648
+ user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
649
+ user: { title: "User", queryParameter: "object_id", value: "user" },
650
+ tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
651
+ };
652
+ var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
653
+ var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
651
654
  var emptyWebhook = {
652
655
  description: "",
653
656
  enabled: true,
@@ -780,7 +783,7 @@ var uiPermissionsByArea = {
780
783
  explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
781
784
  key: "auditlog",
782
785
  uiPermissions: [uiPermissionsById.read],
783
- title: "System audit log"
786
+ title: "System Audit Log"
784
787
  },
785
788
  deployments: {
786
789
  endpoints: [
@@ -931,7 +934,7 @@ var serviceProviderRolesById = {
931
934
  },
932
935
  readOnly: {
933
936
  name: "Read access",
934
- value: staticRolesByName.admin,
937
+ value: staticRolesByName.readOnly,
935
938
  description: "This role can see all linked organizations but cannot make any changes",
936
939
  permissions: [],
937
940
  uiPermissions: {
@@ -1185,7 +1188,7 @@ var getGroups = (0, import_toolkit3.createSelector)([getGroupsById], (groupsById
1185
1188
  (accu, [groupname, group]) => {
1186
1189
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
1187
1190
  const groupItem = { ...group, groupId: name, name: groupname };
1188
- if (group.filters.length > 0) {
1191
+ if (group.filters?.length > 0) {
1189
1192
  if (groupname !== UNGROUPED_GROUP.id) {
1190
1193
  accu.dynamic.push(groupItem);
1191
1194
  } else {
@@ -1258,14 +1261,15 @@ var getAuditLogEntry = (0, import_toolkit4.createSelector)([getAuditLog, getAudi
1258
1261
  // src/utils.ts
1259
1262
  var import_helpers3 = require("@northern.tech/utils/helpers");
1260
1263
  var filterProcessors = {
1261
- $gt: (val) => Number(val) || val,
1262
- $gte: (val) => Number(val) || val,
1263
- $lt: (val) => Number(val) || val,
1264
- $lte: (val) => Number(val) || val,
1265
- $in: (val) => ("" + val).split(",").map((i) => i.trim()),
1266
- $nin: (val) => ("" + val).split(",").map((i) => i.trim()),
1267
- $exists: import_helpers3.yes,
1268
- $nexists: () => false
1264
+ [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
1265
+ [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
1266
+ [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
1267
+ [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
1268
+ [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
1269
+ [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1270
+ [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1271
+ [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers3.yes,
1272
+ [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
1269
1273
  };
1270
1274
  var filterAliases = {
1271
1275
  $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
@@ -1309,14 +1313,12 @@ var filtersFilter = (item, index, array) => {
1309
1313
  const firstIndex = array.findIndex((filter) => filterCompare(filter, item));
1310
1314
  return firstIndex === index;
1311
1315
  };
1312
- var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => {
1313
- return ids.slice(0, cutOffSize).reduce((accu, id) => {
1314
- if (id && byId[id]) {
1315
- accu.push({ ...defaultObject, ...byId[id] });
1316
- }
1317
- return accu;
1318
- }, []);
1319
- };
1316
+ var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
1317
+ if (id && byId[id]) {
1318
+ accu.push({ ...defaultObject, ...byId[id] });
1319
+ }
1320
+ return accu;
1321
+ }, []);
1320
1322
  var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
1321
1323
  (accu, [key, value]) => {
1322
1324
  let values;
@@ -1389,8 +1391,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
1389
1391
  var getGlobalSettings = (state) => state.users.globalSettings;
1390
1392
  var getCurrentUserId = (state) => state.users.currentUser;
1391
1393
  var getUsersById = (state) => state.users.byId;
1394
+ var getUsersList = (0, import_toolkit6.createSelector)([getUsersById], (usersById) => Object.values(usersById));
1392
1395
  var getCurrentUser = (0, import_toolkit6.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
1393
1396
  var getUserSettings = (state) => state.users.userSettings;
1397
+ var getSelectedDeviceAttribute = (0, import_toolkit6.createSelector)(
1398
+ [getUserSettings],
1399
+ ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
1400
+ );
1394
1401
  var getIsDarkMode = (0, import_toolkit6.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
1395
1402
  var getShowHelptips = (0, import_toolkit6.createSelector)(
1396
1403
  [getTooltipsById],
@@ -1415,7 +1422,7 @@ var getOfflineThresholdSettings = (0, import_toolkit6.createSelector)([getGlobal
1415
1422
  interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
1416
1423
  intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
1417
1424
  }));
1418
- var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([id, role]) => ({ id, ...role })));
1425
+ var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
1419
1426
 
1420
1427
  // src/commonSelectors.ts
1421
1428
  var getIsEnterprise = (0, import_toolkit7.createSelector)(
@@ -1476,12 +1483,18 @@ var getUserCapabilities = (0, import_toolkit7.createSelector)([getUserRoles, get
1476
1483
  });
1477
1484
  var getTenantCapabilities = (0, import_toolkit7.createSelector)(
1478
1485
  [getFeatures, getOrganization, getIsEnterprise],
1479
- ({ hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
1486
+ ({
1487
+ hasAuditlogs: isAuditlogEnabled,
1488
+ hasDeviceConfig: isDeviceConfigEnabled,
1489
+ hasDeviceConnect: isDeviceConnectEnabled,
1490
+ hasMonitor: isMonitorEnabled,
1491
+ isHosted
1492
+ }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
1480
1493
  const canDelta = isEnterprise || plan === PLANS.professional.id;
1481
1494
  const hasAuditlogs = isAuditlogEnabled && isEnterprise;
1482
- const hasDeviceConfig = isDeviceConfigEnabled && addons.some((addon) => addon.name === "configure" && Boolean(addon.enabled));
1483
- const hasDeviceConnect = isDeviceConnectEnabled && (!isEnterprise || addons.some((addon) => addon.name === "troubleshoot" && Boolean(addon.enabled)));
1484
- const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === "monitor" && Boolean(addon.enabled));
1495
+ const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
1496
+ const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
1497
+ const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
1485
1498
  return {
1486
1499
  canDelta,
1487
1500
  canRetry: canDelta,
@@ -1585,9 +1598,7 @@ var getGroupNames = (0, import_toolkit7.createSelector)([getGroupsById, getUserR
1585
1598
  });
1586
1599
  var getDeviceReportsForUser = (0, import_toolkit7.createSelector)(
1587
1600
  [getUserSettings, getCurrentUser, getGlobalSettings, getDevicesById],
1588
- ({ reports }, { id: currentUserId }, globalSettings, devicesById) => {
1589
- return reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : []);
1590
- }
1601
+ ({ reports }, { id: currentUserId }, globalSettings, devicesById) => reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : [])
1591
1602
  );
1592
1603
  var listTypeDeviceIdMap = {
1593
1604
  deviceList: getListedDevices,
@@ -1611,7 +1622,7 @@ var getAuditlogDevice = (0, import_toolkit7.createSelector)([getAuditLogEntry, g
1611
1622
  var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
1612
1623
  if (service_provider) {
1613
1624
  return roles.reduce((accu, role) => {
1614
- if (rolesById[role.id]) {
1625
+ if (rolesById[role.value]) {
1615
1626
  return accu;
1616
1627
  }
1617
1628
  accu.push(role);
@@ -1619,7 +1630,7 @@ var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, get
1619
1630
  }, Object.values(serviceProviderRolesById));
1620
1631
  }
1621
1632
  return Object.keys(rolesById).reverse().reduce((accu, key) => {
1622
- const index = accu.findIndex(({ id }) => id === key);
1633
+ const index = accu.findIndex(({ value }) => value === key);
1623
1634
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
1624
1635
  return accu;
1625
1636
  }, roles);
@@ -1844,9 +1855,7 @@ var appSlice = (0, import_toolkit8.createSlice)({
1844
1855
  ...action.payload
1845
1856
  };
1846
1857
  },
1847
- setEnvironmentData: (state, action) => {
1848
- return { ...state, ...action.payload };
1849
- }
1858
+ setEnvironmentData: (state, action) => ({ ...state, ...action.payload })
1850
1859
  }
1851
1860
  });
1852
1861
  var actions = appSlice.actions;
@@ -2326,9 +2335,7 @@ var onboardingSlice = (0, import_toolkit13.createSlice)({
2326
2335
  name: sliceName5,
2327
2336
  initialState: initialState5,
2328
2337
  reducers: {
2329
- setOnboardingState: (state, action) => {
2330
- return { ...state, ...action.payload };
2331
- },
2338
+ setOnboardingState: (state, action) => ({ ...state, ...action.payload }),
2332
2339
  setDemoArtifactPort: (state, action) => {
2333
2340
  state.demoArtifactPort = action.payload;
2334
2341
  },
@@ -2687,13 +2694,12 @@ var actions_default = {
2687
2694
  };
2688
2695
 
2689
2696
  // src/store.ts
2697
+ var import_react_redux = require("react-redux");
2690
2698
  var import_helpers7 = require("@northern.tech/utils/helpers");
2691
2699
  var import_toolkit17 = require("@reduxjs/toolkit");
2692
2700
  var { setSnackbar, uploadProgress } = actions_default;
2693
2701
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2694
- var resetEnvironment = () => {
2695
- keys.map((key) => window.sessionStorage.removeItem(key));
2696
- };
2702
+ var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
2697
2703
  resetEnvironment();
2698
2704
  var commonErrorFallback = "Please check your connection.";
2699
2705
  var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
@@ -2719,6 +2725,14 @@ var sessionReducer = (state, action) => {
2719
2725
  }
2720
2726
  return rootReducer(state, action);
2721
2727
  };
2728
+ var rejectionLoggerMiddleware = () => (next) => (action) => {
2729
+ if (action.type.endsWith("/rejected")) {
2730
+ const { error } = action;
2731
+ console.error("Rejection in action:", action);
2732
+ console.error(error.stack);
2733
+ }
2734
+ return next(action);
2735
+ };
2722
2736
  var getConfiguredStore = (options = {}) => {
2723
2737
  const { preloadedState = {}, ...config } = options;
2724
2738
  return (0, import_toolkit17.configureStore)({
@@ -2734,7 +2748,7 @@ var getConfiguredStore = (options = {}) => {
2734
2748
  ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2735
2749
  ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2736
2750
  }
2737
- })
2751
+ }).concat(rejectionLoggerMiddleware)
2738
2752
  });
2739
2753
  };
2740
2754
  var store = getConfiguredStore({
@@ -2743,12 +2757,13 @@ var store = getConfiguredStore({
2743
2757
 
2744
2758
  // src/deploymentsSlice/thunks.ts
2745
2759
  var import_helpers8 = require("@northern.tech/utils/helpers");
2760
+ var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
2746
2761
  var import_toolkit18 = require("@reduxjs/toolkit");
2747
2762
  var import_validator = require("validator");
2748
2763
  var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
2749
2764
  var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
2750
2765
  var deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => group || groups.length === 1 && !(0, import_validator.isUUID)(name) ? groups[0] : filter.name;
2751
- var transformDeployments = (deployments, deploymentsById) => deployments.sort(import_helpers8.startTimeSort).reduce(
2766
+ var transformDeployments = (deployments, deploymentsById) => deployments.sort((0, import_helpers8.customSort)(true, "created")).reduce(
2752
2767
  (accu, item) => {
2753
2768
  const filter = item.filter ?? {};
2754
2769
  let deployment = {
@@ -2799,6 +2814,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceNam
2799
2814
  return Promise.all(tasks);
2800
2815
  });
2801
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
+ };
2802
2837
  var MAX_PREVIOUS_PHASES_COUNT = 5;
2803
2838
  var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
2804
2839
  let request;
@@ -2809,6 +2844,9 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2809
2844
  } else {
2810
2845
  request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
2811
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());
2812
2850
  return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
2813
2851
  const lastslashindex = data.headers.location.lastIndexOf("/");
2814
2852
  const deploymentId = data.headers.location.substring(lastslashindex + 1);
@@ -2823,6 +2861,7 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2823
2861
  dispatch(getSingleDeployment(deploymentId)),
2824
2862
  dispatch(setSnackbar2("Deployment created successfully", TIMEOUTS.fiveSeconds))
2825
2863
  ];
2864
+ trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
2826
2865
  const { canManageUsers } = getUserCapabilities(getState());
2827
2866
  if (canManageUsers) {
2828
2867
  const { phases, retries } = newDeployment;
@@ -3497,7 +3536,7 @@ var getDevicesByStatus2 = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/
3497
3536
  page = defaultPage2,
3498
3537
  perPage = defaultPerPage2,
3499
3538
  sortOptions = [],
3500
- selectedAttributes = []
3539
+ selectedAttributes = getSelectedDeviceAttribute(getState())
3501
3540
  } = options;
3502
3541
  const state = getState();
3503
3542
  const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
@@ -3610,7 +3649,6 @@ var getReportingLimits = (0, import_toolkit19.createAsyncThunk)(
3610
3649
  })
3611
3650
  );
3612
3651
  var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
3613
- var REPORT_CHART_SIZE_LIMIT = 6;
3614
3652
  var getSingleReportData = (reportConfig, groups) => {
3615
3653
  const { attribute, group, software = "" } = reportConfig;
3616
3654
  const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
@@ -3690,6 +3728,13 @@ var getDeviceConnect = (0, import_toolkit19.createAsyncThunk)(
3690
3728
  ({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
3691
3729
  )
3692
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
+ );
3693
3738
  var getSessionDetails = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
3694
3739
  const { start: startUnix, end: endUnix } = (0, import_helpers9.dateRangeToUnix)(startDate, endDate);
3695
3740
  const createdAfter = startDate ? `&created_after=${startUnix}` : "";
@@ -3792,12 +3837,12 @@ var deleteAuthset = (0, import_toolkit19.createAsyncThunk)(
3792
3837
  );
3793
3838
  var preauthDevice = (0, import_toolkit19.createAsyncThunk)(
3794
3839
  `${sliceName3}/preauthDevice`,
3795
- (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) => {
3796
3841
  if (err.response.status === 409) {
3797
- 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");
3798
3843
  }
3799
3844
  return commonErrorHandler(err, "The device could not be added:", dispatch);
3800
- }).then(() => Promise.resolve(dispatch(setSnackbar3("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds))))
3845
+ })
3801
3846
  );
3802
3847
  var decommissionDevice = (0, import_toolkit19.createAsyncThunk)(
3803
3848
  `${sliceName3}/decommissionDevice`,
@@ -4014,16 +4059,17 @@ var getDeviceMonitorConfig = (0, import_toolkit20.createAsyncThunk)(
4014
4059
  );
4015
4060
  var changeNotificationSetting = (0, import_toolkit20.createAsyncThunk)(
4016
4061
  `${sliceName4}/changeNotificationSetting`,
4017
- ({ enabled, channel = alertChannels.email }, { dispatch }) => {
4018
- 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(
4019
- () => Promise.all([
4020
- dispatch(actions4.changeAlertChannel({ channel, enabled })),
4021
- dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
4022
- ])
4023
- );
4024
- }
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
+ )
4025
4068
  );
4026
4069
 
4070
+ // src/usersSlice/thunks.ts
4071
+ var import_helptips = require("@northern.tech/common-ui/helptips");
4072
+
4027
4073
  // src/api/users-api.ts
4028
4074
  var import_axios3 = __toESM(require("axios"), 1);
4029
4075
  var Api2 = {
@@ -4057,7 +4103,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
4057
4103
  }
4058
4104
  const twoFAError = is2FABackend ? " and verification code" : "";
4059
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.`;
4060
- 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" })));
4061
4107
  };
4062
4108
  var loginUser = (0, import_toolkit21.createAsyncThunk)(
4063
4109
  `${sliceName8}/loginUser`,
@@ -4081,19 +4127,16 @@ var loginUser = (0, import_toolkit21.createAsyncThunk)(
4081
4127
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
4082
4128
  setSessionInfo({ token, expiresAt });
4083
4129
  cookies3.remove("JWT", { path: "/" });
4084
- return (
4085
- // @ts-ignore
4086
- Promise.resolve(dispatch(getUser(OWN_USER_ID))).unwrap().catch((e) => {
4087
- cleanUp();
4088
- return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.extractErrorMessage)(e))));
4089
- }).then(() => {
4090
- window.sessionStorage.removeItem("pendings-redirect");
4091
- if (window.location.pathname !== "/ui/") {
4092
- window.location.replace("/ui/");
4093
- }
4094
- return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
4095
- })
4096
- );
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
+ });
4097
4140
  })
4098
4141
  );
4099
4142
  var logoutUser = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -4111,6 +4154,7 @@ var switchUserOrganization = (0, import_toolkit21.createAsyncThunk)(`${sliceName
4111
4154
  return Promise.reject();
4112
4155
  }
4113
4156
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
4157
+ window.sessionStorage.setItem("tenantChanged", "true");
4114
4158
  setSessionInfo({ ...getSessionInfo(), token });
4115
4159
  window.location.reload();
4116
4160
  });
@@ -4151,11 +4195,18 @@ var verify2FA = (0, import_toolkit21.createAsyncThunk)(
4151
4195
  );
4152
4196
  var getUserList = (0, import_toolkit21.createAsyncThunk)(
4153
4197
  `${sliceName8}/getUserList`,
4154
- (_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
4155
- const users = res.data.reduce((accu, item) => {
4156
- accu[item.id] = item;
4157
- return accu;
4158
- }, {});
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
+ );
4159
4210
  return dispatch(actions8.receivedUserList(users));
4160
4211
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
4161
4212
  );
@@ -4164,9 +4215,7 @@ var getUser = (0, import_toolkit21.createAsyncThunk)(
4164
4215
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
4165
4216
  ({ data: user }) => Promise.all([
4166
4217
  dispatch(actions8.receivedUser(user)),
4167
- // @ts-ignore
4168
4218
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
4169
- // @ts-ignore
4170
4219
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
4171
4220
  user
4172
4221
  ])
@@ -4213,10 +4262,7 @@ var createUser = (0, import_toolkit21.createAsyncThunk)(
4213
4262
  );
4214
4263
  var removeUser = (0, import_toolkit21.createAsyncThunk)(
4215
4264
  `${sliceName8}/removeUser`,
4216
- (userId, { dispatch }) => (
4217
- // @ts-ignore
4218
- 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))
4219
- )
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))
4220
4266
  );
4221
4267
  var editUser = (0, import_toolkit21.createAsyncThunk)(
4222
4268
  `${sliceName8}/editUser`,
@@ -4237,7 +4283,7 @@ var enableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4237
4283
  );
4238
4284
  var disableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4239
4285
  `${sliceName8}/disableUser2fa`,
4240
- (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))]))
4241
4287
  );
4242
4288
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
4243
4289
  (accu, [area, definition]) => {
@@ -4390,7 +4436,6 @@ var getPermissionSets = (0, import_toolkit21.createAsyncThunk)(
4390
4436
  accu[permissionSet.name] = permissionSetObject;
4391
4437
  return accu;
4392
4438
  },
4393
- // @ts-ignore
4394
4439
  { ...getState().users.permissionSetsById }
4395
4440
  );
4396
4441
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -4483,7 +4528,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
4483
4528
  role: {
4484
4529
  ...emptyRole,
4485
4530
  name,
4486
- // @ts-ignore
4487
4531
  description: description ? description : roleState.description,
4488
4532
  uiPermissions: {
4489
4533
  ...emptyUiPermissions,
@@ -4526,10 +4570,7 @@ var editRole = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/editRole`,
4526
4570
  });
4527
4571
  var removeRole = (0, import_toolkit21.createAsyncThunk)(
4528
4572
  `${sliceName8}/removeRole`,
4529
- (roleId, { dispatch }) => (
4530
- // @ts-ignore
4531
- 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))
4532
- )
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))
4533
4574
  );
4534
4575
  var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4535
4576
  `${sliceName8}/getGlobalSettings`,
@@ -4540,7 +4581,6 @@ var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4540
4581
  );
4541
4582
  var saveGlobalSettings = (0, import_toolkit21.createAsyncThunk)(
4542
4583
  `${sliceName8}/saveGlobalSettings`,
4543
- // @ts-ignore
4544
4584
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
4545
4585
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
4546
4586
  return;
@@ -4586,11 +4626,9 @@ var saveUserSettings = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/sav
4586
4626
  const tooltipState = getTooltipsState(getState());
4587
4627
  const updatedSettings = {
4588
4628
  ...userSettings,
4589
- // @ts-ignore
4590
4629
  ...settings,
4591
4630
  onboarding: {
4592
4631
  ...onboardingState,
4593
- // @ts-ignore
4594
4632
  ...settings.onboarding
4595
4633
  },
4596
4634
  tooltips: tooltipState
@@ -4634,10 +4672,7 @@ var generateToken = (0, import_toolkit21.createAsyncThunk)(
4634
4672
  );
4635
4673
  var revokeToken = (0, import_toolkit21.createAsyncThunk)(
4636
4674
  `${sliceName8}/revokeToken`,
4637
- (token, { dispatch }) => (
4638
- // @ts-ignore
4639
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4640
- )
4675
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4641
4676
  );
4642
4677
  var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
4643
4678
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -4646,27 +4681,25 @@ var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/
4646
4681
  }
4647
4682
  return Promise.all(tasks);
4648
4683
  });
4649
- var setAllTooltipsReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {
4650
- 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 } }), {});
4651
4686
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
4652
4687
  });
4653
4688
  var submitFeedback = (0, import_toolkit21.createAsyncThunk)(
4654
4689
  `${sliceName8}/submitFeedback`,
4655
- // @ts-ignore
4656
- ({ satisfaction, feedback, ...meta }, { dispatch }) => {
4657
- return general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4658
- subject: "feedback submission",
4659
- body: JSON.stringify({ feedback, satisfaction, meta })
4660
- }).then(() => {
4661
- const today = /* @__PURE__ */ new Date();
4662
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4663
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4664
- });
4665
- }
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
+ })
4666
4698
  );
4667
4699
 
4668
4700
  // src/onboardingSlice/thunks.ts
4669
4701
  var import_helpers11 = require("@northern.tech/utils/helpers");
4702
+ var import_tracking2 = __toESM(require("@northern.tech/utils/tracking"), 1);
4670
4703
  var import_toolkit22 = require("@reduxjs/toolkit");
4671
4704
  var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
4672
4705
  var cookies4 = new import_universal_cookie4.default();
@@ -4748,7 +4781,7 @@ var setOnboardingCanceled = (0, import_toolkit22.createAsyncThunk)(
4748
4781
  Promise.resolve(dispatch(actions5.setShowOnboardingHelp(false))),
4749
4782
  Promise.resolve(dispatch(actions5.setShowDismissOnboardingTipsDialog(false))),
4750
4783
  Promise.resolve(dispatch(actions5.setOnboardingComplete(true)))
4751
- ]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE)))
4784
+ ]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE))).then(() => import_tracking2.default.event({ category: "onboarding", action: onboardingSteps.ONBOARDING_CANCELED }))
4752
4785
  );
4753
4786
  var advanceOnboarding = (0, import_toolkit22.createAsyncThunk)(`${sliceName5}/advanceOnboarding`, (stepId, { dispatch, getState }) => {
4754
4787
  const steps = orderedOnboardingSteps;
@@ -4759,13 +4792,13 @@ var advanceOnboarding = (0, import_toolkit22.createAsyncThunk)(`${sliceName5}/ad
4759
4792
  }
4760
4793
  const madeProgress = steps[stepIndex + 1];
4761
4794
  const state = { ...getOnboardingState(getState()), progress: madeProgress };
4762
- state.complete = stepIndex + 1 >= steps.findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
4795
+ state.complete = stepIndex + 1 >= orderedOnboardingSteps.findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
4796
+ import_tracking2.default.event({ category: "onboarding", action: stepId });
4763
4797
  return Promise.all([dispatch(actions5.setOnboardingProgress(madeProgress)), dispatch(saveUserSettings({ onboarding: state }))]);
4764
4798
  });
4765
4799
  // Annotate the CommonJS export names for ESM import in node:
4766
4800
  0 && (module.exports = {
4767
4801
  advanceOnboarding,
4768
- applyOnboardingFallbacks,
4769
4802
  getOnboardingState,
4770
4803
  setOnboardingApproach,
4771
4804
  setOnboardingCanceled,