@northern.tech/store 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/actions.cjs +20 -17
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.js +8 -8
  4. package/dist/api/general-api.js +2 -2
  5. package/dist/api/types/Tenant.ts +17 -12
  6. package/dist/api/users-api.js +2 -2
  7. package/dist/appSlice/constants.cjs +18 -10
  8. package/dist/appSlice/constants.cjs.map +1 -1
  9. package/dist/appSlice/constants.d.cts +41 -84
  10. package/dist/appSlice/constants.d.ts +41 -84
  11. package/dist/appSlice/constants.js +1 -1
  12. package/dist/appSlice/index.js +2 -2
  13. package/dist/appSlice/thunks.cjs +137 -94
  14. package/dist/appSlice/thunks.cjs.map +1 -1
  15. package/dist/appSlice/thunks.js +19 -19
  16. package/dist/auth.js +2 -2
  17. package/dist/{chunk-Q6M5TTDQ.js → chunk-2CYOM4BK.js} +1 -1
  18. package/dist/chunk-2CYOM4BK.js.map +1 -0
  19. package/dist/{chunk-74OJIKXF.js → chunk-2JHFUQ6B.js} +133 -96
  20. package/dist/chunk-2JHFUQ6B.js.map +1 -0
  21. package/dist/{chunk-YETZPQFR.js → chunk-4XJMRVFI.js} +12 -11
  22. package/dist/chunk-4XJMRVFI.js.map +1 -0
  23. package/dist/{chunk-RX55KAKX.js → chunk-7JKWI5FK.js} +2 -2
  24. package/dist/{chunk-A6CT6GTI.js → chunk-C5NEDBJI.js} +17 -11
  25. package/dist/chunk-C5NEDBJI.js.map +1 -0
  26. package/dist/{chunk-NNADGHSL.js → chunk-DAPAXWA5.js} +8 -8
  27. package/dist/{chunk-ANB5BM5J.js → chunk-DCK2DBOA.js} +27 -20
  28. package/dist/chunk-DCK2DBOA.js.map +1 -0
  29. package/dist/{chunk-E5LEU5PF.js → chunk-HPBE6KYY.js} +2 -2
  30. package/dist/{chunk-2RJIDREZ.js → chunk-LEMVXAYP.js} +25 -16
  31. package/dist/chunk-LEMVXAYP.js.map +1 -0
  32. package/dist/{chunk-NI4SZOCF.js → chunk-LGNOTPUG.js} +9 -9
  33. package/dist/{chunk-MDC7Y3EX.js → chunk-LTKOV26W.js} +22 -20
  34. package/dist/chunk-LTKOV26W.js.map +1 -0
  35. package/dist/{chunk-YTQUNAZP.js → chunk-QRGTG4YB.js} +2 -2
  36. package/dist/{chunk-XTRPX7JZ.js → chunk-TI2RL5P2.js} +2 -2
  37. package/dist/chunk-TI2RL5P2.js.map +1 -0
  38. package/dist/{chunk-YGBFDXXA.js → chunk-TUACATJA.js} +2 -2
  39. package/dist/{chunk-25AKG5HH.js → chunk-UWMYZNUB.js} +19 -11
  40. package/dist/chunk-UWMYZNUB.js.map +1 -0
  41. package/dist/{chunk-UEP36GCI.js → chunk-VMNMD6KF.js} +2 -2
  42. package/dist/{chunk-KAQJH2YL.js → chunk-WXL7PVI5.js} +12 -4
  43. package/dist/chunk-WXL7PVI5.js.map +1 -0
  44. package/dist/{chunk-VOCOFE4I.js → chunk-X7IEZBM4.js} +2 -2
  45. package/dist/{chunk-XXHONFSQ.js → chunk-YDS36ALB.js} +3 -3
  46. package/dist/{chunk-XXHONFSQ.js.map → chunk-YDS36ALB.js.map} +1 -1
  47. package/dist/commonSelectors.cjs +40 -18
  48. package/dist/commonSelectors.cjs.map +1 -1
  49. package/dist/commonSelectors.d.cts +54 -46
  50. package/dist/commonSelectors.d.ts +54 -46
  51. package/dist/commonSelectors.js +9 -9
  52. package/dist/constants.cjs +35 -19
  53. package/dist/constants.cjs.map +1 -1
  54. package/dist/constants.d.cts +3 -3
  55. package/dist/constants.d.ts +3 -3
  56. package/dist/constants.js +6 -2
  57. package/dist/deploymentdevicehook.cjs +143 -99
  58. package/dist/deploymentdevicehook.cjs.map +1 -1
  59. package/dist/deploymentdevicehook.d.cts +1 -1
  60. package/dist/deploymentdevicehook.d.ts +1 -1
  61. package/dist/deploymentdevicehook.js +24 -22
  62. package/dist/deploymentdevicehook.js.map +1 -1
  63. package/dist/deploymentsSlice/constants.cjs +8 -8
  64. package/dist/deploymentsSlice/constants.cjs.map +1 -1
  65. package/dist/deploymentsSlice/constants.js +2 -2
  66. package/dist/deploymentsSlice/index.cjs +8 -8
  67. package/dist/deploymentsSlice/index.cjs.map +1 -1
  68. package/dist/deploymentsSlice/index.js +3 -3
  69. package/dist/deploymentsSlice/selectors.cjs +8 -8
  70. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  71. package/dist/deploymentsSlice/selectors.js +3 -3
  72. package/dist/deploymentsSlice/thunks.cjs +137 -94
  73. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  74. package/dist/deploymentsSlice/thunks.js +19 -19
  75. package/dist/devicesSlice/constants.cjs +11 -8
  76. package/dist/devicesSlice/constants.cjs.map +1 -1
  77. package/dist/devicesSlice/constants.d.cts +2 -1
  78. package/dist/devicesSlice/constants.d.ts +2 -1
  79. package/dist/devicesSlice/constants.js +4 -2
  80. package/dist/devicesSlice/index.cjs +8 -8
  81. package/dist/devicesSlice/index.cjs.map +1 -1
  82. package/dist/devicesSlice/index.js +3 -3
  83. package/dist/devicesSlice/selectors.cjs +9 -9
  84. package/dist/devicesSlice/selectors.cjs.map +1 -1
  85. package/dist/devicesSlice/selectors.js +3 -3
  86. package/dist/devicesSlice/thunks.cjs +139 -94
  87. package/dist/devicesSlice/thunks.cjs.map +1 -1
  88. package/dist/devicesSlice/thunks.d.cts +12 -2
  89. package/dist/devicesSlice/thunks.d.ts +12 -2
  90. package/dist/devicesSlice/thunks.js +21 -19
  91. package/dist/flag-eu-5477R2P4.svg +130 -0
  92. package/dist/flag-us-HNQAF66I.svg +63 -0
  93. package/dist/monitorSlice/constants.cjs +8 -8
  94. package/dist/monitorSlice/constants.cjs.map +1 -1
  95. package/dist/monitorSlice/constants.js +2 -2
  96. package/dist/monitorSlice/index.cjs +8 -8
  97. package/dist/monitorSlice/index.cjs.map +1 -1
  98. package/dist/monitorSlice/index.js +3 -3
  99. package/dist/monitorSlice/thunks.cjs +59 -37
  100. package/dist/monitorSlice/thunks.cjs.map +1 -1
  101. package/dist/monitorSlice/thunks.js +17 -17
  102. package/dist/onboardingSlice/thunks.cjs +146 -100
  103. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  104. package/dist/onboardingSlice/thunks.d.cts +1 -32
  105. package/dist/onboardingSlice/thunks.d.ts +1 -32
  106. package/dist/onboardingSlice/thunks.js +19 -19
  107. package/dist/organizationSlice/constants.cjs +22 -17
  108. package/dist/organizationSlice/constants.cjs.map +1 -1
  109. package/dist/organizationSlice/constants.d.cts +33 -1
  110. package/dist/organizationSlice/constants.d.ts +33 -1
  111. package/dist/organizationSlice/constants.js +4 -2
  112. package/dist/organizationSlice/index.cjs +18 -15
  113. package/dist/organizationSlice/index.cjs.map +1 -1
  114. package/dist/organizationSlice/index.d.cts +26 -1012
  115. package/dist/organizationSlice/index.d.ts +26 -1012
  116. package/dist/organizationSlice/index.js +3 -3
  117. package/dist/organizationSlice/selectors.cjs.map +1 -1
  118. package/dist/organizationSlice/selectors.d.cts +9 -1
  119. package/dist/organizationSlice/selectors.d.ts +9 -1
  120. package/dist/organizationSlice/selectors.js +3 -3
  121. package/dist/organizationSlice/thunks.cjs +1605 -1539
  122. package/dist/organizationSlice/thunks.cjs.map +1 -1
  123. package/dist/organizationSlice/thunks.d.cts +61 -36
  124. package/dist/organizationSlice/thunks.d.ts +61 -36
  125. package/dist/organizationSlice/thunks.js +19 -19
  126. package/dist/organizationSlice/types.cjs +19 -0
  127. package/dist/organizationSlice/types.cjs.map +1 -0
  128. package/dist/organizationSlice/types.d.cts +114 -0
  129. package/dist/organizationSlice/types.d.ts +114 -0
  130. package/dist/organizationSlice/types.js +1 -0
  131. package/dist/organizationSlice/types.js.map +1 -0
  132. package/dist/releasesSlice/index.js +2 -2
  133. package/dist/releasesSlice/selectors.cjs +11 -0
  134. package/dist/releasesSlice/selectors.cjs.map +1 -1
  135. package/dist/releasesSlice/selectors.js +4 -4
  136. package/dist/releasesSlice/thunks.cjs +73 -49
  137. package/dist/releasesSlice/thunks.cjs.map +1 -1
  138. package/dist/releasesSlice/thunks.d.cts +1 -4
  139. package/dist/releasesSlice/thunks.d.ts +1 -4
  140. package/dist/releasesSlice/thunks.js +17 -17
  141. package/dist/selectors.cjs +46 -18
  142. package/dist/selectors.cjs.map +1 -1
  143. package/dist/selectors.d.cts +9 -1
  144. package/dist/selectors.d.ts +9 -1
  145. package/dist/selectors.js +36 -30
  146. package/dist/store.cjs +36 -23
  147. package/dist/store.cjs.map +1 -1
  148. package/dist/store.d.cts +12 -231
  149. package/dist/store.d.ts +12 -231
  150. package/dist/store.js +13 -11
  151. package/dist/storehooks.cjs +216 -137
  152. package/dist/storehooks.cjs.map +1 -1
  153. package/dist/storehooks.js +36 -24
  154. package/dist/storehooks.js.map +1 -1
  155. package/dist/thunks.cjs +193 -122
  156. package/dist/thunks.cjs.map +1 -1
  157. package/dist/thunks.d.cts +5 -1
  158. package/dist/thunks.d.ts +5 -1
  159. package/dist/thunks.js +21 -19
  160. package/dist/usersSlice/constants.cjs +10 -10
  161. package/dist/usersSlice/constants.cjs.map +1 -1
  162. package/dist/usersSlice/constants.js +2 -2
  163. package/dist/usersSlice/index.cjs +10 -10
  164. package/dist/usersSlice/index.cjs.map +1 -1
  165. package/dist/usersSlice/index.js +3 -3
  166. package/dist/usersSlice/selectors.cjs +35 -13
  167. package/dist/usersSlice/selectors.cjs.map +1 -1
  168. package/dist/usersSlice/selectors.d.cts +44 -1
  169. package/dist/usersSlice/selectors.d.ts +44 -1
  170. package/dist/usersSlice/selectors.js +12 -6
  171. package/dist/usersSlice/thunks.cjs +135 -94
  172. package/dist/usersSlice/thunks.cjs.map +1 -1
  173. package/dist/usersSlice/thunks.d.cts +10 -9
  174. package/dist/usersSlice/thunks.d.ts +10 -9
  175. package/dist/usersSlice/thunks.js +19 -19
  176. package/dist/utils.cjs +17 -16
  177. package/dist/utils.cjs.map +1 -1
  178. package/dist/utils.js +3 -3
  179. package/package.json +7 -7
  180. package/dist/chunk-25AKG5HH.js.map +0 -1
  181. package/dist/chunk-2RJIDREZ.js.map +0 -1
  182. package/dist/chunk-74OJIKXF.js.map +0 -1
  183. package/dist/chunk-A6CT6GTI.js.map +0 -1
  184. package/dist/chunk-ANB5BM5J.js.map +0 -1
  185. package/dist/chunk-KAQJH2YL.js.map +0 -1
  186. package/dist/chunk-MDC7Y3EX.js.map +0 -1
  187. package/dist/chunk-Q6M5TTDQ.js.map +0 -1
  188. package/dist/chunk-XTRPX7JZ.js.map +0 -1
  189. package/dist/chunk-YETZPQFR.js.map +0 -1
  190. /package/dist/{chunk-RX55KAKX.js.map → chunk-7JKWI5FK.js.map} +0 -0
  191. /package/dist/{chunk-NNADGHSL.js.map → chunk-DAPAXWA5.js.map} +0 -0
  192. /package/dist/{chunk-E5LEU5PF.js.map → chunk-HPBE6KYY.js.map} +0 -0
  193. /package/dist/{chunk-NI4SZOCF.js.map → chunk-LGNOTPUG.js.map} +0 -0
  194. /package/dist/{chunk-YTQUNAZP.js.map → chunk-QRGTG4YB.js.map} +0 -0
  195. /package/dist/{chunk-YGBFDXXA.js.map → chunk-TUACATJA.js.map} +0 -0
  196. /package/dist/{chunk-UEP36GCI.js.map → chunk-VMNMD6KF.js.map} +0 -0
  197. /package/dist/{chunk-VOCOFE4I.js.map → chunk-X7IEZBM4.js.map} +0 -0
