@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
@@ -74,28 +74,28 @@ var PLANS = {
74
74
  id: "os",
75
75
  name: "Basic",
76
76
  offer: true,
77
- price: "$32/month",
77
+ price: "$32 / month",
78
78
  deviceCount: startingDeviceCount.os,
79
- offerprice: "$23/month for first 50 devices",
79
+ offerprice: "$23 / month for first 50 devices",
80
80
  price2: "for first 6 months;\n$29/month thereafter",
81
- features: ["Basic OTA features"]
81
+ features: ["Access to core features of Mender", "Basic support"]
82
82
  },
83
83
  professional: {
84
84
  id: "professional",
85
85
  name: "Professional",
86
86
  offer: true,
87
- price: "$269/month",
87
+ price: "$269 / month",
88
88
  deviceCount: startingDeviceCount.professional,
89
- offerprice: "$200/month for first 50 devices",
89
+ offerprice: "$200 / month for first 50 devices",
90
90
  price2: "for first 6 months;\n$249/month thereafter",
91
- features: ["+ Advanced OTA features", "+ Standard support"]
91
+ features: ["Advanced OTA features", "Higher priority support"]
92
92
  },
93
93
  enterprise: {
94
94
  id: "enterprise",
95
95
  name: "Enterprise",
96
96
  price: "Custom pricing",
97
- deviceCount: "unlimited devices",
98
- features: ["+ Enterprise-grade OTA features", "+ Premium support"]
97
+ deviceCount: "Unlimited devices",
98
+ features: ["All Mender features", "Advanced security features", "SLA-backed support"]
99
99
  }
100
100
  };
101
101
  var ADDONS = {
@@ -566,6 +566,7 @@ var DEVICE_STATES = {
566
566
  rejected: "rejected"
567
567
  };
568
568
  var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
569
+ var REPORT_CHART_SIZE_LIMIT = 6;
569
570
 
570
571
  // src/monitorSlice/constants.ts
571
572
  var alertChannels = { email: "email" };
@@ -647,13 +648,16 @@ var SSO_TYPES = {
647
648
  configDetails: [{ key: "startURL", label: "Start Url", getValue: getOidcStartUrl }]
648
649
  }
649
650
  };
