@northern.tech/store 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/actions.cjs +1 -0
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.js +4 -4
  4. package/dist/api/general-api.js +1 -1
  5. package/dist/api/users-api.js +1 -1
  6. package/dist/appSlice/index.cjs +1 -0
  7. package/dist/appSlice/index.cjs.map +1 -1
  8. package/dist/appSlice/index.js +2 -2
  9. package/dist/appSlice/mocks.cjs +1 -0
  10. package/dist/appSlice/mocks.cjs.map +1 -1
  11. package/dist/appSlice/mocks.js +2 -2
  12. package/dist/appSlice/thunks.cjs +12 -0
  13. package/dist/appSlice/thunks.cjs.map +1 -1
  14. package/dist/appSlice/thunks.js +12 -12
  15. package/dist/auth.js +1 -1
  16. package/dist/{chunk-O3DM73SJ.js → chunk-6WJI4MOP.js} +2 -1
  17. package/dist/chunk-6WJI4MOP.js.map +1 -0
  18. package/dist/{chunk-BTE6UIGL.js → chunk-GAADWFQZ.js} +4 -4
  19. package/dist/{chunk-KE7R7GYG.js → chunk-M7YH35Y4.js} +5 -5
  20. package/dist/{chunk-ZNSCXTKF.js → chunk-MWJFQYA2.js} +6 -6
  21. package/dist/{chunk-2IGDYPTR.js → chunk-NJMHH7TJ.js} +8 -8
  22. package/dist/{chunk-X7NEALMI.js → chunk-O7DR57RN.js} +13 -1
  23. package/dist/{chunk-X7NEALMI.js.map → chunk-O7DR57RN.js.map} +1 -1
  24. package/dist/{chunk-OEFIAB26.js → chunk-WCJHYB46.js} +5 -5
  25. package/dist/{chunk-LROF3FA4.js → chunk-YWL3XLJH.js} +7 -7
  26. package/dist/commonConstants.js +1 -1
  27. package/dist/commonSelectors.cjs +11 -0
  28. package/dist/commonSelectors.cjs.map +1 -1
  29. package/dist/commonSelectors.js +5 -5
  30. package/dist/constants.js +1 -1
  31. package/dist/deploymentsSlice/constants.js +1 -1
  32. package/dist/deploymentsSlice/index.js +1 -1
  33. package/dist/deploymentsSlice/mocks.js +1 -1
  34. package/dist/deploymentsSlice/selectors.js +1 -1
  35. package/dist/deploymentsSlice/thunks.cjs +12 -0
  36. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  37. package/dist/deploymentsSlice/thunks.js +12 -12
  38. package/dist/devicesSlice/constants.js +1 -1
  39. package/dist/devicesSlice/index.js +1 -1
  40. package/dist/devicesSlice/mocks.js +1 -1
  41. package/dist/devicesSlice/selectors.cjs +13 -0
  42. package/dist/devicesSlice/selectors.cjs.map +1 -1
  43. package/dist/devicesSlice/selectors.d.cts +62 -1
  44. package/dist/devicesSlice/selectors.d.ts +62 -1
  45. package/dist/devicesSlice/selectors.js +4 -2
  46. package/dist/devicesSlice/thunks.cjs +12 -0
  47. package/dist/devicesSlice/thunks.cjs.map +1 -1
  48. package/dist/devicesSlice/thunks.js +12 -12
  49. package/dist/liststatehook.js +1 -1
  50. package/dist/locationutils.js +1 -1
  51. package/dist/monitorSlice/index.js +1 -1
  52. package/dist/monitorSlice/mocks.js +1 -1
  53. package/dist/monitorSlice/thunks.cjs +12 -0
  54. package/dist/monitorSlice/thunks.cjs.map +1 -1
  55. package/dist/monitorSlice/thunks.js +10 -10
  56. package/dist/onboardingSlice/thunks.cjs +12 -0
  57. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  58. package/dist/onboardingSlice/thunks.js +12 -12
  59. package/dist/organizationSlice/constants.js +1 -1
  60. package/dist/organizationSlice/index.js +1 -1
  61. package/dist/organizationSlice/mocks.js +1 -1
  62. package/dist/organizationSlice/selectors.js +1 -1
  63. package/dist/organizationSlice/thunks.cjs +12 -0
  64. package/dist/organizationSlice/thunks.cjs.map +1 -1
  65. package/dist/organizationSlice/thunks.js +12 -12
  66. package/dist/releasesSlice/index.js +1 -1
  67. package/dist/releasesSlice/mocks.js +1 -1
  68. package/dist/releasesSlice/selectors.js +1 -1
  69. package/dist/releasesSlice/thunks.cjs +12 -0
  70. package/dist/releasesSlice/thunks.cjs.map +1 -1
  71. package/dist/releasesSlice/thunks.js +10 -10
  72. package/dist/selectors.cjs +13 -0
  73. package/dist/selectors.cjs.map +1 -1
  74. package/dist/selectors.d.cts +1 -1
  75. package/dist/selectors.d.ts +1 -1
  76. package/dist/selectors.js +11 -9
  77. package/dist/sockethook.js +1 -1
  78. package/dist/store.cjs +1 -0
  79. package/dist/store.cjs.map +1 -1
  80. package/dist/store.js +5 -5
  81. package/dist/storehooks.cjs +13 -0
  82. package/dist/storehooks.cjs.map +1 -1
  83. package/dist/storehooks.js +13 -12
  84. package/dist/storehooks.js.map +1 -1
  85. package/dist/thunks.cjs +12 -0
  86. package/dist/thunks.cjs.map +1 -1
  87. package/dist/thunks.js +12 -12
  88. package/dist/useDeploymentDevice.cjs +12 -0
  89. package/dist/useDeploymentDevice.cjs.map +1 -1
  90. package/dist/useDeploymentDevice.js +12 -12
  91. package/dist/usersSlice/constants.js +1 -1
  92. package/dist/usersSlice/index.js +1 -1
  93. package/dist/usersSlice/mocks.js +1 -1
  94. package/dist/usersSlice/selectors.js +1 -1
  95. package/dist/usersSlice/thunks.cjs +12 -0
  96. package/dist/usersSlice/thunks.cjs.map +1 -1
  97. package/dist/usersSlice/thunks.js +12 -12
  98. package/dist/utils.js +1 -1
  99. package/package.json +2 -1
  100. package/dist/chunk-O3DM73SJ.js.map +0 -1
  101. /package/dist/{chunk-BTE6UIGL.js.map → chunk-GAADWFQZ.js.map} +0 -0
  102. /package/dist/{chunk-KE7R7GYG.js.map → chunk-M7YH35Y4.js.map} +0 -0
  103. /package/dist/{chunk-ZNSCXTKF.js.map → chunk-MWJFQYA2.js.map} +0 -0
  104. /package/dist/{chunk-2IGDYPTR.js.map → chunk-NJMHH7TJ.js.map} +0 -0
  105. /package/dist/{chunk-OEFIAB26.js.map → chunk-WCJHYB46.js.map} +0 -0
  106. /package/dist/{chunk-LROF3FA4.js.map → chunk-YWL3XLJH.js.map} +0 -0
