@northern.tech/store 0.2.1 → 0.3.1
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.
- package/dist/actions.cjs +1812 -0
- package/dist/actions.cjs.map +1 -0
- package/dist/actions.js +18 -1860
- package/dist/actions.js.map +1 -1
- package/dist/api/general-api.cjs +336 -0
- package/dist/api/general-api.cjs.map +1 -0
- package/dist/api/general-api.js +15 -1051
- package/dist/api/general-api.js.map +1 -1
- package/dist/api/users-api.cjs +342 -0
- package/dist/api/users-api.cjs.map +1 -0
- package/dist/api/users-api.js +12 -1062
- package/dist/api/users-api.js.map +1 -1
- package/dist/appSlice/constants.cjs +207 -0
- package/dist/appSlice/constants.cjs.map +1 -0
- package/dist/appSlice/{constants.d.mts → constants.d.cts} +12 -1
- package/dist/appSlice/constants.d.ts +12 -1
- package/dist/appSlice/constants.js +39 -181
- package/dist/appSlice/constants.js.map +1 -1
- package/dist/appSlice/index.cjs +393 -0
- package/dist/appSlice/index.cjs.map +1 -0
- package/dist/appSlice/index.js +18 -1112
- package/dist/appSlice/index.js.map +1 -1
- package/dist/appSlice/selectors.cjs +58 -0
- package/dist/appSlice/selectors.cjs.map +1 -0
- package/dist/appSlice/selectors.js +17 -46
- package/dist/appSlice/selectors.js.map +1 -1
- package/dist/appSlice/thunks.cjs +4670 -0
- package/dist/appSlice/thunks.cjs.map +1 -0
- package/dist/appSlice/thunks.js +42 -5750
- package/dist/appSlice/thunks.js.map +1 -1
- package/dist/auth.cjs +320 -0
- package/dist/auth.cjs.map +1 -0
- package/dist/auth.js +20 -1031
- package/dist/auth.js.map +1 -1
- package/dist/{chunk-5VNQCCAQ.mjs → chunk-25AKG5HH.js} +5 -2
- package/dist/chunk-25AKG5HH.js.map +1 -0
- package/dist/{chunk-NJNSCJEY.mjs → chunk-2RJIDREZ.js} +21 -24
- package/dist/chunk-2RJIDREZ.js.map +1 -0
- package/dist/{chunk-QQBUNZHA.mjs → chunk-4B3IMP4I.js} +17 -12
- package/dist/{chunk-QQBUNZHA.mjs.map → chunk-4B3IMP4I.js.map} +1 -1
- package/dist/{chunk-3ORTTLIB.mjs → chunk-7PVGDMNM.js} +2 -2
- package/dist/{chunk-IFWKT27G.mjs → chunk-A6CT6GTI.js} +3 -3
- package/dist/{chunk-ZK4W5T53.mjs → chunk-AMGWP7A4.js} +2 -2
- package/dist/{chunk-KJAZNKV2.mjs → chunk-ANB5BM5J.js} +29 -29
- package/dist/{chunk-DIZJVB6M.mjs → chunk-APHL4JZP.js} +77 -433
- package/dist/chunk-APHL4JZP.js.map +1 -0
- package/dist/{chunk-G4FGNSV3.mjs → chunk-CK6YE6AN.js} +1 -1
- package/dist/{chunk-4SDUITD4.mjs → chunk-CYV6632F.js} +2 -2
- package/dist/{chunk-JA27QXVB.mjs → chunk-E5LEU5PF.js} +3 -3
- package/dist/{chunk-B42NUKMZ.mjs → chunk-FGKMJS3B.js} +1 -1
- package/dist/{chunk-WYHJFSMQ.mjs → chunk-JAROCU6M.js} +3 -3
- package/dist/{chunk-QBKCUIWO.mjs → chunk-JIS4PA3R.js} +1 -1
- package/dist/{chunk-XD7INCM4.mjs → chunk-KAQJH2YL.js} +4 -4
- package/dist/{chunk-2Z3RFYW4.mjs → chunk-LIJIIRON.js} +1 -1
- package/dist/{chunk-O6TYYKSD.mjs → chunk-MDC7Y3EX.js} +20 -70
- package/dist/chunk-MDC7Y3EX.js.map +1 -0
- package/dist/{chunk-IU4OXOPA.mjs → chunk-MRCFLG45.js} +1 -1
- package/dist/{chunk-WCUGLHYM.mjs → chunk-NI4SZOCF.js} +13 -13
- package/dist/chunk-NMAXZ3ZY.js +1 -0
- package/dist/{chunk-H5UCKQWK.mjs → chunk-NNADGHSL.js} +16 -16
- package/dist/{chunk-K2NZL5V4.mjs → chunk-Q6M5TTDQ.js} +2 -2
- package/dist/{chunk-CHUCIHMY.mjs → chunk-RX55KAKX.js} +2 -2
- package/dist/{chunk-ZE7R2XXE.mjs → chunk-UEP36GCI.js} +3 -3
- package/dist/{chunk-XC5UXEIB.mjs → chunk-VOCOFE4I.js} +2 -2
- package/dist/{chunk-R7LXL3KJ.mjs → chunk-XTRPX7JZ.js} +3 -3
- package/dist/{chunk-6CSGHZ3E.mjs → chunk-XXHONFSQ.js} +3 -3
- package/dist/{chunk-KPPU6OWF.mjs → chunk-YETZPQFR.js} +4 -19
- package/dist/chunk-YETZPQFR.js.map +1 -0
- package/dist/{chunk-KZSTW27Q.mjs → chunk-YGBFDXXA.js} +2 -2
- package/dist/{chunk-H2PQQMRY.mjs → chunk-YO22XLHI.js} +1 -1
- package/dist/{chunk-65YIOCCD.mjs → chunk-YT73QWCN.js} +3 -3
- package/dist/{chunk-AZRVRNXT.mjs → chunk-YTQUNAZP.js} +3 -3
- package/dist/commonConstants.cjs +285 -0
- package/dist/commonConstants.cjs.map +1 -0
- package/dist/{commonConstants.d.mts → commonConstants.d.cts} +3 -3
- package/dist/commonConstants.d.ts +3 -3
- package/dist/commonConstants.js +37 -268
- package/dist/commonConstants.js.map +1 -1
- package/dist/commonSelectors.cjs +1487 -0
- package/dist/commonSelectors.cjs.map +1 -0
- package/dist/commonSelectors.js +53 -1500
- package/dist/commonSelectors.js.map +1 -1
- package/dist/constants.cjs +1297 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/{constants.d.mts → constants.d.cts} +10 -10
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +220 -1189
- package/dist/constants.js.map +1 -1
- package/dist/deploymentdevicehook.cjs +4686 -0
- package/dist/deploymentdevicehook.cjs.map +1 -0
- package/dist/deploymentdevicehook.d.cts +3 -0
- package/dist/deploymentdevicehook.d.ts +3 -0
- package/dist/deploymentdevicehook.js +60 -0
- package/dist/deploymentdevicehook.js.map +1 -0
- package/dist/deploymentsSlice/constants.cjs +562 -0
- package/dist/deploymentsSlice/constants.cjs.map +1 -0
- package/dist/deploymentsSlice/constants.js +39 -1006
- package/dist/deploymentsSlice/constants.js.map +1 -1
- package/dist/deploymentsSlice/index.cjs +648 -0
- package/dist/deploymentsSlice/index.cjs.map +1 -0
- package/dist/deploymentsSlice/index.js +18 -1104
- package/dist/deploymentsSlice/index.js.map +1 -1
- package/dist/deploymentsSlice/selectors.cjs +561 -0
- package/dist/deploymentsSlice/selectors.cjs.map +1 -0
- package/dist/deploymentsSlice/selectors.js +22 -1014
- package/dist/deploymentsSlice/selectors.js.map +1 -1
- package/dist/deploymentsSlice/thunks.cjs +4686 -0
- package/dist/deploymentsSlice/thunks.cjs.map +1 -0
- package/dist/deploymentsSlice/thunks.js +60 -5757
- package/dist/deploymentsSlice/thunks.js.map +1 -1
- package/dist/devicesSlice/constants.cjs +435 -0
- package/dist/devicesSlice/constants.cjs.map +1 -0
- package/dist/devicesSlice/constants.js +37 -1007
- package/dist/devicesSlice/constants.js.map +1 -1
- package/dist/devicesSlice/index.cjs +586 -0
- package/dist/devicesSlice/index.cjs.map +1 -0
- package/dist/devicesSlice/index.js +18 -1161
- package/dist/devicesSlice/index.js.map +1 -1
- package/dist/devicesSlice/selectors.cjs +531 -0
- package/dist/devicesSlice/selectors.cjs.map +1 -0
- package/dist/devicesSlice/selectors.js +50 -1097
- package/dist/devicesSlice/selectors.js.map +1 -1
- package/dist/devicesSlice/thunks.cjs +4758 -0
- package/dist/devicesSlice/thunks.cjs.map +1 -0
- package/dist/devicesSlice/{thunks.d.mts → thunks.d.cts} +3 -3
- package/dist/devicesSlice/thunks.d.ts +3 -3
- package/dist/devicesSlice/thunks.js +132 -5793
- package/dist/devicesSlice/thunks.js.map +1 -1
- package/dist/monitorSlice/constants.cjs +165 -0
- package/dist/monitorSlice/constants.cjs.map +1 -0
- package/dist/monitorSlice/constants.js +11 -970
- package/dist/monitorSlice/constants.js.map +1 -1
- package/dist/monitorSlice/index.cjs +435 -0
- package/dist/monitorSlice/index.cjs.map +1 -0
- package/dist/monitorSlice/index.js +18 -1022
- package/dist/monitorSlice/index.js.map +1 -1
- package/dist/monitorSlice/selectors.cjs +31 -0
- package/dist/monitorSlice/selectors.cjs.map +1 -0
- package/dist/monitorSlice/selectors.js +5 -25
- package/dist/monitorSlice/selectors.js.map +1 -1
- package/dist/monitorSlice/thunks.cjs +2623 -0
- package/dist/monitorSlice/thunks.cjs.map +1 -0
- package/dist/monitorSlice/{thunks.d.mts → thunks.d.cts} +1 -1
- package/dist/monitorSlice/thunks.d.ts +1 -1
- package/dist/monitorSlice/thunks.js +41 -2624
- package/dist/monitorSlice/thunks.js.map +1 -1
- package/dist/onboardingSlice/constants.cjs +71 -0
- package/dist/onboardingSlice/constants.cjs.map +1 -0
- package/dist/onboardingSlice/constants.js +7 -64
- package/dist/onboardingSlice/constants.js.map +1 -1
- package/dist/onboardingSlice/index.cjs +80 -0
- package/dist/onboardingSlice/index.cjs.map +1 -0
- package/dist/onboardingSlice/index.js +13 -71
- package/dist/onboardingSlice/index.js.map +1 -1
- package/dist/onboardingSlice/selectors.cjs +31 -0
- package/dist/onboardingSlice/selectors.cjs.map +1 -0
- package/dist/onboardingSlice/selectors.js +5 -25
- package/dist/onboardingSlice/selectors.js.map +1 -1
- package/dist/onboardingSlice/thunks.cjs +4774 -0
- package/dist/onboardingSlice/thunks.cjs.map +1 -0
- package/dist/onboardingSlice/thunks.js +48 -5753
- package/dist/onboardingSlice/thunks.js.map +1 -1
- package/dist/organizationSlice/constants.cjs +830 -0
- package/dist/organizationSlice/constants.cjs.map +1 -0
- package/dist/organizationSlice/constants.js +33 -1014
- package/dist/organizationSlice/constants.js.map +1 -1
- package/dist/organizationSlice/index.cjs +505 -0
- package/dist/organizationSlice/index.cjs.map +1 -0
- package/dist/organizationSlice/index.js +18 -1067
- package/dist/organizationSlice/index.js.map +1 -1
- package/dist/organizationSlice/selectors.cjs +300 -0
- package/dist/organizationSlice/selectors.cjs.map +1 -0
- package/dist/organizationSlice/selectors.js +36 -1013
- package/dist/organizationSlice/selectors.js.map +1 -1
- package/dist/organizationSlice/thunks.cjs +5006 -0
- package/dist/organizationSlice/thunks.cjs.map +1 -0
- package/dist/organizationSlice/{thunks.d.mts → thunks.d.cts} +2 -2
- package/dist/organizationSlice/thunks.d.ts +2 -2
- package/dist/organizationSlice/thunks.js +98 -5776
- package/dist/organizationSlice/thunks.js.map +1 -1
- package/dist/releasesSlice/constants.cjs +40 -0
- package/dist/releasesSlice/constants.cjs.map +1 -0
- package/dist/releasesSlice/constants.js +11 -31
- package/dist/releasesSlice/constants.js.map +1 -1
- package/dist/releasesSlice/index.cjs +355 -0
- package/dist/releasesSlice/index.cjs.map +1 -0
- package/dist/releasesSlice/index.js +18 -1070
- package/dist/releasesSlice/index.js.map +1 -1
- package/dist/releasesSlice/selectors.cjs +290 -0
- package/dist/releasesSlice/selectors.cjs.map +1 -0
- package/dist/releasesSlice/selectors.js +25 -1009
- package/dist/releasesSlice/selectors.js.map +1 -1
- package/dist/releasesSlice/thunks.cjs +2896 -0
- package/dist/releasesSlice/thunks.cjs.map +1 -0
- package/dist/releasesSlice/{thunks.d.mts → thunks.d.cts} +1 -1
- package/dist/releasesSlice/thunks.d.ts +1 -1
- package/dist/releasesSlice/thunks.js +63 -2931
- package/dist/releasesSlice/thunks.js.map +1 -1
- package/dist/selectors.cjs +1641 -0
- package/dist/selectors.cjs.map +1 -0
- package/dist/{selectors.d.mts → selectors.d.cts} +9 -9
- package/dist/selectors.js +206 -1582
- package/dist/selectors.js.map +1 -1
- package/dist/store.cjs +1932 -0
- package/dist/store.cjs.map +1 -0
- package/dist/store.js +28 -1980
- package/dist/store.js.map +1 -1
- package/dist/storehooks.cjs +5565 -0
- package/dist/storehooks.cjs.map +1 -0
- package/dist/storehooks.js +122 -5802
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +5675 -0
- package/dist/thunks.cjs.map +1 -0
- package/dist/{thunks.d.mts → thunks.d.cts} +8 -8
- package/dist/thunks.js +360 -5910
- package/dist/thunks.js.map +1 -1
- package/dist/usersSlice/constants.cjs +798 -0
- package/dist/usersSlice/constants.cjs.map +1 -0
- package/dist/usersSlice/constants.js +42 -1001
- package/dist/usersSlice/constants.js.map +1 -1
- package/dist/usersSlice/index.cjs +890 -0
- package/dist/usersSlice/index.cjs.map +1 -0
- package/dist/usersSlice/index.js +18 -1107
- package/dist/usersSlice/index.js.map +1 -1
- package/dist/usersSlice/selectors.cjs +826 -0
- package/dist/usersSlice/selectors.cjs.map +1 -0
- package/dist/usersSlice/selectors.js +35 -1034
- package/dist/usersSlice/selectors.js.map +1 -1
- package/dist/usersSlice/thunks.cjs +4732 -0
- package/dist/usersSlice/thunks.cjs.map +1 -0
- package/dist/usersSlice/thunks.js +106 -5780
- package/dist/usersSlice/thunks.js.map +1 -1
- package/dist/utils.cjs +739 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/{utils.d.mts → utils.d.cts} +1 -3
- package/dist/utils.d.ts +1 -3
- package/dist/utils.js +42 -1186
- package/dist/utils.js.map +1 -1
- package/package.json +78 -52
- package/dist/actions.mjs +0 -21
- package/dist/api/general-api.mjs +0 -18
- package/dist/api/general-api.mjs.map +0 -1
- package/dist/api/users-api.mjs +0 -15
- package/dist/api/users-api.mjs.map +0 -1
- package/dist/appSlice/constants.mjs +0 -42
- package/dist/appSlice/constants.mjs.map +0 -1
- package/dist/appSlice/index.mjs +0 -21
- package/dist/appSlice/index.mjs.map +0 -1
- package/dist/appSlice/selectors.mjs +0 -20
- package/dist/appSlice/selectors.mjs.map +0 -1
- package/dist/appSlice/thunks.mjs +0 -45
- package/dist/appSlice/thunks.mjs.map +0 -1
- package/dist/auth.mjs +0 -23
- package/dist/auth.mjs.map +0 -1
- package/dist/chunk-5VNQCCAQ.mjs.map +0 -1
- package/dist/chunk-DIZJVB6M.mjs.map +0 -1
- package/dist/chunk-KPPU6OWF.mjs.map +0 -1
- package/dist/chunk-LZOMFHX3.mjs +0 -38
- package/dist/chunk-LZOMFHX3.mjs.map +0 -1
- package/dist/chunk-NJNSCJEY.mjs.map +0 -1
- package/dist/chunk-O6TYYKSD.mjs.map +0 -1
- package/dist/chunk-V32GTKOS.mjs +0 -1
- package/dist/chunk-V32GTKOS.mjs.map +0 -1
- package/dist/commonConstants.mjs +0 -40
- package/dist/commonConstants.mjs.map +0 -1
- package/dist/commonSelectors.mjs +0 -56
- package/dist/commonSelectors.mjs.map +0 -1
- package/dist/constants.mjs +0 -223
- package/dist/constants.mjs.map +0 -1
- package/dist/deploymentsSlice/constants.mjs +0 -42
- package/dist/deploymentsSlice/constants.mjs.map +0 -1
- package/dist/deploymentsSlice/index.mjs +0 -21
- package/dist/deploymentsSlice/index.mjs.map +0 -1
- package/dist/deploymentsSlice/selectors.mjs +0 -25
- package/dist/deploymentsSlice/selectors.mjs.map +0 -1
- package/dist/deploymentsSlice/thunks.mjs +0 -63
- package/dist/deploymentsSlice/thunks.mjs.map +0 -1
- package/dist/devicesSlice/constants.mjs +0 -40
- package/dist/devicesSlice/constants.mjs.map +0 -1
- package/dist/devicesSlice/index.mjs +0 -21
- package/dist/devicesSlice/index.mjs.map +0 -1
- package/dist/devicesSlice/selectors.mjs +0 -53
- package/dist/devicesSlice/selectors.mjs.map +0 -1
- package/dist/devicesSlice/thunks.mjs +0 -135
- package/dist/devicesSlice/thunks.mjs.map +0 -1
- package/dist/monitorSlice/constants.mjs +0 -14
- package/dist/monitorSlice/constants.mjs.map +0 -1
- package/dist/monitorSlice/index.mjs +0 -21
- package/dist/monitorSlice/index.mjs.map +0 -1
- package/dist/monitorSlice/selectors.mjs +0 -8
- package/dist/monitorSlice/selectors.mjs.map +0 -1
- package/dist/monitorSlice/thunks.mjs +0 -44
- package/dist/monitorSlice/thunks.mjs.map +0 -1
- package/dist/onboardingSlice/constants.mjs +0 -10
- package/dist/onboardingSlice/constants.mjs.map +0 -1
- package/dist/onboardingSlice/index.mjs +0 -16
- package/dist/onboardingSlice/index.mjs.map +0 -1
- package/dist/onboardingSlice/selectors.mjs +0 -8
- package/dist/onboardingSlice/selectors.mjs.map +0 -1
- package/dist/onboardingSlice/thunks.mjs +0 -51
- package/dist/onboardingSlice/thunks.mjs.map +0 -1
- package/dist/organizationSlice/constants.mjs +0 -36
- package/dist/organizationSlice/constants.mjs.map +0 -1
- package/dist/organizationSlice/index.mjs +0 -21
- package/dist/organizationSlice/index.mjs.map +0 -1
- package/dist/organizationSlice/selectors.mjs +0 -39
- package/dist/organizationSlice/selectors.mjs.map +0 -1
- package/dist/organizationSlice/thunks.mjs +0 -101
- package/dist/organizationSlice/thunks.mjs.map +0 -1
- package/dist/releasesSlice/constants.mjs +0 -14
- package/dist/releasesSlice/constants.mjs.map +0 -1
- package/dist/releasesSlice/index.mjs +0 -21
- package/dist/releasesSlice/index.mjs.map +0 -1
- package/dist/releasesSlice/selectors.mjs +0 -28
- package/dist/releasesSlice/selectors.mjs.map +0 -1
- package/dist/releasesSlice/thunks.mjs +0 -66
- package/dist/releasesSlice/thunks.mjs.map +0 -1
- package/dist/selectors.mjs +0 -209
- package/dist/selectors.mjs.map +0 -1
- package/dist/store.mjs +0 -32
- package/dist/store.mjs.map +0 -1
- package/dist/storehooks.mjs +0 -282
- package/dist/storehooks.mjs.map +0 -1
- package/dist/thunks.mjs +0 -363
- package/dist/thunks.mjs.map +0 -1
- package/dist/usersSlice/constants.mjs +0 -45
- package/dist/usersSlice/constants.mjs.map +0 -1
- package/dist/usersSlice/index.mjs +0 -21
- package/dist/usersSlice/index.mjs.map +0 -1
- package/dist/usersSlice/selectors.mjs +0 -38
- package/dist/usersSlice/selectors.mjs.map +0 -1
- package/dist/usersSlice/thunks.mjs +0 -109
- package/dist/usersSlice/thunks.mjs.map +0 -1
- package/dist/utils.mjs +0 -49
- package/dist/utils.mjs.map +0 -1
- /package/dist/{actions.d.mts → actions.d.cts} +0 -0
- /package/dist/api/{general-api.d.mts → general-api.d.cts} +0 -0
- /package/dist/api/{users-api.d.mts → users-api.d.cts} +0 -0
- /package/dist/appSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/appSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/appSlice/{thunks.d.mts → thunks.d.cts} +0 -0
- /package/dist/{auth.d.mts → auth.d.cts} +0 -0
- /package/dist/{chunk-3ORTTLIB.mjs.map → chunk-7PVGDMNM.js.map} +0 -0
- /package/dist/{chunk-IFWKT27G.mjs.map → chunk-A6CT6GTI.js.map} +0 -0
- /package/dist/{chunk-ZK4W5T53.mjs.map → chunk-AMGWP7A4.js.map} +0 -0
- /package/dist/{chunk-KJAZNKV2.mjs.map → chunk-ANB5BM5J.js.map} +0 -0
- /package/dist/{chunk-G4FGNSV3.mjs.map → chunk-CK6YE6AN.js.map} +0 -0
- /package/dist/{chunk-4SDUITD4.mjs.map → chunk-CYV6632F.js.map} +0 -0
- /package/dist/{chunk-JA27QXVB.mjs.map → chunk-E5LEU5PF.js.map} +0 -0
- /package/dist/{chunk-B42NUKMZ.mjs.map → chunk-FGKMJS3B.js.map} +0 -0
- /package/dist/{chunk-WYHJFSMQ.mjs.map → chunk-JAROCU6M.js.map} +0 -0
- /package/dist/{chunk-QBKCUIWO.mjs.map → chunk-JIS4PA3R.js.map} +0 -0
- /package/dist/{chunk-XD7INCM4.mjs.map → chunk-KAQJH2YL.js.map} +0 -0
- /package/dist/{chunk-2Z3RFYW4.mjs.map → chunk-LIJIIRON.js.map} +0 -0
- /package/dist/{chunk-IU4OXOPA.mjs.map → chunk-MRCFLG45.js.map} +0 -0
- /package/dist/{chunk-WCUGLHYM.mjs.map → chunk-NI4SZOCF.js.map} +0 -0
- /package/dist/{actions.mjs.map → chunk-NMAXZ3ZY.js.map} +0 -0
- /package/dist/{chunk-H5UCKQWK.mjs.map → chunk-NNADGHSL.js.map} +0 -0
- /package/dist/{chunk-K2NZL5V4.mjs.map → chunk-Q6M5TTDQ.js.map} +0 -0
- /package/dist/{chunk-CHUCIHMY.mjs.map → chunk-RX55KAKX.js.map} +0 -0
- /package/dist/{chunk-ZE7R2XXE.mjs.map → chunk-UEP36GCI.js.map} +0 -0
- /package/dist/{chunk-XC5UXEIB.mjs.map → chunk-VOCOFE4I.js.map} +0 -0
- /package/dist/{chunk-R7LXL3KJ.mjs.map → chunk-XTRPX7JZ.js.map} +0 -0
- /package/dist/{chunk-6CSGHZ3E.mjs.map → chunk-XXHONFSQ.js.map} +0 -0
- /package/dist/{chunk-KZSTW27Q.mjs.map → chunk-YGBFDXXA.js.map} +0 -0
- /package/dist/{chunk-H2PQQMRY.mjs.map → chunk-YO22XLHI.js.map} +0 -0
- /package/dist/{chunk-65YIOCCD.mjs.map → chunk-YT73QWCN.js.map} +0 -0
- /package/dist/{chunk-AZRVRNXT.mjs.map → chunk-YTQUNAZP.js.map} +0 -0
- /package/dist/{commonSelectors.d.mts → commonSelectors.d.cts} +0 -0
- /package/dist/deploymentsSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/deploymentsSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/deploymentsSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/deploymentsSlice/{thunks.d.mts → thunks.d.cts} +0 -0
- /package/dist/devicesSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/devicesSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/devicesSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/monitorSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/monitorSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/monitorSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/onboardingSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/onboardingSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/onboardingSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/onboardingSlice/{thunks.d.mts → thunks.d.cts} +0 -0
- /package/dist/organizationSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/organizationSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/organizationSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/releasesSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/releasesSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/releasesSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/{store.d.mts → store.d.cts} +0 -0
- /package/dist/{storehooks.d.mts → storehooks.d.cts} +0 -0
- /package/dist/usersSlice/{constants.d.mts → constants.d.cts} +0 -0
- /package/dist/usersSlice/{index.d.mts → index.d.cts} +0 -0
- /package/dist/usersSlice/{selectors.d.mts → selectors.d.cts} +0 -0
- /package/dist/usersSlice/{thunks.d.mts → thunks.d.cts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/appSlice/thunks.ts","../../src/api/general-api.ts","../../src/auth.ts","../../src/appSlice/constants.ts","../../src/commonConstants.tsx","../../src/deploymentsSlice/constants.ts","../../src/devicesSlice/constants.ts","../../src/monitorSlice/constants.ts","../../src/onboardingSlice/constants.ts","../../src/organizationSlice/constants.ts","../../src/releasesSlice/constants.ts","../../src/usersSlice/constants.ts","../../src/appSlice/selectors.ts","../../src/commonSelectors.ts","../../src/deploymentsSlice/selectors.ts","../../src/devicesSlice/selectors.ts","../../src/monitorSlice/selectors.ts","../../src/onboardingSlice/selectors.ts","../../src/organizationSlice/selectors.ts","../../src/utils.ts","../../src/releasesSlice/selectors.ts","../../src/usersSlice/selectors.ts","../../src/appSlice/index.ts","../../src/deploymentsSlice/index.ts","../../src/devicesSlice/index.ts","../../src/monitorSlice/index.ts","../../src/onboardingSlice/index.ts","../../src/organizationSlice/index.ts","../../src/releasesSlice/index.ts","../../src/usersSlice/index.ts","../../src/actions.ts","../../src/store.ts","../../src/deploymentsSlice/thunks.ts","../../src/devicesSlice/thunks.tsx","../../src/monitorSlice/thunks.ts","../../src/api/users-api.ts","../../src/usersSlice/thunks.ts"],"sourcesContent":["// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport GeneralApi from '@northern.tech/store/api/general-api';\nimport { getOfflineThresholdSettings } from '@northern.tech/store/selectors';\nimport { searchDevices } from '@northern.tech/store/thunks';\nimport { getComparisonCompatibleVersion } from '@northern.tech/store/utils';\nimport { deepCompare, extractErrorMessage } from '@northern.tech/utils/helpers';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport Cookies from 'universal-cookie';\n\nimport { actions, sliceName } from '.';\nimport { getFeatures, getSearchState } from './selectors';\n\nconst cookies = new Cookies();\n\n/*\n General\n*/\nexport const setFirstLoginAfterSignup = createAsyncThunk(`${sliceName}/setFirstLoginAfterSignup`, (firstLoginAfterSignup, { dispatch }) => {\n cookies.set('firstLoginAfterSignup', !!firstLoginAfterSignup, { maxAge: 60, path: '/', domain: '.mender.io', sameSite: false });\n dispatch(actions.setFirstLoginAfterSignup(!!firstLoginAfterSignup));\n});\n\nconst dateFunctionMap = {\n getDays: 'getDate',\n setDays: 'setDate'\n};\nexport const setOfflineThreshold = createAsyncThunk(`${sliceName}/setOfflineThreshold`, (_, { dispatch, getState }) => {\n const { interval, intervalUnit } = getOfflineThresholdSettings(getState());\n const today = new Date();\n const intervalName = `${intervalUnit.charAt(0).toUpperCase()}${intervalUnit.substring(1)}`;\n const setter = dateFunctionMap[`set${intervalName}`] ?? `set${intervalName}`;\n const getter = dateFunctionMap[`get${intervalName}`] ?? `get${intervalName}`;\n today[setter](today[getter]() - interval);\n let value;\n try {\n value = today.toISOString();\n } catch {\n return Promise.resolve(dispatch(actions.setSnackbar('There was an error saving the offline threshold, please check your settings.')));\n }\n return Promise.resolve(dispatch(actions.setOfflineThreshold(value)));\n});\n\nconst versionRegex = new RegExp(/\\d+\\.\\d+/);\nconst getLatestRelease = thing => {\n const latestKey = Object.keys(thing)\n .filter(key => versionRegex.test(key))\n .sort()\n .reverse()[0];\n return thing[latestKey];\n};\n\nconst repoKeyMap = {\n integration: 'Integration',\n mender: 'Mender-Client',\n 'mender-artifact': 'Mender-Artifact'\n};\n\nconst deductSaasState = (latestRelease, guiTags, saasReleases) => {\n const latestGuiTag = guiTags.length ? guiTags[0].name : '';\n const latestSaasRelease = latestGuiTag.startsWith('saas-v') ? { date: latestGuiTag.split('-v')[1].replaceAll('.', '-'), tag: latestGuiTag } : saasReleases[0];\n return latestSaasRelease.date > latestRelease.release_date ? latestSaasRelease.tag : latestRelease.release;\n};\n\nexport const getLatestReleaseInfo = createAsyncThunk(`${sliceName}/getLatestReleaseInfo`, (_, { dispatch, getState }) => {\n if (!getFeatures(getState()).isHosted) {\n return Promise.resolve();\n }\n return Promise.all([GeneralApi.get('/versions.json'), GeneralApi.get('/tags.json')])\n .catch(err => {\n console.log('init error:', extractErrorMessage(err));\n return Promise.resolve([{ data: {} }, { data: [] }]);\n })\n .then(([{ data }, { data: guiTags }]) => {\n if (!guiTags.length) {\n return Promise.resolve();\n }\n const { releases, saas } = data;\n const latestRelease = getLatestRelease(getLatestRelease(releases));\n const { latestRepos, latestVersions } = latestRelease.repos.reduce(\n (accu, item) => {\n if (repoKeyMap[item.name]) {\n accu.latestVersions[repoKeyMap[item.name]] = getComparisonCompatibleVersion(item.version);\n }\n accu.latestRepos[item.name] = getComparisonCompatibleVersion(item.version);\n return accu;\n },\n { latestVersions: { ...getState().app.versionInformation }, latestRepos: {} }\n );\n const info = deductSaasState(latestRelease, guiTags, saas);\n return Promise.resolve(\n dispatch(\n actions.setVersionInformation({\n ...latestVersions,\n backend: info,\n GUI: info,\n latestRelease: {\n releaseDate: latestRelease.release_date,\n repos: latestRepos\n }\n })\n )\n );\n });\n});\n\nexport const setSearchState = createAsyncThunk(`${sliceName}/setSearchState`, (searchState, { dispatch, getState }) => {\n const currentState = getSearchState(getState());\n let nextState = {\n ...currentState,\n ...searchState,\n sort: {\n ...currentState.sort,\n ...searchState.sort\n }\n };\n let tasks = [];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isSearching: currentSearching, deviceIds: currentDevices, searchTotal: currentTotal, ...currentRequestState } = currentState;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isSearching: nextSearching, deviceIds: nextDevices, searchTotal: nextTotal, ...nextRequestState } = nextState;\n if (nextRequestState.searchTerm && !deepCompare(currentRequestState, nextRequestState)) {\n nextState.isSearching = true;\n tasks.push(\n dispatch(searchDevices(nextState))\n .unwrap()\n .then(results => {\n const searchResult = results[results.length - 1];\n return dispatch(actions.setSearchState({ ...searchResult, isSearching: false }));\n })\n .catch(() => dispatch(actions.setSearchState({ isSearching: false, searchTotal: 0 })))\n );\n }\n tasks.push(dispatch(actions.setSearchState(nextState)));\n return Promise.all(tasks);\n});\n","// Copyright 2017 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport axios, { isCancel } from 'axios';\n\nimport { cleanUp, getToken } from '../auth';\nimport { TIMEOUTS } from '../constants';\n\nconst unauthorizedRedirect = error => {\n if (!isCancel(error) && error.response?.status === 401 && getToken()) {\n cleanUp();\n window.location.replace('/ui/');\n }\n return Promise.reject(error);\n};\n\nexport const commonRequestConfig = { timeout: TIMEOUTS.refreshDefault, headers: { 'Content-Type': 'application/json' } };\n\nexport const authenticatedRequest = axios.create(commonRequestConfig);\nauthenticatedRequest.interceptors.response.use(res => res, unauthorizedRedirect);\nauthenticatedRequest.interceptors.request.use(\n config => ({ ...config, headers: { ...config.headers, Authorization: `Bearer ${getToken()}` } }),\n error => Promise.reject(error)\n);\n\nconst Api = {\n get: authenticatedRequest.get,\n delete: (url, data) => authenticatedRequest.request({ method: 'delete', url, data }),\n patch: authenticatedRequest.patch,\n post: authenticatedRequest.post,\n postUnauthorized: (url, data, config = {}) => axios.post(url, data, { ...commonRequestConfig, ...config }),\n put: authenticatedRequest.put,\n upload: (url, formData, progress, cancelSignal) =>\n authenticatedRequest.post(url, formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: progress,\n timeout: 0,\n signal: cancelSignal\n }),\n uploadPut: (url, formData, progress, cancelSignal) =>\n authenticatedRequest.put(url, formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: progress,\n timeout: 0,\n signal: cancelSignal\n })\n};\n\nexport default Api;\n","// Copyright 2016 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport Cookies from 'universal-cookie';\n\nimport { TIMEOUTS } from './constants';\n\nconst cookies = new Cookies();\n\nconst emptySession = Object.freeze({ token: '', exiresAt: undefined });\n\nlet tokenCache = '';\n\nexport const getSessionInfo = () => {\n let sessionInfo = { ...emptySession };\n try {\n sessionInfo = JSON.parse(window.localStorage.getItem('JWT') ?? '');\n } catch {\n // most likely not logged in - nothing to do here\n }\n if (sessionInfo.expiresAt && new Date(sessionInfo.expiresAt) < new Date()) {\n cleanUp();\n return { ...emptySession };\n }\n if (!sessionInfo.token) {\n let jwtTokenFromCookie = cookies.get('JWT', { doNotParse: true }) ?? '';\n if (jwtTokenFromCookie) {\n setSessionInfo({ token: jwtTokenFromCookie, undefined });\n sessionInfo.token = jwtTokenFromCookie;\n cookies.remove('JWT');\n cookies.remove('JWT', { path: '/' });\n }\n }\n sessionInfo.token = sessionInfo.token || undefined;\n tokenCache = sessionInfo.token;\n return sessionInfo;\n};\n\nexport const getToken = () => (tokenCache ? tokenCache : getSessionInfo().token);\n\nexport const setSessionInfo = ({ token, expiresAt }) => {\n tokenCache = token;\n window.localStorage.setItem('JWT', JSON.stringify({ token, expiresAt }));\n};\n\nexport const cleanUp = () => {\n tokenCache = '';\n cookies.remove('JWT');\n cookies.remove('JWT', { path: '/' });\n window.localStorage.removeItem('JWT');\n window.localStorage.removeItem('oauth');\n};\n\nexport const maxSessionAge = 900;\n\nexport const updateMaxAge = ({ expiresAt, token }) => {\n const oAuthExpiration = Number(window.localStorage.getItem('oauth'));\n let updateWithOAuth = false;\n if (oAuthExpiration) {\n const soon = Date.now() + maxSessionAge * TIMEOUTS.oneSecond;\n updateWithOAuth = oAuthExpiration <= soon;\n if (updateWithOAuth) {\n window.localStorage.removeItem('oauth');\n }\n }\n if (token && expiresAt && (!oAuthExpiration || updateWithOAuth)) {\n const expiration = new Date();\n expiration.setSeconds(expiration.getSeconds() + maxSessionAge);\n setSessionInfo({ token, expiresAt: expiration.toISOString() });\n }\n};\n","// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { BarChart as BarChartIcon, PieChartOutline as PieChartIcon } from '@mui/icons-material';\n\nconst startingDeviceCount = {\n os: 'for first 50 devices',\n professional: 'for first 250 devices'\n};\n\nexport const apiRoot = '/api/management';\nexport const apiUrl = {\n v1: `${apiRoot}/v1`,\n v2: `${apiRoot}/v2`\n};\n\nexport const headerNames = {\n link: 'link',\n location: 'location',\n total: 'x-total-count'\n};\n\nexport const chartTypes = {\n bar: { key: 'bar', Icon: BarChartIcon },\n pie: { key: 'pie', Icon: PieChartIcon }\n};\nexport const emptyChartSelection = { software: '', group: '', chartType: chartTypes.bar.key, attribute: 'artifact_name' };\nexport const defaultReportType = 'distribution';\nexport const defaultReports = [{ ...emptyChartSelection, group: null, attribute: 'artifact_name', type: defaultReportType }];\n\nexport const BEGINNING_OF_TIME = '2016-01-01T00:00:00.000Z';\n\nexport const locations = {\n eu: { key: 'eu', title: 'EU', location: 'eu.hosted.mender.io' },\n us: { key: 'us', title: 'US', location: 'hosted.mender.io' }\n};\n\nexport const PLANS = {\n os: {\n id: 'os',\n name: 'Basic',\n offer: true,\n price: '$32/month',\n deviceCount: startingDeviceCount.os,\n offerprice: '$23/month for first 50 devices',\n price2: 'for first 6 months;\\n$29/month thereafter',\n features: ['Basic OTA features']\n },\n professional: {\n id: 'professional',\n name: 'Professional',\n offer: true,\n price: '$269/month',\n deviceCount: startingDeviceCount.professional,\n offerprice: '$200/month for first 50 devices',\n price2: 'for first 6 months;\\n$249/month thereafter',\n features: ['+ Advanced OTA features', '+ Standard support']\n },\n enterprise: {\n id: 'enterprise',\n name: 'Enterprise',\n price: 'Custom pricing',\n deviceCount: 'unlimited devices',\n features: ['+ Enterprise-grade OTA features', '+ Premium support']\n }\n};\n// the needs names need to be aligned with the name of the features in the appReducer, as they will be checked in the addonselection\nexport const ADDONS = {\n configure: {\n id: 'configure',\n title: 'Configure',\n description: 'Expand your plan with device configuration features',\n needs: ['hasDeviceConfig'],\n os: {\n price: '$11/month',\n deviceCount: startingDeviceCount.os\n },\n professional: {\n price: '$65/month',\n deviceCount: startingDeviceCount.professional\n },\n eligible: ['os', 'professional', 'enterprise']\n },\n troubleshoot: {\n id: 'troubleshoot',\n title: 'Troubleshoot',\n description: 'Expand your plan with device troubleshooting features',\n needs: ['hasDeviceConnect'],\n os: {\n price: '$27/month',\n deviceCount: startingDeviceCount.os\n },\n professional: {\n price: '$72/month',\n deviceCount: startingDeviceCount.professional\n },\n eligible: ['os', 'professional', 'enterprise']\n },\n monitor: {\n id: 'monitor',\n title: 'Monitor',\n description: 'Expand your plan with device monitoring features',\n needs: ['hasMonitor'],\n os: {\n price: '-',\n deviceCount: '-'\n },\n professional: {\n price: '$86/month',\n deviceCount: startingDeviceCount.professional\n },\n eligible: ['professional', 'enterprise']\n }\n};\n\nexport const BENEFITS = {\n auditlog: { id: 'auditlog', benefit: 'trace change across your devices and access troubleshooting session replay', requiredPlan: PLANS.professional.id },\n dashboard: { id: 'dashboard', benefit: 'actionable insights into the devices you are updating with Mender', requiredPlan: PLANS.enterprise.id },\n deltaGeneration: {\n id: 'deltaGeneration',\n benefit: 'automatic delta artifacts generation to minimize data transfer and improve the update delivery',\n requiredPlan: PLANS.enterprise.id\n },\n deviceConfiguration: { id: 'deviceConfiguration', benefit: 'device configuration features', requiredAddon: ADDONS.configure.id },\n deviceMonitor: { id: 'deviceMonitor', benefit: 'device monitoring features', requiredAddon: ADDONS.monitor.id, requiredPlan: PLANS.professional.id },\n deviceTroubleshoot: { id: 'deviceTroubleshoot', benefit: 'device troubleshooting features', requiredAddon: ADDONS.troubleshoot.id },\n dynamicGroups: { id: 'dynamicGroups', benefit: 'create dynamic groups to ease device management', requiredPlan: PLANS.enterprise.id },\n fullFiltering: { id: 'fullFiltering', benefit: 'filtering by multiple attributes to improve the device overview', requiredPlan: PLANS.professional.id },\n gateway: { id: 'gateway', benefit: 'see devices connected to your gateway device for easy access', requiredPlans: PLANS.professional.id },\n pausedDeployments: {\n id: 'pausedDeployments',\n benefit: 'granular control about update rollout to allow synchronization across your fleet',\n requiredPlan: PLANS.enterprise.id\n },\n phasedDeployments: { id: 'phasedDeployments', benefit: 'choose to roll out deployments in multiple phases', requiredPlan: PLANS.enterprise.id },\n rbac: { id: 'rbac', benefit: 'granular role based access control', requiredPlan: PLANS.enterprise.id },\n retryDeployments: { id: 'retryDeployments', benefit: 'optional retries for failed rollout attempts', requiredPlan: PLANS.professional.id },\n scheduledDeployments: {\n id: 'scheduledDeployments',\n benefit: 'scheduled deployments to steer the distribution of your updates.',\n requiredPlan: PLANS.professional.id\n },\n webhookEvents: {\n id: 'webhookEvents',\n benefit: 'receive inventory events and select which type(s) of events the webhook will receive',\n requiredPlan: PLANS.professional.id\n },\n\n default: { id: 'default', benefit: 'gain access to this feature', requiredPlan: PLANS.enterprise.id }\n};\n\nexport const yes = () => true;\nexport const canAccess = yes;\n\nexport const DARK_MODE = 'dark';\nexport const LIGHT_MODE = 'light';\n\nexport const APPLICATION_JSON_CONTENT_TYPE = 'application/json';\nexport const APPLICATION_JWT_CONTENT_TYPE = 'application/jwt';\n","// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport React from 'react';\n\nimport { mdiAws as AWS, mdiMicrosoftAzure as Azure } from '@mdi/js';\n\nexport const DEVICE_LIST_DEFAULTS = {\n page: 1,\n perPage: 20\n};\n\nexport const timeUnits = {\n days: 'days',\n minutes: 'minutes',\n hours: 'hours'\n};\n\nexport const ALL_DEVICES = 'All devices';\nexport const UNGROUPED_GROUP = { id: '*|=ungrouped=|*', name: 'Unassigned' };\n\nexport const DEVICE_LIST_MAXIMUM_LENGTH = 50;\n\nexport const DEVICE_FILTERING_OPTIONS = {\n $eq: { key: '$eq', title: 'equals', shortform: '=' },\n $ne: { key: '$ne', title: 'not equal', shortform: '!=' },\n $gt: {\n key: '$gt',\n title: '>',\n shortform: '>',\n 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.'\n },\n $gte: {\n title: '>=',\n shortform: '>=',\n 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.'\n },\n $lt: {\n key: '$lt',\n title: '<',\n shortform: '<',\n 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.'\n },\n $lte: {\n title: '<=',\n shortform: '<=',\n 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.'\n },\n $ltne: {\n key: '$ltne',\n title: '$ltne',\n shortform: 'ltne',\n 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.'\n },\n $in: {\n key: '$in',\n title: 'in',\n shortform: 'in',\n 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.'\n },\n $nin: {\n key: '$nin',\n title: 'not in',\n shortform: 'not in',\n 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.`\n },\n $exists: {\n key: '$exists',\n title: 'exists',\n shortform: 'exists',\n value: true,\n help: `The \"exists\" operator matches if the selected field's value has a value. No value needs to be provided for this operator.`\n },\n $nexists: {\n key: '$nexists',\n title: `doesn't exist`,\n shortform: `doesn't exist`,\n value: true,\n 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.`\n },\n $regex: {\n key: '$regex',\n title: `matches regular expression`,\n shortform: `matches`,\n 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.`\n }\n};\n\nexport const DEVICE_ISSUE_OPTIONS = {\n issues: {\n isCategory: true,\n key: 'issues',\n title: 'Devices with issues',\n filterRule: {}\n },\n offline: {\n issueCategory: 'issues',\n key: 'offline',\n needsFullFiltering: true,\n needsMonitor: false,\n needsReporting: false,\n filterRule: {\n scope: 'system',\n key: 'check_in_time',\n operator: DEVICE_FILTERING_OPTIONS.$ltne.key,\n value: ({ offlineThreshold }) => offlineThreshold\n },\n title: 'Offline devices'\n },\n failedLastUpdate: {\n issueCategory: 'issues',\n key: 'failedLastUpdate',\n needsFullFiltering: false,\n needsMonitor: false,\n needsReporting: true,\n filterRule: { scope: 'monitor', key: 'failed_last_update', operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: true },\n title: 'Deployment failed'\n },\n monitoring: {\n issueCategory: 'issues',\n key: 'monitoring',\n needsFullFiltering: false,\n needsMonitor: true,\n needsReporting: false,\n filterRule: { scope: 'monitor', key: 'alerts', operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: true },\n title: 'Monitoring alert'\n },\n authRequests: {\n key: 'authRequests',\n needsFullFiltering: false,\n needsMonitor: false,\n needsReporting: true,\n filterRule: { scope: 'monitor', key: 'auth_requests', operator: DEVICE_FILTERING_OPTIONS.$gt.key, value: 1 },\n title: 'Devices with new authentication requests'\n },\n gatewayDevices: {\n key: 'gatewayDevices',\n needsFullFiltering: false,\n needsMonitor: false,\n needsReporting: true,\n filterRule: { scope: 'inventory', key: 'mender_is_gateway', operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: 'true' },\n title: 'Gateway devices'\n }\n};\nconst oneSecond = 1000;\nexport const TIMEOUTS = {\n debounceDefault: 700,\n debounceShort: 300,\n halfASecond: 0.5 * oneSecond,\n oneSecond,\n twoSeconds: 2 * oneSecond,\n threeSeconds: 3 * oneSecond,\n fiveSeconds: 5 * oneSecond,\n refreshDefault: 10 * oneSecond,\n refreshLong: 60 * oneSecond\n};\n\nexport const SORTING_OPTIONS = {\n asc: 'asc',\n desc: 'desc'\n};\n\nexport const DEVICE_ONLINE_CUTOFF = { interval: 1, intervalName: timeUnits.days };\n\nexport const ATTRIBUTE_SCOPES = {\n inventory: 'inventory',\n identity: 'identity',\n monitor: 'monitor',\n system: 'system',\n tags: 'tags'\n};\n\nexport const defaultIdAttribute = Object.freeze({ attribute: 'id', scope: ATTRIBUTE_SCOPES.identity });\n\nconst credentialTypes = {\n aws: 'aws',\n http: 'http',\n sas: 'sas',\n x509: 'x509'\n};\nexport const EXTERNAL_PROVIDER = {\n 'iot-core': {\n credentialsType: credentialTypes.aws,\n icon: AWS,\n title: 'AWS IoT Core',\n twinTitle: 'Device Shadow',\n provider: 'iot-core',\n enabled: true,\n deviceTwin: true,\n configHint: <>For help finding your AWS IoT Core connection string, check the AWS IoT documentation.</>\n },\n 'iot-hub': {\n credentialsType: credentialTypes.sas,\n icon: Azure,\n title: 'Azure IoT Hub',\n twinTitle: 'Device Twin',\n provider: 'iot-hub',\n enabled: true,\n deviceTwin: true,\n configHint: (\n <span>\n For help finding your Azure IoT Hub connection string, look under 'Shared access policies' in the Microsoft Azure UI as described{' '}\n {\n <a\n href=\"https://devblogs.microsoft.com/iotdev/understand-different-connection-strings-in-azure-iot-hub/#iothubconn\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n here\n </a>\n }\n .\n </span>\n )\n },\n webhook: {\n credentialsType: credentialTypes.http,\n deviceTwin: false,\n // disable the webhook provider here, since it is treated different than other integrations, with a custom configuration & management view, etc.\n enabled: false,\n provider: 'webhook'\n }\n};\nexport const MAX_PAGE_SIZE = 500;\n\nexport const ALL_RELEASES = 'All releases';\n\nexport type UiPermissionsDefinition = Readonly<{\n auditlog: string[];\n deployments?: string[]; // deployments are so far only covered indirectly through releases + device group permissions\n groups: Record<string, string[]>;\n releases: Record<string, string[]>;\n tenantManagement: string[];\n userManagement: string[];\n}>;\n\nexport type UiRoleDefinition = {\n name: string;\n description: string;\n editable?: boolean;\n isCustom?: boolean;\n permissions?: object[];\n uiPermissions: UiPermissionsDefinition;\n};\n\nexport const emptyUiPermissions: UiPermissionsDefinition = Object.freeze({\n auditlog: [],\n deployments: [],\n groups: Object.freeze({}),\n releases: Object.freeze({}),\n tenantManagement: [],\n userManagement: []\n});\n\nexport const emptyRole: UiRoleDefinition = Object.freeze({\n name: undefined,\n description: '',\n permissions: [],\n uiPermissions: Object.freeze({ ...emptyUiPermissions })\n});\n","// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { DEVICE_LIST_DEFAULTS, SORTING_OPTIONS, apiUrl } from '@northern.tech/store/constants';\n\nconst alreadyInstalled = 'already-installed';\n\nexport const deploymentsApiUrl = `${apiUrl.v1}/deployments`;\nexport const deploymentsApiUrlV2 = `${apiUrl.v2}/deployments`;\n\nexport const deploymentSubstates = {\n aborted: 'aborted',\n alreadyInstalled,\n decommissioned: 'decommissioned',\n downloading: 'downloading',\n failure: 'failure',\n installing: 'installing',\n noartifact: 'noartifact',\n pause_before_committing: 'pause_before_committing',\n pause_before_installing: 'pause_before_installing',\n pause_before_rebooting: 'pause_before_rebooting',\n pending: 'pending',\n rebooting: 'rebooting',\n success: 'success'\n};\n\nexport const deploymentStatesToSubstates = {\n failures: [deploymentSubstates.failure, deploymentSubstates.aborted, deploymentSubstates.decommissioned],\n inprogress: [deploymentSubstates.downloading, deploymentSubstates.installing, deploymentSubstates.rebooting],\n paused: [deploymentSubstates.pause_before_installing, deploymentSubstates.pause_before_rebooting, deploymentSubstates.pause_before_committing],\n pending: [deploymentSubstates.pending],\n successes: [deploymentSubstates.success, deploymentSubstates.alreadyInstalled, deploymentSubstates.noartifact]\n};\n\nexport const deploymentStatesToSubstatesWithSkipped = {\n ...deploymentStatesToSubstates,\n failures: [deploymentSubstates.failure],\n skipped: [deploymentSubstates.aborted, deploymentSubstates.noartifact, deploymentSubstates.alreadyInstalled, deploymentSubstates.decommissioned],\n successes: [deploymentSubstates.success]\n};\nexport const installationSubstatesMap = {\n download: {\n title: 'download',\n done: 'downloaded',\n successIndicators: [deploymentSubstates.installing, deploymentSubstates.rebooting, ...deploymentStatesToSubstates.paused, deploymentSubstates.success],\n failureIndicators: deploymentStatesToSubstates.failures,\n pauseConfigurationIndicator: 'ArtifactInstall_Enter'\n },\n install: {\n title: 'install',\n done: 'installed',\n successIndicators: [\n deploymentSubstates.rebooting,\n deploymentSubstates.pause_before_rebooting,\n deploymentSubstates.pause_before_committing,\n deploymentSubstates.success\n ],\n failureIndicators: deploymentStatesToSubstates.failures,\n pauseConfigurationIndicator: 'ArtifactReboot_Enter'\n },\n reboot: {\n title: 'reboot',\n done: 'rebooted',\n successIndicators: [deploymentSubstates.pause_before_committing, deploymentSubstates.success],\n failureIndicators: deploymentStatesToSubstates.failures,\n pauseConfigurationIndicator: 'ArtifactCommit_Enter'\n },\n commit: {\n title: 'commit',\n done: 'committed',\n successIndicators: deploymentStatesToSubstates.successes,\n failureIndicators: deploymentStatesToSubstates.failures,\n pauseConfigurationIndicator: undefined\n }\n};\n\nexport const DEPLOYMENT_STATES = {\n finished: 'finished',\n inprogress: 'inprogress',\n pending: 'pending',\n scheduled: 'scheduled'\n};\n\nexport const listDefaultsByState = {\n [DEPLOYMENT_STATES.inprogress]: { page: 1, perPage: 10 },\n [DEPLOYMENT_STATES.pending]: { page: 1, perPage: 10 },\n [DEPLOYMENT_STATES.scheduled]: { ...DEVICE_LIST_DEFAULTS },\n [DEPLOYMENT_STATES.finished]: { ...DEVICE_LIST_DEFAULTS },\n sort: { direction: SORTING_OPTIONS.desc }\n};\n\nexport const DEFAULT_PENDING_INPROGRESS_COUNT = 10;\nexport const DEPLOYMENT_ROUTES = {\n active: {\n key: 'active',\n route: '/deployments/active',\n states: [DEPLOYMENT_STATES.pending, DEPLOYMENT_STATES.inprogress],\n title: 'Active'\n },\n finished: {\n key: 'finished',\n route: '/deployments/finished',\n states: [DEPLOYMENT_STATES.finished],\n title: 'Finished'\n },\n scheduled: {\n key: 'scheduled',\n route: '/deployments/scheduled',\n states: [DEPLOYMENT_STATES.scheduled],\n title: 'Scheduled'\n }\n};\nexport const DEPLOYMENT_TYPES = {\n software: 'software',\n configuration: 'configuration'\n};\nexport const defaultStats = {\n [deploymentSubstates.aborted]: 0,\n [deploymentSubstates.alreadyInstalled]: 0,\n [deploymentSubstates.decommissioned]: 0,\n [deploymentSubstates.downloading]: 0,\n [deploymentSubstates.failure]: 0,\n [deploymentSubstates.installing]: 0,\n [deploymentSubstates.noartifact]: 0,\n [deploymentSubstates.pause_before_committing]: 0,\n [deploymentSubstates.pause_before_installing]: 0,\n [deploymentSubstates.pause_before_rebooting]: 0,\n [deploymentSubstates.pending]: 0,\n [deploymentSubstates.rebooting]: 0,\n [deploymentSubstates.success]: 0\n};\nexport const deploymentDisplayStates = {\n finished: 'Finished',\n scheduled: 'Scheduled',\n skipped: 'Skipped',\n paused: 'Paused',\n pending: 'Pending',\n inprogress: 'In Progress',\n success: 'Success',\n successes: 'Success',\n failure: 'Fail',\n failures: 'Fail'\n};\n\nexport const deploymentPrototype = {\n devices: {},\n name: undefined,\n statistics: { status: {} }\n};\n\nexport const pauseMap = {\n [deploymentSubstates.pause_before_installing]: {\n title: installationSubstatesMap.download.done,\n followUp: installationSubstatesMap.download.pauseConfigurationIndicator\n },\n [deploymentSubstates.pause_before_rebooting]: {\n title: installationSubstatesMap.install.done,\n followUp: installationSubstatesMap.install.pauseConfigurationIndicator\n },\n [deploymentSubstates.pause_before_committing]: {\n title: installationSubstatesMap.reboot.done,\n followUp: installationSubstatesMap.reboot.pauseConfigurationIndicator\n }\n};\nexport const limitDefault = { min: 5, max: 100, default: 10 };\n","// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { DEVICE_FILTERING_OPTIONS, apiUrl } from '@northern.tech/store/constants';\n\nexport const emptyFilter = { key: null, value: '', operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'inventory' };\n\nexport const deviceAuthV2 = `${apiUrl.v2}/devauth`;\nexport const deviceConnect = `${apiUrl.v1}/deviceconnect`;\nexport const inventoryApiUrl = `${apiUrl.v1}/inventory`;\nexport const inventoryApiUrlV2 = `${apiUrl.v2}/inventory`;\nexport const deviceConfig = `${apiUrl.v1}/deviceconfig/configurations/device`;\nexport const reportingApiUrl = `${apiUrl.v1}/reporting`;\nexport const iotManagerBaseURL = `${apiUrl.v1}/iot-manager`;\n\n// see https://github.com/mendersoftware/go-lib-micro/tree/master/ws\n// for the description of proto_header and the consts\n// *Note*: this needs to be aligned with mender-connect and deviceconnect.\nexport const DEVICE_MESSAGE_PROTOCOLS = {\n Shell: 1\n};\nexport const DEVICE_MESSAGE_TYPES = {\n Delay: 'delay',\n New: 'new',\n Ping: 'ping',\n Pong: 'pong',\n Resize: 'resize',\n Shell: 'shell',\n Stop: 'stop'\n};\n\n// we can't include the dismiss state with the rest since this would include dismissed devices in several queries\nexport const DEVICE_DISMISSAL_STATE = 'dismiss';\nexport const ALL_DEVICE_STATES = 'any';\nexport const DEVICE_STATES = {\n accepted: 'accepted',\n pending: 'pending',\n preauth: 'preauthorized',\n rejected: 'rejected'\n};\nexport const DEVICE_CONNECT_STATES = {\n connected: 'connected',\n disconnected: 'disconnected',\n unknown: 'unknown'\n};\n\nexport const geoAttributes = ['geo-lat', 'geo-lon'].map(attribute => ({ attribute, scope: 'inventory' }));\n","// Copyright 2021 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\nimport { apiUrl } from '@northern.tech/store/constants';\n\n// limitations under the License.\nexport const alertChannels = { email: 'email' };\nexport const monitorApiUrlv1 = `${apiUrl.v1}/devicemonitor`;\n","// Copyright 2020 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nexport const onboardingSteps = {\n ONBOARDING_START: 'onboarding-start',\n DEVICES_PENDING_ONBOARDING_START: 'devices-pending-onboarding-start',\n DASHBOARD_ONBOARDING_START: 'dashboard-onboarding-start',\n DASHBOARD_ONBOARDING_PENDINGS: 'dashboard-onboarding-pendings',\n DEVICES_DELAYED_ONBOARDING: 'devices-delayed-onboarding',\n DEVICES_PENDING_ONBOARDING: 'devices-pending-onboarding',\n DEVICES_ACCEPTED_ONBOARDING: 'devices-accepted-onboarding',\n DEVICES_PENDING_ACCEPTING_ONBOARDING: 'devices-pending-accepting-onboarding',\n DEVICES_DEPLOY_RELEASE_ONBOARDING: 'devices-deploy-release-onboarding',\n SCHEDULING_ARTIFACT_SELECTION: 'scheduling-artifact-selection',\n SCHEDULING_ALL_DEVICES_SELECTION: 'scheduling-all-devices-selection',\n SCHEDULING_GROUP_SELECTION: 'scheduling-group-selection',\n SCHEDULING_RELEASE_TO_DEVICES: 'scheduling-release-to-devices',\n DEPLOYMENTS_INPROGRESS: 'deployments-inprogress',\n DEPLOYMENTS_PAST: 'deployments-past',\n DEPLOYMENTS_PAST_COMPLETED: 'deployments-past-completed',\n DEPLOYMENTS_PAST_COMPLETED_FAILURE: 'deployments-past-completed-failure',\n ONBOARDING_CANCELED: 'onboarding-canceled'\n};\n\nexport const orderedOnboardingSteps = [\n onboardingSteps.DASHBOARD_ONBOARDING_START,\n onboardingSteps.DEVICES_PENDING_ONBOARDING_START,\n onboardingSteps.DEVICES_DELAYED_ONBOARDING,\n onboardingSteps.DEVICES_PENDING_ONBOARDING,\n onboardingSteps.DEVICES_PENDING_ACCEPTING_ONBOARDING,\n onboardingSteps.DASHBOARD_ONBOARDING_PENDINGS,\n onboardingSteps.DEVICES_ACCEPTED_ONBOARDING,\n onboardingSteps.DEVICES_DEPLOY_RELEASE_ONBOARDING,\n onboardingSteps.SCHEDULING_ALL_DEVICES_SELECTION,\n onboardingSteps.SCHEDULING_GROUP_SELECTION,\n onboardingSteps.SCHEDULING_ARTIFACT_SELECTION,\n onboardingSteps.SCHEDULING_RELEASE_TO_DEVICES,\n onboardingSteps.DEPLOYMENTS_INPROGRESS,\n onboardingSteps.DEPLOYMENTS_PAST,\n onboardingSteps.DEPLOYMENTS_PAST_COMPLETED,\n onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE,\n onboardingSteps.ONBOARDING_CANCELED\n];\n","// Copyright 2020 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { Integration } from '@northern.tech/store/api/types/MenderTypes';\nimport { EXTERNAL_PROVIDER, apiUrl, useradmApiUrl } from '@northern.tech/store/constants';\n\nexport const auditLogsApiUrl = `${apiUrl.v1}/auditlogs`;\nexport const tenantadmApiUrlv1 = `${apiUrl.v1}/tenantadm`;\nexport const tenantadmApiUrlv2 = `${apiUrl.v2}/tenantadm`;\nexport const ssoIdpApiUrlv1 = `${apiUrl.v1}/useradm/sso/idp/metadata`;\n\nexport const XML_METADATA_FORMAT = 'xml';\nexport const JSON_METADATA_FORMAT = 'json';\n\nexport const getSamlStartUrl = id => `${window.location.origin}${useradmApiUrl}/auth/sso/${id}/login`;\nexport const getOidcStartUrl = id => `${window.location.origin}${useradmApiUrl}/oidc/${id}/start`;\n\nexport const SSO_TYPES = {\n saml: {\n id: 'saml',\n type: 'saml',\n title: 'SAML',\n metadataFormat: XML_METADATA_FORMAT,\n editorLanguage: XML_METADATA_FORMAT,\n contentType: 'application/samlmetadata+xml',\n getStartUrl: getSamlStartUrl,\n configDetails: [\n { key: 'entityID', label: 'Entity ID', getValue: id => `${window.location.origin}${useradmApiUrl}/sso/sp/metadata/${id}` },\n { key: 'acs', label: 'ACS URL', getValue: id => `${window.location.origin}${useradmApiUrl}/auth/sso/${id}/acs` },\n { key: 'startURL', label: 'Start URL', getValue: getSamlStartUrl }\n ]\n },\n oidc: {\n id: 'oidc',\n type: 'oidc',\n title: 'OpenID Connect',\n metadataFormat: JSON_METADATA_FORMAT,\n editorLanguage: JSON_METADATA_FORMAT,\n contentType: 'application/json',\n getStartUrl: getOidcStartUrl,\n configDetails: [{ key: 'startURL', label: 'Start Url', getValue: getOidcStartUrl }]\n }\n};\n\nexport const AUDIT_LOGS_TYPES = [\n { title: 'Artifact', queryParameter: 'object_type', value: 'artifact' },\n { title: 'Deployment', queryParameter: 'object_deployment_name', value: 'deployment' },\n { title: 'Device', queryParameter: 'object_id', value: 'device' },\n { title: 'User', queryParameter: 'object_id', value: 'user' }\n];\nexport const SP_AUDIT_LOGS_TYPES = [AUDIT_LOGS_TYPES[3], { title: 'Tenant', queryParameter: 'object_id', value: 'tenant' }];\n\nexport interface Webhook extends Integration {\n provider: Integration.provider.WEBHOOK;\n scopes?: string[];\n}\n\nexport const emptyWebhook: Webhook = {\n description: '',\n enabled: true,\n credentials: {\n type: EXTERNAL_PROVIDER.webhook.credentialsType,\n [EXTERNAL_PROVIDER.webhook.credentialsType]: {\n secret: '',\n url: ''\n }\n }\n};\nexport const TENANT_LIST_DEFAULT = {\n page: 1,\n perPage: 20\n};\n","// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nexport const ARTIFACT_GENERATION_TYPE = { SINGLE_FILE: 'single_file' };\n\nexport const currentArtifact = 'artifact_name';\nexport const rootfsImageVersion = 'rootfs-image.version';\nexport const softwareTitleMap = { [rootfsImageVersion]: { title: 'Root filesystem', priority: 0, key: rootfsImageVersion } };\n","'use strict';\n\n// Copyright 2015 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { ALL_DEVICES, ALL_RELEASES, apiUrl, emptyUiPermissions } from '@northern.tech/store/constants';\n\nexport const useradmApiUrlv1 = `${apiUrl.v1}/useradm`;\nexport const useradmApiUrlv2 = `${apiUrl.v2}/useradm`;\nexport { useradmApiUrlv1 as useradmApiUrl };\n\nexport type UiPermission = {\n explanations: object;\n permissionSets: Record<string, string>;\n permissionLevel: number;\n title: string;\n value: string;\n verbs: string[];\n};\n\ntype ExcessiveAccessConfig = {\n selector: string;\n warning: string;\n};\n\ntype EndpointDefinition = {\n path: RegExp;\n types: string[];\n uiPermissions: UiPermission[];\n};\n\nexport type PermissionsArea = {\n endpoints: EndpointDefinition[];\n explanation: string;\n uiPermissions: UiPermission[];\n title: string;\n key: string;\n scope?: string;\n filter?: (object) => string[];\n placeholder?: string;\n excessiveAccessConfig?: ExcessiveAccessConfig;\n};\n\nconst staticRolesByName = {\n admin: 'RBAC_ROLE_PERMIT_ALL',\n readOnly: 'RBAC_ROLE_OBSERVER',\n ci: 'RBAC_ROLE_CI',\n deploymentsManager: 'RBAC_ROLE_DEPLOYMENTS_MANAGER',\n terminalAccess: 'RBAC_ROLE_REMOTE_TERMINAL'\n};\n\nexport const PermissionTypes = {\n Any: 'any',\n Get: 'GET',\n Post: 'POST',\n Put: 'PUT',\n Delete: 'DELETE',\n Patch: 'PATCH',\n DeviceGroup: 'DEVICE_GROUP',\n DeviceId: 'DEVICE_ID'\n};\n\nconst permissionSetIds = {\n Basic: 'Basic',\n ConfigureDevices: 'ConfigureDevices',\n ConnectToDevices: 'ConnectToDevices',\n DeployToDevices: 'DeployToDevices',\n ManageDevices: 'ManageDevices',\n ManageReleases: 'ManageReleases',\n ManageTenants: 'ManageTenants',\n ManageUsers: 'ManageUsers',\n ReadAuditLogs: 'ReadAuditLogs',\n ReadDevices: 'ReadDevices',\n ReadReleases: 'ReadReleases',\n ReadTenants: 'ReadTenants',\n ReadUsers: 'ReadUsers',\n SuperUser: 'SuperUser',\n UploadArtifacts: 'UploadArtifacts'\n};\n\nexport const uiPermissionsById = {\n configure: {\n explanations: { groups: `'Configure' allows the user to use mender-configure features and apply configurations.` },\n permissionLevel: 2,\n permissionSets: { groups: permissionSetIds.ConfigureDevices },\n title: 'Configure',\n value: 'configure',\n verbs: [PermissionTypes.Get, PermissionTypes.Put, PermissionTypes.Post]\n },\n connect: {\n explanations: { groups: `'Connect' allows the user to use mender-connect features and Troubleshoot add-ons.` },\n permissionLevel: 2,\n permissionSets: { groups: permissionSetIds.ConnectToDevices },\n title: 'Connect',\n value: 'connect',\n verbs: [PermissionTypes.Get, PermissionTypes.Put]\n },\n deploy: {\n explanations: { groups: `'Deploy' allows the user to deploy software or configuration updates to devices.` },\n permissionLevel: 2,\n permissionSets: { deployments: permissionSetIds.DeployToDevices, groups: permissionSetIds.DeployToDevices },\n title: 'Deploy',\n value: 'deploy',\n verbs: [PermissionTypes.Post]\n },\n manage: {\n explanations: {\n 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.`,\n releases: `'Manage' allows the user to upload new artifacts, edit release descriptions and remove artifacts.`\n },\n permissionLevel: 2,\n permissionSets: {\n groups: permissionSetIds.ManageDevices,\n releases: permissionSetIds.ManageReleases,\n tenantManagement: permissionSetIds.ManageTenants,\n userManagement: permissionSetIds.ManageUsers\n },\n title: 'Manage',\n value: 'manage',\n verbs: [PermissionTypes.Post, PermissionTypes.Put, PermissionTypes.Patch]\n },\n read: {\n explanations: { groups: `'Read' allows the user to view devices.` },\n permissionLevel: 1,\n permissionSets: {\n auditlog: permissionSetIds.ReadAuditLogs,\n groups: permissionSetIds.ReadDevices,\n releases: permissionSetIds.ReadReleases,\n tenantManagement: permissionSetIds.ReadTenants,\n userManagement: permissionSetIds.ReadUsers\n },\n title: 'Read',\n value: 'read',\n verbs: [PermissionTypes.Get, PermissionTypes.Post]\n },\n upload: {\n explanations: { groups: `'Upload' allows the user to upload new Artifacts.` },\n unscopedOnly: { releases: true },\n permissionLevel: 1,\n permissionSets: { releases: permissionSetIds.UploadArtifacts },\n title: 'Upload',\n value: 'upload',\n verbs: [PermissionTypes.Post, PermissionTypes.Put, PermissionTypes.Patch]\n }\n};\n\n/**\n * _uiPermissions_ represent the possible permissions/ rights that can be given for the area\n * _endpoints_ represent the possible endpoints this definition might be affecting in the UI and what\n * functionality might be affected\n *\n */\nexport const scopedPermissionAreas = {\n groups: { key: 'groups', excessiveAccessSelector: ALL_DEVICES, scopeType: 'DeviceGroups' },\n releases: { key: 'releases', excessiveAccessSelector: ALL_RELEASES, scopeType: 'Releases' }\n};\n\nexport const uiPermissionsByArea = {\n auditlog: {\n endpoints: [{ path: /\\/(auditlog)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] }],\n explanation:\n 'Granting access to the audit log will allow tracing changes to devices, releases and user accounts, as well as providing information about deployments.',\n key: 'auditlog',\n uiPermissions: [uiPermissionsById.read],\n title: 'System audit log'\n },\n deployments: {\n endpoints: [\n { path: /\\/(deployments\\/deployments)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.deploy] },\n { path: /\\/(deployments\\/deployments)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },\n { path: /\\/(deployments\\/config)/i, types: [PermissionTypes.Get, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] }\n ],\n explanation: 'Providing deploy permissions will allow deployments to be created using the releases and devices a user has access to.',\n key: 'deployments',\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.deploy],\n title: 'Deployments'\n },\n groups: {\n endpoints: [\n {\n path: /\\/(devauth|inventory|deviceconfig|devicemonitor|deviceconnect\\/devices)/i,\n types: [PermissionTypes.Get],\n uiPermissions: [uiPermissionsById.read]\n },\n { path: /\\/(devauth|inventory)/i, types: [PermissionTypes.Put, PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] },\n { path: /\\/(deviceconfig)/i, types: [PermissionTypes.Get, PermissionTypes.Put, PermissionTypes.Post], uiPermissions: [uiPermissionsById.configure] },\n { path: /\\/(deviceconnect\\/devices)/i, types: [PermissionTypes.Get, PermissionTypes.Post], uiPermissions: [uiPermissionsById.connect] }\n ],\n explanation: 'Device group management permissions control the degree to which devices in a group can be accessed and moved to other groups.',\n key: 'groups',\n scope: scopedPermissionAreas.groups.scopeType,\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.deploy, uiPermissionsById.configure, uiPermissionsById.connect],\n title: 'Group Management'\n },\n releases: {\n endpoints: [\n { path: /\\/(deployments\\/artifacts|deployments\\/deployments\\/releases)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },\n {\n path: /\\/(deployments\\/artifacts|deployments\\/deployments\\/releases)/i,\n types: [PermissionTypes.Post, PermissionTypes.Put],\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.upload]\n },\n {\n path: /\\/(deployments\\/artifacts|deployments\\/deployments\\/releases)/i,\n types: [PermissionTypes.Delete],\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage]\n }\n ],\n explanation: 'Release permissions can be granted to allow artifact & release modifications, as well as the creation of new releases.',\n key: 'releases',\n scope: 'ReleaseTags',\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage, uiPermissionsById.upload],\n title: 'Release Management'\n },\n tenantManagement: {\n endpoints: [\n { path: /\\/(tenantadm\\/tenants)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },\n { path: /\\/(tenantadm\\/tenants)/i, types: [PermissionTypes.Post, PermissionTypes.Put], uiPermissions: [uiPermissionsById.manage] },\n { path: /\\/(users\\/exists)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.manage] }\n ],\n explanation: 'Tenant management permissions allow listing, creating and modifying child tenants',\n key: 'tenantManagement',\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],\n title: 'Tenant Management'\n },\n userManagement: {\n endpoints: [\n { path: /\\/(useradm)/i, types: [PermissionTypes.Get], uiPermissions: [uiPermissionsById.read] },\n { path: /\\/(useradm)/i, types: [PermissionTypes.Post], uiPermissions: [uiPermissionsById.manage] }\n ],\n explanation:\n 'User management permissions should be granted carefully, as these allow privilege increases for any users managed by a user with user management permissions',\n key: 'userManagement',\n uiPermissions: [uiPermissionsById.read, uiPermissionsById.manage],\n title: 'User Management'\n }\n};\n\nconst permissionMapper = permission => permission.value;\nexport const itemUiPermissionsReducer = (accu, { item, uiPermissions }) => (item ? { ...accu, [item]: uiPermissions } : accu);\n\nconst checkSinglePermission = (permission, requiredPermission) =>\n requiredPermission === permission || uiPermissionsById[permission].permissionLevel > uiPermissionsById[requiredPermission].permissionLevel;\n\nexport const checkPermissionsObject = (permissions, requiredPermission, scopedAccess, superAccess) =>\n permissions[superAccess]?.some(permission => checkSinglePermission(permission, requiredPermission)) ||\n permissions[scopedAccess]?.some(permission => checkSinglePermission(permission, requiredPermission));\n\nexport const rolesById = Object.freeze({\n [staticRolesByName.admin]: {\n name: 'Admin',\n value: staticRolesByName.admin,\n description: 'Full access',\n permissions: [], // permissions refers to the values returned from the backend\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),\n deployments: uiPermissionsByArea.deployments.uiPermissions.map(permissionMapper),\n groups: { [ALL_DEVICES]: uiPermissionsByArea.groups.uiPermissions.map(permissionMapper) },\n releases: { [ALL_RELEASES]: uiPermissionsByArea.releases.uiPermissions.map(permissionMapper) },\n userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper)\n }\n },\n [staticRolesByName.readOnly]: {\n name: 'Read Access',\n value: staticRolesByName.readOnly,\n description: '',\n permissions: [],\n uiPermissions: {\n ...emptyUiPermissions,\n deployments: [uiPermissionsById.read.value],\n groups: { [ALL_DEVICES]: [uiPermissionsById.read.value] },\n releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] },\n userManagement: [uiPermissionsById.read.value]\n }\n },\n [staticRolesByName.ci]: {\n name: 'Releases Manager',\n value: staticRolesByName.ci,\n description: '',\n permissions: [],\n uiPermissions: {\n ...emptyUiPermissions,\n releases: { [ALL_RELEASES]: uiPermissionsByArea.releases.uiPermissions.map(permissionMapper) }\n }\n },\n [staticRolesByName.deploymentsManager]: {\n name: 'Deployments Manager',\n value: staticRolesByName.deploymentsManager,\n description: '',\n permissions: [],\n uiPermissions: {\n ...emptyUiPermissions,\n deployments: uiPermissionsByArea.deployments.uiPermissions.map(permissionMapper),\n groups: { [ALL_DEVICES]: [uiPermissionsById.deploy.value, uiPermissionsById.read.value] },\n releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }\n }\n },\n [staticRolesByName.terminalAccess]: {\n name: 'Troubleshooting',\n value: staticRolesByName.terminalAccess,\n description: 'Access to the troubleshooting features: Remote Terminal, File Transfer, Port Forwarding',\n permissions: [],\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { [ALL_DEVICES]: [uiPermissionsById.connect.value] }\n }\n }\n});\n\nexport const serviceProviderRolesById = {\n admin: {\n name: 'Admin',\n value: staticRolesByName.admin,\n description: 'Full access',\n permissions: [],\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: uiPermissionsByArea.auditlog.uiPermissions.map(permissionMapper),\n userManagement: uiPermissionsByArea.userManagement.uiPermissions.map(permissionMapper),\n tenantManagement: uiPermissionsByArea.tenantManagement.uiPermissions.map(permissionMapper)\n }\n },\n readOnly: {\n name: 'Read access',\n value: staticRolesByName.admin,\n description: 'This role can see all linked organizations but cannot make any changes',\n permissions: [],\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: [uiPermissionsById.read.value],\n userManagement: [uiPermissionsById.read.value],\n tenantManagement: [uiPermissionsById.read.value]\n }\n }\n};\n\nexport const defaultPermissionSets = {\n [permissionSetIds.Basic]: {\n name: permissionSetIds.Basic,\n result: {\n // this is needed to prevent the detailed permissions of the basic permission set from being interpreted as allowing read & management access to user endpoints\n userManagement: [uiPermissionsById.read.value]\n }\n },\n [permissionSetIds.SuperUser]: {\n name: permissionSetIds.SuperUser,\n result: {\n ...rolesById[staticRolesByName.admin].uiPermissions\n }\n },\n [permissionSetIds.ManageUsers]: {\n name: permissionSetIds.ManageUsers,\n result: {\n userManagement: [uiPermissionsById.manage.value]\n }\n },\n [permissionSetIds.ReadAuditLogs]: {\n name: permissionSetIds.ReadAuditLogs,\n result: {\n auditlog: [uiPermissionsById.read.value]\n }\n },\n [permissionSetIds.ReadReleases]: {\n name: permissionSetIds.ReadReleases,\n result: {\n releases: { [ALL_RELEASES]: [uiPermissionsById.read.value] }\n }\n },\n [permissionSetIds.ReadTenants]: {\n name: permissionSetIds.ReadTenants,\n result: {\n tenantManagement: [uiPermissionsById.read.value]\n }\n },\n [permissionSetIds.ManageTenants]: {\n name: permissionSetIds.ManageTenants,\n result: {\n tenantManagement: [uiPermissionsById.manage.value]\n }\n },\n [permissionSetIds.ReadUsers]: {\n name: permissionSetIds.ReadUsers,\n result: {\n userManagement: [uiPermissionsById.read.value]\n }\n },\n [permissionSetIds.UploadArtifacts]: {\n name: permissionSetIds.UploadArtifacts,\n result: {\n releases: { [ALL_RELEASES]: [uiPermissionsById.upload.value] }\n }\n },\n [permissionSetIds.ManageReleases]: {\n name: permissionSetIds.ManageReleases,\n result: {\n releases: { [ALL_RELEASES]: [uiPermissionsById.manage.value] }\n }\n },\n [permissionSetIds.ConfigureDevices]: {\n name: permissionSetIds.ConfigureDevices,\n result: {\n deployments: [uiPermissionsById.read.value, uiPermissionsById.deploy.value],\n groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.configure.value] }\n }\n },\n [permissionSetIds.ConnectToDevices]: {\n name: permissionSetIds.ConnectToDevices,\n result: {\n groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.connect.value] }\n }\n },\n [permissionSetIds.DeployToDevices]: {\n name: permissionSetIds.DeployToDevices,\n result: {\n deployments: [uiPermissionsById.deploy.value, uiPermissionsById.manage.value, uiPermissionsById.read.value],\n groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.deploy.value] }\n }\n },\n [permissionSetIds.ManageDevices]: {\n name: permissionSetIds.ManageDevices,\n result: {\n groups: { [ALL_DEVICES]: [uiPermissionsById.read.value, uiPermissionsById.manage.value] }\n }\n },\n [permissionSetIds.ReadDevices]: {\n name: permissionSetIds.ReadDevices,\n result: {\n groups: { [ALL_DEVICES]: [uiPermissionsById.read.value] }\n }\n }\n};\n\nexport const USER_LOGOUT = 'USER_LOGOUT';\n\nexport const OWN_USER_ID = 'me';\n\nexport const rolesByName = {\n ...staticRolesByName,\n deploymentCreation: { action: 'CREATE_DEPLOYMENT', object: { type: 'DEVICE_GROUP', value: undefined } },\n groupAccess: { action: 'VIEW_DEVICE', object: { type: 'DEVICE_GROUP', value: undefined } },\n userManagement: { action: 'http', object: { type: 'any', value: `${useradmApiUrlv1}/.*` } }\n};\nexport const twoFAStates = {\n enabled: 'enabled',\n disabled: 'disabled',\n unverified: 'unverified'\n};\nexport const settingsKeys = { initialized: 'settings-initialized' };\n\nexport const READ_STATES = {\n read: 'read',\n seen: 'seen',\n unread: 'unread'\n};\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { versionCompare } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nconst getAppDocsVersion = state => state.app.docsVersion;\nexport const getFeatures = state => state.app.features;\nexport const getFullVersionInformation = state => state.app.versionInformation;\n\nexport const getDocsVersion = createSelector([getAppDocsVersion, getFeatures], (appDocsVersion, { isHosted }) => {\n // if hosted, use latest docs version\n const docsVersion = appDocsVersion ? `${appDocsVersion}/` : 'development/';\n return isHosted ? '' : docsVersion;\n});\n\nexport const getSearchState = state => state.app.searchState;\n\nexport const getSearchedDevices = createSelector([getSearchState], ({ deviceIds }) => deviceIds);\nexport const getVersionInformation = createSelector([getFullVersionInformation, getFeatures], ({ Integration, ...remainder }, { isHosted }) =>\n isHosted && Integration !== 'next' ? remainder : { ...remainder, Integration }\n);\nexport const getIsPreview = createSelector([getFullVersionInformation], ({ Integration }) => versionCompare(Integration, 'next') > -1);\n","// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { attributeDuplicateFilter, getDemoDeviceAddress as getDemoDeviceAddressHelper } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport { PLANS, defaultReports } from './appSlice/constants';\nimport { getFeatures, getSearchedDevices } from './appSlice/selectors';\nimport { ALL_DEVICES, ATTRIBUTE_SCOPES, DEVICE_ISSUE_OPTIONS, DEVICE_LIST_MAXIMUM_LENGTH, UNGROUPED_GROUP } from './commonConstants';\nimport { getDeploymentsById, getDeploymentsSelectionState, getSelectedDeploymentDeviceIds } from './deploymentsSlice/selectors';\nimport { inventoryApiUrlV2, reportingApiUrl } from './devicesSlice/constants';\nimport { getDeviceById, getDevicesById, getFilteringAttributes, getGroupsById, getListedDevices } from './devicesSlice/selectors';\nimport { getIssueCountsByType } from './monitorSlice/selectors';\nimport { onboardingSteps } from './onboardingSlice/constants';\nimport { getOnboarding } from './onboardingSlice/selectors';\nimport { getAuditLogEntry, getIsServiceProvider, getOrganization } from './organizationSlice/selectors';\nimport { getReleasesById } from './releasesSlice/selectors';\nimport { rolesById, rolesByName, serviceProviderRolesById, uiPermissionsById } from './usersSlice/constants';\nimport { getCurrentUser, getGlobalSettings, getRolesById, getRolesList, getUserSettings } from './usersSlice/selectors';\nimport { listItemMapper, mapUserRolesToUiPermissions } from './utils';\n\nexport const getIsEnterprise = createSelector(\n [getOrganization, getFeatures],\n ({ plan = PLANS.os.id }, { isEnterprise, isHosted }) => isEnterprise || (isHosted && plan === PLANS.enterprise.id)\n);\n\nexport const getAttrsEndpoint = createSelector([getFeatures], ({ hasReporting }) =>\n hasReporting ? `${reportingApiUrl}/devices/search/attributes` : `${inventoryApiUrlV2}/filters/attributes`\n);\nexport const getSearchEndpoint = createSelector([getFeatures], ({ hasReporting }) =>\n hasReporting ? `${reportingApiUrl}/devices/search` : `${inventoryApiUrlV2}/filters/search`\n);\n\nexport const getUserRoles = createSelector(\n [getCurrentUser, getRolesById, getIsEnterprise, getFeatures, getOrganization],\n (currentUser, rolesById, isEnterprise, { isHosted, hasMultitenancy }, { plan = PLANS.os.id }) => {\n const isAdmin = currentUser.roles?.length\n ? currentUser.roles.some(role => role === rolesByName.admin)\n : !(hasMultitenancy || isEnterprise || (isHosted && plan !== PLANS.os.id));\n const uiPermissions = isAdmin\n ? mapUserRolesToUiPermissions([rolesByName.admin], rolesById)\n : mapUserRolesToUiPermissions(currentUser.roles || [], rolesById);\n return { isAdmin, uiPermissions };\n }\n);\n\nconst hasPermission = (thing, permission) => Object.values(thing).some(permissions => permissions.includes(permission));\n\nexport const getUserCapabilities = createSelector([getUserRoles, getIsServiceProvider], ({ uiPermissions }, isServiceProvider) => {\n const canManageReleases = hasPermission(uiPermissions.releases, uiPermissionsById.manage.value);\n const canReadReleases = canManageReleases || hasPermission(uiPermissions.releases, uiPermissionsById.read.value);\n const canUploadReleases = canManageReleases || hasPermission(uiPermissions.releases, uiPermissionsById.upload.value);\n\n const canAuditlog = uiPermissions.auditlog.includes(uiPermissionsById.read.value);\n\n const canReadUsers = uiPermissions.userManagement.includes(uiPermissionsById.read.value);\n const canManageUsers = uiPermissions.userManagement.includes(uiPermissionsById.manage.value);\n\n const canReadDevices = hasPermission(uiPermissions.groups, uiPermissionsById.read.value);\n const canWriteDevices = Object.values(uiPermissions.groups).some(\n groupPermissions => groupPermissions.includes(uiPermissionsById.read.value) && groupPermissions.length > 1\n );\n const canTroubleshoot = hasPermission(uiPermissions.groups, uiPermissionsById.connect.value);\n const canManageDevices = hasPermission(uiPermissions.groups, uiPermissionsById.manage.value);\n const canConfigure = hasPermission(uiPermissions.groups, uiPermissionsById.configure.value);\n\n const canDeploy = uiPermissions.deployments.includes(uiPermissionsById.deploy.value) || hasPermission(uiPermissions.groups, uiPermissionsById.deploy.value);\n const canReadDeployments = uiPermissions.deployments.includes(uiPermissionsById.read.value);\n\n return {\n canAuditlog,\n canConfigure,\n canDeploy,\n canManageDevices,\n canManageReleases,\n canManageUsers,\n canReadDeployments,\n canReadDevices,\n canReadReleases,\n canReadUsers,\n canTroubleshoot,\n canUploadReleases,\n canWriteDevices,\n groupsPermissions: uiPermissions.groups,\n releasesPermissions: uiPermissions.releases,\n SPTenant: isServiceProvider\n };\n});\n\nexport const getTenantCapabilities = createSelector(\n [getFeatures, getOrganization, getIsEnterprise],\n (\n { hasAuditlogs: isAuditlogEnabled, hasDeviceConfig: isDeviceConfigEnabled, hasDeviceConnect: isDeviceConnectEnabled, hasMonitor: isMonitorEnabled },\n { addons = [], plan = PLANS.os.id },\n isEnterprise\n ) => {\n const canDelta = isEnterprise || plan === PLANS.professional.id;\n const hasAuditlogs = isAuditlogEnabled && isEnterprise;\n const hasDeviceConfig = isDeviceConfigEnabled && addons.some(addon => addon.name === 'configure' && Boolean(addon.enabled));\n const hasDeviceConnect = isDeviceConnectEnabled && (!isEnterprise || addons.some(addon => addon.name === 'troubleshoot' && Boolean(addon.enabled)));\n const hasMonitor = isMonitorEnabled && addons.some(addon => addon.name === 'monitor' && Boolean(addon.enabled));\n return {\n canDelta,\n canRetry: canDelta,\n canSchedule: canDelta,\n hasAuditlogs,\n hasDeviceConfig,\n hasDeviceConnect,\n hasFullFiltering: canDelta,\n hasMonitor,\n isEnterprise,\n plan\n };\n }\n);\n\nexport const getFilterAttributes = createSelector(\n [getGlobalSettings, getFilteringAttributes],\n ({ previousFilters }, { identityAttributes, inventoryAttributes, systemAttributes, tagAttributes }) => {\n const deviceNameAttribute = { key: 'name', value: 'Name', scope: ATTRIBUTE_SCOPES.tags, category: ATTRIBUTE_SCOPES.tags, priority: 1 };\n const deviceIdAttribute = { key: 'id', value: 'Device ID', scope: ATTRIBUTE_SCOPES.identity, category: ATTRIBUTE_SCOPES.identity, priority: 1 };\n const checkInAttribute = { key: 'check_in_time', value: 'Latest activity', scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 };\n const updateAttribute = { ...checkInAttribute, key: 'updated_ts', value: 'Last inventory update' };\n const firstRequestAttribute = { key: 'created_ts', value: 'First request', scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 };\n const attributes = [\n ...previousFilters.map(item => ({\n ...item,\n value: deviceIdAttribute.key === item.key ? deviceIdAttribute.value : item.key,\n category: 'recently used',\n priority: 0\n })),\n deviceNameAttribute,\n deviceIdAttribute,\n ...identityAttributes.map(item => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.identity, category: ATTRIBUTE_SCOPES.identity, priority: 1 })),\n ...inventoryAttributes.map(item => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.inventory, category: ATTRIBUTE_SCOPES.inventory, priority: 2 })),\n ...tagAttributes.map(item => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.tags, category: ATTRIBUTE_SCOPES.tags, priority: 3 })),\n checkInAttribute,\n updateAttribute,\n firstRequestAttribute,\n ...systemAttributes.map(item => ({ key: item, value: item, scope: ATTRIBUTE_SCOPES.system, category: ATTRIBUTE_SCOPES.system, priority: 4 }))\n ];\n return attributeDuplicateFilter(attributes, 'key');\n }\n);\n\nexport const getOnboardingState = createSelector([getOnboarding, getUserSettings], ({ complete, progress, showTips, ...remainder }, { onboarding = {} }) => ({\n ...remainder,\n ...onboarding,\n complete: onboarding.complete || complete,\n progress:\n Object.keys(onboardingSteps).findIndex(step => step === progress) > Object.keys(onboardingSteps).findIndex(step => step === onboarding.progress)\n ? progress\n : onboarding.progress,\n showTips: !onboarding.showTips ? onboarding.showTips : showTips\n}));\n\nexport const getDemoDeviceAddress = createSelector([getDevicesById, getOnboarding], (devicesById, { approach, demoArtifactPort }) => {\n const demoDeviceAddress = `http://${getDemoDeviceAddressHelper(Object.values(devicesById), approach)}`;\n return demoArtifactPort ? `${demoDeviceAddress}:${demoArtifactPort}` : demoDeviceAddress;\n});\n\nexport const getDeviceConfigDeployment = createSelector([getDeviceById, getDeploymentsById], (device, deploymentsById) => {\n const { config = {} } = device;\n const { deployment_id: configDeploymentId } = config;\n const deviceConfigDeployment = deploymentsById[configDeploymentId] || {};\n return { device, deviceConfigDeployment };\n});\n\nexport const getDeploymentRelease = createSelector(\n [getDeploymentsById, getDeploymentsSelectionState, getReleasesById],\n (deploymentsById, { selectedId }, releasesById) => {\n const deployment = deploymentsById[selectedId] || {};\n return deployment.artifact_name && releasesById[deployment.artifact_name] ? releasesById[deployment.artifact_name] : { device_types_compatible: [] };\n }\n);\n\nexport const getSelectedDeploymentData = createSelector(\n [getDeploymentsById, getDeploymentsSelectionState, getDevicesById, getSelectedDeploymentDeviceIds],\n (deploymentsById, { selectedId }, devicesById, selectedDeviceIds) => {\n const deployment = deploymentsById[selectedId] ?? {};\n const { devices = {} } = deployment;\n return {\n deployment,\n selectedDevices: selectedDeviceIds.map(deviceId => ({ ...devicesById[deviceId], ...devices[deviceId] }))\n };\n }\n);\n\nexport const getAvailableIssueOptionsByType = createSelector(\n [getFeatures, getTenantCapabilities, getIssueCountsByType],\n ({ hasReporting }, { hasFullFiltering, hasMonitor }, issueCounts) =>\n Object.values(DEVICE_ISSUE_OPTIONS).reduce((accu, { isCategory, key, needsFullFiltering, needsMonitor, needsReporting, title }) => {\n if (isCategory || (needsReporting && !hasReporting) || (needsFullFiltering && !hasFullFiltering) || (needsMonitor && !hasMonitor)) {\n return accu;\n }\n accu[key] = { count: issueCounts[key].filtered, key, title };\n return accu;\n }, {})\n);\n\nexport const getGroupNames = createSelector([getGroupsById, getUserRoles, (_, options = {}) => options], (groupsById, { uiPermissions }, { staticOnly }) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [UNGROUPED_GROUP.id]: ungrouped, ...groups } = groupsById;\n if (staticOnly) {\n return Object.keys(uiPermissions.groups).sort();\n }\n return Object.keys(\n Object.entries(groups).reduce((accu, [groupName, group]) => {\n if (group.filterId || uiPermissions.groups[ALL_DEVICES]) {\n accu[groupName] = group;\n }\n return accu;\n }, uiPermissions.groups)\n ).sort();\n});\n\nexport const getDeviceReportsForUser = createSelector(\n [getUserSettings, getCurrentUser, getGlobalSettings, getDevicesById],\n ({ reports }, { id: currentUserId }, globalSettings, devicesById) => {\n return reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : []);\n }\n);\n\nconst listTypeDeviceIdMap = {\n deviceList: getListedDevices,\n search: getSearchedDevices\n};\nconst deviceMapDefault = { defaultObject: { auth_sets: [] }, cutOffSize: DEVICE_LIST_MAXIMUM_LENGTH };\nconst getDeviceMappingDefaults = () => deviceMapDefault;\n\nexport const getMappedDevicesList = createSelector(\n [getDevicesById, (state, listType) => listTypeDeviceIdMap[listType](state), getDeviceMappingDefaults],\n listItemMapper\n);\n\nexport const getAuditlogDevice = createSelector([getAuditLogEntry, getDevicesById], (auditlogEvent, devicesById) => {\n let auditlogDevice = {};\n if (auditlogEvent) {\n const { object = {} } = auditlogEvent;\n const { device = {}, id, type } = object;\n auditlogDevice = type === 'device' ? { id, ...device } : auditlogDevice;\n }\n return { ...auditlogDevice, ...devicesById[auditlogDevice.id] };\n});\n\nexport const getRelevantRoles = createSelector([getOrganization, getRolesList], ({ service_provider }, roles) => {\n if (service_provider) {\n return roles.reduce((accu, role) => {\n if (rolesById[role.id]) {\n return accu;\n }\n accu.push(role);\n return accu;\n }, Object.values(serviceProviderRolesById));\n }\n return Object.keys(rolesById)\n .reverse()\n .reduce((accu, key) => {\n const index = accu.findIndex(({ id }) => id === key);\n accu = [accu[index], ...accu.filter((item, itemIndex) => index !== itemIndex)];\n return accu;\n }, roles);\n});\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport { DEPLOYMENT_STATES } from './constants';\n\nexport const getDeploymentsById = state => state.deployments.byId;\nexport const getDeploymentsByStatus = state => state.deployments.byStatus;\nexport const getSelectedDeploymentDeviceIds = state => state.deployments.selectedDeviceIds;\nexport const getDeploymentsSelectionState = state => state.deployments.selectionState;\n\nexport const getMappedDeploymentSelection = createSelector(\n [getDeploymentsSelectionState, (_, deploymentsState) => deploymentsState, getDeploymentsById],\n (selectionState, deploymentsState, deploymentsById) => {\n const { selection = [] } = selectionState[deploymentsState] ?? {};\n return selection.reduce((accu, id) => {\n if (deploymentsById[id]) {\n accu.push(deploymentsById[id]);\n }\n return accu;\n }, []);\n }\n);\n\nconst relevantDeploymentStates = [DEPLOYMENT_STATES.pending, DEPLOYMENT_STATES.inprogress, DEPLOYMENT_STATES.finished];\nexport const DEPLOYMENT_CUTOFF = 3;\nexport const getRecentDeployments = createSelector([getDeploymentsById, getDeploymentsByStatus], (deploymentsById, deploymentsByStatus) =>\n Object.entries(deploymentsByStatus).reduce(\n (accu, [state, byStatus]) => {\n if (!relevantDeploymentStates.includes(state) || !byStatus.deploymentIds.length) {\n return accu;\n }\n accu[state] = byStatus.deploymentIds\n .reduce((accu, id) => {\n if (deploymentsById[id]) {\n accu.push(deploymentsById[id]);\n }\n return accu;\n }, [])\n .slice(0, DEPLOYMENT_CUTOFF);\n accu.total += byStatus.total;\n return accu;\n },\n { total: 0 }\n )\n);\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { DEVICE_STATES, UNGROUPED_GROUP } from '@northern.tech/store/constants';\nimport { duplicateFilter } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nexport const getAcceptedDevices = state => state.devices.byStatus.accepted;\nexport const getDevicesByStatus = state => state.devices.byStatus;\nexport const getDevicesById = state => state.devices.byId;\nexport const getDeviceReports = state => state.devices.reports;\nexport const getGroupsById = state => state.devices.groups.byId;\nexport const getSelectedGroup = state => state.devices.groups.selectedGroup;\n\nexport const getDeviceListState = state => state.devices.deviceList;\nexport const getListedDevices = state => state.devices.deviceList.deviceIds;\nexport const getFilteringAttributes = state => state.devices.filteringAttributes;\nexport const getDeviceFilters = state => state.devices.filters || [];\nconst getFilteringAttributesFromConfig = state => state.devices.filteringAttributesConfig.attributes;\nexport const getSortedFilteringAttributes = createSelector([getFilteringAttributes], filteringAttributes => ({\n ...filteringAttributes,\n identityAttributes: [...filteringAttributes.identityAttributes, 'id']\n}));\nexport const getDeviceLimit = state => state.devices.limit;\nconst getFilteringAttributesLimit = state => state.devices.filteringAttributesLimit;\n\nexport const getDeviceIdentityAttributes = createSelector(\n [getFilteringAttributes, getFilteringAttributesLimit],\n ({ identityAttributes }, filteringAttributesLimit) => {\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.slice(0, filteringAttributesLimit);\n return attributes.reduce(\n (accu, value) => {\n accu.push({ value, label: value, scope: 'identity' });\n return accu;\n },\n [\n { value: 'name', label: 'Name', scope: 'tags' },\n { value: 'id', label: 'Device ID', scope: 'identity' }\n ]\n );\n }\n);\n\nexport const getDeviceCountsByStatus = createSelector([getDevicesByStatus], byStatus =>\n Object.values(DEVICE_STATES).reduce((accu, state) => {\n accu[state] = byStatus[state].total || 0;\n return accu;\n }, {})\n);\n\nexport const getDeviceById = createSelector([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = '') => devicesById[deviceId] ?? {});\n\nexport const getSelectedGroupInfo = createSelector(\n [getAcceptedDevices, getGroupsById, getSelectedGroup],\n ({ total: acceptedDeviceTotal }, groupsById, selectedGroup) => {\n let groupCount = acceptedDeviceTotal;\n let groupFilters = [];\n if (selectedGroup && groupsById[selectedGroup]) {\n groupCount = groupsById[selectedGroup].total;\n groupFilters = groupsById[selectedGroup].filters || [];\n }\n return { groupCount, selectedGroup, groupFilters };\n }\n);\n\nexport const getLimitMaxed = createSelector([getAcceptedDevices, getDeviceLimit], ({ total: acceptedDevices = 0 }, deviceLimit) =>\n Boolean(deviceLimit && deviceLimit <= acceptedDevices)\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getGroupsByIdWithoutUngrouped = createSelector([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);\n\nexport const getGroups = createSelector([getGroupsById], groupsById => {\n const groupNames = Object.keys(groupsById).sort();\n const groupedGroups = Object.entries(groupsById)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .reduce(\n (accu, [groupname, group]) => {\n const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;\n const groupItem = { ...group, groupId: name, name: groupname };\n if (group.filters.length > 0) {\n if (groupname !== UNGROUPED_GROUP.id) {\n accu.dynamic.push(groupItem);\n } else {\n accu.ungrouped.push(groupItem);\n }\n } else {\n accu.static.push(groupItem);\n }\n return accu;\n },\n { dynamic: [], static: [], ungrouped: [] }\n );\n return { groupNames, ...groupedGroups };\n});\nexport const getAttributesList = createSelector(\n [getFilteringAttributes, getFilteringAttributesFromConfig],\n ({ identityAttributes = [], inventoryAttributes = [] }, { identity = [], inventory = [] }) =>\n [...identityAttributes, ...inventoryAttributes, ...identity, ...inventory].filter(duplicateFilter)\n);\n\nexport const getDeviceTypes = createSelector([getAcceptedDevices, getDevicesById], ({ deviceIds = [] }, devicesById) =>\n Object.keys(\n deviceIds.slice(0, 200).reduce((accu, item) => {\n const { device_type: deviceTypes = [] } = devicesById[item] ? devicesById[item].attributes : {};\n accu = deviceTypes.reduce((deviceTypeAccu, deviceType) => {\n if (deviceType.length > 1) {\n deviceTypeAccu[deviceType] = deviceTypeAccu[deviceType] ? deviceTypeAccu[deviceType] + 1 : 1;\n }\n return deviceTypeAccu;\n }, accu);\n return accu;\n }, {})\n )\n);\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const getIssueCountsByType = state => state.monitor.issueCounts.byType;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport const getOnboarding = state => state.onboarding;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { EXTERNAL_PROVIDER } from '@northern.tech/store/constants';\nimport { createSelector } from '@reduxjs/toolkit';\n\nexport const getOrganization = state => state.organization.organization;\nexport const getExternalIntegrations = state => state.organization.externalDeviceIntegrations;\nexport const getAuditlogState = state => state.organization.auditlog.selectionState;\nexport const getAuditLog = state => state.organization.auditlog.events;\nexport const getAuditLogSelectionState = state => state.organization.auditlog.selectionState;\nexport const getSsoConfig = ({ organization: { ssoConfigs = [] } }) => ssoConfigs[0];\nexport const getTenantsList = state => state.organization.tenantList;\nexport const getWebhookEvents = state => state.organization.webhooks.events;\nexport const getWebhookEventTotal = state => state.organization.webhooks.eventTotal;\n\nexport const getDeviceTwinIntegrations = createSelector([getExternalIntegrations], integrations =>\n integrations.filter(integration => integration.id && EXTERNAL_PROVIDER[integration.provider]?.deviceTwin)\n);\nexport const getIsServiceProvider = state => state.organization.organization.service_provider;\n\nexport const getWebhooks = createSelector([getExternalIntegrations], integrations =>\n integrations.filter(integration => integration.id && integration.provider === EXTERNAL_PROVIDER.webhook.provider)\n);\nexport const getWebhookEventInfo = createSelector([getWebhooks, getWebhookEvents, getWebhookEventTotal], (webhooks, events, eventTotal) =>\n webhooks.length ? { events, eventTotal } : { events: [], eventTotal: 0 }\n);\n\nexport const getAuditLogEntry = createSelector([getAuditLog, getAuditLogSelectionState], (events, { selectedId }) => {\n if (!selectedId) {\n return;\n }\n const [eventAction, eventTime] = atob(selectedId).split('|');\n return events.find(item => item.action === eventAction && item.time === eventTime);\n});\n","// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { duplicateFilter, yes } from '@northern.tech/utils/helpers';\n\nimport { ATTRIBUTE_SCOPES, DEVICE_FILTERING_OPTIONS, DEVICE_ISSUE_OPTIONS, DEVICE_LIST_MAXIMUM_LENGTH, emptyUiPermissions } from './commonConstants';\nimport {\n DARK_MODE,\n DEPLOYMENT_STATES,\n defaultStats,\n deploymentDisplayStates,\n deploymentStatesToSubstates,\n deploymentStatesToSubstatesWithSkipped,\n emptyFilter\n} from './constants';\n\n// for some reason these functions can not be stored in the deviceConstants...\nconst filterProcessors = {\n $gt: val => Number(val) || val,\n $gte: val => Number(val) || val,\n $lt: val => Number(val) || val,\n $lte: val => Number(val) || val,\n $in: val => ('' + val).split(',').map(i => i.trim()),\n $nin: val => ('' + val).split(',').map(i => i.trim()),\n $exists: yes,\n $nexists: () => false\n};\nconst filterAliases = {\n $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }\n};\nexport const mapFiltersToTerms = filters =>\n filters.map(filter => ({\n scope: filter.scope,\n attribute: filter.key,\n type: filterAliases[filter.operator]?.alias || filter.operator,\n value: filterProcessors.hasOwnProperty(filter.operator) ? filterProcessors[filter.operator](filter.value) : filter.value\n }));\nexport const mapTermsToFilters = terms =>\n terms.map(term => {\n const aliasedFilter = Object.entries(filterAliases).find(\n aliasDefinition => aliasDefinition[1].alias === term.type && aliasDefinition[1].value === term.value\n );\n const operator = aliasedFilter ? aliasedFilter[0] : term.type;\n return { scope: term.scope, key: term.attribute, operator, value: term.value };\n });\n\nconst convertIssueOptionsToFilters = (issuesSelection, filtersState = {}) =>\n issuesSelection.map(item => {\n if (typeof DEVICE_ISSUE_OPTIONS[item].filterRule.value === 'function') {\n return { ...DEVICE_ISSUE_OPTIONS[item].filterRule, value: DEVICE_ISSUE_OPTIONS[item].filterRule.value(filtersState) };\n }\n return DEVICE_ISSUE_OPTIONS[item].filterRule;\n });\n\nexport const convertDeviceListStateToFilters = ({ filters = [], group, groups = { byId: {} }, offlineThreshold, selectedIssues = [], status }) => {\n let applicableFilters = [...filters];\n if (typeof group === 'string' && !(groups.byId[group]?.filters || applicableFilters).length) {\n applicableFilters.push({ key: 'group', value: group, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'system' });\n }\n const nonMonitorFilters = applicableFilters.filter(\n filter =>\n !Object.values(DEVICE_ISSUE_OPTIONS).some(\n ({ filterRule }) => filter.scope !== 'inventory' && filterRule.scope === filter.scope && filterRule.key === filter.key\n )\n );\n const deviceIssueFilters = convertIssueOptionsToFilters(selectedIssues, { offlineThreshold });\n applicableFilters = [...nonMonitorFilters, ...deviceIssueFilters];\n const effectiveFilters = status\n ? [...applicableFilters, { key: 'status', value: status, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'identity' }]\n : applicableFilters;\n return { applicableFilters: nonMonitorFilters, filterTerms: mapFiltersToTerms(effectiveFilters) };\n};\n\nconst filterCompare = (filter, item) => Object.keys(emptyFilter).every(key => item[key].toString() === filter[key].toString());\n\nexport const filtersFilter = (item, index, array) => {\n const firstIndex = array.findIndex(filter => filterCompare(filter, item));\n return firstIndex === index;\n};\n\nexport const listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => {\n return ids.slice(0, cutOffSize).reduce((accu, id) => {\n if (id && byId[id]) {\n accu.push({ ...defaultObject, ...byId[id] });\n }\n return accu;\n }, []);\n};\n\nexport const mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) =>\n Object.entries(existingPermissions).reduce(\n (accu, [key, value]) => {\n let values;\n if (!accu[key]) {\n accu[key] = value;\n return accu;\n }\n if (Array.isArray(value)) {\n values = [...value, ...accu[key]].filter(duplicateFilter);\n } else {\n values = mergePermissions(accu[key], { ...value });\n }\n accu[key] = values;\n return accu;\n },\n { ...addedPermissions }\n );\n\nexport const mapUserRolesToUiPermissions = (userRoles, roles) =>\n userRoles.reduce(\n (accu, roleId) => {\n if (!(roleId && roles[roleId])) {\n return accu;\n }\n return mergePermissions(accu, roles[roleId].uiPermissions);\n },\n { ...emptyUiPermissions }\n );\n\nexport const progress = ({ loaded, total }) => {\n let uploadProgress = (loaded / total) * 100;\n return (uploadProgress = uploadProgress < 50 ? Math.ceil(uploadProgress) : Math.round(uploadProgress));\n};\n\nexport const getComparisonCompatibleVersion = version => (isNaN(version.charAt(0)) && version !== 'next' ? 'master' : version);\n\nexport const stringToBoolean = content => {\n if (!content) {\n return false;\n }\n const string = content + '';\n switch (string.trim().toLowerCase()) {\n case 'true':\n case 'yes':\n case '1':\n return true;\n case 'false':\n case 'no':\n case '0':\n case null:\n return false;\n default:\n return Boolean(string);\n }\n};\n\nexport const groupDeploymentDevicesStats = deployment => {\n const deviceStatCollector = (deploymentStates, devices) =>\n Object.values(devices).reduce((accu, device) => (deploymentStates.includes(device.status) ? accu + 1 : accu), 0);\n\n const inprogress = deviceStatCollector(deploymentStatesToSubstates.inprogress, deployment.devices);\n const pending = deviceStatCollector(deploymentStatesToSubstates.pending, deployment.devices);\n const successes = deviceStatCollector(deploymentStatesToSubstates.successes, deployment.devices);\n const failures = deviceStatCollector(deploymentStatesToSubstates.failures, deployment.devices);\n const paused = deviceStatCollector(deploymentStatesToSubstates.paused, deployment.devices);\n return { inprogress, paused, pending, successes, failures };\n};\n\nexport const statCollector = (items, statistics) => items.reduce((accu, property) => accu + Number(statistics[property] || 0), 0);\nexport const groupDeploymentStats = (deployment, withSkipped) => {\n const { statistics = {} } = deployment;\n const { status = {} } = statistics;\n const stats = { ...defaultStats, ...status };\n let groupStates = deploymentStatesToSubstates;\n let result = {};\n if (withSkipped) {\n groupStates = deploymentStatesToSubstatesWithSkipped;\n result.skipped = statCollector(groupStates.skipped, stats);\n }\n result = {\n ...result,\n // don't include 'pending' as inprogress, as all remaining devices will be pending - we don't discriminate based on phase membership\n inprogress: statCollector(groupStates.inprogress, stats),\n pending: (deployment.max_devices ? deployment.max_devices - deployment.device_count : 0) + statCollector(groupStates.pending, stats),\n successes: statCollector(groupStates.successes, stats),\n failures: statCollector(groupStates.failures, stats),\n paused: statCollector(groupStates.paused, stats)\n };\n return result;\n};\n\nexport const getDeploymentState = deployment => {\n const { status: deploymentStatus = DEPLOYMENT_STATES.pending } = deployment;\n const { inprogress: currentProgressCount, paused } = groupDeploymentStats(deployment);\n\n let status = deploymentDisplayStates[deploymentStatus];\n if (deploymentStatus === DEPLOYMENT_STATES.pending && currentProgressCount === 0) {\n status = 'queued';\n } else if (paused > 0) {\n status = deploymentDisplayStates.paused;\n }\n return status;\n};\n\nexport const generateDeploymentGroupDetails = (filter, groupName) =>\n filter && filter.terms?.length\n ? `${groupName} (${filter.terms\n .map(filter => `${filter.attribute || filter.key} ${DEVICE_FILTERING_OPTIONS[filter.type || filter.operator].shortform} ${filter.value}`)\n .join(', ')})`\n : groupName;\n\nexport const mapDeviceAttributes = (attributes = []) =>\n attributes.reduce(\n (accu, attribute) => {\n if (!(attribute.value && attribute.name) && attribute.scope === ATTRIBUTE_SCOPES.inventory) {\n return accu;\n }\n accu[attribute.scope || ATTRIBUTE_SCOPES.inventory] = {\n ...accu[attribute.scope || ATTRIBUTE_SCOPES.inventory],\n [attribute.name]: attribute.value\n };\n if (attribute.name === 'device_type' && attribute.scope === ATTRIBUTE_SCOPES.inventory) {\n accu.inventory.device_type = [].concat(attribute.value);\n }\n return accu;\n },\n { inventory: { device_type: [], artifact_name: '' }, identity: {}, monitor: {}, system: {}, tags: {} }\n );\n\nexport const isDarkMode = mode => mode === DARK_MODE;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { listItemMapper } from '@northern.tech/store/utils';\nimport { createSelector } from '@reduxjs/toolkit';\n\nconst getSelectedReleaseId = state => state.releases.selectedRelease;\nexport const getReleasesById = state => state.releases.byId;\nexport const getReleaseTags = state => state.releases.tags;\nexport const getReleaseListState = state => state.releases.releasesList;\nconst getListedReleases = state => state.releases.releasesList.releaseIds;\nexport const getUpdateTypes = state => state.releases.updateTypes;\n\nconst getReleaseMappingDefaults = () => ({});\nexport const getReleasesList = createSelector([getReleasesById, getListedReleases, getReleaseMappingDefaults], listItemMapper);\n\nexport const getReleaseTagsById = createSelector([getReleaseTags], releaseTags => releaseTags.reduce((accu, key) => ({ ...accu, [key]: key }), {}));\nexport const getHasReleases = createSelector(\n [getReleaseListState, getReleasesById],\n ({ searchTotal, total }, byId) => !!(Object.keys(byId).length || total || searchTotal)\n);\n\nexport const getSelectedRelease = createSelector([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id] ?? {});\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { DEVICE_ONLINE_CUTOFF, defaultIdAttribute } from '@northern.tech/store/constants';\nimport { isDarkMode } from '@northern.tech/store/utils';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport { READ_STATES, twoFAStates } from './constants';\n\nexport const getRolesById = state => state.users.rolesById;\nexport const getTooltipsById = state => state.users.tooltips.byId;\nexport const getGlobalSettings = state => state.users.globalSettings;\n\nconst getCurrentUserId = state => state.users.currentUser;\nconst getUsersById = state => state.users.byId;\nexport const getCurrentUser = createSelector([getUsersById, getCurrentUserId], (usersById, userId) => usersById[userId] ?? {});\nexport const getUserSettings = state => state.users.userSettings;\n\nexport const getIsDarkMode = createSelector([getUserSettings], ({ mode }) => isDarkMode(mode));\n\nexport const getShowHelptips = createSelector([getTooltipsById], tooltips =>\n Object.values(tooltips).reduce((accu, { readState }) => accu || readState === READ_STATES.unread, false)\n);\n\nexport const getTooltipsState = createSelector([getTooltipsById, getUserSettings], (byId, { tooltips = {} }) =>\n Object.entries(byId).reduce(\n (accu, [id, value]) => {\n accu[id] = { ...accu[id], ...value };\n return accu;\n },\n { ...tooltips }\n )\n);\n\nexport const getHas2FA = createSelector(\n [getCurrentUser],\n currentUser => currentUser.hasOwnProperty('tfa_status') && currentUser.tfa_status === twoFAStates.enabled\n);\n\nexport const getIdAttribute = createSelector([getGlobalSettings], ({ id_attribute = { ...defaultIdAttribute } }) => id_attribute);\n\nexport const getOfflineThresholdSettings = createSelector([getGlobalSettings], ({ offlineThreshold }) => ({\n interval: offlineThreshold?.interval || DEVICE_ONLINE_CUTOFF.interval,\n intervalUnit: offlineThreshold?.intervalUnit || DEVICE_ONLINE_CUTOFF.intervalName\n}));\n\nexport const getRolesList = createSelector([getRolesById], rolesById => Object.entries(rolesById).map(([id, role]) => ({ id, ...role })));\n\nexport const getCurrentSession = state => state.users.currentSession;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { SORTING_OPTIONS } from '@northern.tech/store/constants';\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const sliceName = 'app';\n\nconst getYesterday = () => {\n const today = new Date();\n today.setDate(today.getDate() - 1);\n return today.toISOString();\n};\n\nexport const initialState = {\n cancelSource: undefined,\n demoArtifactLink: 'https://dgsbl4vditpls.cloudfront.net/mender-demo-artifact.mender',\n hostAddress: null,\n snackbar: {\n open: false,\n message: '',\n maxWidth: 900,\n autoHideDuration: undefined,\n action: undefined,\n children: undefined,\n onClick: undefined,\n onClose: undefined\n },\n // return boolean rather than organization details\n features: {\n hasAuditlogs: false,\n hasDeltaProgress: false,\n hasMultitenancy: false,\n hasDeviceConfig: false,\n hasDeviceConnect: false,\n hasFeedbackEnabled: false,\n hasMonitor: false,\n hasReporting: false,\n isDemoMode: false,\n isHosted: false,\n isEnterprise: false\n },\n feedbackProbability: 0.3,\n firstLoginAfterSignup: false,\n hostedAnnouncement: '',\n docsVersion: '',\n recaptchaSiteKey: '',\n searchState: {\n deviceIds: [],\n searchTerm: '',\n searchTotal: 0,\n sort: {\n direction: SORTING_OPTIONS.desc\n // key: null,\n // scope: null\n }\n },\n stripeAPIKey: '',\n trackerCode: '',\n uploadsById: {\n // id: { uploading: false, uploadProgress: 0, cancelSource: undefined }\n },\n newThreshold: getYesterday(),\n offlineThreshold: getYesterday(),\n versionInformation: {\n Integration: '',\n 'Mender-Client': '',\n 'Mender-Artifact': '',\n 'Meta-Mender': '',\n Deployments: '',\n Deviceauth: '',\n Inventory: '',\n GUI: 'latest'\n },\n yesterday: undefined\n};\n\nexport const appSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n setFeatures: (state, action) => {\n state.features = {\n ...state.features,\n ...action.payload\n };\n },\n setSnackbar: (state, { payload }) => {\n let { message, autoHideDuration, action, children, onClick, onClose } = payload;\n if (typeof payload === 'string' || payload instanceof String) {\n message = payload;\n }\n state.snackbar = {\n open: message ? true : false,\n message,\n maxWidth: 900,\n autoHideDuration,\n action,\n children,\n onClick,\n onClose\n };\n },\n setFirstLoginAfterSignup: (state, action) => {\n state.firstLoginAfterSignup = action.payload;\n },\n setAnnouncement: (state, action) => {\n state.hostedAnnouncement = action.payload;\n },\n setSearchState: (state, action) => {\n state.searchState = {\n ...state.searchState,\n ...action.payload\n };\n },\n setOfflineThreshold: (state, action) => {\n state.offlineThreshold = action.payload;\n },\n initUpload: (state, action) => {\n const { id, upload } = action.payload;\n state.uploadsById[id] = upload;\n },\n uploadProgress: (state, action) => {\n const { id, progress } = action.payload;\n state.uploadsById[id] = {\n ...state.uploadsById[id],\n progress\n };\n },\n cleanUpUpload: (state, action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: current, ...remainder } = state.uploadsById;\n state.uploadsById = remainder;\n },\n setVersionInformation: (state, action) => {\n state.versionInformation = {\n ...state.versionInformation,\n ...action.payload\n };\n },\n setEnvironmentData: (state, action) => {\n return { ...state, ...action.payload };\n }\n }\n});\n\nexport const actions = appSlice.actions;\nexport default appSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { DEVICE_LIST_DEFAULTS } from '@northern.tech/store/constants';\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport { DEFAULT_PENDING_INPROGRESS_COUNT, DEPLOYMENT_ROUTES, DEPLOYMENT_STATES, deploymentPrototype, limitDefault } from './constants';\n\nexport const sliceName = 'deployments';\n\nexport const initialState = {\n byId: {\n // [id]: { statistics: { status: {}, total_size }, devices: { [deploymentId]: { id, log } }, totalDeviceCount }\n },\n byStatus: {\n finished: { deploymentIds: [], total: 0 },\n inprogress: { deploymentIds: [], total: 0 },\n pending: { deploymentIds: [], total: 0 },\n scheduled: { deploymentIds: [], total: 0 }\n },\n config: {\n binaryDelta: {\n timeout: -1,\n duplicatesWindow: -1,\n compressionLevel: -1,\n disableChecksum: false,\n disableDecompression: false,\n inputWindow: -1,\n instructionBuffer: -1,\n sourceWindow: -1\n },\n binaryDeltaLimits: {\n timeout: { ...limitDefault, default: 60, max: 3600, min: 60 },\n sourceWindow: limitDefault,\n inputWindow: limitDefault,\n duplicatesWindow: limitDefault,\n instructionBuffer: limitDefault\n }\n },\n deploymentDeviceLimit: 5000,\n selectedDeviceIds: [],\n selectionState: {\n finished: { ...DEVICE_LIST_DEFAULTS, endDate: undefined, search: '', selection: [], startDate: undefined, total: 0, type: '' },\n inprogress: { ...DEVICE_LIST_DEFAULTS, perPage: DEFAULT_PENDING_INPROGRESS_COUNT, selection: [] },\n pending: { ...DEVICE_LIST_DEFAULTS, perPage: DEFAULT_PENDING_INPROGRESS_COUNT, selection: [] },\n scheduled: { ...DEVICE_LIST_DEFAULTS, selection: [] },\n general: {\n state: DEPLOYMENT_ROUTES.active.key,\n showCreationDialog: false,\n showReportDialog: false,\n reportType: null // DeploymentConstants.DEPLOYMENT_TYPES.configuration|DeploymentConstants.DEPLOYMENT_TYPES.software\n },\n selectedId: undefined\n }\n};\n\nexport const deploymentsSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n createdDeployment: (state, action) => {\n state.byId[action.payload.id] = {\n ...deploymentPrototype,\n ...action.payload\n };\n state.byStatus[DEPLOYMENT_STATES.pending].total = state.byStatus[DEPLOYMENT_STATES.pending].total + 1;\n state.byStatus[DEPLOYMENT_STATES.pending].deploymentIds = [...state.byStatus.pending.deploymentIds, action.payload.id];\n (state.selectionState[DEPLOYMENT_STATES.pending].selection = [action.payload.id, ...state.selectionState[DEPLOYMENT_STATES.pending].selection]),\n (state.selectionState[DEPLOYMENT_STATES.pending].total = state.selectionState[DEPLOYMENT_STATES.pending].total + 1);\n },\n removedDeployment: (state, action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: removedDeployment, ...remainder } = state.byId;\n state.byId = remainder;\n },\n receivedDeployment: (state, action) => {\n state.byId[action.payload.id] = {\n ...(state.byId[action.payload.id] || {}),\n ...action.payload\n };\n },\n receivedDeploymentDeviceLog: (state, action) => {\n const { id, deviceId, log } = action.payload;\n const deployment = {\n ...deploymentPrototype,\n ...state.byId[id]\n };\n state.byId[id] = {\n ...deployment,\n devices: {\n ...deployment.devices,\n [deviceId]: {\n ...deployment.devices[deviceId],\n log\n }\n }\n };\n },\n receivedDeploymentDevices: (state, action) => {\n const { id, devices, selectedDeviceIds, totalDeviceCount } = action.payload;\n state.byId[id] = {\n ...state.byId[id],\n devices,\n totalDeviceCount\n };\n state.selectedDeviceIds = selectedDeviceIds;\n },\n receivedDeployments: (state, action) => {\n state.byId = {\n ...state.byId,\n ...action.payload\n };\n },\n receivedDeploymentsForStatus: (state, action) => {\n const { status, deploymentIds, total } = action.payload;\n state.byStatus[status].deploymentIds = deploymentIds;\n state.byStatus[status].total = total;\n },\n selectDeploymentsForStatus: (state, action) => {\n const { status, deploymentIds, total } = action.payload;\n state.selectionState[status].selection = deploymentIds;\n state.selectionState[status].total = total;\n },\n setDeploymentsState: (state, action) => {\n state.selectionState = action.payload;\n },\n setDeploymentsConfig: (state, action) => {\n state.config = action.payload;\n }\n }\n});\n\nexport const actions = deploymentsSlice.actions;\nexport default deploymentsSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { DEVICE_LIST_DEFAULTS, SORTING_OPTIONS } from '@northern.tech/store/commonConstants';\nimport { deepCompare, duplicateFilter } from '@northern.tech/utils/helpers';\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport { DEVICE_STATES } from './constants';\n\nexport const sliceName = 'devices';\n\nexport const initialState = {\n byId: {\n // [deviceId]: {\n // ...,\n // twinsByIntegration: { [external.provider.id]: twinData }\n // }\n },\n byStatus: {\n [DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },\n active: { deviceIds: [], total: 0 },\n inactive: { deviceIds: [], total: 0 },\n [DEVICE_STATES.pending]: { deviceIds: [], total: 0 },\n [DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },\n [DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }\n },\n deviceList: {\n deviceIds: [],\n ...DEVICE_LIST_DEFAULTS,\n selectedAttributes: [],\n selectedIssues: [],\n selection: [],\n sort: {\n direction: SORTING_OPTIONS.desc\n // key: null,\n // scope: null\n },\n state: DEVICE_STATES.accepted,\n total: 0\n },\n filters: [\n // { key: 'device_type', value: 'raspberry', operator: '$eq', scope: 'inventory' }\n ],\n filteringAttributes: { identityAttributes: [], inventoryAttributes: [], systemAttributes: [], tagAttributes: [] },\n filteringAttributesLimit: 10,\n filteringAttributesConfig: {\n attributes: {\n // inventory: ['some_attribute']\n },\n count: 0,\n limit: 100\n },\n reports: [\n // { items: [{ key: \"someKey\", count: 42 }], otherCount: 123, total: <otherCount + itemsCount> }\n ],\n total: 0,\n limit: 0,\n groups: {\n byId: {\n // groupName: { deviceIds: [], total: 0, filters: [] },\n // dynamo: { deviceIds: [], total: 3, filters: [{ a: 1 }] }\n },\n selectedGroup: undefined\n }\n};\n\nexport const devicesSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n receivedGroups: (state, action) => {\n state.groups.byId = action.payload;\n },\n addToGroup: (state, action) => {\n const { group, deviceIds } = action.payload;\n const maybeExistingGroup = {\n filters: [],\n deviceIds: [],\n ...state.groups.byId[group]\n };\n state.groups.byId[group] = {\n ...maybeExistingGroup,\n deviceIds: [...maybeExistingGroup.deviceIds, ...deviceIds].filter(duplicateFilter),\n total: (maybeExistingGroup.total || 0) + 1\n };\n },\n removeFromGroup: (state, action) => {\n const { group, deviceIds: removedIds } = action.payload;\n const { deviceIds = [], total = 0, ...maybeExistingGroup } = state.groups.byId[group] || {};\n const changedGroup = {\n ...maybeExistingGroup,\n deviceIds: deviceIds.filter(id => !removedIds.includes(id)),\n total: Math.max(total - removedIds.length, 0)\n };\n if (changedGroup.total || changedGroup.deviceIds.length) {\n state.groups.byId[group] = changedGroup;\n return;\n } else if (state.groups.selectedGroup === group) {\n state.groups.selectedGroup = undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [group]: removal, ...remainingById } = state.groups.byId;\n state.groups.byId = remainingById;\n },\n addGroup: (state, action) => {\n const { groupName, group } = action.payload;\n state.groups.byId[groupName] = {\n ...state.groups.byId[groupName],\n ...group\n };\n },\n selectGroup: (state, { payload: group }) => {\n state.deviceList.deviceIds = state.groups.byId[group] && state.groups.byId[group].deviceIds.length > 0 ? state.groups.byId[group].deviceIds : [];\n state.groups.selectedGroup = group;\n },\n removeGroup: (state, action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: removal, ...remainingById } = state.groups.byId;\n state.groups.byId = remainingById;\n state.groups.selectedGroup = state.groups.selectedGroup === action.payload ? undefined : state.groups.selectedGroup;\n },\n setDeviceListState: (state, action) => {\n state.deviceList = {\n ...state.deviceList,\n ...action.payload,\n sort: {\n ...state.deviceList.sort,\n ...action.payload.sort\n }\n };\n },\n setFilterAttributes: (state, action) => {\n state.filteringAttributes = action.payload;\n },\n setFilterablesConfig: (state, action) => {\n state.filteringAttributesConfig = action.payload;\n },\n receivedDevices: (state, action) => {\n state.byId = {\n ...state.byId,\n ...action.payload\n };\n },\n setDeviceFilters: (state, action) => {\n if (deepCompare(action.payload, state.filters)) {\n return;\n }\n state.filters = action.payload.filter(filter => filter.key && filter.operator && filter.scope && typeof filter.value !== 'undefined');\n },\n setInactiveDevices: (state, action) => {\n const { activeDeviceTotal, inactiveDeviceTotal } = action.payload;\n state.byStatus.active.total = activeDeviceTotal;\n state.byStatus.inactive.total = inactiveDeviceTotal;\n },\n setDeviceReports: (state, action) => {\n state.reports = action.payload;\n },\n setDevicesByStatus: (state, action) => {\n const { forceUpdate, status, total, deviceIds } = action.payload;\n state.byStatus[status] = total || forceUpdate ? { deviceIds, total } : state.byStatus[status];\n },\n setDevicesCountByStatus: (state, action) => {\n const { count, status } = action.payload;\n state.byStatus[status].total = count;\n },\n setTotalDevices: (state, action) => {\n state.total = action.payload;\n },\n setDeviceLimit: (state, action) => {\n state.limit = action.payload;\n },\n receivedDevice: (state, action) => {\n state.byId[action.payload.id] = {\n ...state.byId[action.payload.id],\n ...action.payload\n };\n },\n maybeUpdateDevicesByStatus: (state, action) => {\n const { deviceId, authId } = action.payload;\n const device = state.byId[deviceId];\n const hasMultipleAuthSets = authId ? device.auth_sets.filter(authset => authset.id !== authId).length > 0 : false;\n if (!hasMultipleAuthSets && Object.values(DEVICE_STATES).includes(device.status)) {\n const deviceIds = state.byStatus[device.status].deviceIds.filter(id => id !== deviceId);\n state.byStatus[device.status] = { deviceIds, total: Math.max(0, state.byStatus[device.status].total - 1) };\n }\n }\n }\n});\n\nexport const actions = devicesSlice.actions;\nexport default devicesSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { DEVICE_ISSUE_OPTIONS, DEVICE_LIST_DEFAULTS } from '@northern.tech/store/commonConstants';\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport { alertChannels } from './constants';\n\nexport const sliceName = 'monitor';\n\nexport const initialState = {\n alerts: {\n alertList: { ...DEVICE_LIST_DEFAULTS, total: 0 },\n byDeviceId: {}\n },\n issueCounts: {\n byType: Object.values(DEVICE_ISSUE_OPTIONS).reduce((accu, { key }) => ({ ...accu, [key]: { filtered: 0, total: 0 } }), {})\n },\n settings: {\n global: {\n channels: {\n ...Object.keys(alertChannels).reduce((accu, item) => ({ ...accu, [item]: { enabled: true } }), {})\n }\n }\n }\n};\n\nexport const monitorSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n changeAlertChannel: (state, action) => {\n const { channel, enabled } = action.payload;\n state.settings.global.channels[channel] = { enabled };\n },\n receiveDeviceAlerts: (state, action) => {\n const { deviceId, alerts } = action.payload;\n state.alerts.byDeviceId[deviceId] = { alerts };\n },\n receiveLatestDeviceAlerts: (state, action) => {\n const { deviceId, alerts } = action.payload;\n state.alerts.byDeviceId[deviceId] = { ...state.alerts.byDeviceId[deviceId], latest: alerts };\n },\n receiveDeviceIssueCounts: (state, action) => {\n const { issueType, counts } = action.payload;\n state.issueCounts.byType[issueType] = counts;\n },\n setAlertListState: (state, action) => {\n state.alerts.alertList = { ...state.alerts.alertList, ...action.payload };\n }\n }\n});\n\nexport const actions = monitorSlice.actions;\nexport default monitorSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const sliceName = 'onboarding';\n\nexport const initialState = {\n approach: null,\n complete: false,\n deviceType: null,\n demoArtifactPort: 85,\n progress: null,\n showTips: null,\n showTipsDialog: false\n};\n\nexport const onboardingSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n setOnboardingState: (state, action) => {\n return { ...state, ...action.payload };\n },\n setDemoArtifactPort: (state, action) => {\n state.demoArtifactPort = action.payload;\n },\n setShowOnboardingHelp: (state, action) => {\n state.showTips = action.payload;\n },\n setShowDismissOnboardingTipsDialog: (state, action) => {\n state.showTipsDialog = action.payload;\n },\n setOnboardingComplete: (state, action) => {\n state.complete = action.payload;\n },\n setOnboardingProgress: (state, action) => {\n state.progress = action.payload;\n },\n setOnboardingDeviceType: (state, action) => {\n state.deviceType = action.payload;\n },\n setOnboardingApproach: (state, action) => {\n state.approach = action.payload;\n }\n }\n});\n\nexport const actions = onboardingSlice.actions;\nexport default onboardingSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { DEVICE_LIST_DEFAULTS, SORTING_OPTIONS, TENANT_LIST_DEFAULT } from '@northern.tech/store/constants';\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const sliceName = 'organization';\n\nexport const initialState = {\n card: {\n last4: '',\n expiration: { month: 1, year: 2020 },\n brand: ''\n },\n intentId: null,\n tenantList: {\n ...TENANT_LIST_DEFAULT,\n total: 0,\n tenants: [],\n selectedTenant: null,\n sort: {\n direction: SORTING_OPTIONS.desc,\n key: 'name'\n }\n },\n organization: {\n // id, name, status, tenant_token, plan\n },\n auditlog: {\n events: [],\n selectionState: {\n ...DEVICE_LIST_DEFAULTS,\n detail: undefined,\n endDate: undefined,\n selectedIssue: undefined,\n sort: { direction: SORTING_OPTIONS.desc },\n startDate: undefined,\n total: 0,\n type: undefined,\n user: undefined\n }\n },\n externalDeviceIntegrations: [\n // { <connection_string|x509|...>, id, provider }\n ],\n ssoConfigs: [],\n webhooks: {\n // [id]: { events: [] }\n // for now:\n events: [],\n eventsTotal: 0\n }\n};\n\nexport const organizationSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n receiveAuditLogs: (state, action) => {\n const { events, total } = action.payload;\n state.auditlog.events = events;\n state.auditlog.selectionState.total = total;\n },\n setAuditLogState: (state, action) => {\n state.auditlog.selectionState = {\n ...state.auditlog.selectionState,\n ...action.payload\n };\n },\n receiveCurrentCard: (state, action) => {\n state.card = action.payload;\n },\n receiveSetupIntent: (state, action) => {\n state.intentId = action.payload;\n },\n setOrganization: (state, action) => {\n state.organization = { ...state.organization, ...action.payload };\n },\n setTenantListState: (state, action) => {\n state.tenantList = action.payload;\n },\n receiveExternalDeviceIntegrations: (state, action) => {\n state.externalDeviceIntegrations = action.payload;\n },\n receiveSsoConfigs: (state, action) => {\n state.ssoConfigs = action.payload;\n },\n receiveWebhookEvents: (state, action) => {\n const { value, total } = action.payload;\n state.webhooks.events = value;\n state.webhooks.eventsTotal = total;\n }\n }\n});\n\nexport const actions = organizationSlice.actions;\nexport default organizationSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { DEVICE_LIST_DEFAULTS, SORTING_OPTIONS } from '@northern.tech/store/constants';\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const sliceName = 'releases';\n\nexport const initialState = {\n /*\n * Return list of saved artifacts objects\n */\n /*\n * return list of artifacts where duplicate names are collated with device compatibility lists combined\n */\n // artifacts: AppStore.getCollatedArtifacts(AppStore.getArtifactsRepo()),\n artifacts: [],\n /*\n * Return list of saved release objects\n */\n byId: {\n /*\n [releaseName]: {\n artifacts: [\n {\n id: '',\n name: '',\n description: '',\n device_types_compatible: [],\n ...\n updates: [{\n files: [\n { size: 123, name: '' }\n ],\n type_info: { type: '' }\n }],\n url: '' // optional\n }\n ],\n modified: ''\n device_types_compatible,\n name: '',\n tags: ['something'],\n notes: ''\n }\n */\n },\n releasesList: {\n ...DEVICE_LIST_DEFAULTS,\n searchedIds: [],\n releaseIds: [],\n selection: [],\n sort: {\n direction: SORTING_OPTIONS.desc,\n key: 'modified'\n },\n isLoading: undefined,\n searchTerm: '',\n searchTotal: 0,\n selectedTags: [],\n total: 0,\n type: ''\n },\n tags: [],\n updateTypes: [],\n /*\n * Return single release with corresponding Artifacts\n */\n selectedRelease: null\n};\n\nexport const releaseSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n receiveRelease: (state, action) => {\n const { name } = action.payload;\n state.byId[name] = action.payload;\n },\n receiveReleases: (state, action) => {\n state.byId = action.payload;\n },\n receiveReleaseTags: (state, action) => {\n state.tags = action.payload;\n },\n receiveReleaseTypes: (state, action) => {\n state.updateTypes = action.payload;\n },\n removeRelease: (state, action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: toBeRemoved, ...byId } = state.byId;\n state.byId = byId;\n state.selectedRelease = action.payload === state.selectedRelease ? null : state.selectedRelease;\n },\n selectedRelease: (state, action) => {\n state.selectedRelease = action.payload;\n },\n setReleaseListState: (state, action) => {\n state.releasesList = action.payload;\n }\n }\n});\n\nexport const actions = releaseSlice.actions;\nexport default releaseSlice.reducer;\n","// Copyright 2023 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport { READ_STATES, defaultPermissionSets, rolesById } from './constants';\n\nexport const sliceName = 'users';\n\nexport const initialState = {\n activationCode: undefined,\n byId: {},\n currentUser: null,\n currentSession: {\n // { token: window.localStorage.getItem('JWT'), expiresAt: '2023-01-01T00:15:00.000Z' | undefined }, // expiresAt depending on the stay logged in setting\n },\n customColumns: [],\n qrCode: null,\n globalSettings: {\n id_attribute: undefined,\n previousFilters: [],\n previousPhases: [],\n retries: 0\n },\n permissionSetsById: {\n ...defaultPermissionSets\n },\n rolesById: {\n ...rolesById\n },\n settingsInitialized: false,\n showConnectDeviceDialog: false,\n showFeedbackDialog: false,\n showStartupNotification: false,\n tooltips: {\n byId: {\n // <id>: { readState: <read|unread> } // this object is getting enhanced by the tooltip texts in the app constants\n }\n },\n userSettings: {\n columnSelection: [],\n onboarding: {}\n },\n userSettingsInitialized: false\n};\n\nexport const usersSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n receivedQrCode: (state, action) => {\n state.qrCode = action.payload;\n },\n successfullyLoggedIn: (state, action) => {\n state.currentSession = action.payload;\n },\n receivedUserList: (state, action) => {\n state.byId = action.payload;\n },\n receivedActivationCode: (state, action) => {\n state.activationCode = action.payload;\n },\n receivedUser: (state, action) => {\n state.byId[action.payload.id] = action.payload;\n state.currentUser = action.payload.id;\n },\n createdUser: (state, action) => {\n // the new user gets a 0 as id, since this will be overwritten by the retrieved userlist anyway + there is no way to know the id before\n state.byId[0] = action.payload;\n },\n removedUser: (state, action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: removedUser, ...byId } = state.byId;\n state.byId = byId;\n state.currentUser = state.currentUser === action.payload ? null : state.currentUser;\n },\n updatedUser: (state, action) => {\n state.byId[action.payload.id] = {\n ...state.byId[action.payload.id],\n ...action.payload\n };\n },\n receivedPermissionSets: (state, action) => {\n state.permissionSetsById = action.payload;\n },\n receivedRoles: (state, action) => {\n state.rolesById = action.payload;\n },\n createdRole: (state, action) => {\n state.rolesById[action.payload.name] = {\n ...state.rolesById[action.payload.name],\n ...action.payload\n };\n },\n removedRole: (state, action) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: toBeRemoved, ...rolesById } = state.rolesById;\n state.rolesById = rolesById;\n },\n setCustomColumns: (state, action) => {\n state.customColumns = action.payload;\n },\n setGlobalSettings: (state, action) => {\n state.settingsInitialized = true;\n state.globalSettings = {\n ...state.globalSettings,\n ...action.payload\n };\n },\n setUserSettings: (state, action) => {\n state.userSettingsInitialized = true;\n state.userSettings = {\n ...state.userSettings,\n ...action.payload\n };\n },\n setTooltipState: (state, action) => {\n const { id, readState = READ_STATES.read } = action.payload;\n state.tooltips.byId[id].readState = readState;\n },\n setTooltipsState: (state, action) => {\n state.tooltips.byId = {\n ...state.tooltips.byId,\n ...action.payload\n };\n },\n setShowFeedbackDialog: (state, action) => {\n state.showFeedbackDialog = action.payload;\n },\n setShowConnectingDialog: (state, action) => {\n state.showConnectDeviceDialog = action.payload;\n },\n setShowStartupNotification: (state, action) => {\n state.showStartupNotification = action.payload;\n }\n }\n});\n\nexport const actions = usersSlice.actions;\nexport default usersSlice.reducer;\n","// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { actions as appActions } from './appSlice';\nimport { actions as deploymentActions } from './deploymentsSlice';\nimport { actions as devicesActions } from './devicesSlice';\nimport { actions as monitorActions } from './monitorSlice';\nimport { actions as onboardingActions } from './onboardingSlice';\nimport { actions as organizationActions } from './organizationSlice';\nimport { actions as releaseActions } from './releasesSlice';\nimport { actions as userActions } from './usersSlice';\n\nexport default {\n ...appActions,\n ...deploymentActions,\n ...devicesActions,\n ...monitorActions,\n ...onboardingActions,\n ...organizationActions,\n ...releaseActions,\n ...userActions\n};\n","// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { extractErrorMessage, preformatWithRequestID } from '@northern.tech/utils/helpers';\nimport { combineReducers, configureStore } from '@reduxjs/toolkit';\n\nimport actions from './actions';\nimport appSlice from './appSlice';\nimport { getToken } from './auth';\nimport { USER_LOGOUT, settingsKeys } from './constants';\nimport deploymentSlice from './deploymentsSlice';\nimport deviceSlice from './devicesSlice';\nimport monitorSlice from './monitorSlice';\nimport onboardingSlice from './onboardingSlice';\nimport organizationSlice, { actions as organizationActions } from './organizationSlice';\nimport releaseSlice from './releasesSlice';\nimport userSlice from './usersSlice';\n\nconst { setSnackbar, uploadProgress } = actions;\n\n// exclude 'pendings-redirect' since this is expected to persist refreshes - the rest should be better to be redone\nconst keys = ['sessionDeploymentChecker', settingsKeys.initialized];\nconst resetEnvironment = () => {\n keys.map(key => window.sessionStorage.removeItem(key));\n};\n\nresetEnvironment();\n\nexport const commonErrorFallback = 'Please check your connection.';\nexport const commonErrorHandler = (err, errorContext, dispatch, fallback, mightBeAuthRelated = false) => {\n const errMsg = extractErrorMessage(err, fallback);\n if (mightBeAuthRelated || getToken()) {\n dispatch(setSnackbar({ message: preformatWithRequestID(err.response, `${errorContext} ${errMsg}`), action: 'Copy to clipboard' }));\n }\n return Promise.reject(err);\n};\n\nconst rootReducer = combineReducers({\n app: appSlice,\n devices: deviceSlice,\n deployments: deploymentSlice,\n monitor: monitorSlice,\n onboarding: onboardingSlice,\n organization: organizationSlice,\n releases: releaseSlice,\n users: userSlice\n});\n\nexport const sessionReducer = (state, action) => {\n if (action.type === USER_LOGOUT) {\n state = undefined;\n }\n return rootReducer(state, action);\n};\n\nexport const getConfiguredStore = (options = {}) => {\n const { preloadedState = {}, ...config } = options;\n return configureStore({\n ...config,\n preloadedState,\n reducer: sessionReducer,\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware({\n immutableCheck: {\n ignoredPaths: ['app.uploadsById']\n },\n serializableCheck: {\n ignoredActions: [organizationActions.receiveExternalDeviceIntegrations.name, setSnackbar.name, uploadProgress.name],\n ignoredActionPaths: ['uploads', 'snackbar', /payload\\..*$/],\n ignoredPaths: ['app.uploadsById', 'app.snackbar', 'organization.externalDeviceIntegrations']\n }\n })\n });\n};\nexport const store = getConfiguredStore({\n preloadedState: {}\n});\nexport type AppDispatch = typeof store.dispatch;\n","// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport storeActions from '@northern.tech/store/actions';\nimport GeneralApi from '@northern.tech/store/api/general-api';\nimport { DEVICE_LIST_DEFAULTS, SORTING_OPTIONS, TIMEOUTS, headerNames } from '@northern.tech/store/constants';\nimport { getDevicesById, getGlobalSettings, getUserCapabilities } from '@northern.tech/store/selectors';\nimport { commonErrorHandler } from '@northern.tech/store/store';\nimport { getDeviceAuth, getDeviceById, saveGlobalSettings } from '@northern.tech/store/thunks';\nimport { mapTermsToFilters } from '@northern.tech/store/utils';\nimport { deepCompare, isEmpty, standardizePhases, startTimeSort } from '@northern.tech/utils/helpers';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { isUUID } from 'validator';\n\nimport { actions, sliceName } from '.';\nimport { DEPLOYMENT_ROUTES, DEPLOYMENT_STATES, DEPLOYMENT_TYPES, deploymentPrototype, deploymentsApiUrl, deploymentsApiUrlV2 } from './constants';\nimport { getDeploymentsById, getDeploymentsByStatus as getDeploymentsByStatusSelector } from './selectors';\n\nconst { receivedDevice, setSnackbar } = storeActions;\n\n// default per page until pagination and counting integrated\nconst { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;\n\nexport const deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => (group || (groups.length === 1 && !isUUID(name)) ? groups[0] : filter.name);\n\nconst transformDeployments = (deployments, deploymentsById) =>\n deployments.sort(startTimeSort).reduce(\n (accu, item) => {\n const filter = item.filter ?? {};\n let deployment = {\n ...deploymentPrototype,\n ...deploymentsById[item.id],\n ...item,\n filter: item.filter ? { ...filter, name: filter.name ?? filter.id, filters: mapTermsToFilters(filter.terms) } : undefined,\n name: decodeURIComponent(item.name)\n };\n // deriving the group in a second step to potentially make use of the merged data from the existing group state + the decoded name\n deployment = { ...deployment, group: deriveDeploymentGroup(deployment) };\n accu.deployments[item.id] = deployment;\n accu.deploymentIds.push(item.id);\n return accu;\n },\n { deployments: {}, deploymentIds: [] }\n );\n\n/*Deployments */\nexport const getDeploymentsByStatus = createAsyncThunk(`${sliceName}/getDeploymentsByStatus`, (options = {}, { dispatch, getState }) => {\n const { status, page = defaultPage, per_page = defaultPerPage, startDate, endDate, group, type, shouldSelect = true, sort = SORTING_OPTIONS.desc } = options;\n const created_after = startDate ? `&created_after=${startDate}` : '';\n const created_before = endDate ? `&created_before=${endDate}` : '';\n const search = group ? `&search=${group}` : '';\n const typeFilter = type ? `&type=${type}` : '';\n return GeneralApi.get(\n `${deploymentsApiUrl}/deployments?status=${status}&per_page=${per_page}&page=${page}${created_after}${created_before}${search}${typeFilter}&sort=${sort}`\n ).then(res => {\n const { deployments, deploymentIds } = transformDeployments(res.data, getState().deployments.byId);\n const total = Number(res.headers[headerNames.total]);\n let tasks = [\n dispatch(actions.receivedDeployments(deployments)),\n dispatch(\n actions.receivedDeploymentsForStatus({\n deploymentIds,\n status,\n total: !(startDate || endDate || group || type) ? total : getState().deployments.byStatus[status].total\n })\n )\n ];\n tasks = deploymentIds.reduce((accu, deploymentId) => {\n if (deployments[deploymentId].type === DEPLOYMENT_TYPES.configuration) {\n accu.push(dispatch(getSingleDeployment(deploymentId)));\n }\n return accu;\n }, tasks);\n if (shouldSelect) {\n tasks.push(dispatch(actions.selectDeploymentsForStatus({ deploymentIds, status, total })));\n }\n tasks.push({ deploymentIds, total });\n return Promise.all(tasks);\n });\n});\n\nconst MAX_PREVIOUS_PHASES_COUNT = 5;\nexport const createDeployment = createAsyncThunk(`${sliceName}/createDeployment`, ({ newDeployment, hasNewRetryDefault = false }, { dispatch, getState }) => {\n let request;\n if (newDeployment.filter_id) {\n request = GeneralApi.post(`${deploymentsApiUrlV2}/deployments`, newDeployment);\n } else if (newDeployment.group) {\n request = GeneralApi.post(`${deploymentsApiUrl}/deployments/group/${newDeployment.group}`, newDeployment);\n } else {\n request = GeneralApi.post(`${deploymentsApiUrl}/deployments`, newDeployment);\n }\n return request\n .catch(err => commonErrorHandler(err, 'Error creating deployment.', dispatch))\n .then(data => {\n const lastslashindex = data.headers.location.lastIndexOf('/');\n const deploymentId = data.headers.location.substring(lastslashindex + 1);\n const deployment = {\n ...newDeployment,\n id: deploymentId,\n devices: newDeployment.devices ? newDeployment.devices.map(id => ({ id, status: 'pending' })) : [],\n statistics: { status: {} }\n };\n let tasks = [\n dispatch(actions.createdDeployment(deployment)),\n dispatch(getSingleDeployment(deploymentId)),\n dispatch(setSnackbar('Deployment created successfully', TIMEOUTS.fiveSeconds))\n ];\n const { canManageUsers } = getUserCapabilities(getState());\n if (canManageUsers) {\n const { phases, retries } = newDeployment;\n const { previousPhases = [], retries: previousRetries = 0 } = getGlobalSettings(getState());\n let newSettings = { retries: hasNewRetryDefault ? retries : previousRetries, hasDeployments: true };\n if (phases) {\n const standardPhases = standardizePhases(phases);\n let prevPhases = previousPhases.map(standardizePhases);\n if (!prevPhases.find(previousPhaseList => previousPhaseList.every(oldPhase => standardPhases.find(phase => deepCompare(phase, oldPhase))))) {\n prevPhases.push(standardPhases);\n }\n newSettings.previousPhases = prevPhases.slice(-1 * MAX_PREVIOUS_PHASES_COUNT);\n }\n tasks.push(dispatch(saveGlobalSettings(newSettings)));\n }\n return Promise.all(tasks);\n });\n});\n\nexport const getDeploymentDevices = createAsyncThunk(`${sliceName}/getDeploymentDevices`, (options, { dispatch, getState }) => {\n const { id, page = defaultPage, perPage = defaultPerPage } = options;\n return GeneralApi.get(`${deploymentsApiUrl}/deployments/${id}/devices/list?&page=${page}&per_page=${perPage}`).then(response => {\n const { devices: deploymentDevices = {} } = getState().deployments.byId[id] || {};\n const devices = response.data.reduce((accu, item) => {\n accu[item.id] = item;\n const log = (deploymentDevices[item.id] || {}).log;\n if (log) {\n accu[item.id].log = log;\n }\n return accu;\n }, {});\n const selectedDeviceIds = Object.keys(devices);\n let tasks = [\n dispatch(\n actions.receivedDeploymentDevices({\n id,\n devices,\n selectedDeviceIds,\n totalDeviceCount: Number(response.headers[headerNames.total])\n })\n )\n ];\n const devicesById = getDevicesById(getState());\n // only update those that have changed & lack data\n const lackingData = selectedDeviceIds.reduce((accu, deviceId) => {\n const device = devicesById[deviceId];\n if (!device || !device.identity_data || !device.attributes || Object.keys(device.attributes).length === 0) {\n accu.push(deviceId);\n }\n return accu;\n }, []);\n // get device artifact, inventory and identity details not listed in schedule data\n tasks = lackingData.reduce((accu, deviceId) => [...accu, dispatch(getDeviceById(deviceId)), dispatch(getDeviceAuth(deviceId))], tasks);\n return Promise.all(tasks);\n });\n});\n\nconst parseDeviceDeployment = ({\n deployment: { id, artifact_name: release, status: deploymentStatus },\n device: { created, deleted, id: deviceId, finished, status, log }\n}) => ({\n id,\n release,\n created,\n deleted,\n deviceId,\n finished,\n status,\n log,\n route: Object.values(DEPLOYMENT_ROUTES).reduce((accu, { key, states }) => {\n if (!accu) {\n return states.includes(deploymentStatus) ? key : accu;\n }\n return accu;\n }, '')\n});\n\nexport const getDeviceDeployments = createAsyncThunk(`${sliceName}/getDeviceDeployments`, (options, { dispatch }) => {\n const { deviceId, filterSelection = [], page = defaultPage, perPage = defaultPerPage } = options;\n const filters = filterSelection.map(item => `&status=${item}`).join('');\n return GeneralApi.get(`${deploymentsApiUrl}/deployments/devices/${deviceId}?page=${page}&per_page=${perPage}${filters}`)\n .then(({ data, headers }) =>\n Promise.resolve(\n dispatch(\n receivedDevice({\n id: deviceId,\n deviceDeployments: data.map(parseDeviceDeployment),\n deploymentsCount: Number(headers[headerNames.total])\n })\n )\n )\n )\n .catch(err => commonErrorHandler(err, 'There was an error retrieving the device deployment history:', dispatch));\n});\n\nexport const resetDeviceDeployments = createAsyncThunk(`${sliceName}/resetDeviceDeployments`, (deviceId, { dispatch }) =>\n GeneralApi.delete(`${deploymentsApiUrl}/deployments/devices/${deviceId}/history`)\n .then(() => Promise.resolve(dispatch(getDeviceDeployments({ deviceId }))))\n .catch(err => commonErrorHandler(err, 'There was an error resetting the device deployment history:', dispatch))\n);\n\nexport const getSingleDeployment = createAsyncThunk(`${sliceName}/getSingleDeployment`, (id, { dispatch, getState }) =>\n GeneralApi.get(`${deploymentsApiUrl}/deployments/${id}`).then(({ data }) => {\n const { deployments } = transformDeployments([data], getState().deployments.byId);\n return Promise.resolve(dispatch(actions.receivedDeployment(deployments[id])));\n })\n);\n\nexport const getDeviceLog = createAsyncThunk(`${sliceName}/getDeviceLog`, ({ deploymentId, deviceId }, { dispatch }) =>\n GeneralApi.get(`${deploymentsApiUrl}/deployments/${deploymentId}/devices/${deviceId}/log`)\n .catch(e => {\n console.log('no log here', e);\n return Promise.reject();\n })\n .then(({ data: log }) =>\n Promise.all([Promise.resolve(dispatch(actions.receivedDeploymentDeviceLog({ id: deploymentId, deviceId, log }))), Promise.resolve(log)])\n )\n);\n\nexport const abortDeployment = createAsyncThunk(`${sliceName}/abortDeployment`, (deploymentId, { dispatch, getState }) =>\n GeneralApi.put(`${deploymentsApiUrl}/deployments/${deploymentId}/status`, { status: 'aborted' })\n .then(() => {\n const deploymentsByStatus = getDeploymentsByStatusSelector(getState());\n let status = DEPLOYMENT_STATES.pending;\n let index = deploymentsByStatus.pending.deploymentIds.findIndex(id => id === deploymentId);\n if (index < 0) {\n status = DEPLOYMENT_STATES.inprogress;\n index = deploymentsByStatus.inprogress.deploymentIds.findIndex(id => id === deploymentId);\n }\n const deploymentIds = [...deploymentsByStatus[status].deploymentIds.slice(0, index), ...deploymentsByStatus[status].deploymentIds.slice(index + 1)];\n const deploymentsById = getDeploymentsById(getState());\n const deployments = deploymentIds.reduce((accu, id) => {\n accu[id] = deploymentsById[id];\n return accu;\n }, {});\n const total = Math.max(deploymentsByStatus[status].total - 1, 0);\n return Promise.all([\n dispatch(actions.receivedDeployments(deployments)),\n dispatch(actions.receivedDeploymentsForStatus({ deploymentIds, status, total })),\n dispatch(actions.removedDeployment(deploymentId)),\n dispatch(setSnackbar('The deployment was successfully aborted'))\n ]);\n })\n .catch(err => commonErrorHandler(err, 'There was an error while aborting the deployment:', dispatch))\n);\n\nexport const updateDeploymentControlMap = createAsyncThunk(`${sliceName}/updateDeploymentControlMap`, ({ deploymentId, updateControlMap }, { dispatch }) =>\n GeneralApi.patch(`${deploymentsApiUrl}/deployments/${deploymentId}`, { update_control_map: updateControlMap })\n .catch(err => commonErrorHandler(err, 'There was an error while updating the deployment status:', dispatch))\n .then(() => Promise.resolve(dispatch(getSingleDeployment(deploymentId))))\n);\n\nexport const setDeploymentsState = createAsyncThunk(`${sliceName}/setDeploymentsState`, (selection, { dispatch, getState }) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page, perPage, ...selectionState } = selection;\n const currentState = getState().deployments.selectionState;\n let nextState = {\n ...currentState,\n ...selectionState,\n ...Object.keys(DEPLOYMENT_STATES).reduce((accu, item) => {\n accu[item] = {\n ...currentState[item],\n ...selectionState[item]\n };\n return accu;\n }, {}),\n general: {\n ...currentState.general,\n ...selectionState.general\n }\n };\n let tasks = [dispatch(actions.setDeploymentsState(nextState))];\n if (nextState.selectedId && currentState.selectedId !== nextState.selectedId) {\n tasks.push(dispatch(getSingleDeployment(nextState.selectedId)));\n }\n return Promise.all(tasks);\n});\n\nconst deltaAttributeMappings = [\n { here: 'compressionLevel', there: 'compression_level' },\n { here: 'disableChecksum', there: 'disable_checksum' },\n { here: 'disableDecompression', there: 'disable_external_decompression' },\n { here: 'sourceWindow', there: 'source_window_size' },\n { here: 'inputWindow', there: 'input_window_size' },\n { here: 'duplicatesWindow', there: 'compression_duplicates_window' },\n { here: 'instructionBuffer', there: 'instruction_buffer_size' }\n];\n\nconst mapExternalDeltaConfig = (config = {}) =>\n deltaAttributeMappings.reduce((accu, { here, there }) => {\n if (config[there] !== undefined) {\n accu[here] = config[there];\n }\n return accu;\n }, {});\n\nexport const getDeploymentsConfig = createAsyncThunk(`${sliceName}/getDeploymentsConfig`, (_, { dispatch, getState }) =>\n GeneralApi.get(`${deploymentsApiUrl}/config`).then(({ data }) => {\n const oldConfig = getState().deployments.config;\n const { delta = {} } = data;\n const { binary_delta = {}, binary_delta_limits = {} } = delta;\n const { xdelta_args = {}, timeout: timeoutConfig = oldConfig.binaryDelta.timeout } = binary_delta;\n const { xdelta_args_limits = {}, timeout: timeoutLimit = oldConfig.binaryDeltaLimits.timeout } = binary_delta_limits;\n const config = {\n ...oldConfig,\n hasDelta: Boolean(delta.enabled),\n binaryDelta: {\n ...oldConfig.binaryDelta,\n timeout: timeoutConfig,\n ...mapExternalDeltaConfig(xdelta_args)\n },\n binaryDeltaLimits: {\n ...oldConfig.binaryDeltaLimits,\n timeout: timeoutLimit,\n ...mapExternalDeltaConfig(xdelta_args_limits)\n }\n };\n return Promise.resolve(dispatch(actions.setDeploymentsConfig(config)));\n })\n);\n\n// traverse a source object and remove undefined & empty object properties to only return an attribute if there really is content worth sending\nconst deepClean = source =>\n Object.entries(source).reduce((accu, [key, value]) => {\n if (value !== undefined) {\n let cleanedValue = typeof value === 'object' ? deepClean(value) : value;\n if (cleanedValue === undefined || (typeof cleanedValue === 'object' && isEmpty(cleanedValue))) {\n return accu;\n }\n accu = { ...(accu ?? {}), [key]: cleanedValue };\n }\n return accu;\n }, undefined);\n\nexport const saveDeltaDeploymentsConfig = createAsyncThunk(`${sliceName}/saveDeltaDeploymentsConfig`, (config, { dispatch, getState }) => {\n const configChange = {\n timeout: config.timeout,\n xdelta_args: deltaAttributeMappings.reduce((accu, { here, there }) => {\n if (config[here] !== undefined) {\n accu[there] = config[here];\n }\n return accu;\n }, {})\n };\n const result = deepClean(configChange);\n if (!result) {\n return Promise.resolve();\n }\n return GeneralApi.put(`${deploymentsApiUrl}/config/binary_delta`, result)\n .catch(err => commonErrorHandler(err, 'There was a problem storing your delta artifact generation configuration.', dispatch))\n .then(() => {\n const oldConfig = getState().deployments.config;\n const newConfig = {\n ...oldConfig,\n binaryDelta: {\n ...oldConfig.binaryDelta,\n ...config\n }\n };\n return Promise.all([dispatch(actions.setDeploymentsConfig(newConfig)), dispatch(setSnackbar('Settings saved successfully'))]);\n });\n});\n","// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport storeActions from '@northern.tech/store/actions';\nimport GeneralApi from '@northern.tech/store/api/general-api';\nimport {\n ALL_DEVICES,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_LIST_DEFAULTS,\n EXTERNAL_PROVIDER,\n MAX_PAGE_SIZE,\n SORTING_OPTIONS,\n TIMEOUTS,\n UNGROUPED_GROUP,\n auditLogsApiUrl,\n defaultReports,\n headerNames,\n rootfsImageVersion\n} from '@northern.tech/store/constants';\nimport {\n getAttrsEndpoint,\n getCurrentUser,\n getDeviceTwinIntegrations,\n getGlobalSettings,\n getIdAttribute,\n getSearchEndpoint,\n getTenantCapabilities,\n getUserCapabilities,\n getUserSettings\n} from '@northern.tech/store/selectors';\nimport { commonErrorFallback, commonErrorHandler } from '@northern.tech/store/store';\nimport { getDeviceMonitorConfig, getLatestDeviceAlerts, getSingleDeployment, saveGlobalSettings } from '@northern.tech/store/thunks';\nimport {\n convertDeviceListStateToFilters,\n filtersFilter,\n mapDeviceAttributes,\n mapFiltersToTerms,\n mapTermsToFilters,\n progress\n} from '@northern.tech/store/utils';\nimport { attributeDuplicateFilter, deepCompare, extractErrorMessage, getSnackbarMessage } from '@northern.tech/utils/helpers';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { isCancel } from 'axios';\nimport pluralize from 'pluralize';\nimport { v4 as uuid } from 'uuid';\n\nimport { actions, sliceName } from '.';\nimport {\n ALL_DEVICE_STATES,\n DEVICE_STATES,\n deviceAuthV2,\n deviceConfig,\n deviceConnect,\n emptyFilter,\n geoAttributes,\n inventoryApiUrl,\n inventoryApiUrlV2,\n iotManagerBaseURL,\n reportingApiUrl\n} from './constants';\nimport {\n getDeviceById as getDeviceByIdSelector,\n getDeviceFilters,\n getDeviceListState,\n getDevicesById,\n getGroupsById,\n getGroups as getGroupsSelector,\n getSelectedGroup\n} from './selectors';\n\nconst { cleanUpUpload, initUpload, setSnackbar, uploadProgress } = storeActions;\nconst { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;\n\nconst defaultAttributes = [\n { scope: 'identity', attribute: 'status' },\n { scope: 'inventory', attribute: 'artifact_name' },\n { scope: 'inventory', attribute: 'device_type' },\n { scope: 'inventory', attribute: 'mender_is_gateway' },\n { scope: 'inventory', attribute: 'mender_gateway_system_id' },\n { scope: 'inventory', attribute: rootfsImageVersion },\n { scope: 'monitor', attribute: 'alerts' },\n { scope: 'system', attribute: 'created_ts' },\n { scope: 'system', attribute: 'updated_ts' },\n { scope: 'system', attribute: 'check_in_time' },\n { scope: 'system', attribute: 'group' },\n { scope: 'tags', attribute: 'name' }\n];\n\nexport const getGroups = createAsyncThunk(`${sliceName}/getGroups`, (_, { dispatch, getState }) =>\n GeneralApi.get(`${inventoryApiUrl}/groups`).then(res => {\n const state = getGroupsById(getState());\n const dynamicGroups = Object.entries(state).reduce((accu, [id, group]) => {\n if (group.id || (group.filters?.length && id !== UNGROUPED_GROUP.id)) {\n accu[id] = group;\n }\n return accu;\n }, {});\n const groups = res.data.reduce((accu, group) => {\n accu[group] = { deviceIds: [], filters: [], total: 0, ...state[group] };\n return accu;\n }, dynamicGroups);\n const filters = [{ key: 'group', value: res.data, operator: DEVICE_FILTERING_OPTIONS.$nin.key, scope: 'system' }];\n return Promise.all([\n dispatch(actions.receivedGroups(groups)),\n dispatch(getDevicesByStatus({ filterSelection: filters, group: 0, page: 1, perPage: 1, status: undefined }))\n ]).then(promises => {\n const devicesRetrieval = promises[promises.length - 1] || [];\n const { payload } = devicesRetrieval || {};\n const result = payload[payload.length - 1] || {};\n if (!result.total) {\n return Promise.resolve();\n }\n return Promise.resolve(\n dispatch(\n actions.addGroup({\n groupName: UNGROUPED_GROUP.id,\n group: { filters: [{ key: 'group', value: res.data, operator: DEVICE_FILTERING_OPTIONS.$nin.key, scope: 'system' }] }\n })\n )\n );\n });\n })\n);\n\nexport const addDevicesToGroup = createAsyncThunk(`${sliceName}/addDevicesToGroup`, ({ group, deviceIds, isCreation }, { dispatch }) =>\n GeneralApi.patch(`${inventoryApiUrl}/groups/${group}/devices`, deviceIds)\n .then(() => dispatch(actions.addToGroup({ group, deviceIds })))\n .finally(() => (isCreation ? Promise.resolve(dispatch(getGroups())) : {}))\n);\n\nexport const removeDevicesFromGroup = createAsyncThunk(`${sliceName}/removeDevicesFromGroup`, ({ group, deviceIds }, { dispatch }) =>\n GeneralApi.delete(`${inventoryApiUrl}/groups/${group}/devices`, deviceIds).then(() =>\n Promise.all([\n dispatch(actions.removeFromGroup({ group, deviceIds })),\n dispatch(setSnackbar(`The ${pluralize('devices', deviceIds.length)} ${pluralize('were', deviceIds.length)} removed from the group`, TIMEOUTS.fiveSeconds))\n ])\n )\n);\n\nconst getGroupNotification = (newGroup, selectedGroup) => {\n const successMessage = 'The group was updated successfully';\n if (newGroup === selectedGroup) {\n return [successMessage, TIMEOUTS.fiveSeconds];\n }\n return [\n <>\n {successMessage} - <Link to={`/devices?inventory=group:eq:${newGroup}`}>click here</Link> to see it.\n </>,\n 5000,\n undefined,\n undefined,\n () => {}\n ];\n};\n\nexport const addStaticGroup = createAsyncThunk(`${sliceName}/addStaticGroup`, ({ group, devices }, { dispatch, getState }) =>\n Promise.resolve(dispatch(addDevicesToGroup({ group, deviceIds: devices.map(({ id }) => id), isCreation: true })))\n .then(() =>\n Promise.resolve(\n dispatch(\n actions.addGroup({\n group: { deviceIds: [], total: 0, filters: [], ...getState().devices.groups.byId[group] },\n groupName: group\n })\n )\n ).then(() =>\n Promise.all([\n dispatch(setDeviceListState({ setOnly: true })),\n dispatch(getGroups()),\n dispatch(setSnackbar(...getGroupNotification(group, getState().devices.groups.selectedGroup)))\n ])\n )\n )\n .catch(err => commonErrorHandler(err, `Group could not be updated:`, dispatch))\n);\n\nexport const removeStaticGroup = createAsyncThunk(`${sliceName}/removeStaticGroup`, (groupName, { dispatch }) =>\n GeneralApi.delete(`${inventoryApiUrl}/groups/${groupName}`).then(() =>\n Promise.all([\n dispatch(actions.removeGroup(groupName)),\n dispatch(getGroups()),\n dispatch(setSnackbar('Group was removed successfully', TIMEOUTS.fiveSeconds))\n ])\n )\n);\n\nexport const getDynamicGroups = createAsyncThunk(`${sliceName}/getDynamicGroups`, (_, { dispatch, getState }) =>\n GeneralApi.get(`${inventoryApiUrlV2}/filters?per_page=${MAX_PAGE_SIZE}`)\n .then(({ data: filters }) => {\n const state = getGroupsById(getState());\n const staticGroups = Object.entries(state).reduce((accu, [id, group]) => {\n if (!(group.id || group.filters?.length)) {\n accu[id] = group;\n }\n return accu;\n }, {});\n const groups = (filters || []).reduce((accu, filter) => {\n accu[filter.name] = {\n deviceIds: [],\n total: 0,\n ...state[filter.name],\n id: filter.id,\n filters: mapTermsToFilters(filter.terms)\n };\n return accu;\n }, staticGroups);\n return Promise.resolve(dispatch(actions.receivedGroups(groups)));\n })\n .catch(() => console.log('Dynamic group retrieval failed - likely accessing a non-enterprise backend'))\n);\n\nexport const addDynamicGroup = createAsyncThunk(`${sliceName}/addDynamicGroup`, ({ groupName, filterPredicates }, { dispatch, getState }) =>\n GeneralApi.post(`${inventoryApiUrlV2}/filters`, { name: groupName, terms: mapFiltersToTerms(filterPredicates) })\n .then(res =>\n Promise.resolve(\n dispatch(\n actions.addGroup({\n groupName,\n group: {\n id: res.headers[headerNames.location].substring(res.headers[headerNames.location].lastIndexOf('/') + 1),\n filters: filterPredicates\n }\n })\n )\n ).then(() => {\n const { cleanedFilters } = getGroupFilters(groupName, getState().devices.groups);\n return Promise.all([\n dispatch(actions.setDeviceFilters(cleanedFilters)),\n dispatch(setSnackbar(...getGroupNotification(groupName, getState().devices.groups.selectedGroup))),\n dispatch(getDynamicGroups())\n ]);\n })\n )\n .catch(err => commonErrorHandler(err, `Group could not be updated:`, dispatch))\n);\n\nexport const updateDynamicGroup = createAsyncThunk(`${sliceName}/updateDynamicGroup`, ({ groupName, filterPredicates }, { dispatch, getState }) => {\n const filterId = getState().devices.groups.byId[groupName].id;\n return GeneralApi.delete(`${inventoryApiUrlV2}/filters/${filterId}`).then(() => Promise.resolve(dispatch(addDynamicGroup({ groupName, filterPredicates }))));\n});\n\nexport const removeDynamicGroup = createAsyncThunk(`${sliceName}/removeDynamicGroup`, (groupName, { dispatch, getState }) => {\n const filterId = getState().devices.groups.byId[groupName].id;\n return GeneralApi.delete(`${inventoryApiUrlV2}/filters/${filterId}`).then(() =>\n Promise.all([dispatch(actions.removeGroup(groupName)), dispatch(setSnackbar('Group was removed successfully', TIMEOUTS.fiveSeconds))])\n );\n});\n\n/*\n * Device inventory functions\n */\nconst getGroupFilters = (group, groupsState, filters = []) => {\n const groupName = group === UNGROUPED_GROUP.id || group === UNGROUPED_GROUP.name ? UNGROUPED_GROUP.id : group;\n const selectedGroup = groupsState.byId[groupName];\n const groupFilterLength = selectedGroup?.filters?.length || 0;\n const cleanedFilters = groupFilterLength ? [...filters, ...selectedGroup.filters].filter(filtersFilter) : filters;\n return { cleanedFilters, groupName, selectedGroup, groupFilterLength };\n};\n\nexport const selectGroup = createAsyncThunk(`${sliceName}/selectGroup`, ({ group, filters = [] }, { dispatch, getState }) => {\n const { cleanedFilters, groupName, selectedGroup, groupFilterLength } = getGroupFilters(group, getState().devices.groups, filters);\n if (getSelectedGroup(getState()) === groupName && ((filters.length === 0 && !groupFilterLength) || filters.length === cleanedFilters.length)) {\n return Promise.resolve();\n }\n let tasks = [];\n if (groupFilterLength) {\n tasks.push(dispatch(actions.setDeviceFilters(cleanedFilters)));\n } else {\n tasks.push(dispatch(actions.setDeviceFilters(filters)));\n tasks.push(dispatch(getGroupDevices({ group: groupName, perPage: 1, shouldIncludeAllStates: true })));\n }\n const selectedGroupName = selectedGroup || !Object.keys(getGroupsById(getState())).length ? groupName : undefined;\n tasks.push(dispatch(actions.selectGroup(selectedGroupName)));\n return Promise.all(tasks);\n});\n\nconst getEarliestTs = (dateA = '', dateB = '') => (!dateA || !dateB ? dateA || dateB : dateA < dateB ? dateA : dateB);\n\nconst reduceReceivedDevices = (devices, ids, state, status) =>\n devices.reduce(\n (accu, device) => {\n const stateDevice = getDeviceByIdSelector(state, device.id);\n const {\n attributes: storedAttributes = {},\n identity_data: storedIdentity = {},\n monitor: storedMonitor = {},\n tags: storedTags = {},\n group: storedGroup\n } = stateDevice;\n const { identity, inventory, monitor, system = {}, tags } = mapDeviceAttributes(device.attributes);\n device.tags = { ...storedTags, ...tags };\n device.group = system.group ?? storedGroup;\n device.monitor = { ...storedMonitor, ...monitor };\n device.identity_data = { ...storedIdentity, ...identity, ...(device.identity_data ? device.identity_data : {}) };\n device.status = status ? status : device.status || identity.status;\n device.check_in_time_rounded = system.check_in_time ?? stateDevice.check_in_time_rounded;\n device.check_in_time_exact = device.check_in_time ?? stateDevice.check_in_time_exact;\n device.created_ts = getEarliestTs(getEarliestTs(system.created_ts, device.created_ts), stateDevice.created_ts);\n device.updated_ts = device.attributes ? device.updated_ts : stateDevice.updated_ts;\n device.isNew = new Date(device.created_ts) > new Date(state.app.newThreshold);\n device.isOffline = new Date(device.check_in_time_rounded) < new Date(state.app.offlineThreshold) || device.check_in_time_rounded === undefined;\n // all the other mapped attributes return as empty objects if there are no attributes to map, but identity will be initialized with an empty state\n // for device_type and artifact_name, potentially overwriting existing info, so rely on stored information instead if there are no attributes\n device.attributes = device.attributes ? { ...storedAttributes, ...inventory } : storedAttributes;\n accu.devicesById[device.id] = { ...stateDevice, ...device };\n accu.ids.push(device.id);\n return accu;\n },\n { ids, devicesById: {} }\n );\n\nexport const getGroupDevices = createAsyncThunk(`${sliceName}/getGroupDevices`, (options, { dispatch, getState }) => {\n const { group, shouldIncludeAllStates, ...remainder } = options;\n const { cleanedFilters: filterSelection } = getGroupFilters(group, getState().devices.groups);\n return Promise.resolve(\n dispatch(getDevicesByStatus({ ...remainder, filterSelection, group, status: shouldIncludeAllStates ? undefined : DEVICE_STATES.accepted }))\n )\n .unwrap()\n .then(results => {\n if (!group) {\n return Promise.resolve();\n }\n const { deviceAccu, total } = results[results.length - 1];\n const stateGroup = getState().devices.groups.byId[group];\n if (!stateGroup && !total && !deviceAccu.ids.length) {\n return Promise.resolve();\n }\n return Promise.resolve(\n dispatch(\n actions.addGroup({\n group: {\n deviceIds: deviceAccu.ids.length === total || deviceAccu.ids.length > stateGroup?.deviceIds ? deviceAccu.ids : stateGroup.deviceIds,\n total\n },\n groupName: group\n })\n )\n );\n });\n});\n\nexport const getAllGroupDevices = createAsyncThunk(`${sliceName}/getAllGroupDevices`, (group, { dispatch, getState }) => {\n if (!group || (!!group && (!getGroupsById(getState())[group] || getGroupsById(getState())[group].filters.length))) {\n return Promise.resolve();\n }\n const { attributes, filterTerms } = prepareSearchArguments({\n filters: [],\n group,\n state: getState(),\n status: DEVICE_STATES.accepted\n });\n const getAllDevices = (perPage = MAX_PAGE_SIZE, page = defaultPage, devices = []) =>\n GeneralApi.post(getSearchEndpoint(getState()), {\n page,\n per_page: perPage,\n filters: filterTerms,\n attributes\n }).then(res => {\n const state = getState();\n const deviceAccu = reduceReceivedDevices(res.data, devices, state);\n dispatch(actions.receivedDevices(deviceAccu.devicesById));\n const total = Number(res.headers[headerNames.total]);\n if (total > perPage * page) {\n return getAllDevices(perPage, page + 1, deviceAccu.ids);\n }\n return Promise.resolve(dispatch(actions.addGroup({ group: { deviceIds: deviceAccu.ids, total: deviceAccu.ids.length }, groupName: group })));\n });\n return getAllDevices();\n});\n\nexport const getAllDynamicGroupDevices = createAsyncThunk(`${sliceName}/getAllDynamicGroupDevices`, (group, { dispatch, getState }) => {\n if (!!group && (!getGroupsById(getState())[group] || !getGroupsById(getState())[group].filters.length)) {\n return Promise.resolve();\n }\n const { attributes, filterTerms: filters } = prepareSearchArguments({\n filters: getState().devices.groups.byId[group].filters,\n state: getState(),\n status: DEVICE_STATES.accepted\n });\n const getAllDevices = (perPage = MAX_PAGE_SIZE, page = defaultPage, devices = []) =>\n GeneralApi.post(getSearchEndpoint(getState()), { page, per_page: perPage, filters, attributes }).then(res => {\n const state = getState();\n const deviceAccu = reduceReceivedDevices(res.data, devices, state);\n dispatch(actions.receivedDevices(deviceAccu.devicesById));\n const total = Number(res.headers[headerNames.total]);\n if (total > deviceAccu.ids.length) {\n return getAllDevices(perPage, page + 1, deviceAccu.ids);\n }\n return Promise.resolve(dispatch(actions.addGroup({ group: { deviceIds: deviceAccu.ids, total }, groupName: group })));\n });\n return getAllDevices();\n});\n\nexport const getDeviceById = createAsyncThunk(`${sliceName}/getDeviceById`, (id, { dispatch, getState }) =>\n GeneralApi.get(`${inventoryApiUrl}/devices/${id}`)\n .then(res => {\n const device = reduceReceivedDevices([res.data], [], getState()).devicesById[id];\n device.etag = res.headers.etag;\n dispatch(actions.receivedDevice(device));\n return Promise.resolve(device);\n })\n .catch(err => {\n const errMsg = extractErrorMessage(err);\n if (errMsg.includes('Not Found')) {\n console.log(`${id} does not have any inventory information`);\n const device = reduceReceivedDevices(\n [\n {\n id,\n attributes: [\n { name: 'status', value: 'decomissioned', scope: 'identity' },\n { name: 'decomissioned', value: 'true', scope: 'inventory' }\n ]\n }\n ],\n [],\n getState()\n ).devicesById[id];\n dispatch(actions.receivedDevice(device));\n }\n })\n);\n\nexport const getDeviceInfo = createAsyncThunk(`${sliceName}/getDeviceInfo`, (deviceId, { dispatch, getState }) => {\n const device = getDeviceByIdSelector(getState(), deviceId);\n const { hasDeviceConfig, hasDeviceConnect, hasMonitor } = getTenantCapabilities(getState());\n const { canConfigure } = getUserCapabilities(getState());\n const integrations = getDeviceTwinIntegrations(getState());\n let tasks = [dispatch(getDeviceAuth(deviceId)), ...integrations.map(integration => dispatch(getDeviceTwin({ deviceId, integration })))];\n if (hasDeviceConfig && canConfigure && [DEVICE_STATES.accepted, DEVICE_STATES.preauth].includes(device.status)) {\n tasks.push(dispatch(getDeviceConfig(deviceId)));\n }\n if (device.status === DEVICE_STATES.accepted) {\n // Get full device identity details for single selected device\n tasks.push(dispatch(getDeviceById(deviceId)));\n if (hasDeviceConnect) {\n tasks.push(dispatch(getDeviceConnect(deviceId)));\n }\n if (hasMonitor) {\n tasks.push(dispatch(getLatestDeviceAlerts({ id: deviceId })));\n tasks.push(dispatch(getDeviceMonitorConfig(deviceId)));\n }\n }\n return Promise.all(tasks);\n});\n\nexport const deriveInactiveDevices = createAsyncThunk(`${sliceName}/deriveInactiveDevices`, (deviceIds, { dispatch, getState }) => {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n const yesterdaysIsoString = yesterday.toISOString();\n // now boil the list down to the ones that were not updated since yesterday\n const devices = deviceIds.reduce(\n (accu, id) => {\n const device = getDeviceByIdSelector(getState(), id);\n if (device && device.updated_ts > yesterdaysIsoString) {\n accu.active.push(id);\n } else {\n accu.inactive.push(id);\n }\n return accu;\n },\n { active: [], inactive: [] }\n );\n return dispatch(actions.setInactiveDevices({ activeDeviceTotal: devices.active.length, inactiveDeviceTotal: devices.inactive.length }));\n});\n\n/*\n Device Auth + admission\n */\nexport const getDeviceCount = createAsyncThunk(`${sliceName}/getDeviceCount`, (status, { dispatch, getState }) =>\n GeneralApi.post(getSearchEndpoint(getState()), {\n page: 1,\n per_page: 1,\n filters: mapFiltersToTerms([{ key: 'status', value: status, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'identity' }]),\n attributes: defaultAttributes\n }).then(response => {\n const count = Number(response.headers[headerNames.total]);\n if (status) {\n return dispatch(actions.setDevicesCountByStatus({ count, status }));\n }\n return dispatch(actions.setTotalDevices(count));\n })\n);\n\nexport const getAllDeviceCounts = createAsyncThunk(`${sliceName}/getAllDeviceCounts`, (_, { dispatch }) =>\n Promise.all([DEVICE_STATES.accepted, DEVICE_STATES.pending].map(status => dispatch(getDeviceCount(status))))\n);\n\nexport const getDeviceLimit = createAsyncThunk(`${sliceName}/getDeviceLimit`, (_, { dispatch }) =>\n GeneralApi.get(`${deviceAuthV2}/limits/max_devices`).then(res => dispatch(actions.setDeviceLimit(res.data.limit)))\n);\n\nexport const setDeviceListState = createAsyncThunk(\n `${sliceName}/setDeviceListState`,\n ({ shouldSelectDevices = true, forceRefresh, fetchAuth = true, ...selectionState }, { dispatch, getState }) => {\n const currentState = getDeviceListState(getState());\n const refreshTrigger = forceRefresh ? !currentState.refreshTrigger : selectionState.refreshTrigger;\n let nextState = {\n ...currentState,\n setOnly: false,\n refreshTrigger,\n ...selectionState,\n sort: { ...currentState.sort, ...selectionState.sort }\n };\n let tasks = [];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isLoading: currentLoading, deviceIds: currentDevices, selection: currentSelection, ...currentRequestState } = currentState;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isLoading: nextLoading, deviceIds: nextDevices, selection: nextSelection, ...nextRequestState } = nextState;\n if (!nextState.setOnly && !deepCompare(currentRequestState, nextRequestState)) {\n const { direction: sortDown = SORTING_OPTIONS.desc, key: sortCol, scope: sortScope } = nextState.sort ?? {};\n const sortBy = sortCol ? [{ attribute: sortCol, order: sortDown, scope: sortScope }] : undefined;\n const applicableSelectedState = nextState.state === ALL_DEVICE_STATES ? undefined : nextState.state;\n nextState.isLoading = true;\n tasks.push(\n dispatch(getDevicesByStatus({ ...nextState, status: applicableSelectedState, sortOptions: sortBy, fetchAuth }))\n .unwrap()\n .then(results => {\n const { deviceAccu, total } = results[results.length - 1];\n const devicesState = shouldSelectDevices ? { deviceIds: deviceAccu.ids, total, isLoading: false } : { isLoading: false };\n return Promise.resolve(dispatch(actions.setDeviceListState(devicesState)));\n })\n // whatever happens, change \"loading\" back to null\n .catch(() => Promise.resolve({ isLoading: false }))\n );\n }\n tasks.push(dispatch(actions.setDeviceListState(nextState)));\n return Promise.all(tasks);\n }\n);\n\n// get devices from inventory\nexport const getDevicesByStatus = createAsyncThunk(`${sliceName}/getDevicesByStatus`, (options, { dispatch, getState }) => {\n const {\n status,\n fetchAuth = true,\n filterSelection,\n group,\n selectedIssues = [],\n page = defaultPage,\n perPage = defaultPerPage,\n sortOptions = [],\n selectedAttributes = []\n } = options;\n const state = getState();\n const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({\n filters: filterSelection ?? getDeviceFilters(state),\n group: group ?? getSelectedGroup(state),\n groups: state.devices.groups,\n offlineThreshold: state.app.offlineThreshold,\n selectedIssues,\n status\n });\n const attributes = [...defaultAttributes, getIdAttribute(getState()), ...selectedAttributes];\n return GeneralApi.post(getSearchEndpoint(getState()), {\n page,\n per_page: perPage,\n filters: filterTerms,\n sort: sortOptions,\n attributes\n })\n .then(response => {\n const state = getState();\n const deviceAccu = reduceReceivedDevices(response.data, [], state, status);\n let total = !applicableFilters.length ? Number(response.headers[headerNames.total]) : null;\n if (status && state.devices.byStatus[status].total === deviceAccu.ids.length) {\n total = deviceAccu.ids.length;\n }\n let tasks = [dispatch(actions.receivedDevices(deviceAccu.devicesById))];\n if (status) {\n tasks.push(dispatch(actions.setDevicesByStatus({ deviceIds: deviceAccu.ids, status, total })));\n }\n // for each device, get device identity info\n const receivedDevices = Object.values(deviceAccu.devicesById);\n if (receivedDevices.length && fetchAuth) {\n tasks.push(dispatch(getDevicesWithAuth(receivedDevices)));\n }\n tasks.push(Promise.resolve({ deviceAccu, total: Number(response.headers[headerNames.total]) }));\n return Promise.all(tasks);\n })\n .catch(err => commonErrorHandler(err, `${status} devices couldn't be loaded.`, dispatch, commonErrorFallback));\n});\n\nexport const getAllDevicesByStatus = createAsyncThunk(`${sliceName}/getAllDevicesByStatus`, (status, { dispatch, getState }) => {\n const attributes = [...defaultAttributes, getIdAttribute(getState())];\n const getAllDevices = (perPage = MAX_PAGE_SIZE, page = 1, devices = []) =>\n GeneralApi.post(getSearchEndpoint(getState()), {\n page,\n per_page: perPage,\n filters: mapFiltersToTerms([{ key: 'status', value: status, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'identity' }]),\n attributes\n }).then(res => {\n const state = getState();\n const deviceAccu = reduceReceivedDevices(res.data, devices, state, status);\n dispatch(actions.receivedDevices(deviceAccu.devicesById));\n const total = Number(res.headers[headerNames.total]);\n if (total > state.deployments.deploymentDeviceLimit) {\n return Promise.resolve();\n }\n if (total > perPage * page) {\n return getAllDevices(perPage, page + 1, deviceAccu.ids);\n }\n let tasks = [dispatch(actions.setDevicesByStatus({ deviceIds: deviceAccu.ids, forceUpdate: true, status, total: deviceAccu.ids.length }))];\n if (status === DEVICE_STATES.accepted && deviceAccu.ids.length === total) {\n tasks.push(dispatch(deriveInactiveDevices(deviceAccu.ids)));\n tasks.push(dispatch(deriveReportsData()));\n }\n return Promise.all(tasks);\n });\n return getAllDevices();\n});\n\nexport const searchDevices = createAsyncThunk(`${sliceName}/searchDevices`, (passedOptions = {}, { dispatch, getState }) => {\n const state = getState();\n let options = { ...state.app.searchState, ...passedOptions };\n const { page = defaultPage, searchTerm, sortOptions = [] } = options;\n const { columnSelection = [] } = getUserSettings(state);\n const selectedAttributes = columnSelection.map(column => ({ attribute: column.key, scope: column.scope }));\n const attributes = attributeDuplicateFilter([...defaultAttributes, getIdAttribute(state), ...selectedAttributes], 'attribute');\n return GeneralApi.post(getSearchEndpoint(getState()), {\n page,\n per_page: 10,\n filters: [],\n sort: sortOptions,\n text: searchTerm,\n attributes\n })\n .then(response => {\n const deviceAccu = reduceReceivedDevices(response.data, [], getState());\n return Promise.all([\n dispatch(actions.receivedDevices(deviceAccu.devicesById)),\n Promise.resolve({ deviceIds: deviceAccu.ids, searchTotal: Number(response.headers[headerNames.total]) })\n ]);\n })\n .catch(err => commonErrorHandler(err, `devices couldn't be searched.`, dispatch, commonErrorFallback));\n});\n\nconst ATTRIBUTE_LIST_CUTOFF = 100;\nconst attributeReducer = (attributes = []) =>\n attributes.slice(0, ATTRIBUTE_LIST_CUTOFF).reduce(\n (accu, { name, scope }) => {\n if (!accu[scope]) {\n accu[scope] = [];\n }\n accu[scope].push(name);\n return accu;\n },\n { identity: [], inventory: [], system: [], tags: [] }\n );\n\nexport const getDeviceAttributes = createAsyncThunk(`${sliceName}/getDeviceAttributes`, (_, { dispatch, getState }) =>\n GeneralApi.get(getAttrsEndpoint(getState())).then(({ data }) => {\n // TODO: remove the array fallback once the inventory attributes endpoint is fixed\n const { identity: identityAttributes, inventory: inventoryAttributes, system: systemAttributes, tags: tagAttributes } = attributeReducer(data || []);\n return dispatch(actions.setFilterAttributes({ identityAttributes, inventoryAttributes, systemAttributes, tagAttributes }));\n })\n);\n\nexport const getReportingLimits = createAsyncThunk(`${sliceName}/getReportingLimits`, (_, { dispatch }) =>\n GeneralApi.get(`${reportingApiUrl}/devices/attributes`)\n .catch(err => commonErrorHandler(err, `filterable attributes limit & usage could not be retrieved.`, dispatch, commonErrorFallback))\n .then(({ data }) => {\n const { attributes, count, limit } = data;\n const groupedAttributes = attributeReducer(attributes);\n return Promise.resolve(dispatch(actions.setFilterablesConfig({ count, limit, attributes: groupedAttributes })));\n })\n);\n\nexport const ensureVersionString = (software, fallback) =>\n software.length && software !== 'artifact_name' ? (software.endsWith('.version') ? software : `${software}.version`) : fallback;\n\nconst REPORT_CHART_SIZE_LIMIT = 6;\nconst getSingleReportData = (reportConfig, groups) => {\n const { attribute, group, software = '' } = reportConfig;\n const filters = [{ key: 'status', scope: 'identity', operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: 'accepted' }];\n if (group) {\n const staticGroupFilter = { key: 'group', scope: 'system', operator: DEVICE_FILTERING_OPTIONS.$eq.key, value: group };\n const { cleanedFilters: groupFilters } = getGroupFilters(group, groups);\n filters.push(...(groupFilters.length ? groupFilters : [staticGroupFilter]));\n }\n const aggregationAttribute = ensureVersionString(software, attribute);\n return GeneralApi.post(`${reportingApiUrl}/devices/aggregate`, {\n aggregations: [{ attribute: aggregationAttribute, name: '*', scope: 'inventory', size: REPORT_CHART_SIZE_LIMIT }],\n filters: mapFiltersToTerms(filters)\n }).then(({ data }) => ({ data, reportConfig }));\n};\n\nexport const getReportsData = createAsyncThunk(`${sliceName}/getReportsData`, (_, { dispatch, getState }) => {\n const state = getState();\n const currentUserId = getCurrentUser(state).id;\n const reports =\n getUserSettings(state).reports || getGlobalSettings(state)[`${currentUserId}-reports`] || (Object.keys(getDevicesById(state)).length ? defaultReports : []);\n return Promise.all(reports.map(report => getSingleReportData(report, getState().devices.groups))).then(results => {\n const devicesState = getState().devices;\n const totalDeviceCount = devicesState.byStatus.accepted.total;\n const newReports = results.map(({ data, reportConfig }) => {\n let { items, other_count } = data[0];\n const { attribute, group, software = '' } = reportConfig;\n const dataCount = items.reduce((accu, item) => accu + item.count, 0);\n // the following is needed to show reports including both old (artifact_name) & current style (rootfs-image.version) device software\n const otherCount = !group && (software === rootfsImageVersion || attribute === 'artifact_name') ? totalDeviceCount - dataCount : other_count;\n return { items, otherCount, total: otherCount + dataCount };\n });\n return Promise.resolve(dispatch(actions.setDeviceReports(newReports)));\n });\n});\n\nconst initializeDistributionData = (report, groups, devices, totalDeviceCount) => {\n const { attribute, group = '', software = '' } = report;\n const effectiveAttribute = software ? software : attribute;\n const { deviceIds, total = 0 } = groups[group] || {};\n const relevantDevices = groups[group] ? deviceIds.map(id => devices[id]) : Object.values(devices);\n const distributionByAttribute = relevantDevices.reduce((accu, item) => {\n if (!item.attributes || item.status !== DEVICE_STATES.accepted) return accu;\n if (!accu[item.attributes[effectiveAttribute]]) {\n accu[item.attributes[effectiveAttribute]] = 0;\n }\n accu[item.attributes[effectiveAttribute]] = accu[item.attributes[effectiveAttribute]] + 1;\n return accu;\n }, {});\n const distributionByAttributeSorted = Object.entries(distributionByAttribute).sort((pairA, pairB) => pairB[1] - pairA[1]);\n const items = distributionByAttributeSorted.map(([key, count]) => ({ key, count }));\n const dataCount = items.reduce((accu, item) => accu + item.count, 0);\n // the following is needed to show reports including both old (artifact_name) & current style (rootfs-image.version) device software\n const otherCount = (groups[group] ? total : totalDeviceCount) - dataCount;\n return { items, otherCount, total: otherCount + dataCount };\n};\n\nexport const deriveReportsData = createAsyncThunk(`${sliceName}/deriveReportsData`, (_, { dispatch, getState }) => {\n const state = getState();\n const {\n groups: { byId: groupsById },\n byId,\n byStatus: {\n accepted: { total }\n }\n } = state.devices;\n const reports =\n getUserSettings(state).reports || state.users.globalSettings[`${state.users.currentUser}-reports`] || (Object.keys(byId).length ? defaultReports : []);\n const newReports = reports.map(report => initializeDistributionData(report, groupsById, byId, total));\n return Promise.resolve(dispatch(actions.setDeviceReports(newReports)));\n});\n\nexport const getReportsDataWithoutBackendSupport = createAsyncThunk(`${sliceName}/getReportsDataWithoutBackendSupport`, (_, { dispatch, getState }) =>\n Promise.all([dispatch(getAllDevicesByStatus(DEVICE_STATES.accepted)), dispatch(getGroups()), dispatch(getDynamicGroups())]).then(() => {\n const { dynamic: dynamicGroups, static: staticGroups } = getGroupsSelector(getState());\n return Promise.all([\n ...staticGroups.map(({ groupId }) => dispatch(getAllGroupDevices(groupId))),\n ...dynamicGroups.map(({ groupId }) => dispatch(getAllDynamicGroupDevices(groupId)))\n ]).then(() => dispatch(deriveReportsData()));\n })\n);\n\nexport const getDeviceConnect = createAsyncThunk(`${sliceName}/getDeviceConnect`, (id, { dispatch }) =>\n GeneralApi.get(`${deviceConnect}/devices/${id}`).then(({ data }) =>\n Promise.all([dispatch(actions.receivedDevice({ connect_status: data.status, connect_updated_ts: data.updated_ts, id })), Promise.resolve(data)])\n )\n);\n\nexport const getSessionDetails = createAsyncThunk(`${sliceName}/getSessionDetails`, ({ sessionId, deviceId, userId, startDate, endDate }) => {\n const createdAfter = startDate ? `&created_after=${Math.round(Date.parse(startDate) / 1000)}` : '';\n const createdBefore = endDate ? `&created_before=${Math.round(Date.parse(endDate) / 1000)}` : '';\n const objectSearch = `&object_id=${deviceId}`;\n return GeneralApi.get(`${auditLogsApiUrl}/logs?per_page=500${createdAfter}${createdBefore}&actor_id=${userId}${objectSearch}`).then(\n ({ data: auditLogEntries }) => {\n const { start, end } = auditLogEntries.reduce(\n (accu, item) => {\n if (item.meta?.session_id?.includes(sessionId)) {\n accu.start = new Date(item.action.startsWith('open') ? item.time : accu.start);\n accu.end = new Date(item.action.startsWith('close') ? item.time : accu.end);\n }\n return accu;\n },\n { start: startDate || endDate, end: endDate || startDate }\n );\n return Promise.resolve({ start, end });\n }\n );\n});\n\nexport const getDeviceFileDownloadLink = createAsyncThunk(`${sliceName}/getDeviceFileDownloadLink`, ({ deviceId, path }) =>\n Promise.resolve(`${window.location.origin}${deviceConnect}/devices/${deviceId}/download?path=${encodeURIComponent(path)}`)\n);\n\nexport const deviceFileUpload = createAsyncThunk(`${sliceName}/deviceFileUpload`, ({ deviceId, path, file }, { dispatch }) => {\n let formData = new FormData();\n formData.append('path', path);\n formData.append('file', file);\n const uploadId = uuid();\n const cancelSource = new AbortController();\n return Promise.all([\n dispatch(setSnackbar('Uploading file')),\n dispatch(initUpload({ id: uploadId, upload: { inprogress: true, uploadProgress: 0, cancelSource } })),\n GeneralApi.uploadPut(\n `${deviceConnect}/devices/${deviceId}/upload`,\n formData,\n e => dispatch(uploadProgress({ id: uploadId, progress: progress(e) })),\n cancelSource.signal\n )\n ])\n .then(() => Promise.resolve(dispatch(setSnackbar('Upload successful', TIMEOUTS.fiveSeconds))))\n .catch(err => {\n if (isCancel(err)) {\n return dispatch(setSnackbar('The upload has been cancelled', TIMEOUTS.fiveSeconds));\n }\n return commonErrorHandler(err, `Error uploading file to device.`, dispatch);\n })\n .finally(() => dispatch(cleanUpUpload(uploadId)));\n});\n\nexport const getDeviceAuth = createAsyncThunk(`${sliceName}/getDeviceAuth`, (id, { dispatch }) =>\n dispatch(getDevicesWithAuth([{ id }]))\n .unwrap()\n .then(results => {\n if (results[results.length - 1]) {\n return Promise.resolve(results[results.length - 1][0]);\n }\n return Promise.resolve();\n })\n);\n\nexport const getDevicesWithAuth = createAsyncThunk(`${sliceName}/getDevicesWithAuth`, (devices, { dispatch, getState }) =>\n devices.length\n ? GeneralApi.get(`${deviceAuthV2}/devices?id=${devices.map(device => device.id).join('&id=')}`)\n .then(({ data: receivedDevices }) => {\n const { devicesById } = reduceReceivedDevices(receivedDevices, [], getState());\n return Promise.all([dispatch(actions.receivedDevices(devicesById)), Promise.resolve(receivedDevices)]);\n })\n .catch(err => commonErrorHandler(err, `Error: ${err}`, dispatch))\n : Promise.resolve([[], []])\n);\n\nexport const updateDeviceAuth = createAsyncThunk(`${sliceName}/updateDeviceAuth`, ({ deviceId, authId, status }, { dispatch, getState }) =>\n GeneralApi.put(`${deviceAuthV2}/devices/${deviceId}/auth/${authId}/status`, { status })\n .then(() => Promise.all([dispatch(getDeviceAuth(deviceId)), dispatch(setSnackbar('Device authorization status was updated successfully'))]))\n .catch(err => commonErrorHandler(err, 'There was a problem updating the device authorization status:', dispatch))\n .then(() => Promise.resolve(dispatch(actions.maybeUpdateDevicesByStatus({ deviceId, authId }))))\n .finally(() => dispatch(setDeviceListState({ refreshTrigger: !getDeviceListState(getState()).refreshTrigger })))\n);\n\nexport const updateDevicesAuth = createAsyncThunk(`${sliceName}/updateDevicesAuth`, ({ deviceIds, status }, { dispatch, getState }) => {\n let devices = getDevicesById(getState());\n const deviceIdsWithoutAuth = deviceIds.reduce((accu, id) => (devices[id].auth_sets ? accu : [...accu, { id }]), []);\n return dispatch(getDevicesWithAuth(deviceIdsWithoutAuth)).then(() => {\n devices = getDevicesById(getState());\n // for each device, get id and id of authset & make api call to accept\n // if >1 authset, skip instead\n const deviceAuthUpdates = deviceIds.map(id => {\n const device = devices[id];\n if (device.auth_sets.length !== 1) {\n return Promise.reject();\n }\n // api call device.id and device.authsets[0].id\n return dispatch(updateDeviceAuth({ authId: device.auth_sets[0].id, deviceId: device.id, status }))\n .unwrap()\n .catch(err => commonErrorHandler(err, 'The action was stopped as there was a problem updating a device authorization status: ', dispatch, '', false));\n });\n return Promise.allSettled(deviceAuthUpdates).then(results => {\n const { skipped, count } = results.reduce(\n (accu, item) => {\n if (item.status === 'rejected') {\n accu.skipped = accu.skipped + 1;\n } else {\n accu.count = accu.count + 1;\n }\n return accu;\n },\n { skipped: 0, count: 0 }\n );\n const message = getSnackbarMessage(skipped, count);\n // break if an error occurs, display status up til this point before error message\n return dispatch(setSnackbar(message));\n });\n });\n});\n\nexport const deleteAuthset = createAsyncThunk(`${sliceName}/deleteAuthset`, ({ deviceId, authId }, { dispatch, getState }) =>\n GeneralApi.delete(`${deviceAuthV2}/devices/${deviceId}/auth/${authId}`)\n .then(() => Promise.all([dispatch(setSnackbar('Device authorization status was updated successfully'))]))\n .catch(err => commonErrorHandler(err, 'There was a problem updating the device authorization status:', dispatch))\n .then(() => Promise.resolve(dispatch(actions.maybeUpdateDevicesByStatus({ deviceId, authId }))))\n .finally(() => dispatch(setDeviceListState({ refreshTrigger: !getState().devices.deviceList.refreshTrigger })))\n);\n\nexport const preauthDevice = createAsyncThunk(`${sliceName}/preauthDevice`, (authset, { dispatch }) =>\n GeneralApi.post(`${deviceAuthV2}/devices`, authset)\n .catch(err => {\n if (err.response.status === 409) {\n return Promise.reject('A device with a matching identity data set already exists');\n }\n return commonErrorHandler(err, 'The device could not be added:', dispatch);\n })\n .then(() => Promise.resolve(dispatch(setSnackbar('Device was successfully added to the preauthorization list', TIMEOUTS.fiveSeconds))))\n);\n\nexport const decommissionDevice = createAsyncThunk(`${sliceName}/decommissionDevice`, ({ deviceId, authId }, { dispatch, getState }) =>\n GeneralApi.delete(`${deviceAuthV2}/devices/${deviceId}`)\n .then(() => Promise.resolve(dispatch(setSnackbar('Device was decommissioned successfully'))))\n .catch(err => commonErrorHandler(err, 'There was a problem decommissioning the device:', dispatch))\n .then(() => Promise.resolve(dispatch(actions.maybeUpdateDevicesByStatus({ deviceId, authId }))))\n // trigger reset of device list list!\n .finally(() => dispatch(setDeviceListState({ refreshTrigger: !getState().devices.deviceList.refreshTrigger })))\n);\n\nexport const getDeviceConfig = createAsyncThunk(`${sliceName}/getDeviceConfig`, (deviceId, { dispatch }) =>\n GeneralApi.get(`${deviceConfig}/${deviceId}`)\n .then(({ data }) => Promise.all([dispatch(actions.receivedDevice({ id: deviceId, config: data })), Promise.resolve(data)]))\n .catch(err => {\n // if we get a proper error response we most likely queried a device without an existing config check-in and we can just ignore the call\n if (err.response?.data?.error.status_code !== 404) {\n return commonErrorHandler(err, `There was an error retrieving the configuration for device ${deviceId}.`, dispatch, commonErrorFallback);\n }\n })\n);\n\nexport const setDeviceConfig = createAsyncThunk(`${sliceName}/setDeviceConfig`, ({ deviceId, config }, { dispatch }) =>\n GeneralApi.put(`${deviceConfig}/${deviceId}`, config)\n .catch(err => commonErrorHandler(err, `There was an error setting the configuration for device ${deviceId}.`, dispatch, commonErrorFallback))\n .then(() => Promise.resolve(dispatch(getDeviceConfig(deviceId))))\n);\n\nexport const applyDeviceConfig = createAsyncThunk(\n `${sliceName}/applyDeviceConfig`,\n ({ deviceId, configDeploymentConfiguration, isDefault, config }, { dispatch, getState }) =>\n GeneralApi.post(`${deviceConfig}/${deviceId}/deploy`, configDeploymentConfiguration)\n .catch(err => commonErrorHandler(err, `There was an error deploying the configuration to device ${deviceId}.`, dispatch, commonErrorFallback))\n .then(({ data }) => {\n const device = getDeviceByIdSelector(getState(), deviceId);\n const { canManageUsers } = getUserCapabilities(getState());\n let tasks = [\n dispatch(actions.receivedDevice({ ...device, config: { ...device.config, deployment_id: data.deployment_id } })),\n new Promise(resolve => setTimeout(() => resolve(dispatch(getSingleDeployment(data.deployment_id))), TIMEOUTS.oneSecond))\n ];\n if (isDefault && canManageUsers) {\n const { previous } = getGlobalSettings(getState()).defaultDeviceConfig ?? {};\n tasks.push(dispatch(saveGlobalSettings({ defaultDeviceConfig: { current: config, previous } })));\n }\n return Promise.all(tasks);\n })\n);\n\nexport const setDeviceTags = createAsyncThunk(`${sliceName}/setDeviceTags`, ({ deviceId, tags }, { dispatch }) =>\n // to prevent tag set failures, retrieve the device & use the freshest etag we can get\n Promise.resolve(dispatch(getDeviceById(deviceId))).then(device => {\n const headers = device.etag ? { 'If-Match': device.etag } : {};\n return GeneralApi.put(\n `${inventoryApiUrl}/devices/${deviceId}/tags`,\n Object.entries(tags).map(([name, value]) => ({ name, value })),\n { headers }\n )\n .catch(err => commonErrorHandler(err, `There was an error setting tags for device ${deviceId}.`, dispatch, 'Please check your connection.'))\n .then(() => Promise.all([dispatch(actions.receivedDevice({ ...device, id: deviceId, tags })), dispatch(setSnackbar('Device name changed'))]));\n })\n);\n\nexport const getDeviceTwin = createAsyncThunk(`${sliceName}/getDeviceTwin`, ({ deviceId, integration }, { dispatch, getState }) => {\n let providerResult = {};\n return GeneralApi.get(`${iotManagerBaseURL}/devices/${deviceId}/state`)\n .then(({ data }) => {\n providerResult = { ...data, twinError: '' };\n })\n .catch(err => {\n providerResult = {\n twinError: `There was an error getting the ${EXTERNAL_PROVIDER[integration.provider].twinTitle.toLowerCase()} for device ${deviceId}. ${err}`\n };\n })\n .finally(() => {\n const device = getDeviceByIdSelector(getState(), deviceId);\n Promise.resolve(dispatch(actions.receivedDevice({ ...device, twinsByIntegration: { ...device.twinsByIntegration, ...providerResult } })));\n });\n});\n\nexport const setDeviceTwin = createAsyncThunk(`${sliceName}/setDeviceTwin`, ({ deviceId, integration, settings }, { dispatch, getState }) =>\n GeneralApi.put(`${iotManagerBaseURL}/devices/${deviceId}/state/${integration.id}`, { desired: settings })\n .catch(err =>\n commonErrorHandler(\n err,\n `There was an error updating the ${EXTERNAL_PROVIDER[integration.provider].twinTitle.toLowerCase()} for device ${deviceId}.`,\n dispatch\n )\n )\n .then(() => {\n const device = getDeviceByIdSelector(getState(), deviceId);\n const { twinsByIntegration = {} } = device;\n const { [integration.id]: currentState = {} } = twinsByIntegration;\n return Promise.resolve(\n dispatch(actions.receivedDevice({ ...device, twinsByIntegration: { ...twinsByIntegration, [integration.id]: { ...currentState, desired: settings } } }))\n );\n })\n);\n\nconst prepareSearchArguments = ({ filters, group, state, status }) => {\n const { filterTerms } = convertDeviceListStateToFilters({ filters, group, offlineThreshold: state.app.offlineThreshold, selectedIssues: [], status });\n const { columnSelection = [] } = getUserSettings(state);\n const selectedAttributes = columnSelection.map(column => ({ attribute: column.key, scope: column.scope }));\n const attributes = [...defaultAttributes, getIdAttribute(state), ...selectedAttributes];\n return { attributes, filterTerms };\n};\n\nexport const getSystemDevices = createAsyncThunk(`${sliceName}/getSystemDevices`, (options, { dispatch, getState }) => {\n const { id, page = defaultPage, perPage = defaultPerPage, sortOptions = [] } = options;\n const state = getState();\n const { hasFullFiltering } = getTenantCapabilities(state);\n if (!hasFullFiltering) {\n return Promise.resolve();\n }\n const { attributes: deviceAttributes = {} } = getDeviceByIdSelector(state, id);\n const { mender_gateway_system_id = '' } = deviceAttributes;\n const filters = [\n { ...emptyFilter, key: 'mender_is_gateway', operator: DEVICE_FILTERING_OPTIONS.$ne.key, value: 'true', scope: 'inventory' },\n { ...emptyFilter, key: 'mender_gateway_system_id', value: mender_gateway_system_id, scope: 'inventory' }\n ];\n const { attributes, filterTerms } = prepareSearchArguments({ filters, state });\n return GeneralApi.post(getSearchEndpoint(getState()), {\n page,\n per_page: perPage,\n filters: filterTerms,\n sort: sortOptions,\n attributes\n })\n .catch(err => commonErrorHandler(err, `There was an error getting system devices device ${id}.`, dispatch, 'Please check your connection.'))\n .then(({ data, headers }) => {\n const state = getState();\n const { devicesById, ids } = reduceReceivedDevices(data, [], state);\n const device = {\n ...getDeviceByIdSelector(state, id),\n systemDeviceIds: ids,\n systemDeviceTotal: Number(headers[headerNames.total])\n };\n return Promise.resolve(dispatch(actions.receivedDevices({ ...devicesById, [id]: device })));\n });\n});\n\nexport const getGatewayDevices = createAsyncThunk(`${sliceName}/getGatewayDevices`, (deviceId, { dispatch, getState }) => {\n const state = getState();\n const { attributes = {} } = getDeviceByIdSelector(state, deviceId);\n const { mender_gateway_system_id = '' } = attributes;\n const filters = [\n { ...emptyFilter, key: 'id', operator: DEVICE_FILTERING_OPTIONS.$ne.key, value: deviceId, scope: 'identity' },\n { ...emptyFilter, key: 'mender_is_gateway', value: 'true', scope: 'inventory' },\n { ...emptyFilter, key: 'mender_gateway_system_id', value: mender_gateway_system_id, scope: 'inventory' }\n ];\n const { attributes: attributeSelection, filterTerms } = prepareSearchArguments({ filters, state });\n return GeneralApi.post(getSearchEndpoint(getState()), {\n page: 1,\n per_page: MAX_PAGE_SIZE,\n filters: filterTerms,\n attributes: attributeSelection\n }).then(({ data }) => {\n const { ids } = reduceReceivedDevices(data, [], getState());\n let tasks = ids.map(deviceId => dispatch(getDeviceInfo(deviceId)));\n tasks.push(dispatch(actions.receivedDevice({ id: deviceId, gatewayIds: ids })));\n return Promise.all(tasks);\n });\n});\n\nexport const getDevicesInBounds = createAsyncThunk(`${sliceName}/getDevicesInBounds`, ({ bounds, group }, { dispatch, getState }) => {\n const state = getState();\n const { filterTerms } = convertDeviceListStateToFilters({\n group: group === ALL_DEVICES ? undefined : group,\n groups: state.devices.groups,\n status: DEVICE_STATES.accepted\n });\n return GeneralApi.post(getSearchEndpoint(getState()), {\n page: 1,\n per_page: MAX_PAGE_SIZE,\n filters: filterTerms,\n attributes: geoAttributes,\n geo_bounding_box_filter: {\n geo_bounding_box: {\n location: {\n top_left: { lat: bounds._northEast.lat, lon: bounds._southWest.lng },\n bottom_right: { lat: bounds._southWest.lat, lon: bounds._northEast.lng }\n }\n }\n }\n }).then(({ data }) => {\n const { devicesById } = reduceReceivedDevices(data, [], getState());\n return Promise.resolve(dispatch(actions.receivedDevices(devicesById)));\n });\n});\n","// Copyright 2021 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport storeActions from '@northern.tech/store/actions';\nimport Api from '@northern.tech/store/api/general-api';\nimport { DEVICE_LIST_DEFAULTS, TIMEOUTS, alertChannels, headerNames } from '@northern.tech/store/constants';\nimport { getDeviceFilters, getSearchEndpoint } from '@northern.tech/store/selectors';\nimport { commonErrorFallback, commonErrorHandler } from '@northern.tech/store/store';\nimport { convertDeviceListStateToFilters } from '@northern.tech/store/utils';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\n\nimport { actions, sliceName } from '.';\nimport { monitorApiUrlv1 } from './constants';\n\nconst { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;\n\nconst cutoffLength = 75;\nconst ellipsis = '...';\nconst longTextTrimmer = text => (text.length >= cutoffLength + ellipsis.length ? `${text.substring(0, cutoffLength + ellipsis.length)}${ellipsis}` : text);\n\nconst sanitizeDeviceAlerts = alerts => alerts.map(alert => ({ ...alert, fullName: alert.name, name: longTextTrimmer(alert.name) }));\n\nexport const getDeviceAlerts = createAsyncThunk(`${sliceName}/getDeviceAlerts`, ({ id, config = {} }, { dispatch }) => {\n const { page = defaultPage, perPage = defaultPerPage, issuedBefore, issuedAfter, sortAscending = false } = config;\n const issued_after = issuedAfter ? `&issued_after=${issuedAfter}` : '';\n const issued_before = issuedBefore ? `&issued_before=${issuedBefore}` : '';\n return Api.get(`${monitorApiUrlv1}/devices/${id}/alerts?page=${page}&per_page=${perPage}${issued_after}${issued_before}&sort_ascending=${sortAscending}`)\n .catch(err => commonErrorHandler(err, `Retrieving device alerts for device ${id} failed:`, dispatch))\n .then(res =>\n Promise.all([\n dispatch(actions.receiveDeviceAlerts({ deviceId: id, alerts: sanitizeDeviceAlerts(res.data) })),\n dispatch(actions.setAlertListState({ total: Number(res.headers[headerNames.total]) }))\n ])\n );\n});\n\nexport const getLatestDeviceAlerts = createAsyncThunk(`${sliceName}/getLatestDeviceAlerts`, ({ id, config = {} }, { dispatch }) => {\n const { page = defaultPage, perPage = 10 } = config;\n return Api.get(`${monitorApiUrlv1}/devices/${id}/alerts/latest?page=${page}&per_page=${perPage}`)\n .catch(err => commonErrorHandler(err, `Retrieving device alerts for device ${id} failed:`, dispatch))\n .then(res => Promise.resolve(dispatch(actions.receiveLatestDeviceAlerts({ deviceId: id, alerts: sanitizeDeviceAlerts(res.data) }))));\n});\n\nexport const getIssueCountsByType = createAsyncThunk(`${sliceName}/getIssueCountsByType`, ({ type, options = {} }, { dispatch, getState }) => {\n const state = getState();\n const { filters = getDeviceFilters(state), group, status, ...remainder } = options;\n const { applicableFilters: nonMonitorFilters, filterTerms } = convertDeviceListStateToFilters({\n ...remainder,\n filters,\n group,\n offlineThreshold: state.app.offlineThreshold,\n selectedIssues: [type],\n status\n });\n return Api.post(getSearchEndpoint(getState()), {\n page: 1,\n per_page: 1,\n filters: filterTerms,\n attributes: [{ scope: 'identity', attribute: 'status' }]\n })\n .catch(err => commonErrorHandler(err, `Retrieving issue counts failed:`, dispatch, commonErrorFallback))\n .then(res => {\n const total = nonMonitorFilters.length ? state.monitor.issueCounts.byType[type].total : Number(res.headers[headerNames.total]);\n const filtered = nonMonitorFilters.length ? Number(res.headers[headerNames.total]) : total;\n if (total === state.monitor.issueCounts.byType[type].total && filtered === state.monitor.issueCounts.byType[type].filtered) {\n return Promise.resolve();\n }\n return Promise.resolve(dispatch(actions.receiveDeviceIssueCounts({ counts: { filtered, total }, issueType: type })));\n });\n});\n\nexport const getDeviceMonitorConfig = createAsyncThunk(`${sliceName}/getDeviceMonitorConfig`, (id, { dispatch }) =>\n Api.get(`${monitorApiUrlv1}/devices/${id}/config`)\n .catch(err => commonErrorHandler(err, `Retrieving device monitor config for device ${id} failed:`, dispatch))\n .then(({ data }) => Promise.all([dispatch(storeActions.receivedDevice({ id, monitors: data }), Promise.resolve(data))]))\n);\n\nexport const changeNotificationSetting = createAsyncThunk(\n `${sliceName}/changeNotificationSetting`,\n ({ enabled, channel = alertChannels.email }, { dispatch }) => {\n return Api.put(`${monitorApiUrlv1}/settings/global/channel/alerts/${channel}/status`, { enabled })\n .catch(err => commonErrorHandler(err, `${enabled ? 'En' : 'Dis'}abling ${channel} alerts failed:`, dispatch))\n .then(() =>\n Promise.all([\n dispatch(actions.changeAlertChannel({ channel, enabled })),\n dispatch(storeActions.setSnackbar(`Successfully ${enabled ? 'en' : 'dis'}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))\n ])\n );\n }\n);\n","// Copyright 2016 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport axios from 'axios';\n\nimport { getToken } from '../auth';\nimport { commonRequestConfig } from './general-api';\n\nconst Api = {\n postLogin: (url, { email: username, password, ...body }) =>\n axios\n .post(url, body, { ...commonRequestConfig, auth: { username, password } })\n .then(res => ({ text: res.data, code: res.status, contentType: res.headers?.['content-type'] })),\n putVerifyTFA: (url, userData) => {\n let body = {};\n if (userData.hasOwnProperty('token2fa')) {\n body = { token2fa: userData.token2fa };\n }\n return axios.put(url, body, { ...commonRequestConfig, headers: { ...commonRequestConfig.headers, Authorization: `Bearer ${getToken()}` } });\n }\n};\n\nexport default Api;\n","'use strict';\n\n// Copyright 2019 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport storeActions from '@northern.tech/store/actions';\nimport GeneralApi from '@northern.tech/store/api/general-api';\nimport UsersApi from '@northern.tech/store/api/users-api';\nimport { cleanUp, getSessionInfo, maxSessionAge, setSessionInfo } from '@northern.tech/store/auth';\nimport {\n ALL_RELEASES,\n APPLICATION_JSON_CONTENT_TYPE,\n APPLICATION_JWT_CONTENT_TYPE,\n SSO_TYPES,\n TIMEOUTS,\n apiRoot,\n emptyRole,\n emptyUiPermissions,\n tenantadmApiUrlv2\n} from '@northern.tech/store/constants';\nimport { getOnboardingState, getOrganization, getTooltipsState, getUserSettings as getUserSettingsSelector } from '@northern.tech/store/selectors';\nimport { commonErrorFallback, commonErrorHandler } from '@northern.tech/store/store';\nimport { setOfflineThreshold } from '@northern.tech/store/thunks';\nimport { mergePermissions } from '@northern.tech/store/utils';\nimport { duplicateFilter, extractErrorMessage, isEmpty, preformatWithRequestID } from '@northern.tech/utils/helpers';\nimport { clearAllRetryTimers } from '@northern.tech/utils/retrytimer';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport hashString from 'md5';\nimport Cookies from 'universal-cookie';\n\nimport { actions, sliceName } from '.';\nimport {\n OWN_USER_ID,\n PermissionTypes,\n READ_STATES,\n USER_LOGOUT,\n defaultPermissionSets,\n rolesById as defaultRolesById,\n itemUiPermissionsReducer,\n scopedPermissionAreas,\n settingsKeys,\n twoFAStates,\n uiPermissionsByArea,\n uiPermissionsById,\n useradmApiUrl,\n useradmApiUrlv2\n} from './constants';\nimport { getCurrentUser, getRolesById } from './selectors';\n\nconst cookies = new Cookies();\n\nconst { setAnnouncement, setSnackbar } = storeActions;\n\nconst handleLoginError =\n (err, { token2fa: has2FA, password }, rejectWithValue) =>\n dispatch => {\n const errorText = extractErrorMessage(err);\n const is2FABackend = errorText.includes('2fa');\n if (is2FABackend && !has2FA) {\n return rejectWithValue({ error: '2fa code missing' });\n }\n if (password === undefined) {\n // Enterprise supports two-steps login. On the first step you can enter only email\n // and in case of SSO set up you will receive a redirect URL\n // otherwise you will receive 401 status code and password field will be shown.\n return Promise.reject();\n }\n const twoFAError = is2FABackend ? ' and verification code' : '';\n const errorMessage = `There was a problem logging in. Please check your email${\n twoFAError ? ',' : ' and'\n } password${twoFAError}. If you still have problems, contact an administrator.`;\n // @ts-ignore\n return Promise.reject(dispatch(setSnackbar(preformatWithRequestID(err.response, errorMessage), null, 'Copy to clipboard')));\n };\n\n/*\n User management\n*/\n// @ts-ignore\nexport const loginUser = createAsyncThunk(`${sliceName}/loginUser`, ({ stayLoggedIn, ...userData }, { dispatch, rejectWithValue }) =>\n UsersApi.postLogin(`${useradmApiUrl}/auth/login`, { ...userData, no_expiry: stayLoggedIn })\n .catch(err => {\n cleanUp();\n return Promise.reject(dispatch(handleLoginError(err, userData, rejectWithValue)));\n })\n .then(({ text: response, contentType }) => {\n // If the content type is application/json then backend returned SSO configuration.\n // user should be redirected to the start sso url to finish login process.\n if (contentType.includes(APPLICATION_JSON_CONTENT_TYPE)) {\n const { id, kind } = response;\n const type = kind.split('/')[1];\n const ssoLoginUrl = SSO_TYPES[type].getStartUrl(id);\n window.location.replace(ssoLoginUrl);\n return;\n }\n\n const token = response;\n if (contentType !== APPLICATION_JWT_CONTENT_TYPE || !token) {\n return;\n }\n // save token to local storage & set maxAge if noexpiry checkbox not checked\n let now = new Date();\n now.setSeconds(now.getSeconds() + maxSessionAge);\n const expiresAt = stayLoggedIn ? undefined : now.toISOString();\n setSessionInfo({ token, expiresAt });\n cookies.remove('JWT', { path: '/' });\n // @ts-ignore\n return (\n // @ts-ignore\n Promise.resolve(dispatch(getUser(OWN_USER_ID)))\n // @ts-ignore\n .unwrap()\n .catch(e => {\n cleanUp();\n return Promise.reject(dispatch(setSnackbar(extractErrorMessage(e))));\n })\n .then(() => {\n window.sessionStorage.removeItem('pendings-redirect');\n if (window.location.pathname !== '/ui/') {\n window.location.replace('/ui/');\n }\n return Promise.resolve(dispatch(actions.successfullyLoggedIn({ expiresAt, token })));\n })\n );\n })\n);\n\nexport const logoutUser = createAsyncThunk(`${sliceName}/logoutUser`, (_, { dispatch, getState }) => {\n // @ts-ignore\n if (Object.keys(getState().app.uploadsById).length) {\n return Promise.reject();\n }\n return GeneralApi.post(`${useradmApiUrl}/auth/logout`).finally(() => {\n cleanUp();\n clearAllRetryTimers(setSnackbar);\n return Promise.resolve(dispatch({ type: USER_LOGOUT }));\n });\n});\n\nexport const switchUserOrganization = createAsyncThunk(`${sliceName}/switchUserOrganization`, (tenantId, { getState }) => {\n // @ts-ignore\n if (Object.keys(getState().app.uploadsById).length) {\n return Promise.reject();\n }\n return GeneralApi.get(`${useradmApiUrl}/users/tenants/${tenantId}/token`).then(({ data: token }) => {\n // @ts-ignore\n setSessionInfo({ ...getSessionInfo(), token });\n window.location.reload();\n });\n});\n\nexport const passwordResetStart = createAsyncThunk(`${sliceName}/passwordResetStart`, (email, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/auth/password-reset/start`, { email }).catch(err =>\n commonErrorHandler(err, `The password reset request cannot be processed:`, dispatch, undefined, true)\n )\n);\n// @ts-ignore\nexport const passwordResetComplete = createAsyncThunk(`${sliceName}/passwordResetComplete`, ({ secretHash, newPassword }, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/auth/password-reset/complete`, { secret_hash: secretHash, password: newPassword }).catch((err = {}) => {\n const { error, response = {} } = err;\n let errorMsg = '';\n if (response.status == 400) {\n errorMsg = 'the link you are using expired or the request is not valid, please try again.';\n } else {\n errorMsg = error;\n }\n dispatch(setSnackbar('The password reset request cannot be processed: ' + errorMsg));\n return Promise.reject(err);\n })\n);\n\nexport const verifyEmailStart = createAsyncThunk(`${sliceName}/verifyEmailStart`, (_, { dispatch, getState }) =>\n GeneralApi.post(`${useradmApiUrl}/auth/verify-email/start`, { email: getCurrentUser(getState()).email })\n // @ts-ignore\n .catch(err => commonErrorHandler(err, 'An error occured starting the email verification process:', dispatch))\n // @ts-ignore\n .finally(() => Promise.resolve(dispatch(getUser(OWN_USER_ID))))\n);\n\nexport const verifyEmailComplete = createAsyncThunk(`${sliceName}/verifyEmailComplete`, (secret_hash, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/auth/verify-email/complete`, { secret_hash })\n // @ts-ignore\n .catch(err => commonErrorHandler(err, 'An error occured completing the email verification process:', dispatch))\n // @ts-ignore\n .finally(() => Promise.resolve(dispatch(getUser(OWN_USER_ID))))\n);\n\nexport const verify2FA = createAsyncThunk(`${sliceName}/verify2FA`, (tfaData, { dispatch }) =>\n UsersApi.putVerifyTFA(`${useradmApiUrl}/2faverify`, tfaData)\n // @ts-ignore\n .then(() => Promise.resolve(dispatch(getUser(OWN_USER_ID))))\n .catch(err =>\n commonErrorHandler(err, 'An error occured validating the verification code: failed to verify token, please try again.', dispatch, undefined, true)\n )\n);\n\nexport const getUserList = createAsyncThunk(`${sliceName}/getUserList`, (_, { dispatch }) =>\n GeneralApi.get(`${useradmApiUrl}/users`)\n .then(res => {\n const users = res.data.reduce((accu, item) => {\n accu[item.id] = item;\n return accu;\n }, {});\n return dispatch(actions.receivedUserList(users));\n })\n .catch(err => commonErrorHandler(err, `Users couldn't be loaded.`, dispatch, commonErrorFallback))\n);\n\nexport const getUser = createAsyncThunk(`${sliceName}/getUser`, (id, { dispatch, rejectWithValue }) =>\n GeneralApi.get(`${useradmApiUrl}/users/${id}`)\n .then(({ data: user }) =>\n Promise.all([\n dispatch(actions.receivedUser(user)),\n // @ts-ignore\n dispatch(setHideAnnouncement({ shouldHide: false, userId: user.id })),\n // @ts-ignore\n dispatch(updateUserColumnSettings({ currentUserId: user.id })),\n user\n ])\n )\n .catch(e => rejectWithValue(e))\n);\n// @ts-ignore\nexport const initializeSelf = createAsyncThunk(`${sliceName}/initializeSelf`, (_, { dispatch }) => dispatch(getUser(OWN_USER_ID)));\n// @ts-ignore\nexport const updateUserColumnSettings = createAsyncThunk(`${sliceName}/updateUserColumnSettings`, ({ columns, currentUserId }, { dispatch, getState }) => {\n const userId = currentUserId ?? getCurrentUser(getState()).id;\n const storageKey = `${userId}-column-widths`;\n let customColumns = [];\n if (!columns) {\n try {\n // @ts-ignore\n customColumns = JSON.parse(window.localStorage.getItem(storageKey)) || customColumns;\n } catch {\n // most likely the column info doesn't exist yet or is lost - continue\n }\n } else {\n customColumns = columns;\n }\n window.localStorage.setItem(storageKey, JSON.stringify(customColumns));\n return Promise.resolve(dispatch(actions.setCustomColumns(customColumns)));\n});\n\nconst userActions = {\n add: {\n successMessage: 'The user was added successfully.',\n errorMessage: 'adding'\n },\n create: {\n successMessage: 'The user was created successfully.',\n errorMessage: 'creating'\n },\n edit: {\n successMessage: 'The user has been updated.',\n errorMessage: 'editing'\n },\n remove: {\n successMessage: 'The user was removed from the system.',\n errorMessage: 'removing'\n }\n};\n// @ts-ignore\nconst userActionErrorHandler = (err, type, dispatch) => commonErrorHandler(err, `There was an error ${userActions[type].errorMessage} the user.`, dispatch);\n// @ts-ignore\nexport const createUser = createAsyncThunk(`${sliceName}/createUser`, ({ shouldResetPassword, ...userData }, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/users`, { ...userData, send_reset_password: shouldResetPassword })\n .then(() => Promise.all([dispatch(actions.createdUser(userData)), dispatch(getUserList()), dispatch(setSnackbar(userActions.create.successMessage))]))\n .catch(err => userActionErrorHandler(err, 'create', dispatch))\n);\n\nexport const removeUser = createAsyncThunk(`${sliceName}/removeUser`, (userId, { dispatch }) =>\n // @ts-ignore\n GeneralApi.delete(`${useradmApiUrl}/users/${userId}`)\n .then(() => Promise.all([dispatch(actions.removedUser(userId)), dispatch(getUserList()), dispatch(setSnackbar(userActions.remove.successMessage))]))\n .catch(err => userActionErrorHandler(err, 'remove', dispatch))\n);\n// @ts-ignore\nexport const editUser = createAsyncThunk(`${sliceName}/editUser`, ({ id, ...userData }, { dispatch, getState }) =>\n GeneralApi.put(`${useradmApiUrl}/users/${id}`, userData).then(() =>\n Promise.all([\n dispatch(actions.updatedUser({ ...userData, id: id === OWN_USER_ID ? getCurrentUser(getState()).id : id })),\n dispatch(setSnackbar(userActions.edit.successMessage))\n ])\n )\n);\n\nexport const addUserToCurrentTenant = createAsyncThunk(`${sliceName}/addUserToTenant`, (userId, { dispatch, getState }) => {\n const { id } = getOrganization(getState());\n return (\n GeneralApi.post(`${useradmApiUrl}/users/${userId}/assign`, { tenant_ids: [id] })\n // @ts-ignore\n .catch(err => commonErrorHandler(err, `There was an error adding the user to your organization:`, dispatch))\n .then(() => Promise.all([dispatch(setSnackbar(userActions.add.successMessage)), dispatch(getUserList())]))\n );\n});\n// @ts-ignore\nexport const enableUser2fa = createAsyncThunk(`${sliceName}/enableUser2fa`, (userId = OWN_USER_ID, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/users/${userId}/2fa/enable`)\n // @ts-ignore\n .catch(err => commonErrorHandler(err, `There was an error enabling Two Factor authentication for the user.`, dispatch))\n // @ts-ignore\n .then(() => Promise.resolve(dispatch(getUser(userId))))\n);\n// @ts-ignore\nexport const disableUser2fa = createAsyncThunk(`${sliceName}/disableUser2fa`, (userId = OWN_USER_ID, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/users/${userId}/2fa/disable`)\n // @ts-ignore\n .catch(err => commonErrorHandler(err, `There was an error disabling Two Factor authentication for the user.`, dispatch))\n // @ts-ignore\n .then(() => Promise.resolve(dispatch(getUser(userId))))\n);\n\n/* RBAC related things follow: */\nconst mapHttpPermission = permission =>\n Object.entries(uiPermissionsByArea).reduce(\n (accu, [area, definition]) => {\n const endpointMatches = definition.endpoints.filter(\n endpoint => endpoint.path.test(permission.value) && (endpoint.types.includes(permission.type) || permission.type === PermissionTypes.Any)\n );\n if (permission.value === PermissionTypes.Any || (permission.value.includes(apiRoot) && endpointMatches.length)) {\n // @ts-ignore\n const endpointUiPermission = endpointMatches.reduce((endpointAccu, endpoint) => [...endpointAccu, ...endpoint.uiPermissions], []);\n const collector = (endpointUiPermission || definition.uiPermissions)\n // @ts-ignore\n .reduce((permissionsAccu, uiPermission) => {\n if (permission.type === PermissionTypes.Any || (!endpointMatches.length && uiPermission.verbs.some(verb => verb === permission.type))) {\n permissionsAccu.push(uiPermission.value);\n }\n return permissionsAccu;\n }, [])\n .filter(duplicateFilter);\n if (Array.isArray(accu[area])) {\n accu[area] = [...accu[area], ...collector].filter(duplicateFilter);\n } else {\n accu[area] = mergePermissions(accu[area], { [scopedPermissionAreas[area].excessiveAccessSelector]: collector });\n }\n }\n return accu;\n },\n { ...emptyUiPermissions }\n );\n\nconst permissionActionTypes = {\n any: mapHttpPermission,\n CREATE_DEPLOYMENT: permission =>\n permission.type === PermissionTypes.DeviceGroup\n ? {\n deployments: [uiPermissionsById.deploy.value],\n groups: { [permission.value]: [uiPermissionsById.deploy.value] }\n }\n : {},\n http: mapHttpPermission,\n REMOTE_TERMINAL: permission =>\n permission.type === PermissionTypes.DeviceGroup\n ? {\n groups: { [permission.value]: [uiPermissionsById.connect.value] }\n }\n : {},\n VIEW_DEVICE: permission =>\n permission.type === PermissionTypes.DeviceGroup\n ? {\n groups: { [permission.value]: [uiPermissionsById.read.value] }\n }\n : {}\n};\n\nconst combinePermissions = (existingPermissions, additionalPermissions = {}) =>\n Object.entries(additionalPermissions).reduce((accu, [name, permissions]) => {\n let maybeExistingPermissions = accu[name] || [];\n // @ts-ignore\n accu[name] = [...permissions, ...maybeExistingPermissions].filter(duplicateFilter);\n return accu;\n }, existingPermissions);\n\nconst tryParseCustomPermission = permission => {\n const uiPermissions = permissionActionTypes[permission.action](permission.object);\n const result = mergePermissions({ ...emptyUiPermissions }, uiPermissions);\n return { isCustom: true, permission, result };\n};\n\nconst customPermissionHandler = (accu, permission) => {\n let processor = tryParseCustomPermission(permission);\n return {\n ...accu,\n isCustom: accu.isCustom || processor.isCustom,\n uiPermissions: mergePermissions(accu.uiPermissions, processor.result)\n };\n};\n\nconst mapPermissionSet = (permissionSetName, names, scope, existingGroupsPermissions = {}) => {\n // @ts-ignore\n const permission = Object.values(uiPermissionsById).find(permission => permission.permissionSets[scope] === permissionSetName).value;\n const scopedPermissions = names.reduce((accu, name) => combinePermissions(accu, { [name]: [permission] }), existingGroupsPermissions);\n return Object.entries(scopedPermissions).reduce((accu, [key, permissions]) => ({ ...accu, [key]: deriveImpliedAreaPermissions(scope, permissions) }), {});\n};\n\nconst isEmptyPermissionSet = permissionSet =>\n !Object.values(permissionSet).reduce((accu, permissions) => {\n if (Array.isArray(permissions)) {\n return accu || !!permissions.length;\n }\n return accu || !isEmpty(permissions);\n }, false);\n\nconst parseRolePermissions = ({ permission_sets_with_scope = [], permissions = [] }, permissionSets) => {\n const preliminaryResult = permission_sets_with_scope.reduce(\n (accu, permissionSet) => {\n // @ts-ignore\n let processor = permissionSets[permissionSet.name];\n if (!processor) {\n return accu;\n }\n // @ts-ignore\n const scope = Object.keys(scopedPermissionAreas).find(scope => uiPermissionsByArea[scope].scope === permissionSet.scope?.type);\n if (scope) {\n // @ts-ignore\n const result = mapPermissionSet(permissionSet.name, permissionSet.scope.value, scope, accu.uiPermissions[scope]);\n return { ...accu, uiPermissions: { ...accu.uiPermissions, [scope]: result } };\n } else if (isEmptyPermissionSet(processor.result)) {\n return processor.permissions.reduce(customPermissionHandler, accu);\n }\n return {\n ...accu,\n isCustom: accu.isCustom || processor.isCustom,\n uiPermissions: mergePermissions(accu.uiPermissions, processor.result)\n };\n },\n { isCustom: false, uiPermissions: { ...emptyUiPermissions, groups: {}, releases: {} } }\n );\n return permissions.reduce(customPermissionHandler, preliminaryResult);\n};\n\nexport const normalizeRbacRoles = (roles, rolesById, permissionSets) =>\n roles.reduce(\n (accu, role) => {\n let normalizedPermissions;\n let isCustom = false;\n if (rolesById[role.name]) {\n normalizedPermissions = {\n ...rolesById[role.name].uiPermissions,\n groups: { ...rolesById[role.name].uiPermissions.groups },\n releases: { ...rolesById[role.name].uiPermissions.releases }\n };\n } else {\n const result = parseRolePermissions(role, permissionSets);\n normalizedPermissions = result.uiPermissions;\n isCustom = result.isCustom;\n }\n\n const roleState = accu[role.name] ?? { ...emptyRole };\n accu[role.name] = {\n ...roleState,\n ...role,\n description: roleState.description ? roleState.description : role.description,\n editable: !defaultRolesById[role.name] && !isCustom && (typeof roleState.editable !== 'undefined' ? roleState.editable : true),\n isCustom,\n name: roleState.name ? roleState.name : role.name,\n uiPermissions: normalizedPermissions\n };\n return accu;\n },\n { ...rolesById }\n );\n\nexport const getPermissionSets = createAsyncThunk(`${sliceName}/getPermissionSets`, (_, { dispatch, getState }) =>\n GeneralApi.get(`${useradmApiUrlv2}/permission_sets?per_page=500`)\n .then(({ data }) => {\n const permissionSets = data.reduce(\n (accu, permissionSet) => {\n const permissionSetState = accu[permissionSet.name] ?? {};\n let permissionSetObject = { ...permissionSetState, ...permissionSet };\n permissionSetObject.result = Object.values(uiPermissionsById).reduce(\n (accu, item) =>\n Object.entries(item.permissionSets).reduce((collector, [area, permissionSet]) => {\n if (scopedPermissionAreas[area]) {\n return collector;\n }\n if (permissionSet === permissionSetObject.name) {\n collector[area] = [...collector[area], item.value].filter(duplicateFilter);\n }\n return collector;\n }, accu),\n { ...emptyUiPermissions, ...(permissionSetObject.result ?? {}) }\n );\n const scopes = Object.values(scopedPermissionAreas).reduce((accu, { key, scopeType }) => {\n if (permissionSetObject.supported_scope_types?.includes(key) || permissionSetObject.supported_scope_types?.includes(scopeType)) {\n // @ts-ignore\n accu.push(key);\n }\n return accu;\n }, []);\n permissionSetObject = scopes.reduce((accu, scope) => {\n // @ts-ignore\n accu.result[scope] = mapPermissionSet(permissionSetObject.name, [scopedPermissionAreas[scope].excessiveAccessSelector], scope);\n return accu;\n }, permissionSetObject);\n accu[permissionSet.name] = permissionSetObject;\n return accu;\n },\n // @ts-ignore\n { ...getState().users.permissionSetsById }\n );\n return Promise.all([dispatch(actions.receivedPermissionSets(permissionSets)), permissionSets]);\n })\n .catch(() => console.log('Permission set retrieval failed - likely accessing a non-RBAC backend'))\n);\n\nexport const getRoles = createAsyncThunk(`${sliceName}/getRoles`, (_, { dispatch, getState }) =>\n Promise.all([GeneralApi.get(`${useradmApiUrlv2}/roles?per_page=500`), dispatch(getPermissionSets())])\n // @ts-ignore\n .then(results => {\n if (!results) {\n return Promise.resolve();\n }\n const [{ data: roles }, { payload: permissionSetTasks }] = results;\n // @ts-ignore\n const rolesById = normalizeRbacRoles(roles, getRolesById(getState()), permissionSetTasks[permissionSetTasks.length - 1]);\n return Promise.resolve(dispatch(actions.receivedRoles(rolesById)));\n })\n .catch(() => console.log('Role retrieval failed - likely accessing a non-RBAC backend'))\n);\n\nconst deriveImpliedAreaPermissions = (area, areaPermissions, skipPermissions = []) => {\n const highestAreaPermissionLevelSelected = areaPermissions.reduce(\n (highest, current) => (uiPermissionsById[current].permissionLevel > highest ? uiPermissionsById[current].permissionLevel : highest),\n 1\n );\n return uiPermissionsByArea[area].uiPermissions.reduce((permissions, current) => {\n // @ts-ignore\n if ((current.permissionLevel < highestAreaPermissionLevelSelected || areaPermissions.includes(current.value)) && !skipPermissions.includes(current.value)) {\n permissions.push(current.value);\n }\n return permissions;\n }, []);\n};\n\n/**\n * transforms [{ group: \"groupName\", uiPermissions: [\"read\", \"manage\", \"connect\"] }, ...] to\n * [{ name: \"ReadDevices\", scope: { type: \"DeviceGroups\", value: [\"groupName\", ...] } }, ...]\n */\nconst transformAreaRoleDataToScopedPermissionsSets = (area, areaPermissions, excessiveAccessSelector) => {\n const permissionSetObject = areaPermissions.reduce((accu, { item, uiPermissions }) => {\n // if permission area is release and item is release tag (not all releases) then exclude upload permission as it cannot be applied to tags\n const skipPermissions = scopedPermissionAreas.releases.key === area && item !== ALL_RELEASES ? [uiPermissionsById.upload.value] : [];\n // @ts-ignore\n const impliedPermissions = deriveImpliedAreaPermissions(area, uiPermissions, skipPermissions);\n accu = impliedPermissions.reduce((itemPermissionAccu, impliedPermission) => {\n const permissionSetState = itemPermissionAccu[uiPermissionsById[impliedPermission].permissionSets[area]] ?? {\n type: uiPermissionsByArea[area].scope,\n value: []\n };\n itemPermissionAccu[uiPermissionsById[impliedPermission].permissionSets[area]] = {\n ...permissionSetState,\n value: [...permissionSetState.value, item]\n };\n return itemPermissionAccu;\n }, accu);\n return accu;\n }, {});\n // @ts-ignore\n return Object.entries(permissionSetObject).map(([name, { value, ...scope }]) => {\n if (value.includes(excessiveAccessSelector)) {\n return { name };\n }\n return { name, scope: { ...scope, value: value.filter(duplicateFilter) } };\n });\n};\n\nconst transformRoleDataToRole = (roleData, roleState = {}) => {\n const role = { ...roleState, ...roleData };\n const { description = '', name, uiPermissions = emptyUiPermissions } = role;\n const { maybeUiPermissions, remainderKeys } = Object.entries(emptyUiPermissions).reduce(\n (accu, [key, emptyPermissions]) => {\n if (!scopedPermissionAreas[key]) {\n // @ts-ignore\n accu.remainderKeys.push(key);\n } else if (uiPermissions[key]) {\n accu.maybeUiPermissions[key] = uiPermissions[key].reduce(itemUiPermissionsReducer, emptyPermissions);\n }\n return accu;\n },\n { maybeUiPermissions: {}, remainderKeys: [] }\n );\n const { permissionSetsWithScope, roleUiPermissions } = remainderKeys.reduce(\n (accu, area) => {\n const areaPermissions = role.uiPermissions[area];\n if (!Array.isArray(areaPermissions)) {\n return accu;\n }\n const impliedPermissions = deriveImpliedAreaPermissions(area, areaPermissions);\n // @ts-ignore\n accu.roleUiPermissions[area] = impliedPermissions;\n const mappedPermissions = impliedPermissions.map(uiPermission => ({ name: uiPermissionsById[uiPermission].permissionSets[area] }));\n accu.permissionSetsWithScope.push(...mappedPermissions);\n return accu;\n },\n { permissionSetsWithScope: [{ name: defaultPermissionSets.Basic.name }], roleUiPermissions: {} }\n );\n const scopedPermissionSets = Object.values(scopedPermissionAreas).reduce((accu, { key, excessiveAccessSelector }) => {\n if (!uiPermissions[key]) {\n return accu;\n }\n // @ts-ignore\n accu.push(...transformAreaRoleDataToScopedPermissionsSets(key, uiPermissions[key], excessiveAccessSelector));\n return accu;\n }, []);\n return {\n permissionSetsWithScope: [...permissionSetsWithScope, ...scopedPermissionSets],\n role: {\n ...emptyRole,\n name,\n // @ts-ignore\n description: description ? description : roleState.description,\n uiPermissions: {\n ...emptyUiPermissions,\n ...roleUiPermissions,\n ...maybeUiPermissions\n }\n }\n };\n};\n\nconst roleActions = {\n create: {\n successMessage: 'The role was created successfully.',\n errorMessage: 'creating'\n },\n edit: {\n successMessage: 'The role has been updated.',\n errorMessage: 'editing'\n },\n remove: {\n successMessage: 'The role was deleted successfully.',\n errorMessage: 'removing'\n }\n};\n// @ts-ignore\nconst roleActionErrorHandler = (err, type, dispatch) => commonErrorHandler(err, `There was an error ${roleActions[type].errorMessage} the role.`, dispatch);\n\nexport const createRole = createAsyncThunk(`${sliceName}/createRole`, (roleData, { dispatch }) => {\n const { permissionSetsWithScope, role } = transformRoleDataToRole(roleData);\n return GeneralApi.post(`${useradmApiUrlv2}/roles`, {\n name: role.name,\n description: role.description,\n permission_sets_with_scope: permissionSetsWithScope\n })\n .then(() => Promise.all([dispatch(actions.createdRole(role)), dispatch(getRoles()), dispatch(setSnackbar(roleActions.create.successMessage))]))\n .catch(err => roleActionErrorHandler(err, 'create', dispatch));\n});\n\nexport const editRole = createAsyncThunk(`${sliceName}/editRole`, (roleData, { dispatch, getState }) => {\n // @ts-ignore\n const { permissionSetsWithScope, role } = transformRoleDataToRole(roleData, getRolesById(getState())[roleData.name]);\n return GeneralApi.put(`${useradmApiUrlv2}/roles/${role.name}`, {\n description: role.description,\n name: role.name,\n permission_sets_with_scope: permissionSetsWithScope\n })\n .then(() => Promise.all([dispatch(actions.createdRole(role)), dispatch(getRoles()), dispatch(setSnackbar(roleActions.edit.successMessage))]))\n .catch(err => roleActionErrorHandler(err, 'edit', dispatch));\n});\n\nexport const removeRole = createAsyncThunk(`${sliceName}/removeRole`, (roleId, { dispatch }) =>\n // @ts-ignore\n GeneralApi.delete(`${useradmApiUrlv2}/roles/${roleId}`)\n .then(() => Promise.all([dispatch(actions.removedRole(roleId)), dispatch(getRoles()), dispatch(setSnackbar(roleActions.remove.successMessage))]))\n .catch(err => roleActionErrorHandler(err, 'remove', dispatch))\n);\n\n/*\n Global settings\n*/\nexport const getGlobalSettings = createAsyncThunk(`${sliceName}/getGlobalSettings`, (_, { dispatch }) =>\n GeneralApi.get(`${useradmApiUrl}/settings`).then(({ data: settings, headers: { etag } }) => {\n // @ts-ignore\n window.sessionStorage.setItem(settingsKeys.initialized, true);\n return Promise.all([dispatch(actions.setGlobalSettings(settings)), dispatch(setOfflineThreshold()), etag]);\n })\n);\n\nexport const saveGlobalSettings = createAsyncThunk(\n `${sliceName}/saveGlobalSettings`,\n // @ts-ignore\n ({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {\n if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {\n return;\n }\n return dispatch(getGlobalSettings())\n .unwrap()\n .then(result => {\n // @ts-ignore\n let updatedSettings = { ...getState().users.globalSettings, ...settings };\n if (getCurrentUser(getState()).verified) {\n updatedSettings['2fa'] = twoFAStates.enabled;\n } else {\n delete updatedSettings['2fa'];\n }\n let tasks = [dispatch(actions.setGlobalSettings(updatedSettings))];\n const headers = result[result.length - 1] ? { 'If-Match': result[result.length - 1] } : {};\n return GeneralApi.post(`${useradmApiUrl}/settings`, updatedSettings, { headers })\n .then(() => {\n if (notify) {\n // @ts-ignore\n tasks.push(dispatch(setSnackbar('Settings saved successfully')));\n }\n return Promise.all(tasks);\n })\n .catch(err => {\n if (beOptimistic) {\n return Promise.all([tasks]);\n }\n console.log(err);\n // @ts-ignore\n return commonErrorHandler(err, `The settings couldn't be saved.`, dispatch);\n });\n });\n }\n);\n\nexport const getUserSettings = createAsyncThunk(`${sliceName}/getUserSettings`, (_, { dispatch }) =>\n GeneralApi.get(`${useradmApiUrl}/settings/me`).then(({ data: settings, headers: { etag } }) => {\n // @ts-ignore\n window.sessionStorage.setItem(settingsKeys.initialized, true);\n return Promise.all([dispatch(actions.setUserSettings(settings)), etag]);\n })\n);\n// @ts-ignore\nexport const saveUserSettings = createAsyncThunk(`${sliceName}/saveUserSettings`, (settings = { onboarding: {} }, { dispatch, getState }) => {\n if (!getCurrentUser(getState()).id) {\n return Promise.resolve();\n }\n return dispatch(getUserSettings())\n .unwrap()\n .then(result => {\n const userSettings = getUserSettingsSelector(getState());\n const onboardingState = getOnboardingState(getState());\n const tooltipState = getTooltipsState(getState());\n const updatedSettings = {\n ...userSettings,\n // @ts-ignore\n ...settings,\n onboarding: {\n ...onboardingState,\n // @ts-ignore\n ...settings.onboarding\n },\n tooltips: tooltipState\n };\n const headers = result[result.length - 1] ? { 'If-Match': result[result.length - 1] } : {};\n return Promise.all([\n Promise.resolve(dispatch(actions.setUserSettings(updatedSettings))),\n GeneralApi.post(`${useradmApiUrl}/settings/me`, updatedSettings, { headers })\n ]).catch(() => dispatch(actions.setUserSettings(userSettings)));\n });\n});\n\nexport const get2FAQRCode = createAsyncThunk(`${sliceName}/get2FAQRCode`, (_, { dispatch }) =>\n GeneralApi.get(`${useradmApiUrl}/2faqr`).then(res => dispatch(actions.receivedQrCode(res.data.qr)))\n);\n// @ts-ignore\nexport const setHideAnnouncement = createAsyncThunk(`${sliceName}/setHideAnnouncement`, ({ shouldHide, userId }, { dispatch, getState }) => {\n const currentUserId = userId || getCurrentUser(getState()).id;\n // @ts-ignore\n const hash = getState().app.hostedAnnouncement ? hashString(getState().app.hostedAnnouncement) : '';\n const announceCookie = cookies.get(`${currentUserId}${hash}`);\n if (shouldHide || (hash.length && typeof announceCookie !== 'undefined')) {\n cookies.set(`${currentUserId}${hash}`, true, { maxAge: 604800 });\n // @ts-ignore\n return Promise.resolve(dispatch(setAnnouncement()));\n }\n return Promise.resolve();\n});\n\nexport const getTokens = createAsyncThunk(`${sliceName}/getTokens`, (_, { dispatch, getState }) =>\n GeneralApi.get(`${useradmApiUrl}/settings/tokens`).then(({ data: tokens }) => {\n const user = getCurrentUser(getState());\n const updatedUser = {\n ...user,\n tokens\n };\n return Promise.resolve(dispatch(actions.updatedUser(updatedUser)));\n })\n);\n\nconst ONE_YEAR = 31536000;\n// @ts-ignore\nexport const generateToken = createAsyncThunk(`${sliceName}/generateToken`, ({ expiresIn = ONE_YEAR, name }, { dispatch }) =>\n GeneralApi.post(`${useradmApiUrl}/settings/tokens`, { name, expires_in: expiresIn })\n .then(({ data: token }) => Promise.all([dispatch(getTokens()), token]))\n // @ts-ignore\n .catch(err => commonErrorHandler(err, 'There was an error creating the token:', dispatch))\n);\n\nexport const revokeToken = createAsyncThunk(`${sliceName}/revokeToken`, (token, { dispatch }) =>\n // @ts-ignore\n GeneralApi.delete(`${useradmApiUrl}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))\n);\n// @ts-ignore\nexport const setTooltipReadState = createAsyncThunk(`${sliceName}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {\n let tasks = [dispatch(actions.setTooltipState(remainder))];\n if (persist) {\n // @ts-ignore\n tasks.push(dispatch(saveUserSettings()));\n }\n return Promise.all(tasks);\n});\n// @ts-ignore\nexport const setAllTooltipsReadState = createAsyncThunk(`${sliceName}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {\n const updatedTips = tooltips.reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});\n return Promise.resolve(dispatch(actions.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));\n});\n\ninterface SubmitFeedbackPayload {\n satisfaction: string;\n feedback: string;\n meta?: Record<string, unknown>;\n}\n\nexport const submitFeedback = createAsyncThunk<SubmitFeedbackPayload, SubmitFeedbackPayload>(\n `${sliceName}/submitFeedback`,\n // @ts-ignore\n ({ satisfaction, feedback, ...meta }, { dispatch }) => {\n return GeneralApi.post(`${tenantadmApiUrlv2}/contact/support`, {\n subject: 'feedback submission',\n body: JSON.stringify({ feedback, satisfaction, meta })\n }).then(() => {\n const today = new Date();\n // @ts-ignore\n dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split('T')[0] }));\n setTimeout(() => dispatch(actions.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);\n });\n }\n);\n"],"mappings":"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","names":["BarChartIcon","PieChartIcon","AWS","Azure","Cookies","axios","progress","import_helpers","import_toolkit","import_toolkit","accu","import_helpers","import_toolkit","import_toolkit","import_helpers","uploadProgress","import_toolkit","import_toolkit","rolesById","rolesById","progress","getDemoDeviceAddressHelper","import_toolkit","progress","import_toolkit","sliceName","initialState","actions","import_helpers","import_toolkit","sliceName","initialState","actions","import_toolkit","sliceName","initialState","actions","import_toolkit","sliceName","initialState","actions","import_toolkit","sliceName","initialState","actions","import_toolkit","sliceName","initialState","actions","import_toolkit","sliceName","initialState","rolesById","actions","actions","import_helpers","import_toolkit","actions","import_helpers","import_toolkit","setSnackbar","getDeploymentsByStatus","sliceName","actions","getDeviceById","import_helpers","import_toolkit","import_axios","import_jsx_runtime","setSnackbar","uploadProgress","defaultPage","defaultPerPage","getGroups","sliceName","actions","getDevicesByStatus","pluralize","getDeviceById","getDeviceLimit","state","uuid","deviceId","import_toolkit","defaultPage","defaultPerPage","sliceName","actions","getIssueCountsByType","import_axios","Api","axios","import_helpers","import_toolkit","import_universal_cookie","cookies","Cookies","setSnackbar","sliceName","actions","permission","scope","rolesById","accu","permissionSet","getGlobalSettings","getUserSettings","hashString","import_helpers","import_toolkit","import_universal_cookie","cookies","Cookies"]}
|