650
- var AUDIT_LOGS_TYPES = [
651
- { title: "Artifact", queryParameter: "object_type", value: "artifact" },
652
- { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
653
- { title: "Device", queryParameter: "object_id", value: "device" },
654
- { title: "User", queryParameter: "object_id", value: "user" }
655
- ];
656
- var SP_AUDIT_LOGS_TYPES = [AUDIT_LOGS_TYPES[3], { title: "Tenant", queryParameter: "object_id", value: "tenant" }];
651
+ var auditlogTypes = {
652
+ artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
653
+ deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
654
+ device: { title: "Device", queryParameter: "object_id", value: "device" },
655
+ user_access_token: { title: "Personal Access Token", queryParameter: "user_access_token", value: "user_access_token" },
656
+ user: { title: "User", queryParameter: "object_id", value: "user" },
657
+ tenant: { title: "Tenant", queryParameter: "object_id", value: "tenant" }
658
+ };
659
+ var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
660
+ var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
657
661
  var emptyWebhook = {
658
662
  description: "",
659
663
  enabled: true,
@@ -786,7 +790,7 @@ var uiPermissionsByArea = {
786
790
  explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
787
791
  key: "auditlog",
788
792
  uiPermissions: [uiPermissionsById.read],
789
- title: "System audit log"
793
+ title: "System Audit Log"
790
794
  },
791
795
  deployments: {
792
796
  endpoints: [
@@ -937,7 +941,7 @@ var serviceProviderRolesById = {
937
941
  },
938
942
  readOnly: {
939
943
  name: "Read access",
940
- value: staticRolesByName.admin,
944
+ value: staticRolesByName.readOnly,
941
945
  description: "This role can see all linked organizations but cannot make any changes",
942
946
  permissions: [],
943
947
  uiPermissions: {
@@ -2142,7 +2146,7 @@ var getGroups = (0, import_toolkit11.createSelector)([getGroupsById], (groupsByI
2142
2146
  (accu, [groupname, group]) => {
2143
2147
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
2144
2148
  const groupItem = { ...group, groupId: name, name: groupname };
2145
- if (group.filters.length > 0) {
2149
+ if (group.filters?.length > 0) {
2146
2150
  if (groupname !== UNGROUPED_GROUP.id) {
2147
2151
  accu.dynamic.push(groupItem);
2148
2152
  } else {
@@ -2215,14 +2219,15 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
2215
2219
  // src/utils.ts
2216
2220
  var import_helpers4 = require("@northern.tech/utils/helpers");
2217
2221
  var filterProcessors = {
2218
- $gt: (val) => Number(val) || val,
2219
- $gte: (val) => Number(val) || val,
2220
- $lt: (val) => Number(val) || val,
2221
- $lte: (val) => Number(val) || val,
2222
- $in: (val) => ("" + val).split(",").map((i) => i.trim()),
2223
- $nin: (val) => ("" + val).split(",").map((i) => i.trim()),
2224
- $exists: import_helpers4.yes,
2225
- $nexists: () => false
2222
+ [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
2223
+ [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
2224
+ [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
2225
+ [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
2226
+ [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
2227
+ [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2228
+ [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2229
+ [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers4.yes,
2230
+ [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
2226
2231
  };
2227
2232
  var filterAliases = {
2228
2233
  $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
@@ -2346,8 +2351,13 @@ var getTooltipsById = (state) => state.users.tooltips.byId;
2346
2351
  var getGlobalSettings = (state) => state.users.globalSettings;
2347
2352
  var getCurrentUserId = (state) => state.users.currentUser;
2348
2353
  var getUsersById = (state) => state.users.byId;
2354
+ var getUsersList = (0, import_toolkit14.createSelector)([getUsersById], (usersById) => Object.values(usersById));
2349
2355
  var getCurrentUser = (0, import_toolkit14.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
2350
2356
  var getUserSettings = (state) => state.users.userSettings;
2357
+ var getSelectedDeviceAttribute = (0, import_toolkit14.createSelector)(
2358
+ [getUserSettings],
2359
+ ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
2360
+ );
2351
2361
  var getIsDarkMode = (0, import_toolkit14.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
2352
2362
  var getShowHelptips = (0, import_toolkit14.createSelector)(
2353
2363
  [getTooltipsById],
@@ -2372,7 +2382,7 @@ var getOfflineThresholdSettings = (0, import_toolkit14.createSelector)([getGloba
2372
2382
  interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,
2373
2383
  intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName
2374
2384
  }));
2375
- var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([id, role]) => ({ id, ...role })));
2385
+ var getRolesList = (0, import_toolkit14.createSelector)([getRolesById], (rolesById2) => Object.entries(rolesById2).map(([value, role]) => ({ value, ...role })));
2376
2386
 
2377
2387
  // src/commonSelectors.ts
2378
2388
  var getIsEnterprise = (0, import_toolkit15.createSelector)(
@@ -2433,12 +2443,18 @@ var getUserCapabilities = (0, import_toolkit15.createSelector)([getUserRoles, ge
2433
2443
  });
2434
2444
  var getTenantCapabilities = (0, import_toolkit15.createSelector)(
2435
2445
  [getFeatures, getOrganization, getIsEnterprise],
2436
- ({ hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
2446
+ ({
2447
+ hasAuditlogs: isAuditlogEnabled,
2448
+ hasDeviceConfig: isDeviceConfigEnabled,
2449
+ hasDeviceConnect: isDeviceConnectEnabled,
2450
+ hasMonitor: isMonitorEnabled,
2451
+ isHosted
2452
+ }, { addons = [], plan = PLANS.os.id }, isEnterprise) => {
2437
2453
  const canDelta = isEnterprise || plan === PLANS.professional.id;
2438
2454
  const hasAuditlogs = isAuditlogEnabled && isEnterprise;
2439
- const hasDeviceConfig = isDeviceConfigEnabled && addons.some((addon) => addon.name === "configure" && Boolean(addon.enabled));
2440
- const hasDeviceConnect = isDeviceConnectEnabled && (!isEnterprise || addons.some((addon) => addon.name === "troubleshoot" && Boolean(addon.enabled)));
2441
- const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === "monitor" && Boolean(addon.enabled));
2455
+ const hasDeviceConfig = addons.some((addon) => addon.name === ADDONS.configure.id && addon.enabled) || isDeviceConfigEnabled && !isHosted;
2456
+ const hasDeviceConnect = addons.some((addon) => addon.name === ADDONS.troubleshoot.id && addon.enabled) || isDeviceConnectEnabled && !isHosted;
2457
+ const hasMonitor = isMonitorEnabled && addons.some((addon) => addon.name === ADDONS.monitor.id && addon.enabled);
2442
2458
  return {
2443
2459
  canDelta,
2444
2460
  canRetry: canDelta,
@@ -2568,7 +2584,7 @@ var getAuditlogDevice = (0, import_toolkit15.createSelector)([getAuditLogEntry,
2568
2584
  var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
2569
2585
  if (service_provider) {
2570
2586
  return roles.reduce((accu, role) => {
2571
- if (rolesById[role.id]) {
2587
+ if (rolesById[role.value]) {
2572
2588
  return accu;
2573
2589
  }
2574
2590
  accu.push(role);
@@ -2576,20 +2592,19 @@ var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, ge
2576
2592
  }, Object.values(serviceProviderRolesById));
2577
2593
  }
2578
2594
  return Object.keys(rolesById).reverse().reduce((accu, key) => {
2579
- const index = accu.findIndex(({ id }) => id === key);
2595
+ const index = accu.findIndex(({ value }) => value === key);
2580
2596
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
2581
2597
  return accu;
2582
2598
  }, roles);
2583
2599
  });
2584
2600
 
2585
2601
  // src/store.ts
2602
+ var import_react_redux = require("react-redux");
2586
2603
  var import_helpers6 = require("@northern.tech/utils/helpers");
2587
2604
  var import_toolkit16 = require("@reduxjs/toolkit");
2588
2605
  var { setSnackbar, uploadProgress } = actions_default;
2589
2606
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2590
- var resetEnvironment = () => {
2591
- keys.map((key) => window.sessionStorage.removeItem(key));
2592
- };
2607
+ var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
2593
2608
  resetEnvironment();
2594
2609
  var commonErrorFallback = "Please check your connection.";
2595
2610
  var commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {
@@ -2615,6 +2630,14 @@ var sessionReducer = (state, action) => {
2615
2630
  }
2616
2631
  return rootReducer(state, action);
2617
2632
  };
2633
+ var rejectionLoggerMiddleware = () => (next) => (action) => {
2634
+ if (action.type.endsWith("/rejected")) {
2635
+ const { error } = action;
2636
+ console.error("Rejection in action:", action);
2637
+ console.error(error.stack);
2638
+ }
2639
+ return next(action);
2640
+ };
2618
2641
  var getConfiguredStore = (options = {}) => {
2619
2642
  const { preloadedState = {}, ...config } = options;
2620
2643
  return (0, import_toolkit16.configureStore)({
@@ -2630,7 +2653,7 @@ var getConfiguredStore = (options = {}) => {
2630
2653
  ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2631
2654
  ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2632
2655
  }
2633
- })
2656
+ }).concat(rejectionLoggerMiddleware)
2634
2657
  });
2635
2658
  };
2636
2659
  var store = getConfiguredStore({
@@ -3182,7 +3205,7 @@ var getDevicesByStatus2 = (0, import_toolkit18.createAsyncThunk)(`${sliceName3}/
3182
3205
  page = defaultPage,
3183
3206
  perPage = defaultPerPage,
3184
3207
  sortOptions = [],
3185
- selectedAttributes = []
3208
+ selectedAttributes = getSelectedDeviceAttribute(getState())
3186
3209
  } = options;
3187
3210
  const state = getState();
3188
3211
  const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
@@ -3295,7 +3318,6 @@ var getReportingLimits = (0, import_toolkit18.createAsyncThunk)(
3295
3318
  })
3296
3319
  );
3297
3320
  var ensureVersionString = (software, fallback) => software.length && software !== "artifact_name" ? software.endsWith(".version") ? software : `${software}.version` : fallback;
3298
- var REPORT_CHART_SIZE_LIMIT = 6;
3299
3321
  var getSingleReportData = (reportConfig, groups) => {
3300
3322
  const { attribute, group, software = "" } = reportConfig;
3301
3323
  const filters = [{ key: "status", scope: "identity", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "accepted" }];
@@ -3375,6 +3397,13 @@ var getDeviceConnect = (0, import_toolkit18.createAsyncThunk)(
3375
3397
  ({ data }) => Promise.all([dispatch(actions3.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])
3376
3398
  )
3377
3399
  );
3400
+ var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
3401
+ var triggerDeviceUpdate = (0, import_toolkit18.createAsyncThunk)(
3402
+ `${sliceName3}/triggerDeviceUpdate`,
3403
+ ({ id, type }, { dispatch }) => general_api_default.post(`${deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
3404
+ () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
3405
+ )
3406
+ );
3378
3407
  var getSessionDetails = (0, import_toolkit18.createAsyncThunk)(`${sliceName3}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {
3379
3408
  const { start: startUnix, end: endUnix } = (0, import_helpers8.dateRangeToUnix)(startDate, endDate);
3380
3409
  const createdAfter = startDate ? `&created_after=${startUnix}` : "";
@@ -3477,12 +3506,12 @@ var deleteAuthset = (0, import_toolkit18.createAsyncThunk)(
3477
3506
  );
3478
3507
  var preauthDevice = (0, import_toolkit18.createAsyncThunk)(
3479
3508
  `${sliceName3}/preauthDevice`,
3480
- (authset, { dispatch }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).catch((err) => {
3509
+ (authset, { dispatch, rejectWithValue }) => general_api_default.post(`${deviceAuthV2}/devices`, authset).then(() => Promise.resolve(dispatch(setSnackbar2("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds)))).catch((err) => {
3481
3510
  if (err.response.status === 409) {
3482
- return Promise.reject("A device with a matching identity data set already exists");
3511
+ return rejectWithValue("A device with a matching identity data set already exists");
3483
3512
  }
3484
3513
  return commonErrorHandler(err, "The device could not be added:", dispatch);
3485
- }).then(() => Promise.resolve(dispatch(setSnackbar2("Device was successfully added to the preauthorization list", TIMEOUTS.fiveSeconds))))
3514
+ })
3486
3515
  );
3487
3516
  var decommissionDevice = (0, import_toolkit18.createAsyncThunk)(
3488
3517
  `${sliceName3}/decommissionDevice`,
@@ -3709,6 +3738,9 @@ var changeNotificationSetting = (0, import_toolkit19.createAsyncThunk)(
3709
3738
  }
3710
3739
  );
3711
3740
 
3741
+ // src/usersSlice/thunks.ts
3742
+ var import_helptips = require("@northern.tech/common-ui/helptips");
3743
+
3712
3744
  // src/api/users-api.ts
3713
3745
  var import_axios3 = __toESM(require("axios"), 1);
3714
3746
  var Api2 = {
@@ -3742,7 +3774,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
3742
3774
  }
3743
3775
  const twoFAError = is2FABackend ? " and verification code" : "";
3744
3776
  const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
3745
- return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.preformatWithRequestID)(err.response, errorMessage), null, "Copy to clipboard")));
3777
+ return Promise.reject(dispatch(setSnackbar3({ message: (0, import_helpers9.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
3746
3778
  };
3747
3779
  var loginUser = (0, import_toolkit20.createAsyncThunk)(
3748
3780
  `${sliceName8}/loginUser`,
@@ -3766,19 +3798,16 @@ var loginUser = (0, import_toolkit20.createAsyncThunk)(
3766
3798
  const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
3767
3799
  setSessionInfo({ token, expiresAt });
3768
3800
  cookies3.remove("JWT", { path: "/" });
3769
- return (
3770
- // @ts-ignore
3771
- Promise.resolve(dispatch(getUser(OWN_USER_ID))).unwrap().catch((e) => {
3772
- cleanUp();
3773
- return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.extractErrorMessage)(e))));
3774
- }).then(() => {
3775
- window.sessionStorage.removeItem("pendings-redirect");
3776
- if (window.location.pathname !== "/ui/") {
3777
- window.location.replace("/ui/");
3778
- }
3779
- return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
3780
- })
3781
- );
3801
+ return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
3802
+ cleanUp();
3803
+ return Promise.reject(dispatch(setSnackbar3((0, import_helpers9.extractErrorMessage)(e))));
3804
+ }).then(() => {
3805
+ window.sessionStorage.removeItem("pendings-redirect");
3806
+ if (window.location.pathname !== "/ui/") {
3807
+ window.location.replace("/ui/");
3808
+ }
3809
+ return Promise.resolve(dispatch(actions8.successfullyLoggedIn({ expiresAt, token })));
3810
+ });
3782
3811
  })
3783
3812
  );
3784
3813
  var logoutUser = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/logoutUser`, (_, { dispatch, getState }) => {
@@ -3796,6 +3825,7 @@ var switchUserOrganization = (0, import_toolkit20.createAsyncThunk)(`${sliceName
3796
3825
  return Promise.reject();
3797
3826
  }
3798
3827
  return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
3828
+ window.sessionStorage.setItem("tenantChanged", "true");
3799
3829
  setSessionInfo({ ...getSessionInfo(), token });
3800
3830
  window.location.reload();
3801
3831
  });
@@ -3836,11 +3866,18 @@ var verify2FA = (0, import_toolkit20.createAsyncThunk)(
3836
3866
  );
3837
3867
  var getUserList = (0, import_toolkit20.createAsyncThunk)(
3838
3868
  `${sliceName8}/getUserList`,
3839
- (_, { dispatch }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
3840
- const users = res.data.reduce((accu, item) => {
3841
- accu[item.id] = item;
3842
- return accu;
3843
- }, {});
3869
+ (_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/users`).then((res) => {
3870
+ const currentUsersById = getUsersById(getState());
3871
+ const users = res.data.reduce(
3872
+ (accu, item) => {
3873
+ accu[item.id] = {
3874
+ ...accu[item.id],
3875
+ ...item
3876
+ };
3877
+ return accu;
3878
+ },
3879
+ { ...currentUsersById }
3880
+ );
3844
3881
  return dispatch(actions8.receivedUserList(users));
3845
3882
  }).catch((err) => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))
3846
3883
  );
@@ -3849,9 +3886,7 @@ var getUser = (0, import_toolkit20.createAsyncThunk)(
3849
3886
  (id, { dispatch, rejectWithValue }) => general_api_default.get(`${useradmApiUrlv1}/users/${id}`).then(
3850
3887
  ({ data: user }) => Promise.all([
3851
3888
  dispatch(actions8.receivedUser(user)),
3852
- // @ts-ignore
3853
3889
  dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),
3854
- // @ts-ignore
3855
3890
  dispatch(updateUserColumnSettings({ currentUserId: user.id })),
3856
3891
  user
3857
3892
  ])
@@ -3898,10 +3933,7 @@ var createUser = (0, import_toolkit20.createAsyncThunk)(
3898
3933
  );
3899
3934
  var removeUser = (0, import_toolkit20.createAsyncThunk)(
3900
3935
  `${sliceName8}/removeUser`,
3901
- (userId, { dispatch }) => (
3902
- // @ts-ignore
3903
- general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar3(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
3904
- )
3936
+ (userId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/users/${userId}`).then(() => Promise.all([dispatch(actions8.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar3(userActions.remove.successMessage))])).catch((err) => userActionErrorHandler(err, "remove", dispatch))
3905
3937
  );
3906
3938
  var editUser = (0, import_toolkit20.createAsyncThunk)(
3907
3939
  `${sliceName8}/editUser`,
@@ -3922,7 +3954,7 @@ var enableUser2fa = (0, import_toolkit20.createAsyncThunk)(
3922
3954
  );
3923
3955
  var disableUser2fa = (0, import_toolkit20.createAsyncThunk)(
3924
3956
  `${sliceName8}/disableUser2fa`,
3925
- (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))))
3957
+ (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))]))
3926
3958
  );
3927
3959
  var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).reduce(
3928
3960
  (accu, [area, definition]) => {
@@ -4075,7 +4107,6 @@ var getPermissionSets = (0, import_toolkit20.createAsyncThunk)(
4075
4107
  accu[permissionSet.name] = permissionSetObject;
4076
4108
  return accu;
4077
4109
  },
4078
- // @ts-ignore
4079
4110
  { ...getState().users.permissionSetsById }
4080
4111
  );
4081
4112
  return Promise.all([dispatch(actions8.receivedPermissionSets(permissionSets)), permissionSets]);
@@ -4168,7 +4199,6 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
4168
4199
  role: {
4169
4200
  ...emptyRole,
4170
4201
  name,
4171
- // @ts-ignore
4172
4202
  description: description ? description : roleState.description,
4173
4203
  uiPermissions: {
4174
4204
  ...emptyUiPermissions,
@@ -4211,10 +4241,7 @@ var editRole = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/editRole`,
4211
4241
  });
4212
4242
  var removeRole = (0, import_toolkit20.createAsyncThunk)(
4213
4243
  `${sliceName8}/removeRole`,
4214
- (roleId, { dispatch }) => (
4215
- // @ts-ignore
4216
- general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar3(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
4217
- )
4244
+ (roleId, { dispatch }) => general_api_default.delete(`${useradmApiUrlv2}/roles/${roleId}`).then(() => Promise.all([dispatch(actions8.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar3(roleActions.remove.successMessage))])).catch((err) => roleActionErrorHandler(err, "remove", dispatch))
4218
4245
  );
4219
4246
  var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
4220
4247
  `${sliceName8}/getGlobalSettings`,
@@ -4225,7 +4252,6 @@ var getGlobalSettings2 = (0, import_toolkit20.createAsyncThunk)(
4225
4252
  );
4226
4253
  var saveGlobalSettings = (0, import_toolkit20.createAsyncThunk)(
4227
4254
  `${sliceName8}/saveGlobalSettings`,
4228
- // @ts-ignore
4229
4255
  ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
4230
4256
  if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
4231
4257
  return;
@@ -4271,11 +4297,9 @@ var saveUserSettings = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/sav
4271
4297
  const tooltipState = getTooltipsState(getState());
4272
4298
  const updatedSettings = {
4273
4299
  ...userSettings,
4274
- // @ts-ignore
4275
4300
  ...settings,
4276
4301
  onboarding: {
4277
4302
  ...onboardingState,
4278
- // @ts-ignore
4279
4303
  ...settings.onboarding
4280
4304
  },
4281
4305
  tooltips: tooltipState
@@ -4319,10 +4343,7 @@ var generateToken = (0, import_toolkit20.createAsyncThunk)(
4319
4343
  );
4320
4344
  var revokeToken = (0, import_toolkit20.createAsyncThunk)(
4321
4345
  `${sliceName8}/revokeToken`,
4322
- (token, { dispatch }) => (
4323
- // @ts-ignore
4324
- general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4325
- )
4346
+ (token, { dispatch }) => general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
4326
4347
  );
4327
4348
  var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
4328
4349
  let tasks = [dispatch(actions8.setTooltipState(remainder))];
@@ -4331,27 +4352,25 @@ var setTooltipReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/
4331
4352
  }
4332
4353
  return Promise.all(tasks);
4333
4354
  });
4334
- var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {
4335
- const updatedTips = tooltips.reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
4355
+ var setAllTooltipsReadState = (0, import_toolkit20.createAsyncThunk)(`${sliceName8}/toggleHelptips`, (readState = READ_STATES.read, { dispatch }) => {
4356
+ const updatedTips = Object.keys(import_helptips.HELPTOOLTIPS).reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
4336
4357
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
4337
4358
  });
4338
4359
  var submitFeedback = (0, import_toolkit20.createAsyncThunk)(
4339
4360
  `${sliceName8}/submitFeedback`,
4340
- // @ts-ignore
4341
- ({ satisfaction, feedback, ...meta }, { dispatch }) => {
4342
- return general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4343
- subject: "feedback submission",
4344
- body: JSON.stringify({ feedback, satisfaction, meta })
4345
- }).then(() => {
4346
- const today = /* @__PURE__ */ new Date();
4347
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4348
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4349
- });
4350
- }
4361
+ ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
4362
+ subject: "feedback submission",
4363
+ body: JSON.stringify({ feedback, satisfaction, meta })
4364
+ }).then(() => {
4365
+ const today = /* @__PURE__ */ new Date();
4366
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
4367
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
4368
+ })
4351
4369
  );
4352
4370
 
4353
4371
  // src/deploymentsSlice/thunks.ts
4354
4372
  var import_helpers10 = require("@northern.tech/utils/helpers");
4373
+ var import_tracking = __toESM(require("@northern.tech/utils/tracking"), 1);
4355
4374
  var import_toolkit21 = require("@reduxjs/toolkit");
4356
4375
  var import_validator = require("validator");
4357
4376
  var { receivedDevice, setSnackbar: setSnackbar4 } = actions_default;
@@ -4408,6 +4427,26 @@ var getDeploymentsByStatus2 = (0, import_toolkit21.createAsyncThunk)(`${sliceNam
4408
4427
  return Promise.all(tasks);
4409
4428
  });
4410
4429
  });
4430
+ var isWithinFirstMonth = (expirationDate) => {
4431
+ if (!expirationDate) {
4432
+ return false;
4433
+ }
4434
+ const endOfFirstMonth = new Date(expirationDate);
4435
+ endOfFirstMonth.setMonth(endOfFirstMonth.getMonth() - 11);
4436
+ return endOfFirstMonth > /* @__PURE__ */ new Date();
4437
+ };
4438
+ var trackDeploymentCreation = (totalDeploymentCount, hasDeployments, trial_expiration) => {
4439
+ import_tracking.default.event({ category: "deployments", action: "create" });
4440
+ if (!totalDeploymentCount) {
4441
+ if (!hasDeployments) {
4442
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment" });
4443
+ if (isWithinFirstMonth(trial_expiration)) {
4444
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_first_month" });
4445
+ }
4446
+ }
4447
+ import_tracking.default.event({ category: "deployments", action: "create_initial_deployment_user" });
4448
+ }
4449
+ };
4411
4450
  var MAX_PREVIOUS_PHASES_COUNT = 5;
4412
4451
  var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {
4413
4452
  let request;
@@ -4418,6 +4457,9 @@ var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/cre
4418
4457
  } else {
4419
4458
  request = general_api_default.post(`${deploymentsApiUrl}/deployments`, newDeployment);
4420
4459
  }
4460
+ const totalDeploymentCount = Object.values(getDeploymentsByStatus(getState())).reduce((accu, item) => accu + item.total, 0);
4461
+ const { hasDeployments } = getGlobalSettings(getState());
4462
+ const { trial_expiration } = getOrganization(getState());
4421
4463
  return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
4422
4464
  const lastslashindex = data.headers.location.lastIndexOf("/");
4423
4465
  const deploymentId = data.headers.location.substring(lastslashindex + 1);
@@ -4432,6 +4474,7 @@ var createDeployment = (0, import_toolkit21.createAsyncThunk)(`${sliceName2}/cre
4432
4474
  dispatch(getSingleDeployment(deploymentId)),
4433
4475
  dispatch(setSnackbar4("Deployment created successfully", TIMEOUTS.fiveSeconds))
4434
4476
  ];
4477
+ trackDeploymentCreation(totalDeploymentCount, hasDeployments, trial_expiration);
4435
4478
  const { canManageUsers } = getUserCapabilities(getState());
4436
4479
  if (canManageUsers) {
4437
4480
  const { phases, retries } = newDeployment;