@@ -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,6 +3737,13 @@ 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
3748
  const { start: startUnix, end: endUnix } = (0, import_helpers9.dateRangeToUnix)(startDate, endDate);
3695
3749
  const createdAfter = startDate ? `&created_after=${startUnix}` : "";
@@ -3792,12 +3846,12 @@ var deleteAuthset = (0, import_toolkit19.createAsyncThunk)(
3792
3846
  );
3793
3847
  var preauthDevice = (0, import_toolkit19.createAsyncThunk)(
3794
3848
  `${sliceName3}/preauthDevice`,
3795
- (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) => {
3796
3850
  if (err.response.status === 409) {
3797
- 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");
3798
3852
  }
3799
3853
  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))))
3854
+ })
3801
3855
  );
3802
3856
  var decommissionDevice = (0, import_toolkit19.createAsyncThunk)(
3803
3857
  `${sliceName3}/decommissionDevice`,
@@ -4024,6 +4078,9 @@ var changeNotificationSetting = (0, import_toolkit20.createAsyncThunk)(
4024
4078
  }
4025
4079
  );
4026
4080
 
4081
+ // src/usersSlice/thunks.ts
4082
+ var import_helptips = require("@northern.tech/common-ui/helptips");
4083
+
4027
4084
  // src/api/users-api.ts
