@northern.tech/store 0.3.4 → 0.5.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 (605) 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 +25 -53
  17. package/dist/appSlice/constants.cjs.map +1 -1
  18. package/dist/appSlice/constants.d.cts +100 -112
  19. package/dist/appSlice/constants.d.ts +100 -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 +37 -5
  33. package/dist/appSlice/selectors.cjs.map +1 -1
  34. package/dist/appSlice/selectors.d.cts +711 -23
  35. package/dist/appSlice/selectors.d.ts +711 -23
  36. package/dist/appSlice/selectors.js +25 -1
  37. package/dist/appSlice/thunks.cjs +1554 -1767
  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 +30 -30
  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-FQDSV3NK.js → chunk-4E7ZSEFL.js} +18 -12
  50. package/dist/chunk-4E7ZSEFL.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-DCEKU6UV.js → chunk-6XVREXI4.js} +8 -5
  54. package/dist/chunk-6XVREXI4.js.map +1 -0
  55. package/dist/chunk-7C4SQBEE.js +715 -0
  56. package/dist/chunk-7C4SQBEE.js.map +1 -0
  57. package/dist/{chunk-ZZMFXRQK.js → chunk-7PRZYHDP.js} +13 -13
  58. package/dist/{chunk-X3GZILYD.js → chunk-ABJLRDCO.js} +10 -11
  59. package/dist/chunk-ABJLRDCO.js.map +1 -0
  60. package/dist/chunk-BYUPW7RA.js +48 -0
  61. package/dist/chunk-BYUPW7RA.js.map +1 -0
  62. package/dist/{chunk-EQLHIPPR.js → chunk-DA6QVCOG.js} +924 -842
  63. package/dist/chunk-DA6QVCOG.js.map +1 -0
  64. package/dist/{chunk-MRCFLG45.js → chunk-FAJ3I2UQ.js} +2 -1
  65. package/dist/chunk-FAJ3I2UQ.js.map +1 -0
  66. package/dist/{chunk-Y575RZHR.js → chunk-HFOTAPIJ.js} +27 -50
  67. package/dist/chunk-HFOTAPIJ.js.map +1 -0
  68. package/dist/{chunk-ZWOAFHAR.js → chunk-JXQUFKID.js} +2 -2
  69. package/dist/chunk-JXQUFKID.js.map +1 -0
  70. package/dist/{chunk-K4MMUDYT.js → chunk-KC7SKI3U.js} +9 -11
  71. package/dist/chunk-KC7SKI3U.js.map +1 -0
  72. package/dist/{chunk-L3SY3J5M.js → chunk-KJNNEDRV.js} +11 -7
  73. package/dist/chunk-KJNNEDRV.js.map +1 -0
  74. package/dist/{chunk-PAIB5V27.js → chunk-MPYYSFPL.js} +55 -21
  75. package/dist/chunk-MPYYSFPL.js.map +1 -0
  76. package/dist/{chunk-FRSA2YB5.js → chunk-MZNANSS2.js} +12 -7
  77. package/dist/chunk-MZNANSS2.js.map +1 -0
  78. package/dist/{chunk-FVCYB5OP.js → chunk-NQIP7VFB.js} +30 -38
  79. package/dist/chunk-NQIP7VFB.js.map +1 -0
  80. package/dist/{chunk-NOQR3TE7.js → chunk-OOICURFL.js} +2 -2
  81. package/dist/chunk-OOICURFL.js.map +1 -0
  82. package/dist/{chunk-AVX7VVOK.js → chunk-PGFVHKP5.js} +5 -7
  83. package/dist/chunk-PGFVHKP5.js.map +1 -0
  84. package/dist/{chunk-GWJIY56H.js → chunk-QEKN5R7E.js} +40 -15
  85. package/dist/chunk-QEKN5R7E.js.map +1 -0
  86. package/dist/{chunk-NCSKCF2S.js → chunk-QHK7GGV4.js} +3 -3
  87. package/dist/chunk-QHK7GGV4.js.map +1 -0
  88. package/dist/{chunk-AUBJUUP3.js → chunk-RS37Y2PQ.js} +3 -3
  89. package/dist/chunk-RS37Y2PQ.js.map +1 -0
  90. package/dist/{chunk-7YZCUAXZ.js → chunk-UGSLGUS6.js} +8 -6
  91. package/dist/chunk-UGSLGUS6.js.map +1 -0
  92. package/dist/{chunk-RX32WLVJ.js → chunk-VANBSJS5.js} +1 -1
  93. package/dist/chunk-VANBSJS5.js.map +1 -0
  94. package/dist/{chunk-DGQKXSRI.js → chunk-VUFRP6P3.js} +5 -6
  95. package/dist/chunk-VUFRP6P3.js.map +1 -0
  96. package/dist/{chunk-EYCORLYU.js → chunk-YWHRAPDQ.js} +128 -87
  97. package/dist/chunk-YWHRAPDQ.js.map +1 -0
  98. package/dist/{chunk-JO33IORF.js → chunk-YY6SKZDF.js} +19 -4
  99. package/dist/chunk-YY6SKZDF.js.map +1 -0
  100. package/dist/chunk-ZIUUV35J.js +110 -0
  101. package/dist/chunk-ZIUUV35J.js.map +1 -0
  102. package/dist/{chunk-GAI4VYRZ.js → chunk-ZJW3QIPM.js} +8 -9
  103. package/dist/chunk-ZJW3QIPM.js.map +1 -0
  104. package/dist/chunk-ZKAH3APE.js +1 -0
  105. package/dist/chunk-ZKAH3APE.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 +13 -13
  116. package/dist/constants.cjs +357 -665
  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 +1550 -1763
  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 +30 -30
  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 +1702 -1925
  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 +36 -46
  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 +26 -26
  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 +1773 -1989
  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 +30 -30
  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 +2607 -2748
  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 +44 -30
  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 +33 -27
  280. package/dist/selectors.cjs +565 -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 +79 -39
  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 +1793 -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 +2135 -2234
  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 +56 -44
  303. package/dist/{deploymentdevicehook.cjs → useDeploymentDevice.cjs} +1760 -1975
  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 +1661 -1872
  329. package/dist/usersSlice/thunks.cjs.map +1 -1
  330. package/dist/usersSlice/thunks.d.cts +372 -312
  331. package/dist/usersSlice/thunks.d.ts +372 -312
  332. package/dist/usersSlice/thunks.js +32 -30
  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/flag-eu-5477R2P4.svg +0 -130
  600. package/dist/flag-us-HNQAF66I.svg +0 -63
  601. package/dist/types-DBj17FZO.d.cts +0 -135
  602. package/dist/types-DnfZa6xd.d.ts +0 -135
  603. /package/dist/{chunk-ZZMFXRQK.js.map → chunk-7PRZYHDP.js.map} +0 -0
  604. /package/dist/{deploymentdevicehook.d.cts → useDeploymentDevice.d.cts} +0 -0
  605. /package/dist/{deploymentdevicehook.d.ts → useDeploymentDevice.d.ts} +0 -0
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/commonSelectors.ts
@@ -49,11 +59,6 @@ var startingDeviceCount = {
49
59
  os: "for first 50 devices",
50
60
  professional: "for first 250 devices"
51
61
  };
52
- var apiRoot = "/api/management";
53
- var apiUrl = {
54
- v1: `${apiRoot}/v1`,
55
- v2: `${apiRoot}/v2`
56
- };
57
62
  var chartTypes = {
58
63
  bar: { key: "bar", Icon: import_icons_material.BarChart },
59
64
  pie: { key: "pie", Icon: import_icons_material.PieChartOutline }
@@ -65,28 +70,30 @@ var PLANS = {
65
70
  os: {
66
71
  id: "os",
67
72
  name: "Basic",
73
+ minimalDeviceCount: 50,
68
74
  offer: true,
69
- price: "$32 / month",
75
+ price: "$34 / month",
70
76
  deviceCount: startingDeviceCount.os,
71
- offerprice: "$23 / month for first 50 devices",
72
- price2: "for first 6 months;\n$29/month thereafter",
77
+ 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.",
73
78
  features: ["Access to core features of Mender", "Basic support"]
74
79
  },
75
80
  professional: {
76
81
  id: "professional",
77
82
  name: "Professional",
83
+ minimalDeviceCount: 250,
78
84
  offer: true,
79
- price: "$269 / month",
85
+ price: "$291 / month",
80
86
  deviceCount: startingDeviceCount.professional,
81
- offerprice: "$200 / month for first 50 devices",
82
- price2: "for first 6 months;\n$249/month thereafter",
87
+ description: "Everything in Basic, plus enhanced update management and automation features.",
83
88
  features: ["Advanced OTA features", "Higher priority support"]
84
89
  },
85
90
  enterprise: {
86
91
  id: "enterprise",
87
92
  name: "Enterprise",
93
+ minimalDeviceCount: 1e3,
88
94
  price: "Custom pricing",
89
95
  deviceCount: "Unlimited devices",
96
+ 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.",
90
97
  features: ["All Mender features", "Advanced security features", "SLA-backed support"]
91
98
  }
92
99
  };
@@ -106,21 +113,6 @@ var ADDONS = {
106
113
  },
107
114
  eligible: ["os", "professional", "enterprise"]
108
115
  },
109
- troubleshoot: {
110
- id: "troubleshoot",
111
- title: "Troubleshoot",
112
- description: "Expand your plan with device troubleshooting features",
113
- needs: ["hasDeviceConnect"],
114
- os: {
115
- price: "$27/month",
116
- deviceCount: startingDeviceCount.os
117
- },
118
- professional: {
119
- price: "$72/month",
120
- deviceCount: startingDeviceCount.professional
121
- },
122
- eligible: ["os", "professional", "enterprise"]
123
- },
124
116
  monitor: {
125
117
  id: "monitor",
126
118
  title: "Monitor",
@@ -135,6 +127,21 @@ var ADDONS = {
135
127
  deviceCount: startingDeviceCount.professional
136
128
  },
137
129
  eligible: ["professional", "enterprise"]
130
+ },
131
+ troubleshoot: {
132
+ id: "troubleshoot",
133
+ title: "Troubleshoot",
134
+ description: "Expand your plan with device troubleshooting features",
135
+ needs: ["hasDeviceConnect"],
136
+ os: {
137
+ price: "$27/month",
138
+ deviceCount: startingDeviceCount.os
139
+ },
140
+ professional: {
141
+ price: "$72/month",
142
+ deviceCount: startingDeviceCount.professional
143
+ },
144
+ eligible: ["os", "professional", "enterprise"]
138
145
  }
