@fdm-monster/client-next 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/RELEASE_NOTES.MD +28 -1
  3. package/dist/assets/MaterialIcons-Regular-BjXOXp5c.eot +0 -0
  4. package/dist/assets/MaterialIcons-Regular-DEUTIz1o.ttf +0 -0
  5. package/dist/assets/MaterialIcons-Regular-DOtZ65Va.woff2 +0 -0
  6. package/dist/assets/MaterialIcons-Regular-FsbMSDLx.woff +0 -0
  7. package/dist/assets/index-CHzfWKPO.css +5 -0
  8. package/dist/assets/index-WVqTlgq7.js +90 -0
  9. package/dist/assets/index-WVqTlgq7.js.map +1 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/img/DavidZwart.jpg +0 -0
  12. package/dist/img/OIG.JYDC2RaWdz7g9.jpg +0 -0
  13. package/dist/img/OIG.jpg +0 -0
  14. package/dist/img/icons/android-chrome-256x256.png +0 -0
  15. package/dist/img/icons/android-chrome-384x384.png +0 -0
  16. package/dist/img/icons/android-chrome-512x512.png +0 -0
  17. package/dist/img/icons/favicon.svg +1 -0
  18. package/dist/img/logo.png +0 -0
  19. package/dist/img/logo.svg +1 -0
  20. package/dist/img/manifest.webmanifest +33 -0
  21. package/dist/img/octoprint-tentacle.svg +144 -0
  22. package/dist/img/thumbail_unknown.jpg +0 -0
  23. package/dist/img/vbanner.jpg +0 -0
  24. package/dist/index.html +24 -0
  25. package/dist/robots.txt +2 -0
  26. package/package.json +1 -1
  27. package/.all-contributorsrc +0 -57
  28. package/.editorconfig +0 -5
  29. package/.eslintrc.js +0 -126
  30. package/.github/FUNDING.yml +0 -3
  31. package/.github/workflows/release-client.yml +0 -94
  32. package/.github/workflows/vue-publish.yml +0 -26
  33. package/.prettierignore +0 -15
  34. package/.whitesource +0 -12
  35. package/renovate.json +0 -30
  36. package/src/App.vue +0 -60
  37. package/src/AppLoader.vue +0 -383
  38. package/src/assets/adjectives.json +0 -1468
  39. package/src/assets/logo.svg +0 -6
  40. package/src/assets/nouns.json +0 -4309
  41. package/src/auto-imports.d.ts +0 -139
  42. package/src/backend/app.service.ts +0 -39
  43. package/src/backend/auth.service.ts +0 -56
  44. package/src/backend/base.service.ts +0 -57
  45. package/src/backend/batch.service.ts +0 -37
  46. package/src/backend/camera-stream.service.ts +0 -33
  47. package/src/backend/custom-gcode.service.ts +0 -11
  48. package/src/backend/dto/octoprint-settings.dto.ts +0 -168
  49. package/src/backend/first-time-setup.service.ts +0 -17
  50. package/src/backend/floor.service.ts +0 -84
  51. package/src/backend/index.ts +0 -4
  52. package/src/backend/print-completions.service.ts +0 -11
  53. package/src/backend/printer-file.service.ts +0 -91
  54. package/src/backend/printer-group.service.ts +0 -62
  55. package/src/backend/printer-job.service.ts +0 -20
  56. package/src/backend/printer-settings.service.ts +0 -28
  57. package/src/backend/printers.service.ts +0 -136
  58. package/src/backend/server-private.service.ts +0 -55
  59. package/src/backend/server.api.ts +0 -132
  60. package/src/backend/settings.service.ts +0 -85
  61. package/src/backend/user.service.ts +0 -51
  62. package/src/components/AboutHelp/AboutView.vue +0 -164
  63. package/src/components/CameraGrid/CameraGridView.vue +0 -111
  64. package/src/components/FirstTimeSetup/FirstTimeSetupView.vue +0 -354
  65. package/src/components/Generic/Actions/PrinterConnectionAction.vue +0 -56
  66. package/src/components/Generic/Actions/PrinterCreateAction.vue +0 -22
  67. package/src/components/Generic/Actions/PrinterDeleteAction.vue +0 -29
  68. package/src/components/Generic/Actions/PrinterQuickStopAction.vue +0 -35
  69. package/src/components/Generic/Actions/PrinterSettingsAction.vue +0 -35
  70. package/src/components/Generic/Actions/PrinterUrlAction.vue +0 -24
  71. package/src/components/Generic/Actions/RefreshFilesAction.vue +0 -50
  72. package/src/components/Generic/Actions/SyncPrinterNameAction.vue +0 -36
  73. package/src/components/Generic/Dialogs/AddOrUpdateCameraStreamDialog.vue +0 -131
  74. package/src/components/Generic/Dialogs/AddOrUpdateFloorDialog.vue +0 -141
  75. package/src/components/Generic/Dialogs/AddOrUpdatePrinterDialog.vue +0 -303
  76. package/src/components/Generic/Dialogs/BaseDialog.vue +0 -81
  77. package/src/components/Generic/Dialogs/BatchJsonCreateDialog.vue +0 -109
  78. package/src/components/Generic/Dialogs/BatchReprintDialog.vue +0 -190
  79. package/src/components/Generic/Dialogs/PrinterChecksPanel.vue +0 -37
  80. package/src/components/Generic/Dialogs/PrinterControlDialog.vue +0 -202
  81. package/src/components/Generic/Dialogs/PrinterMaintenanceDialog.vue +0 -130
  82. package/src/components/Generic/Dialogs/YamlImportExportDialog.vue +0 -186
  83. package/src/components/Generic/Dialogs/dialog.constants.ts +0 -19
  84. package/src/components/Generic/FileExplorerSideNav.vue +0 -734
  85. package/src/components/Generic/Loaders/GridLoader.vue +0 -68
  86. package/src/components/Generic/NavigationDrawer.vue +0 -69
  87. package/src/components/Generic/PrintJobsMenu.vue +0 -148
  88. package/src/components/Generic/Snackbars/AppErrorSnackbar.vue +0 -64
  89. package/src/components/Generic/Snackbars/AppInfoSnackbar.vue +0 -63
  90. package/src/components/Generic/Snackbars/AppProgressSnackbar.vue +0 -158
  91. package/src/components/Generic/Vuetify/TooltipButton.vue +0 -47
  92. package/src/components/HelpOverlay/HelpOverlay.vue +0 -57
  93. package/src/components/Login/LoginForm.vue +0 -206
  94. package/src/components/Login/LoginView.spec.ts +0 -64
  95. package/src/components/Login/LoginView.vue +0 -65
  96. package/src/components/Login/Logo.vue +0 -13
  97. package/src/components/Login/PermissionDenied.vue +0 -109
  98. package/src/components/Login/RegistrationForm.vue +0 -207
  99. package/src/components/Login/RegistrationView.vue +0 -17
  100. package/src/components/Login/__snapshots__/LoginView.spec.ts.snap +0 -1051
  101. package/src/components/NotFound/NotFoundView.vue +0 -39
  102. package/src/components/PrintStatistics/PrintStatistics.vue +0 -168
  103. package/src/components/PrintStatistics/PrintStatisticsView.vue +0 -15
  104. package/src/components/PrinterGrid/HomeToolbar.vue +0 -90
  105. package/src/components/PrinterGrid/PrinterGrid.vue +0 -164
  106. package/src/components/PrinterGrid/PrinterGridTile.vue +0 -438
  107. package/src/components/PrinterGrid/PrinterGridView.vue +0 -210
  108. package/src/components/PrinterList/FileControlList.vue +0 -40
  109. package/src/components/PrinterList/PrinterDetails.vue +0 -91
  110. package/src/components/PrinterList/PrintersView.vue +0 -492
  111. package/src/components/Settings/AccountSettings.vue +0 -163
  112. package/src/components/Settings/DiagnosticsSettings.vue +0 -137
  113. package/src/components/Settings/EmergencyCommands.vue +0 -265
  114. package/src/components/Settings/FloorSettings.vue +0 -276
  115. package/src/components/Settings/GridSettings.vue +0 -127
  116. package/src/components/Settings/OctoPrintSettings.vue +0 -188
  117. package/src/components/Settings/ServerProtectionSettings.vue +0 -370
  118. package/src/components/Settings/SettingsView.vue +0 -73
  119. package/src/components/Settings/SoftwareUpgradeSettings.vue +0 -297
  120. package/src/components/Settings/UserManagementSettings.vue +0 -257
  121. package/src/components/TopBar.vue +0 -147
  122. package/src/components.d.ts +0 -70
  123. package/src/directives/file-upload.directive.ts +0 -117
  124. package/src/directives/printer-drop-position.directive.ts +0 -92
  125. package/src/env.d.ts +0 -6
  126. package/src/main.ts +0 -76
  127. package/src/models/batch/reprint.dto.ts +0 -79
  128. package/src/models/batch.model.ts +0 -11
  129. package/src/models/camera-streams/camera-stream.ts +0 -19
  130. package/src/models/floors/floor.model.ts +0 -30
  131. package/src/models/octoprint/connection-options.model.ts +0 -8
  132. package/src/models/plugins/firmware-updates/prusa-firmware-release.model.ts +0 -57
  133. package/src/models/print-completions/print-completions.model.ts +0 -49
  134. package/src/models/printers/crud/create-printer.model.ts +0 -26
  135. package/src/models/printers/file-upload-commands.model.ts +0 -4
  136. package/src/models/printers/gcode/gcode-analysis.model.ts +0 -30
  137. package/src/models/printers/printer-current-job.model.ts +0 -90
  138. package/src/models/printers/printer-file.model.ts +0 -48
  139. package/src/models/printers/printer.model.ts +0 -18
  140. package/src/models/server/client-releases.model.ts +0 -27
  141. package/src/models/server/export-yaml.model.ts +0 -11
  142. package/src/models/server/features.model.ts +0 -37
  143. package/src/models/server/github-rate-limit.model.ts +0 -21
  144. package/src/models/server/version.model.ts +0 -14
  145. package/src/models/settings/printer-file-clean-settings.model.ts +0 -5
  146. package/src/models/settings/server-settings.dto.ts +0 -19
  147. package/src/models/settings/settings.model.ts +0 -57
  148. package/src/models/socketio-messages/socketio-message.model.ts +0 -53
  149. package/src/models/uploads/queued-upload.model.ts +0 -12
  150. package/src/models/user.model.ts +0 -15
  151. package/src/plugins/README.md +0 -3
  152. package/src/plugins/index.ts +0 -17
  153. package/src/plugins/vuetify.ts +0 -53
  154. package/src/router/index.ts +0 -192
  155. package/src/router/route-names.ts +0 -14
  156. package/src/router/utils.ts +0 -23
  157. package/src/shared/alert.events.ts +0 -14
  158. package/src/shared/app.constants.ts +0 -23
  159. package/src/shared/auth.constants.ts +0 -34
  160. package/src/shared/dialog.composable.ts +0 -41
  161. package/src/shared/drag.constants.ts +0 -19
  162. package/src/shared/experimental.constants.ts +0 -1
  163. package/src/shared/http-client.ts +0 -162
  164. package/src/shared/noun-adjectives.data.ts +0 -24
  165. package/src/shared/printer-grid.constants.ts +0 -5
  166. package/src/shared/printer-state.constants.ts +0 -194
  167. package/src/shared/snackbar.composable.ts +0 -66
  168. package/src/shared/socketio.service.ts +0 -104
  169. package/src/store/auth.store.ts +0 -255
  170. package/src/store/connection.store.ts +0 -66
  171. package/src/store/dialog.store.ts +0 -114
  172. package/src/store/features.store.ts +0 -57
  173. package/src/store/floor.store.ts +0 -173
  174. package/src/store/grid.store.ts +0 -10
  175. package/src/store/index.ts +0 -4
  176. package/src/store/printer-state.store.ts +0 -246
  177. package/src/store/printer.store.ts +0 -236
  178. package/src/store/profile.store.ts +0 -25
  179. package/src/store/settings.store.ts +0 -64
  180. package/src/store/test-printer.store.ts +0 -70
  181. package/src/store/uploads.store.ts +0 -75
  182. package/src/styles/README.md +0 -3
  183. package/src/styles/settings.scss +0 -10
  184. package/src/types/global.d.ts +0 -15
  185. package/src/utils/array.utils.ts +0 -15
  186. package/src/utils/date.utils.ts +0 -5
  187. package/src/utils/download-file.util.ts +0 -25
  188. package/src/utils/error.utils.ts +0 -3
  189. package/src/utils/file-size.util.ts +0 -11
  190. package/src/utils/id.type.ts +0 -1
  191. package/src/utils/sentry.util.ts +0 -8
  192. package/src/utils/test.util.ts +0 -30
  193. package/src/utils/time.utils.ts +0 -2
  194. package/src/utils/uploads-state.utils.ts +0 -58
  195. package/src/utils/validation.utils.ts +0 -14
  196. package/src/vite-env.d.ts +0 -7
  197. package/test/setup-axios-mock.ts +0 -15
  198. /package/{src/assets/logo.png → dist/assets/logo-CJVdjy51.png} +0 -0
  199. /package/{src/assets → dist/img/icons}/android-chrome-192x192.png +0 -0