4028
4085
  var import_axios3 = __toESM(require("axios"), 1);
4029
4086
  var Api2 = {
@@ -4057,7 +4114,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
4057
4114
  }
4058
4115
  const twoFAError = is2FABackend ? " and verification code" : "";
4059
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.`;
4060
- 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" })));
4061
4118
  };
4062
4119
  var loginUser = (0, import_toolkit21.createAsyncThunk)(
4063
4120
  `${sliceName8}/loginUser`,
@@ -4081,19 +4138,16 @@ var loginUser = (0, import_toolkit21.createAsyncThunk)(
4081
4138
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
4082
4139
  setSessionInfo({ token, expiresAt });
4083
4140
  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
- );
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
+ });
4097
4151
  })
4098
4152
  );
4099
4153
  var logoutUser = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -4111,6 +4165,7 @@ var switchUserOrganization = (0, import_toolkit21.createAsyncThunk)(`${sliceName
4111
4165
  return Promise.reject();
4112
4166
  }
4113
4167
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
4168
+ window.sessionStorage.setItem("tenantChanged", "true");
4114
4169
  setSessionInfo({ ...getSessionInfo(), token });
4115
4170
  window.location.reload();
4116
4171
  });
@@ -4151,11 +4206,18 @@ var verify2FA = (0, import_toolkit21.createAsyncThunk)(
4151
4206
  );
