@northern.tech/store 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/actions.cjs +20 -17
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.js +8 -8
  4. package/dist/api/general-api.js +2 -2
  5. package/dist/api/types/Tenant.ts +17 -12
  6. package/dist/api/users-api.js +2 -2
  7. package/dist/appSlice/constants.cjs +18 -10
  8. package/dist/appSlice/constants.cjs.map +1 -1
  9. package/dist/appSlice/constants.d.cts +41 -84
  10. package/dist/appSlice/constants.d.ts +41 -84
  11. package/dist/appSlice/constants.js +1 -1
  12. package/dist/appSlice/index.js +2 -2
  13. package/dist/appSlice/thunks.cjs +140 -96
  14. package/dist/appSlice/thunks.cjs.map +1 -1
  15. package/dist/appSlice/thunks.js +19 -19
  16. package/dist/auth.js +2 -2
  17. package/dist/{chunk-Q6M5TTDQ.js → chunk-2CYOM4BK.js} +1 -1
  18. package/dist/chunk-2CYOM4BK.js.map +1 -0
  19. package/dist/{chunk-APHL4JZP.js → chunk-2JHFUQ6B.js} +141 -102
  20. package/dist/chunk-2JHFUQ6B.js.map +1 -0
  21. package/dist/{chunk-YETZPQFR.js → chunk-4XJMRVFI.js} +12 -11
  22. package/dist/chunk-4XJMRVFI.js.map +1 -0
  23. package/dist/{chunk-RX55KAKX.js → chunk-7JKWI5FK.js} +2 -2
  24. package/dist/{chunk-A6CT6GTI.js → chunk-C5NEDBJI.js} +17 -11
  25. package/dist/chunk-C5NEDBJI.js.map +1 -0
  26. package/dist/{chunk-NNADGHSL.js → chunk-DAPAXWA5.js} +8 -8
  27. package/dist/{chunk-ANB5BM5J.js → chunk-DCK2DBOA.js} +27 -20
  28. package/dist/chunk-DCK2DBOA.js.map +1 -0
  29. package/dist/{chunk-E5LEU5PF.js → chunk-HPBE6KYY.js} +2 -2
  30. package/dist/{chunk-2RJIDREZ.js → chunk-LEMVXAYP.js} +25 -16
  31. package/dist/chunk-LEMVXAYP.js.map +1 -0
  32. package/dist/{chunk-NI4SZOCF.js → chunk-LGNOTPUG.js} +9 -9
  33. package/dist/{chunk-MDC7Y3EX.js → chunk-LTKOV26W.js} +22 -20
  34. package/dist/chunk-LTKOV26W.js.map +1 -0
  35. package/dist/{chunk-YTQUNAZP.js → chunk-QRGTG4YB.js} +2 -2
  36. package/dist/{chunk-XTRPX7JZ.js → chunk-TI2RL5P2.js} +2 -2
  37. package/dist/chunk-TI2RL5P2.js.map +1 -0
  38. package/dist/{chunk-YGBFDXXA.js → chunk-TUACATJA.js} +2 -2
  39. package/dist/{chunk-25AKG5HH.js → chunk-UWMYZNUB.js} +19 -11
  40. package/dist/chunk-UWMYZNUB.js.map +1 -0
  41. package/dist/{chunk-UEP36GCI.js → chunk-VMNMD6KF.js} +2 -2
  42. package/dist/{chunk-KAQJH2YL.js → chunk-WXL7PVI5.js} +12 -4
  43. package/dist/chunk-WXL7PVI5.js.map +1 -0
  44. package/dist/{chunk-VOCOFE4I.js → chunk-X7IEZBM4.js} +2 -2
  45. package/dist/{chunk-XXHONFSQ.js → chunk-YDS36ALB.js} +3 -3
  46. package/dist/{chunk-XXHONFSQ.js.map → chunk-YDS36ALB.js.map} +1 -1
  47. package/dist/commonSelectors.cjs +40 -18
  48. package/dist/commonSelectors.cjs.map +1 -1
  49. package/dist/commonSelectors.d.cts +54 -46
  50. package/dist/commonSelectors.d.ts +54 -46
  51. package/dist/commonSelectors.js +9 -9
  52. package/dist/constants.cjs +35 -19
  53. package/dist/constants.cjs.map +1 -1
  54. package/dist/constants.d.cts +3 -3
  55. package/dist/constants.d.ts +3 -3
  56. package/dist/constants.js +6 -2
  57. package/dist/deploymentdevicehook.cjs +146 -101
  58. package/dist/deploymentdevicehook.cjs.map +1 -1
  59. package/dist/deploymentdevicehook.d.cts +1 -1
  60. package/dist/deploymentdevicehook.d.ts +1 -1
  61. package/dist/deploymentdevicehook.js +24 -22
  62. package/dist/deploymentdevicehook.js.map +1 -1
  63. package/dist/deploymentsSlice/constants.cjs +8 -8
  64. package/dist/deploymentsSlice/constants.cjs.map +1 -1
  65. package/dist/deploymentsSlice/constants.js +2 -2
  66. package/dist/deploymentsSlice/index.cjs +8 -8
  67. package/dist/deploymentsSlice/index.cjs.map +1 -1
  68. package/dist/deploymentsSlice/index.js +3 -3
  69. package/dist/deploymentsSlice/selectors.cjs +8 -8
  70. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  71. package/dist/deploymentsSlice/selectors.js +3 -3
  72. package/dist/deploymentsSlice/thunks.cjs +140 -96
  73. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  74. package/dist/deploymentsSlice/thunks.js +19 -19
  75. package/dist/devicesSlice/constants.cjs +11 -8
  76. package/dist/devicesSlice/constants.cjs.map +1 -1
  77. package/dist/devicesSlice/constants.d.cts +2 -1
  78. package/dist/devicesSlice/constants.d.ts +2 -1
  79. package/dist/devicesSlice/constants.js +4 -2
  80. package/dist/devicesSlice/index.cjs +8 -8
  81. package/dist/devicesSlice/index.cjs.map +1 -1
  82. package/dist/devicesSlice/index.js +3 -3
  83. package/dist/devicesSlice/selectors.cjs +9 -9
  84. package/dist/devicesSlice/selectors.cjs.map +1 -1
  85. package/dist/devicesSlice/selectors.js +3 -3
  86. package/dist/devicesSlice/thunks.cjs +142 -96
  87. package/dist/devicesSlice/thunks.cjs.map +1 -1
  88. package/dist/devicesSlice/thunks.d.cts +12 -2
  89. package/dist/devicesSlice/thunks.d.ts +12 -2
  90. package/dist/devicesSlice/thunks.js +21 -19
  91. package/dist/flag-eu-5477R2P4.svg +130 -0
  92. package/dist/flag-us-HNQAF66I.svg +63 -0
  93. package/dist/monitorSlice/constants.cjs +8 -8
  94. package/dist/monitorSlice/constants.cjs.map +1 -1
  95. package/dist/monitorSlice/constants.js +2 -2
  96. package/dist/monitorSlice/index.cjs +8 -8
  97. package/dist/monitorSlice/index.cjs.map +1 -1
  98. package/dist/monitorSlice/index.js +3 -3
  99. package/dist/monitorSlice/thunks.cjs +59 -37
  100. package/dist/monitorSlice/thunks.cjs.map +1 -1
  101. package/dist/monitorSlice/thunks.js +17 -17
  102. package/dist/onboardingSlice/thunks.cjs +149 -102
  103. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  104. package/dist/onboardingSlice/thunks.d.cts +1 -32
  105. package/dist/onboardingSlice/thunks.d.ts +1 -32
  106. package/dist/onboardingSlice/thunks.js +19 -19
  107. package/dist/organizationSlice/constants.cjs +22 -17
  108. package/dist/organizationSlice/constants.cjs.map +1 -1
  109. package/dist/organizationSlice/constants.d.cts +33 -1
  110. package/dist/organizationSlice/constants.d.ts +33 -1
  111. package/dist/organizationSlice/constants.js +4 -2
  112. package/dist/organizationSlice/index.cjs +18 -15
  113. package/dist/organizationSlice/index.cjs.map +1 -1
  114. package/dist/organizationSlice/index.d.cts +26 -1012
  115. package/dist/organizationSlice/index.d.ts +26 -1012
  116. package/dist/organizationSlice/index.js +3 -3
  117. package/dist/organizationSlice/selectors.cjs.map +1 -1
  118. package/dist/organizationSlice/selectors.d.cts +9 -1
  119. package/dist/organizationSlice/selectors.d.ts +9 -1
  120. package/dist/organizationSlice/selectors.js +3 -3
  121. package/dist/organizationSlice/thunks.cjs +1608 -1540
  122. package/dist/organizationSlice/thunks.cjs.map +1 -1
  123. package/dist/organizationSlice/thunks.d.cts +61 -36
  124. package/dist/organizationSlice/thunks.d.ts +61 -36
  125. package/dist/organizationSlice/thunks.js +19 -19
  126. package/dist/organizationSlice/types.cjs +19 -0
  127. package/dist/organizationSlice/types.cjs.map +1 -0
  128. package/dist/organizationSlice/types.d.cts +114 -0
  129. package/dist/organizationSlice/types.d.ts +114 -0
  130. package/dist/organizationSlice/types.js +1 -0
  131. package/dist/organizationSlice/types.js.map +1 -0
  132. package/dist/releasesSlice/index.js +2 -2
  133. package/dist/releasesSlice/selectors.cjs +11 -0
  134. package/dist/releasesSlice/selectors.cjs.map +1 -1
  135. package/dist/releasesSlice/selectors.js +4 -4
  136. package/dist/releasesSlice/thunks.cjs +73 -49
  137. package/dist/releasesSlice/thunks.cjs.map +1 -1
  138. package/dist/releasesSlice/thunks.d.cts +1 -4
  139. package/dist/releasesSlice/thunks.d.ts +1 -4
  140. package/dist/releasesSlice/thunks.js +17 -17
  141. package/dist/selectors.cjs +46 -18
  142. package/dist/selectors.cjs.map +1 -1
  143. package/dist/selectors.d.cts +9 -1
  144. package/dist/selectors.d.ts +9 -1
  145. package/dist/selectors.js +36 -30
  146. package/dist/store.cjs +36 -23
  147. package/dist/store.cjs.map +1 -1
  148. package/dist/store.d.cts +12 -231
  149. package/dist/store.d.ts +12 -231
  150. package/dist/store.js +13 -11
  151. package/dist/storehooks.cjs +222 -141
  152. package/dist/storehooks.cjs.map +1 -1
  153. package/dist/storehooks.js +36 -24
  154. package/dist/storehooks.js.map +1 -1
  155. package/dist/thunks.cjs +199 -126
  156. package/dist/thunks.cjs.map +1 -1
  157. package/dist/thunks.d.cts +5 -1
  158. package/dist/thunks.d.ts +5 -1
  159. package/dist/thunks.js +21 -19
  160. package/dist/usersSlice/constants.cjs +10 -10
  161. package/dist/usersSlice/constants.cjs.map +1 -1
  162. package/dist/usersSlice/constants.js +2 -2
  163. package/dist/usersSlice/index.cjs +10 -10
  164. package/dist/usersSlice/index.cjs.map +1 -1
  165. package/dist/usersSlice/index.js +3 -3
  166. package/dist/usersSlice/selectors.cjs +35 -13
  167. package/dist/usersSlice/selectors.cjs.map +1 -1
  168. package/dist/usersSlice/selectors.d.cts +44 -1
  169. package/dist/usersSlice/selectors.d.ts +44 -1
  170. package/dist/usersSlice/selectors.js +12 -6
  171. package/dist/usersSlice/thunks.cjs +138 -96
  172. package/dist/usersSlice/thunks.cjs.map +1 -1
  173. package/dist/usersSlice/thunks.d.cts +10 -9
  174. package/dist/usersSlice/thunks.d.ts +10 -9
  175. package/dist/usersSlice/thunks.js +19 -19
  176. package/dist/utils.cjs +17 -16
  177. package/dist/utils.cjs.map +1 -1
  178. package/dist/utils.js +3 -3
  179. package/package.json +7 -7
  180. package/dist/chunk-25AKG5HH.js.map +0 -1
  181. package/dist/chunk-2RJIDREZ.js.map +0 -1
  182. package/dist/chunk-A6CT6GTI.js.map +0 -1
  183. package/dist/chunk-ANB5BM5J.js.map +0 -1
  184. package/dist/chunk-APHL4JZP.js.map +0 -1
  185. package/dist/chunk-KAQJH2YL.js.map +0 -1
  186. package/dist/chunk-MDC7Y3EX.js.map +0 -1
  187. package/dist/chunk-Q6M5TTDQ.js.map +0 -1
  188. package/dist/chunk-XTRPX7JZ.js.map +0 -1
  189. package/dist/chunk-YETZPQFR.js.map +0 -1
  190. /package/dist/{chunk-RX55KAKX.js.map → chunk-7JKWI5FK.js.map} +0 -0
  191. /package/dist/{chunk-NNADGHSL.js.map → chunk-DAPAXWA5.js.map} +0 -0
  192. /package/dist/{chunk-E5LEU5PF.js.map → chunk-HPBE6KYY.js.map} +0 -0
  193. /package/dist/{chunk-NI4SZOCF.js.map → chunk-LGNOTPUG.js.map} +0 -0
  194. /package/dist/{chunk-YTQUNAZP.js.map → chunk-QRGTG4YB.js.map} +0 -0
  195. /package/dist/{chunk-YGBFDXXA.js.map → chunk-TUACATJA.js.map} +0 -0
  196. /package/dist/{chunk-UEP36GCI.js.map → chunk-VMNMD6KF.js.map} +0 -0
  197. /package/dist/{chunk-VOCOFE4I.js.map → chunk-X7IEZBM4.js.map} +0 -0
