@northern.tech/store 0.3.4 → 0.4.0

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 (603) hide show
  1. package/dist/actions.cjs +78 -827
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.d.cts +229 -85
  4. package/dist/actions.d.ts +229 -85
  5. package/dist/actions.js +14 -14
  6. package/dist/api/general-api.cjs +274 -148
  7. package/dist/api/general-api.cjs.map +1 -1
  8. package/dist/api/general-api.d.cts +1 -1
  9. package/dist/api/general-api.d.ts +1 -1
  10. package/dist/api/general-api.js +7 -7
  11. package/dist/api/users-api.cjs +274 -148
  12. package/dist/api/users-api.cjs.map +1 -1
  13. package/dist/api/users-api.d.cts +7 -5
  14. package/dist/api/users-api.d.ts +7 -5
  15. package/dist/api/users-api.js +8 -8
  16. package/dist/appSlice/constants.cjs +23 -43
  17. package/dist/appSlice/constants.cjs.map +1 -1
  18. package/dist/appSlice/constants.d.cts +102 -112
  19. package/dist/appSlice/constants.d.ts +102 -112
  20. package/dist/appSlice/constants.js +1 -11
  21. package/dist/appSlice/index.cjs +24 -239
  22. package/dist/appSlice/index.cjs.map +1 -1
  23. package/dist/appSlice/index.d.cts +119 -1531
  24. package/dist/appSlice/index.d.ts +119 -1531
  25. package/dist/appSlice/index.js +6 -6
  26. package/dist/appSlice/mocks.cjs +186 -0
  27. package/dist/appSlice/mocks.cjs.map +1 -0
  28. package/dist/appSlice/mocks.d.cts +39 -0
  29. package/dist/appSlice/mocks.d.ts +39 -0
  30. package/dist/appSlice/mocks.js +27 -0
  31. package/dist/appSlice/mocks.js.map +1 -0
  32. package/dist/appSlice/selectors.cjs +31 -5
  33. package/dist/appSlice/selectors.cjs.map +1 -1
  34. package/dist/appSlice/selectors.d.cts +709 -23
  35. package/dist/appSlice/selectors.d.ts +709 -23
  36. package/dist/appSlice/selectors.js +21 -1
  37. package/dist/appSlice/thunks.cjs +1552 -1769
  38. package/dist/appSlice/thunks.cjs.map +1 -1
  39. package/dist/appSlice/thunks.d.cts +34 -14
  40. package/dist/appSlice/thunks.d.ts +34 -14
  41. package/dist/appSlice/thunks.js +31 -31
  42. package/dist/auth.cjs +276 -153
  43. package/dist/auth.cjs.map +1 -1
  44. package/dist/auth.d.cts +13 -10
  45. package/dist/auth.d.ts +13 -10
  46. package/dist/auth.js +6 -8
  47. package/dist/{chunk-CK6YE6AN.js → chunk-2DYA3X77.js} +3 -1
  48. package/dist/{chunk-CK6YE6AN.js.map → chunk-2DYA3X77.js.map} +1 -1
  49. package/dist/{chunk-JO33IORF.js → chunk-4TUJPE6G.js} +19 -4
  50. package/dist/chunk-4TUJPE6G.js.map +1 -0
  51. package/dist/{chunk-AFICTIVU.js → chunk-6KGTHJKC.js} +22 -24
  52. package/dist/chunk-6KGTHJKC.js.map +1 -0
  53. package/dist/chunk-7C4SQBEE.js +715 -0
  54. package/dist/chunk-7C4SQBEE.js.map +1 -0
  55. package/dist/{chunk-X3GZILYD.js → chunk-ABJLRDCO.js} +10 -11
  56. package/dist/chunk-ABJLRDCO.js.map +1 -0
  57. package/dist/{chunk-PAIB5V27.js → chunk-CW5T6OGF.js} +56 -22
  58. package/dist/chunk-CW5T6OGF.js.map +1 -0
  59. package/dist/{chunk-MRCFLG45.js → chunk-FAJ3I2UQ.js} +2 -1
  60. package/dist/chunk-FAJ3I2UQ.js.map +1 -0
  61. package/dist/{chunk-FVCYB5OP.js → chunk-IQG5I7AM.js} +32 -40
  62. package/dist/chunk-IQG5I7AM.js.map +1 -0
  63. package/dist/chunk-JUGE7L3K.js +110 -0
  64. package/dist/chunk-JUGE7L3K.js.map +1 -0
  65. package/dist/{chunk-ZWOAFHAR.js → chunk-JXQUFKID.js} +2 -2
  66. package/dist/chunk-JXQUFKID.js.map +1 -0
  67. package/dist/{chunk-K4MMUDYT.js → chunk-KC7SKI3U.js} +9 -11
  68. package/dist/chunk-KC7SKI3U.js.map +1 -0
  69. package/dist/{chunk-L3SY3J5M.js → chunk-KJNNEDRV.js} +11 -7
  70. package/dist/chunk-KJNNEDRV.js.map +1 -0
  71. package/dist/chunk-MBKAZVE3.js +44 -0
  72. package/dist/chunk-MBKAZVE3.js.map +1 -0
  73. package/dist/{chunk-FRSA2YB5.js → chunk-MZNANSS2.js} +12 -7
  74. package/dist/chunk-MZNANSS2.js.map +1 -0
  75. package/dist/{chunk-EYCORLYU.js → chunk-N2KLYPS5.js} +128 -87
  76. package/dist/chunk-N2KLYPS5.js.map +1 -0
  77. package/dist/{chunk-Y575RZHR.js → chunk-OHF3YUXX.js} +25 -40
  78. package/dist/chunk-OHF3YUXX.js.map +1 -0
  79. package/dist/{chunk-NOQR3TE7.js → chunk-OOICURFL.js} +2 -2
  80. package/dist/chunk-OOICURFL.js.map +1 -0
  81. package/dist/{chunk-AVX7VVOK.js → chunk-PGFVHKP5.js} +5 -7
  82. package/dist/chunk-PGFVHKP5.js.map +1 -0
  83. package/dist/{chunk-NCSKCF2S.js → chunk-QHK7GGV4.js} +3 -3
  84. package/dist/chunk-QHK7GGV4.js.map +1 -0
  85. package/dist/{chunk-AUBJUUP3.js → chunk-RS37Y2PQ.js} +3 -3
  86. package/dist/chunk-RS37Y2PQ.js.map +1 -0
  87. package/dist/{chunk-7YZCUAXZ.js → chunk-UGSLGUS6.js} +8 -6
  88. package/dist/chunk-UGSLGUS6.js.map +1 -0
  89. package/dist/{chunk-ZZMFXRQK.js → chunk-URNS6A5T.js} +14 -14
  90. package/dist/{chunk-RX32WLVJ.js → chunk-VANBSJS5.js} +1 -1
  91. package/dist/chunk-VANBSJS5.js.map +1 -0
  92. package/dist/{chunk-DGQKXSRI.js → chunk-VUFRP6P3.js} +5 -6
  93. package/dist/chunk-VUFRP6P3.js.map +1 -0
  94. package/dist/{chunk-DCEKU6UV.js → chunk-X4GUACQO.js} +8 -5
  95. package/dist/chunk-X4GUACQO.js.map +1 -0
  96. package/dist/{chunk-GWJIY56H.js → chunk-XWYJACQC.js} +40 -15
  97. package/dist/chunk-XWYJACQC.js.map +1 -0
  98. package/dist/{chunk-GAI4VYRZ.js → chunk-ZJW3QIPM.js} +8 -9
  99. package/dist/chunk-ZJW3QIPM.js.map +1 -0
  100. package/dist/chunk-ZKAH3APE.js +1 -0
  101. package/dist/chunk-ZKAH3APE.js.map +1 -0
  102. package/dist/{chunk-EQLHIPPR.js → chunk-ZN5TB2NJ.js} +919 -842
  103. package/dist/chunk-ZN5TB2NJ.js.map +1 -0
  104. package/dist/{chunk-FQDSV3NK.js → chunk-ZRSYBSSY.js} +18 -12
  105. package/dist/chunk-ZRSYBSSY.js.map +1 -0
  106. package/dist/commonConstants.cjs +279 -173
  107. package/dist/commonConstants.cjs.map +1 -1
  108. package/dist/commonConstants.d.cts +46 -212
  109. package/dist/commonConstants.d.ts +46 -212
  110. package/dist/commonConstants.js +11 -19
  111. package/dist/commonSelectors.cjs +507 -768
  112. package/dist/commonSelectors.cjs.map +1 -1
  113. package/dist/commonSelectors.d.cts +4307 -280
  114. package/dist/commonSelectors.d.ts +4307 -280
  115. package/dist/commonSelectors.js +14 -14
  116. package/dist/constants.cjs +355 -655
  117. package/dist/constants.cjs.map +1 -1
  118. package/dist/constants.d.cts +11 -9
  119. package/dist/constants.d.ts +11 -9
  120. package/dist/constants.js +37 -29
  121. package/dist/deploymentsSlice/constants.cjs +5 -360
  122. package/dist/deploymentsSlice/constants.cjs.map +1 -1
  123. package/dist/deploymentsSlice/constants.d.cts +59 -39
  124. package/dist/deploymentsSlice/constants.d.ts +59 -39
  125. package/dist/deploymentsSlice/constants.js +5 -11
  126. package/dist/deploymentsSlice/index.cjs +17 -365
  127. package/dist/deploymentsSlice/index.cjs.map +1 -1
  128. package/dist/deploymentsSlice/index.d.cts +142 -2359
  129. package/dist/deploymentsSlice/index.d.ts +142 -2359
  130. package/dist/deploymentsSlice/index.js +6 -6
  131. package/dist/deploymentsSlice/mocks.cjs +429 -0
  132. package/dist/deploymentsSlice/mocks.cjs.map +1 -0
  133. package/dist/deploymentsSlice/mocks.d.cts +189 -0
  134. package/dist/deploymentsSlice/mocks.d.ts +189 -0
  135. package/dist/deploymentsSlice/mocks.js +146 -0
  136. package/dist/deploymentsSlice/mocks.js.map +1 -0
  137. package/dist/deploymentsSlice/selectors.cjs +5 -353
  138. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  139. package/dist/deploymentsSlice/selectors.d.cts +167 -11
  140. package/dist/deploymentsSlice/selectors.d.ts +167 -11
  141. package/dist/deploymentsSlice/selectors.js +6 -6
  142. package/dist/deploymentsSlice/thunks.cjs +1518 -1735
  143. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  144. package/dist/deploymentsSlice/thunks.d.cts +134 -76
  145. package/dist/deploymentsSlice/thunks.d.ts +134 -76
  146. package/dist/deploymentsSlice/thunks.js +31 -31
  147. package/dist/devicesSlice/constants.cjs +5 -375
  148. package/dist/devicesSlice/constants.cjs.map +1 -1
  149. package/dist/devicesSlice/constants.d.cts +8 -16
  150. package/dist/devicesSlice/constants.d.ts +8 -16
  151. package/dist/devicesSlice/constants.js +7 -25
  152. package/dist/devicesSlice/index.cjs +17 -381
  153. package/dist/devicesSlice/index.cjs.map +1 -1
  154. package/dist/devicesSlice/index.d.cts +196 -2208
  155. package/dist/devicesSlice/index.d.ts +196 -2208
  156. package/dist/devicesSlice/index.js +6 -6
  157. package/dist/devicesSlice/mocks.cjs +336 -0
  158. package/dist/devicesSlice/mocks.cjs.map +1 -0
  159. package/dist/devicesSlice/mocks.d.cts +154 -0
  160. package/dist/devicesSlice/mocks.d.ts +154 -0
  161. package/dist/devicesSlice/mocks.js +136 -0
  162. package/dist/devicesSlice/mocks.js.map +1 -0
  163. package/dist/devicesSlice/selectors.cjs +280 -293
  164. package/dist/devicesSlice/selectors.cjs.map +1 -1
  165. package/dist/devicesSlice/selectors.d.cts +1791 -82
  166. package/dist/devicesSlice/selectors.d.ts +1791 -82
  167. package/dist/devicesSlice/selectors.js +8 -6
  168. package/dist/devicesSlice/thunks.cjs +1699 -1926
  169. package/dist/devicesSlice/thunks.cjs.map +1 -1
  170. package/dist/devicesSlice/thunks.d.cts +374 -291
  171. package/dist/devicesSlice/thunks.d.ts +374 -291
  172. package/dist/devicesSlice/thunks.js +37 -47
  173. package/dist/liststatehook.cjs +289 -325
  174. package/dist/liststatehook.cjs.map +1 -1
  175. package/dist/liststatehook.d.cts +4 -16
  176. package/dist/liststatehook.d.ts +4 -16
  177. package/dist/liststatehook.js +9 -9
  178. package/dist/liststatehook.js.map +1 -1
  179. package/dist/locationutils.cjs +286 -322
  180. package/dist/locationutils.cjs.map +1 -1
  181. package/dist/locationutils.d.cts +8 -7
  182. package/dist/locationutils.d.ts +8 -7
  183. package/dist/locationutils.js +6 -6
  184. package/dist/monitorSlice/constants.cjs +0 -146
  185. package/dist/monitorSlice/constants.cjs.map +1 -1
  186. package/dist/monitorSlice/constants.d.cts +4 -5
  187. package/dist/monitorSlice/constants.d.ts +4 -5
  188. package/dist/monitorSlice/constants.js +1 -12
  189. package/dist/monitorSlice/index.cjs +5 -353
  190. package/dist/monitorSlice/index.cjs.map +1 -1
  191. package/dist/monitorSlice/index.d.cts +63 -260
  192. package/dist/monitorSlice/index.d.ts +63 -260
  193. package/dist/monitorSlice/index.js +6 -6
  194. package/dist/monitorSlice/mocks.cjs +130 -0
  195. package/dist/monitorSlice/mocks.cjs.map +1 -0
  196. package/dist/monitorSlice/mocks.d.cts +57 -0
  197. package/dist/monitorSlice/mocks.d.ts +57 -0
  198. package/dist/monitorSlice/mocks.js +65 -0
  199. package/dist/monitorSlice/mocks.js.map +1 -0
  200. package/dist/monitorSlice/thunks.cjs +623 -860
  201. package/dist/monitorSlice/thunks.cjs.map +1 -1
  202. package/dist/monitorSlice/thunks.d.cts +90 -21
  203. package/dist/monitorSlice/thunks.d.ts +90 -21
  204. package/dist/monitorSlice/thunks.js +27 -27
  205. package/dist/onboardingSlice/constants.cjs +1 -0
  206. package/dist/onboardingSlice/constants.cjs.map +1 -1
  207. package/dist/onboardingSlice/constants.d.cts +23 -20
  208. package/dist/onboardingSlice/constants.d.ts +23 -20
  209. package/dist/onboardingSlice/constants.js +1 -1
  210. package/dist/onboardingSlice/index.cjs.map +1 -1
  211. package/dist/onboardingSlice/index.d.cts +50 -225
  212. package/dist/onboardingSlice/index.d.ts +50 -225
  213. package/dist/onboardingSlice/index.js +1 -1
  214. package/dist/onboardingSlice/mocks.cjs +83 -0
  215. package/dist/onboardingSlice/mocks.cjs.map +1 -0
  216. package/dist/onboardingSlice/mocks.d.cts +19 -0
  217. package/dist/onboardingSlice/mocks.d.ts +19 -0
  218. package/dist/onboardingSlice/mocks.js +17 -0
  219. package/dist/onboardingSlice/mocks.js.map +1 -0
  220. package/dist/onboardingSlice/thunks.cjs +1771 -1991
  221. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  222. package/dist/onboardingSlice/thunks.d.cts +62 -34
  223. package/dist/onboardingSlice/thunks.d.ts +62 -34
  224. package/dist/onboardingSlice/thunks.js +31 -31
  225. package/dist/organizationSlice/constants.cjs +8 -748
  226. package/dist/organizationSlice/constants.cjs.map +1 -1
  227. package/dist/organizationSlice/constants.d.cts +36 -116
  228. package/dist/organizationSlice/constants.d.ts +36 -116
  229. package/dist/organizationSlice/constants.js +7 -17
  230. package/dist/organizationSlice/index.cjs +14 -368
  231. package/dist/organizationSlice/index.cjs.map +1 -1
  232. package/dist/organizationSlice/index.d.cts +45 -74
  233. package/dist/organizationSlice/index.d.ts +45 -74
  234. package/dist/organizationSlice/index.js +6 -6
  235. package/dist/organizationSlice/mocks.cjs +234 -0
  236. package/dist/organizationSlice/mocks.cjs.map +1 -0
  237. package/dist/organizationSlice/mocks.d.cts +107 -0
  238. package/dist/organizationSlice/mocks.d.ts +107 -0
  239. package/dist/organizationSlice/mocks.js +101 -0
  240. package/dist/organizationSlice/mocks.js.map +1 -0
  241. package/dist/organizationSlice/selectors.cjs +301 -146
  242. package/dist/organizationSlice/selectors.cjs.map +1 -1
  243. package/dist/organizationSlice/selectors.d.cts +888 -52
  244. package/dist/organizationSlice/selectors.d.ts +888 -52
  245. package/dist/organizationSlice/selectors.js +14 -6
  246. package/dist/organizationSlice/thunks.cjs +2593 -2730
  247. package/dist/organizationSlice/thunks.cjs.map +1 -1
  248. package/dist/organizationSlice/thunks.d.cts +318 -127
  249. package/dist/organizationSlice/thunks.d.ts +318 -127
  250. package/dist/organizationSlice/thunks.js +45 -31
  251. package/dist/organizationSlice/types.cjs.map +1 -1
  252. package/dist/organizationSlice/types.d.cts +95 -3
  253. package/dist/organizationSlice/types.d.ts +95 -3
  254. package/dist/releasesSlice/constants.cjs +3 -0
  255. package/dist/releasesSlice/constants.cjs.map +1 -1
  256. package/dist/releasesSlice/constants.d.cts +2 -1
  257. package/dist/releasesSlice/constants.d.ts +2 -1
  258. package/dist/releasesSlice/constants.js +3 -1
  259. package/dist/releasesSlice/index.cjs +5 -222
  260. package/dist/releasesSlice/index.cjs.map +1 -1
  261. package/dist/releasesSlice/index.d.cts +52 -473
  262. package/dist/releasesSlice/index.d.ts +52 -473
  263. package/dist/releasesSlice/index.js +6 -6
  264. package/dist/releasesSlice/mocks.cjs +177 -0
  265. package/dist/releasesSlice/mocks.cjs.map +1 -0
  266. package/dist/releasesSlice/mocks.d.cts +49 -0
  267. package/dist/releasesSlice/mocks.d.ts +49 -0
  268. package/dist/releasesSlice/mocks.js +61 -0
  269. package/dist/releasesSlice/mocks.js.map +1 -0
  270. package/dist/releasesSlice/selectors.cjs +288 -158
  271. package/dist/releasesSlice/selectors.cjs.map +1 -1
  272. package/dist/releasesSlice/selectors.d.cts +886 -24
  273. package/dist/releasesSlice/selectors.d.ts +886 -24
  274. package/dist/releasesSlice/selectors.js +9 -7
  275. package/dist/releasesSlice/thunks.cjs +787 -982
  276. package/dist/releasesSlice/thunks.cjs.map +1 -1
  277. package/dist/releasesSlice/thunks.d.cts +150 -130
  278. package/dist/releasesSlice/thunks.d.ts +150 -130
  279. package/dist/releasesSlice/thunks.js +34 -28
  280. package/dist/selectors.cjs +559 -770
  281. package/dist/selectors.cjs.map +1 -1
  282. package/dist/selectors.d.cts +37 -9
  283. package/dist/selectors.d.ts +37 -9
  284. package/dist/selectors.js +77 -41
  285. package/dist/sockethook.cjs +271 -281
  286. package/dist/sockethook.cjs.map +1 -1
  287. package/dist/sockethook.js +7 -9
  288. package/dist/sockethook.js.map +1 -1
  289. package/dist/store.cjs +119 -834
  290. package/dist/store.cjs.map +1 -1
  291. package/dist/store.d.cts +698 -1963
  292. package/dist/store.d.ts +698 -1963
  293. package/dist/store.js +18 -16
  294. package/dist/storehooks.cjs +1797 -1907
  295. package/dist/storehooks.cjs.map +1 -1
  296. package/dist/storehooks.js +43 -49
  297. package/dist/storehooks.js.map +1 -1
  298. package/dist/thunks.cjs +2132 -2229
  299. package/dist/thunks.cjs.map +1 -1
  300. package/dist/thunks.d.cts +24 -6
  301. package/dist/thunks.d.ts +24 -6
  302. package/dist/thunks.js +55 -45
  303. package/dist/{deploymentdevicehook.cjs → useDeploymentDevice.cjs} +1757 -1976
  304. package/dist/useDeploymentDevice.cjs.map +1 -0
  305. package/dist/useDeploymentDevice.js +63 -0
  306. package/dist/useDeploymentDevice.js.map +1 -0
  307. package/dist/usersSlice/constants.cjs +5 -747
  308. package/dist/usersSlice/constants.cjs.map +1 -1
  309. package/dist/usersSlice/constants.d.cts +11 -769
  310. package/dist/usersSlice/constants.d.ts +11 -769
  311. package/dist/usersSlice/constants.js +7 -30
  312. package/dist/usersSlice/index.cjs +10 -721
  313. package/dist/usersSlice/index.cjs.map +1 -1
  314. package/dist/usersSlice/index.d.cts +136 -7900
  315. package/dist/usersSlice/index.d.ts +136 -7900
  316. package/dist/usersSlice/index.js +6 -6
  317. package/dist/usersSlice/mocks.cjs +200 -0
  318. package/dist/usersSlice/mocks.cjs.map +1 -0
  319. package/dist/usersSlice/mocks.d.cts +83 -0
  320. package/dist/usersSlice/mocks.d.ts +83 -0
  321. package/dist/usersSlice/mocks.js +47 -0
  322. package/dist/usersSlice/mocks.js.map +1 -0
  323. package/dist/usersSlice/selectors.cjs +319 -566
  324. package/dist/usersSlice/selectors.cjs.map +1 -1
  325. package/dist/usersSlice/selectors.d.cts +1651 -59
  326. package/dist/usersSlice/selectors.d.ts +1651 -59
  327. package/dist/usersSlice/selectors.js +13 -9
  328. package/dist/usersSlice/thunks.cjs +1655 -1872
  329. package/dist/usersSlice/thunks.cjs.map +1 -1
  330. package/dist/usersSlice/thunks.d.cts +362 -312
  331. package/dist/usersSlice/thunks.d.ts +362 -312
  332. package/dist/usersSlice/thunks.js +31 -31
  333. package/dist/utils.cjs +423 -285
  334. package/dist/utils.cjs.map +1 -1
  335. package/dist/utils.d.cts +44 -22
  336. package/dist/utils.d.ts +44 -22
  337. package/dist/utils.js +12 -6
  338. package/package.json +20 -11
  339. package/dist/BillingProfile-ChP2_Sqw.d.cts +0 -45
  340. package/dist/BillingProfile-ChP2_Sqw.d.ts +0 -45
  341. package/dist/api/types/AWSCredentials.ts +0 -16
  342. package/dist/api/types/Actor.ts +0 -35
  343. package/dist/api/types/Addon.ts +0 -17
  344. package/dist/api/types/AddonTenantadm.ts +0 -17
  345. package/dist/api/types/Address.ts +0 -6
  346. package/dist/api/types/AddressUpdate.ts +0 -12
  347. package/dist/api/types/Alert.ts +0 -34
  348. package/dist/api/types/AlertDetails.ts +0 -23
  349. package/dist/api/types/AlertSubject.ts +0 -23
  350. package/dist/api/types/ApiBurst.ts +0 -21
  351. package/dist/api/types/ApiBurstTenantadm.ts +0 -21
  352. package/dist/api/types/ApiLimits.ts +0 -16
  353. package/dist/api/types/ApiLimitsTenantadm.ts +0 -16
  354. package/dist/api/types/ApiQuota.ts +0 -17
  355. package/dist/api/types/ApiQuotaTenantadm.ts +0 -17
  356. package/dist/api/types/Artifact.ts +0 -48
  357. package/dist/api/types/ArtifactDeployments.ts +0 -48
  358. package/dist/api/types/ArtifactInfo.ts +0 -11
  359. package/dist/api/types/ArtifactInfoDeployments.ts +0 -11
  360. package/dist/api/types/ArtifactLink.ts +0 -11
  361. package/dist/api/types/ArtifactTypeInfo.ts +0 -13
  362. package/dist/api/types/ArtifactTypeInfoDeployments.ts +0 -13
  363. package/dist/api/types/ArtifactUpdate.ts +0 -10
  364. package/dist/api/types/ArtifactUploadLink.ts +0 -15
  365. package/dist/api/types/Attribute.ts +0 -36
  366. package/dist/api/types/AttributeInventory.ts +0 -32
  367. package/dist/api/types/AuditLog.ts +0 -26
  368. package/dist/api/types/AuthSet.ts +0 -37
  369. package/dist/api/types/AuthSetDeviceauth.ts +0 -37
  370. package/dist/api/types/AuthSetIot_manager.ts +0 -33
  371. package/dist/api/types/AutoAuthRequest.ts +0 -23
  372. package/dist/api/types/AzureSharedAccessSecret.ts +0 -11
  373. package/dist/api/types/BillingInfo.ts +0 -13
  374. package/dist/api/types/BillingProfile.ts +0 -37
  375. package/dist/api/types/BillingProfileUpdate.ts +0 -37
  376. package/dist/api/types/BinaryDeltaConfiguration.ts +0 -15
  377. package/dist/api/types/BinaryDeltaConfigurationDeployments.ts +0 -15
  378. package/dist/api/types/BinaryDeltaLimits.ts +0 -21
  379. package/dist/api/types/BinaryDeltaLimitsDeployments.ts +0 -15
  380. package/dist/api/types/BoundingBox.ts +0 -9
  381. package/dist/api/types/CancelRequest.ts +0 -10
  382. package/dist/api/types/CardData.ts +0 -49
  383. package/dist/api/types/CardSetupData.ts +0 -17
  384. package/dist/api/types/CheckoutData.ts +0 -13
  385. package/dist/api/types/Configuration.ts +0 -11
  386. package/dist/api/types/Count.ts +0 -13
  387. package/dist/api/types/Credentials.ts +0 -23
  388. package/dist/api/types/DBusSubsystem.ts +0 -27
  389. package/dist/api/types/DeltaConfiguration.ts +0 -14
  390. package/dist/api/types/DeltaConfigurationDeployments.ts +0 -14
  391. package/dist/api/types/Deployment.ts +0 -45
  392. package/dist/api/types/DeploymentAggregation.ts +0 -16
  393. package/dist/api/types/DeploymentAggregationItem.ts +0 -16
  394. package/dist/api/types/DeploymentAggregationTerm.ts +0 -22
  395. package/dist/api/types/DeploymentAggregationTerms.ts +0 -16
  396. package/dist/api/types/DeploymentAttributeProjection.ts +0 -10
  397. package/dist/api/types/DeploymentAuditlogs.ts +0 -11
  398. package/dist/api/types/DeploymentDeployments.ts +0 -98
  399. package/dist/api/types/DeploymentFilterTerm.ts +0 -35
  400. package/dist/api/types/DeploymentIdentifier.ts +0 -10
  401. package/dist/api/types/DeploymentPhase.ts +0 -23
  402. package/dist/api/types/DeploymentPhaseDeployments.ts +0 -23
  403. package/dist/api/types/DeploymentReporting.ts +0 -46
  404. package/dist/api/types/DeploymentSearchTerms.ts +0 -37
  405. package/dist/api/types/DeploymentSortTerm.ts +0 -23
  406. package/dist/api/types/DeploymentStatistics.ts +0 -15
  407. package/dist/api/types/DeploymentStatisticsDeployments.ts +0 -15
  408. package/dist/api/types/DeploymentStatusStatistics.ts +0 -54
  409. package/dist/api/types/DeploymentStatusStatisticsDeployments.ts +0 -54
  410. package/dist/api/types/Device.ts +0 -20
  411. package/dist/api/types/DeviceAggregation.ts +0 -16
  412. package/dist/api/types/DeviceAggregationItem.ts +0 -16
  413. package/dist/api/types/DeviceAggregationTerm.ts +0 -26
  414. package/dist/api/types/DeviceAggregationTerms.ts +0 -20
  415. package/dist/api/types/DeviceAttribute.ts +0 -22
  416. package/dist/api/types/DeviceAttributeProjection.ts +0 -14
  417. package/dist/api/types/DeviceAuditlogs.ts +0 -17
  418. package/dist/api/types/DeviceAuthEvent.ts +0 -23
  419. package/dist/api/types/DeviceConfiguration.ts +0 -16
  420. package/dist/api/types/DeviceDeployment.ts +0 -11
  421. package/dist/api/types/DeviceDeployments.ts +0 -29
  422. package/dist/api/types/DeviceDeviceauth.ts +0 -42
  423. package/dist/api/types/DeviceFilterAttribute.ts +0 -21
  424. package/dist/api/types/DeviceFilterTerm.ts +0 -39
  425. package/dist/api/types/DeviceInventory.ts +0 -19
  426. package/dist/api/types/DeviceInventoryInventory.ts +0 -19
  427. package/dist/api/types/DeviceReporting.ts +0 -22
  428. package/dist/api/types/DeviceSearchTerms.ts +0 -37
  429. package/dist/api/types/DeviceSortTerm.ts +0 -27
  430. package/dist/api/types/DeviceState.ts +0 -32
  431. package/dist/api/types/DeviceStateDeviceconnect.ts +0 -33
  432. package/dist/api/types/DeviceStateIot_manager.ts +0 -14
  433. package/dist/api/types/DeviceStatus.ts +0 -19
  434. package/dist/api/types/DeviceWithImage.ts +0 -80
  435. package/dist/api/types/DirectUploadMetadata.ts +0 -18
  436. package/dist/api/types/EmailVerificationCompletion.ts +0 -13
  437. package/dist/api/types/EmailVerificationRequest.ts +0 -13
  438. package/dist/api/types/Error.ts +0 -17
  439. package/dist/api/types/ErrorAuditlogs.ts +0 -13
  440. package/dist/api/types/ErrorDeployments.ts +0 -17
  441. package/dist/api/types/ErrorDeviceauth.ts +0 -13
  442. package/dist/api/types/ErrorDeviceconfig.ts +0 -17
  443. package/dist/api/types/ErrorDeviceconnect.ts +0 -17
  444. package/dist/api/types/ErrorDevicemonitor.ts +0 -17
  445. package/dist/api/types/ErrorExt.ts +0 -18
  446. package/dist/api/types/ErrorInventory.ts +0 -17
  447. package/dist/api/types/ErrorIot_manager.ts +0 -17
  448. package/dist/api/types/ErrorNotFound.ts +0 -17
  449. package/dist/api/types/ErrorReporting.ts +0 -18
  450. package/dist/api/types/ErrorTenantadm.ts +0 -13
  451. package/dist/api/types/ErrorUseradm.ts +0 -17
  452. package/dist/api/types/Event.ts +0 -48
  453. package/dist/api/types/ExternalIdentity.ts +0 -17
  454. package/dist/api/types/Features.ts +0 -17
  455. package/dist/api/types/FileUpload.ts +0 -23
  456. package/dist/api/types/Filter.ts +0 -19
  457. package/dist/api/types/FilterAttribute.ts +0 -21
  458. package/dist/api/types/FilterDefinition.ts +0 -18
  459. package/dist/api/types/FilterDeployments.ts +0 -19
  460. package/dist/api/types/FilterInventory.ts +0 -19
  461. package/dist/api/types/FilterPredicate.ts +0 -48
  462. package/dist/api/types/FilterPredicateDeployments.ts +0 -48
  463. package/dist/api/types/FilterPredicateInventory.ts +0 -78
  464. package/dist/api/types/GeoBoundingBox.ts +0 -8
  465. package/dist/api/types/GeoBoundingBoxFilter.ts +0 -5
  466. package/dist/api/types/GeoDistance.ts +0 -15
  467. package/dist/api/types/GeoDistanceFilter.ts +0 -8
  468. package/dist/api/types/GeoPoint.ts +0 -14
  469. package/dist/api/types/Group.ts +0 -10
  470. package/dist/api/types/HTTP.ts +0 -19
  471. package/dist/api/types/IdentityData.ts +0 -25
  472. package/dist/api/types/InputParameter.ts +0 -8
  473. package/dist/api/types/Integration.ts +0 -30
  474. package/dist/api/types/JobStatus.ts +0 -13
  475. package/dist/api/types/Limit.ts +0 -21
  476. package/dist/api/types/LimitDeployments.ts +0 -21
  477. package/dist/api/types/LimitDeviceauth.ts +0 -10
  478. package/dist/api/types/LimitUseradm.ts +0 -11
  479. package/dist/api/types/Limits.ts +0 -11
  480. package/dist/api/types/LineDescriptor.ts +0 -11
  481. package/dist/api/types/LogSubsystem.ts +0 -23
  482. package/dist/api/types/LoginOptions.ts +0 -18
  483. package/dist/api/types/ManagementAPIConfiguration.ts +0 -5
  484. package/dist/api/types/MenderTypes.ts +0 -213
  485. package/dist/api/types/MonitorConfiguration.ts +0 -22
  486. package/dist/api/types/NewConfigurationDeployment.ts +0 -15
  487. package/dist/api/types/NewConfigurationDeploymentResponse.ts +0 -10
  488. package/dist/api/types/NewDeployment.ts +0 -42
  489. package/dist/api/types/NewDeploymentForGroup.ts +0 -33
  490. package/dist/api/types/NewDeploymentPhase.ts +0 -37
  491. package/dist/api/types/NewDeploymentPhaseDeployments.ts +0 -20
  492. package/dist/api/types/NewDeploymentV2.ts +0 -34
  493. package/dist/api/types/NewTenant.ts +0 -49
  494. package/dist/api/types/Object.ts +0 -38
  495. package/dist/api/types/OwnUserUpdate.ts +0 -21
  496. package/dist/api/types/PasswordResetCompletion.ts +0 -17
  497. package/dist/api/types/PasswordResetRequest.ts +0 -13
  498. package/dist/api/types/Permission.ts +0 -21
  499. package/dist/api/types/PermissionObject.ts +0 -14
  500. package/dist/api/types/PermissionSet.ts +0 -22
  501. package/dist/api/types/PermissionSetWithScope.ts +0 -15
  502. package/dist/api/types/PersonalAccessToken.ts +0 -29
  503. package/dist/api/types/PersonalAccessTokenRequest.ts +0 -18
  504. package/dist/api/types/Plan.ts +0 -19
  505. package/dist/api/types/PlanBindingDetails.ts +0 -13
  506. package/dist/api/types/PlanChangeRequest.ts +0 -14
  507. package/dist/api/types/PlanLimits.ts +0 -12
  508. package/dist/api/types/PreAuthSet.ts +0 -16
  509. package/dist/api/types/Release.ts +0 -32
  510. package/dist/api/types/ReleaseDeployments.ts +0 -32
  511. package/dist/api/types/ReleaseUpdate.ts +0 -13
  512. package/dist/api/types/Releases.ts +0 -9
  513. package/dist/api/types/ReleasesDeleteError.ts +0 -21
  514. package/dist/api/types/ReleasesDeployments.ts +0 -9
  515. package/dist/api/types/Role.ts +0 -19
  516. package/dist/api/types/RolePermission.ts +0 -25
  517. package/dist/api/types/RolePermissionObject.ts +0 -17
  518. package/dist/api/types/RoleUseradm.ts +0 -19
  519. package/dist/api/types/SAMLMetadata.ts +0 -21
  520. package/dist/api/types/Scope.ts +0 -19
  521. package/dist/api/types/SelectAttribute.ts +0 -17
  522. package/dist/api/types/ServiceSubsystem.ts +0 -19
  523. package/dist/api/types/Settings.ts +0 -23
  524. package/dist/api/types/SortCriteria.ts +0 -30
  525. package/dist/api/types/SsoObject.ts +0 -21
  526. package/dist/api/types/Status.ts +0 -18
  527. package/dist/api/types/StatusDeviceauth.ts +0 -18
  528. package/dist/api/types/StatusTenantadm.ts +0 -17
  529. package/dist/api/types/StorageLimit.ts +0 -17
  530. package/dist/api/types/SubscriptionData.ts +0 -8
  531. package/dist/api/types/SupportRequest.ts +0 -17
  532. package/dist/api/types/Tag.ts +0 -27
  533. package/dist/api/types/Tags.ts +0 -10
  534. package/dist/api/types/TaskResult.ts +0 -13
  535. package/dist/api/types/TaskResultCLI.ts +0 -10
  536. package/dist/api/types/TaskResultHTTPRequest.ts +0 -8
  537. package/dist/api/types/TaskResultHTTPResponse.ts +0 -10
  538. package/dist/api/types/Tenant.ts +0 -26
  539. package/dist/api/types/TenantApiLimits.ts +0 -12
  540. package/dist/api/types/TenantApiLimitsTenantadm.ts +0 -12
  541. package/dist/api/types/TenantIdName.ts +0 -14
  542. package/dist/api/types/TenantIdsData.ts +0 -10
  543. package/dist/api/types/TenantInfo.ts +0 -14
  544. package/dist/api/types/TenantShortInfo.ts +0 -21
  545. package/dist/api/types/TenantTenantadm.ts +0 -54
  546. package/dist/api/types/TenantsIdName.ts +0 -6
  547. package/dist/api/types/Update.ts +0 -17
  548. package/dist/api/types/UpdateChildTenant.ts +0 -17
  549. package/dist/api/types/UpdateDeployments.ts +0 -18
  550. package/dist/api/types/UpdateFile.ts +0 -13
  551. package/dist/api/types/UpdateFileDeployments.ts +0 -13
  552. package/dist/api/types/UpdateTypes.ts +0 -8
  553. package/dist/api/types/UpgradeCompleteRequest.ts +0 -25
  554. package/dist/api/types/User.ts +0 -13
  555. package/dist/api/types/UserAuditlogs.ts +0 -13
  556. package/dist/api/types/UserNew.ts +0 -26
  557. package/dist/api/types/UserUpdate.ts +0 -25
  558. package/dist/api/types/UserUseradm.ts +0 -45
  559. package/dist/api/types/UserWithTenantInfo.ts +0 -12
  560. package/dist/api/types/XDeltaArgs.ts +0 -9
  561. package/dist/api/types/XDeltaArgsDeployments.ts +0 -9
  562. package/dist/api/types/XDeltaArgsLimits.ts +0 -10
  563. package/dist/api/types/XDeltaArgsLimitsDeployments.ts +0 -10
  564. package/dist/chunk-4RWZR3BN.js +0 -104
  565. package/dist/chunk-4RWZR3BN.js.map +0 -1
  566. package/dist/chunk-7YZCUAXZ.js.map +0 -1
  567. package/dist/chunk-AFICTIVU.js.map +0 -1
  568. package/dist/chunk-AUBJUUP3.js.map +0 -1
  569. package/dist/chunk-AVX7VVOK.js.map +0 -1
  570. package/dist/chunk-BSN2TOQC.js +0 -245
  571. package/dist/chunk-BSN2TOQC.js.map +0 -1
  572. package/dist/chunk-DCEKU6UV.js.map +0 -1
  573. package/dist/chunk-DGQKXSRI.js.map +0 -1
  574. package/dist/chunk-EQLHIPPR.js.map +0 -1
  575. package/dist/chunk-EYCORLYU.js.map +0 -1
  576. package/dist/chunk-FQDSV3NK.js.map +0 -1
  577. package/dist/chunk-FRSA2YB5.js.map +0 -1
  578. package/dist/chunk-FVCYB5OP.js.map +0 -1
  579. package/dist/chunk-GAI4VYRZ.js.map +0 -1
  580. package/dist/chunk-GWJIY56H.js.map +0 -1
  581. package/dist/chunk-JO33IORF.js.map +0 -1
  582. package/dist/chunk-K4MMUDYT.js.map +0 -1
  583. package/dist/chunk-L3SY3J5M.js.map +0 -1
  584. package/dist/chunk-LIJIIRON.js +0 -28
  585. package/dist/chunk-LIJIIRON.js.map +0 -1
  586. package/dist/chunk-MRCFLG45.js.map +0 -1
  587. package/dist/chunk-NCSKCF2S.js.map +0 -1
  588. package/dist/chunk-NOQR3TE7.js.map +0 -1
  589. package/dist/chunk-OEP2D6QL.js +0 -727
  590. package/dist/chunk-OEP2D6QL.js.map +0 -1
  591. package/dist/chunk-PAIB5V27.js.map +0 -1
  592. package/dist/chunk-RX32WLVJ.js.map +0 -1
  593. package/dist/chunk-X3GZILYD.js.map +0 -1
  594. package/dist/chunk-Y575RZHR.js.map +0 -1
  595. package/dist/chunk-ZWOAFHAR.js.map +0 -1
  596. package/dist/deploymentdevicehook.cjs.map +0 -1
  597. package/dist/deploymentdevicehook.js +0 -63
  598. package/dist/deploymentdevicehook.js.map +0 -1
  599. package/dist/types-DBj17FZO.d.cts +0 -135
  600. package/dist/types-DnfZa6xd.d.ts +0 -135
  601. /package/dist/{chunk-ZZMFXRQK.js.map → chunk-URNS6A5T.js.map} +0 -0
  602. /package/dist/{deploymentdevicehook.d.cts → useDeploymentDevice.d.cts} +0 -0
  603. /package/dist/{deploymentdevicehook.d.ts → useDeploymentDevice.d.ts} +0 -0
