@northern.tech/store 0.5.2 → 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 (216) hide show
  1. package/dist/actions.cjs +47 -0
  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 +1 -0
  22. package/dist/appSlice/index.cjs.map +1 -1
  23. package/dist/appSlice/index.js +3 -3
  24. package/dist/appSlice/mocks.cjs +1 -0
  25. package/dist/appSlice/mocks.cjs.map +1 -1
  26. package/dist/appSlice/mocks.js +3 -3
  27. package/dist/appSlice/thunks.cjs +76 -20
  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-R6KRH2IY.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-UE5N5VO3.js → chunk-CEEXZF5E.js} +3 -3
  41. package/dist/{chunk-UGSLGUS6.js → chunk-CWZKWW74.js} +2 -2
  42. package/dist/{chunk-3P3IE42O.js → chunk-DE25YP6N.js} +62 -54
  43. package/dist/chunk-DE25YP6N.js.map +1 -0
  44. package/dist/{chunk-QYLGIR4W.js → chunk-DXJ2WS3N.js} +3 -2
  45. package/dist/chunk-DXJ2WS3N.js.map +1 -0
  46. package/dist/{chunk-H5FAPMJJ.js → chunk-DYN7AU7R.js} +9 -9
  47. package/dist/{chunk-JXQUFKID.js → chunk-GRVTVLIZ.js} +7 -2
  48. package/dist/chunk-GRVTVLIZ.js.map +1 -0
  49. package/dist/{chunk-KC7SKI3U.js → chunk-HLTP624H.js} +8 -5
  50. package/dist/{chunk-KC7SKI3U.js.map → chunk-HLTP624H.js.map} +1 -1
  51. package/dist/{chunk-F26IKSML.js → chunk-I6JE3OLT.js} +8 -8
  52. package/dist/{chunk-ABJLRDCO.js → chunk-IY76MO6R.js} +2 -2
  53. package/dist/{chunk-V3QEONX7.js → chunk-J74LNK6P.js} +11 -11
  54. package/dist/{chunk-QKPV5RRN.js → chunk-JOK26PI7.js} +51 -18
  55. package/dist/chunk-JOK26PI7.js.map +1 -0
  56. package/dist/{chunk-KJNNEDRV.js → chunk-JZXNRDO2.js} +2 -2
  57. package/dist/{chunk-MSOXMRF7.js → chunk-KGSJ7CSA.js} +12 -3
  58. package/dist/{chunk-MSOXMRF7.js.map → chunk-KGSJ7CSA.js.map} +1 -1
  59. package/dist/{chunk-OOICURFL.js → chunk-KJJ47UIO.js} +48 -2
  60. package/dist/chunk-KJJ47UIO.js.map +1 -0
  61. package/dist/{chunk-7C4SQBEE.js → chunk-MRXTMI6O.js} +1 -1
  62. package/dist/chunk-MRXTMI6O.js.map +1 -0
  63. package/dist/{chunk-HFOTAPIJ.js → chunk-PY6ID7TL.js} +2 -1
  64. package/dist/chunk-PY6ID7TL.js.map +1 -0
  65. package/dist/{chunk-SCZLNFB5.js → chunk-VCTZ25Q5.js} +9 -9
  66. package/dist/{chunk-YY6SKZDF.js → chunk-W37ETKI6.js} +3 -12
  67. package/dist/chunk-W37ETKI6.js.map +1 -0
  68. package/dist/{chunk-QHK7GGV4.js → chunk-ZZ3YDCYZ.js} +3 -3
  69. package/dist/commonConstants.cjs.map +1 -1
  70. package/dist/commonConstants.d.cts +6 -5
  71. package/dist/commonConstants.d.ts +6 -5
  72. package/dist/commonConstants.js +2 -2
  73. package/dist/commonSelectors.cjs +8 -18
  74. package/dist/commonSelectors.cjs.map +1 -1
  75. package/dist/commonSelectors.js +9 -9
  76. package/dist/constants.cjs +1 -0
  77. package/dist/constants.cjs.map +1 -1
  78. package/dist/constants.d.cts +1 -1
  79. package/dist/constants.d.ts +1 -1
  80. package/dist/constants.js +2 -2
  81. package/dist/deploymentsSlice/constants.js +2 -2
  82. package/dist/deploymentsSlice/index.cjs.map +1 -1
  83. package/dist/deploymentsSlice/index.d.cts +2 -2
  84. package/dist/deploymentsSlice/index.d.ts +2 -2
  85. package/dist/deploymentsSlice/index.js +3 -3
  86. package/dist/deploymentsSlice/mocks.cjs.map +1 -1
  87. package/dist/deploymentsSlice/mocks.js +3 -3
  88. package/dist/deploymentsSlice/selectors.cjs +6 -0
  89. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  90. package/dist/deploymentsSlice/selectors.d.cts +22 -1
  91. package/dist/deploymentsSlice/selectors.d.ts +22 -1
  92. package/dist/deploymentsSlice/selectors.js +5 -3
  93. package/dist/deploymentsSlice/thunks.cjs +78 -20
  94. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  95. package/dist/deploymentsSlice/thunks.d.cts +14 -1
  96. package/dist/deploymentsSlice/thunks.d.ts +14 -1
  97. package/dist/deploymentsSlice/thunks.js +27 -25
  98. package/dist/devicesSlice/constants.js +2 -2
  99. package/dist/devicesSlice/index.js +3 -3
  100. package/dist/devicesSlice/mocks.js +3 -3
  101. package/dist/devicesSlice/selectors.cjs.map +1 -1
  102. package/dist/devicesSlice/selectors.js +3 -3
  103. package/dist/devicesSlice/thunks.cjs +76 -20
  104. package/dist/devicesSlice/thunks.cjs.map +1 -1
  105. package/dist/devicesSlice/thunks.js +25 -25
  106. package/dist/liststatehook.cjs +6 -3
  107. package/dist/liststatehook.cjs.map +1 -1
  108. package/dist/liststatehook.d.cts +4 -2
  109. package/dist/liststatehook.d.ts +4 -2
  110. package/dist/liststatehook.js +3 -3
  111. package/dist/locationutils.cjs +6 -3
  112. package/dist/locationutils.cjs.map +1 -1
  113. package/dist/locationutils.d.cts +3 -1
  114. package/dist/locationutils.d.ts +3 -1
  115. package/dist/locationutils.js +3 -3
  116. package/dist/monitorSlice/index.js +3 -3
  117. package/dist/monitorSlice/mocks.js +3 -3
  118. package/dist/monitorSlice/thunks.cjs +56 -9
  119. package/dist/monitorSlice/thunks.cjs.map +1 -1
  120. package/dist/monitorSlice/thunks.js +21 -21
  121. package/dist/onboardingSlice/thunks.cjs +76 -20
  122. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  123. package/dist/onboardingSlice/thunks.js +25 -25
  124. package/dist/organizationSlice/constants.js +2 -2
  125. package/dist/organizationSlice/index.js +3 -3
  126. package/dist/organizationSlice/mocks.js +3 -3
  127. package/dist/organizationSlice/selectors.cjs +0 -20
  128. package/dist/organizationSlice/selectors.cjs.map +1 -1
  129. package/dist/organizationSlice/selectors.d.cts +1 -155
  130. package/dist/organizationSlice/selectors.d.ts +1 -155
  131. package/dist/organizationSlice/selectors.js +3 -5
  132. package/dist/organizationSlice/thunks.cjs +99 -43
  133. package/dist/organizationSlice/thunks.cjs.map +1 -1
  134. package/dist/organizationSlice/thunks.d.cts +5 -5
  135. package/dist/organizationSlice/thunks.d.ts +5 -5
  136. package/dist/organizationSlice/thunks.js +25 -25
  137. package/dist/releasesSlice/index.cjs +46 -0
  138. package/dist/releasesSlice/index.cjs.map +1 -1
  139. package/dist/releasesSlice/index.d.cts +51 -3
  140. package/dist/releasesSlice/index.d.ts +51 -3
  141. package/dist/releasesSlice/index.js +3 -3
  142. package/dist/releasesSlice/mocks.cjs +46 -0
  143. package/dist/releasesSlice/mocks.cjs.map +1 -1
  144. package/dist/releasesSlice/mocks.d.cts +13 -0
  145. package/dist/releasesSlice/mocks.d.ts +13 -0
  146. package/dist/releasesSlice/mocks.js +3 -3
  147. package/dist/releasesSlice/selectors.cjs +13 -0
  148. package/dist/releasesSlice/selectors.cjs.map +1 -1
  149. package/dist/releasesSlice/selectors.d.cts +186 -1
  150. package/dist/releasesSlice/selectors.d.ts +186 -1
  151. package/dist/releasesSlice/selectors.js +12 -4
  152. package/dist/releasesSlice/thunks.cjs +99 -17
  153. package/dist/releasesSlice/thunks.cjs.map +1 -1
  154. package/dist/releasesSlice/thunks.d.cts +68 -3
  155. package/dist/releasesSlice/thunks.d.ts +68 -3
  156. package/dist/releasesSlice/thunks.js +26 -22
  157. package/dist/selectors.cjs +19 -20
  158. package/dist/selectors.cjs.map +1 -1
  159. package/dist/selectors.d.cts +5 -3
  160. package/dist/selectors.d.ts +5 -3
  161. package/dist/selectors.js +19 -11
  162. package/dist/sockethook.cjs.map +1 -1
  163. package/dist/sockethook.js +2 -2
  164. package/dist/store.cjs +47 -0
  165. package/dist/store.cjs.map +1 -1
  166. package/dist/store.d.cts +11 -110
  167. package/dist/store.d.ts +11 -110
  168. package/dist/store.js +12 -12
  169. package/dist/storehooks.cjs +142 -54
  170. package/dist/storehooks.cjs.map +1 -1
  171. package/dist/storehooks.js +26 -25
  172. package/dist/storehooks.js.map +1 -1
  173. package/dist/thunks.cjs +146 -53
  174. package/dist/thunks.cjs.map +1 -1
  175. package/dist/thunks.d.cts +3 -3
  176. package/dist/thunks.d.ts +3 -3
  177. package/dist/thunks.js +33 -27
  178. package/dist/useDeploymentDevice.cjs +76 -20
  179. package/dist/useDeploymentDevice.cjs.map +1 -1
  180. package/dist/useDeploymentDevice.js +25 -25
  181. package/dist/usersSlice/constants.js +2 -2
  182. package/dist/usersSlice/index.js +3 -3
  183. package/dist/usersSlice/mocks.js +3 -3
  184. package/dist/usersSlice/selectors.cjs.map +1 -1
  185. package/dist/usersSlice/selectors.js +4 -4
  186. package/dist/usersSlice/thunks.cjs +78 -22
  187. package/dist/usersSlice/thunks.cjs.map +1 -1
  188. package/dist/usersSlice/thunks.d.cts +18 -10
  189. package/dist/usersSlice/thunks.d.ts +18 -10
  190. package/dist/usersSlice/thunks.js +27 -27
  191. package/dist/utils.cjs.map +1 -1
  192. package/dist/utils.js +3 -3
  193. package/package.json +5 -5
  194. package/dist/chunk-3P3IE42O.js.map +0 -1
  195. package/dist/chunk-7C4SQBEE.js.map +0 -1
  196. package/dist/chunk-HFOTAPIJ.js.map +0 -1
  197. package/dist/chunk-JXQUFKID.js.map +0 -1
  198. package/dist/chunk-OOICURFL.js.map +0 -1
  199. package/dist/chunk-QKPV5RRN.js.map +0 -1
  200. package/dist/chunk-QYLGIR4W.js.map +0 -1
  201. package/dist/chunk-RS37Y2PQ.js.map +0 -1
  202. package/dist/chunk-VUFRP6P3.js.map +0 -1
  203. package/dist/chunk-YY6SKZDF.js.map +0 -1
  204. /package/dist/{chunk-MZNANSS2.js.map → chunk-4DOSYAJY.js.map} +0 -0
  205. /package/dist/{chunk-R6KRH2IY.js.map → chunk-4UJXT6RF.js.map} +0 -0
  206. /package/dist/{chunk-ZJW3QIPM.js.map → chunk-66NK2ZV2.js.map} +0 -0
  207. /package/dist/{chunk-PGFVHKP5.js.map → chunk-AVCIWAZB.js.map} +0 -0
  208. /package/dist/{chunk-UE5N5VO3.js.map → chunk-CEEXZF5E.js.map} +0 -0
  209. /package/dist/{chunk-UGSLGUS6.js.map → chunk-CWZKWW74.js.map} +0 -0
  210. /package/dist/{chunk-H5FAPMJJ.js.map → chunk-DYN7AU7R.js.map} +0 -0
  211. /package/dist/{chunk-F26IKSML.js.map → chunk-I6JE3OLT.js.map} +0 -0
  212. /package/dist/{chunk-ABJLRDCO.js.map → chunk-IY76MO6R.js.map} +0 -0
  213. /package/dist/{chunk-V3QEONX7.js.map → chunk-J74LNK6P.js.map} +0 -0
  214. /package/dist/{chunk-KJNNEDRV.js.map → chunk-JZXNRDO2.js.map} +0 -0
  215. /package/dist/{chunk-SCZLNFB5.js.map → chunk-VCTZ25Q5.js.map} +0 -0
  216. /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,