@@ -4,34 +4,34 @@ import {
4
4
  getDeviceMonitorConfig,
5
5
  getIssueCountsByType,
6
6
  getLatestDeviceAlerts
7
- } from "../chunk-NI4SZOCF.js";
7
+ } from "../chunk-LGNOTPUG.js";
8
8
  import "../chunk-YT73QWCN.js";
9
9
  import "../chunk-NMAXZ3ZY.js";
10
- import "../chunk-ANB5BM5J.js";
11
- import "../chunk-KAQJH2YL.js";
12
- import "../chunk-VOCOFE4I.js";
13
- import "../chunk-RX55KAKX.js";
10
+ import "../chunk-DCK2DBOA.js";
11
+ import "../chunk-X7IEZBM4.js";
12
+ import "../chunk-WXL7PVI5.js";
13
+ import "../chunk-2CYOM4BK.js";
14
+ import "../chunk-7JKWI5FK.js";
14
15
  import "../chunk-JIS4PA3R.js";
15
- import "../chunk-Q6M5TTDQ.js";
16
- import "../chunk-XXHONFSQ.js";
16
+ import "../chunk-YDS36ALB.js";
17
17
  import "../chunk-YO22XLHI.js";
18
- import "../chunk-YETZPQFR.js";
18
+ import "../chunk-4XJMRVFI.js";
19
19
  import "../chunk-LIJIIRON.js";