@@ -36,38 +36,38 @@ import {
36
36
  verify2FA,
37
37
  verifyEmailComplete,
38
38
  verifyEmailStart
39
- } from "../chunk-LROF3FA4.js";
40
- import "../chunk-BTE6UIGL.js";
41
- import "../chunk-OEFIAB26.js";
42
- import "../chunk-ZNSCXTKF.js";
39
+ } from "../chunk-YWL3XLJH.js";
40
+ import "../chunk-GAADWFQZ.js";
41
+ import "../chunk-WCJHYB46.js";
42
+ import "../chunk-MWJFQYA2.js";
43
43
  import "../chunk-Y3DJIMEN.js";
44
44
  import "../chunk-5M6EUVNO.js";
45
- import "../chunk-KE7R7GYG.js";
45
+ import "../chunk-M7YH35Y4.js";
46
46
  import "../chunk-TRKA7XYU.js";
47
47
  import "../chunk-KJ4BPXMB.js";
48
- import "../chunk-VCEFZTWS.js";
49
48
  import "../chunk-PVCHKW35.js";
49
+ import "../chunk-VCEFZTWS.js";
50
50
  import "../chunk-CQXDAXQF.js";
51
51
  import "../chunk-VODRLEDP.js";
52
- import "../chunk-O3DM73SJ.js";
52
+ import "../chunk-6WJI4MOP.js";
53
53
  import "../chunk-OLKM53RL.js";