@@ -1438,6 +1440,23 @@ var initialState7 = {
1438
1440
  }
1439
1441
  */
1440
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
+ },
1441
1460
  releasesList: {
1442
1461
  ...import_constants5.DEVICE_LIST_DEFAULTS,
1443
1462
  searchedIds: [],
@@ -1456,6 +1475,7 @@ var initialState7 = {
1456
1475
  },
1457
1476
  tags: [],
1458
1477
  updateTypes: [],
1478
+ selectedJob: null,
1459
1479
  /*
1460
1480
  * Return single release with corresponding Artifacts
1461
1481
  */
@@ -1488,6 +1508,34 @@ var releaseSlice = (0, import_toolkit7.createSlice)({
1488
1508
  },
1489
1509
  setReleaseListState: (state, action) => {
1490
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;
1491
1539
  }
1492
1540
  }
1493
1541
  });
@@ -1704,6 +1752,10 @@ var getDeploymentsById = (state) => state.deployments.byId;
1704
1752
  var getDeploymentsByStatus = (state) => state.deployments.byStatus;
1705
1753
  var getSelectedDeploymentDeviceIds = (state) => state.deployments.selectedDeviceIds;
1706
1754
  var getDeploymentsSelectionState = (state) => state.deployments.selectionState;
1755
+ var getDeploymentById = (0, import_toolkit10.createSelector)(
1756
+ [getDeploymentsById, (_, deploymentId) => deploymentId],
1757
+ (deploymentsById, deploymentId = "") => deploymentsById[deploymentId]
1758
+ );
1707
1759
  var getMappedDeploymentSelection = (0, import_toolkit10.createSelector)(
1708
1760
  [getDeploymentsSelectionState, (_, deploymentsState) => deploymentsState, getDeploymentsById],
1709
1761
  (selectionState, deploymentsState, deploymentsById) => {
@@ -1853,8 +1905,6 @@ var getOnboarding = (state) => state.onboarding;
1853
1905
 
1854
1906
  // src/organizationSlice/selectors.ts
1855
1907
  var import_toolkit12 = require("@reduxjs/toolkit");
1856
- var import_dayjs = __toESM(require("dayjs"), 1);
1857
- var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"), 1);
1858
1908
  var getOrganization = (state) => state.organization.organization;
1859
1909
  var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
1860
1910
  var getAuditlogState = (state) => state.organization.auditlog.selectionState;
@@ -1883,12 +1933,6 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
1883
1933
  const [eventAction, eventTime] = atob(selectedId).split("|");
1884
1934
  return events.find((item) => item.action === eventAction && item.time === eventTime);
1885
1935
  });