4152
4207
  var getUserList = (0, import_toolkit21.createAsyncThunk)(
4153
4208
  `${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
- }, {});
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
+ );
4159
4221
  return dispatch(actions8.receivedUserList(users));
4160
4222
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
4161
4223
  );
@@ -4164,9 +4226,7 @@ var getUser = (0, import_toolkit21.createAsyncThunk)(
4164
4226
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
4165
4227
  ({ data: user }) => Promise.all([
4166
4228
  dispatch(actions8.receivedUser(user)),
4167
- // @ts-ignore
4168
4229
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
4169
- // @ts-ignore
4170
4230
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
4171
4231
  user
4172
4232
  ])
@@ -4213,10 +4273,7 @@ var createUser = (0, import_toolkit21.createAsyncThunk)(
4213
4273
  );
4214
4274
  var removeUser = (0, import_toolkit21.createAsyncThunk)(
4215
4275
  `${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
- )
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))
4220
4277
  );
4221
4278
  var editUser = (0, import_toolkit21.createAsyncThunk)(
4222
4279
  `${sliceName8}/editUser`,
@@ -4237,7 +4294,7 @@ var enableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4237
4294
  );
4238
4295
  var disableUser2fa = (0, import_toolkit21.createAsyncThunk)(
4239
4296
  `${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))))
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))]))
4241
4298
  );
4242
4299
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
4243
4300
  (accu, [area, definition]) => {
@@ -4390,7 +4447,6 @@ var getPermissionSets = (0, import_toolkit21.createAsyncThunk)(
4390
4447
  accu[permissionSet.name] = permissionSetObject;
4391
4448
  return accu;
4392
4449
  },
4393
- // @ts-ignore
4394
4450
  { ...getState().users.permissionSetsById }
4395
4451
  );
4396
4452
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -4483,7 +4539,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
4483
4539
  role: {
4484
4540
  ...emptyRole,
4485
4541
  name,
4486
- // @ts-ignore
4487
4542
  description: description ? description : roleState.description,
4488
4543
  uiPermissions: {
4489
4544
  ...emptyUiPermissions,
@@ -4526,10 +4581,7 @@ var editRole = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/editRole`,
4526
4581
  });