139
146
  };
140
147
  var BENEFITS = {
@@ -176,695 +183,27 @@ var DARK_MODE = "dark";
176
183
  // src/appSlice/selectors.ts
177
184
  var import_helpers = require("@northern.tech/utils/helpers");
178
185
  var import_toolkit = require("@reduxjs/toolkit");
179
- var getAppDocsVersion = (state) => state.app.docsVersion;
180
186
  var getFeatures = (state) => state.app.features;
181
187
  var getFullVersionInformation = (state) => state.app.versionInformation;
182
- var getDocsVersion = (0, import_toolkit.createSelector)([getAppDocsVersion, getFeatures], (appDocsVersion, { isHosted }) => {
183
- const docsVersion = appDocsVersion ? `${appDocsVersion}/` : "development/";
184
- return isHosted ? "" : docsVersion;
185
- });
186
188
  var getSearchState = (state) => state.app.searchState;
189
+ var getUploads = (state) => state.app.uploadsById;
190
+ var getIsUploading = (0, import_toolkit.createSelector)([getUploads], (uploadsById) => !!Object.keys(uploadsById).length);
187
191
  var getSearchedDevices = (0, import_toolkit.createSelector)([getSearchState], ({ deviceIds }) => deviceIds);
188
192
  var getVersionInformation = (0, import_toolkit.createSelector)(
189
193
  [getFullVersionInformation, getFeatures],
190
- ({ Integration, ...remainder }, { isHosted }) => isHosted && Integration !== "next" ? remainder : { ...remainder, Integration }
194
+ ({ Integration: Integration2, ...remainder }, { isHosted }) => isHosted && Integration2 !== "next" ? remainder : { ...remainder, Integration: Integration2 }
191
195
  );
192
- var getIsPreview = (0, import_toolkit.createSelector)([getFullVersionInformation], ({ Integration }) => (0, import_helpers.versionCompare)(Integration, "next") > -1);
196
+ var getIsPreview = (0, import_toolkit.createSelector)([getFullVersionInformation], ({ Integration: Integration2 }) => (0, import_helpers.versionCompare)(Integration2, "next") > -1);
193
197
 
194
198
  // src/commonConstants.tsx
195
199
  var import_js = require("@mdi/js");
196
- var import_jsx_runtime = require("react/jsx-runtime");
197
- var DEVICE_LIST_DEFAULTS = {
198
- page: 1,
199
- perPage: 20
200
- };
201
- var timeUnits = {
202
- days: "days",
203
- minutes: "minutes",
204
- hours: "hours"
205
- };
206
- var ALL_DEVICES = "All devices";
207
- var UNGROUPED_GROUP = { id: "*|=ungrouped=|*", name: "Unassigned" };
208
- var DEVICE_LIST_MAXIMUM_LENGTH = 50;
209
- var DEVICE_FILTERING_OPTIONS = {
210
- $eq: { key: "$eq", title: "equals", shortform: "=" },
211
- $ne: { key: "$ne", title: "not equal", shortform: "!=" },
212
- $gt: {
213
- key: "$gt",
214
- title: ">",
215
- shortform: ">",
216
- 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.'
217
- },
218
- $gte: {
219
- title: ">=",
220
- shortform: ">=",
221
- 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.'
222
- },
223
- $lt: {
224
- key: "$lt",
225
- title: "<",
226
- shortform: "<",
227
- 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.'
228
- },
229
- $lte: {
230
- title: "<=",
231
- shortform: "<=",
232
- 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.'
233
- },
234
- $ltne: {
235
- key: "$ltne",
236
- title: "$ltne",
237
- shortform: "ltne",
238
- 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.'
239
- },
240
- $in: {
241
- key: "$in",
242
- title: "in",
243
- shortform: "in",
244
- 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.'
245
- },
246
- $nin: {
247
- key: "$nin",
248
- title: "not in",
249
- shortform: "not in",
250
- 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.`
251
- },
252
- $exists: {
253
- key: "$exists",
254
- title: "exists",
255
- shortform: "exists",
256
- value: true,
257
- help: `The "exists" operator matches if the selected field's value has a value. No value needs to be provided for this operator.`
258
- },
259
- $nexists: {
260
- key: "$nexists",
261
- title: `doesn't exist`,
262
- shortform: `doesn't exist`,
263
- value: true,
264
- 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.`
265
- },
266
- $regex: {
267
- key: "$regex",
268
- title: `matches regular expression`,
269
- shortform: `matches`,
270
- 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.`
271
- }
272
- };
273
- var DEVICE_ISSUE_OPTIONS = {
274
- issues: {
275
- isCategory: true,
276
- key: "issues",
277
- title: "Devices with issues",
278
- filterRule: {}
279
- },
280
- offline: {
281
- issueCategory: "issues",
282
- key: "offline",
283
- needsFullFiltering: true,
284
- needsMonitor: false,
285
- needsReporting: false,
286
- filterRule: {
287
- scope: "system",
288
- key: "check_in_time",
289
- operator: DEVICE_FILTERING_OPTIONS.$ltne.key,
290
- value: ({ offlineThreshold }) => offlineThreshold
291
- },
292
- title: "Offline devices"
293
- },
294
- failedLastUpdate: {
295
- issueCategory: "issues",
296
- key: "failedLastUpdate",
297
- needsFullFiltering: false,
298
- needsMonitor: false,
299
- needsReporting: true,
300
- filterRule: { scope: "monitor", key: "failed_last_update", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: true },
301
- title: "Deployment failed"
302
- },
303
- monitoring: {
304
- issueCategory: "issues",
305
- key: "monitoring",
306
- needsFullFiltering: false,
307
- needsMonitor: true,
308
- needsReporting: false,
309
- filterRule: { scope: "monitor", key: "alerts", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: true },
310
- title: "Monitoring alert"
311
- },
312
- authRequests: {
313
- key: "authRequests",
314
- needsFullFiltering: false,
315
- needsMonitor: false,
316
- needsReporting: true,
317
- filterRule: { scope: "monitor", key: "auth_requests", operator: DEVICE_FILTERING_OPTIONS.$gt.key, value: 1 },
318
- title: "Devices with new authentication requests"
319
- },
320
- gatewayDevices: {
321
- key: "gatewayDevices",
322
- needsFullFiltering: false,
323
- needsMonitor: false,
324
- needsReporting: true,
325
- filterRule: { scope: "inventory", key: "mender_is_gateway", operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: "true" },
326
- title: "Gateway devices"
327
- }
328
- };
329
- var oneSecond = 1e3;
330
- var TIMEOUTS = {
331
- debounceDefault: 700,
332
- debounceShort: 300,
333
- halfASecond: 0.5 * oneSecond,
334
- oneSecond,
335
- twoSeconds: 2 * oneSecond,
336
- threeSeconds: 3 * oneSecond,
337
- fiveSeconds: 5 * oneSecond,
338
- refreshDefault: 10 * oneSecond,
339
- refreshLong: 60 * oneSecond
340
- };
341
- var SORTING_OPTIONS = {
342
- asc: "asc",
343
- desc: "desc"
344
- };
345
- var DEVICE_ONLINE_CUTOFF = { interval: 1, intervalName: timeUnits.days };
346
- var ATTRIBUTE_SCOPES = {
347
- inventory: "inventory",
348
- identity: "identity",
349
- monitor: "monitor",
350
- system: "system",
351
- tags: "tags"
352
- };
353
- var defaultIdAttribute = Object.freeze({ attribute: "id", scope: ATTRIBUTE_SCOPES.identity });
354
- var credentialTypes = {
355
- aws: "aws",
356
- http: "http",
357
- sas: "sas",
358
- x509: "x509"
359
- };
360
- var EXTERNAL_PROVIDER = {
361
- "iot-core": {
362
- credentialsType: credentialTypes.aws,
363
- icon: import_js.mdiAws,
364
- title: "AWS IoT Core",
365
- twinTitle: "Device Shadow",
366
- provider: "iot-core",
367
- enabled: true,
368
- deviceTwin: true,
369
- configHint: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: "For help finding your AWS IoT Core connection string, check the AWS IoT documentation." })
370
- },
371
- "iot-hub": {
372
- credentialsType: credentialTypes.sas,
373
- icon: import_js.mdiMicrosoftAzure,
374
- title: "Azure IoT Hub",
375
- twinTitle: "Device Twin",
376
- provider: "iot-hub",
377
- enabled: true,
378
- deviceTwin: true,
379
- configHint: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
380
- "For help finding your Azure IoT Hub connection string, look under 'Shared access policies' in the Microsoft Azure UI as described",
381
- " ",
382
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
383
- "a",
384
- {
385
- href: "https://devblogs.microsoft.com/iotdev/understand-different-connection-strings-in-azure-iot-hub/#iothubconn",
386
- target: "_blank",
387
- rel: "noopener noreferrer",
388
- children: "here"
389
- }
390
- ),
391
- "."
392
- ] })
393
- },
394
- webhook: {
395
- credentialsType: credentialTypes.http,
396
- deviceTwin: false,
397
- // disable the webhook provider here, since it is treated different than other integrations, with a custom configuration & management view, etc.
398
- enabled: false,
399
- provider: "webhook"
400
- }
401
- };
402
- var ALL_RELEASES = "All releases";
403
- var emptyUiPermissions = Object.freeze({
404
- auditlog: [],
405
- deployments: [],
406
- groups: Object.freeze({}),
407
- releases: Object.freeze({}),
408
- tenantManagement: [],
409
- userManagement: []
410
- });
411
- var emptyRole = Object.freeze({
412
- name: void 0,
413
- description: "",
414
- permissions: [],
415
- uiPermissions: Object.freeze({ ...emptyUiPermissions })
416
- });
417
-
418
- // src/deploymentsSlice/selectors.ts
419
- var import_toolkit2 = require("@reduxjs/toolkit");
420
-
421
- // src/devicesSlice/constants.ts
422
- var emptyFilter = { key: null, value: "", operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: "inventory" };
423
- var deviceAuthV2 = `${apiUrl.v2}/devauth`;
424
- var deviceConnect = `${apiUrl.v1}/deviceconnect`;
425
- var inventoryApiUrl = `${apiUrl.v1}/inventory`;
426
- var inventoryApiUrlV2 = `${apiUrl.v2}/inventory`;
427
- var deviceConfig = `${apiUrl.v1}/deviceconfig/configurations/device`;
428
- var reportingApiUrl = `${apiUrl.v1}/reporting`;
429
- var iotManagerBaseURL = `${apiUrl.v1}/iot-manager`;
430
- var DEVICE_STATES = {
431
- accepted: "accepted",
432
- pending: "pending",
433
- preauth: "preauthorized",
434
- rejected: "rejected"
435
- };
436
- var geoAttributes = ["geo-lat", "geo-lon"].map((attribute) => ({ attribute, scope: "inventory" }));
200
+ var import_MenderTypes = require("@northern.tech/types/MenderTypes");
437
201
 