54
54
  import "../chunk-FDSMCFV5.js";
55
55
  import "../chunk-53W2NRSL.js";
56
56
  import "../chunk-NMAXZ3ZY.js";
57
- import "../chunk-2IGDYPTR.js";
57
+ import "../chunk-NJMHH7TJ.js";
58
58
  import "../chunk-GEQ2QQEE.js";
59
59
  import "../chunk-3YJY7KQW.js";
60
- import "../chunk-3NOV7X4M.js";
61
- import "../chunk-YO22XLHI.js";
62
60
  import "../chunk-JIS4PA3R.js";
61
+ import "../chunk-YO22XLHI.js";
62
+ import "../chunk-3NOV7X4M.js";
63
63
  import "../chunk-WR6RQKF5.js";
64
- import "../chunk-X7NEALMI.js";
64
+ import "../chunk-O7DR57RN.js";
65
65
  import "../chunk-4BHM6WVX.js";
66
66
  import "../chunk-U5TPV5X5.js";
67
67
  import "../chunk-WWED74SG.js";
68
+ import "../chunk-ZKAH3APE.js";
68
69
  import "../chunk-2DYA3X77.js";
69
70
  import "../chunk-FAJ3I2UQ.js";
70
- import "../chunk-ZKAH3APE.js";
71
71
  import "../chunk-EL672W25.js";