20
- import "../chunk-2RJIDREZ.js";
21
- import "../chunk-NNADGHSL.js";
22
- import "../chunk-YGBFDXXA.js";
20
+ import "../chunk-LEMVXAYP.js";
21
+ import "../chunk-DAPAXWA5.js";
22
+ import "../chunk-TUACATJA.js";
23
+ import "../chunk-TI2RL5P2.js";
23
24
  import "../chunk-CYV6632F.js";
24
- import "../chunk-E5LEU5PF.js";
25
+ import "../chunk-HPBE6KYY.js";
25
26
  import "../chunk-FGKMJS3B.js";
26
- import "../chunk-XTRPX7JZ.js";
27
- import "../chunk-YTQUNAZP.js";
28
- import "../chunk-UEP36GCI.js";
27
+ import "../chunk-QRGTG4YB.js";
28
+ import "../chunk-VMNMD6KF.js";
29
29
  import "../chunk-7PVGDMNM.js";
30
30
  import "../chunk-AMGWP7A4.js";
31
- import "../chunk-A6CT6GTI.js";
31
+ import "../chunk-C5NEDBJI.js";
32
32
  import "../chunk-CK6YE6AN.js";
33
33
  import "../chunk-MRCFLG45.js";
34
- import "../chunk-25AKG5HH.js";
34
+ import "../chunk-UWMYZNUB.js";
35
35
  import "../chunk-4B3IMP4I.js";