@@ -41,13 +41,25 @@ __export(thunks_exports, {
41
41
  getUpdateTypes: () => getUpdateTypes,
42
42
  removeArtifact: () => removeArtifact,
43
43
  removeRelease: () => removeRelease,
44
+ removeReleases: () => removeReleases,
44
45
  selectRelease: () => selectRelease,
45
46
  setReleaseTags: () => setReleaseTags,
46
47
  setReleasesListState: () => setReleasesListState,
48
+ setReleasesTags: () => setReleasesTags,
49
+ setSingleReleaseTags: () => setSingleReleaseTags,
47
50
  updateReleaseInfo: () => updateReleaseInfo,
48
51
  uploadArtifact: () => uploadArtifact
49
52
  });
50
53
  module.exports = __toCommonJS(thunks_exports);
54
+ var import_helpers8 = require("@northern.tech/utils/helpers");
55
+ var import_axios2 = require("axios");
56
+ var import_uuid = require("uuid");
57
+
58
+ // src/releasesSlice/index.ts
59
+ var import_toolkit = require("@reduxjs/toolkit");
60
+
61
+ // src/constants.ts
62
+ var import_constants4 = require("@northern.tech/utils/constants");
51
63
 
52
64
  // src/appSlice/constants.ts
53
65
  var import_icons_material = require("@mui/icons-material");
@@ -55,16 +67,6 @@ var startingDeviceCount = {
55
67
  os: "for first 50 devices",
56
68
  professional: "for first 250 devices"
57
69
  };
58
- var apiRoot = "/api/management";
59
- var apiUrl = {
60
- v1: `${apiRoot}/v1`,
61
- v2: `${apiRoot}/v2`
62
- };
63
- var headerNames = {
64
- link: "link",
65
- location: "location",
66
- total: "x-total-count"
67
- };
68
70
  var chartTypes = {
69
71
  bar: { key: "bar", Icon: import_icons_material.BarChart },
70
72
  pie: { key: "pie", Icon: import_icons_material.PieChartOutline }
@@ -76,28 +78,30 @@ var PLANS = {
76
78
  os: {
77
79
  id: "os",
78
80
  name: "Basic",
81
+ minimalDeviceCount: 50,
79
82
  offer: true,
80
- price: "$32 / month",
83
+ price: "$34 / month",
81
84
  deviceCount: startingDeviceCount.os,
82
- offerprice: "$23 / month for first 50 devices",
83
- price2: "for first 6 months;\n$29/month thereafter",
85
+ description: "The core features of Mender. To continue using Enterprise Trial features\u2014like Delta updates, scheduled deployments, phased rollouts, device filtering, dynamic groups, RBAC, audit logs, and more\u2014please upgrade to a higher plan.",
84
86
  features: ["Access to core features of Mender", "Basic support"]
85
87
  },
86
88
  professional: {
87
89
  id: "professional",
88
90
  name: "Professional",
91
+ minimalDeviceCount: 250,
89
92
  offer: true,
90
- price: "$269 / month",
93
+ price: "$291 / month",
91
94
  deviceCount: startingDeviceCount.professional,
92
- offerprice: "$200 / month for first 50 devices",
93
- price2: "for first 6 months;\n$249/month thereafter",
95
+ description: "Everything in Basic, plus enhanced update management and automation features.",
94
96
  features: ["Advanced OTA features", "Higher priority support"]
95
97
  },
96
98
  enterprise: {
97
99
  id: "enterprise",
98
100
  name: "Enterprise",
101
+ minimalDeviceCount: 1e3,
99
102
  price: "Custom pricing",
100
103
  deviceCount: "Unlimited devices",
104
+ description: "Every advanced feature of Mender, tailored for complex and large-scale deployments. Not available as a monthly subscription \u2014 ask us for a quote.",
101
105
  features: ["All Mender features", "Advanced security features", "SLA-backed support"]
102
106
  }
103
107
  };
@@ -117,21 +121,6 @@ var ADDONS = {
117
121
  },
118
122
  eligible: ["os", "professional", "enterprise"]
119
123
  },