1886
- import_dayjs.default.extend(import_relativeTime.default);
1887
- var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
1888
- var getHasCurrentPricing = (0, import_toolkit12.createSelector)(
1889
- [getOrganization],
1890
- ({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
1891
- );
1892
1936
 
1893
1937
  // src/releasesSlice/selectors.ts
1894
1938
  var import_toolkit13 = require("@reduxjs/toolkit");
@@ -2058,6 +2102,10 @@ var getHasReleases = (0, import_toolkit13.createSelector)(
2058
2102
  );
2059
2103
  var getSelectedRelease = (0, import_toolkit13.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
2060
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 || ""]);
2061
2109
 
2062
2110
  // src/usersSlice/selectors.ts
2063
2111
  var import_toolkit14 = require("@reduxjs/toolkit");
@@ -2317,7 +2365,7 @@ var import_universal_cookie2 = __toESM(require("universal-cookie"), 1);
2317
2365
  // src/api/general-api.ts
2318
2366
  var import_axios = __toESM(require("axios"), 1);
2319
2367
  var unauthorizedRedirect = (error) => {
2320
- 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")) {
2321
2369
  cleanUp();
2322
2370
  window.location.replace("/ui/");
2323
2371
  }
@@ -2907,6 +2955,15 @@ var saveDeltaDeploymentsConfig = createAppAsyncThunk(
2907
2955
  });
