@fdm-monster/server 2.0.0-rc1 → 2.0.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.
Files changed (230) hide show
  1. package/.env.template +8 -3
  2. package/.yarn/install-state.gz +0 -0
  3. package/CONTRIBUTING.md +1 -1
  4. package/README.md +5 -4
  5. package/RELEASE_NOTES.MD +53 -0
  6. package/SECURITY.md +1 -1
  7. package/dist/consoles/download-github-releases.js +3 -3
  8. package/dist/consoles/launch-http-servers.js +4 -4
  9. package/dist/consoles/launch-http-servers.js.map +1 -1
  10. package/dist/consoles/mock-bambu.server.js +35 -16
  11. package/dist/consoles/mock-bambu.server.js.map +1 -1
  12. package/dist/consoles/mock-camera/default-image.js +13 -0
  13. package/dist/consoles/mock-camera/default-image.js.map +1 -0
  14. package/dist/consoles/mock-camera/mock-camera.server.js +160 -0
  15. package/dist/consoles/mock-camera/mock-camera.server.js.map +1 -0
  16. package/dist/consoles/mock-octoprint.server.js +281 -73
  17. package/dist/consoles/mock-octoprint.server.js.map +1 -1
  18. package/dist/consoles/mock-prusalink.server.js +11 -11
  19. package/dist/consoles/mock-prusalink.server.js.map +1 -1
  20. package/dist/consoles/typeorm-create.js +135 -0
  21. package/dist/consoles/typeorm-create.js.map +1 -0
  22. package/dist/consoles/typeorm-generate.js +8 -8
  23. package/dist/consoles/typeorm-generate.js.map +1 -1
  24. package/dist/constants/authorization.constants.js +13 -26
  25. package/dist/constants/authorization.constants.js.map +1 -1
  26. package/dist/constants/server-settings.constants.js +7 -20
  27. package/dist/constants/server-settings.constants.js.map +1 -1
  28. package/dist/container.js +18 -10
  29. package/dist/container.js.map +1 -1
  30. package/dist/container.tokens.js +9 -5
  31. package/dist/container.tokens.js.map +1 -1
  32. package/dist/controllers/batch-call.controller.js +0 -15
  33. package/dist/controllers/batch-call.controller.js.map +1 -1
  34. package/dist/controllers/file-storage.controller.js +319 -0
  35. package/dist/controllers/file-storage.controller.js.map +1 -0
  36. package/dist/controllers/first-time-setup.controller.js +2 -1
  37. package/dist/controllers/first-time-setup.controller.js.map +1 -1
  38. package/dist/controllers/floor.controller.js +12 -12
  39. package/dist/controllers/floor.controller.js.map +1 -1
  40. package/dist/controllers/print-job.controller.js +666 -0
  41. package/dist/controllers/print-job.controller.js.map +1 -0
  42. package/dist/controllers/print-queue.controller.js +375 -0
  43. package/dist/controllers/print-queue.controller.js.map +1 -0
  44. package/dist/controllers/printer-files.controller.js +86 -59
  45. package/dist/controllers/printer-files.controller.js.map +1 -1
  46. package/dist/controllers/printer-settings.controller.js +0 -21
  47. package/dist/controllers/printer-settings.controller.js.map +1 -1
  48. package/dist/controllers/{printer-group.controller.js → printer-tag.controller.js} +51 -34
  49. package/dist/controllers/printer-tag.controller.js.map +1 -0
  50. package/dist/controllers/printer.controller.js +15 -0
  51. package/dist/controllers/printer.controller.js.map +1 -1
  52. package/dist/controllers/server-private.controller.js +2 -1
  53. package/dist/controllers/server-private.controller.js.map +1 -1
  54. package/dist/controllers/server-public.controller.js +6 -2
  55. package/dist/controllers/server-public.controller.js.map +1 -1
  56. package/dist/controllers/settings.controller.js +44 -44
  57. package/dist/controllers/settings.controller.js.map +1 -1
  58. package/dist/controllers/slicer-compat.controller.js +220 -0
  59. package/dist/controllers/slicer-compat.controller.js.map +1 -0
  60. package/dist/data-source.js +20 -8
  61. package/dist/data-source.js.map +1 -1
  62. package/dist/entities/camera-stream.entity.js +2 -1
  63. package/dist/entities/camera-stream.entity.js.map +1 -1
  64. package/dist/entities/floor.entity.js +3 -5
  65. package/dist/entities/floor.entity.js.map +1 -1
  66. package/dist/entities/index.js +15 -7
  67. package/dist/entities/index.js.map +1 -1
  68. package/dist/entities/print-job.entity.js +195 -0
  69. package/dist/entities/print-job.entity.js.map +1 -0
  70. package/dist/entities/{printer-group.entity.js → printer-tag.entity.js} +17 -17
  71. package/dist/entities/printer-tag.entity.js.map +1 -0
  72. package/dist/entities/printer.entity.js +4 -10
  73. package/dist/entities/printer.entity.js.map +1 -1
  74. package/dist/entities/settings.entity.js +3 -12
  75. package/dist/entities/settings.entity.js.map +1 -1
  76. package/dist/entities/{group.entity.js → tag.entity.js} +15 -8
  77. package/dist/entities/tag.entity.js.map +1 -0
  78. package/dist/index.js +8 -2
  79. package/dist/index.js.map +1 -1
  80. package/dist/middleware/exception.filter.js +114 -90
  81. package/dist/middleware/exception.filter.js.map +1 -1
  82. package/dist/middleware/global.middleware.js +6 -6
  83. package/dist/middleware/global.middleware.js.map +1 -1
  84. package/dist/middleware/slicer-api-key.middleware.js +29 -0
  85. package/dist/middleware/slicer-api-key.middleware.js.map +1 -0
  86. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +186 -0
  87. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -0
  88. package/dist/migrations/1767279607392-DropCustomGcode.js +31 -0
  89. package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -0
  90. package/dist/migrations/1767291804417-DropPrintCompletions.js +37 -0
  91. package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -0
  92. package/dist/migrations/1767352862576-DropSettingsFileClean.js +88 -0
  93. package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -0
  94. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +107 -0
  95. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -0
  96. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +62 -0
  97. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -0
  98. package/dist/migrations/1767432108916-RenameGroupToTag.js +86 -0
  99. package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -0
  100. package/dist/migrations/1767451444137-AddPrintJob.js +207 -0
  101. package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -0
  102. package/dist/server.constants.js +9 -9
  103. package/dist/server.constants.js.map +1 -1
  104. package/dist/server.host.js +24 -32
  105. package/dist/server.host.js.map +1 -1
  106. package/dist/services/bambu/bambu-ftp.adapter.js +1 -1
  107. package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
  108. package/dist/services/bambu/bambu-mqtt.adapter.js +73 -76
  109. package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
  110. package/dist/services/core/batch-call.service.js +0 -25
  111. package/dist/services/core/batch-call.service.js.map +1 -1
  112. package/dist/services/core/multer.service.js +5 -9
  113. package/dist/services/core/multer.service.js.map +1 -1
  114. package/dist/services/core/yaml.service.js +231 -156
  115. package/dist/services/core/yaml.service.js.map +1 -1
  116. package/dist/services/file-analysis.service.js +146 -0
  117. package/dist/services/file-analysis.service.js.map +1 -0
  118. package/dist/services/file-storage.service.js +387 -0
  119. package/dist/services/file-storage.service.js.map +1 -0
  120. package/dist/services/interfaces/floor.dto.js +3 -3
  121. package/dist/services/interfaces/floor.dto.js.map +1 -1
  122. package/dist/services/interfaces/{printer-group.dto.js → printer-tag.dto.js} +9 -8
  123. package/dist/services/interfaces/printer-tag.dto.js.map +1 -0
  124. package/dist/services/interfaces/{print-completion.interface.js → printer-tag.service.interface.js} +1 -1
  125. package/dist/services/interfaces/{printer-group.service.interface.js.map → printer-tag.service.interface.js.map} +1 -1
  126. package/dist/services/interfaces/settings.dto.js +0 -1
  127. package/dist/services/interfaces/settings.dto.js.map +1 -1
  128. package/dist/services/interfaces/{group.dto.js → tag.dto.js} +1 -1
  129. package/dist/services/interfaces/tag.dto.js.map +1 -0
  130. package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +1 -0
  131. package/dist/services/octoprint/octoprint-api.routes.js +0 -7
  132. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  133. package/dist/services/octoprint/octoprint.client.js +0 -4
  134. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  135. package/dist/services/orm/floor.service.js +9 -16
  136. package/dist/services/orm/floor.service.js.map +1 -1
  137. package/dist/services/orm/print-job.service.js +539 -0
  138. package/dist/services/orm/print-job.service.js.map +1 -0
  139. package/dist/services/orm/printer-tag.service.js +120 -0
  140. package/dist/services/orm/printer-tag.service.js.map +1 -0
  141. package/dist/services/orm/settings.service.js +5 -6
  142. package/dist/services/orm/settings.service.js.map +1 -1
  143. package/dist/services/print-file-downloader.service.js +169 -0
  144. package/dist/services/print-file-downloader.service.js.map +1 -0
  145. package/dist/services/print-queue.service.js +268 -0
  146. package/dist/services/print-queue.service.js.map +1 -0
  147. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +1 -3
  148. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
  149. package/dist/services/validators/floor-service.validation.js +10 -10
  150. package/dist/services/validators/floor-service.validation.js.map +1 -1
  151. package/dist/services/validators/print-job.validation.js +31 -0
  152. package/dist/services/validators/print-job.validation.js.map +1 -0
  153. package/dist/services/validators/settings-service.validation.js +21 -24
  154. package/dist/services/validators/settings-service.validation.js.map +1 -1
  155. package/dist/services/validators/yaml-service.validation.js +9 -13
  156. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  157. package/dist/shared/load-controllers.js +2 -1
  158. package/dist/shared/load-controllers.js.map +1 -1
  159. package/dist/shared/runtime-settings.migration.js +9 -9
  160. package/dist/shared/runtime-settings.migration.js.map +1 -1
  161. package/dist/state/floor.store.js +2 -9
  162. package/dist/state/floor.store.js.map +1 -1
  163. package/dist/state/printer-events.cache.js +179 -19
  164. package/dist/state/printer-events.cache.js.map +1 -1
  165. package/dist/state/printer-thumbnail.cache.js +98 -183
  166. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  167. package/dist/state/settings.store.js +39 -37
  168. package/dist/state/settings.store.js.map +1 -1
  169. package/dist/state/socket-io.gateway.js +1 -1
  170. package/dist/state/socket-io.gateway.js.map +1 -1
  171. package/dist/tasks/boot.task.js +7 -5
  172. package/dist/tasks/boot.task.js.map +1 -1
  173. package/dist/tasks/print-job-analysis.task.js +116 -0
  174. package/dist/tasks/print-job-analysis.task.js.map +1 -0
  175. package/dist/tasks/printer-files-load.task.js +29 -0
  176. package/dist/tasks/printer-files-load.task.js.map +1 -0
  177. package/dist/tasks/socketio.task.js +1 -1
  178. package/dist/tasks/socketio.task.js.map +1 -1
  179. package/dist/tasks.js +3 -2
  180. package/dist/tasks.js.map +1 -1
  181. package/dist/utils/parsers/3mf.parser.js +337 -0
  182. package/dist/utils/parsers/3mf.parser.js.map +1 -0
  183. package/dist/utils/parsers/bgcode.parser.js +223 -0
  184. package/dist/utils/parsers/bgcode.parser.js.map +1 -0
  185. package/dist/utils/parsers/gcode.parser.js +254 -0
  186. package/dist/utils/parsers/gcode.parser.js.map +1 -0
  187. package/dist/utils/swagger/decorators.js +39 -0
  188. package/dist/utils/swagger/decorators.js.map +1 -0
  189. package/dist/utils/swagger/generator.js +196 -0
  190. package/dist/utils/swagger/generator.js.map +1 -0
  191. package/dist/utils/swagger/swagger.js +93 -0
  192. package/dist/utils/swagger/swagger.js.map +1 -0
  193. package/package.json +21 -17
  194. package/dist/controllers/custom-gcode.controller.js +0 -147
  195. package/dist/controllers/custom-gcode.controller.js.map +0 -1
  196. package/dist/controllers/print-completion.controller.js +0 -118
  197. package/dist/controllers/print-completion.controller.js.map +0 -1
  198. package/dist/controllers/printer-group.controller.js.map +0 -1
  199. package/dist/entities/custom-gcode.entity.js +0 -49
  200. package/dist/entities/custom-gcode.entity.js.map +0 -1
  201. package/dist/entities/group.entity.js.map +0 -1
  202. package/dist/entities/print-completion.entity.js +0 -90
  203. package/dist/entities/print-completion.entity.js.map +0 -1
  204. package/dist/entities/printer-group.entity.js.map +0 -1
  205. package/dist/services/interfaces/custom-gcode.dto.js +0 -18
  206. package/dist/services/interfaces/custom-gcode.dto.js.map +0 -1
  207. package/dist/services/interfaces/custom-gcode.service.interface.js +0 -6
  208. package/dist/services/interfaces/custom-gcode.service.interface.js.map +0 -1
  209. package/dist/services/interfaces/gcode-analysis.dto.js.map +0 -1
  210. package/dist/services/interfaces/group.dto.js.map +0 -1
  211. package/dist/services/interfaces/print-completion-context.dto.js +0 -6
  212. package/dist/services/interfaces/print-completion-context.dto.js.map +0 -1
  213. package/dist/services/interfaces/print-completion.dto.js +0 -38
  214. package/dist/services/interfaces/print-completion.dto.js.map +0 -1
  215. package/dist/services/interfaces/print-completion.interface.js.map +0 -1
  216. package/dist/services/interfaces/printer-group.dto.js.map +0 -1
  217. package/dist/services/interfaces/printer-group.service.interface.js +0 -6
  218. package/dist/services/orm/custom-gcode.service.js +0 -42
  219. package/dist/services/orm/custom-gcode.service.js.map +0 -1
  220. package/dist/services/orm/print-completion.service.js +0 -87
  221. package/dist/services/orm/print-completion.service.js.map +0 -1
  222. package/dist/services/orm/print-completion.shared.js +0 -59
  223. package/dist/services/orm/print-completion.shared.js.map +0 -1
  224. package/dist/services/orm/printer-group.service.js +0 -109
  225. package/dist/services/orm/printer-group.service.js.map +0 -1
  226. package/dist/tasks/print-completion.socketio.task.js +0 -91
  227. package/dist/tasks/print-completion.socketio.task.js.map +0 -1
  228. package/dist/tasks/printer-file-clean.task.js +0 -74
  229. package/dist/tasks/printer-file-clean.task.js.map +0 -1
  230. /package/dist/services/{interfaces → octoprint/dto/files}/gcode-analysis.dto.js +0 -0