36
36
  export {
37
37
  changeNotificationSetting,
@@ -68,28 +68,28 @@ var PLANS = {
68
68
  id: "os",
69
69
  name: "Basic",
70
70
  offer: true,
71
- price: "$32/month",
71
+ price: "$32 / month",
72
72
  deviceCount: startingDeviceCount.os,
73
- offerprice: "$23/month for first 50 devices",
73
+ offerprice: "$23 / month for first 50 devices",
74
74
  price2: "for first 6 months;\n$29/month thereafter",
75
- features: ["Basic OTA features"]
75
+ features: ["Access to core features of Mender", "Basic support"]
76
76
  },
77
77
  professional: {
78
78
  id: "professional",
79
79
  name: "Professional",
80
80
  offer: true,
81
- price: "$269/month",
81
+ price: "$269 / month",
82
82
  deviceCount: startingDeviceCount.professional,
83
- offerprice: "$200/month for first 50 devices",
83
+ offerprice: "$200 / month for first 50 devices",
84
84
  price2: "for first 6 months;\n$249/month thereafter",
85
- features: ["+ Advanced OTA features", "+ Standard support"]
85
+ features: ["Advanced OTA features", "Higher priority support"]
86
86
  },
87
87
  enterprise: {
88
88
  id: "enterprise",
89
89
  name: "Enterprise",
90
90
  price: "Custom pricing",
91
- deviceCount: "unlimited devices",
92
- features: ["+ Enterprise-grade OTA features", "+ Premium support"]
91
+ deviceCount: "Unlimited devices",
92
+ features: ["All Mender features", "Advanced security features", "SLA-backed support"]
93
93
  }
94
94
  };
