@fdm-monster/server 1.5.4 → 1.6.0-rc2

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 (288) hide show
  1. package/.env.template +7 -0
  2. package/.gitattributes +2 -0
  3. package/.yarn/install-state.gz +0 -0
  4. package/.yarn/releases/yarn-4.1.0.cjs +893 -0
  5. package/.yarnrc.yml +4 -0
  6. package/README.md +3 -2
  7. package/dist/consoles/sqlite-torm.js +31 -0
  8. package/dist/consoles/sqlite-torm.js.map +1 -0
  9. package/dist/consoles/typeorm-generate.js +194 -0
  10. package/dist/consoles/typeorm-generate.js.map +1 -0
  11. package/dist/consoles/typeorm-migrate.js +48 -0
  12. package/dist/consoles/typeorm-migrate.js.map +1 -0
  13. package/dist/consoles/upload-test.js +52 -0
  14. package/dist/consoles/upload-test.js.map +1 -0
  15. package/dist/constants/event.constants.js.map +1 -1
  16. package/dist/constants/service.constants.js +3 -18
  17. package/dist/constants/service.constants.js.map +1 -1
  18. package/dist/container.js +64 -19
  19. package/dist/container.js.map +1 -1
  20. package/dist/container.tokens.js +2 -0
  21. package/dist/container.tokens.js.map +1 -1
  22. package/dist/controllers/batch-call.controller.js +10 -5
  23. package/dist/controllers/batch-call.controller.js.map +1 -1
  24. package/dist/controllers/custom-gcode.controller.js.map +1 -1
  25. package/dist/controllers/dto/update-client-dist.dto.js +38 -0
  26. package/dist/controllers/dto/update-client-dist.dto.js.map +1 -0
  27. package/dist/controllers/printer-files.controller.js +10 -49
  28. package/dist/controllers/printer-files.controller.js.map +1 -1
  29. package/dist/controllers/printer.controller.js +1 -1
  30. package/dist/controllers/printer.controller.js.map +1 -1
  31. package/dist/controllers/server-private.controller.js +25 -6
  32. package/dist/controllers/server-private.controller.js.map +1 -1
  33. package/dist/controllers/validation/batch-controller.validation.js +9 -0
  34. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  35. package/dist/data-source.js +66 -0
  36. package/dist/data-source.js.map +1 -0
  37. package/dist/entities/base.entity.js +29 -0
  38. package/dist/entities/base.entity.js.map +1 -0
  39. package/dist/entities/camera-stream.entity.js +94 -0
  40. package/dist/entities/camera-stream.entity.js.map +1 -0
  41. package/dist/entities/custom-gcode.entity.js +50 -0
  42. package/dist/entities/custom-gcode.entity.js.map +1 -0
  43. package/dist/entities/floor-position.entity.js +78 -0
  44. package/dist/entities/floor-position.entity.js.map +1 -0
  45. package/dist/entities/floor.entity.js +53 -0
  46. package/dist/entities/floor.entity.js.map +1 -0
  47. package/dist/entities/index.js +58 -0
  48. package/dist/entities/index.js.map +1 -0
  49. package/dist/entities/permission.entity.js +38 -0
  50. package/dist/entities/permission.entity.js.map +1 -0
  51. package/dist/entities/print-completion.entity.js +91 -0
  52. package/dist/entities/print-completion.entity.js.map +1 -0
  53. package/dist/entities/printer-file.entity.js +140 -0
  54. package/dist/entities/printer-file.entity.js.map +1 -0
  55. package/dist/entities/printer.entity.js +105 -0
  56. package/dist/entities/printer.entity.js.map +1 -0
  57. package/dist/entities/refresh-token.entity.js +70 -0
  58. package/dist/entities/refresh-token.entity.js.map +1 -0
  59. package/dist/entities/role.entity.js +46 -0
  60. package/dist/entities/role.entity.js.map +1 -0
  61. package/dist/entities/settings.entity.js +89 -0
  62. package/dist/entities/settings.entity.js.map +1 -0
  63. package/dist/entities/user-role.entity.js +70 -0
  64. package/dist/entities/user-role.entity.js.map +1 -0
  65. package/dist/entities/user.entity.js +90 -0
  66. package/dist/entities/user.entity.js.map +1 -0
  67. package/dist/middleware/exception.filter.js +2 -1
  68. package/dist/middleware/exception.filter.js.map +1 -1
  69. package/dist/middleware/passport.js.map +1 -1
  70. package/dist/migrations/1706829146617-InitSqlite.js +670 -0
  71. package/dist/migrations/1706829146617-InitSqlite.js.map +1 -0
  72. package/dist/models/Floor.js.map +1 -1
  73. package/dist/models/Printer.js +4 -43
  74. package/dist/models/Printer.js.map +1 -1
  75. package/dist/models/PrinterFile.js +85 -0
  76. package/dist/models/PrinterFile.js.map +1 -0
  77. package/dist/models/index.js +4 -0
  78. package/dist/models/index.js.map +1 -1
  79. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js +41 -0
  80. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +1 -0
  81. package/dist/server.constants.js +4 -2
  82. package/dist/server.constants.js.map +1 -1
  83. package/dist/server.core.js +10 -1
  84. package/dist/server.core.js.map +1 -1
  85. package/dist/server.host.js +11 -3
  86. package/dist/server.host.js.map +1 -1
  87. package/dist/services/batch-call.service.js +43 -20
  88. package/dist/services/batch-call.service.js.map +1 -1
  89. package/dist/services/core/client-bundle.service.js +92 -25
  90. package/dist/services/core/client-bundle.service.js.map +1 -1
  91. package/dist/services/core/github.service.js +18 -14
  92. package/dist/services/core/github.service.js.map +1 -1
  93. package/dist/services/core/multer.service.js +3 -3
  94. package/dist/services/core/multer.service.js.map +1 -1
  95. package/dist/services/core/task-manager.service.js +1 -1
  96. package/dist/services/core/task-manager.service.js.map +1 -1
  97. package/dist/services/core/yaml.service.js.map +1 -1
  98. package/dist/services/floor.service.js +1 -1
  99. package/dist/services/floor.service.js.map +1 -1
  100. package/dist/services/interfaces/print-completion.dto.js +0 -2
  101. package/dist/services/interfaces/print-completion.dto.js.map +1 -1
  102. package/dist/services/interfaces/print-completion.interface.js +6 -0
  103. package/dist/services/interfaces/{print-completion.service.js.map → print-completion.interface.js.map} +1 -1
  104. package/dist/services/interfaces/printer-file.dto.js +32 -4
  105. package/dist/services/interfaces/printer-file.dto.js.map +1 -1
  106. package/dist/services/octoprint/dto/connection-state.dto.js +21 -0
  107. package/dist/services/octoprint/dto/connection-state.dto.js.map +1 -0
  108. package/dist/services/{interfaces/print-completion.service.js → octoprint/dto/connection.dto.js} +1 -1
  109. package/dist/services/octoprint/dto/connection.dto.js.map +1 -0
  110. package/dist/services/octoprint/dto/octoprint-currentuser.dto.js +6 -0
  111. package/dist/services/octoprint/dto/octoprint-currentuser.dto.js.map +1 -0
  112. package/dist/services/octoprint/dto/octoprint-event.dto.js +41 -0
  113. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -0
  114. package/dist/services/octoprint/dto/octoprint-file.dto.js +84 -0
  115. package/dist/services/octoprint/dto/octoprint-file.dto.js.map +1 -0
  116. package/dist/services/octoprint/dto/octoprint-files.dto.js +17 -0
  117. package/dist/services/octoprint/dto/octoprint-files.dto.js.map +1 -0
  118. package/dist/services/octoprint/dto/octoprint-session.dto.js +6 -0
  119. package/dist/services/octoprint/dto/octoprint-session.dto.js.map +1 -0
  120. package/dist/services/octoprint/dto/octoprint-settings.dto.js +29 -0
  121. package/dist/services/octoprint/dto/octoprint-settings.dto.js.map +1 -0
  122. package/dist/services/octoprint/dto/octoprint-system-info.dto.js +41 -0
  123. package/dist/services/octoprint/dto/octoprint-system-info.dto.js.map +1 -0
  124. package/dist/services/octoprint/dto/state.dto.js +38 -0
  125. package/dist/services/octoprint/dto/state.dto.js.map +1 -0
  126. package/dist/services/octoprint/dto/websocket-output/connection-message.dto.js +6 -0
  127. package/dist/services/octoprint/dto/websocket-output/connection-message.dto.js.map +1 -0
  128. package/dist/services/octoprint/dto/websocket-output/current-message.dto.js +6 -0
  129. package/dist/services/octoprint/dto/websocket-output/current-message.dto.js.map +1 -0
  130. package/dist/services/octoprint/dto/websocket-output/event-message.dto.js +6 -0
  131. package/dist/services/octoprint/dto/websocket-output/event-message.dto.js.map +1 -0
  132. package/dist/services/octoprint/dto/websocket-output/event.type.js +54 -0
  133. package/dist/services/octoprint/dto/websocket-output/event.type.js.map +1 -0
  134. package/dist/services/octoprint/dto/websocket-output/events/client-authed.dto.js +6 -0
  135. package/dist/services/octoprint/dto/websocket-output/events/client-authed.dto.js.map +1 -0
  136. package/dist/services/octoprint/dto/websocket-output/events/client-closed.dto.js +6 -0
  137. package/dist/services/octoprint/dto/websocket-output/events/client-closed.dto.js.map +1 -0
  138. package/dist/services/octoprint/dto/websocket-output/events/client-opened.dto.js +6 -0
  139. package/dist/services/octoprint/dto/websocket-output/events/client-opened.dto.js.map +1 -0
  140. package/dist/services/octoprint/dto/websocket-output/events/dwelling.dto.js +6 -0
  141. package/dist/services/octoprint/dto/websocket-output/events/dwelling.dto.js.map +1 -0
  142. package/dist/services/octoprint/dto/websocket-output/events/file-added.dto.js +6 -0
  143. package/dist/services/octoprint/dto/websocket-output/events/file-added.dto.js.map +1 -0
  144. package/dist/services/octoprint/dto/websocket-output/events/file-deselected.dto.js +6 -0
  145. package/dist/services/octoprint/dto/websocket-output/events/file-deselected.dto.js.map +1 -0
  146. package/dist/services/octoprint/dto/websocket-output/events/file-removed.dto.js +6 -0
  147. package/dist/services/octoprint/dto/websocket-output/events/file-removed.dto.js.map +1 -0
  148. package/dist/services/octoprint/dto/websocket-output/events/folder-added.dto.js +6 -0
  149. package/dist/services/octoprint/dto/websocket-output/events/folder-added.dto.js.map +1 -0
  150. package/dist/services/octoprint/dto/websocket-output/events/home.dto.js +6 -0
  151. package/dist/services/octoprint/dto/websocket-output/events/home.dto.js.map +1 -0
  152. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-finished.dto.js +6 -0
  153. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-finished.dto.js.map +1 -0
  154. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-started.dto.js +6 -0
  155. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-started.dto.js.map +1 -0
  156. package/dist/services/octoprint/dto/websocket-output/events/metadata-statistics-updated.dto.js +6 -0
  157. package/dist/services/octoprint/dto/websocket-output/events/metadata-statistics-updated.dto.js.map +1 -0
  158. package/dist/services/octoprint/dto/websocket-output/events/position-update.dto.js +6 -0
  159. package/dist/services/octoprint/dto/websocket-output/events/position-update.dto.js.map +1 -0
  160. package/dist/services/octoprint/dto/websocket-output/events/print-cancelled.dto.js +6 -0
  161. package/dist/services/octoprint/dto/websocket-output/events/print-cancelled.dto.js.map +1 -0
  162. package/dist/services/octoprint/dto/websocket-output/events/print-cancelling.dto.js +6 -0
  163. package/dist/services/octoprint/dto/websocket-output/events/print-cancelling.dto.js.map +1 -0
  164. package/dist/services/octoprint/dto/websocket-output/events/print-done.dto.js +6 -0
  165. package/dist/services/octoprint/dto/websocket-output/events/print-done.dto.js.map +1 -0
  166. package/dist/services/octoprint/dto/websocket-output/events/print-failed.dto.js +6 -0
  167. package/dist/services/octoprint/dto/websocket-output/events/print-failed.dto.js.map +1 -0
  168. package/dist/services/octoprint/dto/websocket-output/events/print-paused.dto.js +6 -0
  169. package/dist/services/octoprint/dto/websocket-output/events/print-paused.dto.js.map +1 -0
  170. package/dist/services/octoprint/dto/websocket-output/events/print-resumed.dto.js +6 -0
  171. package/dist/services/octoprint/dto/websocket-output/events/print-resumed.dto.js.map +1 -0
  172. package/dist/services/octoprint/dto/websocket-output/events/print-started.dto.js +6 -0
  173. package/dist/services/octoprint/dto/websocket-output/events/print-started.dto.js.map +1 -0
  174. package/dist/services/octoprint/dto/websocket-output/events/printer-state-changed.dto.js +6 -0
  175. package/dist/services/octoprint/dto/websocket-output/events/printer-state-changed.dto.js.map +1 -0
  176. package/dist/services/octoprint/dto/websocket-output/events/transfer-done.dto.js +6 -0
  177. package/dist/services/octoprint/dto/websocket-output/events/transfer-done.dto.js.map +1 -0
  178. package/dist/services/octoprint/dto/websocket-output/events/transfer-started.dto.js +6 -0
  179. package/dist/services/octoprint/dto/websocket-output/events/transfer-started.dto.js.map +1 -0
  180. package/dist/services/octoprint/dto/websocket-output/events/updated-files.dto.js +6 -0
  181. package/dist/services/octoprint/dto/websocket-output/events/updated-files.dto.js.map +1 -0
  182. package/dist/services/octoprint/dto/websocket-output/events/upload.dto.js +6 -0
  183. package/dist/services/octoprint/dto/websocket-output/events/upload.dto.js.map +1 -0
  184. package/dist/services/octoprint/dto/websocket-output/events/user-logged-in.dto.js +6 -0
  185. package/dist/services/octoprint/dto/websocket-output/events/user-logged-in.dto.js.map +1 -0
  186. package/dist/services/octoprint/dto/websocket-output/events/z-change.dto.js +6 -0
  187. package/dist/services/octoprint/dto/websocket-output/events/z-change.dto.js.map +1 -0
  188. package/dist/services/octoprint/dto/websocket-output/history-message.dto.js +6 -0
  189. package/dist/services/octoprint/dto/websocket-output/history-message.dto.js.map +1 -0
  190. package/dist/services/octoprint/dto/websocket-output/plugin-message.dto.js +6 -0
  191. package/dist/services/octoprint/dto/websocket-output/plugin-message.dto.js.map +1 -0
  192. package/dist/services/octoprint/dto/websocket-output/timelapse-message.dto.js +6 -0
  193. package/dist/services/octoprint/dto/websocket-output/timelapse-message.dto.js.map +1 -0
  194. package/dist/services/octoprint/models/octoprint-file.dto.js +6 -0
  195. package/dist/services/octoprint/models/octoprint-file.dto.js.map +1 -0
  196. package/dist/services/octoprint/octoprint-api.routes.js +24 -18
  197. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  198. package/dist/services/octoprint/octoprint-api.service.js +201 -138
  199. package/dist/services/octoprint/octoprint-api.service.js.map +1 -1
  200. package/dist/services/octoprint/octoprint-sockio.adapter.js +72 -66
  201. package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -1
  202. package/dist/services/octoprint/utils/api.utils.js +0 -35
  203. package/dist/services/octoprint/utils/api.utils.js.map +1 -1
  204. package/dist/services/octoprint/utils/file.utils.js +44 -0
  205. package/dist/services/octoprint/utils/file.utils.js.map +1 -0
  206. package/dist/services/orm/base.interface.js +6 -0
  207. package/dist/services/orm/base.interface.js.map +1 -0
  208. package/dist/services/orm/base.service.js +72 -0
  209. package/dist/services/orm/base.service.js.map +1 -0
  210. package/dist/services/orm/camera-stream.service.js +25 -0
  211. package/dist/services/orm/camera-stream.service.js.map +1 -0
  212. package/dist/services/orm/custom-gcode.service.js +42 -0
  213. package/dist/services/orm/custom-gcode.service.js.map +1 -0
  214. package/dist/services/orm/floor-position.service.js +55 -0
  215. package/dist/services/orm/floor-position.service.js.map +1 -0
  216. package/dist/services/orm/floor.service.js +122 -0
  217. package/dist/services/orm/floor.service.js.map +1 -0
  218. package/dist/services/orm/permission.service.js +77 -0
  219. package/dist/services/orm/permission.service.js.map +1 -0
  220. package/dist/services/orm/print-completion.service.js +90 -0
  221. package/dist/services/orm/print-completion.service.js.map +1 -0
  222. package/dist/services/orm/printer-files.service.js +123 -0
  223. package/dist/services/orm/printer-files.service.js.map +1 -0
  224. package/dist/services/orm/printer.service.js +145 -0
  225. package/dist/services/orm/printer.service.js.map +1 -0
  226. package/dist/services/orm/refresh-token.service.js +107 -0
  227. package/dist/services/orm/refresh-token.service.js.map +1 -0
  228. package/dist/services/orm/role.service.js +131 -0
  229. package/dist/services/orm/role.service.js.map +1 -0
  230. package/dist/services/orm/settings.service.js +208 -0
  231. package/dist/services/orm/settings.service.js.map +1 -0
  232. package/dist/services/orm/user-role.service.js +55 -0
  233. package/dist/services/orm/user-role.service.js.map +1 -0
  234. package/dist/services/orm/user.service.js +146 -0
  235. package/dist/services/orm/user.service.js.map +1 -0
  236. package/dist/services/orm-migration.service.js +20 -0
  237. package/dist/services/orm-migration.service.js.map +1 -0
  238. package/dist/services/print-completion.service.js +0 -1
  239. package/dist/services/print-completion.service.js.map +1 -1
  240. package/dist/services/printer-files.service.js +73 -49
  241. package/dist/services/printer-files.service.js.map +1 -1
  242. package/dist/services/printer.service.js +0 -2
  243. package/dist/services/printer.service.js.map +1 -1
  244. package/dist/services/typeorm/typeorm.service.js +48 -0
  245. package/dist/services/typeorm/typeorm.service.js.map +1 -0
  246. package/dist/shared/dtos/printer-login.dto.js +58 -0
  247. package/dist/shared/dtos/printer-login.dto.js.map +1 -0
  248. package/dist/{utils → shared}/websocket.adapter.js +3 -3
  249. package/dist/shared/websocket.adapter.js.map +1 -0
  250. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  251. package/dist/state/file.cache.js +12 -35
  252. package/dist/state/file.cache.js.map +1 -1
  253. package/dist/state/printer-connection.cache.js +21 -0
  254. package/dist/state/printer-connection.cache.js.map +1 -0
  255. package/dist/state/printer-events.cache.js +13 -7
  256. package/dist/state/printer-events.cache.js.map +1 -1
  257. package/dist/state/printer-files.store.js +14 -18
  258. package/dist/state/printer-files.store.js.map +1 -1
  259. package/dist/state/printer-socket.store.js +3 -3
  260. package/dist/state/printer-socket.store.js.map +1 -1
  261. package/dist/state/printer.cache.js +3 -0
  262. package/dist/state/printer.cache.js.map +1 -1
  263. package/dist/state/settings.store.js +9 -1
  264. package/dist/state/settings.store.js.map +1 -1
  265. package/dist/state/test-printer-socket.store.js +1 -1
  266. package/dist/task.presets.js.map +1 -1
  267. package/dist/tasks/boot.task.js +30 -18
  268. package/dist/tasks/boot.task.js.map +1 -1
  269. package/dist/tasks/print-completion.socketio.task.js +28 -19
  270. package/dist/tasks/print-completion.socketio.task.js.map +1 -1
  271. package/dist/tasks/printer-file-clean.task.js +14 -0
  272. package/dist/tasks/printer-file-clean.task.js.map +1 -1
  273. package/dist/tasks/printer-state-update-poll.task.js +89 -0
  274. package/dist/tasks/printer-state-update-poll.task.js.map +1 -0
  275. package/dist/tasks/printer-websocket-restore.task.js +4 -3
  276. package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
  277. package/dist/tasks/printer-websocket.task.js +1 -1
  278. package/dist/tasks/printer-websocket.task.js.map +1 -1
  279. package/dist/tasks.js +2 -1
  280. package/dist/tasks.js.map +1 -1
  281. package/dist/utils/env.utils.js +0 -10
  282. package/dist/utils/env.utils.js.map +1 -1
  283. package/dist/utils/semver.utils.js +19 -4
  284. package/dist/utils/semver.utils.js.map +1 -1
  285. package/package.json +58 -47
  286. package/dist/utils/find-predicate.utils.js +0 -18
  287. package/dist/utils/find-predicate.utils.js.map +0 -1
  288. package/dist/utils/websocket.adapter.js.map +0 -1
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "FloorService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return FloorService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _entities = require("../../entities");
13
+ const _floordto = require("../interfaces/floor.dto");
14
+ const _validators = require("../../handlers/validators");
15
+ const _floorservicevalidation = require("../validators/floor-service.validation");
16
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
17
+ class FloorService extends (0, _baseservice.BaseService)(_entities.Floor, _floordto.FloorDto, _floordto.CreateFloorDto, _floordto.UpdateFloorDto) {
18
+ floorPositionService;
19
+ constructor({ floorPositionService, typeormService }){
20
+ super({
21
+ typeormService
22
+ });
23
+ this.floorPositionService = floorPositionService;
24
+ }
25
+ async create(dto) {
26
+ await (0, _validators.validateInput)(dto, _floorservicevalidation.createFloorRules);
27
+ const floor = await super.create({
28
+ name: dto.name,
29
+ floor: dto.floor,
30
+ printers: []
31
+ });
32
+ const printers = dto.printers;
33
+ if (printers?.length) {
34
+ for (let printer of printers){
35
+ await this.addOrUpdatePrinter(floor.id, printer);
36
+ }
37
+ }
38
+ return this.get(floor.id);
39
+ }
40
+ toDto(floor) {
41
+ return {
42
+ id: floor.id,
43
+ name: floor.name,
44
+ floor: floor.floor,
45
+ printers: floor.printers.map((p)=>({
46
+ printerId: p.printerId,
47
+ floorId: p.floorId,
48
+ x: p.x,
49
+ y: p.y
50
+ }))
51
+ };
52
+ }
53
+ async createDefaultFloor() {
54
+ const floor = await this.create({
55
+ name: "Default Floor",
56
+ floor: 0
57
+ });
58
+ return await this.get(floor.id);
59
+ }
60
+ async update(floorId, update) {
61
+ const floor = await this.get(floorId);
62
+ const floorUpdate = Object.assign(floor, update);
63
+ await (0, _validators.validateInput)(floorUpdate, _floorservicevalidation.updateFloorRules);
64
+ const printers = floorUpdate.printers;
65
+ if (printers?.length) {
66
+ for (let printer of printers){
67
+ await this.addOrUpdatePrinter(floor.id, printer);
68
+ }
69
+ }
70
+ delete floorUpdate.printers;
71
+ return super.update(floorId, floorUpdate);
72
+ }
73
+ async updateName(floorId, name) {
74
+ let floor = await this.get(floorId);
75
+ floor.name = name;
76
+ floor = await this.update(floorId, {
77
+ name
78
+ });
79
+ return floor;
80
+ }
81
+ async updateLevel(floorId, level) {
82
+ let floor = await this.get(floorId);
83
+ floor.floor = level;
84
+ floor = await this.update(floorId, {
85
+ floor: level
86
+ });
87
+ return floor;
88
+ }
89
+ async addOrUpdatePrinter(floorId, positionDto) {
90
+ const floor = await this.get(floorId);
91
+ const position = await this.floorPositionService.findPrinterPosition(positionDto.printerId);
92
+ if (position) {
93
+ await this.floorPositionService.delete(position.id);
94
+ }
95
+ const xyPosition = await this.floorPositionService.findPosition(positionDto.x, positionDto.y);
96
+ if (xyPosition) {
97
+ await this.floorPositionService.delete(xyPosition.id);
98
+ }
99
+ const newPosition = new _entities.FloorPosition();
100
+ Object.assign(newPosition, {
101
+ x: positionDto.x,
102
+ y: positionDto.y,
103
+ printerId: positionDto.printerId,
104
+ floorId: floorId
105
+ });
106
+ await this.floorPositionService.create(newPosition);
107
+ return this.get(floorId);
108
+ }
109
+ async removePrinter(floorId, printerId) {
110
+ const position = await this.floorPositionService.findPrinterPositionOnFloor(floorId, printerId);
111
+ if (!position) {
112
+ throw new _runtimeexceptions.NotFoundException("This printer was not found on this floor");
113
+ }
114
+ await this.floorPositionService.delete(position.id);
115
+ return await this.get(floorId);
116
+ }
117
+ async deletePrinterFromAnyFloor(printerId) {
118
+ await this.floorPositionService.deletePrinterPositionsByPrinterId(printerId);
119
+ }
120
+ }
121
+
122
+ //# sourceMappingURL=floor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/floor.service.ts"],"names":["FloorService","BaseService","Floor","FloorDto","CreateFloorDto","UpdateFloorDto","floorPositionService","constructor","typeormService","create","dto","validateInput","createFloorRules","floor","name","printers","length","printer","addOrUpdatePrinter","id","get","toDto","map","p","printerId","floorId","x","y","createDefaultFloor","update","floorUpdate","Object","assign","updateFloorRules","updateName","updateLevel","level","positionDto","position","findPrinterPosition","delete","xyPosition","findPosition","newPosition","FloorPosition","removePrinter","findPrinterPositionOnFloor","NotFoundException","deletePrinterFromAnyFloor","deletePrinterPositionsByPrinterId"],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PermissionService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PermissionService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _entities = require("../../entities");
13
+ const _permissiondto = require("../interfaces/permission.dto");
14
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
15
+ const _authorizationconstants = require("../../constants/authorization.constants");
16
+ class PermissionService extends (0, _baseservice.BaseService)(_entities.Permission, _permissiondto.PermissionDto) {
17
+ logger;
18
+ _permissions = [];
19
+ constructor({ loggerFactory, typeormService }){
20
+ super({
21
+ typeormService
22
+ });
23
+ }
24
+ get permissions() {
25
+ return this._permissions;
26
+ }
27
+ toDto(permission) {
28
+ return {
29
+ id: permission.id,
30
+ name: permission.name
31
+ };
32
+ }
33
+ authorizePermission(requiredPermission, assignedPermissions) {
34
+ return !!assignedPermissions.find((assignedPermission)=>{
35
+ const normalizePermission = this.normalizePermission(assignedPermission);
36
+ if (!normalizePermission) return false;
37
+ return normalizePermission === requiredPermission;
38
+ });
39
+ }
40
+ async getPermissionByName(permissionName) {
41
+ const permission = this.permissions.find((r)=>r.name === permissionName);
42
+ if (!permission) throw new _runtimeexceptions.NotFoundException("Permission not found");
43
+ return permission;
44
+ }
45
+ async getPermission(permissionId) {
46
+ const permission = this.permissions.find((r)=>r.id === permissionId);
47
+ if (!permission) throw new _runtimeexceptions.NotFoundException(`Permission Id '${permissionId}' not found`);
48
+ return permission;
49
+ }
50
+ async syncPermissions() {
51
+ this._permissions = [];
52
+ const permissionDefinition = (0, _authorizationconstants.flattenPermissionDefinition)();
53
+ for (let permission of permissionDefinition){
54
+ const storedPermission = await this.repository.findOneBy({
55
+ name: permission
56
+ });
57
+ if (!storedPermission) {
58
+ const newPermission = await this.create({
59
+ name: permission
60
+ });
61
+ this._permissions.push(newPermission);
62
+ } else {
63
+ this._permissions.push(storedPermission);
64
+ }
65
+ }
66
+ }
67
+ normalizePermission(assignedPermission) {
68
+ const permissionInstance = this.permissions.find((r)=>r.id === assignedPermission || r.name === assignedPermission);
69
+ if (!permissionInstance) {
70
+ this.logger.warn(`The permission by ID ${assignedPermission} did not exist. Skipping.`);
71
+ return;
72
+ }
73
+ return permissionInstance.name;
74
+ }
75
+ }
76
+
77
+ //# sourceMappingURL=permission.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/permission.service.ts"],"names":["PermissionService","BaseService","Permission","PermissionDto","logger","_permissions","constructor","loggerFactory","typeormService","permissions","toDto","permission","id","name","authorizePermission","requiredPermission","assignedPermissions","find","assignedPermission","normalizePermission","getPermissionByName","permissionName","r","NotFoundException","getPermission","permissionId","syncPermissions","permissionDefinition","flattenPermissionDefinition","storedPermission","repository","findOneBy","newPermission","create","push","permissionInstance","warn"],"mappings":";;;;+BAWaA;;;eAAAA;;;6BATe;0BACD;+BACG;mCACI;wCAIU;AAErC,MAAMA,0BACHC,IAAAA,wBAAW,EAACC,oBAAU,EAAEC,4BAAa;IAGrCC,OAAsB;IACtBC,eAA6B,EAAE,CAAC;IAExCC,YAAY,EAAEC,aAAa,EAAEC,cAAc,EAAqE,CAAE;QAChH,KAAK,CAAC;YAAEA;QAAe;IACzB;IACA,IAAIC,cAAc;QAChB,OAAO,IAAI,CAACJ,YAAY;IAC1B;IAEAK,MAAMC,UAAsB,EAA+B;QACzD,OAAO;YACLC,IAAID,WAAWC,EAAE;YACjBC,MAAMF,WAAWE,IAAI;QACvB;IACF;IAEAC,oBAAoBC,kBAA0B,EAAEC,mBAA6B,EAAW;QACtF,OAAO,CAAC,CAACA,oBAAoBC,IAAI,CAAC,CAACC;YACjC,MAAMC,sBAAsB,IAAI,CAACA,mBAAmB,CAACD;YACrD,IAAI,CAACC,qBAAqB,OAAO;YACjC,OAAOA,wBAAwBJ;QACjC;IACF;IAEA,MAAMK,oBAAoBC,cAAsB,EAAuB;QACrE,MAAMV,aAAa,IAAI,CAACF,WAAW,CAACQ,IAAI,CAAC,CAACK,IAAMA,EAAET,IAAI,KAAKQ;QAC3D,IAAI,CAACV,YAAY,MAAM,IAAIY,oCAAiB,CAAC;QAC7C,OAAOZ;IACT;IAEA,MAAMa,cAAcC,YAA0B,EAAuB;QACnE,MAAMd,aAAa,IAAI,CAACF,WAAW,CAACQ,IAAI,CAAC,CAACK,IAAMA,EAAEV,EAAE,KAAKa;QACzD,IAAI,CAACd,YAAY,MAAM,IAAIY,oCAAiB,CAAC,CAAC,eAAe,EAAEE,aAAa,WAAW,CAAC;QAExF,OAAOd;IACT;IAEA,MAAMe,kBAAiC;QACrC,IAAI,CAACrB,YAAY,GAAG,EAAE;QAEtB,MAAMsB,uBAAuBC,IAAAA,mDAA2B;QACxD,KAAK,IAAIjB,cAAcgB,qBAAsB;YAC3C,MAAME,mBAAmB,MAAM,IAAI,CAACC,UAAU,CAACC,SAAS,CAAC;gBAAElB,MAAMF;YAAW;YAC5E,IAAI,CAACkB,kBAAkB;gBACrB,MAAMG,gBAAgB,MAAM,IAAI,CAACC,MAAM,CAAC;oBACtCpB,MAAMF;gBACR;gBACA,IAAI,CAACN,YAAY,CAAC6B,IAAI,CAACF;YACzB,OAAO;gBACL,IAAI,CAAC3B,YAAY,CAAC6B,IAAI,CAACL;YACzB;QACF;IACF;IAEAV,oBAAoBD,kBAAmC,EAAU;QAC/D,MAAMiB,qBAAqB,IAAI,CAAC1B,WAAW,CAACQ,IAAI,CAAC,CAACK,IAAMA,EAAEV,EAAE,KAAKM,sBAAsBI,EAAET,IAAI,KAAKK;QAClG,IAAI,CAACiB,oBAAoB;YACvB,IAAI,CAAC/B,MAAM,CAACgC,IAAI,CAAC,CAAC,qBAAqB,EAAElB,mBAAmB,yBAAyB,CAAC;YACtF;QACF;QACA,OAAOiB,mBAAmBtB,IAAI;IAChC;AACF"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrintCompletionService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrintCompletionService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _entities = require("../../entities");
13
+ const _printcompletiondto = require("../interfaces/print-completion.dto");
14
+ const _typeorm = require("typeorm");
15
+ const _octoprintwebsocketconstants = require("../octoprint/constants/octoprint-websocket.constants");
16
+ const _arrayutil = require("../../utils/array.util");
17
+ const _printcompletionshared = require("../print-completion.shared");
18
+ class PrintCompletionService extends (0, _baseservice.BaseService)(_entities.PrintCompletion, _printcompletiondto.PrintCompletionDto) {
19
+ logger;
20
+ constructor({ typeormService, loggerFactory }){
21
+ super({
22
+ typeormService
23
+ });
24
+ this.logger = loggerFactory(PrintCompletionService.name);
25
+ }
26
+ toDto(entity) {
27
+ return {
28
+ id: entity.id,
29
+ completionLog: entity.completionLog,
30
+ context: entity.context,
31
+ fileName: entity.fileName,
32
+ createdAt: entity.createdAt,
33
+ printerReference: entity.printerReference,
34
+ status: entity.status,
35
+ printerId: entity.printerId
36
+ };
37
+ }
38
+ async create(input) {
39
+ return await super.create(input);
40
+ }
41
+ async findPrintCompletion(correlationId) {
42
+ const completions = await this.repository.findBy({});
43
+ console.log({
44
+ context: {
45
+ correlationId
46
+ }
47
+ });
48
+ return completions.filter((c)=>c.context?.correlationId === correlationId);
49
+ }
50
+ async updateContext(correlationId, context) {
51
+ const completionEntry = await this.repository.findOneBy({
52
+ context: {
53
+ correlationId
54
+ },
55
+ status: _octoprintwebsocketconstants.EVENT_TYPES.PrintStarted
56
+ });
57
+ if (!completionEntry) {
58
+ this.logger.warn(`Print with correlationId ${correlationId} could not be updated with new context as it was not found`);
59
+ return;
60
+ }
61
+ completionEntry.context = context;
62
+ await this.update(completionEntry.id, completionEntry);
63
+ }
64
+ async listGroupByPrinterStatus() {
65
+ const limitedCompletions = await this.listPaged();
66
+ const printCompletionsAggr = (0, _arrayutil.groupArrayBy)(limitedCompletions, (val)=>val.printerId.toString());
67
+ const completions = Object.entries(printCompletionsAggr).map(([pc, val])=>({
68
+ printerId: parseInt(pc),
69
+ printEvents: val
70
+ }));
71
+ return (0, _printcompletionshared.processCompletions)(completions);
72
+ }
73
+ async loadPrintContexts() {
74
+ const completions = await this.repository.find({
75
+ where: {
76
+ status: (0, _typeorm.Not)((0, _typeorm.In)([
77
+ _octoprintwebsocketconstants.EVENT_TYPES.PrintDone,
78
+ _octoprintwebsocketconstants.EVENT_TYPES.PrintFailed
79
+ ]))
80
+ },
81
+ order: {
82
+ printerId: 1,
83
+ createdAt: -1
84
+ }
85
+ });
86
+ return (0, _arrayutil.groupArrayBy)(completions, (val)=>val.id.toString());
87
+ }
88
+ }
89
+
90
+ //# sourceMappingURL=print-completion.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/print-completion.service.ts"],"names":["PrintCompletionService","BaseService","PrintCompletion","PrintCompletionDto","logger","constructor","typeormService","loggerFactory","name","toDto","entity","id","completionLog","context","fileName","createdAt","printerReference","status","printerId","create","input","findPrintCompletion","correlationId","completions","repository","findBy","console","log","filter","c","updateContext","completionEntry","findOneBy","EVENT_TYPES","PrintStarted","warn","update","listGroupByPrinterStatus","limitedCompletions","listPaged","printCompletionsAggr","groupArrayBy","val","toString","Object","entries","map","pc","parseInt","printEvents","processCompletions","loadPrintContexts","find","where","Not","In","PrintDone","PrintFailed","order"],"mappings":";;;;+BAaaA;;;eAAAA;;;6BAbe;0BACI;oCACqD;yBAG7D;6CACI;2BACC;uCAI2B;AAEjD,MAAMA,+BACHC,IAAAA,wBAAW,EAACC,yBAAe,EAAEC,sCAAkB;IAGvDC,OAAsB;IAEtBC,YAAY,EAAEC,cAAc,EAAEC,aAAa,EAAqE,CAAE;QAChH,KAAK,CAAC;YAAED;QAAe;QACvB,IAAI,CAACF,MAAM,GAAGG,cAAcP,uBAAuBQ,IAAI;IACzD;IAEAC,MAAMC,MAAuB,EAAoC;QAC/D,OAAO;YACLC,IAAID,OAAOC,EAAE;YACbC,eAAeF,OAAOE,aAAa;YACnCC,SAASH,OAAOG,OAAO;YACvBC,UAAUJ,OAAOI,QAAQ;YACzBC,WAAWL,OAAOK,SAAS;YAC3BC,kBAAkBN,OAAOM,gBAAgB;YACzCC,QAAQP,OAAOO,MAAM;YACrBC,WAAWR,OAAOQ,SAAS;QAC7B;IACF;IAEA,MAAMC,OAAOC,KAA6C,EAAE;QAC1D,OAAO,MAAM,KAAK,CAACD,OAAOC;IAC5B;IAEA,MAAMC,oBAAoBC,aAAqB,EAAE;QAC/C,MAAMC,cAAc,MAAM,IAAI,CAACC,UAAU,CAACC,MAAM,CAAC,CAAC;QAClDC,QAAQC,GAAG,CAAC;YAAEd,SAAS;gBAAES;YAAc;QAAE;QACzC,OAAOC,YAAYK,MAAM,CAAC,CAACC,IAAMA,EAAEhB,OAAO,EAAES,kBAAkBA;IAChE;IAEA,MAAMQ,cAAcR,aAAqB,EAAET,OAA+B,EAAiB;QACzF,MAAMkB,kBAAkB,MAAM,IAAI,CAACP,UAAU,CAACQ,SAAS,CAAC;YACtDnB,SAAS;gBAAES;YAAc;YACzBL,QAAQgB,wCAAW,CAACC,YAAY;QAClC;QACA,IAAI,CAACH,iBAAiB;YACpB,IAAI,CAAC3B,MAAM,CAAC+B,IAAI,CAAC,CAAC,yBAAyB,EAAEb,cAAc,0DAA0D,CAAC;YACtH;QACF;QACAS,gBAAgBlB,OAAO,GAAGA;QAC1B,MAAM,IAAI,CAACuB,MAAM,CAACL,gBAAgBpB,EAAE,EAAEoB;IACxC;IAEA,MAAMM,2BAA2D;QAC/D,MAAMC,qBAAqB,MAAM,IAAI,CAACC,SAAS;QAC/C,MAAMC,uBAAuBC,IAAAA,uBAAY,EAACH,oBAAoB,CAACI,MAAQA,IAAIxB,SAAS,CAACyB,QAAQ;QAC7F,MAAMpB,cAAcqB,OAAOC,OAAO,CAACL,sBAAsBM,GAAG,CAAC,CAAC,CAACC,IAAIL,IAAI,GAAM,CAAA;gBAC3ExB,WAAW8B,SAASD;gBACpBE,aAAaP;YACf,CAAA;QACA,OAAOQ,IAAAA,yCAAkB,EAAC3B;IAC5B;IAEA,MAAM4B,oBAAgE;QACpE,MAAM5B,cAAc,MAAM,IAAI,CAACC,UAAU,CAAC4B,IAAI,CAAC;YAC7CC,OAAO;gBACLpC,QAAQqC,IAAAA,YAAG,EAACC,IAAAA,WAAE,EAAC;oBAACtB,wCAAW,CAACuB,SAAS;oBAAEvB,wCAAW,CAACwB,WAAW;iBAAC;YACjE;YACAC,OAAO;gBACLxC,WAAW;gBACXH,WAAW,CAAC;YACd;QACF;QAEA,OAAO0B,IAAAA,uBAAY,EAAClB,aAAa,CAACmB,MAAQA,IAAI/B,EAAE,CAACgC,QAAQ;IAC3D;AACF"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrinterFilesService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrinterFilesService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _printerfileentity = require("../../entities/printer-file.entity");
13
+ const _printerfiledto = require("../interfaces/printer-file.dto");
14
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
15
+ const _errorutils = require("../../utils/error.utils");
16
+ class PrinterFilesService extends (0, _baseservice.BaseService)(_printerfileentity.PrinterFile, _printerfiledto.PrinterFileDto) {
17
+ printerService;
18
+ logger;
19
+ constructor({ printerService, loggerFactory, typeormService }){
20
+ super({
21
+ typeormService
22
+ });
23
+ this.printerService = printerService;
24
+ this.logger = loggerFactory(PrinterFilesService.name);
25
+ }
26
+ toDto(entity) {
27
+ return {
28
+ id: entity.id,
29
+ printerId: entity.printerId,
30
+ name: entity.name,
31
+ date: entity.date,
32
+ display: entity.display,
33
+ gcodeAnalysis: entity.gcodeAnalysis,
34
+ hash: entity.hash,
35
+ origin: entity.origin,
36
+ path: entity.path,
37
+ prints: entity.prints,
38
+ refs: entity.refs,
39
+ size: entity.size,
40
+ statistics: entity.statistics,
41
+ type: entity.type,
42
+ typePath: entity.typePath
43
+ };
44
+ }
45
+ async getPrinterFiles(printerId) {
46
+ const printer = await this.printerService.get(printerId);
47
+ return this.listPrinterFiles(printer.id);
48
+ }
49
+ async updateFiles(printerId, newFiles) {
50
+ const savedFiles = await this.getPrinterFiles(printerId);
51
+ const newPaths = newFiles.map((f)=>f.path);
52
+ const deletableSavedFiles = savedFiles.filter((f)=>!newPaths.includes(f.path));
53
+ const deletableSavedFilePaths = deletableSavedFiles.map((f)=>f.path);
54
+ await this.deletePrinterFiles(printerId, deletableSavedFilePaths, false);
55
+ for (const newFile of newFiles){
56
+ try {
57
+ await this.appendOrReplaceFile(printerId, newFile);
58
+ } catch (e) {
59
+ this.logger.error(`Error appending file ${(0, _errorutils.errorSummary)(e)}`);
60
+ throw e;
61
+ }
62
+ }
63
+ return await this.getPrinterFiles(printerId);
64
+ }
65
+ async appendOrReplaceFile(printerId, addedFile) {
66
+ const printer = await this.printerService.get(printerId);
67
+ addedFile.printerId = printer.id;
68
+ if (!addedFile.customData) {
69
+ addedFile.customData = {};
70
+ }
71
+ const foundFile = await this.getPrinterFile(printer.id, addedFile.path);
72
+ if (!foundFile) {
73
+ await this.create(addedFile);
74
+ } else {
75
+ await this.repository.update({
76
+ printerId: printer.id,
77
+ path: addedFile.path
78
+ }, addedFile);
79
+ }
80
+ return await this.getPrinterFiles(printer.id);
81
+ }
82
+ async clearFiles(printerId) {
83
+ const printer = await this.printerService.get(printerId);
84
+ await this.repository.delete({
85
+ printerId: printer.id
86
+ });
87
+ }
88
+ async deletePrinterFiles(printerId, filePaths, throwError) {
89
+ const printer = await this.printerService.get(printerId);
90
+ if (filePaths?.length === 0) return;
91
+ if (!filePaths?.length) {
92
+ throw new Error("Cant delete specific printer files without specific file path array being provided");
93
+ }
94
+ for (const filePath of filePaths){
95
+ const file = await this.getPrinterFile(printer.id, filePath);
96
+ if (!file) {
97
+ if (throwError) {
98
+ throw new _runtimeexceptions.NotFoundException(`A file removal was ordered but this file was not found in database for printer Id ${printer.id}`, filePath);
99
+ } else {
100
+ this.logger.warn("File was not found in PrinterFile table");
101
+ return;
102
+ }
103
+ }
104
+ await this.delete(file.id);
105
+ }
106
+ }
107
+ async listPrinterFiles(printerId) {
108
+ return await this.list({
109
+ where: {
110
+ printerId
111
+ }
112
+ });
113
+ }
114
+ async getPrinterFile(printerId, filePath) {
115
+ const printer = await this.printerService.get(printerId);
116
+ return this.repository.findOneBy({
117
+ printerId: printer.id,
118
+ path: filePath
119
+ });
120
+ }
121
+ }
122
+
123
+ //# sourceMappingURL=printer-files.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/printer-files.service.ts"],"names":["PrinterFilesService","BaseService","PrinterFile","PrinterFileDto","printerService","logger","constructor","loggerFactory","typeormService","name","toDto","entity","id","printerId","date","display","gcodeAnalysis","hash","origin","path","prints","refs","size","statistics","type","typePath","getPrinterFiles","printer","get","listPrinterFiles","updateFiles","newFiles","savedFiles","newPaths","map","f","deletableSavedFiles","filter","includes","deletableSavedFilePaths","deletePrinterFiles","newFile","appendOrReplaceFile","e","error","errorSummary","addedFile","customData","foundFile","getPrinterFile","create","repository","update","clearFiles","delete","filePaths","throwError","length","Error","filePath","file","NotFoundException","warn","list","where","findOneBy"],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrinterService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrinterService;
9
+ }
10
+ });
11
+ const _printerdto = require("../interfaces/printer.dto");
12
+ const _printerentity = require("../../entities/printer.entity");
13
+ const _baseservice = require("./base.service");
14
+ const _urlutils = require("../../utils/url.utils");
15
+ const _validators = require("../../handlers/validators");
16
+ const _printerservicevalidation = require("../validators/printer-service.validation");
17
+ const _eventconstants = require("../../constants/event.constants");
18
+ class PrinterService extends (0, _baseservice.BaseService)(_printerentity.Printer, _printerdto.PrinterDto) {
19
+ logger;
20
+ eventEmitter2;
21
+ constructor({ loggerFactory, typeormService, eventEmitter2 }){
22
+ super({
23
+ typeormService
24
+ });
25
+ this.logger = loggerFactory(PrinterService.name);
26
+ this.eventEmitter2 = eventEmitter2;
27
+ }
28
+ toUnsafeDto(entity) {
29
+ return {
30
+ ...this.toDto(entity),
31
+ apiKey: entity.apiKey,
32
+ printerURL: entity.printerURL
33
+ };
34
+ }
35
+ toDto(entity) {
36
+ return {
37
+ id: entity.id,
38
+ name: entity.name,
39
+ enabled: entity.enabled,
40
+ disabledReason: entity.disabledReason,
41
+ dateAdded: entity.dateAdded
42
+ };
43
+ }
44
+ async list() {
45
+ return this.repository.find({
46
+ order: {
47
+ dateAdded: "ASC"
48
+ }
49
+ });
50
+ }
51
+ async create(newPrinter, emitEvent = true) {
52
+ if (newPrinter.id) {
53
+ delete newPrinter.id;
54
+ }
55
+ const mergedPrinter = await this.validateAndDefault(newPrinter);
56
+ mergedPrinter.dateAdded = Date.now();
57
+ const printer = await super.create(mergedPrinter);
58
+ if (emitEvent) {
59
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerCreated, {
60
+ printer
61
+ });
62
+ }
63
+ return printer;
64
+ }
65
+ async update(printerId, partial) {
66
+ const printer = await this.get(printerId);
67
+ if (partial.printerURL) {
68
+ partial.printerURL = (0, _urlutils.normalizeURLWithProtocol)(partial.printerURL);
69
+ }
70
+ Object.assign(printer, partial);
71
+ const { printerURL, apiKey, enabled, name } = await (0, _validators.validateInput)(printer, _printerservicevalidation.createPrinterRules);
72
+ const updatedPrinter = await super.update(printerId, {
73
+ printerURL,
74
+ name,
75
+ apiKey,
76
+ enabled
77
+ });
78
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
79
+ printer,
80
+ updatedPrinter
81
+ });
82
+ return updatedPrinter;
83
+ }
84
+ async batchImport(printers) {
85
+ if (!printers?.length) return [];
86
+ this.logger.log(`Validating ${printers.length} printer objects`);
87
+ for (let printer of printers){
88
+ await this.validateAndDefault(printer);
89
+ }
90
+ const newPrinters = [];
91
+ for (let printer of printers){
92
+ const createdPrinter = await this.create(printer, false);
93
+ newPrinters.push(createdPrinter);
94
+ }
95
+ this.logger.log(`Successfully created ${printers.length} printers`);
96
+ this.eventEmitter2.emit(_eventconstants.printerEvents.batchPrinterCreated, {
97
+ printers: newPrinters
98
+ });
99
+ return newPrinters;
100
+ }
101
+ async deleteMany(printerIds, emitEvent = true) {
102
+ const result = await this.repository.delete(printerIds);
103
+ if (emitEvent) {
104
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printersDeleted, {
105
+ printerIds
106
+ });
107
+ }
108
+ return result;
109
+ }
110
+ updateConnectionSettings(printerId, partial) {
111
+ return this.update(printerId, partial);
112
+ }
113
+ updateDisabledReason(printerId, disabledReason) {
114
+ return this.update(printerId, {
115
+ disabledReason
116
+ });
117
+ }
118
+ updateEnabled(printerId, enabled) {
119
+ return this.update(printerId, {
120
+ enabled
121
+ });
122
+ }
123
+ updateFeedRate(printerId, feedRate) {
124
+ return this.update(printerId, {
125
+ feedRate
126
+ });
127
+ }
128
+ updateFlowRate(printerId, flowRate) {
129
+ return this.update(printerId, {
130
+ flowRate
131
+ });
132
+ }
133
+ async validateAndDefault(printer) {
134
+ const mergedPrinter = {
135
+ enabled: true,
136
+ ...printer
137
+ };
138
+ if (mergedPrinter.printerURL?.length) {
139
+ mergedPrinter.printerURL = (0, _urlutils.normalizeURLWithProtocol)(mergedPrinter.printerURL);
140
+ }
141
+ return await (0, _validators.validateInput)(mergedPrinter, _printerservicevalidation.createPrinterRules);
142
+ }
143
+ }
144
+
145
+ //# sourceMappingURL=printer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/printer.service.ts"],"names":["PrinterService","BaseService","Printer","PrinterDto","logger","eventEmitter2","constructor","loggerFactory","typeormService","name","toUnsafeDto","entity","toDto","apiKey","printerURL","id","enabled","disabledReason","dateAdded","list","repository","find","order","create","newPrinter","emitEvent","mergedPrinter","validateAndDefault","Date","now","printer","emit","printerEvents","printerCreated","update","printerId","partial","get","normalizeURLWithProtocol","Object","assign","validateInput","createPrinterRules","updatedPrinter","printerUpdated","batchImport","printers","length","log","newPrinters","createdPrinter","push","batchPrinterCreated","deleteMany","printerIds","result","delete","printersDeleted","updateConnectionSettings","updateDisabledReason","updateEnabled","updateFeedRate","feedRate","updateFlowRate","flowRate"],"mappings":"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"}