120
- troubleshoot: {
121
- id: "troubleshoot",
122
- title: "Troubleshoot",
123
- description: "Expand your plan with device troubleshooting features",
124
- needs: ["hasDeviceConnect"],
125
- os: {
126
- price: "$27/month",
127
- deviceCount: startingDeviceCount.os
128
- },
129
- professional: {
130
- price: "$72/month",
131
- deviceCount: startingDeviceCount.professional
132
- },
133
- eligible: ["os", "professional", "enterprise"]
134
- },
135
124
  monitor: {
136
125
  id: "monitor",
137
126
  title: "Monitor",
@@ -146,6 +135,21 @@ var ADDONS = {
146
135
  deviceCount: startingDeviceCount.professional
147
136
  },
148
137
  eligible: ["professional", "enterprise"]
138
+ },
139
+ troubleshoot: {
140
+ id: "troubleshoot",
141
+ title: "Troubleshoot",
142
+ description: "Expand your plan with device troubleshooting features",
143
+ needs: ["hasDeviceConnect"],
144
+ os: {
145
+ price: "$27/month",
146
+ deviceCount: startingDeviceCount.os
147
+ },
148
+ professional: {
149
+ price: "$72/month",
150
+ deviceCount: startingDeviceCount.professional
151
+ },
152
+ eligible: ["os", "professional", "enterprise"]
149
153
  }
150
154
  };
151
155
  var BENEFITS = {
@@ -186,139 +190,15 @@ var DARK_MODE = "dark";
186
190
 
187
191
  // src/commonConstants.tsx
188
192
  var import_js = require("@mdi/js");
193
+ var import_MenderTypes = require("@northern.tech/types/MenderTypes");
189
194
  var import_jsx_runtime = require("react/jsx-runtime");
190
- var DEVICE_LIST_DEFAULTS = {
191
- page: 1,
192
- perPage: 20
193
- };
194
195
  var timeUnits = {
195
196
  days: "days",
196
197
  minutes: "minutes",
197
198
  hours: "hours"
198
199
  };
199
- var ALL_DEVICES = "All devices";
200
200
  var UNGROUPED_GROUP = { id: "*|=ungrouped=|*", name: "Unassigned" };
201
201
  var DEVICE_LIST_MAXIMUM_LENGTH = 50;
202
- var DEVICE_FILTERING_OPTIONS = {
203
- $eq: { key: "$eq", title: "equals", shortform: "=" },
204
- $ne: { key: "$ne", title: "not equal", shortform: "!=" },
205
- $gt: {
206
- key: "$gt",
207
- title: ">",
208
- shortform: ">",
209
- help: 'The "greater than" operator can work both on numbers and strings. In the latter case, the operator applies the lexicographical order to the value strings.'
210
- },
211
- $gte: {
212
- title: ">=",
213
- shortform: ">=",
214
- help: 'The "greater than or equal" operator can work both on numbers and strings. In the latter case, the operator applies the lexicographical order to the value strings.'
215
- },
216
- $lt: {
217
- key: "$lt",
218
- title: "<",
219
- shortform: "<",
220
- help: 'The "lesser than" operator can work both on numbers and strings. In the latter case, the operator applies the lexicographical order to the value strings.'
221
- },
222
- $lte: {
223
- title: "<=",
224
- shortform: "<=",
225
- help: 'The "lesser than or equal" operator can work both on numbers and strings. In the latter case, the operator applies the lexicographical order to the value strings.'
226
- },
227
- $ltne: {
228
- key: "$ltne",
229
- title: "$ltne",
230
- shortform: "ltne",
231
- help: 'The "lesser than or does not exist" operator can work both on numbers and strings. In the latter case, the operator applies the lexicographical order to the value strings.'
232
- },
233
- $in: {
234
- key: "$in",
235
- title: "in",
236
- shortform: "in",
237
- help: 'The "in" operator accepts a list of comma-separated values. It matches if the selected field is equal to one of the specified values.'
238
- },
239
- $nin: {
240
- key: "$nin",
241
- title: "not in",
242
- shortform: "not in",
243
- help: `The "not in" operator accepts a list of comma-separated values. It matches if the selected field's value is not equal to any of the specified options.`
244
- },
245
- $exists: {
246
- key: "$exists",
247
- title: "exists",
248
- shortform: "exists",
249
- value: true,
250
- help: `The "exists" operator matches if the selected field's value has a value. No value needs to be provided for this operator.`
251
- },
252
- $nexists: {
253
- key: "$nexists",
254
- title: `doesn't exist`,
255
- shortform: `doesn't exist`,
256
- value: true,
257
- help: `The "doesn't exist" operator matches if the selected field's value has no value. No value needs to be provided for this operator.`
258
- },
259
- $regex: {
260
- key: "$regex",
261
- title: `matches regular expression`,
262
- shortform: `matches`,
263
- help: `The "regular expression" operator matches the selected field's value with a Perl compatible regular expression (PCRE), automatically anchored by ^. If the regular expression is not valid, the filter will produce no results. If you need to specify options and flags, you can provide the full regex in the format of /regex/flags, for example.`
264
- }
265
- };
266
- var DEVICE_ISSUE_OPTIONS = {
267
- issues: {
268
- isCategory: true,
269
- key: "issues",
270
- title: "Devices with issues",
271
- filterRule: {}
272
- },
273
- offline: {
274
- issueCategory: "issues",
275
- key: "offline",
276
- needsFullFiltering: true,
277
- needsMonitor: false,
278
- needsReporting: false,
279
- filterRule: {
280
- scope: "system",
281
- key: "check_in_time",
282
- operator: DEVICE_FILTERING_OPTIONS.$ltne.key,
283
- value: ({ offlineThreshold }) => offlineThreshold
284
- },
285
- title: "Offline devices"
286
- },
287
- failedLastUpdate: {
288
- issueCategory: "issues",
289
- key: "failedLastUpdate",
290
- needsFullFiltering: false,
291
- needsMonitor: false,
292
- needsReporting: true,
293
- filterRule: { scope: "monitor", key: "failed_last_update", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: true },
294
- title: "Deployment failed"
295
- },
296
- monitoring: {
297
- issueCategory: "issues",
298
- key: "monitoring",
299
- needsFullFiltering: false,
300
- needsMonitor: true,
301
- needsReporting: false,
302
- filterRule: { scope: "monitor", key: "alerts", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: true },
303
- title: "Monitoring alert"
304
- },
305
- authRequests: {
306
- key: "authRequests",
307
- needsFullFiltering: false,
308
- needsMonitor: false,
309
- needsReporting: true,
310
- filterRule: { scope: "monitor", key: "auth_requests", operator: DEVICE_FILTERING_OPTIONS.$gt.key, value: 1 },
311
- title: "Devices with new authentication requests"
312
- },
313
- gatewayDevices: {
314
- key: "gatewayDevices",
315
- needsFullFiltering: false,
316
- needsMonitor: false,
317
- needsReporting: true,
318
- filterRule: { scope: "inventory", key: "mender_is_gateway", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "true" },
319
- title: "Gateway devices"
320
- }
321
- };
322
202
  var oneSecond = 1e3;
323
203
  var TIMEOUTS = {
324
204
  debounceDefault: 700,
@@ -331,23 +211,12 @@ var TIMEOUTS = {
331
211
  refreshDefault: 10 * oneSecond,
332
212
  refreshLong: 60 * oneSecond
333
213
  };
334
- var SORTING_OPTIONS = {
335
- asc: "asc",
336
- desc: "desc"
337
- };
338
214
  var DEVICE_ONLINE_CUTOFF = { interval: 1, intervalName: timeUnits.days };
339
- var ATTRIBUTE_SCOPES = {
340
- inventory: "inventory",
341
- identity: "identity",
342
- monitor: "monitor",
343
- system: "system",
344
- tags: "tags"
345
- };
346
- var defaultIdAttribute = Object.freeze({ attribute: "id", scope: ATTRIBUTE_SCOPES.identity });
215
+ var defaultIdAttribute = Object.freeze({ attribute: "id", scope: import_constants4.ATTRIBUTE_SCOPES.identity });
347
216
  var credentialTypes = {
348
- aws: "aws",
349
- http: "http",
350
- sas: "sas",
217
+ aws: import_MenderTypes.Credentials.type.AWS,
218
+ http: import_MenderTypes.Credentials.type.HTTP,
219
+ sas: import_MenderTypes.Credentials.type.SAS,
351
220
  x509: "x509"
352
221
  };
353
222
  var EXTERNAL_PROVIDER = {
@@ -387,31 +256,277 @@ var EXTERNAL_PROVIDER = {
387
256
  webhook: {
388
257
  credentialsType: credentialTypes.http,
389
258
  deviceTwin: false,
259
+ twinTitle: "",
390
260
  // disable the webhook provider here, since it is treated different than other integrations, with a custom configuration & management view, etc.
391
261
  enabled: false,
392
262
  provider: "webhook"
393
263
  }
394
264
  };
395
- var ALL_RELEASES = "All releases";
396
- var emptyUiPermissions = Object.freeze({
397
- auditlog: [],
398
- deployments: [],
399
- groups: Object.freeze({}),
400
- releases: Object.freeze({}),
401
- tenantManagement: [],
402
- userManagement: []
403
- });
404
- var emptyRole = Object.freeze({
405
- name: void 0,
265
+ var emptyWebhook = {
406
266
  description: "",
407
- permissions: [],
408
- uiPermissions: Object.freeze({ ...emptyUiPermissions })
409
- });
267
+ provider: import_MenderTypes.Integration.provider.WEBHOOK,
268
+ credentials: {
269
+ type: EXTERNAL_PROVIDER.webhook.credentialsType,
270
+ [EXTERNAL_PROVIDER.webhook.credentialsType]: {
271
+ secret: "",
272
+ url: ""
273
+ }
274
+ }
275
+ };
276
+ var regionNames = new Intl.DisplayNames(["en"], { type: "region" });
277
+ var countries = [
278
+ "AD",
279
+ "AE",
280
+ "AF",
281
+ "AG",
282
+ "AI",
283
+ "AL",
284
+ "AM",
285
+ "AO",
286
+ "AQ",
287
+ "AR",
288
+ "AS",
289
+ "AT",
290
+ "AU",
291
+ "AW",
292
+ "AX",
293
+ "AZ",
294
+ "BA",
295
+ "BB",
296
+ "BD",
297
+ "BE",
298
+ "BF",
299
+ "BG",
300
+ "BH",
301
+ "BI",
302
+ "BJ",
303
+ "BL",
304
+ "BM",
305
+ "BN",
306
+ "BO",
307
+ "BR",
308
+ "BS",
309
+ "BT",
310
+ "BV",
311
+ "BW",
312
+ "BY",
313
+ "BZ",
314
+ "CA",
315
+ "CC",
316
+ "CD",
317
+ "CF",
318
+ "CG",
319
+ "CH",
320
+ "CI",
321
+ "CK",
322
+ "CL",
323
+ "CM",
324
+ "CN",
325
+ "CO",
326
+ "CR",
327
+ "CU",
328
+ "CV",
329
+ "CW",
330
+ "CX",
331
+ "CY",
332
+ "CZ",
333
+ "DE",
334
+ "DJ",
335
+ "DK",
336
+ "DM",
337
+ "DO",
338
+ "DZ",
339
+ "EC",
340
+ "EE",
341
+ "EG",
342
+ "EH",
343
+ "ER",
344
+ "ES",
345
+ "ET",
346
+ "FI",
347
+ "FJ",
348
+ "FK",
349
+ "FM",
350
+ "FO",
351
+ "FR",
352
+ "GA",
353
+ "GB",
354
+ "GD",
355
+ "GE",
356
+ "GF",
357
+ "GG",
358
+ "GH",
359
+ "GI",
360
+ "GL",
361
+ "GM",
362
+ "GN",
363
+ "GP",
364
+ "GQ",
365
+ "GR",
366
+ "GS",
367
+ "GT",
368
+ "GU",
369
+ "GW",
370
+ "GY",
371
+ "HK",
372
+ "HM",
373
+ "HN",
374
+ "HR",
375
+ "HT",
376
+ "HU",
377
+ "ID",
378
+ "IE",
379
+ "IL",
380
+ "IM",
381
+ "IN",
382
+ "IO",
383
+ "IQ",
384
+ "IR",
385
+ "IS",
386
+ "IT",
387
+ "JE",
388
+ "JM",
389
+ "JO",
390
+ "JP",
391
+ "KE",
392
+ "KG",
393
+ "KH",
394
+ "KI",
395
+ "KM",
396
+ "KN",
397
+ "KP",
398
+ "KR",
399
+ "KW",
400
+ "KY",
401
+ "KZ",
402
+ "LA",
403
+ "LB",
404
+ "LC",
405
+ "LI",
406
+ "LK",
407
+ "LR",
408
+ "LS",
409
+ "LT",
410
+ "LU",
411
+ "LV",
412
+ "LY",
413
+ "MA",
414
+ "MC",
415
+ "MD",
416
+ "ME",
417
+ "MF",
418
+ "MG",
419
+ "MH",
420
+ "MK",
421
+ "ML",
422
+ "MM",
423
+ "MN",
424
+ "MO",
425
+ "MP",
426
+ "MQ",
427
+ "MR",
428
+ "MS",
429
+ "MT",
430
+ "MU",
431
+ "MV",
432
+ "MW",
433
+ "MX",
434
+ "MY",
435
+ "MZ",
436
+ "NA",
437
+ "NC",
438
+ "NE",
439
+ "NF",
440
+ "NG",
441
+ "NI",
442
+ "NL",
443
+ "NO",
444
+ "NP",
445
+ "NR",
446
+ "NU",
447
+ "NZ",
448
+ "OM",
449
+ "PA",
450
+ "PE",
451
+ "PF",
452
+ "PG",
453
+ "PH",
454
+ "PK",
455
+ "PL",
456
+ "PM",
457
+ "PN",
458
+ "PR",
459
+ "PS",
460
+ "PT",
461
+ "PW",
462
+ "PY",
463
+ "QA",
464
+ "RE",
465
+ "RO",
466
+ "RS",
467
+ "RU",
468
+ "RW",
469
+ "SA",
470
+ "SB",
471
+ "SC",
472
+ "SD",
473
+ "SE",
474
+ "SG",
475
+ "SH",
476
+ "SI",
477
+ "SJ",
478
+ "SK",
479
+ "SL",
480
+ "SM",
481
+ "SN",
482
+ "SO",
483
+ "SR",
484
+ "SS",
485
+ "ST",
486
+ "SV",
487
+ "SX",
488
+ "SY",
489
+ "SZ",
490
+ "TC",
491
+ "TD",
492
+ "TF",
493
+ "TG",
494
+ "TH",
495
+ "TJ",
496
+ "TK",
497
+ "TL",
498
+ "TM",
499
+ "TN",
500
+ "TO",
501
+ "TR",
502
+ "TT",
503
+ "TV",
504
+ "TW",
505
+ "TZ",
506
+ "UA",
507
+ "UG",
508
+ "US",
509
+ "UY",
510
+ "UZ",
511
+ "VA",
512
+ "VC",
513
+ "VE",
514
+ "VG",
515
+ "VI",
516
+ "VN",
517
+ "VU",
518
+ "WF",
519
+ "WS",
520
+ "XK",
521
+ "YE",
522
+ "YT",
523
+ "ZA",
524
+ "ZM",
525
+ "ZW"
526
+ ].map((code) => ({ code, label: regionNames.of(code) })).sort((a, b) => a.label.localeCompare(b.label));
410
527
 
411
528
  // src/deploymentsSlice/constants.ts
412
529
  var alreadyInstalled = "already-installed";
413
- var deploymentsApiUrl = `${apiUrl.v1}/deployments`;
414
- var deploymentsApiUrlV2 = `${apiUrl.v2}/deployments`;
415
530
  var deploymentSubstates = {
416
531
  aborted: "aborted",
417
532
  alreadyInstalled,
@@ -484,9 +599,9 @@ var DEPLOYMENT_STATES = {
484
599
  var listDefaultsByState = {
485
600
  [DEPLOYMENT_STATES.inprogress]: { page: 1, perPage: 10 },
486
601
  [DEPLOYMENT_STATES.pending]: { page: 1, perPage: 10 },
487
- [DEPLOYMENT_STATES.scheduled]: { ...DEVICE_LIST_DEFAULTS },
488
- [DEPLOYMENT_STATES.finished]: { ...DEVICE_LIST_DEFAULTS },
489
- sort: { direction: SORTING_OPTIONS.desc }
602
+ [DEPLOYMENT_STATES.scheduled]: { ...import_constants4.DEVICE_LIST_DEFAULTS },
603
+ [DEPLOYMENT_STATES.finished]: { ...import_constants4.DEVICE_LIST_DEFAULTS },
604
+ sort: { direction: import_constants4.SORTING_OPTIONS.desc }
490
605
  };
491
606
  var DEFAULT_PENDING_INPROGRESS_COUNT = 10;
492
607
  var DEPLOYMENT_ROUTES = {
@@ -543,29 +658,11 @@ var pauseMap = {
543
658
  followUp: installationSubstatesMap.reboot.pauseConfigurationIndicator
544
659
  }
545
660
  };
546
- var limitDefault = { min: 5, max: 100, default: 10 };
547
661
 
548
662
  // src/devicesSlice/constants.ts
549
- var emptyFilter = { key: null, value: "", operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: "inventory" };
550
- var deviceAuthV2 = `${apiUrl.v2}/devauth`;
551
- var deviceConnect = `${apiUrl.v1}/deviceconnect`;
552
- var inventoryApiUrl = `${apiUrl.v1}/inventory`;
553
- var inventoryApiUrlV2 = `${apiUrl.v2}/inventory`;
554
- var deviceConfig = `${apiUrl.v1}/deviceconfig/configurations/device`;
555
- var reportingApiUrl = `${apiUrl.v1}/reporting`;
556
- var iotManagerBaseURL = `${apiUrl.v1}/iot-manager`;
557
- var DEVICE_STATES = {
558
- accepted: "accepted",
559
- pending: "pending",
560
- preauth: "preauthorized",
561
- rejected: "rejected"
562
- };
663
+ var emptyFilter = { key: null, value: "", operator: import_constants4.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "inventory" };
563
664
  var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
564
665
 
565
- // src/monitorSlice/constants.ts
566
- var alertChannels = { email: "email" };
567
- var monitorApiUrlv1 = `${apiUrl.v1}/devicemonitor`;
568
-
569
666
  // src/onboardingSlice/constants.ts
570
667
  var onboardingSteps = {
571
668
  ONBOARDING_START: "onboarding-start",
@@ -582,6 +679,7 @@ var onboardingSteps = {
582
679
  SCHEDULING_GROUP_SELECTION: "scheduling-group-selection",
583
680
  SCHEDULING_RELEASE_TO_DEVICES: "scheduling-release-to-devices",
584
681
  DEPLOYMENTS_INPROGRESS: "deployments-inprogress",
682
+ DEPLOYMENTS_COMPLETED: "deployments-completed",
585
683
  DEPLOYMENTS_PAST: "deployments-past",
586
684
  DEPLOYMENTS_PAST_COMPLETED: "deployments-past-completed",
587
685
  DEPLOYMENTS_PAST_COMPLETED_FAILURE: "deployments-past-completed-failure",
@@ -608,10 +706,6 @@ var orderedOnboardingSteps = [
608
706
  ];
609
707
 
610
708
  // src/organizationSlice/constants.ts
611
- var auditLogsApiUrl = `${apiUrl.v1}/auditlogs`;
612
- var tenantadmApiUrlv1 = `${apiUrl.v1}/tenantadm`;
613
- var tenantadmApiUrlv2 = `${apiUrl.v2}/tenantadm`;
614
- var ssoIdpApiUrlv1 = `${apiUrl.v1}/useradm/sso/idp/metadata`;
615
709
  var auditlogTypes = {
616
710
  artifact: { title: "Artifact", queryParameter: "object_type", value: "artifact" },
617
711
  deployment: { title: "Deployment", queryParameter: "object_deployment_name", value: "deployment" },
@@ -622,17 +716,6 @@ var auditlogTypes = {
622
716
  };
623
717
  var AUDIT_LOGS_TYPES = [auditlogTypes.artifact, auditlogTypes.deployment, auditlogTypes.device, auditlogTypes.user_access_token, auditlogTypes.user];
624
718
  var SP_AUDIT_LOGS_TYPES = [auditlogTypes.user, auditlogTypes.tenant];
625
- var emptyWebhook = {
626
- description: "",
627
- enabled: true,
628
- credentials: {
629
- type: EXTERNAL_PROVIDER.webhook.credentialsType,
630
- [EXTERNAL_PROVIDER.webhook.credentialsType]: {
631
- secret: "",
632
- url: ""
633
- }
634
- }
635
- };
636
719
  var TENANT_LIST_DEFAULT = {
637
720
  page: 1,
638
721
  perPage: 20
@@ -644,385 +727,7 @@ var rootfsImageVersion = "rootfs-image.version";
644
727
  var softwareTitleMap = { [rootfsImageVersion]: { title: "Root filesystem", priority: 0, key: rootfsImageVersion } };
645
728
 
646
729
  // src/usersSlice/constants.ts
647
- var useradmApiUrlv1 = `${apiUrl.v1}/useradm`;
648
- var useradmApiUrlv2 = `${apiUrl.v2}/useradm`;
649
- var staticRolesByName = {
650
- admin: "RBAC_ROLE_PERMIT_ALL",
651
- readOnly: "RBAC_ROLE_OBSERVER",
652
- ci: "RBAC_ROLE_CI",
653
- deploymentsManager: "RBAC_ROLE_DEPLOYMENTS_MANAGER",
654
- terminalAccess: "RBAC_ROLE_REMOTE_TERMINAL"
655
- };
656
- var PermissionTypes = {
657
- Any: "any",
658
- Get: "GET",
659
- Post: "POST",
660
- Put: "PUT",
661
- Delete: "DELETE",
662
- Patch: "PATCH",
663
- DeviceGroup: "DEVICE_GROUP",
664
- DeviceId: "DEVICE_ID"
665
- };
666
- var permissionSetIds = {
667
- Basic: "Basic",
668
- ConfigureDevices: "ConfigureDevices",
669
- ConnectToDevices: "ConnectToDevices",
670
- DeployToDevices: "DeployToDevices",
671
- ManageDevices: "ManageDevices",
672
- ManageReleases: "ManageReleases",
673
- ManageTenants: "ManageTenants",
674
- ManageUsers: "ManageUsers",
675
- ReadAuditLogs: "ReadAuditLogs",
676
- ReadDevices: "ReadDevices",
677
- ReadReleases: "ReadReleases",
678
- ReadTenants: "ReadTenants",
679
- ReadUsers: "ReadUsers",
680
- SuperUser: "SuperUser",
681
- UploadArtifacts: "UploadArtifacts"
682
- };
683
- var uiPermissionsById = {
684
- configure: {
685
- explanations: { groups: `'Configure' allows the user to use mender-configure features and apply configurations.` },
686
- permissionLevel: 2,
687
- permissionSets: { groups: permissionSetIds.ConfigureDevices },
688
- title: "Configure",
689
- value: "configure",
690
- verbs: [PermissionTypes.Get, PermissionTypes.Put, PermissionTypes.Post]
691
- },
692
- connect: {
693
- explanations: { groups: `'Connect' allows the user to use mender-connect features and Troubleshoot add-ons.` },
694
- permissionLevel: 2,
695
- permissionSets: { groups: permissionSetIds.ConnectToDevices },
696
- title: "Connect",
697
- value: "connect",
698
- verbs: [PermissionTypes.Get, PermissionTypes.Put]
699
- },
700
- deploy: {
701
- explanations: { groups: `'Deploy' allows the user to deploy software or configuration updates to devices.` },
702
- permissionLevel: 2,
703
- permissionSets: { deployments: permissionSetIds.DeployToDevices, groups: permissionSetIds.DeployToDevices },
704
- title: "Deploy",
705
- value: "deploy",
706
- verbs: [PermissionTypes.Post]
707
- },
708
- manage: {
709
- explanations: {
710
- groups: `'Manage' allows the user to edit device name, notes, and manage authentication status. For 'All devices' it also allows the user to edit and create device groups.`,
711
- releases: `'Manage' allows the user to upload new artifacts, edit release descriptions and remove artifacts.`
712
- },
713
- permissionLevel: 2,
714
- permissionSets: {
715
- groups: permissionSetIds.ManageDevices,
716
- releases: permissionSetIds.ManageReleases,
717
- tenantManagement: permissionSetIds.ManageTenants,
718
- userManagement: permissionSetIds.ManageUsers
719
- },
720
- title: "Manage",
721
- value: "manage",
722
- verbs: [PermissionTypes.Post, PermissionTypes.Put, PermissionTypes.Patch]
723
- },
724
- read: {
725
- explanations: { groups: `'Read' allows the user to view devices.` },
726
- permissionLevel: 1,
727
- permissionSets: {
728
- auditlog: permissionSetIds.ReadAuditLogs,
729
- groups: permissionSetIds.ReadDevices,
730
- releases: permissionSetIds.ReadReleases,
731
- tenantManagement: permissionSetIds.ReadTenants,
732
- userManagement: permissionSetIds.ReadUsers
733
- },
734
- title: "Read",
735
- value: "read",
736
- verbs: [PermissionTypes.Get, PermissionTypes.Post]
737
- },
738
- upload: {
739
- explanations: { groups: `'Upload' allows the user to upload new Artifacts.` },
740
- unscopedOnly: { releases: true },
741
- permissionLevel: 1,
742
- permissionSets: { releases: permissionSetIds.UploadArtifacts },
743
- title: "Upload",
744
- value: "upload",
745
- verbs: [PermissionTypes.Post, PermissionTypes.Put, PermissionTypes.Patch]
746
- }
747
- };
748
- var scopedPermissionAreas = {
749
- groups: { key: "groups", excessiveAccessSelector: ALL_DEVICES, scopeType: "DeviceGroups" },
750
- releases: { key: "releases", excessiveAccessSelector: ALL_RELEASES, scopeType: "Releases" }
751
- };
752
- var uiPermissionsByArea = {
753
- auditlog: {
754
- endpoints: [{ path: /\/(auditlog)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] }],
755
- explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
756
- key: "auditlog",
757
- uiPermissions: [uiPermissionsById.read],
758
- title: "System Audit Log"
759
- },
760
- deployments: {
761
- endpoints: [
762
- { path: /\/(deployments\/deployments)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.deploy] },
763
- { path: /\/(deployments\/deployments)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
764
- { path: /\/(deployments\/config)/i, types: [PermissionTypes.Get, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] }
765
- ],
766
- explanation: "Providing deploy permissions will allow deployments to be created using the releases and devices a user has access to.",
767
- key: "deployments",
768
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.deploy],
769
- title: "Deployments"
770
- },
771
- groups: {
772
- endpoints: [
773
- {
774
- path: /\/(devauth|inventory|deviceconfig|devicemonitor|deviceconnect\/devices)/i,
775
- types: [PermissionTypes.Get],
776
- uiPermissions: [uiPermissionsById.read]
777
- },
778
- { path: /\/(devauth|inventory)/i, types: [PermissionTypes.Put, PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] },
779
- { path: /\/(deviceconfig)/i, types: [PermissionTypes.Get, PermissionTypes.Put, PermissionTypes.Post], uiPermissions: [uiPermissionsById.configure] },
780
- { path: /\/(deviceconnect\/devices)/i, types: [PermissionTypes.Get, PermissionTypes.Post], uiPermissions: [uiPermissionsById.connect] }
781
- ],
782
- explanation: "Device group management permissions control the degree to which devices in a group can be accessed and moved to other groups.",
783
- key: "groups",
784
- scope: scopedPermissionAreas.groups.scopeType,
785
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.deploy, uiPermissionsById.configure, uiPermissionsById.connect],
786
- title: "Group Management"
787
- },
788
- releases: {
789
- endpoints: [
790
- { path: /\/(deployments\/artifacts|deployments\/deployments\/releases)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
791
- {
792
- path: /\/(deployments\/artifacts|deployments\/deployments\/releases)/i,
793
- types: [PermissionTypes.Post, PermissionTypes.Put],
794
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.upload]
795
- },
796
- {
797
- path: /\/(deployments\/artifacts|deployments\/deployments\/releases)/i,
798
- types: [PermissionTypes.Delete],
799
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage]
800
- }
801
- ],
802
- explanation: "Release permissions can be granted to allow artifact & release modifications, as well as the creation of new releases.",
803
- key: "releases",
804
- scope: "ReleaseTags",
805
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.upload],
806
- title: "Release Management"
807
- },
808
- tenantManagement: {
809
- endpoints: [
810
- { path: /\/(tenantadm\/tenants)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
811
- { path: /\/(tenantadm\/tenants)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] },
812
- { path: /\/(users\/exists)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.manage] }
813
- ],
814
- explanation: "Tenant management permissions allow listing, creating and modifying child tenants",
815
- key: "tenantManagement",
816
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],
817
- title: "Tenant Management"
818
- },
819
- userManagement: {
820
- endpoints: [
821
- { path: /\/(useradm)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
822
- { path: /\/(useradm)/i, types: [PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] }
823
- ],
824
- explanation: "User management permissions should be granted carefully, as these allow privilege increases for any users managed by a user with user management permissions",
825
- key: "userManagement",
826
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],
827
- title: "User Management"
828
- }
829
- };
830
- var permissionMapper = (permission) => permission.value;
831
- var rolesById = Object.freeze({
832
- [staticRolesByName.admin]: {
833
- name: "Admin",
834
- value: staticRolesByName.admin,
835
- description: "Full access",
836
- permissions: [],
837
- // permissions refers to the values returned from the backend
838
- uiPermissions: {
839
- ...emptyUiPermissions,
840
- auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),
841
- deployments: uiPermissionsByArea.deployments.uiPermissions.map(permissionMapper),
842
- groups: { [ALL_DEVICES]: uiPermissionsByArea.groups.uiPermissions.map(permissionMapper) },
843
- releases: { [ALL_RELEASES]: uiPermissionsByArea.releases.uiPermissions.map(permissionMapper) },
844
- userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper)
845
- }
846
- },
847
- [staticRolesByName.readOnly]: {
848
- name: "Read Access",
849
- value: staticRolesByName.readOnly,
850
- description: "",
851
- permissions: [],
852
- uiPermissions: {
853
- ...emptyUiPermissions,
854
- deployments: [uiPermissionsById.read.value],
855
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value] },
856
- releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] },
857
- userManagement: [uiPermissionsById.read.value]
858
- }
859
- },
860
- [staticRolesByName.ci]: {
861
- name: "Releases Manager",
862
- value: staticRolesByName.ci,
863
- description: "",
864
- permissions: [],
865
- uiPermissions: {
866
- ...emptyUiPermissions,
867
- releases: { [ALL_RELEASES]: uiPermissionsByArea.releases.uiPermissions.map(permissionMapper) }
868
- }
869
- },
870
- [staticRolesByName.deploymentsManager]: {
871
- name: "Deployments Manager",
872
- value: staticRolesByName.deploymentsManager,
873
- description: "",
874
- permissions: [],
875
- uiPermissions: {
876
- ...emptyUiPermissions,
877
- deployments: uiPermissionsByArea.deployments.uiPermissions.map(permissionMapper),
878
- groups: { [ALL_DEVICES]: [uiPermissionsById.deploy.value, uiPermissionsById.read.value] },
879
- releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }
880
- }
881
- },
882
- [staticRolesByName.terminalAccess]: {
883
- name: "Troubleshooting",
884
- value: staticRolesByName.terminalAccess,
885
- description: "Access to the troubleshooting features: Remote Terminal, File Transfer, Port Forwarding",
886
- permissions: [],
887
- uiPermissions: {
888
- ...emptyUiPermissions,
889
- groups: { [ALL_DEVICES]: [uiPermissionsById.connect.value] }
890
- }
891
- }
892
- });
893
- var serviceProviderRolesById = {
894
- admin: {
895
- name: "Admin",
896
- value: staticRolesByName.admin,
897
- description: "Full access",
898
- permissions: [],
899
- uiPermissions: {
900
- ...emptyUiPermissions,
901
- auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),
902
- userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper),
903
- tenantManagement: uiPermissionsByArea.tenantManagement.uiPermissions.map(permissionMapper)
904
- }
905
- },
906
- readOnly: {
907
- name: "Read access",
908
- value: staticRolesByName.readOnly,
909
- description: "This role can see all linked organizations but cannot make any changes",
910
- permissions: [],
911
- uiPermissions: {
912
- ...emptyUiPermissions,
913
- auditlog: [uiPermissionsById.read.value],
914
- userManagement: [uiPermissionsById.read.value],
915
- tenantManagement: [uiPermissionsById.read.value]
916
- }
917
- }
918
- };
919
- var defaultPermissionSets = {
920
- [permissionSetIds.Basic]: {
921
- name: permissionSetIds.Basic,
922
- result: {
923
- // this is needed to prevent the detailed permissions of the basic permission set from being interpreted as allowing read & management access to user endpoints
924
- userManagement: [uiPermissionsById.read.value]
925
- }
926
- },
927
- [permissionSetIds.SuperUser]: {
928
- name: permissionSetIds.SuperUser,
929
- result: {
930
- ...rolesById[staticRolesByName.admin].uiPermissions
931
- }
932
- },
933
- [permissionSetIds.ManageUsers]: {
934
- name: permissionSetIds.ManageUsers,
935
- result: {
936
- userManagement: [uiPermissionsById.manage.value]
937
- }
938
- },
939
- [permissionSetIds.ReadAuditLogs]: {
940
- name: permissionSetIds.ReadAuditLogs,
941
- result: {
942
- auditlog: [uiPermissionsById.read.value]
943
- }
944
- },
945
- [permissionSetIds.ReadReleases]: {
946
- name: permissionSetIds.ReadReleases,
947
- result: {
948
- releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }
949
- }
950
- },
951
- [permissionSetIds.ReadTenants]: {
952
- name: permissionSetIds.ReadTenants,
953
- result: {
954
- tenantManagement: [uiPermissionsById.read.value]
955
- }
956
- },
957
- [permissionSetIds.ManageTenants]: {
958
- name: permissionSetIds.ManageTenants,
959
- result: {
960
- tenantManagement: [uiPermissionsById.manage.value]
961
- }
962
- },
963
- [permissionSetIds.ReadUsers]: {
964
- name: permissionSetIds.ReadUsers,
965
- result: {
966
- userManagement: [uiPermissionsById.read.value]
967
- }
968
- },
969
- [permissionSetIds.UploadArtifacts]: {
970
- name: permissionSetIds.UploadArtifacts,
971
- result: {
972
- releases: { [ALL_RELEASES]: [uiPermissionsById.upload.value] }
973
- }
974
- },
975
- [permissionSetIds.ManageReleases]: {
976
- name: permissionSetIds.ManageReleases,
977
- result: {
978
- releases: { [ALL_RELEASES]: [uiPermissionsById.manage.value] }
979
- }
980
- },
981
- [permissionSetIds.ConfigureDevices]: {
982
- name: permissionSetIds.ConfigureDevices,
983
- result: {
984
- deployments: [uiPermissionsById.read.value, uiPermissionsById.deploy.value],
985
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.configure.value] }
986
- }
987
- },
988
- [permissionSetIds.ConnectToDevices]: {
989
- name: permissionSetIds.ConnectToDevices,
990
- result: {
991
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.connect.value] }
992
- }
993
- },
994
- [permissionSetIds.DeployToDevices]: {
995
- name: permissionSetIds.DeployToDevices,
996
- result: {
997
- deployments: [uiPermissionsById.deploy.value, uiPermissionsById.manage.value, uiPermissionsById.read.value],
998
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.deploy.value] }
999
- }
1000
- },
1001
- [permissionSetIds.ManageDevices]: {
1002
- name: permissionSetIds.ManageDevices,
1003
- result: {
1004
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.manage.value] }
1005
- }
1006
- },
1007
- [permissionSetIds.ReadDevices]: {
1008
- name: permissionSetIds.ReadDevices,
1009
- result: {
1010
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value] }
1011
- }
1012
- }
1013
- };
1014
730
  var USER_LOGOUT = "USER_LOGOUT";
