@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
@@ -15,68 +15,68 @@ import {
15
15
  getUserSettings as getUserSettings2,
16
16
  saveGlobalSettings,
17
17
  saveUserSettings
18
- } from "./chunk-FQW72QFK.js";
18
+ } from "./chunk-DE25YP6N.js";
19
19
  import {
20
20
  getReleases
21
- } from "./chunk-YWHRAPDQ.js";
22
- import "./chunk-ZIUUV35J.js";
23
- import "./chunk-MPYYSFPL.js";
24
- import "./chunk-QHK7GGV4.js";
25
- import "./chunk-RS37Y2PQ.js";
21
+ } from "./chunk-JOK26PI7.js";
22
+ import "./chunk-DYN7AU7R.js";
23
+ import "./chunk-J74LNK6P.js";
24
+ import "./chunk-ZZ3YDCYZ.js";
25
+ import "./chunk-BNSSPYCA.js";
26
26
  import {
27
27
  actions_default
28
- } from "./chunk-7PRZYHDP.js";
29
- import "./chunk-OOICURFL.js";
30
- import "./chunk-UGSLGUS6.js";
31
- import "./chunk-MZNANSS2.js";
32
- import "./chunk-PGFVHKP5.js";
28
+ } from "./chunk-I6JE3OLT.js";
29
+ import "./chunk-KJJ47UIO.js";
30
+ import "./chunk-CWZKWW74.js";
31
+ import "./chunk-4DOSYAJY.js";
32
+ import "./chunk-AVCIWAZB.js";
33
33
  import "./chunk-VANBSJS5.js";
34
- import "./chunk-VUFRP6P3.js";
35
- import "./chunk-6KGTHJKC.js";
36
- import "./chunk-ABJLRDCO.js";
34
+ import "./chunk-5HYHE4HO.js";
35
+ import "./chunk-DXJ2WS3N.js";
36
+ import "./chunk-IY76MO6R.js";
37
37
  import {
38
38
  getSessionInfo
39
- } from "./chunk-ZJW3QIPM.js";
40
- import "./chunk-KC7SKI3U.js";
39
+ } from "./chunk-66NK2ZV2.js";
40
+ import "./chunk-HLTP624H.js";
41
41
  import "./chunk-NMAXZ3ZY.js";
42
42
  import {
43
43
  getIsEnterprise,
44
44
  getOnboardingState,
45
45
  getUserCapabilities
46
- } from "./chunk-NQIP7VFB.js";
47
- import "./chunk-6XVREXI4.js";
46
+ } from "./chunk-VCTZ25Q5.js";
47
+ import "./chunk-KGSJ7CSA.js";
48
48
  import {
49
49
  getGlobalSettings,
50
50
  getOfflineThresholdSettings,
51
51
  getUserSettings
52
- } from "./chunk-4E7ZSEFL.js";
52
+ } from "./chunk-4UJXT6RF.js";
53
53
  import {
54
54
  getIsServiceProvider
55
- } from "./chunk-YY6SKZDF.js";
55
+ } from "./chunk-W37ETKI6.js";
56
56
  import "./chunk-YO22XLHI.js";
57
57
  import "./chunk-JIS4PA3R.js";
58
58
  import {
59
59
  getDevicesByStatus,
60
60
  getSortedFilteringAttributes
61
- } from "./chunk-KJNNEDRV.js";
62
- import "./chunk-JXQUFKID.js";
61
+ } from "./chunk-JZXNRDO2.js";
62
+ import "./chunk-GRVTVLIZ.js";
63
63
  import {
64
64
  getFeatures
65
65
  } from "./chunk-BYUPW7RA.js";
66
66
  import {
67
67
  getComparisonCompatibleVersion,
68
68
  stringToBoolean
69
- } from "./chunk-QEKN5R7E.js";
69
+ } from "./chunk-CEEXZF5E.js";
70
70
  import {
71
71
  DEPLOYMENT_STATES,
72
72
  DEVICE_STATES,
73
73
  TIMEOUTS,
74
74
  timeUnits
75
- } from "./chunk-7C4SQBEE.js";
75
+ } from "./chunk-MRXTMI6O.js";
76
76
  import "./chunk-2DYA3X77.js";
77
77
  import "./chunk-FAJ3I2UQ.js";
78
78
  import "./chunk-ZKAH3APE.js";
79
- import "./chunk-HFOTAPIJ.js";
79
+ import "./chunk-PY6ID7TL.js";
80
80
 
81
81
  // src/storehooks.ts
82
82
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -89,6 +89,7 @@ var cookies = new Cookies();
89
89
  dayjs.extend(durationDayJs);
90
90
  var { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = actions_default;
91
91
  var featureFlags = [
92
+ "hasAiEnabled",
92
93
  "hasAuditlogs",
93
94
  "hasMultitenancy",
94
95
  "hasDeltaProgress",
@@ -113,7 +114,6 @@ var parseEnvironmentInfo = () => (dispatch, getState) => {
113
114
  demoArtifactPort: port,
114
115
  disableOnboarding,
115
116
  integrationVersion,
116
- isDemoMode,
117
117
  menderVersion,
118
118
  menderArtifactVersion,
119
119
  metaMenderVersion
@@ -122,8 +122,7 @@ var parseEnvironmentInfo = () => (dispatch, getState) => {
122
122
  environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});
123
123
  environmentFeatures = {
124
124
  ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),
125
- isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes("hosted.mender.io"),
126
- isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)
125
+ isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes("hosted.mender.io")
127
126
  };
128
127
  onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;
129
128
  versionInfo = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimit,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getLatestReleaseInfo,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport { getComparisonCompatibleVersion, stringToBoolean } from './utils';\n\nconst cookies = new Cookies();\ndayjs.extend(durationDayJs);\n\nconst { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n isDemoMode,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io'),\n isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n return Promise.all([\n dispatch(getDeviceAttributes()),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.accepted })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.pending })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.preauth })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.rejected })),\n dispatch(getDynamicGroups()),\n dispatch(getGroups()),\n dispatch(getIntegrations()),\n dispatch(getReleases()),\n dispatch(getDeviceLimit()),\n dispatch(getRoles())\n ]);\n }, [dispatch, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
1
+ {"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimit,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getLatestReleaseInfo,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport { getComparisonCompatibleVersion, stringToBoolean } from './utils';\n\nconst cookies = new Cookies();\ndayjs.extend(durationDayJs);\n\nconst { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAiEnabled',\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n return Promise.all([\n dispatch(getDeviceAttributes()),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.accepted })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.pending })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.preauth })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.rejected })),\n dispatch(getDynamicGroups()),\n dispatch(getGroups()),\n dispatch(getIntegrations()),\n dispatch(getReleases()),\n dispatch(getDeviceLimit()),\n dispatch(getRoles())\n ]);\n }, [dispatch, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
package/dist/thunks.cjs CHANGED
@@ -68,6 +68,7 @@ __export(thunks_exports, {
68
68
  editTenantDeviceLimit: () => editTenantDeviceLimit,
69
69
  editUser: () => editUser,
70
70
  enableUser2fa: () => enableUser2fa,
71
+ generateDeploymentLogAnalysis: () => generateDeploymentLogAnalysis,
71
72
  generateToken: () => generateToken,
72
73
  get2FAQRCode: () => get2FAQRCode,
73
74
  getAllDeviceCounts: () => getAllDeviceCounts,
@@ -81,6 +82,8 @@ __export(thunks_exports, {
81
82
  getBillingPreview: () => getBillingPreview,
82
83
  getCurrentCard: () => getCurrentCard,
83
84
  getCurrentSubscription: () => getCurrentSubscription,
85
+ getDeltaGenerationJobDetails: () => getDeltaGenerationJobDetails,
86
+ getDeltaGenerationJobs: () => getDeltaGenerationJobs,
84
87
  getDeploymentDevices: () => getDeploymentDevices,
85
88
  getDeploymentsByStatus: () => getDeploymentsByStatus2,
86
89
  getDeploymentsConfig: () => getDeploymentsConfig,
@@ -183,7 +186,7 @@ __export(thunks_exports, {
183
186
  startCardUpdate: () => startCardUpdate,
184
187
  startUpgrade: () => startUpgrade,
185
188
  storeSsoConfig: () => storeSsoConfig,
186
- submitFeedback: () => submitFeedback,
189
+ submitUserFeedback: () => submitUserFeedback,
187
190
  switchUserOrganization: () => switchUserOrganization,
188
191
  tenantDataDivergedMessage: () => tenantDataDivergedMessage,
189
192
  triggerDeviceUpdate: () => triggerDeviceUpdate,
@@ -225,6 +228,7 @@ var emptyChartSelection = { software: "", group: "", chartType: chartTypes.bar.k
225
228
  var defaultReportType = "distribution";
226
229
  var defaultReports = [{ ...emptyChartSelection, group: null, attribute: "artifact_name", type: defaultReportType }];
227
230
  var locations = {
231
+ cn: { key: "cn", title: "China", location: "cn.hosted.mender.io" },
228
232
  eu: { key: "eu", title: "EU", location: "eu.hosted.mender.io" },
229
233
  us: { key: "us", title: "US", location: "hosted.mender.io" }
230
234
  };
@@ -947,6 +951,7 @@ var initialState = {
947
951
  },
948
952
  // return boolean rather than organization details
949
953
  features: {
954
+ hasAiEnabled: false,
950
955
  hasAuditlogs: false,
951
956
  hasDeltaProgress: false,
952
957
  hasMultitenancy: false,
@@ -955,7 +960,6 @@ var initialState = {
955
960
  hasFeedbackEnabled: false,
956
961
  hasMonitor: false,
957
962
  hasReporting: false,
958
- isDemoMode: false,
959
963
  isHosted: true,
960
964
  isEnterprise: false
961
965
  },
@@ -1006,8 +1010,12 @@ var appSlice = (0, import_toolkit.createSlice)({
1006
1010
  };
1007
1011
  },
1008
1012
  setSnackbar: (state, { payload }) => {
1009
- if (typeof payload === "string") {
1010
- state.snackbar.message = payload;
1013
+ if (typeof payload === "string" || payload instanceof String) {
1014
+ state.snackbar = {
1015
+ ...initialState.snackbar,
1016
+ message: payload,
1017
+ open: !!payload
1018
+ };
1011
1019
  return;
1012
1020
  }
1013
1021
  const { message, autoHideDuration, action, preventClickToCopy = false } = payload;
@@ -1107,7 +1115,7 @@ var cleanUp = () => {
1107
1115
 
1108
1116
  // src/api/general-api.ts
1109
1117
  var unauthorizedRedirect = (error) => {
1110
- if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken()) {
1118
+ if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken() && !window.location.pathname.endsWith("/subscription")) {
1111
1119
  cleanUp();
1112
1120
  window.location.replace("/ui/");
1113
1121
  }
@@ -1167,6 +1175,10 @@ var getDeploymentsById = (state) => state.deployments.byId;
1167
1175
  var getDeploymentsByStatus = (state) => state.deployments.byStatus;
1168
1176
  var getSelectedDeploymentDeviceIds = (state) => state.deployments.selectedDeviceIds;
1169
1177
  var getDeploymentsSelectionState = (state) => state.deployments.selectionState;
1178
+ var getDeploymentById = (0, import_toolkit3.createSelector)(
1179
+ [getDeploymentsById, (_, deploymentId) => deploymentId],
1180
+ (deploymentsById, deploymentId = "") => deploymentsById[deploymentId]
1181
+ );
1170
1182
  var getMappedDeploymentSelection = (0, import_toolkit3.createSelector)(
1171
1183
  [getDeploymentsSelectionState, (_, deploymentsState) => deploymentsState, getDeploymentsById],
1172
1184
  (selectionState, deploymentsState, deploymentsById) => {
@@ -1316,8 +1328,6 @@ var getOnboarding = (state) => state.onboarding;
1316
1328
 
1317
1329
  // src/organizationSlice/selectors.ts
1318
1330
  var import_toolkit5 = require("@reduxjs/toolkit");
1319
- var import_dayjs = __toESM(require("dayjs"), 1);
1320
- var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"), 1);
1321
1331
  var getOrganization = (state) => state.organization.organization;
1322
1332
  var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
1323
1333
  var getAuditlogState = (state) => state.organization.auditlog.selectionState;
@@ -1346,12 +1356,6 @@ var getAuditLogEntry = (0, import_toolkit5.createSelector)([getAuditLog, getAudi
1346
1356
  const [eventAction, eventTime] = atob(selectedId).split("|");
1347
1357
  return events.find((item) => item.action === eventAction && item.time === eventTime);
1348
1358
  });
1349
- import_dayjs.default.extend(import_relativeTime.default);
1350
- var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
1351
- var getHasCurrentPricing = (0, import_toolkit5.createSelector)(
1352
- [getOrganization],
1353
- ({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
1354
- );
1355
1359
 
1356
1360
  // src/releasesSlice/selectors.ts
1357
1361
  var import_toolkit6 = require("@reduxjs/toolkit");
@@ -1502,6 +1506,10 @@ var getHasReleases = (0, import_toolkit6.createSelector)(
1502
1506
  );
1503
1507
  var getSelectedRelease = (0, import_toolkit6.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
1504
1508
  var getSelectedReleases = (0, import_toolkit6.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
1509
+ var getDeltaJobsById = (state) => state.releases.deltaJobs;
1510
+ var getDeltaJobById = (0, import_toolkit6.createSelector)([getDeltaJobsById, (_, jobId) => jobId], (byId, jobId) => byId[jobId]);
1511
+ var getSelectedJobId = (state) => state.releases.selectedJob;
1512
+ var getSelectedJob = (0, import_toolkit6.createSelector)([getDeltaJobsById, getSelectedJobId], (byId, jobId) => byId[jobId || ""]);
1505
1513
 
1506
1514
  // src/usersSlice/selectors.ts
1507
1515
  var import_toolkit7 = require("@reduxjs/toolkit");
@@ -2298,6 +2306,23 @@ var initialState7 = {
2298
2306
  }
2299
2307
  */
2300
2308
  },
2309
+ deltaJobs: {
2310
+ /*
2311
+ [jobId]: {
2312
+ id: '',
2313
+ ...
2314
+ }
2315
+ */
2316
+ },
2317
+ deltaJobsList: {
2318
+ ...import_constants5.DEVICE_LIST_DEFAULTS,
2319
+ jobIds: [],
2320
+ total: 0,
2321
+ sort: {
2322
+ direction: import_constants5.SORTING_OPTIONS.desc,
2323
+ key: "started"
2324
+ }
2325
+ },
2301
2326
  releasesList: {
2302
2327
  ...import_constants5.DEVICE_LIST_DEFAULTS,
2303
2328
  searchedIds: [],
@@ -2316,6 +2341,7 @@ var initialState7 = {
2316
2341
  },
2317
2342
  tags: [],
2318
2343
  updateTypes: [],
2344
+ selectedJob: null,
2319
2345
  /*
2320
2346
  * Return single release with corresponding Artifacts
2321
2347
  */
@@ -2348,6 +2374,34 @@ var releaseSlice = (0, import_toolkit14.createSlice)({
2348
2374
  },
2349
2375
  setReleaseListState: (state, action) => {
2350
2376
  state.releasesList = action.payload;
2377
+ },
2378
+ receivedDeltaJobs: (state, action) => {
2379
+ const { jobs, total } = action.payload;
2380
+ state.deltaJobs = jobs.reduce(
2381
+ (accu, job) => {
2382
+ accu[job.id] = {
2383
+ ...accu[job.id],
2384
+ ...job
2385
+ };
2386
+ return accu;
2387
+ },
2388
+ { ...state.deltaJobs }
2389
+ );
2390
+ state.deltaJobsList.jobIds = jobs.map((job) => job.id);
2391
+ state.deltaJobsList.total = total;
2392
+ },
2393
+ receivedDeltaJobDetails: (state, action) => {
2394
+ const job = action.payload;
2395
+ state.deltaJobs[job.id] = {
2396
+ ...state.deltaJobs[job.id],
2397
+ ...job
2398
+ };
2399
+ },
2400
+ setDeltaJobsListState: (state, action) => {
2401
+ state.deltaJobsList = { ...state.deltaJobsList, ...action.payload };
2402
+ },
2403
+ setSelectedJob: (state, action) => {
2404
+ state.selectedJob = action.payload;
2351
2405
  }
2352
2406
  }
2353
2407
  });
@@ -3049,6 +3103,15 @@ var saveDeltaDeploymentsConfig = createAppAsyncThunk(
3049
3103
  });
3050
3104
  }
3051
3105
  );
3106
+ var generateDeploymentLogAnalysis = createAppAsyncThunk(
3107
+ `${sliceName2}/generateDeploymentLogAnalysis`,
3108
+ ({ 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) => {
3109
+ if (err.response.status === 429) {
3110
+ return rejectWithValue(err.response);
3111
+ }
3112
+ commonErrorHandler(err, "There was an error analysing the deployment log:", dispatch);
3113
+ })
3114
+ );
3052
3115
 
3053
3116
  // src/devicesSlice/thunks.tsx
3054
3117
  var import_react_router_dom = require("react-router-dom");
@@ -3128,15 +3191,15 @@ var removeDevicesFromGroup = createAppAsyncThunk(
3128
3191
  )
3129
3192
  );
3130
3193
  var getGroupNotification = (newGroup, selectedGroup) => {
3131
- const successMessage2 = "The group was updated successfully";
3194
+ const successMessage = "The group was updated successfully";
3132
3195
  if (newGroup === selectedGroup) {
3133
- return { message: successMessage2, autoHideDuration: TIMEOUTS.fiveSeconds };
3196
+ return { message: successMessage, autoHideDuration: TIMEOUTS.fiveSeconds };
3134
3197
  }
3135
3198
  return {
3136
3199
  action: "",
3137
3200
  autoHideDuration: TIMEOUTS.fiveSeconds,
3138
3201
  message: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
3139
- successMessage2,
3202
+ successMessage,
3140
3203
  " - ",
3141
3204
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom.Link, { to: `/devices?inventory=group:eq:${newGroup}`, children: "click here" }),
3142
3205
  " to see it."
@@ -3668,9 +3731,10 @@ var getDeviceConnect = createAppAsyncThunk(
3668
3731
  var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
3669
3732
  var triggerDeviceUpdate = createAppAsyncThunk(
3670
3733
  `${sliceName3}/triggerDeviceUpdate`,
3671
- ({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
3672
- () => new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds))
3673
- )
3734
+ ({ 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(() => {
3735
+ dispatch(setSnackbar3("Request has been sent."));
3736
+ return new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds));
3737
+ })
3674
3738
  );
3675
3739
  var getSessionDetails = createAppAsyncThunk(
3676
3740
  `${sliceName3}/getSessionDetails`,
@@ -4106,13 +4170,13 @@ var advanceOnboarding = createAppAsyncThunk(`${sliceName5}/advanceOnboarding`, (
4106
4170
  // src/organizationSlice/thunks.ts
4107
4171
  var import_MenderTypes2 = require("@northern.tech/types/MenderTypes");
4108
4172
  var import_helpers11 = require("@northern.tech/utils/helpers");
4109
- var import_dayjs2 = __toESM(require("dayjs"), 1);
4173
+ var import_dayjs = __toESM(require("dayjs"), 1);
4110
4174
  var import_utc = __toESM(require("dayjs/plugin/utc.js"), 1);
4111
4175
  var import_jwt_decode = require("jwt-decode");
4112
4176
  var import_md5 = __toESM(require("md5"), 1);
4113
4177
  var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
4114
4178
  var cookies4 = new import_universal_cookie4.default();
4115
- import_dayjs2.default.extend(import_utc.default);
4179
+ import_dayjs.default.extend(import_utc.default);
4116
4180
  var { setAnnouncement, setSnackbar: setSnackbar4 } = actions_default;
4117
4181
  var { page: defaultPage4, perPage: defaultPerPage4 } = import_constants5.DEVICE_LIST_DEFAULTS;
4118
4182
  var cancelRequest = createAppAsyncThunk(`${sliceName6}/cancelRequest`, (reason, { dispatch, getState }) => {
@@ -4139,10 +4203,12 @@ var createOrganizationTrial = createAppAsyncThunk(`${sliceName6}/createOrganizat
4139
4203
  const targetLocation = getTargetLocation(key);
4140
4204
  const target = `${targetLocation}${import_constants5.tenantadmApiUrlv2}/tenants/trial`;
4141
4205
  return general_api_default.postUnauthorized(target, data).catch((err) => {
4142
- if (err.response.status >= 400 && err.response.status < 500) {
4206
+ if (err.response?.status >= 400 && err.response?.status < 500) {
4143
4207
  dispatch(setSnackbar4({ message: err.response.data.error, autoHideDuration: TIMEOUTS.fiveSeconds }));
4144
- return Promise.reject(err);
4208
+ } else {
4209
+ dispatch(setSnackbar4({ message: "There was an error creating your account", autoHideDuration: TIMEOUTS.fiveSeconds }));
4145
4210
  }
4211
+ return Promise.reject(err);
4146
4212
  }).then(({ headers }) => {
4147
4213
  cookies4.remove("oauth");
4148
4214
  cookies4.remove("externalID");
@@ -4324,32 +4390,29 @@ var getUserOrganization = createAppAsyncThunk(
4324
4390
  );
4325
4391
  var getUserBilling = createAppAsyncThunk(
4326
4392
  `${sliceName6}/getUserBilling`,
4327
- (_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).then((res) => dispatch(actions6.setBillingProfile(res.data)))
4393
+ (_, { 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)))
4328
4394
  );
4329
- var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, (_, { dispatch }) => {
4330
- const tasks = [dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap(), dispatch(getCurrentSubscription()).unwrap()];
4331
- Promise.all(tasks).then(([currentPreview, currentSubscription]) => dispatch(actions6.setSubscription({ ...currentPreview, ...currentSubscription })));
4395
+ var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, async (_, { dispatch }) => {
4396
+ const currentSubscription = await dispatch(getCurrentSubscription()).unwrap();
4397
+ const currentPreview = await dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap();
4398
+ return dispatch(actions6.setSubscription({ ...currentPreview, ...currentSubscription }));
4332
4399
  });
4333
4400
  var getBillingPreview = createAppAsyncThunk(
4334
4401
  `${sliceName6}/getBillingPreview`,
4335
- (order) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).then(
4336
- ({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data
4337
- )
4402
+ (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)
4338
4403
  );
4339
4404
  var getCurrentSubscription = createAppAsyncThunk(
4340
4405
  `${sliceName6}/getCurrentSubscription`,
4341
- () => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data)
4406
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data).catch((err) => {
4407
+ if (err.response && err.response.status === 404) {
4408
+ throw new Error("Request failed with status code 404");
4409
+ }
4410
+ return commonErrorHandler(err, "There was an error retrieving your current subscription", dispatch, commonErrorFallback);
4411
+ })
4342
4412
  );
4343
- 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.`;
4344
4413
  var requestPlanUpgrade = createAppAsyncThunk(
4345
4414
  `${sliceName6}/requestPlanUpgrade`,
4346
- (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(
4347
- () => Promise.all([
4348
- dispatch(setSnackbar4(successMessage(order.plan))),
4349
- setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds),
4350
- dispatch(getUserOrganization())
4351
- ])
4352
- )
4415
+ (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())]))
4353
4416
  );
4354
4417
  var sendSupportMessage = createAppAsyncThunk(
4355
4418
  `${sliceName6}/sendSupportMessage`,
@@ -4466,7 +4529,7 @@ var commonFields = {
4466
4529
  issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
4467
4530
  open: { parse: Boolean, select: defaultSelector, target: "open" }
4468
4531
  };
4469
- var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type }).reduce(
4532
+ var formatReleases = ({ pageState: { id, searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type, id }).reduce(
4470
4533
  (accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
4471
4534
  selectedTags.map((tag) => `tag=${tag}`)
4472
4535
  ).join("&");
@@ -4562,6 +4625,18 @@ var getArtifactUrl = createAppAsyncThunk(
4562
4625
  return dispatch(actions7.receiveRelease(release));
4563
4626
  })
4564
4627
  );
4628
+ var pollLocation = async (location, attempt = 1, maxAttempts = 5, delay = TIMEOUTS.oneSecond) => {
4629
+ try {
4630
+ await general_api_default.get(location);
4631
+ return Promise.resolve();
4632
+ } catch {
4633
+ if (attempt >= maxAttempts) {
4634
+ throw new Error(`Couldn't get ${location} after ${maxAttempts} attempts`);
4635
+ }
4636
+ await new Promise((resolve) => setTimeout(resolve, delay));
4637
+ return pollLocation(location, attempt + 1, maxAttempts, delay);
4638
+ }
4639
+ };
4565
4640
  var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file, meta }, { dispatch }) => {
4566
4641
  const formData = Object.entries(meta).reduce((accu, [key, value]) => {
4567
4642
  if (Array.isArray(value)) {
@@ -4586,13 +4661,18 @@ var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file
4586
4661
  (e) => dispatch(uploadProgress3({ id: uploadId, progress: progress(e) })),
4587
4662
  cancelSource.signal
4588
4663
  )
4589
- ]).then(() => {
4590
- setTimeout(() => {
4591
- dispatch(getReleases());
4592
- dispatch(selectRelease(file.name));
4593
- }, TIMEOUTS.oneSecond);
4594
- return Promise.resolve(dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds })));
4595
- }).catch((err) => {
4664
+ ]).then((tasks) => {
4665
+ const generateResponse = tasks[tasks.length - 1];
4666
+ const generateLocation = generateResponse.headers[import_constants5.headerNames.location];
4667
+ const location = generateLocation.replace("/generate", "");
4668
+ return pollLocation(location);
4669
+ }).then(
4670
+ () => Promise.all([
4671
+ dispatch(getReleases()),
4672
+ dispatch(selectRelease(meta.name)),
4673
+ dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds }))
4674
+ ])
4675
+ ).catch((err) => {
4596
4676
  if ((0, import_axios3.isCancel)(err)) {
4597
4677
  return dispatch(setSnackbar5({ message: "The artifact generation has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
4598
4678
  }
@@ -4815,6 +4895,20 @@ var getUpdateTypes = createAppAsyncThunk(
4815
4895
  `${sliceName7}/getReleaseTypes`,
4816
4896
  (_, { 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))))
4817
4897
  );
4898
+ var getDeltaGenerationJobs = createAppAsyncThunk(`${sliceName7}/getDeltaGenerationJobs`, (options = {}, { dispatch }) => {
4899
+ const { page = defaultPage5, perPage = defaultPerPage5, sort = {} } = options;
4900
+ const { key: sortKey, direction: sortDirection } = sort;
4901
+ const sortParam = sortKey && sortDirection ? `&sort=${sortKey}:${sortDirection}` : "";
4902
+ return general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs?page=${page}&per_page=${perPage}${sortParam}`).then(({ data, headers }) => {
4903
+ const total = Number(headers[import_constants5.headerNames.total]) || data.length;
4904
+ const result = { jobs: data, total };
4905
+ return Promise.all([dispatch(actions7.receivedDeltaJobs(result)), result]);
4906
+ }).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation jobs:", dispatch));
4907
+ });
4908
+ var getDeltaGenerationJobDetails = createAppAsyncThunk(
4909
+ `${sliceName7}/getDeltaGenerationJobDetails`,
4910
+ (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))
4911
+ );
4818
4912
 
4819
4913
  // src/usersSlice/thunks.ts
4820
4914
  var import_helpers14 = require("@northern.tech/utils/helpers");
@@ -5469,15 +5563,14 @@ var setAllTooltipsReadState = createAppAsyncThunk(
5469
5563
  return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
5470
5564
  }
5471
5565
  );
5472
- var submitFeedback = createAppAsyncThunk(
5566
+ var submitUserFeedback = createAppAsyncThunk(
5473
5567
  `${sliceName8}/submitFeedback`,
5474
- ({ satisfaction, feedback, ...meta }, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/contact/support`, {
5475
- subject: "feedback submission",
5476
- body: JSON.stringify({ feedback, satisfaction, meta })
5477
- }).then(() => {
5478
- const today = /* @__PURE__ */ new Date();
5479
- dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
5480
- setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
5568
+ ({ formId, feedback }, { dispatch }) => general_api_default.post(`${import_constants5.useradmApiUrlv2}/support/feedback/${formId}`, feedback).then(() => {
5569
+ if (formId === "product") {
5570
+ const today = /* @__PURE__ */ new Date();
5571
+ dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
5572
+ setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
5573
+ }
5481
5574
  })
5482
5575
  );
5483
5576
  // Annotate the CommonJS export names for ESM import in node:
@@ -5520,6 +5613,7 @@ var submitFeedback = createAppAsyncThunk(
5520
5613
  editTenantDeviceLimit,
5521
5614
  editUser,
5522
5615
  enableUser2fa,
5616
+ generateDeploymentLogAnalysis,
5523
5617
  generateToken,
5524
5618
  get2FAQRCode,
5525
5619
  getAllDeviceCounts,
@@ -5533,6 +5627,8 @@ var submitFeedback = createAppAsyncThunk(
5533
5627
  getBillingPreview,
5534
5628
  getCurrentCard,
5535
5629
  getCurrentSubscription,
5630
+ getDeltaGenerationJobDetails,
5631
+ getDeltaGenerationJobs,
5536
5632
  getDeploymentDevices,
5537
5633
  getDeploymentsByStatus,
5538
5634
  getDeploymentsConfig,
@@ -5635,7 +5731,7 @@ var submitFeedback = createAppAsyncThunk(
5635
5731
  startCardUpdate,
5636
5732
  startUpgrade,
5637
5733
  storeSsoConfig,
5638
- submitFeedback,
5734
+ submitUserFeedback,
5639
5735
  switchUserOrganization,
5640
5736
  tenantDataDivergedMessage,
5641
5737
  triggerDeviceUpdate,