438
- // src/onboardingSlice/constants.ts
439
- var onboardingSteps = {
440
- ONBOARDING_START: "onboarding-start",
441
- DEVICES_PENDING_ONBOARDING_START: "devices-pending-onboarding-start",
442
- DASHBOARD_ONBOARDING_START: "dashboard-onboarding-start",
443
- DASHBOARD_ONBOARDING_PENDINGS: "dashboard-onboarding-pendings",
444
- DEVICES_DELAYED_ONBOARDING: "devices-delayed-onboarding",
445
- DEVICES_PENDING_ONBOARDING: "devices-pending-onboarding",
446
- DEVICES_ACCEPTED_ONBOARDING: "devices-accepted-onboarding",
447
- DEVICES_PENDING_ACCEPTING_ONBOARDING: "devices-pending-accepting-onboarding",
448
- DEVICES_DEPLOY_RELEASE_ONBOARDING: "devices-deploy-release-onboarding",
449
- SCHEDULING_ARTIFACT_SELECTION: "scheduling-artifact-selection",
450
- SCHEDULING_ALL_DEVICES_SELECTION: "scheduling-all-devices-selection",
451
- SCHEDULING_GROUP_SELECTION: "scheduling-group-selection",
452
- SCHEDULING_RELEASE_TO_DEVICES: "scheduling-release-to-devices",
453
- DEPLOYMENTS_INPROGRESS: "deployments-inprogress",
454
- DEPLOYMENTS_PAST: "deployments-past",
455
- DEPLOYMENTS_PAST_COMPLETED: "deployments-past-completed",
456
- DEPLOYMENTS_PAST_COMPLETED_FAILURE: "deployments-past-completed-failure",
457
- ONBOARDING_CANCELED: "onboarding-canceled"
458
- };
459
- var orderedOnboardingSteps = [
460
- onboardingSteps.DASHBOARD_ONBOARDING_START,
461
- onboardingSteps.DEVICES_PENDING_ONBOARDING_START,
462
- onboardingSteps.DEVICES_DELAYED_ONBOARDING,
463
- onboardingSteps.DEVICES_PENDING_ONBOARDING,
464
- onboardingSteps.DEVICES_PENDING_ACCEPTING_ONBOARDING,
465
- onboardingSteps.DASHBOARD_ONBOARDING_PENDINGS,
466
- onboardingSteps.DEVICES_ACCEPTED_ONBOARDING,
467
- onboardingSteps.DEVICES_DEPLOY_RELEASE_ONBOARDING,
468
- onboardingSteps.SCHEDULING_ALL_DEVICES_SELECTION,
469
- onboardingSteps.SCHEDULING_GROUP_SELECTION,
470
- onboardingSteps.SCHEDULING_ARTIFACT_SELECTION,
471
- onboardingSteps.SCHEDULING_RELEASE_TO_DEVICES,
472
- onboardingSteps.DEPLOYMENTS_INPROGRESS,
473
- onboardingSteps.DEPLOYMENTS_PAST,
474
- onboardingSteps.DEPLOYMENTS_PAST_COMPLETED,
475
- onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE,
476
- onboardingSteps.ONBOARDING_CANCELED
477
- ];
478
-
479
- // src/usersSlice/constants.ts
480
- var useradmApiUrlv1 = `${apiUrl.v1}/useradm`;
481
- var useradmApiUrlv2 = `${apiUrl.v2}/useradm`;
482
- var staticRolesByName = {
483
- admin: "RBAC_ROLE_PERMIT_ALL",
484
- readOnly: "RBAC_ROLE_OBSERVER",
485
- ci: "RBAC_ROLE_CI",
486
- deploymentsManager: "RBAC_ROLE_DEPLOYMENTS_MANAGER",
487
- terminalAccess: "RBAC_ROLE_REMOTE_TERMINAL"
488
- };
489
- var PermissionTypes = {
490
- Any: "any",
491
- Get: "GET",
492
- Post: "POST",
493
- Put: "PUT",
494
- Delete: "DELETE",
495
- Patch: "PATCH",
496
- DeviceGroup: "DEVICE_GROUP",
497
- DeviceId: "DEVICE_ID"
498
- };
499
- var permissionSetIds = {
500
- Basic: "Basic",
501
- ConfigureDevices: "ConfigureDevices",
502
- ConnectToDevices: "ConnectToDevices",
503
- DeployToDevices: "DeployToDevices",
504
- ManageDevices: "ManageDevices",
505
- ManageReleases: "ManageReleases",
506
- ManageTenants: "ManageTenants",
507
- ManageUsers: "ManageUsers",
508
- ReadAuditLogs: "ReadAuditLogs",
509
- ReadDevices: "ReadDevices",
510
- ReadReleases: "ReadReleases",
511
- ReadTenants: "ReadTenants",
512
- ReadUsers: "ReadUsers",
513
- SuperUser: "SuperUser",
514
- UploadArtifacts: "UploadArtifacts"
515
- };
516
- var uiPermissionsById = {
517
- configure: {
518
- explanations: { groups: `'Configure' allows the user to use mender-configure features and apply configurations.` },
519
- permissionLevel: 2,
520
- permissionSets: { groups: permissionSetIds.ConfigureDevices },
521
- title: "Configure",
522
- value: "configure",
523
- verbs: [PermissionTypes.Get, PermissionTypes.Put, PermissionTypes.Post]
524
- },
525
- connect: {
526
- explanations: { groups: `'Connect' allows the user to use mender-connect features and Troubleshoot add-ons.` },
527
- permissionLevel: 2,
528
- permissionSets: { groups: permissionSetIds.ConnectToDevices },
529
- title: "Connect",
530
- value: "connect",
531
- verbs: [PermissionTypes.Get, PermissionTypes.Put]
532
- },
533
- deploy: {
534
- explanations: { groups: `'Deploy' allows the user to deploy software or configuration updates to devices.` },
535
- permissionLevel: 2,
536
- permissionSets: { deployments: permissionSetIds.DeployToDevices, groups: permissionSetIds.DeployToDevices },
537
- title: "Deploy",
538
- value: "deploy",
539
- verbs: [PermissionTypes.Post]
540
- },
541
- manage: {
542
- explanations: {
543
- 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.`,
544
- releases: `'Manage' allows the user to upload new artifacts, edit release descriptions and remove artifacts.`
545
- },
546
- permissionLevel: 2,
547
- permissionSets: {
548
- groups: permissionSetIds.ManageDevices,
549
- releases: permissionSetIds.ManageReleases,
550
- tenantManagement: permissionSetIds.ManageTenants,
551
- userManagement: permissionSetIds.ManageUsers
552
- },
553
- title: "Manage",
554
- value: "manage",
555
- verbs: [PermissionTypes.Post, PermissionTypes.Put, PermissionTypes.Patch]
556
- },
557
- read: {
558
- explanations: { groups: `'Read' allows the user to view devices.` },
559
- permissionLevel: 1,
560
- permissionSets: {
561
- auditlog: permissionSetIds.ReadAuditLogs,
562
- groups: permissionSetIds.ReadDevices,
563
- releases: permissionSetIds.ReadReleases,
564
- tenantManagement: permissionSetIds.ReadTenants,
565
- userManagement: permissionSetIds.ReadUsers
566
- },
567
- title: "Read",
568
- value: "read",
569
- verbs: [PermissionTypes.Get, PermissionTypes.Post]
570
- },
571
- upload: {
572
- explanations: { groups: `'Upload' allows the user to upload new Artifacts.` },
573
- unscopedOnly: { releases: true },
574
- permissionLevel: 1,
575
- permissionSets: { releases: permissionSetIds.UploadArtifacts },
576
- title: "Upload",
577
- value: "upload",
578
- verbs: [PermissionTypes.Post, PermissionTypes.Put, PermissionTypes.Patch]
579
- }
580
- };
581
- var scopedPermissionAreas = {
582
- groups: { key: "groups", excessiveAccessSelector: ALL_DEVICES, scopeType: "DeviceGroups" },
583
- releases: { key: "releases", excessiveAccessSelector: ALL_RELEASES, scopeType: "Releases" }
584
- };
585
- var uiPermissionsByArea = {
586
- auditlog: {
587
- endpoints: [{ path: /\/(auditlog)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] }],
588
- explanation: "Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.",
589
- key: "auditlog",
590
- uiPermissions: [uiPermissionsById.read],
591
- title: "System Audit Log"
592
- },
593
- deployments: {
594
- endpoints: [
595
- { path: /\/(deployments\/deployments)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.deploy] },
596
- { path: /\/(deployments\/deployments)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
597
- { path: /\/(deployments\/config)/i, types: [PermissionTypes.Get, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] }
598
- ],
599
- explanation: "Providing deploy permissions will allow deployments to be created using the releases and devices a user has access to.",
600
- key: "deployments",
601
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.deploy],
602
- title: "Deployments"
603
- },
604
- groups: {
605
- endpoints: [
606
- {
607
- path: /\/(devauth|inventory|deviceconfig|devicemonitor|deviceconnect\/devices)/i,
608
- types: [PermissionTypes.Get],
609
- uiPermissions: [uiPermissionsById.read]
610
- },
611
- { path: /\/(devauth|inventory)/i, types: [PermissionTypes.Put, PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] },
612
- { path: /\/(deviceconfig)/i, types: [PermissionTypes.Get, PermissionTypes.Put, PermissionTypes.Post], uiPermissions: [uiPermissionsById.configure] },
613
- { path: /\/(deviceconnect\/devices)/i, types: [PermissionTypes.Get, PermissionTypes.Post], uiPermissions: [uiPermissionsById.connect] }
614
- ],
615
- explanation: "Device group management permissions control the degree to which devices in a group can be accessed and moved to other groups.",
616
- key: "groups",
617
- scope: scopedPermissionAreas.groups.scopeType,
618
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.deploy, uiPermissionsById.configure, uiPermissionsById.connect],
619
- title: "Group Management"
620
- },
621
- releases: {
622
- endpoints: [
623
- { path: /\/(deployments\/artifacts|deployments\/deployments\/releases)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
624
- {
625
- path: /\/(deployments\/artifacts|deployments\/deployments\/releases)/i,
626
- types: [PermissionTypes.Post, PermissionTypes.Put],
627
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.upload]
628
- },
629
- {
630
- path: /\/(deployments\/artifacts|deployments\/deployments\/releases)/i,
631
- types: [PermissionTypes.Delete],
632
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage]
633
- }
634
- ],
635
- explanation: "Release permissions can be granted to allow artifact & release modifications, as well as the creation of new releases.",
636
- key: "releases",
637
- scope: "ReleaseTags",
638
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.upload],
639
- title: "Release Management"
640
- },
641
- tenantManagement: {
642
- endpoints: [
643
- { path: /\/(tenantadm\/tenants)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
644
- { path: /\/(tenantadm\/tenants)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] },
645
- { path: /\/(users\/exists)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.manage] }
646
- ],
647
- explanation: "Tenant management permissions allow listing, creating and modifying child tenants",
648
- key: "tenantManagement",
649
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],
650
- title: "Tenant Management"
651
- },
652
- userManagement: {
653
- endpoints: [
654
- { path: /\/(useradm)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },
655
- { path: /\/(useradm)/i, types: [PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] }
656
- ],
657
- explanation: "User management permissions should be granted carefully, as these allow privilege increases for any users managed by a user with user management permissions",
658
- key: "userManagement",
659
- uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],
660
- title: "User Management"
661
- }
662
- };
663
- var permissionMapper = (permission) => permission.value;
664
- var rolesById = Object.freeze({
665
- [staticRolesByName.admin]: {
666
- name: "Admin",
667
- value: staticRolesByName.admin,
668
- description: "Full access",
669
- permissions: [],
670
- // permissions refers to the values returned from the backend
671
- uiPermissions: {
672
- ...emptyUiPermissions,
673
- auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),
674
- deployments: uiPermissionsByArea.deployments.uiPermissions.map(permissionMapper),
675
- groups: { [ALL_DEVICES]: uiPermissionsByArea.groups.uiPermissions.map(permissionMapper) },
676
- releases: { [ALL_RELEASES]: uiPermissionsByArea.releases.uiPermissions.map(permissionMapper) },
677
- userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper)
678
- }
679
- },
680
- [staticRolesByName.readOnly]: {
681
- name: "Read Access",
682
- value: staticRolesByName.readOnly,
683
- description: "",
684
- permissions: [],
685
- uiPermissions: {
686
- ...emptyUiPermissions,
687
- deployments: [uiPermissionsById.read.value],
688
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value] },
689
- releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] },
690
- userManagement: [uiPermissionsById.read.value]
691
- }
692
- },
693
- [staticRolesByName.ci]: {
694
- name: "Releases Manager",
695
- value: staticRolesByName.ci,
696
- description: "",
697
- permissions: [],
698
- uiPermissions: {
699
- ...emptyUiPermissions,
700
- releases: { [ALL_RELEASES]: uiPermissionsByArea.releases.uiPermissions.map(permissionMapper) }
701
- }
702
- },
703
- [staticRolesByName.deploymentsManager]: {
704
- name: "Deployments Manager",
705
- value: staticRolesByName.deploymentsManager,
706
- description: "",
707
- permissions: [],
708
- uiPermissions: {
709
- ...emptyUiPermissions,
710
- deployments: uiPermissionsByArea.deployments.uiPermissions.map(permissionMapper),
711
- groups: { [ALL_DEVICES]: [uiPermissionsById.deploy.value, uiPermissionsById.read.value] },
712
- releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }
713
- }
714
- },
715
- [staticRolesByName.terminalAccess]: {
716
- name: "Troubleshooting",
717
- value: staticRolesByName.terminalAccess,
718
- description: "Access to the troubleshooting features: Remote Terminal, File Transfer, Port Forwarding",
719
- permissions: [],
720
- uiPermissions: {
721
- ...emptyUiPermissions,
722
- groups: { [ALL_DEVICES]: [uiPermissionsById.connect.value] }
723
- }
724
- }
725
- });
726
- var serviceProviderRolesById = {
727
- admin: {
728
- name: "Admin",
729
- value: staticRolesByName.admin,
730
- description: "Full access",
731
- permissions: [],
732
- uiPermissions: {
733
- ...emptyUiPermissions,
734
- auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),
735
- userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper),
736
- tenantManagement: uiPermissionsByArea.tenantManagement.uiPermissions.map(permissionMapper)
737
- }
738
- },
739
- readOnly: {
740
- name: "Read access",
741
- value: staticRolesByName.readOnly,
742
- description: "This role can see all linked organizations but cannot make any changes",
743
- permissions: [],
744
- uiPermissions: {
745
- ...emptyUiPermissions,
746
- auditlog: [uiPermissionsById.read.value],
747
- userManagement: [uiPermissionsById.read.value],
748
- tenantManagement: [uiPermissionsById.read.value]
749
- }
750
- }
751
- };
752
- var defaultPermissionSets = {
753
- [permissionSetIds.Basic]: {
754
- name: permissionSetIds.Basic,
755
- result: {
756
- // this is needed to prevent the detailed permissions of the basic permission set from being interpreted as allowing read & management access to user endpoints
757
- userManagement: [uiPermissionsById.read.value]
758
- }
759
- },
760
- [permissionSetIds.SuperUser]: {
761
- name: permissionSetIds.SuperUser,
762
- result: {
763
- ...rolesById[staticRolesByName.admin].uiPermissions
764
- }
765
- },
766
- [permissionSetIds.ManageUsers]: {
767
- name: permissionSetIds.ManageUsers,
768
- result: {
769
- userManagement: [uiPermissionsById.manage.value]
770
- }
771
- },
772
- [permissionSetIds.ReadAuditLogs]: {
773
- name: permissionSetIds.ReadAuditLogs,
774
- result: {
775
- auditlog: [uiPermissionsById.read.value]
776
- }
777
- },
778
- [permissionSetIds.ReadReleases]: {
779
- name: permissionSetIds.ReadReleases,
780
- result: {
781
- releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }
782
- }
783
- },
784
- [permissionSetIds.ReadTenants]: {
785
- name: permissionSetIds.ReadTenants,
786
- result: {
787
- tenantManagement: [uiPermissionsById.read.value]
788
- }
789
- },
790
- [permissionSetIds.ManageTenants]: {
791
- name: permissionSetIds.ManageTenants,
792
- result: {
793
- tenantManagement: [uiPermissionsById.manage.value]
794
- }
795
- },
796
- [permissionSetIds.ReadUsers]: {
797
- name: permissionSetIds.ReadUsers,
798
- result: {
799
- userManagement: [uiPermissionsById.read.value]
800
- }
801
- },
802
- [permissionSetIds.UploadArtifacts]: {
803
- name: permissionSetIds.UploadArtifacts,
804
- result: {
805
- releases: { [ALL_RELEASES]: [uiPermissionsById.upload.value] }
806
- }
807
- },
808
- [permissionSetIds.ManageReleases]: {
809
- name: permissionSetIds.ManageReleases,
810
- result: {
811
- releases: { [ALL_RELEASES]: [uiPermissionsById.manage.value] }
812
- }
813
- },
814
- [permissionSetIds.ConfigureDevices]: {
815
- name: permissionSetIds.ConfigureDevices,
816
- result: {
817
- deployments: [uiPermissionsById.read.value, uiPermissionsById.deploy.value],
818
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.configure.value] }
819
- }
820
- },
821
- [permissionSetIds.ConnectToDevices]: {
822
- name: permissionSetIds.ConnectToDevices,
823
- result: {
824
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.connect.value] }
825
- }
826
- },
827
- [permissionSetIds.DeployToDevices]: {
828
- name: permissionSetIds.DeployToDevices,
829
- result: {
830
- deployments: [uiPermissionsById.deploy.value, uiPermissionsById.manage.value, uiPermissionsById.read.value],
831
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.deploy.value] }
832
- }
833
- },
834
- [permissionSetIds.ManageDevices]: {
835
- name: permissionSetIds.ManageDevices,
836
- result: {
837
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.manage.value] }
838
- }
839
- },
840
- [permissionSetIds.ReadDevices]: {
841
- name: permissionSetIds.ReadDevices,
842
- result: {
843
- groups: { [ALL_DEVICES]: [uiPermissionsById.read.value] }
844
- }
845
- }
846
- };
847
- var rolesByName = {
848
- ...staticRolesByName,
849
- deploymentCreation: { action: "CREATE_DEPLOYMENT", object: { type: "DEVICE_GROUP", value: void 0 } },
850
- groupAccess: { action: "VIEW_DEVICE", object: { type: "DEVICE_GROUP", value: void 0 } },
851
- userManagement: { action: "http", object: { type: "any", value: `${useradmApiUrlv1}/.*` } }
852
- };
853
- var twoFAStates = {
854
- enabled: "enabled",
855
- disabled: "disabled",
856
- unverified: "unverified"
857
- };
858
- var READ_STATES = {
859
- read: "read",
860
- seen: "seen",
861
- unread: "unread"
862
- };
202
+ // src/constants.ts
203
+ var import_constants2 = require("@northern.tech/utils/constants");
863
204
 
864
205
  // src/deploymentsSlice/constants.ts
865
206
  var alreadyInstalled = "already-installed";
866
- var deploymentsApiUrl = `${apiUrl.v1}/deployments`;
867
- var deploymentsApiUrlV2 = `${apiUrl.v2}/deployments`;
868
207
  var deploymentSubstates = {
869
208
  aborted: "aborted",
870
209
  alreadyInstalled,
@@ -937,9 +276,9 @@ var DEPLOYMENT_STATES = {
937
276
  var listDefaultsByState = {
938
277
  [DEPLOYMENT_STATES.inprogress]: { page: 1, perPage: 10 },
939
278
  [DEPLOYMENT_STATES.pending]: { page: 1, perPage: 10 },
940
- [DEPLOYMENT_STATES.scheduled]: { ...DEVICE_LIST_DEFAULTS },
941
- [DEPLOYMENT_STATES.finished]: { ...DEVICE_LIST_DEFAULTS },
942
- sort: { direction: SORTING_OPTIONS.desc }
279
+ [DEPLOYMENT_STATES.scheduled]: { ...import_constants2.DEVICE_LIST_DEFAULTS },
280
+ [DEPLOYMENT_STATES.finished]: { ...import_constants2.DEVICE_LIST_DEFAULTS },
281
+ sort: { direction: import_constants2.SORTING_OPTIONS.desc }
943
282
  };
944
283
  var DEPLOYMENT_ROUTES = {
945
284
  active: {
@@ -991,7 +330,392 @@ var pauseMap = {
991
330
  }
992
331
  };
993
332
 
333
+ // src/onboardingSlice/constants.ts
334
+ var onboardingSteps = {
335
+ ONBOARDING_START: "onboarding-start",
336
+ DEVICES_PENDING_ONBOARDING_START: "devices-pending-onboarding-start",
337
+ DASHBOARD_ONBOARDING_START: "dashboard-onboarding-start",
338
+ DASHBOARD_ONBOARDING_PENDINGS: "dashboard-onboarding-pendings",
339
+ DEVICES_DELAYED_ONBOARDING: "devices-delayed-onboarding",
340
+ DEVICES_PENDING_ONBOARDING: "devices-pending-onboarding",
341
+ DEVICES_ACCEPTED_ONBOARDING: "devices-accepted-onboarding",
342
+ DEVICES_PENDING_ACCEPTING_ONBOARDING: "devices-pending-accepting-onboarding",
343
+ DEVICES_DEPLOY_RELEASE_ONBOARDING: "devices-deploy-release-onboarding",
344
+ SCHEDULING_ARTIFACT_SELECTION: "scheduling-artifact-selection",
345
+ SCHEDULING_ALL_DEVICES_SELECTION: "scheduling-all-devices-selection",
346
+ SCHEDULING_GROUP_SELECTION: "scheduling-group-selection",
347
+ SCHEDULING_RELEASE_TO_DEVICES: "scheduling-release-to-devices",
348
+ DEPLOYMENTS_INPROGRESS: "deployments-inprogress",
349
+ DEPLOYMENTS_COMPLETED: "deployments-completed",
350
+ DEPLOYMENTS_PAST: "deployments-past",
351
+ DEPLOYMENTS_PAST_COMPLETED: "deployments-past-completed",
352
+ DEPLOYMENTS_PAST_COMPLETED_FAILURE: "deployments-past-completed-failure",
353
+ ONBOARDING_CANCELED: "onboarding-canceled"
354
+ };
355
+ var orderedOnboardingSteps = [
356
+ onboardingSteps.DASHBOARD_ONBOARDING_START,
357
+ onboardingSteps.DEVICES_PENDING_ONBOARDING_START,
358
+ onboardingSteps.DEVICES_DELAYED_ONBOARDING,
359
+ onboardingSteps.DEVICES_PENDING_ONBOARDING,
360
+ onboardingSteps.DEVICES_PENDING_ACCEPTING_ONBOARDING,
361
+ onboardingSteps.DASHBOARD_ONBOARDING_PENDINGS,
362
+ onboardingSteps.DEVICES_ACCEPTED_ONBOARDING,
363
+ onboardingSteps.DEVICES_DEPLOY_RELEASE_ONBOARDING,
364
+ onboardingSteps.SCHEDULING_ALL_DEVICES_SELECTION,
365
+ onboardingSteps.SCHEDULING_GROUP_SELECTION,
366
+ onboardingSteps.SCHEDULING_ARTIFACT_SELECTION,
367
+ onboardingSteps.SCHEDULING_RELEASE_TO_DEVICES,
368
+ onboardingSteps.DEPLOYMENTS_INPROGRESS,
369
+ onboardingSteps.DEPLOYMENTS_PAST,
370
+ onboardingSteps.DEPLOYMENTS_PAST_COMPLETED,
371
+ onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE,
372
+ onboardingSteps.ONBOARDING_CANCELED
373
+ ];
374
+
375
+ // src/usersSlice/constants.ts
376
+ var READ_STATES = {
377
+ read: "read",
378
+ seen: "seen",
379
+ unread: "unread"
380
+ };
381
+
382
+ // src/commonConstants.tsx
383
+ var import_jsx_runtime = require("react/jsx-runtime");
384
+ var timeUnits = {
385
+ days: "days",
386
+ minutes: "minutes",
387
+ hours: "hours"
388
+ };
389
+ var UNGROUPED_GROUP = { id: "*|=ungrouped=|*", name: "Unassigned" };
390
+ var DEVICE_LIST_MAXIMUM_LENGTH = 50;
391
+ var oneSecond = 1e3;
392
+ var TIMEOUTS = {
393
+ debounceDefault: 700,
394
+ debounceShort: 300,
395
+ halfASecond: 0.5 * oneSecond,
396
+ oneSecond,
397
+ twoSeconds: 2 * oneSecond,
398
+ threeSeconds: 3 * oneSecond,
399
+ fiveSeconds: 5 * oneSecond,
400
+ refreshDefault: 10 * oneSecond,
401
+ refreshLong: 60 * oneSecond
402
+ };
403
+ var DEVICE_ONLINE_CUTOFF = { interval: 1, intervalName: timeUnits.days };
404
+ var defaultIdAttribute = Object.freeze({ attribute: "id", scope: import_constants2.ATTRIBUTE_SCOPES.identity });
405
+ var credentialTypes = {
406
+ aws: import_MenderTypes.Credentials.type.AWS,
407
+ http: import_MenderTypes.Credentials.type.HTTP,
408
+ sas: import_MenderTypes.Credentials.type.SAS,
409
+ x509: "x509"
410
+ };
411
+ var EXTERNAL_PROVIDER = {
412
+ "iot-core": {
413
+ credentialsType: credentialTypes.aws,
414
+ icon: import_js.mdiAws,
415
+ title: "AWS IoT Core",
416
+ twinTitle: "Device Shadow",
417
+ provider: "iot-core",
418
+ enabled: true,
419
+ deviceTwin: true,
420
+ configHint: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: "For help finding your AWS IoT Core connection string, check the AWS IoT documentation." })
421
+ },
422
+ "iot-hub": {
423
+ credentialsType: credentialTypes.sas,
424
+ icon: import_js.mdiMicrosoftAzure,
425
+ title: "Azure IoT Hub",
426
+ twinTitle: "Device Twin",
427
+ provider: "iot-hub",
428
+ enabled: true,
429
+ deviceTwin: true,
430
+ configHint: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
431
+ "For help finding your Azure IoT Hub connection string, look under 'Shared access policies' in the Microsoft Azure UI as described",
432
+ " ",
433
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
434
+ "a",
435
+ {
436
+ href: "https://devblogs.microsoft.com/iotdev/understand-different-connection-strings-in-azure-iot-hub/#iothubconn",
437
+ target: "_blank",
438
+ rel: "noopener noreferrer",
439
+ children: "here"
440
+ }
441
+ ),
442
+ "."
443
+ ] })
444
+ },
445
+ webhook: {
446
+ credentialsType: credentialTypes.http,
447
+ deviceTwin: false,
448
+ twinTitle: "",
449
+ // disable the webhook provider here, since it is treated different than other integrations, with a custom configuration & management view, etc.
450
+ enabled: false,
451
+ provider: "webhook"
452
+ }
453
+ };
454
+ var emptyWebhook = {
455
+ description: "",
456
+ provider: import_MenderTypes.Integration.provider.WEBHOOK,
457
+ credentials: {
458
+ type: EXTERNAL_PROVIDER.webhook.credentialsType,
459
+ [EXTERNAL_PROVIDER.webhook.credentialsType]: {
460
+ secret: "",
461
+ url: ""
462
+ }
463
+ }
464
+ };
465
+ var regionNames = new Intl.DisplayNames(["en"], { type: "region" });
466
+ var countries = [
467
+ "AD",
468
+ "AE",
469
+ "AF",
470
+ "AG",
471
+ "AI",
472
+ "AL",
473
+ "AM",
474
+ "AO",
475
+ "AQ",
476
+ "AR",
477
+ "AS",
478
+ "AT",
479
+ "AU",
480
+ "AW",
481
+ "AX",
482
+ "AZ",
483
+ "BA",
484
+ "BB",
485
+ "BD",
486
+ "BE",
487
+ "BF",
488
+ "BG",
489
+ "BH",
490
+ "BI",
491
+ "BJ",
492
+ "BL",
493
+ "BM",
494
+ "BN",
495
+ "BO",
496
+ "BR",
497
+ "BS",
498
+ "BT",
499
+ "BV",
500
+ "BW",
501
+ "BY",
502
+ "BZ",
503
+ "CA",
504
+ "CC",
505
+ "CD",
506
+ "CF",
507
+ "CG",
508
+ "CH",
509
+ "CI",
510
+ "CK",
511
+ "CL",
512
+ "CM",
513
+ "CN",
514
+ "CO",
515
+ "CR",
516
+ "CU",
517
+ "CV",
518
+ "CW",
519
+ "CX",
520
+ "CY",
521
+ "CZ",
522
+ "DE",
523
+ "DJ",
524
+ "DK",
525
+ "DM",
526
+ "DO",
527
+ "DZ",
528
+ "EC",
529
+ "EE",
530
+ "EG",
531
+ "EH",
532
+ "ER",
533
+ "ES",
534
+ "ET",
535
+ "FI",
536
+ "FJ",
537
+ "FK",
538
+ "FM",
539
+ "FO",
540
+ "FR",
541
+ "GA",
542
+ "GB",
543
+ "GD",
544
+ "GE",
545
+ "GF",
546
+ "GG",
547
+ "GH",
548
+ "GI",
549
+ "GL",
550
+ "GM",
551
+ "GN",
552
+ "GP",
553
+ "GQ",
554
+ "GR",
555
+ "GS",
556
+ "GT",
557
+ "GU",
558
+ "GW",
559
+ "GY",
560
+ "HK",
561
+ "HM",
562
+ "HN",
563
+ "HR",
564
+ "HT",
565
+ "HU",
566
+ "ID",
567
+ "IE",
568
+ "IL",
569
+ "IM",
570
+ "IN",
571
+ "IO",
572
+ "IQ",
573
+ "IR",
574
+ "IS",
575
+ "IT",
576
+ "JE",
577
+ "JM",
578
+ "JO",
579
+ "JP",
580
+ "KE",
581
+ "KG",
582
+ "KH",
583
+ "KI",
584
+ "KM",
585
+ "KN",
586
+ "KP",
587
+ "KR",
588
+ "KW",
589
+ "KY",
590
+ "KZ",
591
+ "LA",
592
+ "LB",
593
+ "LC",
594
+ "LI",
595
+ "LK",
596
+ "LR",
597
+ "LS",
598
+ "LT",
599
+ "LU",
600
+ "LV",
601
+ "LY",
602
+ "MA",
603
+ "MC",
604
+ "MD",
605
+ "ME",
606
+ "MF",
607
+ "MG",
608
+ "MH",
609
+ "MK",
610
+ "ML",
611
+ "MM",
612
+ "MN",
613
+ "MO",
614
+ "MP",
615
+ "MQ",
616
+ "MR",
617
+ "MS",
618
+ "MT",
619
+ "MU",
620
+ "MV",
621
+ "MW",
622
+ "MX",
623
+ "MY",
624
+ "MZ",
625
+ "NA",
626
+ "NC",
627
+ "NE",
628
+ "NF",
629
+ "NG",
630
+ "NI",
631
+ "NL",
632
+ "NO",
633
+ "NP",
634
+ "NR",
635
+ "NU",
636
+ "NZ",
637
+ "OM",
638
+ "PA",
639
+ "PE",
640
+ "PF",
641
+ "PG",
642
+ "PH",
643
+ "PK",
644
+ "PL",
645
+ "PM",
646
+ "PN",
647
+ "PR",
648
+ "PS",
649
+ "PT",
650
+ "PW",
651
+ "PY",
652
+ "QA",
653
+ "RE",
654
+ "RO",
655
+ "RS",
656
+ "RU",
657
+ "RW",
658
+ "SA",
659
+ "SB",
660
+ "SC",
661
+ "SD",
662
+ "SE",
663
+ "SG",
664
+ "SH",
665
+ "SI",
666
+ "SJ",
667
+ "SK",
668
+ "SL",
669
+ "SM",
670
+ "SN",
671
+ "SO",
672
+ "SR",
673
+ "SS",
674
+ "ST",
675
+ "SV",
676
+ "SX",
677
+ "SY",
678
+ "SZ",
679
+ "TC",
680
+ "TD",
681
+ "TF",
682
+ "TG",
683
+ "TH",
684
+ "TJ",
685
+ "TK",
686
+ "TL",
687
+ "TM",
688
+ "TN",
689
+ "TO",
690
+ "TR",
691
+ "TT",
692
+ "TV",
693
+ "TW",
694
+ "TZ",
695
+ "UA",
696
+ "UG",
697
+ "US",
698
+ "UY",
699
+ "UZ",
700
+ "VA",
701
+ "VC",
702
+ "VE",
703
+ "VG",
704
+ "VI",
705
+ "VN",
706
+ "VU",
707
+ "WF",
708
+ "WS",
709
+ "XK",
710
+ "YE",
711
+ "YT",
712
+ "ZA",
713
+ "ZM",
714
+ "ZW"
715
+ ].map((code) => ({ code, label: regionNames.of(code) })).sort((a, b) => a.label.localeCompare(b.label));
716
+
994
717
  // src/deploymentsSlice/selectors.ts
718
+ var import_toolkit2 = require("@reduxjs/toolkit");
995
719
  var getDeploymentsById = (state) => state.deployments.byId;
996
720
  var getDeploymentsByStatus = (state) => state.deployments.byStatus;
997
721
  var getSelectedDeploymentDeviceIds = (state) => state.deployments.selectedDeviceIds;
@@ -1065,7 +789,7 @@ var getDeviceIdentityAttributes = (0, import_toolkit3.createSelector)(
1065
789
  );
1066
790
  var getDeviceCountsByStatus = (0, import_toolkit3.createSelector)(
1067
791
  [getDevicesByStatus],
1068
- (byStatus) => Object.values(DEVICE_STATES).reduce((accu, state) => {
792
+ (byStatus) => Object.values(import_constants2.DEVICE_STATES).reduce((accu, state) => {
1069
793
  accu[state] = byStatus[state].total || 0;
1070
794
  return accu;
1071
795
  }, {})
@@ -1077,7 +801,7 @@ var getSelectedGroupInfo = (0, import_toolkit3.createSelector)(
1077
801
  let groupCount = acceptedDeviceTotal;
1078
802
  let groupFilters = [];
1079
803
  if (selectedGroup && groupsById[selectedGroup]) {
1080
- groupCount = groupsById[selectedGroup].total;
804
+ groupCount = groupsById[selectedGroup].total || 0;
1081
805
  groupFilters = groupsById[selectedGroup].filters || [];
1082
806
  }
1083
807
  return { groupCount, selectedGroup, groupFilters };
@@ -1088,13 +812,18 @@ var getLimitMaxed = (0, import_toolkit3.createSelector)(
1088
812
  ({ total: acceptedDevices = 0 }, deviceLimit) => Boolean(deviceLimit && deviceLimit <= acceptedDevices)
1089
813
  );
1090
814
  var getGroupsByIdWithoutUngrouped = (0, import_toolkit3.createSelector)([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);
815
+ var getGroupData = (0, import_toolkit3.createSelector)([getGroupsByIdWithoutUngrouped], (groups) => {
816
+ const createdGroup = Object.keys(groups).length ? Object.keys(groups)[0] : void 0;
817
+ const hasDynamicGroups = Object.values(groups).some((group) => !!group.id);
818
+ return { createdGroup, hasDynamicGroups, groups };
819
+ });
1091
820
  var getGroups = (0, import_toolkit3.createSelector)([getGroupsById], (groupsById) => {
1092
821
  const groupNames = Object.keys(groupsById).sort();
1093
822
  const groupedGroups = Object.entries(groupsById).sort((a, b) => a[0].localeCompare(b[0])).reduce(
1094
823
  (accu, [groupname, group]) => {
1095
824
  const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;
1096
825
  const groupItem = { ...group, groupId: name, name: groupname };
1097
- if (group.filters?.length > 0) {
826
+ if ((group.filters ?? []).length > 0) {
1098
827
  if (groupname !== UNGROUPED_GROUP.id) {
1099
828
  accu.dynamic.push(groupItem);
1100
829
  } else {
@@ -1137,12 +866,14 @@ var getOnboarding = (state) => state.onboarding;
1137
866
 
1138
867
  // src/organizationSlice/selectors.ts
1139
868
  var import_toolkit4 = require("@reduxjs/toolkit");
869
+ var import_dayjs = __toESM(require("dayjs"), 1);
870
+ var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"), 1);
1140
871
  var getOrganization = (state) => state.organization.organization;
1141
872
  var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
1142
873
  var getAuditLog = (state) => state.organization.auditlog.events;
1143
874
  var getAuditLogSelectionState = (state) => state.organization.auditlog.selectionState;
1144
875
  var getWebhookEvents = (state) => state.organization.webhooks.events;
1145
- var getWebhookEventTotal = (state) => state.organization.webhooks.eventTotal;
876
+ var getWebhookEventTotal = (state) => state.organization.webhooks.eventsTotal;
1146
877
  var getDeviceTwinIntegrations = (0, import_toolkit4.createSelector)(
1147
878
  [getExternalIntegrations],
1148
879
  (integrations) => integrations.filter((integration) => integration.id && EXTERNAL_PROVIDER[integration.provider]?.deviceTwin)
@@ -1163,30 +894,39 @@ var getAuditLogEntry = (0, import_toolkit4.createSelector)([getAuditLog, getAudi
1163
894
  const [eventAction, eventTime] = atob(selectedId).split("|");
1164
895
  return events.find((item) => item.action === eventAction && item.time === eventTime);
1165
896
  });
897
+ import_dayjs.default.extend(import_relativeTime.default);
898
+ var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
899
+ var getHasCurrentPricing = (0, import_toolkit4.createSelector)(
900
+ [getOrganization],
901
+ ({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
902
+ );
903
+
904
+ // src/releasesSlice/selectors.ts
905
+ var import_toolkit5 = require("@reduxjs/toolkit");
1166
906
 
1167
907
  // src/utils.ts
1168
908
  var import_helpers3 = require("@northern.tech/utils/helpers");
1169
909
  var filterProcessors = {
1170
- [DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
1171
- [DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
1172
- [DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
1173
- [DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
1174
- [DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
1175
- [DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1176
- [DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
1177
- [DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers3.yes,
1178
- [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
910
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$gt.key]: (val) => Number(val) || val,
911
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$gte.key]: (val) => Number(val) || val,
912
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$lt.key]: (val) => Number(val) || val,
913
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$lte.key]: (val) => Number(val) || val,
914
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$ltne.key]: (val) => Number(val) || val,
915
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$in.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
916
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$nin.key]: (val) => ("" + val).split(",").map((i) => i.trim()),
917
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$exists.key]: import_helpers3.yes,
918
+ [import_constants2.DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false
1179
919
  };
1180
920
  var filterAliases = {
1181
- $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
921
+ $nexists: { alias: import_constants2.DEVICE_FILTERING_OPTIONS.$exists.key, value: false }
1182
922
  };
1183
- var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
923
+ var listItemMapper = (byId, ids, { cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH, defaultObject = {} }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
1184
924
  if (id && byId[id]) {
1185
925
  accu.push({ ...defaultObject, ...byId[id] });
1186
926
  }
1187
927
  return accu;
1188
928
  }, []);
1189
- var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
929
+ var mergePermissions = (existingPermissions = { ...import_constants2.emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
1190
930
  (accu, [key, value]) => {
1191
931
  let values;
1192
932
  if (!accu[key]) {
@@ -1210,44 +950,49 @@ var mapUserRolesToUiPermissions = (userRoles, roles) => userRoles.reduce(
1210
950
  }
1211
951
  return mergePermissions(accu, roles[roleId].uiPermissions);
1212
952
  },
1213
- { ...emptyUiPermissions }
953
+ { ...import_constants2.emptyUiPermissions }
1214
954
  );
1215
955
  var isDarkMode = (mode) => mode === DARK_MODE;
1216
956
 
1217
957
  // src/releasesSlice/selectors.ts
1218
- var import_toolkit5 = require("@reduxjs/toolkit");
1219
958
  var getSelectedReleaseId = (state) => state.releases.selectedRelease;
1220
959
  var getReleasesById = (state) => state.releases.byId;
1221
960
  var getReleaseTags = (state) => state.releases.tags;
1222
961
  var getReleaseListState = (state) => state.releases.releasesList;
1223
962
  var getListedReleases = (state) => state.releases.releasesList.releaseIds;
1224
- var getReleaseMappingDefaults = () => ({});
963
+ var releaseDefaults = {};
964
+ var getReleaseMappingDefaults = () => releaseDefaults;
1225
965
  var getReleasesList = (0, import_toolkit5.createSelector)([getReleasesById, getListedReleases, getReleaseMappingDefaults], listItemMapper);
1226
966
  var getReleaseTagsById = (0, import_toolkit5.createSelector)([getReleaseTags], (releaseTags) => releaseTags.reduce((accu, key) => ({ ...accu, [key]: key }), {}));
1227
967
  var getHasReleases = (0, import_toolkit5.createSelector)(
1228
968
  [getReleaseListState, getReleasesById],
1229
969
  ({ searchTotal, total }, byId) => !!(Object.keys(byId).length || total || searchTotal)
1230
970
  );
1231
- var getSelectedRelease = (0, import_toolkit5.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id] ?? {});
971
+ var getSelectedRelease = (0, import_toolkit5.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
972
+ var getSelectedReleases = (0, import_toolkit5.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
1232
973
 
1233
974
  // src/usersSlice/selectors.ts
1234
975
  var import_toolkit6 = require("@reduxjs/toolkit");
976
+ var emptyObject = {};
1235
977
  var getRolesById = (state) => state.users.rolesById;
1236
978
  var getTooltipsById = (state) => state.users.tooltips.byId;
1237
979
  var getGlobalSettings = (state) => state.users.globalSettings;
1238
980
  var getCurrentUserId = (state) => state.users.currentUser;
1239
981
  var getUsersById = (state) => state.users.byId;
1240
982
  var getUsersList = (0, import_toolkit6.createSelector)([getUsersById], (usersById) => Object.values(usersById));
1241
- var getCurrentUser = (0, import_toolkit6.createSelector)([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});
983
+ var getCurrentUser = (0, import_toolkit6.createSelector)(
984
+ [getUsersById, getCurrentUserId],
985
+ (usersById, userId) => userId ? usersById[userId] ?? emptyObject : emptyObject
986
+ );
1242
987
  var getUserSettings = (state) => state.users.userSettings;
1243
988
  var getSelectedDeviceAttribute = (0, import_toolkit6.createSelector)(
1244
989
  [getUserSettings],
1245
990
  ({ columnSelection }) => columnSelection.map((attribute) => ({ attribute: attribute.key, scope: attribute.scope }))
1246
991
  );
1247
992
  var getIsDarkMode = (0, import_toolkit6.createSelector)([getUserSettings], ({ mode }) => isDarkMode(mode));
1248
- var getShowHelptips = (0, import_toolkit6.createSelector)(
993
+ var getReadAllHelptips = (0, import_toolkit6.createSelector)(
1249
994
  [getTooltipsById],
1250
- (tooltips) => Object.values(tooltips).reduce((accu, { readState }) => accu || readState === READ_STATES.unread, false)
995
+ (tooltips) => Object.values(tooltips).every(({ readState }) => readState === READ_STATES.read)
1251
996
  );
1252
997
  var getTooltipsState = (0, import_toolkit6.createSelector)(
1253
998
  [getTooltipsById, getUserSettings],
@@ -1261,7 +1006,7 @@ var getTooltipsState = (0, import_toolkit6.createSelector)(
1261
1006
  );
1262
1007
  var getHas2FA = (0, import_toolkit6.createSelector)(
1263
1008
  [getCurrentUser],
1264
- (currentUser) => currentUser.hasOwnProperty("tfa_status") && currentUser.tfa_status === twoFAStates.enabled
1009
+ (currentUser) => currentUser.hasOwnProperty("tfa_status") && currentUser.tfa_status === import_constants2.twoFAStates.enabled
1265
1010
  );
1266
1011
  var getIdAttribute = (0, import_toolkit6.createSelector)([getGlobalSettings], ({ id_attribute = { ...defaultIdAttribute } }) => id_attribute);
1267
1012
  var getOfflineThresholdSettings = (0, import_toolkit6.createSelector)([getGlobalSettings], ({ offlineThreshold }) => ({
@@ -1277,37 +1022,34 @@ var getIsEnterprise = (0, import_toolkit7.createSelector)(
1277
1022
  );
1278
1023
  var getAttrsEndpoint = (0, import_toolkit7.createSelector)(
1279
1024
  [getFeatures],
1280
- ({ hasReporting }) => hasReporting ? `${reportingApiUrl}/devices/search/attributes` : `${inventoryApiUrlV2}/filters/attributes`
1025
+ ({ hasReporting }) => hasReporting ? `${import_constants2.reportingApiUrl}/devices/search/attributes` : `${import_constants2.inventoryApiUrlV2}/filters/attributes`
1281
1026
  );
1282
1027
  var getSearchEndpoint = (0, import_toolkit7.createSelector)(
1283
1028
  [getFeatures],
1284
- ({ hasReporting }) => hasReporting ? `${reportingApiUrl}/devices/search` : `${inventoryApiUrlV2}/filters/search`
1285
- );
1286
- var getUserRoles = (0, import_toolkit7.createSelector)(
1287
- [getCurrentUser, getRolesById, getIsEnterprise, getFeatures, getOrganization],
1288
- (currentUser, rolesById2, isEnterprise, { isHosted, hasMultitenancy }, { plan = PLANS.os.id }) => {
1289
- const isAdmin = currentUser.roles?.length ? currentUser.roles.some((role) => role === rolesByName.admin) : !(hasMultitenancy || isEnterprise || isHosted && plan !== PLANS.os.id);
1290
- const uiPermissions = isAdmin ? mapUserRolesToUiPermissions([rolesByName.admin], rolesById2) : mapUserRolesToUiPermissions(currentUser.roles || [], rolesById2);
1291
- return { isAdmin, uiPermissions };
1292
- }
1029
+ ({ hasReporting }) => hasReporting ? `${import_constants2.reportingApiUrl}/devices/search` : `${import_constants2.inventoryApiUrlV2}/filters/search`
1293
1030
  );
1031
+ var getUserRoles = (0, import_toolkit7.createSelector)([getCurrentUser, getRolesById, getIsEnterprise], (currentUser, rolesById2, isEnterprise) => {
1032
+ const isAdmin = currentUser.roles?.length ? currentUser.roles.some((role) => role === import_constants2.rolesByName.admin) : !isEnterprise;
1033
+ const uiPermissions = isAdmin ? mapUserRolesToUiPermissions([import_constants2.rolesByName.admin], rolesById2) : mapUserRolesToUiPermissions(currentUser.roles || [], rolesById2);
1034
+ return { isAdmin, uiPermissions };
1035
+ });
1294
1036
  var hasPermission = (thing, permission) => Object.values(thing).some((permissions) => permissions.includes(permission));
1295
1037
  var getUserCapabilities = (0, import_toolkit7.createSelector)([getUserRoles, getIsServiceProvider], ({ uiPermissions }, isServiceProvider) => {
1296
- const canManageReleases = hasPermission(uiPermissions.releases, uiPermissionsById.manage.value);
1297
- const canReadReleases = canManageReleases || hasPermission(uiPermissions.releases, uiPermissionsById.read.value);
1298
- const canUploadReleases = canManageReleases || hasPermission(uiPermissions.releases, uiPermissionsById.upload.value);
1299
- const canAuditlog = uiPermissions.auditlog.includes(uiPermissionsById.read.value);
1300
- const canReadUsers = uiPermissions.userManagement.includes(uiPermissionsById.read.value);
1301
- const canManageUsers = uiPermissions.userManagement.includes(uiPermissionsById.manage.value);
1302
- const canReadDevices = hasPermission(uiPermissions.groups, uiPermissionsById.read.value);
1038
+ const canManageReleases = hasPermission(uiPermissions.releases, import_constants2.uiPermissionsById.manage.value);
1039
+ const canReadReleases = canManageReleases || hasPermission(uiPermissions.releases, import_constants2.uiPermissionsById.read.value);
1040
+ const canUploadReleases = canManageReleases || hasPermission(uiPermissions.releases, import_constants2.uiPermissionsById.upload.value);
1041
+ const canAuditlog = uiPermissions.auditlog.includes(import_constants2.uiPermissionsById.read.value);
1042
+ const canReadUsers = uiPermissions.userManagement.includes(import_constants2.uiPermissionsById.read.value);
1043
+ const canManageUsers = uiPermissions.userManagement.includes(import_constants2.uiPermissionsById.manage.value);
1044
+ const canReadDevices = hasPermission(uiPermissions.groups, import_constants2.uiPermissionsById.read.value);
1303
1045
  const canWriteDevices = Object.values(uiPermissions.groups).some(
1304
- (groupPermissions) => groupPermissions.includes(uiPermissionsById.read.value) && groupPermissions.length > 1
1046
+ (groupPermissions) => groupPermissions.includes(import_constants2.uiPermissionsById.read.value) && groupPermissions.length > 1
1305
1047
  );
1306
- const canTroubleshoot = hasPermission(uiPermissions.groups, uiPermissionsById.connect.value);
1307
- const canManageDevices = hasPermission(uiPermissions.groups, uiPermissionsById.manage.value);
1308
- const canConfigure = hasPermission(uiPermissions.groups, uiPermissionsById.configure.value);
1309
- const canDeploy = uiPermissions.deployments.includes(uiPermissionsById.deploy.value) || hasPermission(uiPermissions.groups, uiPermissionsById.deploy.value);
1310
- const canReadDeployments = uiPermissions.deployments.includes(uiPermissionsById.read.value);
1048
+ const canTroubleshoot = hasPermission(uiPermissions.groups, import_constants2.uiPermissionsById.connect.value);
1049
+ const canManageDevices = hasPermission(uiPermissions.groups, import_constants2.uiPermissionsById.manage.value);
1050
+ const canConfigure = hasPermission(uiPermissions.groups, import_constants2.uiPermissionsById.configure.value);
1051
+ const canDeploy = uiPermissions.deployments.includes(import_constants2.uiPermissionsById.deploy.value) || hasPermission(uiPermissions.groups, import_constants2.uiPermissionsById.deploy.value);
1052
+ const canReadDeployments = uiPermissions.deployments.includes(import_constants2.uiPermissionsById.read.value);
1311
1053
  return {
1312
1054
  canAuditlog,
1313
1055
  canConfigure,
@@ -1358,11 +1100,11 @@ var getTenantCapabilities = (0, import_toolkit7.createSelector)(
1358
1100
  var getFilterAttributes = (0, import_toolkit7.createSelector)(
1359
1101
  [getGlobalSettings, getFilteringAttributes],
1360
1102
  ({ previousFilters }, { identityAttributes, inventoryAttributes, systemAttributes, tagAttributes }) => {
1361
- const deviceNameAttribute = { key: "name", value: "Name", scope: ATTRIBUTE_SCOPES.tags, category: ATTRIBUTE_SCOPES.tags, priority: 1 };
1362
- const deviceIdAttribute = { key: "id", value: "Device ID", scope: ATTRIBUTE_SCOPES.identity, category: ATTRIBUTE_SCOPES.identity, priority: 1 };
1363
- const checkInAttribute = { key: "check_in_time", value: "Latest activity", scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 };
1103
+ const deviceNameAttribute = { key: "name", value: "Name", scope: import_constants2.ATTRIBUTE_SCOPES.tags, category: import_constants2.ATTRIBUTE_SCOPES.tags, priority: 1 };
1104
+ const deviceIdAttribute = { key: "id", value: "Device ID", scope: import_constants2.ATTRIBUTE_SCOPES.identity, category: import_constants2.ATTRIBUTE_SCOPES.identity, priority: 1 };
1105
+ const checkInAttribute = { key: "check_in_time", value: "Latest activity", scope: import_constants2.ATTRIBUTE_SCOPES.system, category: import_constants2.ATTRIBUTE_SCOPES.system, priority: 4 };
1364
1106
  const updateAttribute = { ...checkInAttribute, key: "updated_ts", value: "Last inventory update" };
1365
- const firstRequestAttribute = { key: "created_ts", value: "First request", scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 };
1107
+ const firstRequestAttribute = { key: "created_ts", value: "First request", scope: import_constants2.ATTRIBUTE_SCOPES.system, category: import_constants2.ATTRIBUTE_SCOPES.system, priority: 4 };
1366
1108
  const attributes = [
1367
1109
  ...previousFilters.map((item) => ({
1368
1110
  ...item,
@@ -1372,13 +1114,13 @@ var getFilterAttributes = (0, import_toolkit7.createSelector)(
1372
1114
  })),
1373
1115
  deviceNameAttribute,
1374
1116
  deviceIdAttribute,
1375
- ...identityAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.identity, category: ATTRIBUTE_SCOPES.identity, priority: 1 })),
1376
- ...inventoryAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.inventory, category: ATTRIBUTE_SCOPES.inventory, priority: 2 })),
1377
- ...tagAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.tags, category: ATTRIBUTE_SCOPES.tags, priority: 3 })),
1117
+ ...identityAttributes.map((item) => ({ key: item, value: item, scope: import_constants2.ATTRIBUTE_SCOPES.identity, category: import_constants2.ATTRIBUTE_SCOPES.identity, priority: 1 })),
1118
+ ...inventoryAttributes.map((item) => ({ key: item, value: item, scope: import_constants2.ATTRIBUTE_SCOPES.inventory, category: import_constants2.ATTRIBUTE_SCOPES.inventory, priority: 2 })),
1119
+ ...tagAttributes.map((item) => ({ key: item, value: item, scope: import_constants2.ATTRIBUTE_SCOPES.tags, category: import_constants2.ATTRIBUTE_SCOPES.tags, priority: 3 })),
1378
1120
  checkInAttribute,
1379
1121
  updateAttribute,
1380
1122
  firstRequestAttribute,
1381
- ...systemAttributes.map((item) => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 }))
1123
+ ...systemAttributes.map((item) => ({ key: item, value: item, scope: import_constants2.ATTRIBUTE_SCOPES.system, category: import_constants2.ATTRIBUTE_SCOPES.system, priority: 4 }))
1382
1124
  ];
1383
1125
  return (0, import_helpers4.attributeDuplicateFilter)(attributes, "key");
1384
1126
  }
@@ -1420,7 +1162,7 @@ var getSelectedDeploymentData = (0, import_toolkit7.createSelector)(
1420
1162
  );
1421
1163
  var getAvailableIssueOptionsByType = (0, import_toolkit7.createSelector)(
1422
1164
  [getFeatures, getTenantCapabilities, getIssueCountsByType],
1423
- ({ hasReporting }, { hasFullFiltering, hasMonitor }, issueCounts) => Object.values(DEVICE_ISSUE_OPTIONS).reduce((accu, { isCategory, key, needsFullFiltering, needsMonitor, needsReporting, title }) => {
1165
+ ({ hasReporting }, { hasFullFiltering, hasMonitor }, issueCounts) => Object.values(import_constants2.DEVICE_ISSUE_OPTIONS).reduce((accu, { isCategory, key, needsFullFiltering, needsMonitor, needsReporting, title }) => {
1424
1166
  if (isCategory || needsReporting && !hasReporting || needsFullFiltering && !hasFullFiltering || needsMonitor && !hasMonitor) {
1425
1167
  return accu;
1426
1168
  }
@@ -1428,14 +1170,11 @@ var getAvailableIssueOptionsByType = (0, import_toolkit7.createSelector)(
1428
1170
  return accu;
1429
1171
  }, {})
1430
1172
  );
1431
- var getGroupNames = (0, import_toolkit7.createSelector)([getGroupsById, getUserRoles, (_, options = {}) => options], (groupsById, { uiPermissions }, { staticOnly }) => {
1173
+ var getGroupNames = (0, import_toolkit7.createSelector)([getGroupsById, getUserRoles], (groupsById, { uiPermissions }) => {
1432
1174
  const { [UNGROUPED_GROUP.id]: ungrouped, ...groups } = groupsById;
1433
- if (staticOnly) {
1434
- return Object.keys(uiPermissions.groups).sort();
1435
- }
1436
1175
  return Object.keys(
1437
1176
  Object.entries(groups).reduce((accu, [groupName, group]) => {
1438
- if (group.filterId || uiPermissions.groups[ALL_DEVICES]) {
1177
+ if (group.filterId || uiPermissions.groups[import_constants2.ALL_DEVICES]) {
1439
1178
  accu[groupName] = group;
1440
1179
  }
1441
1180
  return accu;
@@ -1468,14 +1207,14 @@ var getAuditlogDevice = (0, import_toolkit7.createSelector)([getAuditLogEntry, g
1468
1207
  var getRelevantRoles = (0, import_toolkit7.createSelector)([getOrganization, getRolesList], ({ service_provider }, roles) => {
1469
1208
  if (service_provider) {
1470
1209
  return roles.reduce((accu, role) => {
1471
- if (rolesById[role.value]) {
1210
+ if (import_constants2.rolesById[role.value]) {
1472
1211
  return accu;
1473
1212
  }
1474
1213
  accu.push(role);
1475
1214
  return accu;
1476
- }, Object.values(serviceProviderRolesById));
1215
+ }, Object.values(import_constants2.serviceProviderRolesById));
1477
1216
  }
1478
- return Object.keys(rolesById).reverse().reduce((accu, key) => {
1217
+ return Object.keys(import_constants2.rolesById).reverse().reduce((accu, key) => {
1479
1218
  const index = accu.findIndex(({ value }) => value === key);
1480
1219
  accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];
1481
1220
  return accu;