@@ -13,7 +13,7 @@ const _yamlservicevalidation = require("../validators/yaml-service.validation");
13
13
  const _jsyaml = require("js-yaml");
14
14
  const _printerapiinterface = require("../printer-api.interface");
15
15
  class YamlService {
16
- printerGroupService;
16
+ printerTagService;
17
17
  printerService;
18
18
  printerCache;
19
19
  floorStore;
@@ -22,8 +22,8 @@ class YamlService {
22
22
  roleService;
23
23
  settingsStore;
24
24
  logger;
25
- constructor(loggerFactory, printerGroupService, printerService, printerCache, floorStore, floorService, userService, roleService, settingsStore){
26
- this.printerGroupService = printerGroupService;
25
+ constructor(loggerFactory, printerTagService, printerService, printerCache, floorStore, floorService, userService, roleService, settingsStore){
26
+ this.printerTagService = printerTagService;
27
27
  this.printerService = printerService;
28
28
  this.printerCache = printerCache;
29
29
  this.floorStore = floorStore;
@@ -37,43 +37,20 @@ class YamlService {
37
37
  const importSpec = await (0, _jsyaml.load)(yamlBuffer);
38
38
  const databaseTypeSqlite = importSpec.databaseType === "sqlite";
39
39
  const { exportPrinters, exportFloorGrid, exportSettings, exportUsers } = importSpec.config;
40
- const wizardCompleted = this.settingsStore.getWizardSettings()?.wizardCompleted;
40
+ this.normalizeYamlData(importSpec, databaseTypeSqlite);
41
+ const importData = await (0, _validators.validateInput)(importSpec, _yamlservicevalidation.importPrintersFloorsYamlSchema);
41
42
  const hasSystemData = exportSettings || exportUsers;
42
- if (hasSystemData && wizardCompleted) {
43
+ if (hasSystemData) {
43
44
  await this.validateSystemTablesEmpty(importSpec);
44
- }
45
- for (const printer of importSpec.printers){
46
- if (!printer.name && printer.printerName) {
47
- printer.name = printer.printerName;
48
- delete printer.printerName;
49
- }
50
- if (printer.settingsAppearance?.name) {
51
- printer.name = printer.settingsAppearance?.name;
52
- delete printer.settingsAppearance?.name;
45
+ if (exportSettings && importSpec.settings) {
46
+ this.logger.log("Importing settings");
47
+ await this.importSettings(importSpec.settings);
53
48
  }
54
- if (databaseTypeSqlite && typeof printer.id === "string") {
55
- printer.id = Number.parseInt(printer.id);
56
- }
57
- if (![
58
- _printerapiinterface.OctoprintType,
59
- _printerapiinterface.MoonrakerType
60
- ].includes(printer.printerType)) {
61
- printer.printerType = _printerapiinterface.OctoprintType;
62
- }
63
- }
64
- if (databaseTypeSqlite) {
65
- for (const floor of importSpec.floors){
66
- if (typeof floor.id === "string") {
67
- floor.id = Number.parseInt(floor.id);
68
- }
69
- for (const printer of floor.printers){
70
- if (typeof printer.printerId === "string") {
71
- printer.printerId = Number.parseInt(printer.printerId);
72
- }
73
- }
49
+ if (exportUsers && importSpec.users && importSpec.users.length > 0) {
50
+ this.logger.log(`Importing users (${importSpec.users.length} users)`);
51
+ await this.importUsers(importSpec.users, databaseTypeSqlite);
74
52
  }
75
53
  }
76
- const importData = await (0, _validators.validateInput)(importSpec, _yamlservicevalidation.importPrintersFloorsYamlSchema);
77
54
  if (exportFloorGrid && importData.floors?.length) {
78
55
  for (const floor of importData.floors){
79
56
  await (0, _validators.validateInput)(floor, _yamlservicevalidation.importPrinterPositionsSchema);
@@ -83,119 +60,148 @@ class YamlService {
83
60
  const { updateByPropertyPrinters, insertPrinters } = await this.analysePrintersUpsert(importData.printers ?? [], importData.config.printerComparisonStrategiesByPriority);
84
61
  this.logger.log("Analysing floors for import");
85
62
  const { updateByPropertyFloors, insertFloors } = await this.analyseFloorsUpsert(importData.floors ?? [], importData.config.floorComparisonStrategiesByPriority);
86
- this.logger.log("Analysing groups for import");
87
- const { updateByNameGroups, insertGroups } = await this.analyseUpsertGroups(importData.groups ?? []);
63
+ this.logger.log("Analysing tags for import");
64
+ const { updateByNameTags, insertTags } = await this.analyseUpsertTags(importData.tags ?? []);
88
65
  this.logger.log(`Performing pure insert printers (${insertPrinters.length} printers)`);
89
66
  const printerIdMap = {};
90
67
  for (const newPrinter of insertPrinters){
91
- const state = await this.printerService.create({
92
- ...newPrinter
93
- });
94
- if (!newPrinter.id) {
95
- throw new Error(`Saved ID was empty ${JSON.stringify(newPrinter)}`);
68
+ try {
69
+ const state = await this.printerService.create({
70
+ ...newPrinter
71
+ });
72
+ if (!newPrinter.id) {
73
+ throw new Error(`Saved ID was empty ${JSON.stringify(newPrinter)}`);
74
+ }
75
+ printerIdMap[newPrinter.id] = state.id;
76
+ } catch (error) {
77
+ this.logger.error(`Failed to create printer ${newPrinter.name}:`, error);
96
78
  }
97
- printerIdMap[newPrinter.id] = state.id;
98
79
  }
99
80
  this.logger.log(`Performing update import printers (${updateByPropertyPrinters.length} printers)`);
100
81
  for (const updatePrinterSpec of updateByPropertyPrinters){
101
- const updateId = updatePrinterSpec.printerId;
102
- const updatedPrinter = updatePrinterSpec.value;
103
- if (typeof updateId === "string") {
104
- throw new Error("Cannot update a printer by string id in sqlite mode");
105
- }
106
- const originalPrinterId = updatedPrinter.id;
107
- delete updatePrinterSpec.value.id;
108
- updatedPrinter.id = updateId;
109
- const state = await this.printerService.update(updateId, updatedPrinter);
110
- if (!updatePrinterSpec.printerId) {
111
- throw new Error("Saved ID was empty");
82
+ try {
83
+ const updateId = updatePrinterSpec.printerId;
84
+ const updatedPrinter = updatePrinterSpec.value;
85
+ if (typeof updateId === "string") {
86
+ throw new Error("Cannot update a printer by string id in sqlite mode");
87
+ }
88
+ const originalPrinterId = updatedPrinter.id;
89
+ delete updatePrinterSpec.value.id;
90
+ updatedPrinter.id = updateId;
91
+ const state = await this.printerService.update(updateId, updatedPrinter);
92
+ if (!updatePrinterSpec.printerId) {
93
+ throw new Error("Saved ID was empty");
94
+ }
95
+ printerIdMap[originalPrinterId] = state.id;
96
+ } catch (error) {
97
+ this.logger.error(`Failed to update printer ${updatePrinterSpec.value.name}:`, error);
112
98
  }
113
- printerIdMap[originalPrinterId] = state.id;
114
99
  }
115
100
  this.logger.log(`Performing pure create floors (${insertFloors.length} floors)`);
116
101
  const floorIdMap = {};
117
102
  for (const newFloor of insertFloors){
118
- const originalFloorId = newFloor.id;
119
- delete newFloor.id;
120
- const knownPrinterPositions = [];
121
- if (exportFloorGrid && exportPrinters) {
122
- for (const floorPosition of newFloor.printers){
123
- const knownPrinterId = printerIdMap[floorPosition.printerId];
124
- if (!knownPrinterId) {
125
- continue;
103
+ try {
104
+ const originalFloorId = newFloor.id;
105
+ delete newFloor.id;
106
+ const knownPrinterPositions = [];
107
+ if (exportFloorGrid && exportPrinters) {
108
+ for (const floorPosition of newFloor.printers){
109
+ const knownPrinterId = printerIdMap[floorPosition.printerId];
110
+ if (!knownPrinterId) {
111
+ continue;
112
+ }
113
+ delete floorPosition.id;
114
+ delete floorPosition.floorId;
115
+ floorPosition.printerId = knownPrinterId;
116
+ knownPrinterPositions.push(floorPosition);
126
117
  }
127
- delete floorPosition.id;
128
- delete floorPosition.floorId;
129
- floorPosition.printerId = knownPrinterId;
130
- knownPrinterPositions.push(floorPosition);
118
+ newFloor.printers = knownPrinterPositions;
131
119
  }
132
- newFloor.printers = knownPrinterPositions;
120
+ const createdFloor = await this.floorStore.create({
121
+ ...newFloor
122
+ });
123
+ floorIdMap[originalFloorId] = createdFloor.id;
124
+ } catch (error) {
125
+ this.logger.error(`Failed to create floor ${newFloor.name}:`, error);
133
126
  }
134
- const createdFloor = await this.floorStore.create({
135
- ...newFloor
136
- });
137
- floorIdMap[originalFloorId] = createdFloor.id;
138
127
  }
139
128
  this.logger.log(`Performing update of floors (${updateByPropertyFloors.length} floors)`);
140
129
  for (const updateFloorSpec of updateByPropertyFloors){
141
- const updateId = updateFloorSpec.floorId;
142
- if (typeof updateId === "string") {
143
- throw new Error("Cannot update a floor by string id in sqlite mode");
144
- }
145
- const updatedFloor = updateFloorSpec.value;
146
- const originalFloorId = updatedFloor.id;
147
- delete updatedFloor.id;
148
- const knownPrinters = [];
149
- if (exportFloorGrid && exportPrinters) {
150
- for (const floorPosition of updatedFloor?.printers){
151
- const knownPrinterId = printerIdMap[floorPosition.printerId];
152
- if (!knownPrinterId) {
153
- continue;
130
+ try {
131
+ const updateId = updateFloorSpec.floorId;
132
+ if (typeof updateId === "string") {
133
+ throw new Error("Cannot update a floor by string id in sqlite mode");
134
+ }
135
+ const updatedFloor = updateFloorSpec.value;
136
+ const originalFloorId = updatedFloor.id;
137
+ delete updatedFloor.id;
138
+ const knownPrinters = [];
139
+ if (exportFloorGrid && exportPrinters) {
140
+ for (const floorPosition of updatedFloor?.printers){
141
+ const knownPrinterId = printerIdMap[floorPosition.printerId];
142
+ if (!knownPrinterId) {
143
+ continue;
144
+ }
145
+ delete floorPosition.id;
146
+ delete floorPosition.floorId;
147
+ floorPosition.printerId = knownPrinterId;
148
+ floorPosition.floorId = updateId;
149
+ knownPrinters.push(floorPosition);
154
150
  }
155
- delete floorPosition.id;
156
- delete floorPosition.floorId;
157
- floorPosition.printerId = knownPrinterId;
158
- floorPosition.floorId = updateId;
159
- knownPrinters.push(floorPosition);
151
+ updatedFloor.id = updateId;
152
+ updatedFloor.printers = knownPrinters;
160
153
  }
161
- updatedFloor.id = updateId;
162
- updatedFloor.printers = knownPrinters;
154
+ const newFloor = await this.floorStore.update(updateId, updatedFloor);
155
+ floorIdMap[originalFloorId] = newFloor.id;
156
+ } catch (error) {
157
+ this.logger.error(`Failed to update floor ${updateFloorSpec.value.name}:`, error);
163
158
  }
164
- const newFloor = await this.floorStore.update(updateId, updatedFloor);
165
- floorIdMap[originalFloorId] = newFloor.id;
166
159
  }
167
160
  await this.floorStore.loadStore();
168
- this.logger.log(`Performing pure create groups (${insertGroups.length} groups)`);
169
- for (const group of insertGroups){
170
- const createdGroup = await this.printerGroupService.createGroup({
171
- name: group.name
172
- });
173
- for (const printer of group.printers){
174
- const knownPrinterId = printerIdMap[printer.printerId];
175
- if (!knownPrinterId) continue;
176
- await this.printerGroupService.addPrinterToGroup(createdGroup.id, knownPrinterId);
161
+ this.logger.log(`Performing pure create tags (${insertTags.length} tags)`);
162
+ for (const tag of insertTags){
163
+ try {
164
+ const createdTag = await this.printerTagService.createTag({
165
+ name: tag.name,
166
+ color: tag.color
167
+ });
168
+ for (const printer of tag.printers){
169
+ const knownPrinterId = printerIdMap[printer.printerId];
170
+ if (!knownPrinterId) continue;
171
+ try {
172
+ await this.printerTagService.addPrinterToTag(createdTag.id, knownPrinterId);
173
+ } catch (error) {
174
+ this.logger.error(`Failed to add printer ${knownPrinterId} to tag ${tag.name}:`, error);
175
+ }
176
+ }
177
+ } catch (error) {
178
+ this.logger.error(`Failed to create tag ${tag.name}:`, error);
177
179
  }
178
180
  }
179
- this.logger.log(`Performing update of grouped printer links (${updateByNameGroups.length} groups)`);
180
- for (const updateGroupSpec of updateByNameGroups){
181
- const existingGroup = await this.printerGroupService.getGroupWithPrinters(updateGroupSpec.groupId);
182
- const existingPrinterIds = existingGroup.printers.map((p)=>p.printerId);
183
- const wantedTargetPrinterIds = updateGroupSpec.value.printers.filter((p)=>!!printerIdMap[p.printerId]).map((p)=>printerIdMap[p.printerId]);
184
- for (const unwantedId of existingPrinterIds.filter((eid)=>!wantedTargetPrinterIds.includes(eid))){
185
- await this.printerGroupService.removePrinterFromGroup(existingGroup.id, unwantedId);
186
- }
187
- for (const nonExistingNewId of wantedTargetPrinterIds.filter((eid)=>!existingPrinterIds.includes(eid))){
188
- await this.printerGroupService.addPrinterToGroup(existingGroup.id, nonExistingNewId);
181
+ this.logger.log(`Performing update of tag printer links (${updateByNameTags.length} tags)`);
182
+ for (const updateTagSpec of updateByNameTags){
183
+ try {
184
+ const existingTag = await this.printerTagService.getPrintersByTag(updateTagSpec.tagId);
185
+ const existingPrinterIds = existingTag.printers.map((p)=>p.printerId);
186
+ const wantedTargetPrinterIds = updateTagSpec.value.printers.filter((p)=>!!printerIdMap[p.printerId]).map((p)=>printerIdMap[p.printerId]);
187
+ for (const unwantedId of existingPrinterIds.filter((eid)=>!wantedTargetPrinterIds.includes(eid))){
188
+ try {
189
+ await this.printerTagService.removePrinterFromTag(existingTag.id, unwantedId);
190
+ } catch (error) {
191
+ this.logger.error(`Failed to remove printer ${unwantedId} from tag ${existingTag.name}:`, error);
192
+ }
193
+ }
194
+ for (const nonExistingNewId of wantedTargetPrinterIds.filter((eid)=>!existingPrinterIds.includes(eid))){
195
+ try {
196
+ await this.printerTagService.addPrinterToTag(existingTag.id, nonExistingNewId);
197
+ } catch (error) {
198
+ this.logger.error(`Failed to add printer ${nonExistingNewId} to tag ${existingTag.name}:`, error);
199
+ }
200
+ }
201
+ } catch (error) {
202
+ this.logger.error(`Failed to update tag ${updateTagSpec.value.name}:`, error);
189
203
  }
190
204
  }
191
- if (exportSettings && importSpec.settings) {
192
- this.logger.log("Importing settings");
193
- await this.importSettings(importSpec.settings);
194
- }
195
- if (exportUsers && importSpec.users && importSpec.users.length > 0) {
196
- this.logger.log(`Importing users (${importSpec.users.length} users)`);
197
- await this.importUsers(importSpec.users, databaseTypeSqlite);
198
- }
199
205
  return {
200
206
  updateByPropertyPrinters,
201
207
  updateByPropertyFloors,
@@ -215,14 +221,27 @@ class YamlService {
215
221
  if (settings.frontend) {
216
222
  await this.settingsStore.updateFrontendSettings(settings.frontend);
217
223
  }
218
- if (settings.printerFileClean) {
219
- await this.settingsStore.updateFileCleanSettings(settings.printerFileClean);
220
- }
221
224
  if (settings.wizard?.wizardCompleted) {
222
225
  const importedWizardVersion = settings.wizard.wizardVersion;
223
226
  this.logger.log(`Marking wizard as completed with version: ${importedWizardVersion}`);
224
227
  await this.settingsStore.setWizardCompleted(importedWizardVersion);
225
228
  }
229
+ if (settings.credential) {
230
+ const { jwtExpiresIn, refreshTokenAttempts, refreshTokenExpiry, slicerApiKey } = settings.credential;
231
+ if (jwtExpiresIn || refreshTokenAttempts || refreshTokenExpiry) {
232
+ await this.settingsStore.updateCoreCredentialSettings({
233
+ jwtExpiresIn: jwtExpiresIn ?? (await this.settingsStore.getCredentialSettings()).jwtExpiresIn,
234
+ refreshTokenAttempts: refreshTokenAttempts ?? (await this.settingsStore.getCredentialSettings()).refreshTokenAttempts,
235
+ refreshTokenExpiry: refreshTokenExpiry ?? (await this.settingsStore.getCredentialSettings()).refreshTokenExpiry
236
+ });
237
+ this.logger.log("Imported credential settings");
238
+ }
239
+ if (slicerApiKey) {
240
+ await this.settingsStore.setSlicerApiKey(slicerApiKey);
241
+ this.logger.log("Imported slicer API key");
242
+ }
243
+ }
244
+ await this.settingsStore.loadSettings();
226
245
  this.logger.log("Settings imported successfully");
227
246
  }
228
247
  async importUsers(users, databaseTypeSqlite) {
@@ -247,6 +266,10 @@ class YamlService {
247
266
  }
248
267
  async validateSystemTablesEmpty(importSpec) {
249
268
  const errors = [];
269
+ const wizardCompleted = this.settingsStore.getWizardSettings()?.wizardCompleted;
270
+ if (!wizardCompleted) {
271
+ return;
272
+ }
250
273
  if (importSpec.settings && importSpec.config.exportSettings) {
251
274
  const existingSettings = this.settingsStore.getSettings();
252
275
  if (existingSettings && Object.keys(existingSettings).length > 0) {
@@ -320,7 +343,7 @@ class YamlService {
320
343
  async analyseFloorsUpsert(upsertFloors, comparisonStrategy) {
321
344
  const existingFloors = await this.floorService.list();
322
345
  const names = existingFloors.map((p)=>p.name.toLowerCase());
323
- const floorLevels = existingFloors.map((p)=>p.floor);
346
+ const floorLevels = existingFloors.map((p)=>p.order);
324
347
  const ids = existingFloors.map((p)=>p.id.toString());
325
348
  const insertFloors = [];
326
349
  const updateByPropertyFloors = [];
@@ -344,7 +367,7 @@ class YamlService {
344
367
  break;
345
368
  }
346
369
  } else if (strategy === "floor") {
347
- const comparedProperty = floor.floor;
370
+ const comparedProperty = floor.order;
348
371
  const foundIndex = floorLevels.findIndex((n)=>n === comparedProperty);
349
372
  if (foundIndex !== -1) {
350
373
  if (!ids[foundIndex]) {
@@ -368,43 +391,43 @@ class YamlService {
368
391
  insertFloors
369
392
  };
370
393
  }
371
- async analyseUpsertGroups(upsertGroups) {
372
- if (!upsertGroups?.length) {
394
+ async analyseUpsertTags(upsertTags) {
395
+ if (!upsertTags?.length) {
373
396
  return {
374
- updateByNameGroups: [],
375
- insertGroups: []
397
+ updateByNameTags: [],
398
+ insertTags: []
376
399
  };
377
400
  }
378
- const existingGroups = await this.printerGroupService.listGroups();
379
- const names = existingGroups.map((p)=>p.name.toLowerCase());
380
- const ids = existingGroups.map((p)=>p.id.toString());
381
- const insertGroups = [];
382
- const updateByNameGroups = [];
383
- for (const group of upsertGroups){
384
- const comparedProperty = group.name.toLowerCase();
401
+ const existingTags = await this.printerTagService.listTags();
402
+ const names = existingTags.map((p)=>p.name.toLowerCase());
403
+ const ids = existingTags.map((p)=>p.id.toString());
404
+ const insertTags = [];
405
+ const updateByNameTags = [];
406
+ for (const tag of upsertTags){
407
+ const comparedProperty = tag.name.toLowerCase();
385
408
  const foundIndex = names.findIndex((n)=>n === comparedProperty);
386
409
  if (foundIndex !== -1) {
387
410
  if (!ids[foundIndex]) {
388
- throw new Error("IDS not found, group name");
411
+ throw new Error("IDS not found, tag name");
389
412
  }
390
- updateByNameGroups.push({
413
+ updateByNameTags.push({
391
414
  strategy: "name",
392
- groupId: Number.parseInt(ids[foundIndex]),
393
- value: group
415
+ tagId: Number.parseInt(ids[foundIndex]),
416
+ value: tag
394
417
  });
395
418
  break;
396
419
  } else {
397
- insertGroups.push(group);
420
+ insertTags.push(tag);
398
421
  }
399
422
  }
400
423
  return {
401
- insertGroups,
402
- updateByNameGroups
424
+ insertTags,
425
+ updateByNameTags
403
426
  };
404
427
  }
405
428
  async exportYaml(options) {
406
429
  const input = await (0, _validators.validateInput)(options, _yamlservicevalidation.exportPrintersFloorsYamlSchema);
407
- const { exportFloors, exportPrinters, exportFloorGrid, exportGroups, exportSettings, exportUsers } = input;
430
+ const { exportFloors, exportPrinters, exportFloorGrid, exportTags, exportSettings, exportUsers } = input;
408
431
  const dumpedObject = {
409
432
  version: process.env.npm_package_version,
410
433
  exportedAt: new Date(),
@@ -412,7 +435,7 @@ class YamlService {
412
435
  config: input,
413
436
  printers: undefined,
414
437
  floors: undefined,
415
- groups: undefined,
438
+ tags: undefined,
416
439
  settings: undefined,
417
440
  users: undefined,
418
441
  user_roles: undefined
@@ -421,7 +444,7 @@ class YamlService {
421
444
  const printers = await this.printerService.list();
422
445
  dumpedObject.printers = printers.map((p)=>{
423
446
  const printerId = p.id;
424
- const { apiKey } = this.printerCache.getLoginDto(printerId);
447
+ const { apiKey, username, password } = this.printerCache.getLoginDto(printerId);
425
448
  return {
426
449
  id: printerId,
427
450
  disabledReason: p.disabledReason,
@@ -430,7 +453,9 @@ class YamlService {
430
453
  dateAdded: p.dateAdded,
431
454
  name: p.name,
432
455
  printerURL: p.printerURL,
433
- apiKey
456
+ apiKey,
457
+ username,
458
+ password
434
459
  };
435
460
  });
436
461
  }
@@ -439,7 +464,7 @@ class YamlService {
439
464
  dumpedObject.floors = floors.map((f)=>{
440
465
  const dumpedFloor = {
441
466
  id: f.id,
442
- floor: f.floor,
467
+ order: f.order,
443
468
  name: f.name,
444
469
  printers: undefined
445
470
  };
@@ -456,13 +481,13 @@ class YamlService {
456
481
  return dumpedFloor;
457
482
  });
458
483
  }
459
- if (exportGroups) {
460
- const groups = await this.printerGroupService.listGroups();
461
- dumpedObject.groups = groups.map((g)=>{
484
+ if (exportTags) {
485
+ const tags = await this.printerTagService.listTags();
486
+ dumpedObject.tags = tags.map((t)=>{
462
487
  return {
463
- name: g.name,
464
- id: g.id,
465
- printers: g.printers.map((p)=>{
488
+ name: t.name,
489
+ id: t.id,
490
+ printers: t.printers.map((p)=>{
466
491
  return {
467
492
  printerId: p.printerId
468
493
  };
@@ -471,7 +496,10 @@ class YamlService {
471
496
  });
472
497
  }
473
498
  if (exportSettings) {
474
- dumpedObject.settings = this.settingsStore.getSettings();
499
+ dumpedObject.settings = {
500
+ ...this.settingsStore.getSettings(),
501
+ ...this.settingsStore.getSettingsSensitive()
502
+ };
475
503
  }
476
504
  if (exportUsers) {
477
505
  const users = await this.userService.listUsers(1000);
@@ -492,6 +520,53 @@ class YamlService {
492
520
  }
493
521
  return (0, _jsyaml.dump)(dumpedObject, {});
494
522
  }
523
+ normalizeYamlData(importSpec, databaseTypeSqlite) {
524
+ for (const printer of importSpec.printers){
525
+ if (!printer.name && printer.printerName) {
526
+ printer.name = printer.printerName;
527
+ delete printer.printerName;
528
+ }
529
+ if (printer.settingsAppearance?.name) {
530
+ printer.name = printer.settingsAppearance?.name;
531
+ delete printer.settingsAppearance?.name;
532
+ }
533
+ if (databaseTypeSqlite && typeof printer.id === "string") {
534
+ printer.id = Number.parseInt(printer.id);
535
+ }
536
+ if (![
537
+ _printerapiinterface.OctoprintType,
538
+ _printerapiinterface.MoonrakerType,
539
+ _printerapiinterface.PrusaLinkType,
540
+ _printerapiinterface.BambuType
541
+ ].includes(printer.printerType)) {
542
+ printer.printerType = _printerapiinterface.OctoprintType;
543
+ }
544
+ }
545
+ for (const floor of importSpec.floors){
546
+ if (floor.floor !== undefined && floor.order === undefined) {
547
+ floor.order = floor.floor;
548
+ delete floor.floor;
549
+ }
550
+ if (databaseTypeSqlite) {
551
+ if (typeof floor.id === "string") {
552
+ floor.id = Number.parseInt(floor.id);
553
+ }
554
+ for (const printer of floor.printers){
555
+ if (typeof printer.printerId === "string") {
556
+ printer.printerId = Number.parseInt(printer.printerId);
557
+ }
558
+ }
559
+ }
560
+ }
561
+ if (importSpec.groups && !importSpec.tags) {
562
+ importSpec.tags = importSpec.groups;
563
+ delete importSpec.groups;
564
+ }
565
+ if (importSpec.config.exportGroups !== undefined && importSpec.config.exportTags === undefined) {
566
+ importSpec.config.exportTags = importSpec.config.exportGroups;
567
+ delete importSpec.config.exportGroups;
568
+ }
569
+ }
495
570
  }
496
571
 
497
572
  //# sourceMappingURL=yaml.service.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/core/yaml.service.ts"],"names":["YamlService","logger","loggerFactory","printerGroupService","printerService","printerCache","floorStore","floorService","userService","roleService","settingsStore","name","importYaml","yamlBuffer","importSpec","load","databaseTypeSqlite","databaseType","exportPrinters","exportFloorGrid","exportSettings","exportUsers","config","wizardCompleted","getWizardSettings","hasSystemData","validateSystemTablesEmpty","printer","printers","printerName","settingsAppearance","id","Number","parseInt","OctoprintType","MoonrakerType","includes","printerType","floor","floors","printerId","importData","validateInput","importPrintersFloorsYamlSchema","length","importPrinterPositionsSchema","log","updateByPropertyPrinters","insertPrinters","analysePrintersUpsert","printerComparisonStrategiesByPriority","updateByPropertyFloors","insertFloors","analyseFloorsUpsert","floorComparisonStrategiesByPriority","updateByNameGroups","insertGroups","analyseUpsertGroups","groups","printerIdMap","newPrinter","state","create","Error","JSON","stringify","updatePrinterSpec","updateId","updatedPrinter","value","originalPrinterId","update","floorIdMap","newFloor","originalFloorId","knownPrinterPositions","floorPosition","knownPrinterId","floorId","push","createdFloor","updateFloorSpec","updatedFloor","knownPrinters","loadStore","group","createdGroup","createGroup","addPrinterToGroup","updateGroupSpec","existingGroup","getGroupWithPrinters","groupId","existingPrinterIds","map","p","wantedTargetPrinterIds","filter","unwantedId","eid","removePrinterFromGroup","nonExistingNewId","settings","importSettings","users","importUsers","server","updateServerSettings","timeout","updateTimeoutSettings","frontend","updateFrontendSettings","printerFileClean","updateFileCleanSettings","wizard","importedWizardVersion","wizardVersion","setWizardCompleted","allRoles","roles","user","roleNames","roleName","some","r","register","username","password","isRootUser","isDemoUser","isVerified","needsPasswordChange","updatePasswordHashUnsafeByUsername","passwordHash","errors","existingSettings","getSettings","Object","keys","existingUsers","listUsers","join","upsertPrinters","comparisonStrategies","existingPrinters","list","names","toLowerCase","urls","printerURL","ids","toString","strategy","comparedName","foundIndex","findIndex","n","upsertFloors","comparisonStrategy","existingFloors","floorLevels","comparedProperty","upsertGroups","existingGroups","listGroups","exportYaml","options","input","exportPrintersFloorsYamlSchema","exportFloors","exportGroups","dumpedObject","version","process","env","npm_package_version","exportedAt","Date","undefined","user_roles","apiKey","getLoginDto","disabledReason","enabled","dateAdded","listCache","f","dumpedFloor","fPrinterId","x","y","g","u","userDto","toDto","createdAt","dump"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/services/core/yaml.service.ts"],"names":["YamlService","logger","loggerFactory","printerTagService","printerService","printerCache","floorStore","floorService","userService","roleService","settingsStore","name","importYaml","yamlBuffer","importSpec","load","databaseTypeSqlite","databaseType","exportPrinters","exportFloorGrid","exportSettings","exportUsers","config","normalizeYamlData","importData","validateInput","importPrintersFloorsYamlSchema","hasSystemData","validateSystemTablesEmpty","settings","log","importSettings","users","length","importUsers","floors","floor","importPrinterPositionsSchema","updateByPropertyPrinters","insertPrinters","analysePrintersUpsert","printers","printerComparisonStrategiesByPriority","updateByPropertyFloors","insertFloors","analyseFloorsUpsert","floorComparisonStrategiesByPriority","updateByNameTags","insertTags","analyseUpsertTags","tags","printerIdMap","newPrinter","state","create","id","Error","JSON","stringify","error","updatePrinterSpec","updateId","printerId","updatedPrinter","value","originalPrinterId","update","floorIdMap","newFloor","originalFloorId","knownPrinterPositions","floorPosition","knownPrinterId","floorId","push","createdFloor","updateFloorSpec","updatedFloor","knownPrinters","loadStore","tag","createdTag","createTag","color","printer","addPrinterToTag","updateTagSpec","existingTag","getPrintersByTag","tagId","existingPrinterIds","map","p","wantedTargetPrinterIds","filter","unwantedId","eid","includes","removePrinterFromTag","nonExistingNewId","server","updateServerSettings","timeout","updateTimeoutSettings","frontend","updateFrontendSettings","wizard","wizardCompleted","importedWizardVersion","wizardVersion","setWizardCompleted","credential","jwtExpiresIn","refreshTokenAttempts","refreshTokenExpiry","slicerApiKey","updateCoreCredentialSettings","getCredentialSettings","setSlicerApiKey","loadSettings","allRoles","roles","user","Number","parseInt","roleNames","roleName","some","r","register","username","password","isRootUser","isDemoUser","isVerified","needsPasswordChange","updatePasswordHashUnsafeByUsername","passwordHash","errors","getWizardSettings","existingSettings","getSettings","Object","keys","existingUsers","listUsers","join","upsertPrinters","comparisonStrategies","existingPrinters","list","names","toLowerCase","urls","printerURL","ids","toString","strategy","comparedName","foundIndex","findIndex","n","upsertFloors","comparisonStrategy","existingFloors","floorLevels","order","comparedProperty","upsertTags","existingTags","listTags","exportYaml","options","input","exportPrintersFloorsYamlSchema","exportFloors","exportTags","dumpedObject","version","process","env","npm_package_version","exportedAt","Date","undefined","user_roles","apiKey","getLoginDto","disabledReason","enabled","printerType","dateAdded","listCache","f","dumpedFloor","fPrinterId","x","y","t","getSettingsSensitive","u","userDto","toDto","createdAt","dump","printerName","settingsAppearance","OctoprintType","MoonrakerType","PrusaLinkType","BambuType","groups","exportGroups"],"mappings":"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"}