@fdm-monster/server 1.9.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/.env.template +8 -7
  2. package/.yarn/install-state.gz +0 -0
  3. package/CONTRIBUTING.md +5 -5
  4. package/README.md +9 -8
  5. package/RELEASE_NOTES.MD +52 -0
  6. package/SECURITY.md +1 -1
  7. package/biome.json +8 -5
  8. package/dist/consoles/download-github-releases.js +3 -3
  9. package/dist/consoles/launch-http-servers.js +4 -4
  10. package/dist/consoles/launch-http-servers.js.map +1 -1
  11. package/dist/consoles/mock-bambu.server.js +50 -30
  12. package/dist/consoles/mock-bambu.server.js.map +1 -1
  13. package/dist/consoles/mock-camera/default-image.js +13 -0
  14. package/dist/consoles/mock-camera/default-image.js.map +1 -0
  15. package/dist/consoles/mock-camera/mock-camera.server.js +160 -0
  16. package/dist/consoles/mock-camera/mock-camera.server.js.map +1 -0
  17. package/dist/consoles/mock-octoprint.server.js +281 -73
  18. package/dist/consoles/mock-octoprint.server.js.map +1 -1
  19. package/dist/consoles/mock-prusalink.server.js +17 -17
  20. package/dist/consoles/mock-prusalink.server.js.map +1 -1
  21. package/dist/consoles/typeorm-create.js +135 -0
  22. package/dist/consoles/typeorm-create.js.map +1 -0
  23. package/dist/consoles/typeorm-generate.js +8 -8
  24. package/dist/consoles/typeorm-generate.js.map +1 -1
  25. package/dist/consoles/utils/api-messages.js.map +1 -1
  26. package/dist/constants/authorization.constants.js +25 -31
  27. package/dist/constants/authorization.constants.js.map +1 -1
  28. package/dist/constants/event.constants.js.map +1 -1
  29. package/dist/constants/server-settings.constants.js +3 -19
  30. package/dist/constants/server-settings.constants.js.map +1 -1
  31. package/dist/container.js +43 -59
  32. package/dist/container.js.map +1 -1
  33. package/dist/container.tokens.js +9 -6
  34. package/dist/container.tokens.js.map +1 -1
  35. package/dist/controllers/auth.controller.js +1 -1
  36. package/dist/controllers/auth.controller.js.map +1 -1
  37. package/dist/controllers/batch-call.controller.js +7 -25
  38. package/dist/controllers/batch-call.controller.js.map +1 -1
  39. package/dist/controllers/file-storage.controller.js +248 -0
  40. package/dist/controllers/file-storage.controller.js.map +1 -0
  41. package/dist/controllers/first-time-setup.controller.js +6 -5
  42. package/dist/controllers/first-time-setup.controller.js.map +1 -1
  43. package/dist/controllers/floor.controller.js +12 -12
  44. package/dist/controllers/floor.controller.js.map +1 -1
  45. package/dist/controllers/metrics.controller.js.map +1 -1
  46. package/dist/controllers/print-job.controller.js +666 -0
  47. package/dist/controllers/print-job.controller.js.map +1 -0
  48. package/dist/controllers/print-queue.controller.js +375 -0
  49. package/dist/controllers/print-queue.controller.js.map +1 -0
  50. package/dist/controllers/printer-files.controller.js +88 -59
  51. package/dist/controllers/printer-files.controller.js.map +1 -1
  52. package/dist/controllers/printer-settings.controller.js +0 -21
  53. package/dist/controllers/printer-settings.controller.js.map +1 -1
  54. package/dist/controllers/{printer-group.controller.js → printer-tag.controller.js} +51 -34
  55. package/dist/controllers/printer-tag.controller.js.map +1 -0
  56. package/dist/controllers/printer.controller.js +21 -7
  57. package/dist/controllers/printer.controller.js.map +1 -1
  58. package/dist/controllers/server-private.controller.js +2 -1
  59. package/dist/controllers/server-private.controller.js.map +1 -1
  60. package/dist/controllers/server-public.controller.js +11 -15
  61. package/dist/controllers/server-public.controller.js.map +1 -1
  62. package/dist/controllers/settings.controller.js +0 -68
  63. package/dist/controllers/settings.controller.js.map +1 -1
  64. package/dist/controllers/slicer-compat.controller.js +216 -0
  65. package/dist/controllers/slicer-compat.controller.js.map +1 -0
  66. package/dist/controllers/user.controller.js +8 -12
  67. package/dist/controllers/user.controller.js.map +1 -1
  68. package/dist/controllers/validation/batch-controller.validation.js +13 -13
  69. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  70. package/dist/controllers/validation/generic.validation.js +4 -8
  71. package/dist/controllers/validation/generic.validation.js.map +1 -1
  72. package/dist/controllers/validation/printer-files-controller.validation.js +2 -2
  73. package/dist/controllers/validation/user-controller.validation.js +14 -9
  74. package/dist/controllers/validation/user-controller.validation.js.map +1 -1
  75. package/dist/data-source.js +25 -12
  76. package/dist/data-source.js.map +1 -1
  77. package/dist/entities/camera-stream.entity.js +2 -1
  78. package/dist/entities/camera-stream.entity.js.map +1 -1
  79. package/dist/entities/floor.entity.js +3 -5
  80. package/dist/entities/floor.entity.js.map +1 -1
  81. package/dist/entities/index.js +15 -11
  82. package/dist/entities/index.js.map +1 -1
  83. package/dist/entities/print-job.entity.js +195 -0
  84. package/dist/entities/print-job.entity.js.map +1 -0
  85. package/dist/entities/{printer-group.entity.js → printer-tag.entity.js} +17 -17
  86. package/dist/entities/printer-tag.entity.js.map +1 -0
  87. package/dist/entities/printer.entity.js +4 -10
  88. package/dist/entities/printer.entity.js.map +1 -1
  89. package/dist/entities/settings.entity.js +3 -12
  90. package/dist/entities/settings.entity.js.map +1 -1
  91. package/dist/entities/{group.entity.js → tag.entity.js} +15 -8
  92. package/dist/entities/tag.entity.js.map +1 -0
  93. package/dist/handlers/logging/file-logging.transport.js.map +1 -1
  94. package/dist/handlers/logging/static.logger.js.map +1 -1
  95. package/dist/index.js +8 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/middleware/authenticate.js +4 -4
  98. package/dist/middleware/authenticate.js.map +1 -1
  99. package/dist/middleware/database.js +1 -1
  100. package/dist/middleware/exception.filter.js +114 -90
  101. package/dist/middleware/exception.filter.js.map +1 -1
  102. package/dist/middleware/global.middleware.js +10 -18
  103. package/dist/middleware/global.middleware.js.map +1 -1
  104. package/dist/middleware/param-converter.middleware.js +5 -13
  105. package/dist/middleware/param-converter.middleware.js.map +1 -1
  106. package/dist/middleware/passport.js +2 -2
  107. package/dist/middleware/passport.js.map +1 -1
  108. package/dist/middleware/printer-resolver.js.map +1 -1
  109. package/dist/middleware/printer.js +3 -2
  110. package/dist/middleware/printer.js.map +1 -1
  111. package/dist/middleware/socketio.middleware.js.map +1 -1
  112. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +1 -1
  113. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
  114. package/dist/migrations/1766576698569-DropPermissions.js +28 -0
  115. package/dist/migrations/1766576698569-DropPermissions.js.map +1 -0
  116. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +186 -0
  117. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -0
  118. package/dist/migrations/1767279607392-DropCustomGcode.js +31 -0
  119. package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -0
  120. package/dist/migrations/1767291804417-DropPrintCompletions.js +37 -0
  121. package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -0
  122. package/dist/migrations/1767352862576-DropSettingsFileClean.js +88 -0
  123. package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -0
  124. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +107 -0
  125. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -0
  126. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +62 -0
  127. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -0
  128. package/dist/migrations/1767432108916-RenameGroupToTag.js +86 -0
  129. package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -0
  130. package/dist/migrations/1767451444137-AddPrintJob.js +207 -0
  131. package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -0
  132. package/dist/server.constants.js +9 -17
  133. package/dist/server.constants.js.map +1 -1
  134. package/dist/server.core.js +3 -7
  135. package/dist/server.core.js.map +1 -1
  136. package/dist/server.env.js +4 -49
  137. package/dist/server.env.js.map +1 -1
  138. package/dist/server.host.js +26 -44
  139. package/dist/server.host.js.map +1 -1
  140. package/dist/services/authentication/auth.service.js.map +1 -1
  141. package/dist/services/authentication/jwt.service.js.map +1 -1
  142. package/dist/services/bambu/bambu-ftp.adapter.js +3 -3
  143. package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
  144. package/dist/services/bambu/bambu-mqtt.adapter.js +74 -77
  145. package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
  146. package/dist/services/bambu/bambu.client.js.map +1 -1
  147. package/dist/services/bambu.api.js +11 -0
  148. package/dist/services/bambu.api.js.map +1 -1
  149. package/dist/services/core/batch-call.service.js +0 -25
  150. package/dist/services/core/batch-call.service.js.map +1 -1
  151. package/dist/services/core/multer.service.js +5 -9
  152. package/dist/services/core/multer.service.js.map +1 -1
  153. package/dist/services/core/yaml.service.js +219 -187
  154. package/dist/services/core/yaml.service.js.map +1 -1
  155. package/dist/services/file-analysis.service.js +146 -0
  156. package/dist/services/file-analysis.service.js.map +1 -0
  157. package/dist/services/file-storage.service.js +386 -0
  158. package/dist/services/file-storage.service.js.map +1 -0
  159. package/dist/services/interfaces/camera-stream.dto.js +2 -2
  160. package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
  161. package/dist/services/interfaces/floor.dto.js +3 -3
  162. package/dist/services/interfaces/floor.dto.js.map +1 -1
  163. package/dist/services/interfaces/{printer-group.dto.js → printer-tag.dto.js} +9 -8
  164. package/dist/services/interfaces/printer-tag.dto.js.map +1 -0
  165. package/dist/services/interfaces/{print-completion.interface.js → printer-tag.service.interface.js} +1 -1
  166. package/dist/services/interfaces/{printer-group.service.interface.js.map → printer-tag.service.interface.js.map} +1 -1
  167. package/dist/services/interfaces/printer.dto.js +2 -2
  168. package/dist/services/interfaces/printer.dto.js.map +1 -1
  169. package/dist/services/interfaces/refresh-token.dto.js.map +1 -1
  170. package/dist/services/interfaces/role.dto.js.map +1 -1
  171. package/dist/services/interfaces/settings.dto.js +0 -1
  172. package/dist/services/interfaces/settings.dto.js.map +1 -1
  173. package/dist/services/interfaces/{group.dto.js → tag.dto.js} +1 -1
  174. package/dist/services/interfaces/tag.dto.js.map +1 -0
  175. package/dist/services/interfaces/user.dto.js.map +1 -1
  176. package/dist/services/moonraker/constants/moonraker-event.dto.js.map +1 -1
  177. package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
  178. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  179. package/dist/services/moonraker.api.js +3 -0
  180. package/dist/services/moonraker.api.js.map +1 -1
  181. package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +1 -0
  182. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  183. package/dist/services/octoprint/octoprint-api.routes.js +0 -7
  184. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  185. package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
  186. package/dist/services/octoprint/octoprint.client.js +0 -4
  187. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  188. package/dist/services/octoprint.api.js +3 -0
  189. package/dist/services/octoprint.api.js.map +1 -1
  190. package/dist/services/orm/base.service.js.map +1 -1
  191. package/dist/services/orm/camera-stream.service.js.map +1 -1
  192. package/dist/services/orm/floor-position.service.js.map +1 -1
  193. package/dist/services/orm/floor.service.js +12 -19
  194. package/dist/services/orm/floor.service.js.map +1 -1
  195. package/dist/services/orm/permission.service.js +3 -54
  196. package/dist/services/orm/permission.service.js.map +1 -1
  197. package/dist/services/orm/print-job.service.js +539 -0
  198. package/dist/services/orm/print-job.service.js.map +1 -0
  199. package/dist/services/orm/printer-tag.service.js +120 -0
  200. package/dist/services/orm/printer-tag.service.js.map +1 -0
  201. package/dist/services/orm/printer.service.js.map +1 -1
  202. package/dist/services/orm/refresh-token.service.js.map +1 -1
  203. package/dist/services/orm/role.service.js +25 -39
  204. package/dist/services/orm/role.service.js.map +1 -1
  205. package/dist/services/orm/settings.service.js +4 -15
  206. package/dist/services/orm/settings.service.js.map +1 -1
  207. package/dist/services/orm/user.service.js +17 -13
  208. package/dist/services/orm/user.service.js.map +1 -1
  209. package/dist/services/print-file-downloader.service.js +169 -0
  210. package/dist/services/print-file-downloader.service.js.map +1 -0
  211. package/dist/services/print-queue.service.js +268 -0
  212. package/dist/services/print-queue.service.js.map +1 -0
  213. package/dist/services/printer-api.factory.js +1 -1
  214. package/dist/services/printer-api.factory.js.map +1 -1
  215. package/dist/services/printer-api.interface.js.map +1 -1
  216. package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -1
  217. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +1 -3
  218. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
  219. package/dist/services/prusa-link/prusa-link.api.js +4 -1
  220. package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
  221. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
  222. package/dist/services/validators/floor-service.validation.js +25 -31
  223. package/dist/services/validators/floor-service.validation.js.map +1 -1
  224. package/dist/services/validators/print-job.validation.js +31 -0
  225. package/dist/services/validators/print-job.validation.js.map +1 -0
  226. package/dist/services/validators/settings-service.validation.js +0 -22
  227. package/dist/services/validators/settings-service.validation.js.map +1 -1
  228. package/dist/services/validators/user-service.validation.js +15 -10
  229. package/dist/services/validators/user-service.validation.js.map +1 -1
  230. package/dist/services/validators/yaml-service.validation.js +8 -14
  231. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  232. package/dist/shared/load-controllers.js +2 -1
  233. package/dist/shared/load-controllers.js.map +1 -1
  234. package/dist/shared/runtime-settings.migration.js +1 -11
  235. package/dist/shared/runtime-settings.migration.js.map +1 -1
  236. package/dist/shared/websocket-rpc-extended.adapter.js +13 -4
  237. package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
  238. package/dist/shared/websocket.adapter.js.map +1 -1
  239. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  240. package/dist/state/file.cache.js +6 -6
  241. package/dist/state/file.cache.js.map +1 -1
  242. package/dist/state/floor.store.js +3 -10
  243. package/dist/state/floor.store.js.map +1 -1
  244. package/dist/state/printer-events.cache.js +180 -20
  245. package/dist/state/printer-events.cache.js.map +1 -1
  246. package/dist/state/printer-files.store.js.map +1 -1
  247. package/dist/state/printer-socket.store.js +25 -20
  248. package/dist/state/printer-socket.store.js.map +1 -1
  249. package/dist/state/printer-thumbnail.cache.js +98 -188
  250. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  251. package/dist/state/printer.cache.js +3 -13
  252. package/dist/state/printer.cache.js.map +1 -1
  253. package/dist/state/settings.store.js +4 -42
  254. package/dist/state/settings.store.js.map +1 -1
  255. package/dist/state/socket-io.gateway.js +1 -1
  256. package/dist/state/socket-io.gateway.js.map +1 -1
  257. package/dist/state/test-printer-socket.store.js +6 -3
  258. package/dist/state/test-printer-socket.store.js.map +1 -1
  259. package/dist/tasks/boot.task.js +11 -91
  260. package/dist/tasks/boot.task.js.map +1 -1
  261. package/dist/tasks/print-job-analysis.task.js +116 -0
  262. package/dist/tasks/print-job-analysis.task.js.map +1 -0
  263. package/dist/tasks/printer-files-load.task.js +29 -0
  264. package/dist/tasks/printer-files-load.task.js.map +1 -0
  265. package/dist/tasks/socketio.task.js +1 -1
  266. package/dist/tasks/socketio.task.js.map +1 -1
  267. package/dist/tasks.js +3 -2
  268. package/dist/tasks.js.map +1 -1
  269. package/dist/utils/cache/key-diff.cache.js +20 -61
  270. package/dist/utils/cache/key-diff.cache.js.map +1 -1
  271. package/dist/utils/parsers/3mf.parser.js +337 -0
  272. package/dist/utils/parsers/3mf.parser.js.map +1 -0
  273. package/dist/utils/parsers/bgcode.parser.js +223 -0
  274. package/dist/utils/parsers/bgcode.parser.js.map +1 -0
  275. package/dist/utils/parsers/gcode.parser.js +254 -0
  276. package/dist/utils/parsers/gcode.parser.js.map +1 -0
  277. package/dist/utils/swagger/decorators.js +39 -0
  278. package/dist/utils/swagger/decorators.js.map +1 -0
  279. package/dist/utils/swagger/generator.js +196 -0
  280. package/dist/utils/swagger/generator.js.map +1 -0
  281. package/dist/utils/swagger/swagger.js +93 -0
  282. package/dist/utils/swagger/swagger.js.map +1 -0
  283. package/package.json +24 -30
  284. package/dist/controllers/custom-gcode.controller.js +0 -150
  285. package/dist/controllers/custom-gcode.controller.js.map +0 -1
  286. package/dist/controllers/print-completion.controller.js +0 -118
  287. package/dist/controllers/print-completion.controller.js.map +0 -1
  288. package/dist/controllers/printer-group.controller.js.map +0 -1
  289. package/dist/entities/custom-gcode.entity.js +0 -49
  290. package/dist/entities/custom-gcode.entity.js.map +0 -1
  291. package/dist/entities/group.entity.js.map +0 -1
  292. package/dist/entities/permission.entity.js +0 -37
  293. package/dist/entities/permission.entity.js.map +0 -1
  294. package/dist/entities/print-completion.entity.js +0 -90
  295. package/dist/entities/print-completion.entity.js.map +0 -1
  296. package/dist/entities/printer-group.entity.js.map +0 -1
  297. package/dist/models/Auth/Permission.js +0 -20
  298. package/dist/models/Auth/Permission.js.map +0 -1
  299. package/dist/models/Auth/RefreshToken.js +0 -41
  300. package/dist/models/Auth/RefreshToken.js.map +0 -1
  301. package/dist/models/Auth/Role.js +0 -20
  302. package/dist/models/Auth/Role.js.map +0 -1
  303. package/dist/models/Auth/User.js +0 -49
  304. package/dist/models/Auth/User.js.map +0 -1
  305. package/dist/models/CameraStream.js +0 -49
  306. package/dist/models/CameraStream.js.map +0 -1
  307. package/dist/models/CustomGcode.js +0 -28
  308. package/dist/models/CustomGcode.js.map +0 -1
  309. package/dist/models/Floor.js +0 -33
  310. package/dist/models/Floor.js.map +0 -1
  311. package/dist/models/FloorPrinter.js +0 -38
  312. package/dist/models/FloorPrinter.js.map +0 -1
  313. package/dist/models/PrintCompletion.js +0 -40
  314. package/dist/models/PrintCompletion.js.map +0 -1
  315. package/dist/models/Printer.js +0 -78
  316. package/dist/models/Printer.js.map +0 -1
  317. package/dist/models/Settings.js +0 -150
  318. package/dist/models/Settings.js.map +0 -1
  319. package/dist/models/index.js +0 -54
  320. package/dist/models/index.js.map +0 -1
  321. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +0 -45
  322. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +0 -1
  323. package/dist/mongo-migrations/20210907173950-printers-enabled.js +0 -35
  324. package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +0 -1
  325. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +0 -35
  326. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +0 -1
  327. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +0 -60
  328. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +0 -1
  329. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +0 -30
  330. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +0 -1
  331. package/dist/mongo-migrations/20230716065316-user-remove-name.js +0 -30
  332. package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +0 -1
  333. package/dist/mongo-migrations/20231111081809-printer-flatten-name.js +0 -35
  334. package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +0 -1
  335. package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js +0 -41
  336. package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +0 -1
  337. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js +0 -41
  338. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +0 -1
  339. package/dist/services/interfaces/custom-gcode.dto.js +0 -18
  340. package/dist/services/interfaces/custom-gcode.dto.js.map +0 -1
  341. package/dist/services/interfaces/custom-gcode.service.interface.js +0 -6
  342. package/dist/services/interfaces/custom-gcode.service.interface.js.map +0 -1
  343. package/dist/services/interfaces/gcode-analysis.dto.js.map +0 -1
  344. package/dist/services/interfaces/group.dto.js.map +0 -1
  345. package/dist/services/interfaces/permission.dto.js +0 -16
  346. package/dist/services/interfaces/permission.dto.js.map +0 -1
  347. package/dist/services/interfaces/print-completion-context.dto.js +0 -6
  348. package/dist/services/interfaces/print-completion-context.dto.js.map +0 -1
  349. package/dist/services/interfaces/print-completion.dto.js +0 -38
  350. package/dist/services/interfaces/print-completion.dto.js.map +0 -1
  351. package/dist/services/interfaces/print-completion.interface.js.map +0 -1
  352. package/dist/services/interfaces/printer-group.dto.js.map +0 -1
  353. package/dist/services/interfaces/printer-group.service.interface.js +0 -6
  354. package/dist/services/mongoose/camera-stream.service.js +0 -67
  355. package/dist/services/mongoose/camera-stream.service.js.map +0 -1
  356. package/dist/services/mongoose/custom-gcode.service.js +0 -50
  357. package/dist/services/mongoose/custom-gcode.service.js.map +0 -1
  358. package/dist/services/mongoose/floor.service.js +0 -139
  359. package/dist/services/mongoose/floor.service.js.map +0 -1
  360. package/dist/services/mongoose/permission.service.js +0 -73
  361. package/dist/services/mongoose/permission.service.js.map +0 -1
  362. package/dist/services/mongoose/print-completion.service.js +0 -134
  363. package/dist/services/mongoose/print-completion.service.js.map +0 -1
  364. package/dist/services/mongoose/print-completion.shared.js +0 -59
  365. package/dist/services/mongoose/print-completion.shared.js.map +0 -1
  366. package/dist/services/mongoose/printer.service.js +0 -216
  367. package/dist/services/mongoose/printer.service.js.map +0 -1
  368. package/dist/services/mongoose/refresh-token.service.js +0 -104
  369. package/dist/services/mongoose/refresh-token.service.js.map +0 -1
  370. package/dist/services/mongoose/role.service.js +0 -132
  371. package/dist/services/mongoose/role.service.js.map +0 -1
  372. package/dist/services/mongoose/settings.service.js +0 -124
  373. package/dist/services/mongoose/settings.service.js.map +0 -1
  374. package/dist/services/mongoose/user.service.js +0 -180
  375. package/dist/services/mongoose/user.service.js.map +0 -1
  376. package/dist/services/orm/custom-gcode.service.js +0 -42
  377. package/dist/services/orm/custom-gcode.service.js.map +0 -1
  378. package/dist/services/orm/print-completion.service.js +0 -87
  379. package/dist/services/orm/print-completion.service.js.map +0 -1
  380. package/dist/services/orm/printer-group.service.js +0 -109
  381. package/dist/services/orm/printer-group.service.js.map +0 -1
  382. package/dist/services/validators/camera-service.validation.js +0 -19
  383. package/dist/services/validators/camera-service.validation.js.map +0 -1
  384. package/dist/services/validators/print-completion-service.validation.js +0 -33
  385. package/dist/services/validators/print-completion-service.validation.js.map +0 -1
  386. package/dist/shared.constants.js +0 -15
  387. package/dist/shared.constants.js.map +0 -1
  388. package/dist/tasks/print-completion.socketio.task.js +0 -91
  389. package/dist/tasks/print-completion.socketio.task.js.map +0 -1
  390. package/dist/tasks/printer-file-clean.task.js +0 -74
  391. package/dist/tasks/printer-file-clean.task.js.map +0 -1
  392. package/migrate-mongo-config.js +0 -45
  393. /package/dist/services/{interfaces → octoprint/dto/files}/gcode-analysis.dto.js +0 -0
@@ -0,0 +1,666 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrintJobController", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrintJobController;
9
+ }
10
+ });
11
+ const _awilixexpress = require("awilix-express");
12
+ const _serverconstants = require("../server.constants");
13
+ const _express = require("express");
14
+ const _authenticate = require("../middleware/authenticate");
15
+ const _authorizationconstants = require("../constants/authorization.constants");
16
+ const _printjobvalidation = require("../services/validators/print-job.validation");
17
+ const _validators = require("../handlers/validators");
18
+ const _printjobservice = require("../services/orm/print-job.service");
19
+ const _fileanalysisservice = require("../services/file-analysis.service");
20
+ const _filestorageservice = require("../services/file-storage.service");
21
+ const _loggerfactory = require("../handlers/logger-factory");
22
+ const _paramconvertermiddleware = require("../middleware/param-converter.middleware");
23
+ const _runtimeexceptions = require("../exceptions/runtime.exceptions");
24
+ function _ts_decorate(decorators, target, key, desc) {
25
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
29
+ }
30
+ function _ts_metadata(k, v) {
31
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
32
+ }
33
+ class PrintJobController {
34
+ printJobService;
35
+ fileAnalysisService;
36
+ fileStorageService;
37
+ logger;
38
+ constructor(loggerFactory, printJobService, fileAnalysisService, fileStorageService){
39
+ this.printJobService = printJobService;
40
+ this.fileAnalysisService = fileAnalysisService;
41
+ this.fileStorageService = fileStorageService;
42
+ this.logger = loggerFactory(PrintJobController.name);
43
+ }
44
+ async searchJobs(req, res) {
45
+ const { searchPrinter, searchFile, startDate, endDate } = await (0, _validators.validateInput)(req.query, _printjobvalidation.searchJobsSchema);
46
+ const endDateObj = endDate ? this.toEndOfDay(new Date(endDate)) : undefined;
47
+ const result = await this.printJobService.searchPrintJobs(searchPrinter, searchFile, startDate ? new Date(startDate) : undefined, endDateObj);
48
+ res.send(result);
49
+ }
50
+ async searchJobsPaged(req, res) {
51
+ const { page, pageSize, searchPrinter, searchFile, startDate, endDate } = await (0, _validators.validateInput)(req.query, _printjobvalidation.searchJobsPagedSchema);
52
+ const endDateObj = endDate ? this.toEndOfDay(new Date(endDate)) : undefined;
53
+ const [items, count] = await this.printJobService.searchPrintJobsPaged(searchPrinter, searchFile, startDate ? new Date(startDate) : undefined, endDateObj, page, pageSize);
54
+ res.send({
55
+ items,
56
+ count,
57
+ pages: Math.ceil(count / pageSize)
58
+ });
59
+ }
60
+ async getJob(req, res) {
61
+ const jobId = req.local.id;
62
+ const job = await this.printJobService.getJobByIdOrFail(jobId, [
63
+ 'printer'
64
+ ]);
65
+ try {
66
+ let thumbnailCount = 0;
67
+ if (job.fileStorageId) {
68
+ const thumbnails = await this.fileStorageService.listThumbnails(job.fileStorageId);
69
+ thumbnailCount = thumbnails.length;
70
+ }
71
+ res.send({
72
+ ...job,
73
+ thumbnailCount,
74
+ thumbnailsUrl: thumbnailCount > 0 ? `/api/print-jobs/${jobId}/thumbnails` : null
75
+ });
76
+ } catch (error) {
77
+ this.logger.error(`Failed to get job ${jobId}: ${error}`);
78
+ res.status(500).send({
79
+ error: "Failed to get job"
80
+ });
81
+ }
82
+ }
83
+ async setCompleted(req, res) {
84
+ const jobId = req.local.id;
85
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
86
+ try {
87
+ if (job.status !== "UNKNOWN") {
88
+ res.status(400).send({
89
+ error: "Can only mark UNKNOWN jobs as completed",
90
+ currentStatus: job.status,
91
+ suggestion: "This endpoint is for resolving jobs with unknown state"
92
+ });
93
+ return;
94
+ }
95
+ this.logger.log(`Manually marking job ${jobId} as COMPLETED (was UNKNOWN)`);
96
+ job.status = "COMPLETED";
97
+ job.endedAt = new Date();
98
+ job.progress = 100;
99
+ job.statusReason = "Manually marked as completed by user";
100
+ if (job.statistics) {
101
+ job.statistics.endedAt = job.endedAt;
102
+ job.statistics.progress = 100;
103
+ } else {
104
+ job.statistics = {
105
+ startedAt: job.startedAt,
106
+ endedAt: job.endedAt,
107
+ actualPrintTimeSeconds: null,
108
+ progress: 100
109
+ };
110
+ }
111
+ await this.printJobService.printJobRepository.save(job);
112
+ this.logger.log(`Job ${jobId} marked as COMPLETED`);
113
+ res.send({
114
+ message: "Job marked as completed",
115
+ jobId,
116
+ previousStatus: "UNKNOWN",
117
+ newStatus: "COMPLETED"
118
+ });
119
+ } catch (error) {
120
+ this.logger.error(`Failed to mark job ${jobId} as completed: ${error}`);
121
+ res.status(500).send({
122
+ error: "Failed to update job status",
123
+ message: error instanceof Error ? error.message : "Unknown error"
124
+ });
125
+ }
126
+ }
127
+ async setFailed(req, res) {
128
+ const jobId = req.local.id;
129
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
130
+ const previousStatus = job.status;
131
+ if (![
132
+ "UNKNOWN",
133
+ "PRINTING",
134
+ "CANCELLED",
135
+ "COMPLETED"
136
+ ].includes(job.status)) {
137
+ res.status(400).send({
138
+ error: "Can only mark UNKNOWN, PRINTING, CANCELLED, or COMPLETED jobs as failed",
139
+ currentStatus: job.status
140
+ });
141
+ return;
142
+ }
143
+ try {
144
+ this.logger.log(`Manually marking job ${jobId} as FAILED (was ${previousStatus})`);
145
+ const endedAt = new Date();
146
+ const actualTimeSeconds = job.startedAt ? (endedAt.getTime() - job.startedAt.getTime()) / 1000 : null;
147
+ job.status = "FAILED";
148
+ job.endedAt = endedAt;
149
+ job.statusReason = "Manually marked as failed by user";
150
+ if (!job.statistics) {
151
+ job.statistics = {
152
+ startedAt: job.startedAt,
153
+ endedAt,
154
+ actualPrintTimeSeconds: actualTimeSeconds,
155
+ progress: job.progress,
156
+ failureReason: "Manually marked as failed by user",
157
+ failureTime: endedAt
158
+ };
159
+ } else {
160
+ job.statistics.endedAt = endedAt;
161
+ job.statistics.actualPrintTimeSeconds = actualTimeSeconds;
162
+ job.statistics.failureReason = "Manually marked as failed by user";
163
+ job.statistics.failureTime = endedAt;
164
+ }
165
+ await this.printJobService.printJobRepository.save(job);
166
+ this.logger.log(`Job ${jobId} marked as FAILED`);
167
+ res.send({
168
+ message: "Job marked as failed",
169
+ jobId,
170
+ previousStatus,
171
+ newStatus: "FAILED"
172
+ });
173
+ } catch (error) {
174
+ this.logger.error(`Failed to mark job ${jobId} as failed: ${error}`);
175
+ res.status(500).send({
176
+ error: "Failed to update job status",
177
+ message: error instanceof Error ? error.message : "Unknown error"
178
+ });
179
+ }
180
+ }
181
+ async setCancelled(req, res) {
182
+ const jobId = req.local.id;
183
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
184
+ const previousStatus = job.status;
185
+ if (![
186
+ "UNKNOWN",
187
+ "PRINTING",
188
+ "PAUSED"
189
+ ].includes(job.status)) {
190
+ res.status(400).send({
191
+ error: "Can only mark UNKNOWN, PRINTING, or PAUSED jobs as cancelled",
192
+ currentStatus: job.status
193
+ });
194
+ return;
195
+ }
196
+ try {
197
+ this.logger.log(`Manually marking job ${jobId} as CANCELLED (was ${previousStatus})`);
198
+ const endedAt = new Date();
199
+ const actualTimeSeconds = job.startedAt ? (endedAt.getTime() - job.startedAt.getTime()) / 1000 : null;
200
+ job.status = "CANCELLED";
201
+ job.endedAt = endedAt;
202
+ job.statusReason = "Manually marked as cancelled by user";
203
+ if (!job.statistics) {
204
+ job.statistics = {
205
+ startedAt: job.startedAt,
206
+ endedAt,
207
+ actualPrintTimeSeconds: actualTimeSeconds,
208
+ progress: job.progress
209
+ };
210
+ } else {
211
+ job.statistics.endedAt = endedAt;
212
+ job.statistics.actualPrintTimeSeconds = actualTimeSeconds;
213
+ }
214
+ await this.printJobService.printJobRepository.save(job);
215
+ this.logger.log(`Job ${jobId} marked as CANCELLED`);
216
+ res.send({
217
+ message: "Job marked as cancelled",
218
+ jobId,
219
+ previousStatus,
220
+ newStatus: "CANCELLED"
221
+ });
222
+ } catch (error) {
223
+ this.logger.error(`Failed to mark job ${jobId} as cancelled: ${error}`);
224
+ res.status(500).send({
225
+ error: "Failed to update job status",
226
+ message: error instanceof Error ? error.message : "Unknown error"
227
+ });
228
+ }
229
+ }
230
+ async setUnknown(req, res) {
231
+ const jobId = req.local.id;
232
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
233
+ const previousStatus = job.status;
234
+ if (![
235
+ "PRINTING",
236
+ "PAUSED"
237
+ ].includes(job.status)) {
238
+ res.status(400).send({
239
+ error: "Can only mark PRINTING or PAUSED jobs as unknown",
240
+ currentStatus: job.status,
241
+ suggestion: "This endpoint is for marking jobs with uncertain state (e.g., after connection loss)"
242
+ });
243
+ return;
244
+ }
245
+ try {
246
+ this.logger.log(`Manually marking job ${jobId} as UNKNOWN (was ${previousStatus})`);
247
+ job.status = "UNKNOWN";
248
+ job.statusReason = "Manually marked as unknown by user (state uncertain)";
249
+ await this.printJobService.printJobRepository.save(job);
250
+ this.logger.log(`Job ${jobId} marked as UNKNOWN`);
251
+ res.send({
252
+ message: "Job marked as unknown",
253
+ jobId,
254
+ previousStatus,
255
+ newStatus: "UNKNOWN"
256
+ });
257
+ } catch (error) {
258
+ this.logger.error(`Failed to mark job ${jobId} as unknown: ${error}`);
259
+ res.status(500).send({
260
+ error: "Failed to update job status",
261
+ message: error instanceof Error ? error.message : "Unknown error"
262
+ });
263
+ }
264
+ }
265
+ async reAnalyzeJob(req, res) {
266
+ const jobId = req.local.id;
267
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
268
+ this.logger.log(`Re-analyzing job ${jobId}`);
269
+ try {
270
+ if (!job.fileStorageId) {
271
+ this.logger.log(`Job ${jobId} has no fileStorageId - triggering download and analysis`);
272
+ await this.printJobService.triggerFileAnalysis(jobId);
273
+ res.send({
274
+ message: "File download and analysis triggered (async)",
275
+ jobId,
276
+ status: "pending"
277
+ });
278
+ return;
279
+ }
280
+ const filePath = this.fileStorageService.getFilePath(job.fileStorageId);
281
+ const exists = await this.fileAnalysisService.needsAnalysis(filePath);
282
+ if (!exists) {
283
+ throw new _runtimeexceptions.NotFoundException(`File not found in storage: ${job.fileStorageId}`);
284
+ }
285
+ this.logger.log(`Re-analyzing file for job ${jobId}: ${filePath}`);
286
+ job.analysisState = "ANALYZING";
287
+ await this.printJobService.printJobRepository.save(job);
288
+ const { metadata, thumbnails } = await this.fileAnalysisService.analyzeFile(filePath);
289
+ let thumbnailMetadata = [];
290
+ if (thumbnails && thumbnails.length > 0) {
291
+ thumbnailMetadata = await this.fileStorageService.saveThumbnails(job.fileStorageId, thumbnails);
292
+ this.logger.log(`Saved ${thumbnailMetadata.length} thumbnail(s) for job ${jobId}`);
293
+ }
294
+ await this.printJobService.handleFileAnalyzed(jobId, metadata, thumbnails);
295
+ const fileHash = job.fileHash || undefined;
296
+ await this.fileStorageService.saveMetadata(job.fileStorageId, metadata, fileHash, job.fileName, thumbnailMetadata);
297
+ this.logger.log(`Successfully re-analyzed job ${jobId}`);
298
+ res.send({
299
+ message: "File re-analyzed successfully",
300
+ jobId,
301
+ status: "analyzed",
302
+ metadata,
303
+ thumbnailCount: thumbnails?.length || 0
304
+ });
305
+ } catch (error) {
306
+ this.logger.error(`Failed to re-analyze job ${jobId}: ${error}`);
307
+ res.status(500).send({
308
+ error: "Re-analysis failed",
309
+ message: error instanceof Error ? error.message : "Unknown error"
310
+ });
311
+ }
312
+ }
313
+ async deleteJob(req, res) {
314
+ const jobId = req.local.id;
315
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
316
+ const deleteFileParam = req.query.deleteFile === 'true';
317
+ if (job.status === "PRINTING" || job.status === "PAUSED") {
318
+ res.status(400).send({
319
+ error: "Cannot delete active print job",
320
+ status: job.status,
321
+ suggestion: "Wait for print to complete or cancel it first"
322
+ });
323
+ return;
324
+ }
325
+ try {
326
+ const fileStorageId = job.fileStorageId;
327
+ const fileName = job.fileName;
328
+ await this.printJobService.printJobRepository.remove(job);
329
+ this.logger.log(`Deleted job ${jobId}: ${fileName}`);
330
+ if (fileStorageId && deleteFileParam) {
331
+ const otherJobs = await this.printJobService.printJobRepository.count({
332
+ where: {
333
+ fileStorageId
334
+ }
335
+ });
336
+ if (otherJobs === 0) {
337
+ try {
338
+ await this.fileStorageService.deleteFile(fileStorageId);
339
+ this.logger.log(`Deleted file as requested: ${fileStorageId}`);
340
+ res.send({
341
+ message: "Job and associated file deleted",
342
+ jobId,
343
+ fileDeleted: true
344
+ });
345
+ } catch (error) {
346
+ this.logger.warn(`Failed to delete file ${fileStorageId}: ${error}`);
347
+ res.send({
348
+ message: "Job deleted, but file deletion failed",
349
+ jobId,
350
+ fileDeleted: false
351
+ });
352
+ }
353
+ } else {
354
+ this.logger.log(`File ${fileStorageId} still referenced by ${otherJobs} other job(s) - keeping file`);
355
+ res.send({
356
+ message: "Job deleted (file kept - still used by other jobs)",
357
+ jobId,
358
+ fileDeleted: false,
359
+ remainingReferences: otherJobs
360
+ });
361
+ }
362
+ } else {
363
+ res.send({
364
+ message: "Job deleted",
365
+ jobId,
366
+ fileDeleted: false
367
+ });
368
+ }
369
+ } catch (error) {
370
+ this.logger.error(`Failed to delete job ${jobId}: ${error}`);
371
+ res.status(500).send({
372
+ error: "Delete failed",
373
+ message: error instanceof Error ? error.message : "Unknown error"
374
+ });
375
+ }
376
+ }
377
+ async getThumbnails(req, res) {
378
+ const jobId = req.local.id;
379
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
380
+ if (!job.fileStorageId) {
381
+ res.send({
382
+ jobId,
383
+ thumbnails: []
384
+ });
385
+ return;
386
+ }
387
+ try {
388
+ const metadata = await this.fileStorageService.loadMetadata(job.fileStorageId);
389
+ const thumbnailMetadata = metadata?._thumbnails || [];
390
+ res.send({
391
+ jobId,
392
+ fileStorageId: job.fileStorageId,
393
+ thumbnails: thumbnailMetadata.map((thumb)=>({
394
+ index: thumb.index,
395
+ url: `/api/print-jobs/${jobId}/thumbnails/${thumb.index}`,
396
+ filename: thumb.filename,
397
+ width: thumb.width,
398
+ height: thumb.height,
399
+ format: thumb.format,
400
+ size: thumb.size
401
+ }))
402
+ });
403
+ } catch (error) {
404
+ this.logger.error(`Failed to get thumbnails for job ${jobId}: ${error}`);
405
+ res.status(500).send({
406
+ error: "Failed to get thumbnails"
407
+ });
408
+ }
409
+ }
410
+ async getThumbnail(req, res) {
411
+ const jobId = req.local.id;
412
+ const index = req.local.index;
413
+ const job = await this.printJobService.getJobByIdOrFail(jobId);
414
+ if (!job.fileStorageId) {
415
+ throw new _runtimeexceptions.NotFoundException("Job has no stored file");
416
+ }
417
+ try {
418
+ const thumbnail = await this.fileStorageService.getThumbnail(job.fileStorageId, index);
419
+ if (!thumbnail) {
420
+ throw new _runtimeexceptions.NotFoundException(`Thumbnail ${index} not found`);
421
+ }
422
+ const isPNG = thumbnail[0] === 0x89 && thumbnail[1] === 0x50 && thumbnail[2] === 0x4E && thumbnail[3] === 0x47;
423
+ const isJPG = thumbnail[0] === 0xFF && thumbnail[1] === 0xD8;
424
+ const isQOI = thumbnail[0] === 0x71 && thumbnail[1] === 0x6F && thumbnail[2] === 0x69 && thumbnail[3] === 0x66;
425
+ let contentType = 'image/png';
426
+ if (isPNG) contentType = 'image/png';
427
+ else if (isJPG) contentType = 'image/jpeg';
428
+ else if (isQOI) contentType = 'image/qoi';
429
+ res.setHeader('Content-Type', contentType);
430
+ res.setHeader('Cache-Control', 'public, max-age=3600');
431
+ res.setHeader('ETag', `"${job.fileStorageId}-${index}"`);
432
+ res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
433
+ res.send(thumbnail);
434
+ } catch (error) {
435
+ this.logger.error(`Failed to get thumbnail ${index} for job ${jobId}: ${error}`);
436
+ res.status(500).send({
437
+ error: "Failed to get thumbnail"
438
+ });
439
+ }
440
+ }
441
+ async createJobFromFile(req, res) {
442
+ const { fileStorageId, printerId } = req.body;
443
+ if (!fileStorageId) {
444
+ res.status(400).send({
445
+ error: "fileStorageId is required"
446
+ });
447
+ return;
448
+ }
449
+ if (!printerId) {
450
+ res.status(400).send({
451
+ error: "printerId is required"
452
+ });
453
+ return;
454
+ }
455
+ try {
456
+ const fileExists = await this.fileStorageService.fileExists(fileStorageId);
457
+ if (!fileExists) {
458
+ throw new _runtimeexceptions.NotFoundException("File not found in storage");
459
+ }
460
+ const metadata = await this.fileStorageService.loadMetadata(fileStorageId);
461
+ if (!metadata) {
462
+ res.status(400).send({
463
+ error: "File has no metadata. Please analyze the file first."
464
+ });
465
+ return;
466
+ }
467
+ const printerName = `Printer ${printerId}`;
468
+ const job = await this.printJobService.createPendingJob(printerId, metadata._originalFileName || metadata.fileName || "Unknown", metadata, printerName);
469
+ job.fileStorageId = fileStorageId;
470
+ job.fileHash = metadata._fileHash;
471
+ job.analysisState = "ANALYZED";
472
+ job.analyzedAt = new Date();
473
+ if (metadata.fileFormat) {
474
+ job.fileFormat = metadata.fileFormat;
475
+ }
476
+ await this.printJobService.printJobRepository.save(job);
477
+ this.logger.log(`Created job ${job.id} from file storage ${fileStorageId} for printer ${printerId}`);
478
+ res.send({
479
+ id: job.id,
480
+ printerId: job.printerId,
481
+ printerName: job.printerName,
482
+ fileName: job.fileName,
483
+ fileStorageId: job.fileStorageId,
484
+ status: job.status,
485
+ analysisState: job.analysisState,
486
+ createdAt: job.createdAt
487
+ });
488
+ } catch (error) {
489
+ this.logger.error(`Failed to create job from file ${fileStorageId}: ${error}`);
490
+ res.status(500).send({
491
+ error: "Failed to create job from file"
492
+ });
493
+ }
494
+ }
495
+ toEndOfDay(date) {
496
+ const endOfDay = new Date(date);
497
+ endOfDay.setHours(23, 59, 59, 999);
498
+ return endOfDay;
499
+ }
500
+ }
501
+ _ts_decorate([
502
+ (0, _awilixexpress.GET)(),
503
+ (0, _awilixexpress.route)("/search"),
504
+ _ts_metadata("design:type", Function),
505
+ _ts_metadata("design:paramtypes", [
506
+ typeof _express.Request === "undefined" ? Object : _express.Request,
507
+ typeof _express.Response === "undefined" ? Object : _express.Response
508
+ ]),
509
+ _ts_metadata("design:returntype", Promise)
510
+ ], PrintJobController.prototype, "searchJobs", null);
511
+ _ts_decorate([
512
+ (0, _awilixexpress.GET)(),
513
+ (0, _awilixexpress.route)("/search-paged"),
514
+ _ts_metadata("design:type", Function),
515
+ _ts_metadata("design:paramtypes", [
516
+ typeof _express.Request === "undefined" ? Object : _express.Request,
517
+ typeof _express.Response === "undefined" ? Object : _express.Response
518
+ ]),
519
+ _ts_metadata("design:returntype", Promise)
520
+ ], PrintJobController.prototype, "searchJobsPaged", null);
521
+ _ts_decorate([
522
+ (0, _awilixexpress.GET)(),
523
+ (0, _awilixexpress.route)("/:id"),
524
+ (0, _awilixexpress.before)([
525
+ (0, _paramconvertermiddleware.ParamId)("id")
526
+ ]),
527
+ _ts_metadata("design:type", Function),
528
+ _ts_metadata("design:paramtypes", [
529
+ typeof _express.Request === "undefined" ? Object : _express.Request,
530
+ typeof _express.Response === "undefined" ? Object : _express.Response
531
+ ]),
532
+ _ts_metadata("design:returntype", Promise)
533
+ ], PrintJobController.prototype, "getJob", null);
534
+ _ts_decorate([
535
+ (0, _awilixexpress.POST)(),
536
+ (0, _awilixexpress.route)("/:id/set-completed"),
537
+ (0, _awilixexpress.before)([
538
+ (0, _paramconvertermiddleware.ParamId)("id")
539
+ ]),
540
+ _ts_metadata("design:type", Function),
541
+ _ts_metadata("design:paramtypes", [
542
+ typeof _express.Request === "undefined" ? Object : _express.Request,
543
+ typeof _express.Response === "undefined" ? Object : _express.Response
544
+ ]),
545
+ _ts_metadata("design:returntype", Promise)
546
+ ], PrintJobController.prototype, "setCompleted", null);
547
+ _ts_decorate([
548
+ (0, _awilixexpress.POST)(),
549
+ (0, _awilixexpress.route)("/:id/set-failed"),
550
+ (0, _awilixexpress.before)([
551
+ (0, _paramconvertermiddleware.ParamId)("id")
552
+ ]),
553
+ _ts_metadata("design:type", Function),
554
+ _ts_metadata("design:paramtypes", [
555
+ typeof _express.Request === "undefined" ? Object : _express.Request,
556
+ typeof _express.Response === "undefined" ? Object : _express.Response
557
+ ]),
558
+ _ts_metadata("design:returntype", Promise)
559
+ ], PrintJobController.prototype, "setFailed", null);
560
+ _ts_decorate([
561
+ (0, _awilixexpress.POST)(),
562
+ (0, _awilixexpress.route)("/:id/set-cancelled"),
563
+ (0, _awilixexpress.before)([
564
+ (0, _paramconvertermiddleware.ParamId)("id")
565
+ ]),
566
+ _ts_metadata("design:type", Function),
567
+ _ts_metadata("design:paramtypes", [
568
+ typeof _express.Request === "undefined" ? Object : _express.Request,
569
+ typeof _express.Response === "undefined" ? Object : _express.Response
570
+ ]),
571
+ _ts_metadata("design:returntype", Promise)
572
+ ], PrintJobController.prototype, "setCancelled", null);
573
+ _ts_decorate([
574
+ (0, _awilixexpress.POST)(),
575
+ (0, _awilixexpress.route)("/:id/set-unknown"),
576
+ (0, _awilixexpress.before)([
577
+ (0, _paramconvertermiddleware.ParamId)("id")
578
+ ]),
579
+ _ts_metadata("design:type", Function),
580
+ _ts_metadata("design:paramtypes", [
581
+ typeof _express.Request === "undefined" ? Object : _express.Request,
582
+ typeof _express.Response === "undefined" ? Object : _express.Response
583
+ ]),
584
+ _ts_metadata("design:returntype", Promise)
585
+ ], PrintJobController.prototype, "setUnknown", null);
586
+ _ts_decorate([
587
+ (0, _awilixexpress.POST)(),
588
+ (0, _awilixexpress.route)("/:id/re-analyze"),
589
+ (0, _awilixexpress.before)([
590
+ (0, _paramconvertermiddleware.ParamId)("id")
591
+ ]),
592
+ _ts_metadata("design:type", Function),
593
+ _ts_metadata("design:paramtypes", [
594
+ typeof _express.Request === "undefined" ? Object : _express.Request,
595
+ typeof _express.Response === "undefined" ? Object : _express.Response
596
+ ]),
597
+ _ts_metadata("design:returntype", Promise)
598
+ ], PrintJobController.prototype, "reAnalyzeJob", null);
599
+ _ts_decorate([
600
+ (0, _awilixexpress.DELETE)(),
601
+ (0, _awilixexpress.route)("/:id"),
602
+ (0, _awilixexpress.before)([
603
+ (0, _paramconvertermiddleware.ParamId)("id")
604
+ ]),
605
+ _ts_metadata("design:type", Function),
606
+ _ts_metadata("design:paramtypes", [
607
+ typeof _express.Request === "undefined" ? Object : _express.Request,
608
+ typeof _express.Response === "undefined" ? Object : _express.Response
609
+ ]),
610
+ _ts_metadata("design:returntype", Promise)
611
+ ], PrintJobController.prototype, "deleteJob", null);
612
+ _ts_decorate([
613
+ (0, _awilixexpress.GET)(),
614
+ (0, _awilixexpress.route)("/:id/thumbnails"),
615
+ (0, _awilixexpress.before)([
616
+ (0, _paramconvertermiddleware.ParamId)("id")
617
+ ]),
618
+ _ts_metadata("design:type", Function),
619
+ _ts_metadata("design:paramtypes", [
620
+ typeof _express.Request === "undefined" ? Object : _express.Request,
621
+ typeof _express.Response === "undefined" ? Object : _express.Response
622
+ ]),
623
+ _ts_metadata("design:returntype", Promise)
624
+ ], PrintJobController.prototype, "getThumbnails", null);
625
+ _ts_decorate([
626
+ (0, _awilixexpress.GET)(),
627
+ (0, _awilixexpress.route)("/:id/thumbnails/:index"),
628
+ (0, _awilixexpress.before)([
629
+ (0, _paramconvertermiddleware.ParamId)("id"),
630
+ (0, _paramconvertermiddleware.ParamInt)("index")
631
+ ]),
632
+ _ts_metadata("design:type", Function),
633
+ _ts_metadata("design:paramtypes", [
634
+ typeof _express.Request === "undefined" ? Object : _express.Request,
635
+ typeof _express.Response === "undefined" ? Object : _express.Response
636
+ ]),
637
+ _ts_metadata("design:returntype", Promise)
638
+ ], PrintJobController.prototype, "getThumbnail", null);
639
+ _ts_decorate([
640
+ (0, _awilixexpress.POST)(),
641
+ (0, _awilixexpress.route)("/from-file"),
642
+ _ts_metadata("design:type", Function),
643
+ _ts_metadata("design:paramtypes", [
644
+ typeof _express.Request === "undefined" ? Object : _express.Request,
645
+ typeof _express.Response === "undefined" ? Object : _express.Response
646
+ ]),
647
+ _ts_metadata("design:returntype", Promise)
648
+ ], PrintJobController.prototype, "createJobFromFile", null);
649
+ PrintJobController = _ts_decorate([
650
+ (0, _awilixexpress.route)(_serverconstants.AppConstants.apiRoute + "/print-jobs"),
651
+ (0, _awilixexpress.before)([
652
+ (0, _authenticate.authenticate)(),
653
+ (0, _authenticate.authorizeRoles)([
654
+ _authorizationconstants.ROLES.ADMIN
655
+ ])
656
+ ]),
657
+ _ts_metadata("design:type", Function),
658
+ _ts_metadata("design:paramtypes", [
659
+ typeof _loggerfactory.ILoggerFactory === "undefined" ? Object : _loggerfactory.ILoggerFactory,
660
+ typeof _printjobservice.PrintJobService === "undefined" ? Object : _printjobservice.PrintJobService,
661
+ typeof _fileanalysisservice.FileAnalysisService === "undefined" ? Object : _fileanalysisservice.FileAnalysisService,
662
+ typeof _filestorageservice.FileStorageService === "undefined" ? Object : _filestorageservice.FileStorageService
663
+ ])
664
+ ], PrintJobController);
665
+
666
+ //# sourceMappingURL=print-job.controller.js.map