4527
4582
  var removeRole = (0, import_toolkit21.createAsyncThunk)(
4528
4583
  `${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
- )
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))
4533
4585
  );
4534
4586
  var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4535
4587
  `${sliceName8}/getGlobalSettings`,
@@ -4540,7 +4592,6 @@ var getGlobalSettings2 = (0, import_toolkit21.createAsyncThunk)(
4540
4592
  );
4541
4593
  var saveGlobalSettings = (0, import_toolkit21.createAsyncThunk)(
4542
4594
  `${sliceName8}/saveGlobalSettings`,
4543
- // @ts-ignore
4544
4595
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
4545
4596
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
4546
4597
  return;
@@ -4586,11 +4637,9 @@ var saveUserSettings = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/sav
4586
4637
  const tooltipState = getTooltipsState(getState());
4587
4638
  const updatedSettings = {
4588
4639
  ...userSettings,
4589
- // @ts-ignore
4590
4640
  ...settings,
4591
4641
  onboarding: {
4592
4642
  ...onboardingState,
4593
- // @ts-ignore
4594
4643
  ...settings.onboarding
4595
4644
  },
4596
4645
  tooltips: tooltipState
@@ -4634,10 +4683,7 @@ var generateToken = (0, import_toolkit21.createAsyncThunk)(
4634
4683
  );
4635
4684
  var revokeToken = (0, import_toolkit21.createAsyncThunk)(
4636
4685
  `${sliceName8}/revokeToken`,
4637
- (token, { dispatch }) => (
4638
- // @ts-ignore
4639
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4640
- )
4686
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4641
4687
  );
4642
4688
  var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
4643
4689
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -4646,39 +4692,38 @@ var setTooltipReadState = (0, import_toolkit21.createAsyncThunk)(`${sliceName8}/
4646
4692
  }