1015
- var rolesByName = {
1016
- ...staticRolesByName,
1017
- deploymentCreation: { action: "CREATE_DEPLOYMENT", object: { type: "DEVICE_GROUP", value: void 0 } },
1018
- groupAccess: { action: "VIEW_DEVICE", object: { type: "DEVICE_GROUP", value: void 0 } },
1019
- userManagement: { action: "http", object: { type: "any", value: `${useradmApiUrlv1}/.*` } }
1020
- };
1021
- var twoFAStates = {
1022
- enabled: "enabled",
1023
- disabled: "disabled",
1024
- unverified: "unverified"
1025
- };
1026
731
  var settingsKeys = { initialized: "settings-initialized" };
1027
732
  var READ_STATES = {
1028
733
  read: "read",
@@ -1030,27 +735,122 @@ var READ_STATES = {
1030
735
  unread: "unread"
1031
736
  };
1032
737
 
738
+ // src/releasesSlice/index.ts
739
+ var sliceName = "releases";
740
+ var initialState = {
741
+ /*
742
+ * Return list of saved artifacts objects
743
+ */
744
+ /*
745
+ * return list of artifacts where duplicate names are collated with device compatibility lists combined
746
+ */
747
+ // artifacts: AppStore.getCollatedArtifacts(AppStore.getArtifactsRepo()),
748
+ artifacts: [],
749
+ /*
750
+ * Return list of saved release objects
751
+ */
752
+ byId: {
753
+ /*
754
+ [releaseName]: {
755
+ artifacts: [
756
+ {
757
+ id: '',
758
+ name: '',
759
+ description: '',
760
+ device_types_compatible: [],
761
+ ...
762
+ updates: [{
763
+ files: [
764
+ { size: 123, name: '' }
765
+ ],
766
+ type_info: { type: '' }
767
+ }],
768
+ url: '' // optional
769
+ }
770
+ ],
771
+ modified: ''
772
+ device_types_compatible,
773
+ name: '',
774
+ tags: ['something'],
775
+ notes: ''
776
+ }
777
+ */
778
+ },
779
+ releasesList: {
780
+ ...import_constants4.DEVICE_LIST_DEFAULTS,
781
+ searchedIds: [],
782
+ releaseIds: [],
783
+ selection: [],
784
+ sort: {
785
+ direction: import_constants4.SORTING_OPTIONS.desc,
786
+ key: "modified"
787
+ },
788
+ isLoading: void 0,
789
+ searchTerm: "",
790
+ searchTotal: 0,
791
+ selectedTags: [],
792
+ total: 0,
793
+ type: ""
794
+ },
795
+ tags: [],
796
+ updateTypes: [],
797
+ /*
798
+ * Return single release with corresponding Artifacts
799
+ */
800
+ selectedRelease: null
801
+ };
802
+ var releaseSlice = (0, import_toolkit.createSlice)({
803
+ name: sliceName,
804
+ initialState,
805
+ reducers: {
806
+ receiveRelease: (state, action) => {
807
+ const { name } = action.payload;
808
+ state.byId[name] = action.payload;
809
+ },
810
+ receiveReleases: (state, action) => {
811
+ state.byId = action.payload;
812
+ },
813
+ receiveReleaseTags: (state, action) => {
814
+ state.tags = action.payload;
815
+ },
816
+ receiveReleaseTypes: (state, action) => {
817
+ state.updateTypes = action.payload;
818
+ },
819
+ removeRelease: (state, action) => {
820
+ const { [action.payload]: toBeRemoved, ...byId } = state.byId;
821
+ state.byId = byId;
822
+ state.selectedRelease = action.payload === state.selectedRelease ? null : state.selectedRelease;
823
+ },
824
+ selectedRelease: (state, action) => {
825
+ state.selectedRelease = action.payload;
826
+ },
827
+ setReleaseListState: (state, action) => {
828
+ state.releasesList = action.payload;
829
+ }
830
+ }
831
+ });
832
+ var actions = releaseSlice.actions;
833
+ var releasesSlice_default = releaseSlice.reducer;
834
+
1033
835
  // src/appSlice/index.ts
1034
- var import_toolkit = require("@reduxjs/toolkit");
1035
- var sliceName = "app";
836
+ var import_toolkit2 = require("@reduxjs/toolkit");
837
+ var sliceName2 = "app";
1036
838
  var getYesterday = () => {
1037
839
  const today = /* @__PURE__ */ new Date();
1038
840
  today.setDate(today.getDate() - 1);
1039
841
  return today.toISOString();
1040
842
  };
1041
- var initialState = {
843
+ var initialState2 = {
1042
844
  cancelSource: void 0,
845
+ commit: "",
1043
846
  demoArtifactLink: "https://dgsbl4vditpls.cloudfront.net/mender-demo-artifact.mender",
1044
847
  hostAddress: null,
1045
848
  snackbar: {
1046
- open: false,
1047
- message: "",
1048
- maxWidth: 900,
1049
- autoHideDuration: void 0,
1050
849
  action: void 0,
1051
- children: void 0,
1052
- onClick: void 0,
1053
- onClose: void 0
850
+ autoHideDuration: void 0,
851
+ message: "",
852
+ open: false,
853
+ preventClickToCopy: false
1054
854
  },
1055
855
  // return boolean rather than organization details
1056
856
  features: {
@@ -1063,7 +863,7 @@ var initialState = {
1063
863
  hasMonitor: false,
1064
864
  hasReporting: false,
1065
865
  isDemoMode: false,
1066
- isHosted: false,
866
+ isHosted: true,
1067
867
  isEnterprise: false
1068
868
  },
1069
869
  feedbackProbability: 0.3,
@@ -1075,16 +875,22 @@ var initialState = {
1075
875
  deviceIds: [],
1076
876
  searchTerm: "",
1077
877
  searchTotal: 0,
878
+ isSearching: false,
1078
879
  sort: {
1079
- direction: SORTING_OPTIONS.desc
880
+ direction: import_constants4.SORTING_OPTIONS.desc
1080
881
  // key: null,
1081
882
  // scope: null
1082
883
  }
1083
884
  },
885
+ sentry: {
886
+ location: "",
887
+ replaysSessionSampleRate: 0.1,
888
+ tracesSampleRate: 1
889
+ },
1084
890
  stripeAPIKey: "",
1085
891
  trackerCode: "",
1086
892
  uploadsById: {
1087
- // id: { uploading: false, uploadProgress: 0, cancelSource: undefined }
893
+ // id: { progress: 0, cancelSource: undefined }
1088
894
  },
1089
895
  newThreshold: getYesterday(),
1090
896
  offlineThreshold: getYesterday(),
@@ -1092,17 +898,13 @@ var initialState = {
1092
898
  Integration: "",
1093
899
  "Mender-Client": "",
1094
900
  "Mender-Artifact": "",
1095
- "Meta-Mender": "",
1096
- Deployments: "",
1097
- Deviceauth: "",
1098
- Inventory: "",
1099
- GUI: "latest"
901
+ "Meta-Mender": ""
1100
902
  },
1101
903
  yesterday: void 0
1102
904
  };
1103
- var appSlice = (0, import_toolkit.createSlice)({
1104
- name: sliceName,
1105
- initialState,
905
+ var appSlice = (0, import_toolkit2.createSlice)({
906
+ name: sliceName2,
907
+ initialState: initialState2,
1106
908
  reducers: {
1107
909
  setFeatures: (state, action) => {
1108
910
  state.features = {
@@ -1111,19 +913,17 @@ var appSlice = (0, import_toolkit.createSlice)({
1111
913
  };
1112
914
  },
1113
915
  setSnackbar: (state, { payload }) => {
1114
- let { message, autoHideDuration, action, children, onClick, onClose } = payload;
1115
- if (typeof payload === "string" || payload instanceof String) {
1116
- message = payload;
916
+ if (typeof payload === "string") {
917
+ state.snackbar.message = payload;
918
+ return;
1117
919
  }
920
+ const { message, autoHideDuration, action, preventClickToCopy = false } = payload;
1118
921
  state.snackbar = {
1119
- open: message ? true : false,
1120
922
  message,
1121
- maxWidth: 900,
1122
923
  autoHideDuration,
1123
924
  action,
1124
- children,
1125
- onClick,
1126
- onClose
925
+ preventClickToCopy,
926
+ open: !!message
1127
927
  };
1128
928
  },
1129
929
  setFirstLoginAfterSignup: (state, action) => {
@@ -1165,13 +965,13 @@ var appSlice = (0, import_toolkit.createSlice)({
1165
965
  setEnvironmentData: (state, action) => ({ ...state, ...action.payload })
1166
966
  }
1167
967
  });
1168
- var actions = appSlice.actions;
968
+ var actions2 = appSlice.actions;
1169
969
  var appSlice_default = appSlice.reducer;
1170
970
 
1171
971
  // src/deploymentsSlice/index.ts
1172
- var import_toolkit2 = require("@reduxjs/toolkit");
1173
- var sliceName2 = "deployments";
1174
- var initialState2 = {
972
+ var import_toolkit3 = require("@reduxjs/toolkit");
973
+ var sliceName3 = "deployments";
974
+ var initialState3 = {
1175
975
  byId: {
1176
976
  // [id]: { statistics: { status: {}, total_size }, devices: { [deploymentId]: { id, log } }, totalDeviceCount }
1177
977
  },
@@ -1193,20 +993,20 @@ var initialState2 = {
1193
993
  sourceWindow: -1
1194
994
  },
1195
995
  binaryDeltaLimits: {
1196
- timeout: { ...limitDefault, default: 60, max: 3600, min: 60 },
1197
- sourceWindow: limitDefault,
1198
- inputWindow: limitDefault,
1199
- duplicatesWindow: limitDefault,
1200
- instructionBuffer: limitDefault
996
+ timeout: { ...import_constants4.limitDefault, default: 60, max: 3600, min: 60 },
997
+ sourceWindow: import_constants4.limitDefault,
998
+ inputWindow: import_constants4.limitDefault,
999
+ duplicatesWindow: import_constants4.limitDefault,
1000
+ instructionBuffer: import_constants4.limitDefault
1201
1001
  }
1202
1002
  },
1203
1003
  deploymentDeviceLimit: 5e3,
1204
1004
  selectedDeviceIds: [],
1205
1005
  selectionState: {
1206
- finished: { ...DEVICE_LIST_DEFAULTS, endDate: void 0, search: "", selection: [], startDate: void 0, total: 0, type: "" },
1207
- inprogress: { ...DEVICE_LIST_DEFAULTS, perPage: DEFAULT_PENDING_INPROGRESS_COUNT, selection: [] },
1208
- pending: { ...DEVICE_LIST_DEFAULTS, perPage: DEFAULT_PENDING_INPROGRESS_COUNT, selection: [] },
1209
- scheduled: { ...DEVICE_LIST_DEFAULTS, selection: [] },
1006
+ finished: { ...import_constants4.DEVICE_LIST_DEFAULTS, endDate: void 0, search: "", selection: [], startDate: void 0, total: 0, type: "" },
1007
+ inprogress: { ...import_constants4.DEVICE_LIST_DEFAULTS, perPage: DEFAULT_PENDING_INPROGRESS_COUNT, selection: [] },
1008
+ pending: { ...import_constants4.DEVICE_LIST_DEFAULTS, perPage: DEFAULT_PENDING_INPROGRESS_COUNT, selection: [] },
1009
+ scheduled: { ...import_constants4.DEVICE_LIST_DEFAULTS, selection: [] },
1210
1010
  general: {
1211
1011
  state: DEPLOYMENT_ROUTES.active.key,
1212
1012
  showCreationDialog: false,
@@ -1217,9 +1017,9 @@ var initialState2 = {
1217
1017
  selectedId: void 0
1218
1018
  }
1219
1019
  };
1220
- var deploymentsSlice = (0, import_toolkit2.createSlice)({
1221
- name: sliceName2,
1222
- initialState: initialState2,
1020
+ var deploymentsSlice = (0, import_toolkit3.createSlice)({
1021
+ name: sliceName3,
1022
+ initialState: initialState3,
1223
1023
  reducers: {
1224
1024
  createdDeployment: (state, action) => {
1225
1025
  state.byId[action.payload.id] = {
@@ -1228,7 +1028,8 @@ var deploymentsSlice = (0, import_toolkit2.createSlice)({
1228
1028
  };
1229
1029
  state.byStatus[DEPLOYMENT_STATES.pending].total = state.byStatus[DEPLOYMENT_STATES.pending].total + 1;
1230
1030
  state.byStatus[DEPLOYMENT_STATES.pending].deploymentIds = [...state.byStatus.pending.deploymentIds, action.payload.id];
1231
- state.selectionState[DEPLOYMENT_STATES.pending].selection = [action.payload.id, ...state.selectionState[DEPLOYMENT_STATES.pending].selection], state.selectionState[DEPLOYMENT_STATES.pending].total = state.selectionState[DEPLOYMENT_STATES.pending].total + 1;
1031
+ state.selectionState[DEPLOYMENT_STATES.pending].selection = [action.payload.id, ...state.selectionState[DEPLOYMENT_STATES.pending].selection];
1032
+ state.selectionState[DEPLOYMENT_STATES.pending].total = (state.selectionState[DEPLOYMENT_STATES.pending].total || 0) + 1;
1232
1033
  },
1233
1034
  removedDeployment: (state, action) => {
1234
1035
  const { [action.payload]: removedDeployment, ...remainder } = state.byId;
@@ -1290,14 +1091,14 @@ var deploymentsSlice = (0, import_toolkit2.createSlice)({
1290
1091
  }
1291
1092
  }
1292
1093
  });
1293
- var actions2 = deploymentsSlice.actions;
1094
+ var actions3 = deploymentsSlice.actions;
1294
1095
  var deploymentsSlice_default = deploymentsSlice.reducer;
1295
1096
 
1296
1097
  // src/devicesSlice/index.ts
1297
1098
  var import_helpers = require("@northern.tech/utils/helpers");
1298
- var import_toolkit3 = require("@reduxjs/toolkit");
1299
- var sliceName3 = "devices";
1300
- var initialState3 = {
1099
+ var import_toolkit4 = require("@reduxjs/toolkit");
1100
+ var sliceName4 = "devices";
1101
+ var initialState4 = {
1301
1102
  byId: {
1302
1103
  // [deviceId]: {
1303
1104
  // ...,
@@ -1305,26 +1106,30 @@ var initialState3 = {
1305
1106
  // }
1306
1107
  },
1307
1108
  byStatus: {
1308
- [DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },
1109
+ [import_constants4.DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },
1309
1110
  active: { deviceIds: [], total: 0 },
1310
1111
  inactive: { deviceIds: [], total: 0 },
1311
- [DEVICE_STATES.pending]: { deviceIds: [], total: 0 },
1312
- [DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },
1313
- [DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }
1112
+ [import_constants4.DEVICE_STATES.pending]: { deviceIds: [], total: 0 },
1113
+ [import_constants4.DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },
1114
+ [import_constants4.DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }
1314
1115
  },
1315
1116
  deviceList: {
1316
1117
  deviceIds: [],
1317
- ...DEVICE_LIST_DEFAULTS,
1118
+ ...import_constants4.DEVICE_LIST_DEFAULTS,
1318
1119
  selectedAttributes: [],
1319
1120
  selectedIssues: [],
1320
1121
  selection: [],
1321
1122
  sort: {
1322
- direction: SORTING_OPTIONS.desc
1123
+ direction: import_constants4.SORTING_OPTIONS.desc
1323
1124
  // key: null,
1324
1125
  // scope: null
1325
1126
  },
1326
- state: DEVICE_STATES.accepted,
1327
- total: 0
1127
+ state: import_constants4.DEVICE_STATES.accepted,
1128
+ total: 0,
1129
+ refreshTrigger: false,
1130
+ isLoading: false,
1131
+ detailsTab: "",
1132
+ open: false
1328
1133
  },
1329
1134
  filters: [
1330
1135
  // { key: 'device_type', value: 'raspberry', operator: '$eq', scope: 'inventory' }
@@ -1351,9 +1156,9 @@ var initialState3 = {
1351
1156
  selectedGroup: void 0
1352
1157
  }
1353
1158
  };
1354
- var devicesSlice = (0, import_toolkit3.createSlice)({
1355
- name: sliceName3,
1356
- initialState: initialState3,
1159
+ var devicesSlice = (0, import_toolkit4.createSlice)({
1160
+ name: sliceName4,
1161
+ initialState: initialState4,
1357
1162
  reducers: {
1358
1163
  receivedGroups: (state, action) => {
1359
1164
  state.groups.byId = action.payload;
@@ -1396,7 +1201,7 @@ var devicesSlice = (0, import_toolkit3.createSlice)({
1396
1201
  };
1397
1202
  },
1398
1203
  selectGroup: (state, { payload: group }) => {
1399
- state.deviceList.deviceIds = state.groups.byId[group] && state.groups.byId[group].deviceIds.length > 0 ? state.groups.byId[group].deviceIds : [];
1204
+ state.deviceList.deviceIds = group && state.groups.byId[group] && state.groups.byId[group].deviceIds && state.groups.byId[group].deviceIds.length > 0 ? state.groups.byId[group].deviceIds : [];
1400
1205
  state.groups.selectedGroup = group;
1401
1206
  },
1402
1207
  removeGroup: (state, action) => {
@@ -1448,9 +1253,6 @@ var devicesSlice = (0, import_toolkit3.createSlice)({
1448
1253
  const { count, status } = action.payload;
1449
1254
  state.byStatus[status].total = count;
1450
1255
  },
1451
- setTotalDevices: (state, action) => {
1452
- state.total = action.payload;
1453
- },
1454
1256
  setDeviceLimit: (state, action) => {
1455
1257
  state.limit = action.payload;
1456
1258
  },
@@ -1463,39 +1265,39 @@ var devicesSlice = (0, import_toolkit3.createSlice)({
1463
1265
  maybeUpdateDevicesByStatus: (state, action) => {
1464
1266
  const { deviceId, authId } = action.payload;
1465
1267
  const device = state.byId[deviceId];
1466
- const hasMultipleAuthSets = authId ? device.auth_sets.filter((authset) => authset.id !== authId).length > 0 : false;
1467
- if (!hasMultipleAuthSets && Object.values(DEVICE_STATES).includes(device.status)) {
1268
+ const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter((authset) => authset.id !== authId).length > 0 : false;
1269
+ if (!hasMultipleAuthSets && Object.values(import_constants4.DEVICE_STATES).includes(device.status)) {
1468
1270
  const deviceIds = state.byStatus[device.status].deviceIds.filter((id) => id !== deviceId);
1469
1271
  state.byStatus[device.status] = { deviceIds, total: Math.max(0, state.byStatus[device.status].total - 1) };
1470
1272
  }
1471
1273
  }
1472
1274
  }
1473
1275
  });
1474
- var actions3 = devicesSlice.actions;
1276
+ var actions4 = devicesSlice.actions;
1475
1277
  var devicesSlice_default = devicesSlice.reducer;
1476
1278
 
1477
1279
  // src/monitorSlice/index.ts
1478
- var import_toolkit4 = require("@reduxjs/toolkit");
1479
- var sliceName4 = "monitor";
1480
- var initialState4 = {
1280
+ var import_toolkit5 = require("@reduxjs/toolkit");
1281
+ var sliceName5 = "monitor";
1282
+ var initialState5 = {
1481
1283
  alerts: {
1482
- alertList: { ...DEVICE_LIST_DEFAULTS, total: 0 },
1284
+ alertList: { ...import_constants4.DEVICE_LIST_DEFAULTS, total: 0 },
1483
1285
  byDeviceId: {}
1484
1286
  },
1485
1287
  issueCounts: {
1486
- byType: Object.values(DEVICE_ISSUE_OPTIONS).reduce((accu, { key }) => ({ ...accu, [key]: { filtered: 0, total: 0 } }), {})
1288
+ byType: Object.keys(import_constants4.DEVICE_ISSUE_OPTIONS).reduce((accu, key) => ({ ...accu, [key]: { filtered: 0, total: 0 } }), {})
1487
1289
  },
1488
1290
  settings: {
1489
1291
  global: {
1490
1292
  channels: {
1491
- ...Object.keys(alertChannels).reduce((accu, item) => ({ ...accu, [item]: { enabled: true } }), {})
1293
+ ...Object.keys(import_constants4.alertChannels).reduce((accu, item) => ({ ...accu, [item]: { enabled: true } }), {})
1492
1294
  }
1493
1295
  }
1494
1296
  }
1495
1297
  };
1496
- var monitorSlice = (0, import_toolkit4.createSlice)({
1497
- name: sliceName4,
1498
- initialState: initialState4,
1298
+ var monitorSlice = (0, import_toolkit5.createSlice)({
1299
+ name: sliceName5,
1300
+ initialState: initialState5,
1499
1301
  reducers: {
1500
1302
  changeAlertChannel: (state, action) => {
1501
1303
  const { channel, enabled } = action.payload;
@@ -1518,13 +1320,13 @@ var monitorSlice = (0, import_toolkit4.createSlice)({
1518
1320
  }
1519
1321
  }
1520
1322
  });
1521
- var actions4 = monitorSlice.actions;
1323
+ var actions5 = monitorSlice.actions;
1522
1324
  var monitorSlice_default = monitorSlice.reducer;
1523
1325
 
1524
1326
  // src/onboardingSlice/index.ts
1525
- var import_toolkit5 = require("@reduxjs/toolkit");
1526
- var sliceName5 = "onboarding";
1527
- var initialState5 = {
1327
+ var import_toolkit6 = require("@reduxjs/toolkit");
1328
+ var sliceName6 = "onboarding";
1329
+ var initialState6 = {
1528
1330
  approach: null,
1529
1331
  complete: false,
1530
1332
  deviceType: null,
@@ -1533,9 +1335,9 @@ var initialState5 = {
1533
1335
  showTips: null,
1534
1336
  showTipsDialog: false
1535
1337
  };
1536
- var onboardingSlice = (0, import_toolkit5.createSlice)({
1537
- name: sliceName5,
1538
- initialState: initialState5,
1338
+ var onboardingSlice = (0, import_toolkit6.createSlice)({
1339
+ name: sliceName6,
1340
+ initialState: initialState6,
1539
1341
  reducers: {
1540
1342
  setOnboardingState: (state, action) => ({ ...state, ...action.payload }),
1541
1343
  setDemoArtifactPort: (state, action) => {
@@ -1561,13 +1363,13 @@ var onboardingSlice = (0, import_toolkit5.createSlice)({
1561
1363
  }
1562
1364
  }
1563
1365
  });
1564
- var actions5 = onboardingSlice.actions;
1366
+ var actions6 = onboardingSlice.actions;
1565
1367
  var onboardingSlice_default = onboardingSlice.reducer;
1566
1368
 
1567
1369
  // src/organizationSlice/index.ts
1568
- var import_toolkit6 = require("@reduxjs/toolkit");
1569
- var sliceName6 = "organization";
1570
- var initialState6 = {
1370
+ var import_toolkit7 = require("@reduxjs/toolkit");
1371
+ var sliceName7 = "organization";
1372
+ var initialState7 = {
1571
1373
  card: {
1572
1374
  last4: "",
1573
1375
  expiration: { month: 1, year: 2020 },
@@ -1580,7 +1382,7 @@ var initialState6 = {
1580
1382
  tenants: [],
1581
1383
  selectedTenant: null,
1582
1384
  sort: {
1583
- direction: SORTING_OPTIONS.desc,
1385
+ direction: import_constants4.SORTING_OPTIONS.desc,
1584
1386
  key: "name"
1585
1387
  }
1586
1388
  },
@@ -1590,15 +1392,16 @@ var initialState6 = {
1590
1392
  auditlog: {
1591
1393
  events: [],
1592
1394
  selectionState: {
1593
- ...DEVICE_LIST_DEFAULTS,
1395
+ ...import_constants4.DEVICE_LIST_DEFAULTS,
1594
1396
  detail: void 0,
1595
1397
  endDate: void 0,
1596
1398
  selectedIssue: void 0,
1597
- sort: { direction: SORTING_OPTIONS.desc },
1399
+ sort: { direction: import_constants4.SORTING_OPTIONS.desc },
1598
1400
  startDate: void 0,
1599
1401
  total: 0,
1600
1402
  type: void 0,
1601
- user: void 0
1403
+ user: void 0,
1404
+ isLoading: false
1602
1405
  }
1603
1406
  },
1604
1407
  externalDeviceIntegrations: [
@@ -1612,9 +1415,9 @@ var initialState6 = {
1612
1415
  eventsTotal: 0
1613
1416
  }
1614
1417
  };
1615
- var organizationSlice = (0, import_toolkit6.createSlice)({
1616
- name: sliceName6,
1617
- initialState: initialState6,
1418
+ var organizationSlice = (0, import_toolkit7.createSlice)({
1419
+ name: sliceName7,
1420
+ initialState: initialState7,
1618
1421
  reducers: {
1619
1422
  receiveAuditLogs: (state, action) => {
1620
1423
  const { events, total } = action.payload;
@@ -1636,6 +1439,12 @@ var organizationSlice = (0, import_toolkit6.createSlice)({
1636
1439
  setOrganization: (state, action) => {
1637
1440
  state.organization = { ...state.organization, ...action.payload };
1638
1441
  },
1442
+ setSubscription: (state, action) => {
1443
+ state.organization.subscription = { ...state.organization.subscription, ...action.payload };
1444
+ },
1445
+ setBillingProfile: (state, action) => {
1446
+ state.organization.billing_profile = action.payload;
1447
+ },
1639
1448
  setTenantListState: (state, action) => {
1640
1449
  state.tenantList = action.payload;
1641
1450
  },
@@ -1652,107 +1461,9 @@ var organizationSlice = (0, import_toolkit6.createSlice)({
1652
1461
  }
1653
1462
  }
1654
1463
  });
1655
- var actions6 = organizationSlice.actions;
1464
+ var actions7 = organizationSlice.actions;
1656
1465
  var organizationSlice_default = organizationSlice.reducer;
1657
1466
 
1658
- // src/releasesSlice/index.ts
1659
- var import_toolkit7 = require("@reduxjs/toolkit");
1660
- var sliceName7 = "releases";
1661
- var initialState7 = {
1662
- /*
1663
- * Return list of saved artifacts objects
1664
- */
1665
- /*
1666
- * return list of artifacts where duplicate names are collated with device compatibility lists combined
1667
- */
1668
- // artifacts: AppStore.getCollatedArtifacts(AppStore.getArtifactsRepo()),
1669
- artifacts: [],
1670
- /*
1671
- * Return list of saved release objects
1672
- */
1673
- byId: {
1674
- /*
1675
- [releaseName]: {
1676
- artifacts: [
1677
- {
1678
- id: '',
1679
- name: '',
1680
- description: '',
1681
- device_types_compatible: [],
1682
- ...
1683
- updates: [{
1684
- files: [
1685
- { size: 123, name: '' }
1686
- ],
1687
- type_info: { type: '' }
1688
- }],
1689
- url: '' // optional
1690
- }
1691
- ],
1692
- modified: ''
1693
- device_types_compatible,
1694
- name: '',
1695
- tags: ['something'],
1696
- notes: ''
1697
- }
1698
- */
1699
- },
1700
- releasesList: {
1701
- ...DEVICE_LIST_DEFAULTS,
1702
- searchedIds: [],
1703
- releaseIds: [],
1704
- selection: [],
1705
- sort: {
1706
- direction: SORTING_OPTIONS.desc,
1707
- key: "modified"
1708
- },
1709
- isLoading: void 0,
1710
- searchTerm: "",
1711
- searchTotal: 0,
1712
- selectedTags: [],
1713
- total: 0,
1714
- type: ""
1715
- },
1716
- tags: [],
1717
- updateTypes: [],
1718
- /*
1719
- * Return single release with corresponding Artifacts
1720
- */
1721
- selectedRelease: null
1722
- };
1723
- var releaseSlice = (0, import_toolkit7.createSlice)({
1724
- name: sliceName7,
1725
- initialState: initialState7,
1726
- reducers: {
1727
- receiveRelease: (state, action) => {
1728
- const { name } = action.payload;
1729
- state.byId[name] = action.payload;
1730
- },
1731
- receiveReleases: (state, action) => {
1732
- state.byId = action.payload;
1733
- },
1734
- receiveReleaseTags: (state, action) => {
1735
- state.tags = action.payload;
1736
- },
1737
- receiveReleaseTypes: (state, action) => {
1738
- state.updateTypes = action.payload;
1739
- },
1740
- removeRelease: (state, action) => {
1741
- const { [action.payload]: toBeRemoved, ...byId } = state.byId;
1742
- state.byId = byId;
1743
- state.selectedRelease = action.payload === state.selectedRelease ? null : state.selectedRelease;
1744
- },
1745
- selectedRelease: (state, action) => {
1746
- state.selectedRelease = action.payload;
1747
- },
1748
- setReleaseListState: (state, action) => {
1749
- state.releasesList = action.payload;
1750
- }
1751
- }
1752
- });
1753
- var actions7 = releaseSlice.actions;
1754
- var releasesSlice_default = releaseSlice.reducer;
1755
-
1756
1467
  // src/usersSlice/index.ts
1757
1468
  var import_toolkit8 = require("@reduxjs/toolkit");
1758
1469
  var sliceName8 = "users";
@@ -1772,11 +1483,12 @@ var initialState8 = {
1772
1483
  retries: 0
1773
1484
  },
1774
1485
  permissionSetsById: {
1775
- ...defaultPermissionSets
1486
+ ...import_constants4.defaultPermissionSets
1776
1487
  },
1777
1488
  rolesById: {
1778
- ...rolesById
1489
+ ...import_constants4.rolesById
1779
1490
  },
1491
+ rolesInitialized: false,
1780
1492
  settingsInitialized: false,
1781
1493
  showConnectDeviceDialog: false,
1782
1494
  showFeedbackDialog: false,
@@ -1812,9 +1524,6 @@ var usersSlice = (0, import_toolkit8.createSlice)({
1812
1524
  state.byId[action.payload.id] = action.payload;
1813
1525
  state.currentUser = action.payload.id;
1814
1526
  },
1815
- createdUser: (state, action) => {
1816
- state.byId[0] = action.payload;
1817
- },
1818
1527
  removedUser: (state, action) => {
1819
1528
  const { [action.payload]: removedUser, ...byId } = state.byId;
1820
1529
  state.byId = byId;
@@ -1831,6 +1540,10 @@ var usersSlice = (0, import_toolkit8.createSlice)({
1831
1540
  },
1832
1541
  receivedRoles: (state, action) => {
1833
1542
  state.rolesById = action.payload;
1543
+ state.rolesInitialized = true;
1544
+ },
1545
+ finishedRoleInitialization: (state, action) => {
1546
+ state.rolesInitialized = action.payload;
1834
1547
  },
1835
1548
  createdRole: (state, action) => {
1836
1549
  state.rolesById[action.payload.name] = {
@@ -1861,7 +1574,7 @@ var usersSlice = (0, import_toolkit8.createSlice)({
1861
1574
  },
1862
1575
  setTooltipState: (state, action) => {
1863
1576
  const { id, readState = READ_STATES.read } = action.payload;
1864
- state.tooltips.byId[id].readState = readState;
1577
+ state.tooltips.byId[id] = { ...state.tooltips.byId[id], readState };
1865
1578
  },
1866
1579
  setTooltipsState: (state, action) => {
1867
1580
  state.tooltips.byId = {
@@ -1885,13 +1598,13 @@ var usersSlice_default = usersSlice.reducer;
1885
1598
 
1886
1599
  // src/actions.ts
1887
1600
  var actions_default = {
1888
- ...actions,
1889
1601
  ...actions2,
1890
1602
  ...actions3,
1891
1603
  ...actions4,
1892
1604
  ...actions5,
1893
1605
  ...actions6,
1894
1606
  ...actions7,
1607
+ ...actions,
1895
1608
  ...actions8
1896
1609
  };
1897
1610
 
@@ -1901,7 +1614,7 @@ var import_axios = __toESM(require("axios"), 1);
1901
1614
  // src/auth.ts
1902
1615
  var import_universal_cookie = __toESM(require("universal-cookie"), 1);
1903
1616
  var cookies = new import_universal_cookie.default();
1904
- var emptySession = Object.freeze({ token: "", exiresAt: void 0 });
1617
+ var emptySession = Object.freeze({ token: "", expiresAt: void 0 });
1905
1618
  var tokenCache = "";
1906
1619
  var getSessionInfo = () => {
1907
1620
  let sessionInfo = { ...emptySession };
@@ -1914,15 +1627,15 @@ var getSessionInfo = () => {
1914
1627
  return { ...emptySession };
1915
1628
  }
1916
1629
  if (!sessionInfo.token) {
1917
- let jwtTokenFromCookie = cookies.get("JWT", { doNotParse: true }) ?? "";
1630
+ const jwtTokenFromCookie = cookies.get("JWT", { doNotParse: true }) ?? "";
1918
1631
  if (jwtTokenFromCookie) {
1919
- setSessionInfo({ token: jwtTokenFromCookie, undefined: void 0 });
1632
+ setSessionInfo({ token: jwtTokenFromCookie });
1920
1633
  sessionInfo.token = jwtTokenFromCookie;
1921
1634
  cookies.remove("JWT");
1922
1635
  cookies.remove("JWT", { path: "/" });
1923
1636
  }
1924
1637
  }
1925
- sessionInfo.token = sessionInfo.token || void 0;
1638
+ sessionInfo.token = sessionInfo.token || "";
1926
1639
  tokenCache = sessionInfo.token;
1927
1640
  return sessionInfo;
1928
1641
  };
@@ -1980,7 +1693,7 @@ var general_api_default = Api;
1980
1693
  var import_helpers2 = require("@northern.tech/utils/helpers");
1981
1694
  var defaultSelector = (result) => result[0];
1982
1695
  var commonFields = {
1983
- ...Object.keys(DEVICE_LIST_DEFAULTS).reduce((accu, key) => ({ ...accu, [key]: { parse: Number, select: defaultSelector, target: key } }), {}),
1696
+ ...Object.keys(import_constants4.DEVICE_LIST_DEFAULTS).reduce((accu, key) => ({ ...accu, [key]: { parse: Number, select: defaultSelector, target: key } }), {}),
1984
1697
  id: { parse: String, select: (i) => i, target: "id" },
1985
1698
  issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
1986
1699
  open: { parse: Boolean, select: defaultSelector, target: "open" }
@@ -1993,20 +1706,17 @@ var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type }
1993
1706
  // src/appSlice/selectors.ts
1994
1707
  var import_helpers3 = require("@northern.tech/utils/helpers");
1995
1708
  var import_toolkit9 = require("@reduxjs/toolkit");
1996
- var getAppDocsVersion = (state) => state.app.docsVersion;
1997
1709
  var getFeatures = (state) => state.app.features;
1998
1710
  var getFullVersionInformation = (state) => state.app.versionInformation;
1999
- var getDocsVersion = (0, import_toolkit9.createSelector)([getAppDocsVersion, getFeatures], (appDocsVersion, { isHosted }) => {
2000
- const docsVersion = appDocsVersion ? `${appDocsVersion}/` : "development/";
2001
- return isHosted ? "" : docsVersion;
2002
- });
2003
1711
  var getSearchState = (state) => state.app.searchState;
1712
+ var getUploads = (state) => state.app.uploadsById;
1713
+ var getIsUploading = (0, import_toolkit9.createSelector)([getUploads], (uploadsById) => !!Object.keys(uploadsById).length);
2004
1714
  var getSearchedDevices = (0, import_toolkit9.createSelector)([getSearchState], ({ deviceIds }) => deviceIds);
2005
1715
  var getVersionInformation = (0, import_toolkit9.createSelector)(
2006
1716
  [getFullVersionInformation, getFeatures],
2007
- ({ Integration, ...remainder }, { isHosted }) => isHosted && Integration !== "next" ? remainder : { ...remainder, Integration }
1717
+ ({ Integration: Integration2, ...remainder }, { isHosted }) => isHosted && Integration2 !== "next" ? remainder : { ...remainder, Integration: Integration2 }
2008
1718
  );
2009
- var getIsPreview = (0, import_toolkit9.createSelector)([getFullVersionInformation], ({ Integration }) => (0, import_helpers3.versionCompare)(Integration, "next") > -1);
1719
+ var getIsPreview = (0, import_toolkit9.createSelector)([getFullVersionInformation], ({ Integration: Integration2 }) => (0, import_helpers3.versionCompare)(Integration2, "next") > -1);
2010
1720
 
2011
1721
  // src/commonSelectors.ts
2012
1722
  var import_helpers6 = require("@northern.tech/utils/helpers");
@@ -2087,7 +1797,7 @@ var getDeviceIdentityAttributes = (0, import_toolkit11.createSelector)(
2087
1797
  );
2088
1798
  var getDeviceCountsByStatus = (0, import_toolkit11.createSelector)(
2089
1799
  [getDevicesByStatus],
2090
- (byStatus) => Object.values(DEVICE_STATES).reduce((accu, state) => {
1800
+ (byStatus) => Object.values(import_constants4.DEVICE_STATES).reduce((accu, state) => {
2091
1801
  accu[state] = byStatus[state].total || 0;
2092
1802
  return accu;
2093
1803
  }, {})
@@ -2099,7 +1809,7 @@ var getSelectedGroupInfo = (0, import_toolkit11.createSelector)(
2099
1809
  let groupCount = acceptedDeviceTotal;
2100
1810
  let groupFilters = [];
2101
1811
  if (selectedGroup && groupsById[selectedGroup]) {
2102
- groupCount = groupsById[selectedGroup].total;
1812
+ groupCount = groupsById[selectedGroup].total || 0;
2103
1813
  groupFilters = groupsById[selectedGroup].filters || [];
2104
1814
  }
2105
1815
  return { groupCount, selectedGroup, groupFilters };
@@ -2110,13 +1820,18 @@ var getLimitMaxed = (0, import_toolkit11.createSelector)(
2110
1820
  ({ total: acceptedDevices = 0 }, deviceLimit) => Boolean(deviceLimit && deviceLimit <= acceptedDevices)
2111
1821
  );
2112
1822
  var getGroupsByIdWithoutUngrouped = (0, import_toolkit11.createSelector)([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);
1823
+ var getGroupData = (0, import_toolkit11.createSelector)([getGroupsByIdWithoutUngrouped], (groups) => {
1824
+ const createdGroup = Object.keys(groups).length ? Object.keys(groups)[0] : void 0;
1825
+ const hasDynamicGroups = Object.values(groups).some((group) => !!group.id);
1826
+ return { createdGroup, hasDynamicGroups, groups };
1827
+ });
2113
1828
  var getGroups = (0, import_toolkit11.createSelector)([getGroupsById], (groupsById) => {
2114
1829
  const groupNames = Object.keys(groupsById).sort();
2115
1830
  const groupedGroups = Object.entries(groupsById).sort((a, b) => a[0].localeCompare(b[0])).reduce(
2116
1831
  (accu, [groupname, group]) => {
2117
1832
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
2118
1833
  const groupItem = { ...group, groupId: name, name: groupname };
2119
- if (group.filters?.length > 0) {
1834
+ if ((group.filters ?? []).length > 0) {
2120
1835
  if (groupname !== UNGROUPED_GROUP.id) {
2121
1836
  accu.dynamic.push(groupItem);
2122
1837
  } else {
@@ -2159,12 +1874,14 @@ var getOnboarding = (state) => state.onboarding;
2159
1874
 
2160
1875
  // src/organizationSlice/selectors.ts
2161
1876
  var import_toolkit12 = require("@reduxjs/toolkit");
1877
+ var import_dayjs = __toESM(require("dayjs"), 1);
1878
+ var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime"), 1);
2162
1879
  var getOrganization = (state) => state.organization.organization;
2163
1880
  var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
2164
1881
  var getAuditLog = (state) => state.organization.auditlog.events;
2165
1882
  var getAuditLogSelectionState = (state) => state.organization.auditlog.selectionState;
2166
1883
  var getWebhookEvents = (state) => state.organization.webhooks.events;
2167
- var getWebhookEventTotal = (state) => state.organization.webhooks.eventTotal;
1884
+ var getWebhookEventTotal = (state) => state.organization.webhooks.eventsTotal;
2168
1885
  var getDeviceTwinIntegrations = (0, import_toolkit12.createSelector)(
2169
1886
  [getExternalIntegrations],
2170
1887
  (integrations) => integrations.filter((integration) => integration.id && EXTERNAL_PROVIDER[integration.provider]?.deviceTwin)
@@ -2185,22 +1902,31 @@ var getAuditLogEntry = (0, import_toolkit12.createSelector)([getAuditLog, getAud
2185
1902
  const [eventAction, eventTime] = atob(selectedId).split("|");
2186
1903
  return events.find((item) => item.action === eventAction && item.time === eventTime);
2187
1904
  });
1905
+ import_dayjs.default.extend(import_relativeTime.default);
1906
+ var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
1907
+ var getHasCurrentPricing = (0, import_toolkit12.createSelector)(
1908
+ [getOrganization],
1909
+ ({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
1910
+ );
1911
+
1912
+ // src/releasesSlice/selectors.ts
1913
+ var import_toolkit13 = require("@reduxjs/toolkit");
2188
1914
 
2189
1915
  // src/utils.ts
2190
1916
  var import_helpers5 = require("@northern.tech/utils/helpers");
2191
1917
  var filterProcessors = {
2192
- [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
2193
- [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
2194
- [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
2195
- [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
2196
- [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
2197
- [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2198
- [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
2199
- [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers5.yes,
2200
- [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
1918
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
1919
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
1920
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
1921
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
1922
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
1923
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1924
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1925
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers5.yes,
1926
+ [import_constants4.DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
2201
1927
  };
2202
1928
  var filterAliases = {
2203
- $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
1929
+ $nexists: { alias: import_constants4.DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
2204
1930
  };
2205
1931
  var mapFiltersToTerms = (filters) => filters.map((filter) => ({
2206
1932
  scope: filter.scope,
@@ -2209,33 +1935,40 @@ var mapFiltersToTerms = (filters) => filters.map((filter) => ({
2209
1935
  value: filterProcessors.hasOwnProperty(filter.operator) ? filterProcessors[filter.operator](filter.value) : filter.value
2210
1936
  }));
2211
1937
  var convertIssueOptionsToFilters = (issuesSelection, filtersState = {}) => issuesSelection.map((item) => {
2212
- if (typeof DEVICE_ISSUE_OPTIONS[item].filterRule.value === "function") {
2213
- return { ...DEVICE_ISSUE_OPTIONS[item].filterRule, value: DEVICE_ISSUE_OPTIONS[item].filterRule.value(filtersState) };
1938
+ if (typeof import_constants4.DEVICE_ISSUE_OPTIONS[item].filterRule.value === "function") {
1939
+ return { ...import_constants4.DEVICE_ISSUE_OPTIONS[item].filterRule, value: import_constants4.DEVICE_ISSUE_OPTIONS[item].filterRule.value(filtersState) };
2214
1940
  }
2215
- return DEVICE_ISSUE_OPTIONS[item].filterRule;
1941
+ return import_constants4.DEVICE_ISSUE_OPTIONS[item].filterRule;
2216
1942
  });
2217
- var convertDeviceListStateToFilters = ({ filters = [], group, groups = { byId: {} }, offlineThreshold, selectedIssues = [], status }) => {
1943
+ var convertDeviceListStateToFilters = ({
1944
+ filters = [],
1945
+ group,
1946
+ groups = { byId: {} },
1947
+ offlineThreshold,
1948
+ selectedIssues = [],
1949
+ status
1950
+ }) => {
2218
1951
  let applicableFilters = [...filters];
2219
1952
  if (typeof group === "string" && !(groups.byId[group]?.filters || applicableFilters).length) {
2220
- applicableFilters.push({ key: "group", value: group, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: "system" });
1953
+ applicableFilters.push({ key: "group", value: group, operator: import_constants4.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "system" });
2221
1954
  }
2222
1955
  const nonMonitorFilters = applicableFilters.filter(
2223
- (filter) => !Object.values(DEVICE_ISSUE_OPTIONS).some(
1956
+ (filter) => !Object.values(import_constants4.DEVICE_ISSUE_OPTIONS).some(
2224
1957
  ({ filterRule }) => filter.scope !== "inventory" && filterRule.scope === filter.scope && filterRule.key === filter.key
2225
1958
  )
2226
1959
  );
2227
1960
  const deviceIssueFilters = convertIssueOptionsToFilters(selectedIssues, { offlineThreshold });
2228
1961
  applicableFilters = [...nonMonitorFilters, ...deviceIssueFilters];
2229
- const effectiveFilters = status ? [...applicableFilters, { key: "status", value: status, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: "identity" }] : applicableFilters;
1962
+ const effectiveFilters = status ? [...applicableFilters, { key: "status", value: status, operator: import_constants4.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "identity" }] : applicableFilters;
2230
1963
  return { applicableFilters: nonMonitorFilters, filterTerms: mapFiltersToTerms(effectiveFilters) };
2231
1964
  };
2232
- var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
1965
+ var listItemMapper = (byId, ids, { cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH, defaultObject = {} }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
2233
1966
  if (id && byId[id]) {
2234
1967
  accu.push({ ...defaultObject, ...byId[id] });
2235
1968
  }
2236
1969
  return accu;
2237
1970
  }, []);
2238
- var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
1971
+ var mergePermissions = (existingPermissions = { ...import_constants4.emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
2239
1972
  (accu, [key, value]) => {
2240
1973
  let values;
2241
1974
  if (!accu[key]) {
@@ -2259,7 +1992,7 @@ var mapUserRolesToUiPermissions = (userRoles, roles) => userRoles.reduce(
2259
1992
  }
2260
1993
  return mergePermissions(accu, roles[roleId].uiPermissions);
2261
1994
  },
2262
- { ...emptyUiPermissions }
1995
+ { ...import_constants4.emptyUiPermissions }
2263
1996
  );
2264
1997
  var progress = ({ loaded, total }) => {
2265
1998
  let uploadProgress3 = loaded / total * 100;
@@ -2268,39 +2001,44 @@ var progress = ({ loaded, total }) => {
2268
2001
  var isDarkMode = (mode) => mode === DARK_MODE;
2269
2002
 
2270
2003
  // src/releasesSlice/selectors.ts
2271
- var import_toolkit13 = require("@reduxjs/toolkit");
2272
2004
  var getSelectedReleaseId = (state) => state.releases.selectedRelease;
2273
2005
  var getReleasesById = (state) => state.releases.byId;
2274
2006
  var getReleaseTags = (state) => state.releases.tags;
2275
2007
  var getReleaseListState = (state) => state.releases.releasesList;
2276
2008
  var getListedReleases = (state) => state.releases.releasesList.releaseIds;
2277
- var getReleaseMappingDefaults = () => ({});
2009
+ var releaseDefaults = {};
2010
+ var getReleaseMappingDefaults = () => releaseDefaults;
2278
2011
  var getReleasesList = (0, import_toolkit13.createSelector)([getReleasesById, getListedReleases, getReleaseMappingDefaults], listItemMapper);
2279
2012
  var getReleaseTagsById = (0, import_toolkit13.createSelector)([getReleaseTags], (releaseTags) => releaseTags.reduce((accu, key) => ({ ...accu, [key]: key }), {}));
2280
2013
  var getHasReleases = (0, import_toolkit13.createSelector)(
2281
2014
  [getReleaseListState, getReleasesById],
2282
2015
  ({ searchTotal, total }, byId) => !!(Object.keys(byId).length || total || searchTotal)
2283
2016
  );
2284
- var getSelectedRelease = (0, import_toolkit13.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id] ?? {});
2017
+ var getSelectedRelease = (0, import_toolkit13.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
2018
+ var getSelectedReleases = (0, import_toolkit13.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
2285
2019
 
2286
2020
  // src/usersSlice/selectors.ts
2287
2021
  var import_toolkit14 = require("@reduxjs/toolkit");
2022
+ var emptyObject = {};
2288
2023
  var getRolesById = (state) => state.users.rolesById;
2289
2024
  var getTooltipsById = (state) => state.users.tooltips.byId;
2290
2025
  var getGlobalSettings = (state) => state.users.globalSettings;
2291
2026
  var getCurrentUserId = (state) => state.users.currentUser;
2292
2027
  var getUsersById = (state) => state.users.byId;
2293
2028
  var getUsersList = (0, import_toolkit14.createSelector)([getUsersById], (usersById) => Object.values(usersById));
2294
- var getCurrentUser = (0, import_toolkit14.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
2029
+ var getCurrentUser = (0, import_toolkit14.createSelector)(
2030
+ [getUsersById, getCurrentUserId],
2031
+ (usersById, userId) => userId ? usersById[userId] ?? emptyObject : emptyObject
2032
+ );
2295
2033
  var getUserSettings = (state) => state.users.userSettings;
2296
2034
  var getSelectedDeviceAttribute = (0, import_toolkit14.createSelector)(
2297
2035
  [getUserSettings],
2298
2036
  ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
2299
2037
  );
2300
2038
  var getIsDarkMode = (0, import_toolkit14.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
2301
- var getShowHelptips = (0, import_toolkit14.createSelector)(
2039
+ var getReadAllHelptips = (0, import_toolkit14.createSelector)(
2302
2040
  [getTooltipsById],
2303
- (tooltips) => Object.values(tooltips).reduce((accu, { readState }) => accu || readState === READ_STATES.unread, false)
2041
+ (tooltips) => Object.values(tooltips).every(({ readState }) => readState === READ_STATES.read)
2304
2042
  );
2305
2043
  var getTooltipsState = (0, import_toolkit14.createSelector)(
2306
2044
  [getTooltipsById, getUserSettings],
@@ -2314,7 +2052,7 @@ var getTooltipsState = (0, import_toolkit14.createSelector)(
2314
2052
  );
2315
2053
  var getHas2FA = (0, import_toolkit14.createSelector)(
2316
2054
  [getCurrentUser],
2317
- (currentUser) => currentUser.hasOwnProperty("tfa_status") && currentUser.tfa_status === twoFAStates.enabled
2055
+ (currentUser) => currentUser.hasOwnProperty("tfa_status") && currentUser.tfa_status === import_constants4.twoFAStates.enabled
2318
2056
  );
2319
2057
  var getIdAttribute = (0, import_toolkit14.createSelector)([getGlobalSettings], ({ id_attribute = { ...defaultIdAttribute } }) => id_attribute);
2320
2058
  var getOfflineThresholdSettings = (0, import_toolkit14.createSelector)([getGlobalSettings], ({ offlineThreshold }) => ({
@@ -2330,37 +2068,34 @@ var getIsEnterprise = (0, import_toolkit15.createSelector)(
2330
2068
  );
2331
2069
  var getAttrsEndpoint = (0, import_toolkit15.createSelector)(
2332
2070
  [getFeatures],
2333
- ({ hasReporting }) => hasReporting ? `${reportingApiUrl}/devices/search/attributes` : `${inventoryApiUrlV2}/filters/attributes`
2071
+ ({ hasReporting }) => hasReporting ? `${import_constants4.reportingApiUrl}/devices/search/attributes` : `${import_constants4.inventoryApiUrlV2}/filters/attributes`
2334
2072
  );
2335
2073
  var getSearchEndpoint = (0, import_toolkit15.createSelector)(
2336
2074
  [getFeatures],
2337
- ({ hasReporting }) => hasReporting ? `${reportingApiUrl}/devices/search` : `${inventoryApiUrlV2}/filters/search`
2338
- );
2339
- var getUserRoles = (0, import_toolkit15.createSelector)(
2340
- [getCurrentUser, getRolesById, getIsEnterprise, getFeatures, getOrganization],
2341
- (currentUser, rolesById2, isEnterprise, { isHosted, hasMultitenancy }, { plan = PLANS.os.id }) => {
2342
- const isAdmin = currentUser.roles?.length ? currentUser.roles.some((role) => role === rolesByName.admin) : !(hasMultitenancy || isEnterprise || isHosted && plan !== PLANS.os.id);
2343
- const uiPermissions = isAdmin ? mapUserRolesToUiPermissions([rolesByName.admin], rolesById2) : mapUserRolesToUiPermissions(currentUser.roles || [], rolesById2);
2344
- return { isAdmin, uiPermissions };
2345
- }
2075
+ ({ hasReporting }) => hasReporting ? `${import_constants4.reportingApiUrl}/devices/search` : `${import_constants4.inventoryApiUrlV2}/filters/search`
2346
2076
  );
2077
+ var getUserRoles = (0, import_toolkit15.createSelector)([getCurrentUser, getRolesById, getIsEnterprise], (currentUser, rolesById2, isEnterprise) => {
2078
+ const isAdmin = currentUser.roles?.length ? currentUser.roles.some((role) => role === import_constants4.rolesByName.admin) : !isEnterprise;
2079
+ const uiPermissions = isAdmin ? mapUserRolesToUiPermissions([import_constants4.rolesByName.admin], rolesById2) : mapUserRolesToUiPermissions(currentUser.roles || [], rolesById2);
2080
+ return { isAdmin, uiPermissions };
2081
+ });
2347
2082
  var hasPermission = (thing, permission) => Object.values(thing).some((permissions) => permissions.includes(permission));
2348
2083
  var getUserCapabilities = (0, import_toolkit15.createSelector)([getUserRoles, getIsServiceProvider], ({ uiPermissions }, isServiceProvider) => {
2349
- const canManageReleases = hasPermission(uiPermissions.releases, uiPermissionsById.manage.value);
2350
- const canReadReleases = canManageReleases || hasPermission(uiPermissions.releases, uiPermissionsById.read.value);
2351
- const canUploadReleases = canManageReleases || hasPermission(uiPermissions.releases, uiPermissionsById.upload.value);
2352
- const canAuditlog = uiPermissions.auditlog.includes(uiPermissionsById.read.value);
2353
- const canReadUsers = uiPermissions.userManagement.includes(uiPermissionsById.read.value);
2354
- const canManageUsers = uiPermissions.userManagement.includes(uiPermissionsById.manage.value);
2355
- const canReadDevices = hasPermission(uiPermissions.groups, uiPermissionsById.read.value);
2084
+ const canManageReleases = hasPermission(uiPermissions.releases, import_constants4.uiPermissionsById.manage.value);
2085
+ const canReadReleases = canManageReleases || hasPermission(uiPermissions.releases, import_constants4.uiPermissionsById.read.value);
2086
+ const canUploadReleases = canManageReleases || hasPermission(uiPermissions.releases, import_constants4.uiPermissionsById.upload.value);
2087
+ const canAuditlog = uiPermissions.auditlog.includes(import_constants4.uiPermissionsById.read.value);
2088
+ const canReadUsers = uiPermissions.userManagement.includes(import_constants4.uiPermissionsById.read.value);
2089
+ const canManageUsers = uiPermissions.userManagement.includes(import_constants4.uiPermissionsById.manage.value);
2090
+ const canReadDevices = hasPermission(uiPermissions.groups, import_constants4.uiPermissionsById.read.value);
2356
2091
  const canWriteDevices = Object.values(uiPermissions.groups).some(
2357
- (groupPermissions) => groupPermissions.includes(uiPermissionsById.read.value) && groupPermissions.length > 1
2092
+ (groupPermissions) => groupPermissions.includes(import_constants4.uiPermissionsById.read.value) && groupPermissions.length > 1
2358
2093
  );
2359
- const canTroubleshoot = hasPermission(uiPermissions.groups, uiPermissionsById.connect.value);
2360
- const canManageDevices = hasPermission(uiPermissions.groups, uiPermissionsById.manage.value);
2361
- const canConfigure = hasPermission(uiPermissions.groups, uiPermissionsById.configure.value);
2362
- const canDeploy = uiPermissions.deployments.includes(uiPermissionsById.deploy.value) || hasPermission(uiPermissions.groups, uiPermissionsById.deploy.value);
2363
- const canReadDeployments = uiPermissions.deployments.includes(uiPermissionsById.read.value);
2094
+ const canTroubleshoot = hasPermission(uiPermissions.groups, import_constants4.uiPermissionsById.connect.value);
2095
+ const canManageDevices = hasPermission(uiPermissions.groups, import_constants4.uiPermissionsById.manage.value);
2096
+ const canConfigure = hasPermission(uiPermissions.groups, import_constants4.uiPermissionsById.configure.value);
2097
+ const canDeploy = uiPermissions.deployments.includes(import_constants4.uiPermissionsById.deploy.value) || hasPermission(uiPermissions.groups, import_constants4.uiPermissionsById.deploy.value);
2098
+ const canReadDeployments = uiPermissions.deployments.includes(import_constants4.uiPermissionsById.read.value);
2364
2099
  return {
2365
2100
  canAuditlog,
2366
2101
  canConfigure,
@@ -2411,11 +2146,11 @@ var getTenantCapabilities = (0, import_toolkit15.createSelector)(
2411
2146
  var getFilterAttributes = (0, import_toolkit15.createSelector)(
2412
2147
  [getGlobalSettings, getFilteringAttributes],
2413
2148
  ({ previousFilters }, { identityAttributes, inventoryAttributes, systemAttributes, tagAttributes }) => {
2414
- const deviceNameAttribute = { key: "name", value: "Name", scope: ATTRIBUTE_SCOPES.tags, category: ATTRIBUTE_SCOPES.tags, priority: 1 };
2415
- const deviceIdAttribute = { key: "id", value: "Device ID", scope: ATTRIBUTE_SCOPES.identity, category: ATTRIBUTE_SCOPES.identity, priority: 1 };
2416
- const checkInAttribute = { key: "check_in_time", value: "Latest activity", scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 };
2149
+ const deviceNameAttribute = { key: "name", value: "Name", scope: import_constants4.ATTRIBUTE_SCOPES.tags, category: import_constants4.ATTRIBUTE_SCOPES.tags, priority: 1 };
2150
+ const deviceIdAttribute = { key: "id", value: "Device ID", scope: import_constants4.ATTRIBUTE_SCOPES.identity, category: import_constants4.ATTRIBUTE_SCOPES.identity, priority: 1 };
2151
+ const checkInAttribute = { key: "check_in_time", value: "Latest activity", scope: import_constants4.ATTRIBUTE_SCOPES.system, category: import_constants4.ATTRIBUTE_SCOPES.system, priority: 4 };
2417
2152
  const updateAttribute = { ...checkInAttribute, key: "updated_ts", value: "Last inventory update" };
2418
- const firstRequestAttribute = { key: "created_ts", value: "First request", scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 };
2153
+ const firstRequestAttribute = { key: "created_ts", value: "First request", scope: import_constants4.ATTRIBUTE_SCOPES.system, category: import_constants4.ATTRIBUTE_SCOPES.system, priority: 4 };
2419
2154
  const attributes = [
2420
2155
  ...previousFilters.map((item) => ({
2421
2156
  ...item,
@@ -2425,13 +2160,13 @@ var getFilterAttributes = (0, import_toolkit15.createSelector)(
2425
2160
  })),
2426
2161
  deviceNameAttribute,
2427
2162
  deviceIdAttribute,
2428
- ...identityAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.identity, category: ATTRIBUTE_SCOPES.identity, priority: 1 })),
2429
- ...inventoryAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.inventory, category: ATTRIBUTE_SCOPES.inventory, priority: 2 })),
2430
- ...tagAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.tags, category: ATTRIBUTE_SCOPES.tags, priority: 3 })),
2163
+ ...identityAttributes.map((item) => ({ key: item, value: item, scope: import_constants4.ATTRIBUTE_SCOPES.identity, category: import_constants4.ATTRIBUTE_SCOPES.identity, priority: 1 })),
2164
+ ...inventoryAttributes.map((item) => ({ key: item, value: item, scope: import_constants4.ATTRIBUTE_SCOPES.inventory, category: import_constants4.ATTRIBUTE_SCOPES.inventory, priority: 2 })),
2165
+ ...tagAttributes.map((item) => ({ key: item, value: item, scope: import_constants4.ATTRIBUTE_SCOPES.tags, category: import_constants4.ATTRIBUTE_SCOPES.tags, priority: 3 })),
2431
2166
  checkInAttribute,
2432
2167
  updateAttribute,
2433
2168
  firstRequestAttribute,
2434
- ...systemAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 }))
2169
+ ...systemAttributes.map((item) => ({ key: item, value: item, scope: import_constants4.ATTRIBUTE_SCOPES.system, category: import_constants4.ATTRIBUTE_SCOPES.system, priority: 4 }))
2435
2170
  ];
2436
2171
  return (0, import_helpers6.attributeDuplicateFilter)(attributes, "key");
2437
2172
  }
@@ -2473,7 +2208,7 @@ var getSelectedDeploymentData = (0, import_toolkit15.createSelector)(
2473
2208
  );
2474
2209
  var getAvailableIssueOptionsByType = (0, import_toolkit15.createSelector)(
2475
2210
  [getFeatures, getTenantCapabilities, getIssueCountsByType],
2476
- ({ hasReporting }, { hasFullFiltering, hasMonitor }, issueCounts) => Object.values(DEVICE_ISSUE_OPTIONS).reduce((accu, { isCategory, key, needsFullFiltering, needsMonitor, needsReporting, title }) => {
2211
+ ({ hasReporting }, { hasFullFiltering, hasMonitor }, issueCounts) => Object.values(import_constants4.DEVICE_ISSUE_OPTIONS).reduce((accu, { isCategory, key, needsFullFiltering, needsMonitor, needsReporting, title }) => {
2477
2212
  if (isCategory || needsReporting && !hasReporting || needsFullFiltering && !hasFullFiltering || needsMonitor && !hasMonitor) {
2478
2213
  return accu;
2479
2214
  }
@@ -2481,14 +2216,11 @@ var getAvailableIssueOptionsByType = (0, import_toolkit15.createSelector)(
2481
2216
  return accu;
2482
2217
  }, {})
2483
2218
  );
2484
- var getGroupNames = (0, import_toolkit15.createSelector)([getGroupsById, getUserRoles, (_, options = {}) => options], (groupsById, { uiPermissions }, { staticOnly }) => {
2219
+ var getGroupNames = (0, import_toolkit15.createSelector)([getGroupsById, getUserRoles], (groupsById, { uiPermissions }) => {
2485
2220
  const { [UNGROUPED_GROUP.id]: ungrouped, ...groups } = groupsById;
2486
- if (staticOnly) {
2487
- return Object.keys(uiPermissions.groups).sort();
2488
- }
2489
2221
  return Object.keys(
2490
2222
  Object.entries(groups).reduce((accu, [groupName, group]) => {
2491
- if (group.filterId || uiPermissions.groups[ALL_DEVICES]) {
2223
+ if (group.filterId || uiPermissions.groups[import_constants4.ALL_DEVICES]) {
2492
2224
  accu[groupName] = group;
2493
2225
  }
2494
2226
  return accu;
@@ -2521,14 +2253,14 @@ var getAuditlogDevice = (0, import_toolkit15.createSelector)([getAuditLogEntry,
2521
2253
  var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
2522
2254
  if (service_provider) {
2523
2255
  return roles.reduce((accu, role) => {
2524
- if (rolesById[role.value]) {
2256
+ if (import_constants4.rolesById[role.value]) {
2525
2257
  return accu;
2526
2258
  }
2527
2259
  accu.push(role);
2528
2260
  return accu;
2529
- }, Object.values(serviceProviderRolesById));
2261
+ }, Object.values(import_constants4.serviceProviderRolesById));
2530
2262
  }
2531
- return Object.keys(rolesById).reverse().reduce((accu, key) => {
2263
+ return Object.keys(import_constants4.rolesById).reverse().reduce((accu, key) => {
2532
2264
  const index = accu.findIndex(({ value }) => value === key);
2533
2265
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
2534
2266
  return accu;
@@ -2539,6 +2271,7 @@ var getRelevantRoles = (0, import_toolkit15.createSelector)([getOrganization, ge
2539
2271
  var import_react_redux = require("react-redux");
2540
2272
  var import_helpers7 = require("@northern.tech/utils/helpers");
2541
2273
  var import_toolkit16 = require("@reduxjs/toolkit");
2274
+ var import_react = require("@sentry/react");
2542
2275
  var { setSnackbar, uploadProgress } = actions_default;
2543
2276
  var keys = ["sessionDeploymentChecker", settingsKeys.initialized];
2544
2277
  var resetEnvironment = () => keys.forEach((key) => window.sessionStorage.removeItem(key));
@@ -2575,20 +2308,50 @@ var rejectionLoggerMiddleware = () => (next) => (action) => {
2575
2308
  }
2576
2309
  return next(action);
2577
2310
  };
2311
+ var tracingActionIgnoreList = [actions8.successfullyLoggedIn.type, "users/loginUser/pending", "users/loginUser/fulfilled", "users/loginUser/rejected"];
2312
+ var sentryReduxEnhancer = (0, import_react.createReduxEnhancer)({
2313
+ actionTransformer: (action) => {
2314
+ if (tracingActionIgnoreList.includes(action.type)) {
2315
+ return null;
2316
+ }
2317
+ return action;
2318
+ },
2319
+ // Transform the state to remove sensitive information
2320
+ stateTransformer: (state) => {
2321
+ const transformedState = {
2322
+ ...state,
2323
+ users: { ...state.users, currentSession: null },
2324
+ organization: {
2325
+ ...state.organization,
2326
+ organization: {
2327
+ ...state.organization.organization,
2328
+ tenant_token: null
2329
+ }
2330
+ }
2331
+ };
2332
+ return transformedState;
2333
+ }
2334
+ });
2578
2335
  var getConfiguredStore = (options = {}) => {
2579
2336
  const { preloadedState = {}, ...config } = options;
2580
2337
  return (0, import_toolkit16.configureStore)({
2581
2338
  ...config,
2582
2339
  preloadedState,
2340
+ enhancers: (getDefaultEnhancers) => {
2341
+ if (window.mender_environment?.sentry?.isReduxEnabled) {
2342
+ return getDefaultEnhancers().concat(sentryReduxEnhancer);
2343
+ }
2344
+ return getDefaultEnhancers();
2345
+ },
2583
2346
  reducer: sessionReducer,
2584
2347
  middleware: (getDefaultMiddleware) => getDefaultMiddleware({
2585
2348
  immutableCheck: {
2586
2349
  ignoredPaths: ["app.uploadsById"]
2587
2350
  },
2588
2351
  serializableCheck: {
2589
- ignoredActions: [actions6.receiveExternalDeviceIntegrations.name, setSnackbar.name, uploadProgress.name],
2590
- ignoredActionPaths: ["uploads", "snackbar", /payload\..*$/],
2591
- ignoredPaths: ["app.uploadsById", "app.snackbar", "organization.externalDeviceIntegrations"]
2352
+ ignoredActions: [actions7.receiveExternalDeviceIntegrations.name, uploadProgress.name],
2353
+ ignoredActionPaths: ["uploads", /payload\..*$/, "meta.arg.file", "meta.arg.integration.configHint"],
2354
+ ignoredPaths: ["app.uploadsById", "organization.externalDeviceIntegrations"]
2592
2355
  }
2593
2356
  }).concat(rejectionLoggerMiddleware)
2594
2357
  });
@@ -2596,15 +2359,12 @@ var getConfiguredStore = (options = {}) => {
2596
2359
  var store = getConfiguredStore({
2597
2360
  preloadedState: {}
2598
2361
  });
2362
+ var createAppAsyncThunk = import_toolkit16.createAsyncThunk.withTypes();
2599
2363
 
2600
2364
  // src/releasesSlice/thunks.ts
2601
- var import_helpers8 = require("@northern.tech/utils/helpers");
2602
- var import_toolkit17 = require("@reduxjs/toolkit");
2603
- var import_axios2 = require("axios");
2604
- var import_uuid = require("uuid");
2605
2365
  var { setSnackbar: setSnackbar2, initUpload, uploadProgress: uploadProgress2, cleanUpUpload } = actions_default;
2606
- var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
2607
- var sortingDefaults = { direction: SORTING_OPTIONS.desc, key: "modified" };
2366
+ var { page: defaultPage, perPage: defaultPerPage } = import_constants4.DEVICE_LIST_DEFAULTS;
2367
+ var sortingDefaults = { direction: import_constants4.SORTING_OPTIONS.desc, key: "modified" };
2608
2368
  var flattenRelease = (release, stateRelease) => {
2609
2369
  const updatedArtifacts = release.artifacts?.sort((0, import_helpers8.customSort)(true, "modified")) || [];
2610
2370
  const { artifacts, deviceTypes, modified } = updatedArtifacts.reduce(
@@ -2629,7 +2389,7 @@ var reduceReceivedReleases = (releases, stateReleasesById) => releases.reduce((a
2629
2389
  }, {});
2630
2390
  var findArtifactIndexInRelease = (releases, id) => Object.values(releases).reduce(
2631
2391
  (accu, item) => {
2632
- let index = item.artifacts.findIndex((releaseArtifact) => releaseArtifact.id === id);
2392
+ const index = item.artifacts.findIndex((releaseArtifact) => releaseArtifact.id === id);
2633
2393
  if (index > -1) {
2634
2394
  accu = { release: item, index };
2635
2395
  }
@@ -2637,8 +2397,8 @@ var findArtifactIndexInRelease = (releases, id) => Object.values(releases).reduc
2637
2397
  },
2638
2398
  { release: null, index: -1 }
2639
2399
  );
2640
- var getArtifactInstallCount = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/getArtifactInstallCount`, (id, { dispatch, getState }) => {
2641
- let { release, index } = findArtifactIndexInRelease(getReleasesById(getState()), id);
2400
+ var getArtifactInstallCount = createAppAsyncThunk(`${sliceName}/getArtifactInstallCount`, (id, { dispatch, getState }) => {
2401
+ const { release, index } = findArtifactIndexInRelease(getReleasesById(getState()), id);
2642
2402
  if (!release || index === -1) {
2643
2403
  return;
2644
2404
  }
@@ -2655,24 +2415,28 @@ var getArtifactInstallCount = (0, import_toolkit17.createAsyncThunk)(`${sliceNam
2655
2415
  filters: filterTerms,
2656
2416
  attributes: [{ scope: "identity", attribute: "status" }]
2657
2417
  }).catch((err) => commonErrorHandler(err, `Retrieving artifact installation count failed:`, dispatch, commonErrorFallback)).then(({ headers }) => {
2658
- let { release: release2, index: index2 } = findArtifactIndexInRelease(getReleasesById(getState()), id);
2418
+ const foundRelease = findArtifactIndexInRelease(getReleasesById(getState()), id);
2419
+ const index2 = foundRelease.index;
2420
+ let release2 = foundRelease.release;
2659
2421
  if (!release2 || index2 === -1) {
2660
2422
  return;
2661
2423
  }
2662
- const installCount = Number(headers[headerNames.total]);
2424
+ const installCount = Number(headers[import_constants4.headerNames.total]);
2663
2425
  const releaseArtifacts2 = [...release2.artifacts];
2664
2426
  releaseArtifacts2[index2] = { ...releaseArtifacts2[index2], installCount };
2665
2427
  release2 = {
2666
2428
  ...release2,
2667
2429
  artifacts: releaseArtifacts2
2668
2430
  };
2669
- return dispatch(actions7.receiveRelease(release2));
2431
+ return dispatch(actions.receiveRelease(release2));
2670
2432
  });
2671
2433
  });
2672
- var getArtifactUrl = (0, import_toolkit17.createAsyncThunk)(
2673
- `${sliceName7}/getArtifactUrl`,
2674
- (id, { dispatch, getState }) => general_api_default.get(`${deploymentsApiUrl}/artifacts/${id}/download`).then((response) => {
2675
- let { release, index } = findArtifactIndexInRelease(getReleasesById(getState()), id);
2434
+ var getArtifactUrl = createAppAsyncThunk(
2435
+ `${sliceName}/getArtifactUrl`,
2436
+ (id, { dispatch, getState }) => general_api_default.get(`${import_constants4.deploymentsApiUrl}/artifacts/${id}/download`).then((response) => {
2437
+ const foundRelease = findArtifactIndexInRelease(getReleasesById(getState()), id);
2438
+ const index = foundRelease.index;
2439
+ let release = foundRelease.release;
2676
2440
  if (!release || index === -1) {
2677
2441
  return dispatch(getReleases());
2678
2442
  }
@@ -2685,11 +2449,11 @@ var getArtifactUrl = (0, import_toolkit17.createAsyncThunk)(
2685
2449
  ...release,
2686
2450
  artifacts: releaseArtifacts
2687
2451
  };
2688
- return dispatch(actions7.receiveRelease(release));
2452
+ return dispatch(actions.receiveRelease(release));
2689
2453
  })
2690
2454
  );
2691
- var createArtifact = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/createArtifact`, ({ file, meta }, { dispatch }) => {
2692
- let formData = Object.entries(meta).reduce((accu, [key, value]) => {
2455
+ var createArtifact = createAppAsyncThunk(`${sliceName}/createArtifact`, ({ file, meta }, { dispatch }) => {
2456
+ const formData = Object.entries(meta).reduce((accu, [key, value]) => {
2693
2457
  if (Array.isArray(value)) {
2694
2458
  accu.append(key, value.join(","));
2695
2459
  } else if (value instanceof Object) {
@@ -2705,9 +2469,9 @@ var createArtifact = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/creat
2705
2469
  const cancelSource = new AbortController();
2706
2470
  return Promise.all([
2707
2471
  dispatch(setSnackbar2("Generating artifact")),
2708
- dispatch(initUpload({ id: uploadId, upload: { name: file.name, size: file.size, uploadProgress: 0, cancelSource } })),
2472
+ dispatch(initUpload({ id: uploadId, upload: { name: file.name, size: file.size, progress: 0, cancelSource } })),
2709
2473
  general_api_default.upload(
2710
- `${deploymentsApiUrl}/artifacts/generate`,
2474
+ `${import_constants4.deploymentsApiUrl}/artifacts/generate`,
2711
2475
  formData,
2712
2476
  (e) => dispatch(uploadProgress2({ id: uploadId, progress: progress(e) })),
2713
2477
  cancelSource.signal
@@ -2717,75 +2481,86 @@ var createArtifact = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/creat
2717
2481
  dispatch(getReleases());
2718
2482
  dispatch(selectRelease(file.name));
2719
2483
  }, TIMEOUTS.oneSecond);
2720
- return Promise.resolve(dispatch(setSnackbar2("Upload successful", TIMEOUTS.fiveSeconds)));
2484
+ return Promise.resolve(dispatch(setSnackbar2({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds })));
2721
2485
  }).catch((err) => {
2722
2486
  if ((0, import_axios2.isCancel)(err)) {
2723
- return dispatch(setSnackbar2("The artifact generation has been cancelled", TIMEOUTS.fiveSeconds));
2487
+ return dispatch(setSnackbar2({ message: "The artifact generation has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
2724
2488
  }
2725
2489
  return commonErrorHandler(err, `Artifact couldn't be generated.`, dispatch);
2726
2490
  }).finally(() => dispatch(cleanUpUpload(uploadId)));
2727
2491
  });
2728
- var uploadArtifact = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/uploadArtifact`, ({ file, meta }, { dispatch }) => {
2729
- let formData = new FormData();
2730
- formData.append("size", file.size);
2492
+ var uploadArtifact = createAppAsyncThunk(`${sliceName}/uploadArtifact`, ({ file, meta }, { dispatch }) => {
2493
+ const formData = new FormData();
2494
+ formData.append("size", file.size.toString());
2731
2495
  formData.append("description", meta.description);
2732
2496
  formData.append("artifact", file);
2733
2497
  const uploadId = (0, import_uuid.v4)();
2734
2498
  const cancelSource = new AbortController();
2735
2499
  return Promise.all([
2736
2500
  dispatch(setSnackbar2("Uploading artifact")),
2737
- dispatch(initUpload({ id: uploadId, upload: { name: file.name, size: file.size, uploadProgress: 0, cancelSource } })),
2738
- general_api_default.upload(`${deploymentsApiUrl}/artifacts`, formData, (e) => dispatch(uploadProgress2({ id: uploadId, progress: progress(e) })), cancelSource.signal)
2501
+ dispatch(initUpload({ id: uploadId, upload: { name: file.name, size: file.size, progress: 0, cancelSource } })),
2502
+ general_api_default.upload(
2503
+ `${import_constants4.deploymentsApiUrl}/artifacts`,
2504
+ formData,
2505
+ (e) => dispatch(uploadProgress2({ id: uploadId, progress: progress(e) })),
2506
+ cancelSource.signal
2507
+ )
2739
2508
  ]).then(() => {
2740
- const tasks = [dispatch(setSnackbar2("Upload successful", TIMEOUTS.fiveSeconds)), dispatch(getReleases())];
2509
+ const tasks = [
2510
+ dispatch(setSnackbar2({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds })),
2511
+ dispatch(getReleases())
2512
+ ];
2741
2513
  if (meta.name) {
2742
2514
  tasks.push(dispatch(selectRelease(meta.name)));
2743
2515
  }
2744
2516
  return Promise.all(tasks);
2745
2517
  }).catch((err) => {
2746
2518
  if ((0, import_axios2.isCancel)(err)) {
2747
- return dispatch(setSnackbar2("The upload has been cancelled", TIMEOUTS.fiveSeconds));
2519
+ return dispatch(setSnackbar2({ message: "The upload has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
2748
2520
  }
2749
2521
  return commonErrorHandler(err, `Artifact couldn't be uploaded.`, dispatch);
2750
2522
  }).finally(() => dispatch(cleanUpUpload(uploadId)));
2751
2523
  });
2752
- var cancelFileUpload = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/cancelFileUpload`, (id, { dispatch, getState }) => {
2524
+ var cancelFileUpload = createAppAsyncThunk(`${sliceName}/cancelFileUpload`, (id, { dispatch, getState }) => {
2753
2525
  const { [id]: current } = getState().app.uploadsById;
2754
2526
  current.cancelSource.abort();
2755
2527
  return Promise.resolve(dispatch(cleanUpUpload(id)));
2756
2528
  });
2757
- var editArtifact = (0, import_toolkit17.createAsyncThunk)(
2758
- `${sliceName7}/editArtifact`,
2759
- ({ id, body }, { dispatch, getState }) => general_api_default.put(`${deploymentsApiUrl}/artifacts/${id}`, body).catch((err) => commonErrorHandler(err, `Artifact details couldn't be updated.`, dispatch)).then(() => {
2529
+ var editArtifact = createAppAsyncThunk(
2530
+ `${sliceName}/editArtifact`,
2531
+ ({ id, body }, { dispatch, getState }) => general_api_default.put(`${import_constants4.deploymentsApiUrl}/artifacts/${id}`, body).catch((err) => commonErrorHandler(err, `Artifact details couldn't be updated.`, dispatch)).then(() => {
2760
2532
  const state = getState();
2761
- let { release, index } = findArtifactIndexInRelease(getReleasesById(state), id);
2533
+ const { release, index } = findArtifactIndexInRelease(getReleasesById(state), id);
2762
2534
  if (!release || index === -1) {
2763
2535
  return dispatch(getReleases());
2764
2536
  }
2765
2537
  const updatedRelease = {
2766
2538
  ...release,
2767
- artifacts: release.artifacts.map((artifact, i) => i === index ? { ...artifact, description: body.description } : artifact)
2539
+ artifacts: release.artifacts.map((artifact, i) => i === index ? { ...artifact, description: body.description || "" } : artifact)
2768
2540
  };
2769
2541
  return Promise.all([
2770
- dispatch(actions7.receiveRelease(updatedRelease)),
2771
- dispatch(setSnackbar2("Artifact details were updated successfully.", TIMEOUTS.fiveSeconds, "")),
2542
+ dispatch(actions.receiveRelease(updatedRelease)),
2543
+ dispatch(setSnackbar2({ message: "Artifact details were updated successfully.", autoHideDuration: TIMEOUTS.fiveSeconds, action: "" })),
2772
2544
  dispatch(getRelease(release.name)),
2773
2545
  dispatch(selectRelease(release.name))
2774
2546
  ]);
2775
2547
  })
2776
2548
  );
2777
- var removeArtifact = (0, import_toolkit17.createAsyncThunk)(
2778
- `${sliceName7}/removeArtifact`,
2779
- (id, { dispatch, getState }) => general_api_default.delete(`${deploymentsApiUrl}/artifacts/${id}`).then(() => {
2549
+ var removeArtifact = createAppAsyncThunk(
2550
+ `${sliceName}/removeArtifact`,
2551
+ (id, { dispatch, getState }) => general_api_default.delete(`${import_constants4.deploymentsApiUrl}/artifacts/${id}`).then(() => {
2780
2552
  const state = getState();
2781
- let { release, index } = findArtifactIndexInRelease(getReleasesById(state), id);
2553
+ const { release, index } = findArtifactIndexInRelease(getReleasesById(state), id);
2554
+ if (!release || index === -1) {
2555
+ return dispatch(getReleases());
2556
+ }
2782
2557
  const releaseArtifacts = [...release.artifacts];
2783
2558
  releaseArtifacts.splice(index, 1);
2784
2559
  if (!releaseArtifacts.length) {
2785
2560
  const { releasesList } = state.releases;
2786
2561
  const releaseIds = releasesList.releaseIds.filter((id2) => release.name !== id2);
2787
2562
  return Promise.all([
2788
- dispatch(actions7.removeRelease(release.name)),
2563
+ dispatch(actions.removeRelease(release.name)),
2789
2564
  dispatch(
2790
2565
  setReleasesListState({
2791
2566
  releaseIds,
@@ -2795,38 +2570,52 @@ var removeArtifact = (0, import_toolkit17.createAsyncThunk)(
2795
2570
  )
2796
2571
  ]);
2797
2572
  }
2798
- return Promise.all([dispatch(setSnackbar2("Artifact was removed", TIMEOUTS.fiveSeconds, "")), dispatch(actions7.receiveRelease(release))]);
2573
+ return Promise.all([
2574
+ dispatch(setSnackbar2({ message: "Artifact was removed", autoHideDuration: TIMEOUTS.fiveSeconds, action: "" })),
2575
+ dispatch(actions.receiveRelease(release))
2576
+ ]);
2799
2577
  }).catch((err) => commonErrorHandler(err, `Error removing artifact:`, dispatch))
2800
2578
  );
2801
- var removeRelease = (0, import_toolkit17.createAsyncThunk)(
2802
- `${sliceName7}/removeRelease`,
2803
- (releaseId, { dispatch, getState }) => Promise.all(getReleasesById(getState())[releaseId].artifacts.map(({ id }) => dispatch(removeArtifact(id)))).then(() => dispatch(selectRelease()))
2579
+ var removeRelease = createAppAsyncThunk(
2580
+ `${sliceName}/removeRelease`,
2581
+ (releaseId, { dispatch, getState }) => Promise.all(getReleasesById(getState())[releaseId].artifacts.map(({ id }) => dispatch(removeArtifact(id)))).then(() => dispatch(selectRelease(null)))
2804
2582
  );
2805
- var selectRelease = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/selectRelease`, (release, { dispatch }) => {
2806
- const name = release ? release.name || release : null;
2807
- let tasks = [dispatch(actions7.selectedRelease(name))];
2583
+ var removeReleases = createAppAsyncThunk(`${sliceName}/removeReleases`, (releaseIds, { dispatch, getState }) => {
2584
+ const deleteRequests = releaseIds.reduce((accu, releaseId) => {
2585
+ const releaseArtifacts = getReleasesById(getState())[releaseId].artifacts;
2586
+ accu.push(releaseArtifacts.map(({ id }) => dispatch(removeArtifact(id))));
2587
+ return accu;
2588
+ }, []);
2589
+ return Promise.all(deleteRequests);
2590
+ });
2591
+ var selectRelease = createAppAsyncThunk(`${sliceName}/selectRelease`, (release, { dispatch }) => {
2592
+ const name = (release && typeof release === "object" ? release.name : release) || null;
2593
+ const tasks = [dispatch(actions.selectedRelease(name))];
2808
2594
  if (name) {
2809
2595
  tasks.push(dispatch(getRelease(name)));
2810
2596
  }
2811
2597
  return Promise.all(tasks);
2812
2598
  });
2813
- var setReleasesListState = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/setReleasesListState`, (selectionState, { dispatch, getState }) => {
2814
- const currentState = getState().releases.releasesList;
2815
- let nextState = {
2816
- ...currentState,
2817
- ...selectionState,
2818
- sort: { ...currentState.sort, ...selectionState.sort }
2819
- };
2820
- let tasks = [];
2821
- const { isLoading: currentLoading, ...currentRequestState } = currentState;
2822
- const { isLoading: selectionLoading, ...selectionRequestState } = nextState;
2823
- if (!(0, import_helpers8.deepCompare)(currentRequestState, selectionRequestState)) {
2824
- nextState.isLoading = true;
2825
- tasks.push(dispatch(getReleases(nextState)).finally(() => dispatch(setReleasesListState({ isLoading: false }))));
2599
+ var setReleasesListState = createAppAsyncThunk(
2600
+ `${sliceName}/setReleasesListState`,
2601
+ (selectionState, { dispatch, getState }) => {
2602
+ const currentState = getState().releases.releasesList;
2603
+ const nextState = {
2604
+ ...currentState,
2605
+ ...selectionState,
2606
+ sort: { ...currentState.sort, ...selectionState.sort }
2607
+ };
2608
+ const tasks = [];
2609
+ const { isLoading: currentLoading, ...currentRequestState } = currentState;
2610
+ const { isLoading: selectionLoading, ...selectionRequestState } = nextState;
2611
+ if (!(0, import_helpers8.deepCompare)(currentRequestState, selectionRequestState)) {
2612
+ nextState.isLoading = true;
2613
+ tasks.push(dispatch(getReleases(nextState)).finally(() => dispatch(setReleasesListState({ isLoading: false }))));
2614
+ }
2615
+ tasks.push(dispatch(actions.setReleaseListState(nextState)));
2616
+ return Promise.all(tasks);
2826
2617
  }
2827
- tasks.push(dispatch(actions7.setReleaseListState(nextState)));
2828
- return Promise.all(tasks);
2829
- });
2618
+ );
2830
2619
  var releaseListRetrieval = (config) => {
2831
2620
  const { searchTerm = "", page = defaultPage, perPage = defaultPerPage, sort = sortingDefaults, selectedTags = [], type = "" } = config;
2832
2621
  const { key: attribute, direction } = sort;
@@ -2834,13 +2623,13 @@ var releaseListRetrieval = (config) => {
2834
2623
  const updateType = type ? `update_type=${type}` : "";
2835
2624
  const sorting = attribute ? `sort=${attribute}:${direction}`.toLowerCase() : "";
2836
2625
  return general_api_default.get(
2837
- `${deploymentsApiUrlV2}/deployments/releases?${[`page=${page}`, `per_page=${perPage}`, filterQuery, updateType, sorting].filter((i) => i).join("&")}`
2626
+ `${import_constants4.deploymentsApiUrlV2}/deployments/releases?${[`page=${page}`, `per_page=${perPage}`, filterQuery, updateType, sorting].filter((i) => i).join("&")}`
2838
2627
  );
2839
2628
  };
2840
2629
  var deductSearchState = (receivedReleases, config, total, state) => {
2841
2630
  let releaseListState = { ...state.releasesList };
2842
2631
  const { searchTerm, searchOnly, sort = {}, selectedTags = [], type } = config;
2843
- const flattenedReleases = Object.values(receivedReleases).sort((0, import_helpers8.customSort)(sort.direction === SORTING_OPTIONS.desc, sort.key));
2632
+ const flattenedReleases = Object.values(receivedReleases).sort((0, import_helpers8.customSort)(sort.direction === import_constants4.SORTING_OPTIONS.desc, sort.key));
2844
2633
  const releaseIds = flattenedReleases.map((item) => item.name);
2845
2634
  const isFiltering = !!(selectedTags.length || type || searchTerm);
2846
2635
  if (searchOnly) {
@@ -2855,53 +2644,66 @@ var deductSearchState = (receivedReleases, config, total, state) => {
2855
2644
  }
2856
2645
  return releaseListState;
2857
2646
  };
2858
- var getReleases = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/getReleases`, (passedConfig = {}, { dispatch, getState }) => {
2647
+ var getReleases = createAppAsyncThunk(`${sliceName}/getReleases`, (passedConfig = {}, { dispatch, getState }) => {
2859
2648
  const config = { ...getState().releases.releasesList, ...passedConfig };
2860
2649
  return releaseListRetrieval(config).then(({ data: receivedReleases = [], headers = {} }) => {
2861
- const total = headers[headerNames.total] ? Number(headers[headerNames.total]) : 0;
2650
+ const total = headers[import_constants4.headerNames.total] ? Number(headers[import_constants4.headerNames.total]) : 0;
2862
2651
  const state = getState().releases;
2863
2652
  const flatReleases = reduceReceivedReleases(receivedReleases, state.byId);
2864
2653
  const combinedReleases = { ...state.byId, ...flatReleases };
2865
- let tasks = [dispatch(actions7.receiveReleases(combinedReleases))];
2654
+ const tasks = [dispatch(actions.receiveReleases(combinedReleases))];
2866
2655
  const releaseListState = deductSearchState(receivedReleases, config, total, state);
2867
- tasks.push(dispatch(actions7.setReleaseListState(releaseListState)));
2656
+ tasks.push(dispatch(actions.setReleaseListState(releaseListState)));
2868
2657
  return Promise.all(tasks);
2869
2658
  }).catch((err) => commonErrorHandler(err, `Please check your connection`, dispatch));
2870
2659
  });
2871
- var getRelease = (0, import_toolkit17.createAsyncThunk)(`${sliceName7}/getReleases`, async (name, { dispatch, getState }) => {
2872
- const releaseResponse = await general_api_default.get(`${deploymentsApiUrlV2}/deployments/releases/${name}`);
2660
+ var getRelease = createAppAsyncThunk(`${sliceName}/getReleases`, async (name, { dispatch, getState }) => {
2661
+ const releaseResponse = await general_api_default.get(`${import_constants4.deploymentsApiUrlV2}/deployments/releases/${name}`);
2873
2662
  const { data: release } = releaseResponse;
2874
2663
  if (release) {
2875
2664
  const stateRelease = getReleasesById(getState())[release.name] || {};
2876
- await dispatch(actions7.receiveRelease(flattenRelease(release, stateRelease)));
2665
+ await dispatch(actions.receiveRelease(flattenRelease(release, stateRelease)));
2877
2666
  }
2878
2667
  return Promise.resolve(null);
2879
2668
  });
2880
- var updateReleaseInfo = (0, import_toolkit17.createAsyncThunk)(
2881
- `${sliceName7}/updateReleaseInfo`,
2882
- ({ name, info }, { dispatch, getState }) => general_api_default.patch(`${deploymentsApiUrlV2}/deployments/releases/${name}`, info).catch((err) => commonErrorHandler(err, `Release details couldn't be updated.`, dispatch)).then(
2669
+ var updateReleaseInfo = createAppAsyncThunk(
2670
+ `${sliceName}/updateReleaseInfo`,
2671
+ ({ name, info }, { dispatch, getState }) => general_api_default.patch(`${import_constants4.deploymentsApiUrlV2}/deployments/releases/${name}`, info).catch((err) => commonErrorHandler(err, `Release details couldn't be updated.`, dispatch)).then(
2883
2672
  () => Promise.all([
2884
- dispatch(actions7.receiveRelease({ ...getReleasesById(getState())[name], ...info, name })),
2885
- dispatch(setSnackbar2("Release details were updated successfully.", TIMEOUTS.fiveSeconds, ""))
2673
+ dispatch(actions.receiveRelease({ ...getReleasesById(getState())[name], ...info, name })),
2674
+ dispatch(setSnackbar2({ message: "Release details were updated successfully.", autoHideDuration: TIMEOUTS.fiveSeconds, action: "" }))
2886
2675
  ])
2887
2676
  )
2888
2677
  );
2889
- var setReleaseTags = (0, import_toolkit17.createAsyncThunk)(
2890
- `${sliceName7}/setReleaseTags`,
2891
- ({ name, tags = [] }, { dispatch, getState }) => general_api_default.put(`${deploymentsApiUrlV2}/deployments/releases/${name}/tags`, tags).catch((err) => commonErrorHandler(err, `Release tags couldn't be set.`, dispatch)).then(
2892
- () => Promise.all([
2893
- dispatch(actions7.receiveRelease({ ...getReleasesById(getState())[name], name, tags })),
2894
- dispatch(setSnackbar2("Release tags were set successfully.", TIMEOUTS.fiveSeconds, ""))
2895
- ])
2678
+ var setSingleReleaseTags = createAppAsyncThunk(
2679
+ `${sliceName}/setSingleReleaseTags`,
2680
+ ({ name, tags }, { dispatch, getState }) => general_api_default.put(`${import_constants4.deploymentsApiUrlV2}/deployments/releases/${name}/tags`, tags).then(
2681
+ () => Promise.resolve(dispatch(actions.receiveRelease({ ...getReleasesById(getState())[name], name, tags })))
2896
2682
  )
2897
2683
  );
2898
- var getExistingReleaseTags = (0, import_toolkit17.createAsyncThunk)(
2899
- `${sliceName7}/getReleaseTags`,
2900
- (_, { dispatch }) => general_api_default.get(`${deploymentsApiUrlV2}/releases/all/tags`).catch((err) => commonErrorHandler(err, `Existing release tags couldn't be retrieved.`, dispatch)).then(({ data: tags }) => Promise.resolve(dispatch(actions7.receiveReleaseTags(tags))))
2684
+ var setReleaseTags = createAppAsyncThunk(
2685
+ `${sliceName}/setReleaseTags`,
2686
+ ({ name, tags = [] }, { dispatch }) => dispatch(setSingleReleaseTags({ name, tags })).catch((err) => commonErrorHandler(err, `Release tags couldn't be set.`, dispatch)).then(() => Promise.resolve(dispatch(setSnackbar2({ message: "Release tags were set successfully.", autoHideDuration: TIMEOUTS.fiveSeconds, action: "" }))))
2687
+ );
2688
+ var setReleasesTags = createAppAsyncThunk(
2689
+ `${sliceName}/setReleasesTags`,
2690
+ ({ releases, tags = [] }, { dispatch }) => {
2691
+ const addRequests = releases.reduce((accu, release) => {
2692
+ accu.push(dispatch(setSingleReleaseTags({ name: release.name, tags: [.../* @__PURE__ */ new Set([...release.tags ? release.tags : [], ...tags])] })));
2693
+ return accu;
2694
+ }, []);
2695
+ return Promise.all(addRequests).catch((err) => commonErrorHandler(err, `Releases couldn't be tagged.`, dispatch)).then(
2696
+ () => Promise.resolve(dispatch(setSnackbar2({ message: "Releases were tagged successfully.", autoHideDuration: TIMEOUTS.fiveSeconds, action: "" })))
2697
+ );
2698
+ }
2699
+ );
2700
+ var getExistingReleaseTags = createAppAsyncThunk(
2701
+ `${sliceName}/getReleaseTags`,
2702
+ (_, { dispatch }) => general_api_default.get(`${import_constants4.deploymentsApiUrlV2}/releases/all/tags`).catch((err) => commonErrorHandler(err, `Existing release tags couldn't be retrieved.`, dispatch)).then(({ data: tags }) => Promise.resolve(dispatch(actions.receiveReleaseTags(tags))))
2901
2703
  );
2902
- var getUpdateTypes = (0, import_toolkit17.createAsyncThunk)(
2903
- `${sliceName7}/getReleaseTypes`,
2904
- (_, { dispatch }) => general_api_default.get(`${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))))
2704
+ var getUpdateTypes = createAppAsyncThunk(
2705
+ `${sliceName}/getReleaseTypes`,
2706
+ (_, { dispatch }) => general_api_default.get(`${import_constants4.deploymentsApiUrlV2}/releases/all/types`).catch((err) => commonErrorHandler(err, `Existing update types couldn't be retrieved.`, dispatch)).then(({ data: types }) => Promise.resolve(dispatch(actions.receiveReleaseTypes(types))))
2905
2707
  );
2906
2708
  // Annotate the CommonJS export names for ESM import in node:
2907
2709
  0 && (module.exports = {
@@ -2916,9 +2718,12 @@ var getUpdateTypes = (0, import_toolkit17.createAsyncThunk)(
2916
2718
  getUpdateTypes,
2917
2719
  removeArtifact,
2918
2720
  removeRelease,
2721
+ removeReleases,
2919
2722
  selectRelease,
2920
2723
  setReleaseTags,
2921
2724
  setReleasesListState,
2725
+ setReleasesTags,
2726
+ setSingleReleaseTags,
2922
2727
  updateReleaseInfo,
2923
2728
  uploadArtifact
2924
2729
  });