95
95
  var ADDONS = {
@@ -560,6 +560,7 @@ var DEVICE_STATES = {
560
560
  rejected: "rejected"
561
561
  };
562
562
  var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
563
+ var REPORT_CHART_SIZE_LIMIT = 6;
563
564
 
564
565
  // src/monitorSlice/constants.ts
565
566
  var alertChannels = { email: "email" };
@@ -641,13 +642,16 @@ var SSO_TYPES = {
641
642
  configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
642
643
  }
643
644
  };
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" }];
645
+ var auditlogTypes = {
646
+ artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
647
+ deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
648
+ device: { title: "Device", queryParameter: "object_id", value: "device" },
649
+ user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
650
+ user: { title: "User", queryParameter: "object_id", value: "user" },
651
+ tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
652
+ };
653
+ var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
654
+ var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
651
655
  var emptyWebhook = {
652
656
  description: "",
653
657
  enabled: true,
@@ -780,7 +784,7 @@ var uiPermissionsByArea = {
780
784
  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
785
  key: "auditlog",
782
786
  uiPermissions: [uiPermissionsById.read],
783
- title: "System audit log"
787
+ title: "System Audit Log"
784
788
  },
785
789
  deployments: {
786
790
  endpoints: [
@@ -931,7 +935,7 @@ var serviceProviderRolesById = {
931
935
  },
932
936
  readOnly: {
933
937
  name: "Read access",
934
- value: staticRolesByName.admin,
938
+ value: staticRolesByName.readOnly,
935
939
  description: "This role can see all linked organizations but cannot make any changes",
936
940
  permissions: [],
937
941
  uiPermissions: {
@@ -1185,7 +1189,7 @@ var getGroups = (0, import_toolkit3.createSelector)([getGroupsById], (groupsById
1185
1189
  (accu, [groupname, group]) => {
1186
1190
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
1187
1191
  const groupItem = { ...group, groupId: name, name: groupname };
1188
- if (group.filters.length > 0) {
1192
+ if (group.filters?.length > 0) {
1189
1193
  if (groupname !== UNGROUPED_GROUP.id) {
1190
1194
  accu.dynamic.push(groupItem);
1191
1195
  } else {
@@ -1258,14 +1262,15 @@ var getAuditLogEntry = (0, import_toolkit4.createSelector)([getAuditLog, getAudi
1258
1262
  // src/utils.ts
1259
1263
  var import_helpers3 = require("@northern.tech/utils/helpers");
1260
1264
  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
1265
+ [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
1266
+ [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
1267
+ [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
1268
+ [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
1269
+ [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
1270
+ [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1271
+ [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1272
+ [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers3.yes,
1273
+ [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
1269
1274
  };
1270
1275
  var filterAliases = {
1271
1276
  $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
@@ -1389,8 +1394,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
1389
1394
  var getGlobalSettings = (state) => state.users.globalSettings;
1390
1395
  var getCurrentUserId = (state) => state.users.currentUser;
1391
1396
  var getUsersById = (state) => state.users.byId;
1397
+ var getUsersList = (0, import_toolkit6.createSelector)([getUsersById], (usersById) => Object.values(usersById));
1392
1398
  var getCurrentUser = (0, import_toolkit6.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
1393
1399
  var getUserSettings = (state) => state.users.userSettings;
1400
+ var getSelectedDeviceAttribute = (0, import_toolkit6.createSelector)(
1401
+ [getUserSettings],
1402
+ ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
1403
+ );
1394
1404
  var getIsDarkMode = (0, import_toolkit6.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
1395
1405
  var getShowHelptips = (0, import_toolkit6.createSelector)(
1396
1406
  [getTooltipsById],
@@ -1415,7 +1425,7 @@ var getOfflineThresholdSettings = (0, import_toolkit6.createSelector)([getGlobal
1415
1425
  interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
1416
1426
  intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
1417
1427
  }));
1418
- var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([id, role]) => ({ id, ...role })));
1428
+ var getRolesList = (0, import_toolkit6.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
1419
1429
 
1420
1430
  // src/commonSelectors.ts
1421
1431
  var getIsEnterprise = (0, import_toolkit7.createSelector)(
@@ -1476,12 +1486,18 @@ var getUserCapabilities = (0, import_toolkit7.createSelector)([getUserRoles, get
1476
1486
  });
1477
1487
  var getTenantCapabilities = (0, import_toolkit7.createSelector)(
1478
1488
  [getFeatures, getOrganization, getIsEnterprise],
1479
- ({ hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
1489
+ ({
1490
+ hasAuditlogs: isAuditlogEnabled,
1491
+ hasDeviceConfig: isDeviceConfigEnabled,
1492
+ hasDeviceConnect: isDeviceConnectEnabled,
1493
+ hasMonitor: isMonitorEnabled,
1494
+ isHosted
1495
+ }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
1480
1496
  const canDelta = isEnterprise || plan === PLANS.professional.id;
1481
1497
  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));
1498
+ const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
1499
+ const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
1500
+ const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
1485
1501
  return {
1486
1502
  canDelta,
1487
1503
  canRetry: canDelta,
@@ -1611,7 +1627,7 @@ var getAuditlogDevice = (0, import_toolkit7.createSelector)([getAuditLogEntry, g
1611
1627
  var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
1612
1628
  if (service_provider) {
1613
1629
  return roles.reduce((accu, role) => {
1614
- if (rolesById[role.id]) {
1630
+ if (rolesById[role.value]) {
1615
1631
  return accu;
1616
1632
  }
1617
1633
  accu.push(role);
@@ -1619,7 +1635,7 @@ var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, get
1619
1635
  }, Object.values(serviceProviderRolesById));
1620
1636
  }
1621
1637
  return Object.keys(rolesById).reverse().reduce((accu, key) => {
1622
- const index = accu.findIndex(({ id }) => id === key);
1638
+ const index = accu.findIndex(({ value }) => value === key);
1623
1639
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
1624
1640
  return accu;
1625
1641
  }, roles);
@@ -2687,13 +2703,12 @@ var actions_default = {
2687
2703
  };
2688
2704
 
2689
2705
  // src/store.ts
2706
+ var import_react_redux = require("react-redux");
2690
2707
  var import_helpers7 = require("@northern.tech/utils/helpers");
2691
2708
  var import_toolkit17 = require("@reduxjs/toolkit");
2692
2709
  var { setSnackbar, uploadProgress } = actions_default;
2693
2710
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2694
- var resetEnvironment = () => {
2695
- keys.map((key) => window.sessionStorage.removeItem(key));
2696
- };
2711
+ var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
2697
2712
  resetEnvironment();
2698
2713
  var commonErrorFallback = "Please check your connection.";
2699
2714
  var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
@@ -2719,6 +2734,14 @@ var sessionReducer = (state, action) => {
2719
2734
  }
2720
2735
  return rootReducer(state, action);
2721
2736
  };
2737
+ var rejectionLoggerMiddleware = () => (next) => (action) => {
2738
+ if (action.type.endsWith("/rejected")) {
2739
+ const { error } = action;
2740
+ console.error("Rejection in action:", action);
2741
+ console.error(error.stack);
2742
+ }
2743
+ return next(action);
2744
+ };
2722
2745
  var getConfiguredStore = (options = {}) => {
2723
2746
  const { preloadedState = {}, ...config } = options;
2724
2747
  return (0, import_toolkit17.configureStore)({
@@ -2734,7 +2757,7 @@ var getConfiguredStore = (options = {}) => {
2734
2757
  ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2735
2758
  ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2736
2759
  }
2737
- })
2760
+ }).concat(rejectionLoggerMiddleware)
2738
2761
  });
2739
2762
  };
2740
2763
  var store = getConfiguredStore({
@@ -2743,6 +2766,7 @@ var store = getConfiguredStore({
2743
2766
 
2744
2767
  // src/deploymentsSlice/thunks.ts
2745
2768
  var import_helpers8 = require("@northern.tech/utils/helpers");
2769
+ var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
2746
2770
  var import_toolkit18 = require("@reduxjs/toolkit");
2747
2771
  var import_validator = require("validator");
2748
2772
  var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
@@ -2799,6 +2823,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceNam
2799
2823
  return Promise.all(tasks);
2800
2824
  });
2801
2825
  });
2826
+ var isWithinFirstMonth = (expirationDate) => {
2827
+ if (!expirationDate) {
2828
+ return false;
2829
+ }
2830
+ const endOfFirstMonth = new Date(expirationDate);
2831
+ endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
2832
+ return endOfFirstMonth > /* @__PURE__ */ new Date();
2833
+ };
2834
+ var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
2835
+ import_tracking.default.event({ category: "deployments", action: "create" });
2836
+ if (!totalDeploymentCount) {
2837
+ if (!hasDeployments) {
2838
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
2839
+ if (isWithinFirstMonth(trial_expiration)) {
2840
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
2841
+ }
2842
+ }
2843
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
2844
+ }
2845
+ };
2802
2846
  var MAX_PREVIOUS_PHASES_COUNT = 5;
2803
2847
  var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
2804
2848
  let request;
@@ -2809,6 +2853,9 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2809
2853
  } else {
2810
2854
  request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
2811
2855
  }
2856
+ const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
2857
+ const { hasDeployments } = getGlobalSettings(getState());
2858
+ const { trial_expiration } = getOrganization(getState());
2812
2859
  return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
2813
2860
  const lastslashindex = data.headers.location.lastIndexOf("/");
2814
2861
  const deploymentId = data.headers.location.substring(lastslashindex + 1);
@@ -2823,6 +2870,7 @@ var createDeployment = (0, import_toolkit18.createAsyncThunk)(`${sliceName2}/cre
2823
2870
  dispatch(getSingleDeployment(deploymentId)),
2824
2871
  dispatch(setSnackbar2("Deployment created successfully", TIMEOUTS.fiveSeconds))
2825
2872
  ];
2873
+ trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
2826
2874
  const { canManageUsers } = getUserCapabilities(getState());
2827
2875
  if (canManageUsers) {
2828
2876
  const { phases, retries } = newDeployment;
@@ -3497,7 +3545,7 @@ var getDevicesByStatus2 = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/
3497
3545
  page = defaultPage2,
3498
3546
  perPage = defaultPerPage2,
3499
3547
  sortOptions = [],
3500
- selectedAttributes = []
3548
+ selectedAttributes = getSelectedDeviceAttribute(getState())
3501
3549
  } = options;
3502
3550
  const state = getState();
3503
3551
  const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
@@ -3610,7 +3658,6 @@ var getReportingLimits = (0, import_toolkit19.createAsyncThunk)(
3610
3658
  })
3611
3659
  );
3612
3660
  var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
3613
- var REPORT_CHART_SIZE_LIMIT = 6;
3614
3661
  var getSingleReportData = (reportConfig, groups) => {
3615
3662
  const { attribute, group, software = "" } = reportConfig;
3616
3663
  const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
@@ -3690,9 +3737,17 @@ var getDeviceConnect = (0, import_toolkit19.createAsyncThunk)(
3690
3737
  ({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
3691
3738
  )
3692
3739
  );
3740
+ var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
3741
+ var triggerDeviceUpdate = (0, import_toolkit19.createAsyncThunk)(
3742
+ `${sliceName3}/triggerDeviceUpdate`,
3743
+ ({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
3744
+ () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
3745
+ )
3746
+ );
3693
3747
  var getSessionDetails = (0, import_toolkit19.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
3694
- const createdAfter = startDate ? `&created_after=${Math.round(Date.parse(startDate) / 1e3)}` : "";
3695
- const createdBefore = endDate ? `&created_before=${Math.round(Date.parse(endDate) / 1e3)}` : "";
3748
+ const { start: startUnix, end: endUnix } = (0, import_helpers9.dateRangeToUnix)(startDate, endDate);
3749
+ const createdAfter = startDate ? `&created_after=${startUnix}` : "";
3750
+ const createdBefore = endDate ? `&created_before=${endUnix}` : "";
3696
3751
  const objectSearch = `&object_id=${deviceId}`;
3697
3752
  return general_api_default.get(`${auditLogsApiUrl}/logs?per_page=500${createdAfter}${createdBefore}&actor_id=${userId}${objectSearch}`).then(
3698
3753
  ({ data: auditLogEntries }) => {
@@ -3791,12 +3846,12 @@ var deleteAuthset = (0, import_toolkit19.createAsyncThunk)(
3791
3846
  );
3792
3847
  var preauthDevice = (0, import_toolkit19.createAsyncThunk)(
3793
3848
  `${sliceName3}/preauthDevice`,
3794
- (authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
3849
+ (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) => {
3795
3850
  if (err.response.status === 409) {
3796
- return Promise.reject("A device with a matching identity data set already exists");
3851
+ return rejectWithValue("A device with a matching identity data set already exists");
3797
3852
  }
3798
3853
  return commonErrorHandler(err, "The device could not be added:", dispatch);
3799
- }).then(() => Promise.resolve(dispatch(setSnackbar3("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds))))
3854
+ })
3800
3855
  );
3801
3856
  var decommissionDevice = (0, import_toolkit19.createAsyncThunk)(
3802
3857
  `${sliceName3}/decommissionDevice`,
@@ -4023,6 +4078,9 @@ var changeNotificationSetting = (0, import_toolkit20.createAsyncThunk)(
4023
4078
  }
4024
4079
  );
4025
4080
 
4081
+ // src/usersSlice/thunks.ts
4082
+ var import_helptips = require("@northern.tech/common-ui/helptips");
4083
+
4026
4084
  // src/api/users-api.ts
4027
4085
  var import_axios3 = __toESM(require("axios"), 1);
4028
4086
  var Api2 = {
@@ -4056,7 +4114,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
4056
4114
  }
4057
4115
  const twoFAError = is2FABackend ? " and verification code" : "";
4058
4116
  const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
4059
- return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.preformatWithRequestID)(err.response, errorMessage), null, "Copy to clipboard")));
4117
+ return Promise.reject(dispatch(setSnackbar4({ message: (0, import_helpers10.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
4060
4118
  };
4061
4119
  var loginUser = (0, import_toolkit21.createAsyncThunk)(
4062
4120
  `${sliceName8}/loginUser`,
@@ -4080,19 +4138,16 @@ var loginUser = (0, import_toolkit21.createAsyncThunk)(
4080
4138
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
4081
4139
  setSessionInfo({ token, expiresAt });
4082
4140
  cookies3.remove("JWT", { path: "/" });
4083
- return (
4084
- // @ts-ignore
4085
- Promise.resolve(dispatch(getUser(OWN_USER_ID))).unwrap().catch((e) => {
4086
- cleanUp();
4087
- return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.extractErrorMessage)(e))));
4088
- }).then(() => {
4089
- window.sessionStorage.removeItem("pendings-redirect");
4090
- if (window.location.pathname !== "/ui/") {
4091
- window.location.replace("/ui/");
4092
- }
4093
- return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
4094
- })
4095
- );
4141
+ return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
4142
+ cleanUp();
4143
+ return Promise.reject(dispatch(setSnackbar4((0, import_helpers10.extractErrorMessage)(e))));
4144
+ }).then(() => {
4145
+ window.sessionStorage.removeItem("pendings-redirect");
4146
+ if (window.location.pathname !== "/ui/") {
4147
+ window.location.replace("/ui/");
4148
+ }
4149
+ return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
4150
+ });
4096
4151
  })
4097
4152
  );
4098
4153
  var logoutUser = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -4110,6 +4165,7 @@ var switchUserOrganization = (0, import_toolkit21.createAsyncThunk)(`${sliceName
4110
4165
  return Promise.reject();
4111
4166
  }
4112
4167
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
4168
+ window.sessionStorage.setItem("tenantChanged", "true");
4113
4169
  setSessionInfo({ ...getSessionInfo(), token });
4114
4170
  window.location.reload();
4115
4171
  });
@@ -4150,11 +4206,18 @@ var verify2FA = (0, import_toolkit21.createAsyncThunk)(
4150
4206
  );
4151
4207
  var getUserList = (0, import_toolkit21.createAsyncThunk)(
4152
4208
  `${sliceName8}/getUserList`,
4153
- (_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
4154
- const users = res.data.reduce((accu, item) => {
4155
- accu[item.id] = item;
4156
- return accu;
4157
- }, {});
4209
+ (_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
4210
+ const currentUsersById = getUsersById(getState());
4211
+ const users = res.data.reduce(
4212
+ (accu, item) => {
4213
+ accu[item.id] = {
4214
+ ...accu[item.id],
4215
+ ...item
4216
+ };
4217
+ return accu;
4218
+ },
4219
+ { ...currentUsersById }
4220
+ );
4158
4221
  return dispatch(actions8.receivedUserList(users));
4159
4222
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
4160
4223
  );
@@ -4163,9 +4226,7 @@ var getUser = (0, import_toolkit21.createAsyncThunk)(
4163
4226
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
4164
4227
  ({ data: user }) => Promise.all([
4165
4228
  dispatch(actions8.receivedUser(user)),
4166
- // @ts-ignore
4167
4229
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
4168
- // @ts-ignore
4169
4230
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
4170
4231
  user
4171
4232
  ])
@@ -4212,10 +4273,7 @@ var createUser = (0, import_toolkit21.createAsyncThunk)(
4212
4273
  );
4213
4274
  var removeUser = (0, import_toolkit21.createAsyncThunk)(
4214
4275
  `${sliceName8}/removeUser`,
4215
- (userId, { dispatch }) => (
4216
- // @ts-ignore
4217
- 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
- )
4276
+ (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))
4219
4277
  );
4220
4278
  var editUser = (0, import_toolkit21.createAsyncThunk)(
4221
4279
  `${sliceName8}/editUser`,
@@ -4236,7 +4294,7 @@ var enableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4236
4294
  );
4237
4295
  var disableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4238
4296
  `${sliceName8}/disableUser2fa`,
4239
- (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))))
4297
+ (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))]))
4240
4298
  );
4241
4299
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
4242
4300
  (accu, [area, definition]) => {
@@ -4389,7 +4447,6 @@ var getPermissionSets = (0, import_toolkit21.createAsyncThunk)(
4389
4447
  accu[permissionSet.name] = permissionSetObject;
4390
4448
  return accu;
4391
4449
  },
4392
- // @ts-ignore
4393
4450
  { ...getState().users.permissionSetsById }
4394
4451
  );
4395
4452
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -4482,7 +4539,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
4482
4539
  role: {
4483
4540
  ...emptyRole,
4484
4541
  name,
4485
- // @ts-ignore
4486
4542
  description: description ? description : roleState.description,
4487
4543
  uiPermissions: {
4488
4544
  ...emptyUiPermissions,
@@ -4525,10 +4581,7 @@ var editRole = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/editRole`,
4525
4581
  });
4526
4582
  var removeRole = (0, import_toolkit21.createAsyncThunk)(
4527
4583
  `${sliceName8}/removeRole`,
4528
- (roleId, { dispatch }) => (
4529
- // @ts-ignore
4530
- 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
- )
4584
+ (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))
4532
4585
  );
4533
4586
  var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4534
4587
  `${sliceName8}/getGlobalSettings`,
@@ -4539,7 +4592,6 @@ var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4539
4592
  );
4540
4593
  var saveGlobalSettings = (0, import_toolkit21.createAsyncThunk)(
4541
4594
  `${sliceName8}/saveGlobalSettings`,
4542
- // @ts-ignore
4543
4595
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
4544
4596
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
4545
4597
  return;
@@ -4585,11 +4637,9 @@ var saveUserSettings = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/sav
4585
4637
  const tooltipState = getTooltipsState(getState());
4586
4638
  const updatedSettings = {
4587
4639
  ...userSettings,
4588
- // @ts-ignore
4589
4640
  ...settings,
4590
4641
  onboarding: {
4591
4642
  ...onboardingState,
4592
- // @ts-ignore
4593
4643
  ...settings.onboarding
4594
4644
  },
4595
4645
  tooltips: tooltipState
@@ -4633,10 +4683,7 @@ var generateToken = (0, import_toolkit21.createAsyncThunk)(
4633
4683
  );
4634
4684
  var revokeToken = (0, import_toolkit21.createAsyncThunk)(
4635
4685
  `${sliceName8}/revokeToken`,
4636
- (token, { dispatch }) => (
4637
- // @ts-ignore
4638
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4639
- )
4686
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4640
4687
  );
4641
4688
  var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
4642
4689
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -4645,39 +4692,38 @@ var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/
4645
4692
  }
4646
4693
  return Promise.all(tasks);
4647
4694
  });
4648
- var setAllTooltipsReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {
4649
- const updatedTips = tooltips.reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
4695
+ var setAllTooltipsReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
4696
+ const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
4650
4697
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
4651
4698
  });
4652
4699
  var submitFeedback = (0, import_toolkit21.createAsyncThunk)(
4653
4700
  `${sliceName8}/submitFeedback`,
4654
- // @ts-ignore
4655
- ({ satisfaction, feedback, ...meta }, { dispatch }) => {
4656
- return general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4657
- subject: "feedback submission",
4658
- body: JSON.stringify({ feedback, satisfaction, meta })
4659
- }).then(() => {
4660
- const today = /* @__PURE__ */ new Date();
4661
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4662
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4663
- });
4664
- }
4701
+ ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4702
+ subject: "feedback submission",
4703
+ body: JSON.stringify({ feedback, satisfaction, meta })
4704
+ }).then(() => {
4705
+ const today = /* @__PURE__ */ new Date();
4706
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4707
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4708
+ })
4665
4709
  );
4666
4710
 
4667
4711
  // src/onboardingSlice/thunks.ts
4668
4712
  var import_helpers11 = require("@northern.tech/utils/helpers");
4713
+ var import_onboardingManager = require("@northern.tech/utils/onboardingManager");
4714
+ var import_tracking2 = __toESM(require("@northern.tech/utils/tracking"), 1);
4669
4715
  var import_toolkit22 = require("@reduxjs/toolkit");
4670
4716
  var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
4671
4717
  var cookies4 = new import_universal_cookie4.default();
4672
4718
  var applyOnboardingFallbacks = (progress2) => {
4673
- const step = orderedOnboardingSteps[progress2];
4719
+ const step = import_onboardingManager.onboardingSteps[progress2];
4674
4720
  if (step && step.fallbackStep) {
4675
4721
  return step.fallbackStep;
4676
4722
  }
4677
4723
  return progress2;
4678
4724
  };
4679
4725
  var determineProgress = (acceptedDevices, pendingDevices, releases, pastDeployments) => {
4680
- const steps = orderedOnboardingSteps;
4726
+ const steps = Object.keys(import_onboardingManager.onboardingSteps);
4681
4727
  let progress2 = -1;
4682
4728
  progress2 = pendingDevices.length > 1 ? steps.findIndex((step) => step === onboardingSteps.DEVICES_PENDING_ACCEPTING_ONBOARDING) : progress2;
4683
4729
  progress2 = acceptedDevices.length >= 1 ? steps.findIndex((step) => step === onboardingSteps.DEVICES_ACCEPTED_ONBOARDING) : progress2;
@@ -4694,7 +4740,7 @@ var deductOnboardingState = ({ devicesById, devicesByStatus, onboardingState, pa
4694
4740
  const progress2 = applyOnboardingFallbacks(onboardingState.progress || determineProgress(acceptedDevices, pendingDevices, releases, pastDeployments));
4695
4741
  return {
4696
4742
  ...onboardingState,
4697
- complete: !!(Boolean(userCookie) || onboardingState.complete || acceptedDevices.length > 1 && pendingDevices.length > 0 && releases.length > 1 && pastDeployments.length > 1 || acceptedDevices.length >= 1 && releases.length >= 2 && pastDeployments.length > 2 || acceptedDevices.length >= 1 && pendingDevices.length > 0 && releases.length >= 2 && pastDeployments.length >= 2 || orderedOnboardingSteps.findIndex((step) => step === progress2) >= orderedOnboardingSteps.length - 1 || onboardingState.disable || ![canDeploy, canManageDevices, canReadDeployments, canReadDevices, canReadReleases, canUploadReleases].every((i) => i)),
4743
+ complete: !!(Boolean(userCookie) || onboardingState.complete || acceptedDevices.length > 1 && pendingDevices.length > 0 && releases.length > 1 && pastDeployments.length > 1 || acceptedDevices.length >= 1 && releases.length >= 2 && pastDeployments.length > 2 || acceptedDevices.length >= 1 && pendingDevices.length > 0 && releases.length >= 2 && pastDeployments.length >= 2 || Object.keys(import_onboardingManager.onboardingSteps).findIndex((step) => step === progress2) >= Object.keys(import_onboardingManager.onboardingSteps).length - 1 || onboardingState.disable || ![canDeploy, canManageDevices, canReadDeployments, canReadDevices, canReadReleases, canUploadReleases].every((i) => i)),
4698
4744
  showTips: onboardingState.showTips != null ? onboardingState.showTips : true,
4699
4745
  deviceType,
4700
4746
  approach: onboardingState.approach || (deviceType.some((type) => type.startsWith("qemu")) ? "virtual" : "physical"),
@@ -4747,10 +4793,10 @@ var setOnboardingCanceled = (0, import_toolkit22.createAsyncThunk)(
4747
4793
  Promise.resolve(dispatch(actions5.setShowOnboardingHelp(false))),
4748
4794
  Promise.resolve(dispatch(actions5.setShowDismissOnboardingTipsDialog(false))),
4749
4795
  Promise.resolve(dispatch(actions5.setOnboardingComplete(true)))
4750
- ]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE)))
4796
+ ]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE))).then(() => import_tracking2.default.event({ category: "onboarding", action: import_onboardingManager.onboardingSteps.ONBOARDING_CANCELED }))
4751
4797
  );
4752
4798
  var advanceOnboarding = (0, import_toolkit22.createAsyncThunk)(`${sliceName5}/advanceOnboarding`, (stepId, { dispatch, getState }) => {
4753
- const steps = orderedOnboardingSteps;
4799
+ const steps = Object.keys(import_onboardingManager.onboardingSteps);
4754
4800
  const progress2 = steps.findIndex((step) => step === getState().onboarding.progress);
4755
4801
  const stepIndex = steps.findIndex((step) => step === stepId);
4756
4802
  if (progress2 > stepIndex || getState().onboarding.progress === null) {
@@ -4758,7 +4804,8 @@ var advanceOnboarding = (0, import_toolkit22.createAsyncThunk)(`${sliceName5}/ad
4758
4804
  }
4759
4805
  const madeProgress = steps[stepIndex + 1];
4760
4806
  const state = { ...getOnboardingState(getState()), progress: madeProgress };
4761
- state.complete = stepIndex + 1 >= steps.findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
4807
+ state.complete = stepIndex + 1 >= Object.keys(import_onboardingManager.onboardingSteps).findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
4808
+ import_tracking2.default.event({ category: "onboarding", action: stepId });
4762
4809
  return Promise.all([dispatch(actions5.setOnboardingProgress(madeProgress)), dispatch(saveUserSettings({ onboarding: state }))]);
4763
4810
  });
4764
4811
  // Annotate the CommonJS export names for ESM import in node: