@northern.tech/store 0.5.1 → 0.5.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 (218) hide show
  1. package/dist/actions.cjs +53 -3
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.d.cts +6 -2
  4. package/dist/actions.d.ts +6 -2
  5. package/dist/actions.js +10 -10
  6. package/dist/api/general-api.cjs +1 -1
  7. package/dist/api/general-api.cjs.map +1 -1
  8. package/dist/api/general-api.d.cts +8 -8
  9. package/dist/api/general-api.d.ts +8 -8
  10. package/dist/api/general-api.js +4 -4
  11. package/dist/api/users-api.cjs +1 -1
  12. package/dist/api/users-api.cjs.map +1 -1
  13. package/dist/api/users-api.d.cts +1 -1
  14. package/dist/api/users-api.d.ts +1 -1
  15. package/dist/api/users-api.js +5 -5
  16. package/dist/appSlice/constants.cjs +1 -0
  17. package/dist/appSlice/constants.cjs.map +1 -1
  18. package/dist/appSlice/constants.d.cts +5 -0
  19. package/dist/appSlice/constants.d.ts +5 -0
  20. package/dist/appSlice/constants.js +1 -1
  21. package/dist/appSlice/index.cjs +7 -3
  22. package/dist/appSlice/index.cjs.map +1 -1
  23. package/dist/appSlice/index.js +3 -3
  24. package/dist/appSlice/mocks.cjs +7 -3
  25. package/dist/appSlice/mocks.cjs.map +1 -1
  26. package/dist/appSlice/mocks.js +3 -3
  27. package/dist/appSlice/thunks.cjs +82 -23
  28. package/dist/appSlice/thunks.cjs.map +1 -1
  29. package/dist/appSlice/thunks.js +25 -25
  30. package/dist/auth.cjs.map +1 -1
  31. package/dist/auth.js +3 -3
  32. package/dist/{chunk-MZNANSS2.js → chunk-4DOSYAJY.js} +2 -2
  33. package/dist/{chunk-4E7ZSEFL.js → chunk-4UJXT6RF.js} +3 -3
  34. package/dist/{chunk-VUFRP6P3.js → chunk-5HYHE4HO.js} +2 -2
  35. package/dist/chunk-5HYHE4HO.js.map +1 -0
  36. package/dist/{chunk-ZJW3QIPM.js → chunk-66NK2ZV2.js} +2 -2
  37. package/dist/{chunk-PGFVHKP5.js → chunk-AVCIWAZB.js} +2 -2
  38. package/dist/{chunk-RS37Y2PQ.js → chunk-BNSSPYCA.js} +4 -4
  39. package/dist/chunk-BNSSPYCA.js.map +1 -0
  40. package/dist/{chunk-QEKN5R7E.js → chunk-CEEXZF5E.js} +4 -4
  41. package/dist/chunk-CEEXZF5E.js.map +1 -0
  42. package/dist/{chunk-UGSLGUS6.js → chunk-CWZKWW74.js} +2 -2
  43. package/dist/{chunk-FQW72QFK.js → chunk-DE25YP6N.js} +62 -54
  44. package/dist/chunk-DE25YP6N.js.map +1 -0
  45. package/dist/{chunk-6KGTHJKC.js → chunk-DXJ2WS3N.js} +9 -5
  46. package/dist/chunk-DXJ2WS3N.js.map +1 -0
  47. package/dist/{chunk-ZIUUV35J.js → chunk-DYN7AU7R.js} +9 -9
  48. package/dist/{chunk-JXQUFKID.js → chunk-GRVTVLIZ.js} +7 -2
  49. package/dist/chunk-GRVTVLIZ.js.map +1 -0
  50. package/dist/{chunk-KC7SKI3U.js → chunk-HLTP624H.js} +8 -5
  51. package/dist/{chunk-KC7SKI3U.js.map → chunk-HLTP624H.js.map} +1 -1
  52. package/dist/{chunk-7PRZYHDP.js → chunk-I6JE3OLT.js} +8 -8
  53. package/dist/{chunk-ABJLRDCO.js → chunk-IY76MO6R.js} +2 -2
  54. package/dist/{chunk-MPYYSFPL.js → chunk-J74LNK6P.js} +11 -11
  55. package/dist/{chunk-YWHRAPDQ.js → chunk-JOK26PI7.js} +51 -18
  56. package/dist/chunk-JOK26PI7.js.map +1 -0
  57. package/dist/{chunk-KJNNEDRV.js → chunk-JZXNRDO2.js} +2 -2
  58. package/dist/{chunk-6XVREXI4.js → chunk-KGSJ7CSA.js} +12 -3
  59. package/dist/{chunk-6XVREXI4.js.map → chunk-KGSJ7CSA.js.map} +1 -1
  60. package/dist/{chunk-OOICURFL.js → chunk-KJJ47UIO.js} +48 -2
  61. package/dist/chunk-KJJ47UIO.js.map +1 -0
  62. package/dist/{chunk-7C4SQBEE.js → chunk-MRXTMI6O.js} +1 -1
  63. package/dist/chunk-MRXTMI6O.js.map +1 -0
  64. package/dist/{chunk-HFOTAPIJ.js → chunk-PY6ID7TL.js} +2 -1
  65. package/dist/chunk-PY6ID7TL.js.map +1 -0
  66. package/dist/{chunk-NQIP7VFB.js → chunk-VCTZ25Q5.js} +9 -9
  67. package/dist/{chunk-YY6SKZDF.js → chunk-W37ETKI6.js} +3 -12
  68. package/dist/chunk-W37ETKI6.js.map +1 -0
  69. package/dist/{chunk-QHK7GGV4.js → chunk-ZZ3YDCYZ.js} +3 -3
  70. package/dist/commonConstants.cjs.map +1 -1
  71. package/dist/commonConstants.d.cts +6 -5
  72. package/dist/commonConstants.d.ts +6 -5
  73. package/dist/commonConstants.js +2 -2
  74. package/dist/commonSelectors.cjs +8 -18
  75. package/dist/commonSelectors.cjs.map +1 -1
  76. package/dist/commonSelectors.js +9 -9
  77. package/dist/constants.cjs +1 -0
  78. package/dist/constants.cjs.map +1 -1
  79. package/dist/constants.d.cts +1 -1
  80. package/dist/constants.d.ts +1 -1
  81. package/dist/constants.js +2 -2
  82. package/dist/deploymentsSlice/constants.js +2 -2
  83. package/dist/deploymentsSlice/index.cjs.map +1 -1
  84. package/dist/deploymentsSlice/index.d.cts +2 -2
  85. package/dist/deploymentsSlice/index.d.ts +2 -2
  86. package/dist/deploymentsSlice/index.js +3 -3
  87. package/dist/deploymentsSlice/mocks.cjs.map +1 -1
  88. package/dist/deploymentsSlice/mocks.js +3 -3
  89. package/dist/deploymentsSlice/selectors.cjs +6 -0
  90. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  91. package/dist/deploymentsSlice/selectors.d.cts +22 -1
  92. package/dist/deploymentsSlice/selectors.d.ts +22 -1
  93. package/dist/deploymentsSlice/selectors.js +5 -3
  94. package/dist/deploymentsSlice/thunks.cjs +84 -23
  95. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  96. package/dist/deploymentsSlice/thunks.d.cts +14 -1
  97. package/dist/deploymentsSlice/thunks.d.ts +14 -1
  98. package/dist/deploymentsSlice/thunks.js +27 -25
  99. package/dist/devicesSlice/constants.js +2 -2
  100. package/dist/devicesSlice/index.js +3 -3
  101. package/dist/devicesSlice/mocks.js +3 -3
  102. package/dist/devicesSlice/selectors.cjs.map +1 -1
  103. package/dist/devicesSlice/selectors.js +3 -3
  104. package/dist/devicesSlice/thunks.cjs +82 -23
  105. package/dist/devicesSlice/thunks.cjs.map +1 -1
  106. package/dist/devicesSlice/thunks.js +25 -25
  107. package/dist/liststatehook.cjs +6 -3
  108. package/dist/liststatehook.cjs.map +1 -1
  109. package/dist/liststatehook.d.cts +4 -2
  110. package/dist/liststatehook.d.ts +4 -2
  111. package/dist/liststatehook.js +3 -3
  112. package/dist/locationutils.cjs +6 -3
  113. package/dist/locationutils.cjs.map +1 -1
  114. package/dist/locationutils.d.cts +3 -1
  115. package/dist/locationutils.d.ts +3 -1
  116. package/dist/locationutils.js +3 -3
  117. package/dist/monitorSlice/index.js +3 -3
  118. package/dist/monitorSlice/mocks.js +3 -3
  119. package/dist/monitorSlice/thunks.cjs +62 -12
  120. package/dist/monitorSlice/thunks.cjs.map +1 -1
  121. package/dist/monitorSlice/thunks.js +21 -21
  122. package/dist/onboardingSlice/thunks.cjs +82 -23
  123. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  124. package/dist/onboardingSlice/thunks.js +25 -25
  125. package/dist/organizationSlice/constants.js +2 -2
  126. package/dist/organizationSlice/index.js +3 -3
  127. package/dist/organizationSlice/mocks.js +3 -3
  128. package/dist/organizationSlice/selectors.cjs +0 -20
  129. package/dist/organizationSlice/selectors.cjs.map +1 -1
  130. package/dist/organizationSlice/selectors.d.cts +1 -155
  131. package/dist/organizationSlice/selectors.d.ts +1 -155
  132. package/dist/organizationSlice/selectors.js +3 -5
  133. package/dist/organizationSlice/thunks.cjs +105 -46
  134. package/dist/organizationSlice/thunks.cjs.map +1 -1
  135. package/dist/organizationSlice/thunks.d.cts +5 -5
  136. package/dist/organizationSlice/thunks.d.ts +5 -5
  137. package/dist/organizationSlice/thunks.js +25 -25
  138. package/dist/releasesSlice/index.cjs +46 -0
  139. package/dist/releasesSlice/index.cjs.map +1 -1
  140. package/dist/releasesSlice/index.d.cts +51 -3
  141. package/dist/releasesSlice/index.d.ts +51 -3
  142. package/dist/releasesSlice/index.js +3 -3
  143. package/dist/releasesSlice/mocks.cjs +46 -0
  144. package/dist/releasesSlice/mocks.cjs.map +1 -1
  145. package/dist/releasesSlice/mocks.d.cts +13 -0
  146. package/dist/releasesSlice/mocks.d.ts +13 -0
  147. package/dist/releasesSlice/mocks.js +3 -3
  148. package/dist/releasesSlice/selectors.cjs +13 -0
  149. package/dist/releasesSlice/selectors.cjs.map +1 -1
  150. package/dist/releasesSlice/selectors.d.cts +186 -1
  151. package/dist/releasesSlice/selectors.d.ts +186 -1
  152. package/dist/releasesSlice/selectors.js +12 -4
  153. package/dist/releasesSlice/thunks.cjs +105 -20
  154. package/dist/releasesSlice/thunks.cjs.map +1 -1
  155. package/dist/releasesSlice/thunks.d.cts +68 -3
  156. package/dist/releasesSlice/thunks.d.ts +68 -3
  157. package/dist/releasesSlice/thunks.js +26 -22
  158. package/dist/selectors.cjs +19 -20
  159. package/dist/selectors.cjs.map +1 -1
  160. package/dist/selectors.d.cts +5 -3
  161. package/dist/selectors.d.ts +5 -3
  162. package/dist/selectors.js +19 -11
  163. package/dist/sockethook.cjs.map +1 -1
  164. package/dist/sockethook.js +2 -2
  165. package/dist/store.cjs +53 -3
  166. package/dist/store.cjs.map +1 -1
  167. package/dist/store.d.cts +11 -110
  168. package/dist/store.d.ts +11 -110
  169. package/dist/store.js +12 -12
  170. package/dist/storehooks.cjs +149 -60
  171. package/dist/storehooks.cjs.map +1 -1
  172. package/dist/storehooks.js +27 -28
  173. package/dist/storehooks.js.map +1 -1
  174. package/dist/thunks.cjs +152 -56
  175. package/dist/thunks.cjs.map +1 -1
  176. package/dist/thunks.d.cts +3 -3
  177. package/dist/thunks.d.ts +3 -3
  178. package/dist/thunks.js +33 -27
  179. package/dist/useDeploymentDevice.cjs +82 -23
  180. package/dist/useDeploymentDevice.cjs.map +1 -1
  181. package/dist/useDeploymentDevice.js +25 -25
  182. package/dist/usersSlice/constants.js +2 -2
  183. package/dist/usersSlice/index.js +3 -3
  184. package/dist/usersSlice/mocks.js +3 -3
  185. package/dist/usersSlice/selectors.cjs.map +1 -1
  186. package/dist/usersSlice/selectors.js +4 -4
  187. package/dist/usersSlice/thunks.cjs +84 -25
  188. package/dist/usersSlice/thunks.cjs.map +1 -1
  189. package/dist/usersSlice/thunks.d.cts +18 -10
  190. package/dist/usersSlice/thunks.d.ts +18 -10
  191. package/dist/usersSlice/thunks.js +27 -27
  192. package/dist/utils.cjs +1 -1
  193. package/dist/utils.cjs.map +1 -1
  194. package/dist/utils.js +3 -3
  195. package/package.json +5 -5
  196. package/dist/chunk-6KGTHJKC.js.map +0 -1
  197. package/dist/chunk-7C4SQBEE.js.map +0 -1
  198. package/dist/chunk-FQW72QFK.js.map +0 -1
  199. package/dist/chunk-HFOTAPIJ.js.map +0 -1
  200. package/dist/chunk-JXQUFKID.js.map +0 -1
  201. package/dist/chunk-OOICURFL.js.map +0 -1
  202. package/dist/chunk-QEKN5R7E.js.map +0 -1
  203. package/dist/chunk-RS37Y2PQ.js.map +0 -1
  204. package/dist/chunk-VUFRP6P3.js.map +0 -1
  205. package/dist/chunk-YWHRAPDQ.js.map +0 -1
  206. package/dist/chunk-YY6SKZDF.js.map +0 -1
  207. /package/dist/{chunk-MZNANSS2.js.map → chunk-4DOSYAJY.js.map} +0 -0
  208. /package/dist/{chunk-4E7ZSEFL.js.map → chunk-4UJXT6RF.js.map} +0 -0
  209. /package/dist/{chunk-ZJW3QIPM.js.map → chunk-66NK2ZV2.js.map} +0 -0
  210. /package/dist/{chunk-PGFVHKP5.js.map → chunk-AVCIWAZB.js.map} +0 -0
  211. /package/dist/{chunk-UGSLGUS6.js.map → chunk-CWZKWW74.js.map} +0 -0
  212. /package/dist/{chunk-ZIUUV35J.js.map → chunk-DYN7AU7R.js.map} +0 -0
  213. /package/dist/{chunk-7PRZYHDP.js.map → chunk-I6JE3OLT.js.map} +0 -0
  214. /package/dist/{chunk-ABJLRDCO.js.map → chunk-IY76MO6R.js.map} +0 -0
  215. /package/dist/{chunk-MPYYSFPL.js.map → chunk-J74LNK6P.js.map} +0 -0
  216. /package/dist/{chunk-KJNNEDRV.js.map → chunk-JZXNRDO2.js.map} +0 -0
  217. /package/dist/{chunk-NQIP7VFB.js.map → chunk-VCTZ25Q5.js.map} +0 -0
  218. /package/dist/{chunk-QHK7GGV4.js.map → chunk-ZZ3YDCYZ.js.map} +0 -0
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(storehooks_exports);
37
37
  var import_react2 = require("react");
38
38
  var import_react_redux2 = require("react-redux");
39
39
  var import_helpers15 = require("@northern.tech/utils/helpers");
40
- var import_dayjs3 = __toESM(require("dayjs"), 1);
40
+ var import_dayjs2 = __toESM(require("dayjs"), 1);
41
41
  var import_duration = __toESM(require("dayjs/plugin/duration.js"), 1);
42
42
  var import_universal_cookie6 = __toESM(require("universal-cookie"), 1);
43
43
 
@@ -61,6 +61,7 @@ var emptyChartSelection = { software: "", group: "", chartType: chartTypes.bar.k
61
61
  var defaultReportType = "distribution";
62
62
  var defaultReports = [{ ...emptyChartSelection, group: null, attribute: "artifact_name", type: defaultReportType }];
63
63
  var locations = {
64
+ cn: { key: "cn", title: "China", location: "cn.hosted.mender.io" },
64
65
  eu: { key: "eu", title: "EU", location: "eu.hosted.mender.io" },
65
66
  us: { key: "us", title: "US", location: "hosted.mender.io" }
66
67
  };
@@ -783,6 +784,7 @@ var initialState = {
783
784
  },
784
785
  // return boolean rather than organization details
785
786
  features: {
787
+ hasAiEnabled: false,
786
788
  hasAuditlogs: false,
787
789
  hasDeltaProgress: false,
788
790
  hasMultitenancy: false,
@@ -791,7 +793,6 @@ var initialState = {
791
793
  hasFeedbackEnabled: false,
792
794
  hasMonitor: false,
793
795
  hasReporting: false,
794
- isDemoMode: false,
795
796
  isHosted: true,
796
797
  isEnterprise: false
797
798
  },
@@ -842,8 +843,12 @@ var appSlice = (0, import_toolkit.createSlice)({
842
843
  };
843
844
  },
844
845
  setSnackbar: (state, { payload }) => {
845
- if (typeof payload === "string") {
846
- state.snackbar.message = payload;
846
+ if (typeof payload === "string" || payload instanceof String) {
847
+ state.snackbar = {
848
+ ...initialState.snackbar,
849
+ message: payload,
850
+ open: !!payload
851
+ };
847
852
  return;
848
853
  }
849
854
  const { message, autoHideDuration, action, preventClickToCopy = false } = payload;
@@ -1435,6 +1440,23 @@ var initialState7 = {
1435
1440
  }
1436
1441
  */
1437
1442
  },
1443
+ deltaJobs: {
1444
+ /*
1445
+ [jobId]: {
1446
+ id: '',
1447
+ ...
1448
+ }
1449
+ */
1450
+ },
1451
+ deltaJobsList: {
1452
+ ...import_constants5.DEVICE_LIST_DEFAULTS,
1453
+ jobIds: [],
1454
+ total: 0,
1455
+ sort: {
1456
+ direction: import_constants5.SORTING_OPTIONS.desc,
1457
+ key: "started"
1458
+ }
1459
+ },
1438
1460
  releasesList: {
1439
1461
  ...import_constants5.DEVICE_LIST_DEFAULTS,
1440
1462
  searchedIds: [],
@@ -1453,6 +1475,7 @@ var initialState7 = {
1453
1475
  },
1454
1476
  tags: [],
1455
1477
  updateTypes: [],
1478
+ selectedJob: null,
1456
1479
  /*
1457
1480
  * Return single release with corresponding Artifacts
1458
1481
  */
@@ -1485,6 +1508,34 @@ var releaseSlice = (0, import_toolkit7.createSlice)({
1485
1508
  },
1486
1509
  setReleaseListState: (state, action) => {
1487
1510
  state.releasesList = action.payload;
1511
+ },
1512
+ receivedDeltaJobs: (state, action) => {
1513
+ const { jobs, total } = action.payload;
1514
+ state.deltaJobs = jobs.reduce(
1515
+ (accu, job) => {
1516
+ accu[job.id] = {
1517
+ ...accu[job.id],
1518
+ ...job
1519
+ };
1520
+ return accu;
1521
+ },
1522
+ { ...state.deltaJobs }
1523
+ );
1524
+ state.deltaJobsList.jobIds = jobs.map((job) => job.id);
1525
+ state.deltaJobsList.total = total;
1526
+ },
1527
+ receivedDeltaJobDetails: (state, action) => {
1528
+ const job = action.payload;
1529
+ state.deltaJobs[job.id] = {
1530
+ ...state.deltaJobs[job.id],
1531
+ ...job
1532
+ };
1533
+ },
1534
+ setDeltaJobsListState: (state, action) => {
1535
+ state.deltaJobsList = { ...state.deltaJobsList, ...action.payload };
1536
+ },
1537
+ setSelectedJob: (state, action) => {
1538
+ state.selectedJob = action.payload;
1488
1539
  }
1489
1540
  }
1490
1541
  });
@@ -1701,6 +1752,10 @@ var getDeploymentsById = (state) => state.deployments.byId;
1701
1752
  var getDeploymentsByStatus = (state) => state.deployments.byStatus;
1702
1753
  var getSelectedDeploymentDeviceIds = (state) => state.deployments.selectedDeviceIds;
1703
1754
  var getDeploymentsSelectionState = (state) => state.deployments.selectionState;
1755
+ var getDeploymentById = (0, import_toolkit10.createSelector)(
1756
+ [getDeploymentsById, (_, deploymentId) => deploymentId],
1757
+ (deploymentsById, deploymentId = "") => deploymentsById[deploymentId]
1758
+ );
1704
1759
  var getMappedDeploymentSelection = (0, import_toolkit10.createSelector)(
1705
1760
  [getDeploymentsSelectionState, (_, deploymentsState) => deploymentsState, getDeploymentsById],
1706
1761
  (selectionState, deploymentsState, deploymentsById) => {
@@ -1850,8 +1905,6 @@ var getOnboarding = (state) => state.onboarding;
1850
1905
 
1851
1906
  // src/organizationSlice/selectors.ts
1852
1907
  var import_toolkit12 = require("@reduxjs/toolkit");
1853
- var import_dayjs = __toESM(require("dayjs"), 1);
1854
- var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"), 1);
1855
1908
  var getOrganization = (state) => state.organization.organization;
1856
1909
  var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
1857
1910
  var getAuditlogState = (state) => state.organization.auditlog.selectionState;
@@ -1880,12 +1933,6 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
1880
1933
  const [eventAction, eventTime] = atob(selectedId).split("|");
1881
1934
  return events.find((item) => item.action === eventAction && item.time === eventTime);
1882
1935
  });
1883
- import_dayjs.default.extend(import_relativeTime.default);
1884
- var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
1885
- var getHasCurrentPricing = (0, import_toolkit12.createSelector)(
1886
- [getOrganization],
1887
- ({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
1888
- );
1889
1936
 
1890
1937
  // src/releasesSlice/selectors.ts
1891
1938
  var import_toolkit13 = require("@reduxjs/toolkit");
@@ -2055,6 +2102,10 @@ var getHasReleases = (0, import_toolkit13.createSelector)(
2055
2102
  );
2056
2103
  var getSelectedRelease = (0, import_toolkit13.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
2057
2104
  var getSelectedReleases = (0, import_toolkit13.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
2105
+ var getDeltaJobsById = (state) => state.releases.deltaJobs;
2106
+ var getDeltaJobById = (0, import_toolkit13.createSelector)([getDeltaJobsById, (_, jobId) => jobId], (byId, jobId) => byId[jobId]);
2107
+ var getSelectedJobId = (state) => state.releases.selectedJob;
2108
+ var getSelectedJob = (0, import_toolkit13.createSelector)([getDeltaJobsById, getSelectedJobId], (byId, jobId) => byId[jobId || ""]);
2058
2109
 
2059
2110
  // src/usersSlice/selectors.ts
2060
2111
  var import_toolkit14 = require("@reduxjs/toolkit");
@@ -2314,7 +2365,7 @@ var import_universal_cookie2 = __toESM(require("universal-cookie"), 1);
2314
2365
  // src/api/general-api.ts
2315
2366
  var import_axios = __toESM(require("axios"), 1);
2316
2367
  var unauthorizedRedirect = (error) => {
2317
- if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken()) {
2368
+ if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken() && !window.location.pathname.endsWith("/subscription")) {
2318
2369
  cleanUp();
2319
2370
  window.location.replace("/ui/");
2320
2371
  }
@@ -2904,6 +2955,15 @@ var saveDeltaDeploymentsConfig = createAppAsyncThunk(
2904
2955
  });
2905
2956
  }
2906
2957
  );
2958
+ var generateDeploymentLogAnalysis = createAppAsyncThunk(
2959
+ `${sliceName2}/generateDeploymentLogAnalysis`,
2960
+ ({ deploymentId, deviceId }, { dispatch, rejectWithValue }) => general_api_default.get(`${import_constants5.apiRoot}/v1alpha1/deployments/deployments/${deploymentId}/devices/${deviceId}/log/explain`).then(({ data: result }) => Promise.resolve(result)).catch((err) => {
2961
+ if (err.response.status === 429) {
2962
+ return rejectWithValue(err.response);
2963
+ }
2964
+ commonErrorHandler(err, "There was an error analysing the deployment log:", dispatch);
2965
+ })
2966
+ );
2907
2967
 
2908
2968
  // src/devicesSlice/thunks.tsx
2909
2969
  var import_react_router_dom = require("react-router-dom");
@@ -2983,15 +3043,15 @@ var removeDevicesFromGroup = createAppAsyncThunk(
2983
3043
  )
2984
3044
  );
2985
3045
  var getGroupNotification = (newGroup, selectedGroup) => {
2986
- const successMessage2 = "The group was updated successfully";
3046
+ const successMessage = "The group was updated successfully";
2987
3047
  if (newGroup === selectedGroup) {
2988
- return { message: successMessage2, autoHideDuration: TIMEOUTS.fiveSeconds };
3048
+ return { message: successMessage, autoHideDuration: TIMEOUTS.fiveSeconds };
2989
3049
  }
2990
3050
  return {
2991
3051
  action: "",
2992
3052
  autoHideDuration: TIMEOUTS.fiveSeconds,
2993
3053
  message: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
2994
- successMessage2,
3054
+ successMessage,
2995
3055
  " - ",
2996
3056
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom.Link, { to: `/devices?inventory=group:eq:${newGroup}`, children: "click here" }),
2997
3057
  " to see it."
@@ -3523,9 +3583,10 @@ var getDeviceConnect = createAppAsyncThunk(
3523
3583
  var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
3524
3584
  var triggerDeviceUpdate = createAppAsyncThunk(
3525
3585
  `${sliceName3}/triggerDeviceUpdate`,
3526
- ({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
3527
- () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
3528
- )
3586
+ ({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).catch((err) => commonErrorHandler(err, `The request couldn\u2019t be sent.`, dispatch)).then(() => {
3587
+ dispatch(setSnackbar3("Request has been sent."));
3588
+ return new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds));
3589
+ })
3529
3590
  );
3530
3591
  var getSessionDetails = createAppAsyncThunk(
3531
3592
  `${sliceName3}/getSessionDetails`,
@@ -3961,13 +4022,13 @@ var advanceOnboarding = createAppAsyncThunk(`${sliceName5}/advanceOnboarding`, (
3961
4022
  // src/organizationSlice/thunks.ts
3962
4023
  var import_MenderTypes2 = require("@northern.tech/types/MenderTypes");
3963
4024
  var import_helpers11 = require("@northern.tech/utils/helpers");
3964
- var import_dayjs2 = __toESM(require("dayjs"), 1);
4025
+ var import_dayjs = __toESM(require("dayjs"), 1);
3965
4026
  var import_utc = __toESM(require("dayjs/plugin/utc.js"), 1);
3966
4027
  var import_jwt_decode = require("jwt-decode");
3967
4028
  var import_md5 = __toESM(require("md5"), 1);
3968
4029
  var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
3969
4030
  var cookies4 = new import_universal_cookie4.default();
3970
- import_dayjs2.default.extend(import_utc.default);
4031
+ import_dayjs.default.extend(import_utc.default);
3971
4032
  var { setAnnouncement, setSnackbar: setSnackbar4 } = actions_default;
3972
4033
  var { page: defaultPage4, perPage: defaultPerPage4 } = import_constants5.DEVICE_LIST_DEFAULTS;
3973
4034
  var cancelRequest = createAppAsyncThunk(`${sliceName6}/cancelRequest`, (reason, { dispatch, getState }) => {
@@ -3994,10 +4055,12 @@ var createOrganizationTrial = createAppAsyncThunk(`${sliceName6}/createOrganizat
3994
4055
  const targetLocation = getTargetLocation(key);
3995
4056
  const target = `${targetLocation}${import_constants5.tenantadmApiUrlv2}/tenants/trial`;
3996
4057
  return general_api_default.postUnauthorized(target, data).catch((err) => {
3997
- if (err.response.status >= 400 && err.response.status < 500) {
4058
+ if (err.response?.status >= 400 && err.response?.status < 500) {
3998
4059
  dispatch(setSnackbar4({ message: err.response.data.error, autoHideDuration: TIMEOUTS.fiveSeconds }));
3999
- return Promise.reject(err);
4060
+ } else {
4061
+ dispatch(setSnackbar4({ message: "There was an error creating your account", autoHideDuration: TIMEOUTS.fiveSeconds }));
4000
4062
  }
4063
+ return Promise.reject(err);
4001
4064
  }).then(({ headers }) => {
4002
4065
  cookies4.remove("oauth");
4003
4066
  cookies4.remove("externalID");
@@ -4179,32 +4242,29 @@ var getUserOrganization = createAppAsyncThunk(
4179
4242
  );
4180
4243
  var getUserBilling = createAppAsyncThunk(
4181
4244
  `${sliceName6}/getUserBilling`,
4182
- (_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).then((res) => dispatch(actions6.setBillingProfile(res.data)))
4245
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).catch((err) => commonErrorHandler(err, "There was an error getting your billing profile:", dispatch, commonErrorFallback)).then((res) => dispatch(actions6.setBillingProfile(res.data)))
4183
4246
  );
4184
- var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, (_, { dispatch }) => {
4185
- const tasks = [dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap(), dispatch(getCurrentSubscription()).unwrap()];
4186
- Promise.all(tasks).then(([currentPreview, currentSubscription]) => dispatch(actions6.setSubscription({ ...currentPreview, ...currentSubscription })));
4247
+ var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, async (_, { dispatch }) => {
4248
+ const currentSubscription = await dispatch(getCurrentSubscription()).unwrap();
4249
+ const currentPreview = await dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap();
4250
+ return dispatch(actions6.setSubscription({ ...currentPreview, ...currentSubscription }));
4187
4251
  });
4188
4252
  var getBillingPreview = createAppAsyncThunk(
4189
4253
  `${sliceName6}/getBillingPreview`,
4190
- (order) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).then(
4191
- ({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data
4192
- )
4254
+ (order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).catch((err) => commonErrorHandler(err, "There was an error getting your billing information:", dispatch, commonErrorFallback)).then(({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data)
4193
4255
  );
4194
4256
  var getCurrentSubscription = createAppAsyncThunk(
4195
4257
  `${sliceName6}/getCurrentSubscription`,
4196
- () => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data)
4258
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data).catch((err) => {
4259
+ if (err.response && err.response.status === 404) {
4260
+ throw new Error("Request failed with status code 404");
4261
+ }
4262
+ return commonErrorHandler(err, "There was an error retrieving your current subscription", dispatch, commonErrorFallback);
4263
+ })
4197
4264
  );
4198
- var successMessage = (planId) => `Thank you! You have successfully subscribed to the ${PLANS[planId].name} plan. You can view and edit your billing details on the Organization and billing page.`;
4199
4265
  var requestPlanUpgrade = createAppAsyncThunk(
4200
4266
  `${sliceName6}/requestPlanUpgrade`,
4201
- (order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`, order).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(
4202
- () => Promise.all([
4203
- dispatch(setSnackbar4(successMessage(order.plan))),
4204
- setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds),
4205
- dispatch(getUserOrganization())
4206
- ])
4207
- )
4267
+ (order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`, order).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(() => Promise.all([setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds), dispatch(getUserOrganization())]))
4208
4268
  );
4209
4269
  var sendSupportMessage = createAppAsyncThunk(
4210
4270
  `${sliceName6}/sendSupportMessage`,
@@ -4321,7 +4381,7 @@ var commonFields = {
4321
4381
  issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
4322
4382
  open: { parse: Boolean, select: defaultSelector, target: "open" }
4323
4383
  };
4324
- var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type }).reduce(
4384
+ var formatReleases = ({ pageState: { id, searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type, id }).reduce(
4325
4385
  (accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
4326
4386
  selectedTags.map((tag) => `tag=${tag}`)
4327
4387
  ).join("&");
@@ -4417,6 +4477,18 @@ var getArtifactUrl = createAppAsyncThunk(
4417
4477
  return dispatch(actions7.receiveRelease(release));
4418
4478
  })
4419
4479
  );
4480
+ var pollLocation = async (location, attempt = 1, maxAttempts = 5, delay = TIMEOUTS.oneSecond) => {
4481
+ try {
4482
+ await general_api_default.get(location);
4483
+ return Promise.resolve();
4484
+ } catch {
4485
+ if (attempt >= maxAttempts) {
4486
+ throw new Error(`Couldn't get ${location} after ${maxAttempts} attempts`);
4487
+ }
4488
+ await new Promise((resolve) => setTimeout(resolve, delay));
4489
+ return pollLocation(location, attempt + 1, maxAttempts, delay);
4490
+ }
4491
+ };
4420
4492
  var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file, meta }, { dispatch }) => {
4421
4493
  const formData = Object.entries(meta).reduce((accu, [key, value]) => {
4422
4494
  if (Array.isArray(value)) {
@@ -4441,13 +4513,18 @@ var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file
4441
4513
  (e) => dispatch(uploadProgress3({ id: uploadId, progress: progress(e) })),
4442
4514
  cancelSource.signal
4443
4515
  )
4444
- ]).then(() => {
4445
- setTimeout(() => {
4446
- dispatch(getReleases());
4447
- dispatch(selectRelease(file.name));
4448
- }, TIMEOUTS.oneSecond);
4449
- return Promise.resolve(dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds })));
4450
- }).catch((err) => {
4516
+ ]).then((tasks) => {
4517
+ const generateResponse = tasks[tasks.length - 1];
4518
+ const generateLocation = generateResponse.headers[import_constants5.headerNames.location];
4519
+ const location = generateLocation.replace("/generate", "");
4520
+ return pollLocation(location);
4521
+ }).then(
4522
+ () => Promise.all([
4523
+ dispatch(getReleases()),
4524
+ dispatch(selectRelease(meta.name)),
4525
+ dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds }))
4526
+ ])
4527
+ ).catch((err) => {
4451
4528
  if ((0, import_axios3.isCancel)(err)) {
4452
4529
  return dispatch(setSnackbar5({ message: "The artifact generation has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
4453
4530
  }
@@ -4670,6 +4747,20 @@ var getUpdateTypes = createAppAsyncThunk(
4670
4747
  `${sliceName7}/getReleaseTypes`,
4671
4748
  (_, { dispatch }) => general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/releases/all/types`).catch((err) => commonErrorHandler(err, `Existing update types couldn't be retrieved.`, dispatch)).then(({ data: types }) => Promise.resolve(dispatch(actions7.receiveReleaseTypes(types))))
4672
4749
  );
4750
+ var getDeltaGenerationJobs = createAppAsyncThunk(`${sliceName7}/getDeltaGenerationJobs`, (options = {}, { dispatch }) => {
4751
+ const { page = defaultPage5, perPage = defaultPerPage5, sort = {} } = options;
4752
+ const { key: sortKey, direction: sortDirection } = sort;
4753
+ const sortParam = sortKey && sortDirection ? `&sort=${sortKey}:${sortDirection}` : "";
4754
+ return general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs?page=${page}&per_page=${perPage}${sortParam}`).then(({ data, headers }) => {
4755
+ const total = Number(headers[import_constants5.headerNames.total]) || data.length;
4756
+ const result = { jobs: data, total };
4757
+ return Promise.all([dispatch(actions7.receivedDeltaJobs(result)), result]);
4758
+ }).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation jobs:", dispatch));
4759
+ });
4760
+ var getDeltaGenerationJobDetails = createAppAsyncThunk(
4761
+ `${sliceName7}/getDeltaGenerationJobDetails`,
4762
+ (jobId, { dispatch }) => general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs/${jobId}`).then(({ data }) => dispatch(actions7.receivedDeltaJobDetails(data))).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation job details:", dispatch))
4763
+ );
4673
4764
 
4674
4765
  // src/usersSlice/thunks.ts
4675
4766
  var import_helpers14 = require("@northern.tech/utils/helpers");
@@ -5324,23 +5415,23 @@ var setAllTooltipsReadState = createAppAsyncThunk(
5324
5415
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
5325
5416
  }
5326
5417
  );
5327
- var submitFeedback = createAppAsyncThunk(
5418
+ var submitUserFeedback = createAppAsyncThunk(
5328
5419
  `${sliceName8}/submitFeedback`,
5329
- ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/contact/support`, {
5330
- subject: "feedback submission",
5331
- body: JSON.stringify({ feedback, satisfaction, meta })
5332
- }).then(() => {
5333
- const today = /* @__PURE__ */ new Date();
5334
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
5335
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
5420
+ ({ formId, feedback }, { dispatch }) => general_api_default.post(`${import_constants5.useradmApiUrlv2}/support/feedback/${formId}`, feedback).then(() => {
5421
+ if (formId === "product") {
5422
+ const today = /* @__PURE__ */ new Date();
5423
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
5424
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
5425
+ }
5336
5426
  })
5337
5427
  );
5338
5428
 
5339
5429
  // src/storehooks.ts
5340
5430
  var cookies6 = new import_universal_cookie6.default();
5341
- import_dayjs3.default.extend(import_duration.default);
5431
+ import_dayjs2.default.extend(import_duration.default);
5342
5432
  var { setDeviceListState: setDeviceListState2, setFirstLoginAfterSignup: setFirstLoginAfterSignup2, setTooltipsState, setShowStartupNotification } = actions_default;
5343
5433
  var featureFlags = [
5434
+ "hasAiEnabled",
5344
5435
  "hasAuditlogs",
5345
5436
  "hasMultitenancy",
5346
5437
  "hasDeltaProgress",
@@ -5365,7 +5456,6 @@ var parseEnvironmentInfo = () => (dispatch, getState) => {
5365
5456
  demoArtifactPort: port,
5366
5457
  disableOnboarding,
5367
5458
  integrationVersion,
5368
- isDemoMode,
5369
5459
  menderVersion,
5370
5460
  menderArtifactVersion,
5371
5461
  metaMenderVersion
@@ -5374,8 +5464,7 @@ var parseEnvironmentInfo = () => (dispatch, getState) => {
5374
5464
  environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});
5375
5465
  environmentFeatures = {
5376
5466
  ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),
5377
- isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes("hosted.mender.io"),
5378
- isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)
5467
+ isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes("hosted.mender.io")
5379
5468
  };
5380
5469
  onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;
5381
5470
  versionInfo = {
@@ -5468,7 +5557,7 @@ var useAppInit = (userId) => {
5468
5557
  ];
5469
5558
  tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });
5470
5559
  if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {
5471
- const duration = import_dayjs3.default.duration(interval, intervalUnit);
5560
+ const duration = import_dayjs2.default.duration(interval, intervalUnit);
5472
5561
  const days = duration.asDays();
5473
5562
  if (days < 1) {
5474
5563
  tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));