2908
2956
  }
2909
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
+ );
2910
2967
 
2911
2968
  // src/devicesSlice/thunks.tsx
2912
2969
  var import_react_router_dom = require("react-router-dom");
@@ -2986,15 +3043,15 @@ var removeDevicesFromGroup = createAppAsyncThunk(
2986
3043
  )
2987
3044
  );
2988
3045
  var getGroupNotification = (newGroup, selectedGroup) => {
2989
- const successMessage2 = "The group was updated successfully";
3046
+ const successMessage = "The group was updated successfully";
2990
3047
  if (newGroup === selectedGroup) {
2991
- return { message: successMessage2, autoHideDuration: TIMEOUTS.fiveSeconds };
3048
+ return { message: successMessage, autoHideDuration: TIMEOUTS.fiveSeconds };
2992
3049
  }
2993
3050
  return {
2994
3051
  action: "",
2995
3052
  autoHideDuration: TIMEOUTS.fiveSeconds,
2996
3053
  message: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
2997
- successMessage2,
3054
+ successMessage,
2998
3055
  " - ",
2999
3056
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom.Link, { to: `/devices?inventory=group:eq:${newGroup}`, children: "click here" }),
3000
3057
  " to see it."
@@ -3526,9 +3583,10 @@ var getDeviceConnect = createAppAsyncThunk(
3526
3583
  var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
3527
3584
  var triggerDeviceUpdate = createAppAsyncThunk(
3528
3585
  `${sliceName3}/triggerDeviceUpdate`,
3529
- ({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
3530
- () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
3531
- )
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
+ })
3532
3590
  );
3533
3591
  var getSessionDetails = createAppAsyncThunk(
3534
3592
  `${sliceName3}/getSessionDetails`,
@@ -3964,13 +4022,13 @@ var advanceOnboarding = createAppAsyncThunk(`${sliceName5}/advanceOnboarding`, (
3964
4022
  // src/organizationSlice/thunks.ts
3965
4023
  var import_MenderTypes2 = require("@northern.tech/types/MenderTypes");
3966
4024
  var import_helpers11 = require("@northern.tech/utils/helpers");
3967
- var import_dayjs2 = __toESM(require("dayjs"), 1);
4025
+ var import_dayjs = __toESM(require("dayjs"), 1);
3968
4026
  var import_utc = __toESM(require("dayjs/plugin/utc.js"), 1);
3969
4027
  var import_jwt_decode = require("jwt-decode");
3970
4028
  var import_md5 = __toESM(require("md5"), 1);
3971
4029
  var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
3972
4030
  var cookies4 = new import_universal_cookie4.default();
3973
- import_dayjs2.default.extend(import_utc.default);
4031
+ import_dayjs.default.extend(import_utc.default);
3974
4032
  var { setAnnouncement, setSnackbar: setSnackbar4 } = actions_default;
3975
4033
  var { page: defaultPage4, perPage: defaultPerPage4 } = import_constants5.DEVICE_LIST_DEFAULTS;
3976
4034
  var cancelRequest = createAppAsyncThunk(`${sliceName6}/cancelRequest`, (reason, { dispatch, getState }) => {
@@ -3997,10 +4055,12 @@ var createOrganizationTrial = createAppAsyncThunk(`${sliceName6}/createOrganizat
3997
4055
  const targetLocation = getTargetLocation(key);
3998
4056
  const target = `${targetLocation}${import_constants5.tenantadmApiUrlv2}/tenants/trial`;
3999
4057
  return general_api_default.postUnauthorized(target, data).catch((err) => {
4000
- if (err.response.status >= 400 && err.response.status < 500) {
4058
+ if (err.response?.status >= 400 && err.response?.status < 500) {
4001
4059
  dispatch(setSnackbar4({ message: err.response.data.error, autoHideDuration: TIMEOUTS.fiveSeconds }));
4002
- return Promise.reject(err);
4060
+ } else {
4061
+ dispatch(setSnackbar4({ message: "There was an error creating your account", autoHideDuration: TIMEOUTS.fiveSeconds }));
4003
4062
  }
4063
+ return Promise.reject(err);
4004
4064
  }).then(({ headers }) => {
4005
4065
  cookies4.remove("oauth");
4006
4066
  cookies4.remove("externalID");
@@ -4182,32 +4242,29 @@ var getUserOrganization = createAppAsyncThunk(
4182
4242
  );
4183
4243
  var getUserBilling = createAppAsyncThunk(
4184
4244
  `${sliceName6}/getUserBilling`,
4185
- (_, { 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)))
4186
4246
  );
4187
- var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, (_, { dispatch }) => {
4188
- const tasks = [dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap(), dispatch(getCurrentSubscription()).unwrap()];
4189
- 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 }));
4190
4251
  });
4191
4252
  var getBillingPreview = createAppAsyncThunk(
4192
4253
  `${sliceName6}/getBillingPreview`,
4193
- (order) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).then(
4194
- ({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data
4195
- )
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)
4196
4255
  );
4197
4256
  var getCurrentSubscription = createAppAsyncThunk(
4198
4257
  `${sliceName6}/getCurrentSubscription`,
4199
- () => 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
+ })
4200
4264
  );
4201
- 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.`;
4202
4265
  var requestPlanUpgrade = createAppAsyncThunk(
4203
4266
  `${sliceName6}/requestPlanUpgrade`,
4204
- (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(
4205
- () => Promise.all([
4206
- dispatch(setSnackbar4(successMessage(order.plan))),
4207
- setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds),
4208
- dispatch(getUserOrganization())
4209
- ])
4210
- )
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())]))
4211
4268
  );
4212
4269
  var sendSupportMessage = createAppAsyncThunk(
4213
4270
  `${sliceName6}/sendSupportMessage`,
@@ -4324,7 +4381,7 @@ var commonFields = {
4324
4381
  issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
4325
4382
  open: { parse: Boolean, select: defaultSelector, target: "open" }
4326
4383
  };
4327
- 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(
4328
4385
  (accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
4329
4386
  selectedTags.map((tag) => `tag=${tag}`)
4330
4387
  ).join("&");
@@ -4420,6 +4477,18 @@ var getArtifactUrl = createAppAsyncThunk(
4420
4477
  return dispatch(actions7.receiveRelease(release));
4421
4478
  })
4422
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
+ };
4423
4492
  var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file, meta }, { dispatch }) => {
4424
4493
  const formData = Object.entries(meta).reduce((accu, [key, value]) => {
4425
4494
  if (Array.isArray(value)) {
@@ -4444,13 +4513,18 @@ var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file
4444
4513
  (e) => dispatch(uploadProgress3({ id: uploadId, progress: progress(e) })),
4445
4514
  cancelSource.signal
4446
4515
  )
4447
- ]).then(() => {
4448
- setTimeout(() => {
4449
- dispatch(getReleases());
4450
- dispatch(selectRelease(file.name));
4451
- }, TIMEOUTS.oneSecond);
4452
- return Promise.resolve(dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds })));
4453
- }).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) => {
4454
4528
  if ((0, import_axios3.isCancel)(err)) {
4455
4529
  return dispatch(setSnackbar5({ message: "The artifact generation has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
4456
4530
  }
@@ -4673,6 +4747,20 @@ var getUpdateTypes = createAppAsyncThunk(
4673
4747
  `${sliceName7}/getReleaseTypes`,
4674
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))))
4675
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
+ );
4676
4764
 