package/src/App.vue DELETED
@@ -1,60 +0,0 @@
1
- <template>
2
- <v-app>
3
- <AppInfoSnackbar />
4
- <AppErrorSnackbar />
5
- <AppProgressSnackbar />
6
-
7
- <NavigationDrawer
8
- v-if="
9
- (authStore.hasAuthToken && !authStore.isLoginExpired) ||
10
- !authStore.loginRequired
11
- "
12
- />
13
- <TopBar
14
- v-if="
15
- (authStore.hasAuthToken && !authStore.isLoginExpired) ||
16
- !authStore.loginRequired
17
- "
18
- />
19
-
20
- <AppLoader>
21
- <v-main>
22
- <router-view />
23
- </v-main>
24
- </AppLoader>
25
-
26
- <AddOrUpdatePrinterDialog />
27
- <AddOrUpdateCameraStreamDialog />
28
- <AddOrUpdateFloorDialog />
29
- <PrinterMaintenanceDialog />
30
- <BatchJsonCreateDialog />
31
- <YamlImportExportDialog />
32
- <FileExplorerSideNav />
33
- <BatchReprintDialog />
34
- <PrinterControlDialog />
35
- </v-app>
36
- </template>
37
-
38
- <script lang="ts" setup>
39
- import { onMounted, watch } from 'vue'
40
- import { useUploadsStore } from './store/uploads.store'
41
- import { uploadProgressTest } from './utils/test.util'
42
- import { useAuthStore } from './store/auth.store'
43
- import AppLoader from './AppLoader.vue'
44
-
45
- const uploadsStore = useUploadsStore()
46
- const authStore = useAuthStore()
47
-
48
- const queuedUploads = uploadsStore.queuedUploads
49
-
50
- watch(queuedUploads, async () => {
51
- await uploadsStore.handleNextUpload()
52
- })
53
-
54
- onMounted(() => {
55
- console.debug(
56
- `App.vue mounted. Logged in: ${authStore.hasAuthToken}, Expired: ${authStore.isLoginExpired}`
57
- )
58
- uploadProgressTest(false)
59
- })
60
- </script>
package/src/AppLoader.vue DELETED
@@ -1,383 +0,0 @@
1
- <template>
2
- <v-overlay
3
- v-model="overlay"
4
- opacity="0.98"
5
- style="z-index: 7"
6
- >
7
- <GridLoader
8
- v-if="loading"
9
- :size="20"
10
- class="ma-auto"
11
- color="#a70015"
12
- />
13
- <br />
14
-
15
- <div
16
- v-if="errorCaught"
17
- style="margin: 50px"
18
- >
19
- <h1>FDM Monster Server Error</h1>
20
- <p>
21
- Did not expect this answer from the server. Please check your
22
- configuration and logs.
23
- </p>
24
- <v-sheet
25
- class="pa-4 rounded"
26
- color="grey-darken-2"
27
- width="80%"
28
- >
29
- Details:
30
- <div class="mt-2 mb-2">
31
- {{ JSON.stringify(errorCaught, null, 4) }}
32
- </div>
33
- <div
34
- v-if="errorUrl"
35
- class="mt-2 mb-2"
36
- >
37
- Original URL: {{ errorUrl }}
38
- </div>
39
- <div
40
- v-if="errorResponse"
41
- class="mt-2 mb-2"
42
- >
43
- Response body: {{ errorResponse }}
44
- </div>
45
- <br />
46
- <v-btn
47
- class="mb-2"
48
- color="secondary"
49
- @click="copyError()"
50
- >
51
- <v-icon class="mr-2">content_copy</v-icon>
52
- Copy error details
53
- </v-btn>
54
- <br />
55
- <v-btn
56
- color="primary mb-2"
57
- @click="reloadPage()"
58
- >
59
- <v-icon class="mr-2">refresh</v-icon>
60
- reload the page
61
- </v-btn>
62
- <br />
63
- <v-btn
64
- color="darken-2 mb-2"
65
- href="https://docs.fdm-monster.net"
66
- style="color: white"
67
- target="_blank"
68
- >
69
- <v-icon class="mr-2">menu_book</v-icon>
70
- view documentation
71
- </v-btn>
72
- <br />
73
- <v-btn
74
- color="purple-darken-4"
75
- href="https://discord.gg/mwA8uP8CMc"
76
- style="color: white"
77
- target="_blank"
78
- >
79
- <v-icon class="mr-2">chat</v-icon>
80
- join our Discord
81
- </v-btn>
82
- </v-sheet>
83
-
84
- <img
85
- class="justify-center align-center align-content-center rounded-pill mt-8 ma-4"
86
- src="/img/OIG.JYDC2RaWdz7g9.jpg"
87
- style="opacity: 0.9"
88
- width="400"
89
- />
90
- </div>
91
-
92
- <!-- Fade-in -->
93
- <!-- Slow scroll fade-out vtexts -->
94
- <div
95
- v-if="loading"
96
- style="animation: fadeIn 0.75s"
97
- >
98
- {{ overlayMessage }}
99
- </div>
100
- </v-overlay>
101
- <slot v-if="!overlay" />
102
- </template>
103
-
104
- <script lang="ts" setup>
105
- import { onBeforeMount, onUnmounted, ref } from 'vue'
106
- import { useEventBus } from '@vueuse/core'
107
- import { useRouter } from 'vue-router'
108
- import { AxiosError } from 'axios'
109
- import { captureException } from '@sentry/vue'
110
- import GridLoader from './components/Generic/Loaders/GridLoader.vue'
111
- import { useAuthStore } from './store/auth.store'
112
- import { useSnackbar } from '@/shared/snackbar.composable'
113
- import { useSettingsStore } from '@/store/settings.store'
114
- import { setSentryEnabled } from '@/utils/sentry.util'
115
- import { useFeatureStore } from '@/store/features.store'
116
- import { useProfileStore } from '@/store/profile.store'
117
- import { sleep } from '@/utils/time.utils'
118
- import { RouteNames } from '@/router/route-names'
119
- import { AppService } from '@/backend/app.service'
120
- import {
121
- AUTH_ERROR_REASON,
122
- PermissionDeniedEvent
123
- } from '@/shared/auth.constants'
124
- import { SocketIoService } from '@/shared/socketio.service'
125
-
126
- const authStore = useAuthStore()
127
- const settingsStore = useSettingsStore()
128
- const featureStore = useFeatureStore()
129
- const profileStore = useProfileStore()
130
- const overlay = ref(false)
131
- const router = useRouter()
132
- const overlayMessage = ref('')
133
- const loading = ref(true)
134
- const errorCaught = ref()
135
- const errorUrl = ref()
136
- const errorResponse = ref()
137
- const snackbar = useSnackbar()
138
- const socketIoClient: SocketIoService = new SocketIoService()
139
-
140
- function reloadPage() {
141
- window.location.reload()
142
- }
143
-
144
- function copyError() {
145
- navigator.clipboard.writeText(JSON.stringify(errorCaught.value))
146
- snackbar.openInfoMessage({
147
- title: 'Copied',
148
- subtitle: 'Error copied to clipboard'
149
- })
150
- }
151
-
152
- function setOverlay(overlayEnabled: boolean, message: string = '') {
153
- if (!overlayEnabled) {
154
- overlayMessage.value = ''
155
- } else {
156
- overlayMessage.value = message
157
- errorCaught.value = null
158
- errorUrl.value = null
159
- errorResponse.value = null
160
- }
161
- overlay.value = overlayEnabled
162
- }
163
-
164
- async function loadAppWithAuthenticationReady() {
165
- try {
166
- await settingsStore.loadSettings()
167
- await featureStore.loadFeatures()
168
- await profileStore.getProfile()
169
-
170
- const enabled = settingsStore.serverSettings?.sentryDiagnosticsEnabled
171
- setSentryEnabled(!!enabled)
172
- } catch (e) {
173
- console.log('Error when loading settings.', e)
174
- snackbar.openErrorMessage({
175
- title: 'Error',
176
- subtitle: 'Error when loading settings, features and/or profile.'
177
- })
178
- captureException(e)
179
- }
180
-
181
- if (!socketIoClient.socketState().setup) {
182
- await socketIoClient.setupSocketConnection()
183
- } else {
184
- socketIoClient.reconnect()
185
- }
186
-
187
- setOverlay(false)
188
- }
189
-
190
- // In use (shared/http-client.ts)
191
- const authPermissionDeniedKey = useEventBus<PermissionDeniedEvent>(
192
- 'auth:permission-denied'
193
- )
194
- authPermissionDeniedKey.on(async (event) => {
195
- console.log('[AppLoader] Permission denied, going to permission denied page')
196
- setOverlay(true, 'Permission denied')
197
- await router.push({
198
- name: RouteNames.PermissionDenied,
199
- query: {
200
- roles: event?.roles,
201
- page: String(router.currentRoute.value.name),
202
- permissions: event?.permissions,
203
- error: event?.error,
204
- url: event?.url
205
- }
206
- })
207
- setOverlay(false)
208
- })
209
-
210
- // In use (shared/http-client.ts)
211
- const authFailKey = useEventBus('auth:failure')
212
- authFailKey.on(async (event: any) => {
213
- console.debug(
214
- `[AppLoader] Event received: 'auth:failure', going back to login, context: ${event}`
215
- )
216
- setOverlay(true, 'Authentication failed, going back to login')
217
-
218
- if (router.currentRoute.value.name !== RouteNames.Login) {
219
- await router.push({ name: RouteNames.Login })
220
- }
221
- setOverlay(false)
222
- })
223
-
224
- // In use (components/Login/LoginForm.vue)
225
- const loginEventKey = useEventBus('auth:login')
226
- loginEventKey.on(async () => {
227
- console.debug("[AppLoader] Event received: 'auth:login', loading app")
228
- setOverlay(true, 'Loading app')
229
- await loadAppWithAuthenticationReady()
230
- })
231
-
232
- // Emitted by auth.store.ts handleAndEmitAuthenticationError
233
- const accountNotVerifiedEventKey = useEventBus(
234
- `auth:${AUTH_ERROR_REASON.AccountNotVerified}`
235
- )
236
- accountNotVerifiedEventKey.on(async () => {
237
- console.debug(
238
- `[AppLoader] Event received: 'auth:${AUTH_ERROR_REASON.AccountNotVerified}', going to login`
239
- )
240
- snackbar.error(
241
- 'Account not verified, please ask an administrator to verify your account.'
242
- )
243
- setOverlay(
244
- true,
245
- 'Account not verified, please ask an administrator to verify your account.'
246
- )
247
- if (router.currentRoute.value.name !== RouteNames.Login) {
248
- await router.push({ name: RouteNames.Login })
249
- }
250
- setOverlay(false)
251
- })
252
-
253
- // Emitted by auth.store.ts handleAndEmitAuthenticationError
254
- const passwordChangeRequiredEventKey = useEventBus(
255
- `auth:${AUTH_ERROR_REASON.PasswordChangeRequired}`
256
- )
257
- passwordChangeRequiredEventKey.on(async () => {
258
- console.debug(
259
- `[AppLoader] Event received: 'auth:${AUTH_ERROR_REASON.PasswordChangeRequired}', going to login`
260
- )
261
- snackbar.error('Password change required, please change your password.')
262
- setOverlay(true, 'Password change required, please change your password.')
263
- if (router.currentRoute.value.name !== RouteNames.Login) {
264
- await router.push({ name: RouteNames.Login })
265
- }
266
- setOverlay(false)
267
- })
268
-
269
- onUnmounted(() => {
270
- if (socketIoClient) {
271
- socketIoClient.disconnect()
272
- }
273
- })
274
-
275
- onBeforeMount(async () => {
276
- loading.value = true
277
- // Pick random string out of array of strings
278
- const loadingMessages = [
279
- 'Loading FDM Monster',
280
- 'Loading it all',
281
- 'Loading features',
282
- 'Loading what needs to be loaded',
283
- 'Farming potatoes',
284
- 'Wiping the floor',
285
- 'Cleaning cobwebs',
286
- 'Loading filament.dll',
287
- 'Loading 3D_printer.exe',
288
- 'Loading spools'
289
- ]
290
-
291
- const message =
292
- loadingMessages[Math.floor(Math.random() * loadingMessages.length)]
293
- setOverlay(true, message)
294
-
295
- try {
296
- await AppService.test()
297
- // Nice test for error handling
298
- // throw new Error("test");
299
- } catch (e) {
300
- loading.value = false
301
- errorCaught.value = e
302
- errorUrl.value = 'api/test'
303
- // Disable capture to sentry when it overloads
304
- captureException(e)
305
- return
306
- }
307
-
308
- // If the route is wrong about login requirements, an error will be shown
309
- const { loginRequired, wizardState } =
310
- await authStore.checkAuthenticationRequirements()
311
- if (!wizardState.wizardCompleted) {
312
- console.debug('[AppLoader] Wizard not completed, going to wizard')
313
- await authStore.logout(false)
314
- if (router.currentRoute.value.name !== RouteNames.FirstTimeSetup) {
315
- await router.replace({ name: RouteNames.FirstTimeSetup })
316
- }
317
- setOverlay(false)
318
- return
319
- }
320
-
321
- // Login is not required, load app directly
322
- if (!loginRequired) {
323
- console.debug('[AppLoader] Login not required, loading app')
324
- return await loadAppWithAuthenticationReady()
325
- }
326
-
327
- // Router will have tackled routing already
328
- console.debug('[AppLoader] Checking if tokens are present')
329
- if (!authStore.hasAuthToken && !authStore.hasRefreshToken) {
330
- console.debug(
331
- '[AppLoader] No tokens present, hiding overlay as router will have handled it'
332
- )
333
- return setOverlay(false)
334
- }
335
-
336
- // What if refreshToken is not present or not valid?
337
- setOverlay(true, 'Refreshing login')
338
- console.debug('[AppLoader] Verifying or refreshing login once')
339
- try {
340
- const { success, handled } =
341
- await authStore.verifyOrRefreshLoginOnceOrLogout()
342
- if (handled) {
343
- console.debug('[AppLoader] received handled event, hiding overlay')
344
- return
345
- }
346
-
347
- if (!success) {
348
- console.debug('[AppLoader] No success refreshing')
349
- setOverlay(true, 'Login expired, going back to login')
350
-
351
- await sleep(500)
352
- if (router.currentRoute.value.name !== RouteNames.Login) {
353
- await router.push({ name: RouteNames.Login })
354
- }
355
- setOverlay(false)
356
- // Dont load app as it will be redirected to login
357
- return
358
- }
359
- } catch (e) {
360
- console.log('[AppLoader] Error when refreshing login', e)
361
- loading.value = false
362
- errorCaught.value = (e as AxiosError).message
363
- errorUrl.value = (e as AxiosError).config?.url
364
- errorResponse.value = (e as AxiosError).response?.data
365
- captureException(e)
366
- return
367
- }
368
-
369
- console.debug('[AppLoader] Loading app')
370
- await loadAppWithAuthenticationReady()
371
- })
372
- </script>
373
-
374
- <style>
375
- @keyframes fadeIn {
376
- 0% {
377
- opacity: 0;
378
- }
379
- 100% {
380
- opacity: 1;
381
- }
382
- }
383
- </style>