72
72
  export {
73
73
  addUserToCurrentTenant,
package/dist/utils.js CHANGED
@@ -21,9 +21,9 @@ import {
21
21
  stringToBoolean
22
22
  } from "./chunk-U5TPV5X5.js";
23
23
  import "./chunk-WWED74SG.js";
24
+ import "./chunk-ZKAH3APE.js";
24
25
  import "./chunk-2DYA3X77.js";
25
26
  import "./chunk-FAJ3I2UQ.js";
26
- import "./chunk-ZKAH3APE.js";
27
27
  import "./chunk-EL672W25.js";
28
28
  export {
29
29
  convertDeviceListStateToFilters,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@northern.tech/store",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "license": "Apache-2.0",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -111,6 +111,7 @@
111
111
  ],
112
112
  "scripts": {
113
113
  "build": "tsup",
114
+ "dev": "tsup --watch --no-dts --onSuccess 'yalc publish --no-script --push'",
114
115
  "lint": "eslint src/**/*.{ts,tsx} src/*.{ts,tsx} *.ts",
115
116
  "publish": "npm publish",
116
117
  "pre-publish": "npm publish --tag next",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/appSlice/index.ts"],"sourcesContent":["// 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 type { SnackbarProps } from '@mui/material';\n\nimport type { PayloadAction } from '@reduxjs/toolkit';\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport type { SortOptions } from '../constants';\nimport { SORTING_OPTIONS } from '../constants';\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 type Repository = {\n name: string;\n version: string;\n};\n\nexport type VersionRelease = Partial<{ [versionInfo: string]: VersionRelease }> & {\n release?: string;\n release_date?: string;\n repos?: Repository[];\n supported_until?: string;\n};\n\nexport type SaasVersion = {\n date: string;\n tag: string;\n};\n\nexport type ReleaseData = {\n lts: string[];\n releases: {\n [version: string]: VersionRelease;\n };\n saas: SaasVersion[];\n};\nexport type TagData = { name: string }[];\n\nexport interface SnackbarContent extends Pick<SnackbarProps, 'action' | 'autoHideDuration' | 'message' | 'open'> {\n preventClickToCopy?: boolean;\n}\n\nexport interface SearchState {\n deviceIds: string[];\n isSearching: boolean;\n page?: number;\n perPage?: number;\n searchTerm: string;\n searchTotal: number;\n sort: SortOptions;\n}\n\nexport interface Upload {\n cancelSource: any;\n inprogress?: boolean;\n name?: string;\n progress: number;\n size?: number;\n}\n\ntype UILatestRelease = {\n releaseDate: string;\n repos: Record<string, string>;\n};\n\ntype VersionInformation = {\n [key: string]: string | UILatestRelease | undefined;\n backend?: string;\n GUI?: string;\n latestRelease?: UILatestRelease;\n};\n\nexport type SentryConfig = {\n isReduxEnabled?: string; // no parsing done here as this has to be accessed outside of the store\n location: string;\n replaysSessionSampleRate?: number;\n tracesSampleRate?: number;\n};\n\nexport type AppSliceType = {\n appInitDone: boolean;\n cancelSource: any;\n commit: string;\n demoArtifactLink: string;\n docsVersion: string;\n features: Record<string, boolean>;\n feedbackProbability: number;\n firstLoginAfterSignup: boolean;\n hostAddress: string | null;\n hostedAnnouncement: string;\n newThreshold: string;\n offlineThreshold: string;\n recaptchaSiteKey: string;\n searchState: SearchState;\n sentry: SentryConfig;\n snackbar: SnackbarContent;\n stripeAPIKey: string;\n trackerCode: string;\n uploadsById: Record<string, Upload>;\n versionInformation: VersionInformation;\n yesterday?: string;\n};\n\nexport const initialState: AppSliceType = {\n appInitDone: false,\n cancelSource: undefined,\n commit: '',\n demoArtifactLink: 'https://dgsbl4vditpls.cloudfront.net/mender-demo-artifact.mender',\n hostAddress: null,\n snackbar: {\n action: undefined,\n autoHideDuration: undefined,\n message: '',\n open: false,\n preventClickToCopy: false\n },\n // return boolean rather than organization details\n features: {\n hasAiEnabled: false,\n hasAuditlogs: false,\n hasDeltaProgress: false,\n hasMultitenancy: false,\n hasDeviceConfig: false,\n hasDeviceConnect: false,\n hasFeedbackEnabled: false,\n hasMonitor: false,\n hasMCUEnabled: false,\n hasReporting: false,\n isHosted: true,\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 isSearching: false,\n sort: {\n direction: SORTING_OPTIONS.desc\n // key: null,\n // scope: null\n }\n },\n sentry: {\n location: '',\n replaysSessionSampleRate: 0.1,\n tracesSampleRate: 1.0\n },\n stripeAPIKey: '',\n trackerCode: '',\n uploadsById: {\n // id: { progress: 0, cancelSource: undefined }\n },\n newThreshold: getYesterday(),\n offlineThreshold: getYesterday(),\n versionInformation: {\n Integration: '',\n 'Mender-Client': '',\n 'Mender-Artifact': '',\n 'Meta-Mender': ''\n },\n yesterday: undefined\n};\n\nexport const appSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n setFeatures: (state, action: PayloadAction<Record<string, boolean>>) => {\n state.features = {\n ...state.features,\n ...action.payload\n };\n },\n setSnackbar: (state, { payload }: PayloadAction<SnackbarContent | string>) => {\n if (typeof payload === 'string' || payload instanceof String) {\n state.snackbar = {\n ...initialState.snackbar,\n message: payload,\n open: !!payload\n };\n return;\n }\n const { message, autoHideDuration, action, preventClickToCopy = false } = payload;\n state.snackbar = {\n message,\n autoHideDuration,\n action,\n preventClickToCopy,\n open: !!message\n };\n },\n setFirstLoginAfterSignup: (state, action: PayloadAction<boolean>) => {\n state.firstLoginAfterSignup = action.payload;\n },\n setAnnouncement: (state, action: PayloadAction<string>) => {\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: PayloadAction<string>) => {\n state.offlineThreshold = action.payload;\n },\n initUpload: (state, action: PayloadAction<{ id: string; upload: Upload }>) => {\n const { id, upload } = action.payload;\n state.uploadsById[id] = upload;\n },\n uploadProgress: (state, action: PayloadAction<{ id: string; progress: number }>) => {\n const { id, progress } = action.payload;\n state.uploadsById[id] = {\n ...state.uploadsById[id],\n progress\n };\n },\n cleanUpUpload: (state, action: PayloadAction<string>) => {\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: PayloadAction<VersionInformation>) => {\n state.versionInformation = {\n ...state.versionInformation,\n ...action.payload\n };\n },\n setEnvironmentData: (state, action) => ({ ...state, ...action.payload }),\n setAppInitDone: state => {\n state.appInitDone = true;\n }\n }\n});\n\nexport const actions = appSlice.actions;\nexport default appSlice.reducer;\n"],"mappings":"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","names":[]}