4677
4765
  // src/usersSlice/thunks.ts
4678
4766
  var import_helpers14 = require("@northern.tech/utils/helpers");
@@ -5327,23 +5415,23 @@ var setAllTooltipsReadState = createAppAsyncThunk(
5327
5415
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
5328
5416
  }
5329
5417
  );
5330
- var submitFeedback = createAppAsyncThunk(
5418
+ var submitUserFeedback = createAppAsyncThunk(
5331
5419
  `${sliceName8}/submitFeedback`,
5332
- ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/contact/support`, {
5333
- subject: "feedback submission",
5334
- body: JSON.stringify({ feedback, satisfaction, meta })
5335
- }).then(() => {
5336
- const today = /* @__PURE__ */ new Date();
5337
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
5338
- 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
+ }
5339
5426
  })
5340
5427
  );
5341
5428
 
5342
5429
  // src/storehooks.ts
5343
5430
  var cookies6 = new import_universal_cookie6.default();
5344
- import_dayjs3.default.extend(import_duration.default);
5431
+ import_dayjs2.default.extend(import_duration.default);
5345
5432
  var { setDeviceListState: setDeviceListState2, setFirstLoginAfterSignup: setFirstLoginAfterSignup2, setTooltipsState, setShowStartupNotification } = actions_default;
5346
5433
  var featureFlags = [
5434
+ "hasAiEnabled",
5347
5435
  "hasAuditlogs",
5348
5436
  "hasMultitenancy",
5349
5437
  "hasDeltaProgress",
@@ -5469,7 +5557,7 @@ var useAppInit = (userId) => {
5469
5557
  ];
5470
5558
  tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });
5471
5559
  if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {
5472
- const duration = import_dayjs3.default.duration(interval, intervalUnit);
5560
+ const duration = import_dayjs2.default.duration(interval, intervalUnit);
5473
5561
  const days = duration.asDays();
5474
5562
  if (days < 1) {
5475
5563
  tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));