4647
4693
  return Promise.all(tasks);
4648
4694
  });
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 } }), {});
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 } }), {});
4651
4697
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
4652
4698
  });
4653
4699
  var submitFeedback = (0, import_toolkit21.createAsyncThunk)(
4654
4700
  `${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
- }
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
+ })
4666
4709
  );
4667
4710
 
4668
4711
  // src/onboardingSlice/thunks.ts
4669
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);
4670
4715
  var import_toolkit22 = require("@reduxjs/toolkit");
4671
4716
  var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
4672
4717
  var cookies4 = new import_universal_cookie4.default();
4673
4718
  var applyOnboardingFallbacks = (progress2) => {
4674
- const step = orderedOnboardingSteps[progress2];
4719
+ const step = import_onboardingManager.onboardingSteps[progress2];
4675
4720
  if (step && step.fallbackStep) {
4676
4721
  return step.fallbackStep;
4677
4722
  }
4678
4723
  return progress2;
4679
4724
  };
4680
4725
  var determineProgress = (acceptedDevices, pendingDevices, releases, pastDeployments) => {
4681
- const steps = orderedOnboardingSteps;
4726
+ const steps = Object.keys(import_onboardingManager.onboardingSteps);
4682
4727
  let progress2 = -1;
4683
4728
  progress2 = pendingDevices.length > 1 ? steps.findIndex((step) => step === onboardingSteps.DEVICES_PENDING_ACCEPTING_ONBOARDING) : progress2;
4684
4729
  progress2 = acceptedDevices.length >= 1 ? steps.findIndex((step) => step === onboardingSteps.DEVICES_ACCEPTED_ONBOARDING) : progress2;
@@ -4695,7 +4740,7 @@ var deductOnboardingState = ({ devicesById, devicesByStatus, onboardingState, pa
4695
4740
  const progress2 = applyOnboardingFallbacks(onboardingState.progress || determineProgress(acceptedDevices, pendingDevices, releases, pastDeployments));
4696
4741
  return {
4697
4742
  ...onboardingState,
4698
- 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)),
4699
4744
  showTips: onboardingState.showTips != null ? onboardingState.showTips : true,
4700
4745
  deviceType,
4701
4746
  approach: onboardingState.approach || (deviceType.some((type) => type.startsWith("qemu")) ? "virtual" : "physical"),
@@ -4748,10 +4793,10 @@ var setOnboardingCanceled = (0, import_toolkit22.createAsyncThunk)(
4748
4793
  Promise.resolve(dispatch(actions5.setShowOnboardingHelp(false))),
4749
4794
  Promise.resolve(dispatch(actions5.setShowDismissOnboardingTipsDialog(false))),
4750
4795
  Promise.resolve(dispatch(actions5.setOnboardingComplete(true)))
4751
- ]).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 }))
4752
4797
  );
4753
4798
  var advanceOnboarding = (0, import_toolkit22.createAsyncThunk)(`${sliceName5}/advanceOnboarding`, (stepId, { dispatch, getState }) => {
4754
- const steps = orderedOnboardingSteps;
4799
+ const steps = Object.keys(import_onboardingManager.onboardingSteps);
4755
4800
  const progress2 = steps.findIndex((step) => step === getState().onboarding.progress);
4756
4801
  const stepIndex = steps.findIndex((step) => step === stepId);
4757
4802
  if (progress2 > stepIndex || getState().onboarding.progress === null) {
@@ -4759,7 +4804,8 @@ var advanceOnboarding = (0, import_toolkit22.createAsyncThunk)(`${sliceName5}/ad
4759
4804
  }
4760
4805
  const madeProgress = steps[stepIndex + 1];
4761
4806
  const state = { ...getOnboardingState(getState()), progress: madeProgress };
4762
- 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 });
4763
4809
  return Promise.all([dispatch(actions5.setOnboardingProgress(madeProgress)), dispatch(saveUserSettings({ onboarding: state }))]);
4764
4810
  });
4765
4811
  // Annotate the CommonJS export names for ESM import in node: