@fdm-monster/server 1.8.3 → 1.9.0-rc1

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 (439) hide show
  1. package/.env.template +5 -3
  2. package/.gitattributes +4 -2
  3. package/.yarn/install-state.gz +0 -0
  4. package/.yarn/releases/yarn-4.9.1.cjs +948 -0
  5. package/.yarnrc.yml +1 -1
  6. package/README.md +25 -26
  7. package/RELEASE_NOTES.MD +50 -1
  8. package/biome.json +33 -0
  9. package/dist/consoles/download-github-releases.js.map +1 -1
  10. package/dist/consoles/launch-http-servers.js +31 -0
  11. package/dist/consoles/launch-http-servers.js.map +1 -0
  12. package/dist/consoles/mock-octoprint.server.js +291 -0
  13. package/dist/consoles/mock-octoprint.server.js.map +1 -0
  14. package/dist/consoles/mock-prusalink.server.js +57 -0
  15. package/dist/consoles/mock-prusalink.server.js.map +1 -0
  16. package/dist/consoles/utils/api-messages.js +856 -0
  17. package/dist/consoles/utils/api-messages.js.map +1 -0
  18. package/dist/consoles/utils/delayed-memory.storage.js +42 -0
  19. package/dist/consoles/utils/delayed-memory.storage.js.map +1 -0
  20. package/dist/consoles/utils/ws-messages.js +88 -0
  21. package/dist/consoles/utils/ws-messages.js.map +1 -0
  22. package/dist/constants/event.constants.js +5 -21
  23. package/dist/constants/event.constants.js.map +1 -1
  24. package/dist/constants/server-settings.constants.js +6 -11
  25. package/dist/constants/server-settings.constants.js.map +1 -1
  26. package/dist/container.js +13 -14
  27. package/dist/container.js.map +1 -1
  28. package/dist/container.tokens.js +3 -4
  29. package/dist/container.tokens.js.map +1 -1
  30. package/dist/controllers/auth.controller.js +114 -24
  31. package/dist/controllers/auth.controller.js.map +1 -1
  32. package/dist/controllers/batch-call.controller.js +95 -24
  33. package/dist/controllers/batch-call.controller.js.map +1 -1
  34. package/dist/controllers/camera-stream.controller.js +16 -12
  35. package/dist/controllers/camera-stream.controller.js.map +1 -1
  36. package/dist/controllers/custom-gcode.controller.js +116 -40
  37. package/dist/controllers/custom-gcode.controller.js.map +1 -1
  38. package/dist/controllers/dto/update-client-dist.dto.js +0 -21
  39. package/dist/controllers/dto/update-client-dist.dto.js.map +1 -1
  40. package/dist/controllers/first-time-setup.controller.js +54 -18
  41. package/dist/controllers/first-time-setup.controller.js.map +1 -1
  42. package/dist/controllers/floor.controller.js +154 -43
  43. package/dist/controllers/floor.controller.js.map +1 -1
  44. package/dist/controllers/metrics.controller.js +56 -0
  45. package/dist/controllers/metrics.controller.js.map +1 -0
  46. package/dist/controllers/print-completion.controller.js +81 -18
  47. package/dist/controllers/print-completion.controller.js.map +1 -1
  48. package/dist/controllers/printer-files.controller.js +42 -28
  49. package/dist/controllers/printer-files.controller.js.map +1 -1
  50. package/dist/controllers/printer-group.controller.js +123 -33
  51. package/dist/controllers/printer-group.controller.js.map +1 -1
  52. package/dist/controllers/printer-settings.controller.js +73 -26
  53. package/dist/controllers/printer-settings.controller.js.map +1 -1
  54. package/dist/controllers/printer.controller.js +57 -198
  55. package/dist/controllers/printer.controller.js.map +1 -1
  56. package/dist/controllers/server-private.controller.js +153 -39
  57. package/dist/controllers/server-private.controller.js.map +1 -1
  58. package/dist/controllers/server-public.controller.js +79 -84
  59. package/dist/controllers/server-public.controller.js.map +1 -1
  60. package/dist/controllers/settings.controller.js +222 -79
  61. package/dist/controllers/settings.controller.js.map +1 -1
  62. package/dist/controllers/user.controller.js +67 -57
  63. package/dist/controllers/user.controller.js.map +1 -1
  64. package/dist/controllers/validation/auth-controller.validation.js +6 -5
  65. package/dist/controllers/validation/auth-controller.validation.js.map +1 -1
  66. package/dist/controllers/validation/batch-controller.validation.js +17 -18
  67. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  68. package/dist/controllers/validation/generic.validation.js +8 -3
  69. package/dist/controllers/validation/generic.validation.js.map +1 -1
  70. package/dist/controllers/validation/printer-completion-controller.validation.js +16 -0
  71. package/dist/controllers/validation/printer-completion-controller.validation.js.map +1 -0
  72. package/dist/controllers/validation/printer-controller.validation.js +31 -50
  73. package/dist/controllers/validation/printer-controller.validation.js.map +1 -1
  74. package/dist/controllers/validation/printer-files-controller.validation.js +16 -15
  75. package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
  76. package/dist/controllers/validation/printer-settings-controller.validation.js +6 -5
  77. package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -1
  78. package/dist/controllers/validation/server-private.validation.js +17 -0
  79. package/dist/controllers/validation/server-private.validation.js.map +1 -0
  80. package/dist/controllers/validation/setting.validation.js +28 -10
  81. package/dist/controllers/validation/setting.validation.js.map +1 -1
  82. package/dist/controllers/validation/user-controller.validation.js +44 -13
  83. package/dist/controllers/validation/user-controller.validation.js.map +1 -1
  84. package/dist/data-source.js +10 -6
  85. package/dist/data-source.js.map +1 -1
  86. package/dist/entities/camera-stream.entity.js +2 -3
  87. package/dist/entities/camera-stream.entity.js.map +1 -1
  88. package/dist/entities/custom-gcode.entity.js +1 -2
  89. package/dist/entities/custom-gcode.entity.js.map +1 -1
  90. package/dist/entities/floor-position.entity.js.map +1 -1
  91. package/dist/entities/floor.entity.js +1 -2
  92. package/dist/entities/floor.entity.js.map +1 -1
  93. package/dist/entities/group.entity.js +6 -2
  94. package/dist/entities/group.entity.js.map +1 -1
  95. package/dist/entities/permission.entity.js +1 -2
  96. package/dist/entities/permission.entity.js.map +1 -1
  97. package/dist/entities/print-completion.entity.js +1 -2
  98. package/dist/entities/print-completion.entity.js.map +1 -1
  99. package/dist/entities/printer-group.entity.js +6 -2
  100. package/dist/entities/printer-group.entity.js.map +1 -1
  101. package/dist/entities/printer.entity.js +22 -4
  102. package/dist/entities/printer.entity.js.map +1 -1
  103. package/dist/entities/refresh-token.entity.js +1 -2
  104. package/dist/entities/refresh-token.entity.js.map +1 -1
  105. package/dist/entities/role.entity.js +1 -2
  106. package/dist/entities/role.entity.js.map +1 -1
  107. package/dist/entities/settings.entity.js +1 -2
  108. package/dist/entities/settings.entity.js.map +1 -1
  109. package/dist/entities/user-role.entity.js +1 -2
  110. package/dist/entities/user-role.entity.js.map +1 -1
  111. package/dist/entities/user.entity.js +1 -2
  112. package/dist/entities/user.entity.js.map +1 -1
  113. package/dist/exceptions/runtime.exceptions.js.map +1 -1
  114. package/dist/handlers/logger.js +131 -36
  115. package/dist/handlers/logger.js.map +1 -1
  116. package/dist/handlers/validators.js +7 -116
  117. package/dist/handlers/validators.js.map +1 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/middleware/authenticate.js +11 -22
  120. package/dist/middleware/authenticate.js.map +1 -1
  121. package/dist/middleware/database.js.map +1 -1
  122. package/dist/middleware/demo.middleware.js +4 -17
  123. package/dist/middleware/demo.middleware.js.map +1 -1
  124. package/dist/middleware/exception.filter.js +23 -23
  125. package/dist/middleware/exception.filter.js.map +1 -1
  126. package/dist/middleware/global.middleware.js +4 -4
  127. package/dist/middleware/global.middleware.js.map +1 -1
  128. package/dist/middleware/param-converter.middleware.js +81 -0
  129. package/dist/middleware/param-converter.middleware.js.map +1 -0
  130. package/dist/middleware/passport.js +3 -5
  131. package/dist/middleware/passport.js.map +1 -1
  132. package/dist/middleware/printer-resolver.js +37 -0
  133. package/dist/middleware/printer-resolver.js.map +1 -0
  134. package/dist/middleware/printer.js +22 -10
  135. package/dist/middleware/printer.js.map +1 -1
  136. package/dist/middleware/socketio.middleware.js +27 -0
  137. package/dist/middleware/socketio.middleware.js.map +1 -0
  138. package/dist/migrations/1706829146617-InitSqlite.js +1 -1
  139. package/dist/migrations/1706829146617-InitSqlite.js.map +1 -1
  140. package/dist/migrations/1707494762198-PrinterGroup.js +1 -1
  141. package/dist/migrations/1707494762198-PrinterGroup.js.map +1 -1
  142. package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js +1 -1
  143. package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js.map +1 -1
  144. package/dist/migrations/1713897879622-AddPrinterType.js +1 -1
  145. package/dist/migrations/1713897879622-AddPrinterType.js.map +1 -1
  146. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +229 -0
  147. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -0
  148. package/dist/models/Auth/Permission.js.map +1 -1
  149. package/dist/models/Auth/RefreshToken.js +1 -1
  150. package/dist/models/Auth/RefreshToken.js.map +1 -1
  151. package/dist/models/Auth/Role.js.map +1 -1
  152. package/dist/models/Auth/User.js.map +1 -1
  153. package/dist/models/CameraStream.js +20 -0
  154. package/dist/models/CameraStream.js.map +1 -1
  155. package/dist/models/CustomGcode.js.map +1 -1
  156. package/dist/models/Floor.js.map +1 -1
  157. package/dist/models/FloorPrinter.js +10 -1
  158. package/dist/models/FloorPrinter.js.map +1 -1
  159. package/dist/models/PrintCompletion.js.map +1 -1
  160. package/dist/models/Printer.js +12 -5
  161. package/dist/models/Printer.js.map +1 -1
  162. package/dist/models/Settings.js +5 -42
  163. package/dist/models/Settings.js.map +1 -1
  164. package/dist/models/index.js +0 -4
  165. package/dist/models/index.js.map +1 -1
  166. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -1
  167. package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -1
  168. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -1
  169. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -1
  170. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -1
  171. package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -1
  172. package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +1 -1
  173. package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +1 -1
  174. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +1 -1
  175. package/dist/server.constants.js +7 -4
  176. package/dist/server.constants.js.map +1 -1
  177. package/dist/server.core.js +29 -2
  178. package/dist/server.core.js.map +1 -1
  179. package/dist/server.env.js +13 -8
  180. package/dist/server.env.js.map +1 -1
  181. package/dist/server.host.js +24 -33
  182. package/dist/server.host.js.map +1 -1
  183. package/dist/services/authentication/auth.service.js +15 -20
  184. package/dist/services/authentication/auth.service.js.map +1 -1
  185. package/dist/services/authentication/jwt.service.js +1 -1
  186. package/dist/services/authentication/jwt.service.js.map +1 -1
  187. package/dist/services/core/batch-call.service.js +23 -25
  188. package/dist/services/core/batch-call.service.js.map +1 -1
  189. package/dist/services/core/client-bundle.service.js +78 -136
  190. package/dist/services/core/client-bundle.service.js.map +1 -1
  191. package/dist/services/core/config.service.js.map +1 -1
  192. package/dist/services/core/cradle.service.js +21 -0
  193. package/dist/services/core/cradle.service.js.map +1 -0
  194. package/dist/services/core/github.service.js +2 -2
  195. package/dist/services/core/github.service.js.map +1 -1
  196. package/dist/services/core/http-client.factory.js +1 -1
  197. package/dist/services/core/http-client.factory.js.map +1 -1
  198. package/dist/services/core/logs-manager.service.js +3 -3
  199. package/dist/services/core/logs-manager.service.js.map +1 -1
  200. package/dist/services/core/monsterpi.service.js +1 -1
  201. package/dist/services/core/monsterpi.service.js.map +1 -1
  202. package/dist/services/core/multer.service.js +8 -7
  203. package/dist/services/core/multer.service.js.map +1 -1
  204. package/dist/services/core/server-release.service.js +14 -8
  205. package/dist/services/core/server-release.service.js.map +1 -1
  206. package/dist/services/core/yaml.service.js +16 -17
  207. package/dist/services/core/yaml.service.js.map +1 -1
  208. package/dist/services/interfaces/camera-stream.dto.js +4 -34
  209. package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
  210. package/dist/services/interfaces/custom-gcode.dto.js.map +1 -1
  211. package/dist/services/interfaces/floor.dto.js +5 -47
  212. package/dist/services/interfaces/floor.dto.js.map +1 -1
  213. package/dist/services/interfaces/login.dto.js +2 -0
  214. package/dist/services/interfaces/login.dto.js.map +1 -1
  215. package/dist/services/interfaces/print-completion.dto.js.map +1 -1
  216. package/dist/services/interfaces/printer-group.dto.js +0 -14
  217. package/dist/services/interfaces/printer-group.dto.js.map +1 -1
  218. package/dist/services/interfaces/printer.dto.js +11 -11
  219. package/dist/services/interfaces/printer.dto.js.map +1 -1
  220. package/dist/services/interfaces/settings.dto.js.map +1 -1
  221. package/dist/services/interfaces/task.interfaces.js +6 -0
  222. package/dist/services/interfaces/task.interfaces.js.map +1 -0
  223. package/dist/services/mongoose/camera-stream.service.js +17 -15
  224. package/dist/services/mongoose/camera-stream.service.js.map +1 -1
  225. package/dist/services/mongoose/custom-gcode.service.js +4 -2
  226. package/dist/services/mongoose/custom-gcode.service.js.map +1 -1
  227. package/dist/services/mongoose/floor.service.js +37 -30
  228. package/dist/services/mongoose/floor.service.js.map +1 -1
  229. package/dist/services/mongoose/permission.service.js +1 -1
  230. package/dist/services/mongoose/permission.service.js.map +1 -1
  231. package/dist/services/mongoose/print-completion.service.js +2 -2
  232. package/dist/services/mongoose/print-completion.service.js.map +1 -1
  233. package/dist/services/mongoose/print-completion.shared.js +2 -2
  234. package/dist/services/mongoose/print-completion.shared.js.map +1 -1
  235. package/dist/services/mongoose/printer.service.js +33 -45
  236. package/dist/services/mongoose/printer.service.js.map +1 -1
  237. package/dist/services/mongoose/refresh-token.service.js +5 -8
  238. package/dist/services/mongoose/refresh-token.service.js.map +1 -1
  239. package/dist/services/mongoose/role.service.js +14 -5
  240. package/dist/services/mongoose/role.service.js.map +1 -1
  241. package/dist/services/mongoose/settings.service.js +35 -62
  242. package/dist/services/mongoose/settings.service.js.map +1 -1
  243. package/dist/services/mongoose/user.service.js +8 -7
  244. package/dist/services/mongoose/user.service.js.map +1 -1
  245. package/dist/services/moonraker/constants/{websocket.constants.js → moonraker.constants.js} +1 -1
  246. package/dist/services/moonraker/constants/{websocket.constants.js.map → moonraker.constants.js.map} +1 -1
  247. package/dist/services/moonraker/moonraker-websocket.adapter.js +102 -94
  248. package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
  249. package/dist/services/moonraker/moonraker.client.js +19 -14
  250. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  251. package/dist/services/moonraker.api.js +3 -5
  252. package/dist/services/moonraker.api.js.map +1 -1
  253. package/dist/services/octoprint/constants/octoprint-service.constants.js +7 -36
  254. package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -1
  255. package/dist/services/octoprint/constants/octoprint-websocket.constants.js +12 -3
  256. package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -1
  257. package/dist/services/octoprint/dto/octoprint-event.dto.js +2 -1
  258. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  259. package/dist/services/octoprint/octoprint-api.routes.js +0 -37
  260. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  261. package/dist/services/octoprint/octoprint-websocket.adapter.js +66 -72
  262. package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
  263. package/dist/services/octoprint/octoprint.client.js +12 -185
  264. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  265. package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -1
  266. package/dist/services/octoprint.api.js +8 -14
  267. package/dist/services/octoprint.api.js.map +1 -1
  268. package/dist/services/orm/base.service.js +11 -12
  269. package/dist/services/orm/base.service.js.map +1 -1
  270. package/dist/services/orm/camera-stream.service.js +5 -1
  271. package/dist/services/orm/camera-stream.service.js.map +1 -1
  272. package/dist/services/orm/custom-gcode.service.js +2 -2
  273. package/dist/services/orm/custom-gcode.service.js.map +1 -1
  274. package/dist/services/orm/floor-position.service.js +0 -5
  275. package/dist/services/orm/floor-position.service.js.map +1 -1
  276. package/dist/services/orm/floor.service.js +43 -39
  277. package/dist/services/orm/floor.service.js.map +1 -1
  278. package/dist/services/orm/permission.service.js +3 -4
  279. package/dist/services/orm/permission.service.js.map +1 -1
  280. package/dist/services/orm/print-completion.service.js +2 -4
  281. package/dist/services/orm/print-completion.service.js.map +1 -1
  282. package/dist/services/orm/printer-group.service.js +2 -7
  283. package/dist/services/orm/printer-group.service.js.map +1 -1
  284. package/dist/services/orm/printer.service.js +21 -36
  285. package/dist/services/orm/printer.service.js.map +1 -1
  286. package/dist/services/orm/refresh-token.service.js +5 -11
  287. package/dist/services/orm/refresh-token.service.js.map +1 -1
  288. package/dist/services/orm/role.service.js +11 -10
  289. package/dist/services/orm/role.service.js.map +1 -1
  290. package/dist/services/orm/settings.service.js +37 -133
  291. package/dist/services/orm/settings.service.js.map +1 -1
  292. package/dist/services/orm/user.service.js +13 -15
  293. package/dist/services/orm/user.service.js.map +1 -1
  294. package/dist/services/printer-api.factory.js +9 -6
  295. package/dist/services/printer-api.factory.js.map +1 -1
  296. package/dist/services/printer-api.interface.js +13 -6
  297. package/dist/services/printer-api.interface.js.map +1 -1
  298. package/dist/services/prusa-link/constants/prusalink-event.dto.js +18 -0
  299. package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -0
  300. package/dist/services/prusa-link/constants/prusalink.constants.js +13 -0
  301. package/dist/services/prusa-link/constants/prusalink.constants.js.map +1 -0
  302. package/dist/services/prusa-link/dto/file-response.dto.js +6 -0
  303. package/dist/services/prusa-link/dto/file-response.dto.js.map +1 -0
  304. package/dist/services/{octoprint/dto/plugin.dto.js → prusa-link/dto/file.dto.js} +1 -1
  305. package/dist/services/prusa-link/dto/file.dto.js.map +1 -0
  306. package/dist/services/prusa-link/dto/job-state.dto.js +6 -0
  307. package/dist/services/prusa-link/dto/job-state.dto.js.map +1 -0
  308. package/dist/services/prusa-link/dto/printer-state.dto.js +6 -0
  309. package/dist/services/prusa-link/dto/printer-state.dto.js.map +1 -0
  310. package/dist/services/prusa-link/dto/status.dto.js +6 -0
  311. package/dist/services/prusa-link/dto/status.dto.js.map +1 -0
  312. package/dist/services/prusa-link/dto/version.dto.js +6 -0
  313. package/dist/services/prusa-link/dto/version.dto.js.map +1 -0
  314. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +142 -0
  315. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -0
  316. package/dist/services/prusa-link/prusa-link.api.js +233 -0
  317. package/dist/services/prusa-link/prusa-link.api.js.map +1 -0
  318. package/dist/services/prusa-link/utils/digest-auth.params.js +6 -0
  319. package/dist/services/prusa-link/utils/digest-auth.params.js.map +1 -0
  320. package/dist/services/prusa-link/utils/digest-auth.util.js +28 -0
  321. package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -0
  322. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +131 -0
  323. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -0
  324. package/dist/services/socket.factory.js +9 -6
  325. package/dist/services/socket.factory.js.map +1 -1
  326. package/dist/services/{core/task-manager.service.js → task-manager.service.js} +72 -78
  327. package/dist/services/task-manager.service.js.map +1 -0
  328. package/dist/services/validators/camera-service.validation.js +19 -0
  329. package/dist/services/validators/camera-service.validation.js.map +1 -0
  330. package/dist/services/validators/floor-service.validation.js +47 -36
  331. package/dist/services/validators/floor-service.validation.js.map +1 -1
  332. package/dist/services/validators/print-completion-service.validation.js +22 -9
  333. package/dist/services/validators/print-completion-service.validation.js.map +1 -1
  334. package/dist/services/validators/printer-service.validation.js +112 -29
  335. package/dist/services/validators/printer-service.validation.js.map +1 -1
  336. package/dist/services/validators/settings-service.validation.js +78 -66
  337. package/dist/services/validators/settings-service.validation.js.map +1 -1
  338. package/dist/services/validators/user-service.validation.js +17 -16
  339. package/dist/services/validators/user-service.validation.js.map +1 -1
  340. package/dist/services/validators/yaml-service.validation.js +94 -51
  341. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  342. package/dist/shared/default-http-client.builder.js.map +1 -1
  343. package/dist/shared/load-controllers.js +20 -0
  344. package/dist/shared/load-controllers.js.map +1 -0
  345. package/dist/shared/runtime-settings.migration.js +46 -0
  346. package/dist/shared/runtime-settings.migration.js.map +1 -0
  347. package/dist/shared/websocket-rpc-extended.adapter.js +15 -14
  348. package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
  349. package/dist/shared/websocket.adapter.js +4 -5
  350. package/dist/shared/websocket.adapter.js.map +1 -1
  351. package/dist/state/file-upload-tracker.cache.js +5 -4
  352. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  353. package/dist/state/file.cache.js +1 -1
  354. package/dist/state/file.cache.js.map +1 -1
  355. package/dist/state/floor.store.js +6 -6
  356. package/dist/state/floor.store.js.map +1 -1
  357. package/dist/state/printer-events.cache.js +21 -22
  358. package/dist/state/printer-events.cache.js.map +1 -1
  359. package/dist/state/printer-files.store.js +6 -8
  360. package/dist/state/printer-files.store.js.map +1 -1
  361. package/dist/state/printer-socket.store.js +27 -50
  362. package/dist/state/printer-socket.store.js.map +1 -1
  363. package/dist/state/printer-thumbnail.cache.js +5 -9
  364. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  365. package/dist/state/printer.cache.js +14 -12
  366. package/dist/state/printer.cache.js.map +1 -1
  367. package/dist/state/settings.store.js +74 -50
  368. package/dist/state/settings.store.js.map +1 -1
  369. package/dist/state/socket-io.gateway.js +39 -36
  370. package/dist/state/socket-io.gateway.js.map +1 -1
  371. package/dist/state/test-printer-socket.store.js +20 -15
  372. package/dist/state/test-printer-socket.store.js.map +1 -1
  373. package/dist/state/validation/create-test-printer.validation.js +13 -11
  374. package/dist/state/validation/create-test-printer.validation.js.map +1 -1
  375. package/dist/task.presets.js.map +1 -1
  376. package/dist/tasks/boot.task.js +14 -19
  377. package/dist/tasks/boot.task.js.map +1 -1
  378. package/dist/tasks/client-bundle.task.js +1 -3
  379. package/dist/tasks/client-bundle.task.js.map +1 -1
  380. package/dist/tasks/print-completion.socketio.task.js +27 -28
  381. package/dist/tasks/print-completion.socketio.task.js.map +1 -1
  382. package/dist/tasks/printer-file-clean.task.js +6 -10
  383. package/dist/tasks/printer-file-clean.task.js.map +1 -1
  384. package/dist/tasks/printer-websocket-restore.task.js +3 -14
  385. package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
  386. package/dist/tasks/printer-websocket.task.js +2 -14
  387. package/dist/tasks/printer-websocket.task.js.map +1 -1
  388. package/dist/tasks/socketio.task.js +6 -33
  389. package/dist/tasks/socketio.task.js.map +1 -1
  390. package/dist/tasks/software-update.task.js +1 -1
  391. package/dist/tasks/software-update.task.js.map +1 -1
  392. package/dist/tasks.js +3 -3
  393. package/dist/tasks.js.map +1 -1
  394. package/dist/utils/array.util.js.map +1 -1
  395. package/dist/utils/cache/key-diff.cache.js.map +1 -1
  396. package/dist/utils/env.utils.js +0 -2
  397. package/dist/utils/env.utils.js.map +1 -1
  398. package/dist/utils/normalize-url.js +3 -2
  399. package/dist/utils/normalize-url.js.map +1 -1
  400. package/dist/utils/printer-type.utils.js.map +1 -1
  401. package/dist/utils/time.utils.js +7 -17
  402. package/dist/utils/time.utils.js.map +1 -1
  403. package/dist/utils/url.utils.js +3 -4
  404. package/dist/utils/url.utils.js.map +1 -1
  405. package/package.json +44 -47
  406. package/tsconfig.json +2 -1
  407. package/.yarn/releases/yarn-4.7.0.cjs +0 -935
  408. package/dist/consoles/check-ports.js +0 -170
  409. package/dist/consoles/check-ports.js.map +0 -1
  410. package/dist/consoles/http-file-receiver.console.js +0 -81
  411. package/dist/consoles/http-file-receiver.console.js.map +0 -1
  412. package/dist/consoles/sqlite-torm.js +0 -31
  413. package/dist/consoles/sqlite-torm.js.map +0 -1
  414. package/dist/consoles/upload-test.js +0 -52
  415. package/dist/consoles/upload-test.js.map +0 -1
  416. package/dist/controllers/plugin-firmware-update.controller.js +0 -234
  417. package/dist/controllers/plugin-firmware-update.controller.js.map +0 -1
  418. package/dist/entities/base.entity.js +0 -29
  419. package/dist/entities/base.entity.js.map +0 -1
  420. package/dist/entities/printer-file.entity.js +0 -140
  421. package/dist/entities/printer-file.entity.js.map +0 -1
  422. package/dist/handlers/cache-manager.js +0 -18
  423. package/dist/handlers/cache-manager.js.map +0 -1
  424. package/dist/models/PrinterFile.js +0 -44
  425. package/dist/models/PrinterFile.js.map +0 -1
  426. package/dist/services/core/task-manager.service.js.map +0 -1
  427. package/dist/services/octoprint/dto/plugin.dto.js.map +0 -1
  428. package/dist/services/octoprint/plugin-base.service.js +0 -101
  429. package/dist/services/octoprint/plugin-base.service.js.map +0 -1
  430. package/dist/services/octoprint/plugin-firmware-update.service.js +0 -100
  431. package/dist/services/octoprint/plugin-firmware-update.service.js.map +0 -1
  432. package/dist/services/octoprint/plugin-repository.cache.js +0 -46
  433. package/dist/services/octoprint/plugin-repository.cache.js.map +0 -1
  434. package/dist/utils/benchmark.util.js +0 -39
  435. package/dist/utils/benchmark.util.js.map +0 -1
  436. package/dist/utils/is-docker.js +0 -40
  437. package/dist/utils/is-docker.js.map +0 -1
  438. package/dist/utils/metric.utils.js +0 -35
  439. package/dist/utils/metric.utils.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrusaLinkHttpClientBuilder", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrusaLinkHttpClientBuilder;
9
+ }
10
+ });
11
+ const _defaulthttpclientbuilder = require("../../../shared/default-http-client.builder");
12
+ const _octoprintserviceconstants = require("../../octoprint/constants/octoprint-service.constants");
13
+ const _digestauthutil = require("./digest-auth.util");
14
+ const _nodecrypto = require("node:crypto");
15
+ class PrusaLinkHttpClientBuilder extends _defaulthttpclientbuilder.DefaultHttpClientBuilder {
16
+ maxRetries = 1;
17
+ username;
18
+ password;
19
+ authHeaderContext;
20
+ onAuthError;
21
+ onAuthSuccess;
22
+ onRequestRetry;
23
+ build() {
24
+ if (!this.axiosOptions.baseURL) {
25
+ throw new Error("Base URL is required");
26
+ }
27
+ const axiosInstance = super.build();
28
+ if (this.username && this.password) {
29
+ axiosInstance.interceptors.request.use(async (config)=>{
30
+ if (this.authHeaderContext) {
31
+ const computedDigestHeader = this.generateDigestHeader(config.method?.toUpperCase() ?? "GET", config.url ?? "/");
32
+ config.headers[_octoprintserviceconstants.authorizationHeaderKey] = computedDigestHeader;
33
+ }
34
+ return config;
35
+ });
36
+ axiosInstance.interceptors.response.use((response)=>response, async (error)=>{
37
+ const originalRequest = error.config;
38
+ if (error.response?.status === 401 && this.username?.length && this.password?.length && (!originalRequest._retryCount || originalRequest._retryCount < this.maxRetries)) {
39
+ const wwwAuthHeader = error.response.headers[_octoprintserviceconstants.wwwAuthenticationHeaderKey];
40
+ if (wwwAuthHeader) {
41
+ if (typeof this.onAuthSuccess === "function") {
42
+ this.onAuthSuccess(wwwAuthHeader);
43
+ }
44
+ this.saveParsedAuthHeaderContext(wwwAuthHeader);
45
+ originalRequest._retryCount = (originalRequest._retryCount ?? 0) + 1;
46
+ if (typeof this.onRequestRetry === "function") {
47
+ this.onRequestRetry(error, originalRequest._retryCount);
48
+ }
49
+ return axiosInstance(originalRequest);
50
+ }
51
+ }
52
+ if (error.response?.status === 401 && this.onAuthError && typeof this.onAuthError === "function") {
53
+ this.onAuthError(error);
54
+ }
55
+ return Promise.reject(error);
56
+ });
57
+ }
58
+ return axiosInstance;
59
+ }
60
+ withDigestAuth(username, password, onAuthError, onRequestRetry, onAuthSuccess) {
61
+ if (!username?.length) {
62
+ throw new Error("username may not be an empty string");
63
+ }
64
+ if (!password?.length) {
65
+ throw new Error("password may not be an empty string");
66
+ }
67
+ if (onAuthError && typeof onAuthError !== "function") {
68
+ throw new Error("onAuthError must be a function");
69
+ }
70
+ if (onAuthSuccess && typeof onAuthSuccess !== "function") {
71
+ throw new Error("onAuthSuccess must be a function");
72
+ }
73
+ if (onRequestRetry && typeof onRequestRetry !== "function") {
74
+ throw new Error("onRequestRetry must be a function");
75
+ }
76
+ this.username = username;
77
+ this.password = password;
78
+ this.onAuthError = onAuthError;
79
+ this.onRequestRetry = onRequestRetry;
80
+ this.onAuthSuccess = onAuthSuccess;
81
+ return this;
82
+ }
83
+ withAuthHeader(authHeader) {
84
+ if (!authHeader?.length) {
85
+ throw new Error("Digest header may not be an empty string");
86
+ }
87
+ this.saveParsedAuthHeaderContext(authHeader);
88
+ return this;
89
+ }
90
+ saveParsedAuthHeaderContext(authHeader) {
91
+ const headerValue = authHeader.startsWith("Digest ") ? authHeader.substring(7) : authHeader;
92
+ const authParams = Object.fromEntries(headerValue.split(", ").map((param)=>{
93
+ const parts = param.split("=");
94
+ if (parts.length === 2) {
95
+ return [
96
+ parts[0],
97
+ parts[1].replace(/"/g, "")
98
+ ];
99
+ }
100
+ return [
101
+ parts[0],
102
+ ""
103
+ ];
104
+ }));
105
+ this.authHeaderContext = {
106
+ realm: authParams.realm,
107
+ nonce: authParams.nonce,
108
+ qop: authParams.qop,
109
+ hasQop: "qop" in authParams
110
+ };
111
+ }
112
+ generateDigestHeader(method, uri) {
113
+ if (!this.authHeaderContext || !this.username || !this.password) {
114
+ throw new Error("Digest auth not properly configured");
115
+ }
116
+ const { realm, nonce, qop, hasQop } = this.authHeaderContext;
117
+ return (0, _digestauthutil.generateDigestAuthHeader)({
118
+ username: this.username,
119
+ password: this.password,
120
+ method,
121
+ uri,
122
+ realm,
123
+ nonce,
124
+ qop: hasQop ? qop : undefined,
125
+ nc: hasQop ? "00000001" : undefined,
126
+ cnonce: hasQop ? (0, _nodecrypto.randomBytes)(8).toString("hex") : undefined
127
+ });
128
+ }
129
+ }
130
+
131
+ //# sourceMappingURL=prusa-link-http-client.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/services/prusa-link/utils/prusa-link-http-client.builder.ts"],"names":["PrusaLinkHttpClientBuilder","DefaultHttpClientBuilder","maxRetries","username","password","authHeaderContext","onAuthError","onAuthSuccess","onRequestRetry","build","axiosOptions","baseURL","Error","axiosInstance","interceptors","request","use","config","computedDigestHeader","generateDigestHeader","method","toUpperCase","url","headers","authorizationHeaderKey","response","error","originalRequest","status","length","_retryCount","wwwAuthHeader","wwwAuthenticationHeaderKey","saveParsedAuthHeaderContext","Promise","reject","withDigestAuth","withAuthHeader","authHeader","headerValue","startsWith","substring","authParams","Object","fromEntries","split","map","param","parts","replace","realm","nonce","qop","hasQop","uri","generateDigestAuthHeader","undefined","nc","cnonce","randomBytes","toString"],"mappings":";;;;+BAgBaA;;;eAAAA;;;0CAhB4B;2CAIlC;gCAEkC;4BACb;AASrB,MAAMA,mCAAmCC,kDAAwB;IACrDC,aAAqB,EAAE;IAChCC,SAAkB;IAClBC,SAAkB;IAClBC,kBAAmC;IACnCC,YAA0C;IAC1CC,cAA6C;IAC7CC,eAAmE;IAE3DC,QAAgC;QAC9C,IAAI,CAAC,IAAI,CAACC,YAAY,CAACC,OAAO,EAAE;YAC9B,MAAM,IAAIC,MAAM;QAClB;QAEA,MAAMC,gBAAgB,KAAK,CAACJ;QAG5B,IAAI,IAAI,CAACN,QAAQ,IAAI,IAAI,CAACC,QAAQ,EAAE;YAClCS,cAAcC,YAAY,CAACC,OAAO,CAACC,GAAG,CAAC,OAAOC;gBAE5C,IAAI,IAAI,CAACZ,iBAAiB,EAAE;oBAC1B,MAAMa,uBAAuB,IAAI,CAACC,oBAAoB,CACpDF,OAAOG,MAAM,EAAEC,iBAAiB,OAChCJ,OAAOK,GAAG,IAAI;oBAGhBL,OAAOM,OAAO,CAACC,iDAAsB,CAAC,GAAGN;gBAC3C;gBACA,OAAOD;YACT;YAGAJ,cAAcC,YAAY,CAACW,QAAQ,CAACT,GAAG,CACrC,CAACS,WAAaA,UACd,OAAOC;gBACL,MAAMC,kBAAkBD,MAAMT,MAAM;gBAGpC,IACES,MAAMD,QAAQ,EAAEG,WAAW,OAC3B,IAAI,CAACzB,QAAQ,EAAE0B,UACf,IAAI,CAACzB,QAAQ,EAAEyB,UACd,CAAA,CAACF,gBAAgBG,WAAW,IAAIH,gBAAgBG,WAAW,GAAG,IAAI,CAAC5B,UAAU,AAAD,GAC7E;oBAEA,MAAM6B,gBAAgBL,MAAMD,QAAQ,CAACF,OAAO,CAACS,qDAA0B,CAAC;oBACxE,IAAID,eAAe;wBAGjB,IAAI,OAAO,IAAI,CAACxB,aAAa,KAAK,YAAY;4BAC5C,IAAI,CAACA,aAAa,CAACwB;wBACrB;wBAEA,IAAI,CAACE,2BAA2B,CAACF;wBACjCJ,gBAAgBG,WAAW,GAAG,AAACH,CAAAA,gBAAgBG,WAAW,IAAI,CAAA,IAAK;wBAEnE,IAAI,OAAO,IAAI,CAACtB,cAAc,KAAK,YAAY;4BAC7C,IAAI,CAACA,cAAc,CAACkB,OAAOC,gBAAgBG,WAAW;wBACxD;wBACA,OAAOjB,cAAcc;oBACvB;gBACF;gBAIA,IAAID,MAAMD,QAAQ,EAAEG,WAAW,OAAO,IAAI,CAACtB,WAAW,IAAI,OAAO,IAAI,CAACA,WAAW,KAAK,YAAY;oBAChG,IAAI,CAACA,WAAW,CAACoB;gBACnB;gBAGA,OAAOQ,QAAQC,MAAM,CAACT;YACxB;QAEJ;QAEA,OAAOb;IACT;IAEOuB,eACLjC,QAAiB,EACjBC,QAAiB,EACjBE,WAAyC,EACzCE,cAAkE,EAClED,aAA4C,EACtC;QACN,IAAI,CAACJ,UAAU0B,QAAQ;YACrB,MAAM,IAAIjB,MAAM;QAClB;QACA,IAAI,CAACR,UAAUyB,QAAQ;YACrB,MAAM,IAAIjB,MAAM;QAClB;QACA,IAAIN,eAAe,OAAOA,gBAAgB,YAAY;YACpD,MAAM,IAAIM,MAAM;QAClB;QACA,IAAIL,iBAAiB,OAAOA,kBAAkB,YAAY;YACxD,MAAM,IAAIK,MAAM;QAClB;QACA,IAAIJ,kBAAkB,OAAOA,mBAAmB,YAAY;YAC1D,MAAM,IAAII,MAAM;QAClB;QAEA,IAAI,CAACT,QAAQ,GAAGA;QAChB,IAAI,CAACC,QAAQ,GAAGA;QAChB,IAAI,CAACE,WAAW,GAAGA;QACnB,IAAI,CAACE,cAAc,GAAGA;QACtB,IAAI,CAACD,aAAa,GAAGA;QAErB,OAAO,IAAI;IACb;IAEO8B,eAAeC,UAAkB,EAAQ;QAC9C,IAAI,CAACA,YAAYT,QAAQ;YACvB,MAAM,IAAIjB,MAAM;QAClB;QAEA,IAAI,CAACqB,2BAA2B,CAACK;QACjC,OAAO,IAAI;IACb;IAEQL,4BAA4BK,UAAkB,EAAQ;QAC5D,MAAMC,cAAcD,WAAWE,UAAU,CAAC,aACtCF,WAAWG,SAAS,CAAC,KACrBH;QAEJ,MAAMI,aAAaC,OAAOC,WAAW,CACnCL,YACGM,KAAK,CAAC,MACNC,GAAG,CAAC,CAACC;YACJ,MAAMC,QAAQD,MAAMF,KAAK,CAAC;YAC1B,IAAIG,MAAMnB,MAAM,KAAK,GAAG;gBACtB,OAAO;oBAACmB,KAAK,CAAC,EAAE;oBAAEA,KAAK,CAAC,EAAE,CAACC,OAAO,CAAC,MAAM;iBAAI;YAC/C;YACA,OAAO;gBAACD,KAAK,CAAC,EAAE;gBAAE;aAAG;QACvB;QAGJ,IAAI,CAAC3C,iBAAiB,GAAG;YACvB6C,OAAOR,WAAWQ,KAAK;YACvBC,OAAOT,WAAWS,KAAK;YACvBC,KAAKV,WAAWU,GAAG;YACnBC,QAAQ,SAASX;QACnB;IACF;IAEQvB,qBAAqBC,MAAc,EAAEkC,GAAW,EAAU;QAChE,IAAI,CAAC,IAAI,CAACjD,iBAAiB,IAAI,CAAC,IAAI,CAACF,QAAQ,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE;YAC/D,MAAM,IAAIQ,MAAM;QAClB;QAEA,MAAM,EAAEsC,KAAK,EAAEC,KAAK,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAG,IAAI,CAAChD,iBAAiB;QAE5D,OAAOkD,IAAAA,wCAAwB,EAAC;YAC9BpD,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBgB;YACAkC;YACAJ;YACAC;YACAC,KAAKC,SAASD,MAAMI;YACpBC,IAAIJ,SAAS,aAAaG;YAC1BE,QAAQL,SAASM,IAAAA,uBAAW,EAAC,GAAGC,QAAQ,CAAC,SAASJ;QACpD;IACF;AACF"}
@@ -11,18 +11,21 @@ Object.defineProperty(exports, "SocketFactory", {
11
11
  const _containertokens = require("../container.tokens");
12
12
  const _printerapiinterface = require("./printer-api.interface");
13
13
  class SocketFactory {
14
- cradle;
15
- constructor(cradle){
16
- this.cradle = cradle;
14
+ cradleService;
15
+ constructor(cradleService){
16
+ this.cradleService = cradleService;
17
17
  }
18
18
  createInstance(printerType) {
19
- const settingsStore = this.cradle[_containertokens.DITokens.settingsStore];
19
+ const settingsStore = this.cradleService.resolve(_containertokens.DITokens.settingsStore);
20
20
  const serverSettings = settingsStore.getServerSettings();
21
21
  const moonrakerSupport = serverSettings.experimentalMoonrakerSupport;
22
+ const prusaLinkSupport = serverSettings.experimentalPrusaLinkSupport;
22
23
  if (printerType === _printerapiinterface.OctoprintType) {
23
- return this.cradle[_containertokens.DITokens.octoPrintSockIoAdapter];
24
+ return this.cradleService.resolve(_containertokens.DITokens.octoPrintSockIoAdapter);
24
25
  } else if (moonrakerSupport && printerType === _printerapiinterface.MoonrakerType) {
25
- return this.cradle[_containertokens.DITokens.moonrakerWebsocketAdapter];
26
+ return this.cradleService.resolve(_containertokens.DITokens.moonrakerWebsocketAdapter);
27
+ } else if (prusaLinkSupport && printerType === _printerapiinterface.PrusaLinkType) {
28
+ return this.cradleService.resolve(_containertokens.DITokens.prusaLinkPollingAdapter);
26
29
  } else {
27
30
  throw new Error("PrinterType is unknown, cant pick the right socket adapter");
28
31
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/socket.factory.ts"],"names":["SocketFactory","cradle","constructor","createInstance","printerType","settingsStore","DITokens","serverSettings","getServerSettings","moonrakerSupport","experimentalMoonrakerSupport","OctoprintType","octoPrintSockIoAdapter","MoonrakerType","moonrakerWebsocketAdapter","Error"],"mappings":";;;;+BAKaA;;;eAAAA;;;iCALY;qCACoB;AAItC,MAAMA;IACXC,OAAY;IAEZC,YAAYD,MAAU,CAAE;QACtB,IAAI,CAACA,MAAM,GAAGA;IAChB;IAEAE,eAAeC,WAAmB,EAAqB;QACrD,MAAMC,gBAAgB,IAAI,CAACJ,MAAM,CAACK,yBAAQ,CAACD,aAAa,CAAC;QACzD,MAAME,iBAAiBF,cAAcG,iBAAiB;QACtD,MAAMC,mBAAmBF,eAAeG,4BAA4B;QAEpE,IAAIN,gBAAgBO,kCAAa,EAAE;YACjC,OAAO,IAAI,CAACV,MAAM,CAACK,yBAAQ,CAACM,sBAAsB,CAAC;QACrD,OAAO,IAAIH,oBAAoBL,gBAAgBS,kCAAa,EAAE;YAC5D,OAAO,IAAI,CAACZ,MAAM,CAACK,yBAAQ,CAACQ,yBAAyB,CAAC;QACxD,OAAO;YACL,MAAM,IAAIC,MAAM;QAClB;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/services/socket.factory.ts"],"names":["SocketFactory","constructor","cradleService","createInstance","printerType","settingsStore","resolve","DITokens","serverSettings","getServerSettings","moonrakerSupport","experimentalMoonrakerSupport","prusaLinkSupport","experimentalPrusaLinkSupport","OctoprintType","octoPrintSockIoAdapter","MoonrakerType","moonrakerWebsocketAdapter","PrusaLinkType","prusaLinkPollingAdapter","Error"],"mappings":";;;;+BAMaA;;;eAAAA;;;iCANY;qCACmC;AAKrD,MAAMA;;IACXC,YAAY,AAAiBC,aAA4B,CAAE;aAA9BA,gBAAAA;IAA+B;IAE5DC,eAAeC,WAAmB,EAAqB;QACrD,MAAMC,gBAAgB,IAAI,CAACH,aAAa,CAACI,OAAO,CAAgBC,yBAAQ,CAACF,aAAa;QACtF,MAAMG,iBAAiBH,cAAcI,iBAAiB;QACtD,MAAMC,mBAAmBF,eAAeG,4BAA4B;QACpE,MAAMC,mBAAmBJ,eAAeK,4BAA4B;QAEpE,IAAIT,gBAAgBU,kCAAa,EAAE;YACjC,OAAO,IAAI,CAACZ,aAAa,CAACI,OAAO,CAACC,yBAAQ,CAACQ,sBAAsB;QACnE,OAAO,IAAIL,oBAAoBN,gBAAgBY,kCAAa,EAAE;YAC5D,OAAO,IAAI,CAACd,aAAa,CAACI,OAAO,CAACC,yBAAQ,CAACU,yBAAyB;QACtE,OAAO,IAAIL,oBAAoBR,gBAAgBc,kCAAa,EAAE;YAC5D,OAAO,IAAI,CAAChB,aAAa,CAACI,OAAO,CAACC,yBAAQ,CAACY,uBAAuB;QACpE,OAAO;YACL,MAAM,IAAIC,MAAM;QAClB;IACF;AACF"}
@@ -10,65 +10,28 @@ Object.defineProperty(exports, "TaskManagerService", {
10
10
  });
11
11
  const _toadscheduler = require("toad-scheduler");
12
12
  const _awilix = require("awilix");
13
- const _jobexceptions = require("../../exceptions/job.exceptions");
14
- const _containertokens = require("../../container.tokens");
13
+ const _jobexceptions = require("../exceptions/job.exceptions");
14
+ const _errorutils = require("../utils/error.utils");
15
15
  class TaskManagerService {
16
- jobScheduler;
17
- taskStates = {};
18
- cradle;
16
+ cradleService;
17
+ toadScheduler;
18
+ taskStates;
19
19
  logger;
20
- constructor(container){
21
- this.cradle = container;
22
- this.logger = container[_containertokens.DITokens.loggerFactory](TaskManagerService.name);
23
- this.jobScheduler = container[_containertokens.DITokens.toadScheduler];
20
+ constructor(loggerFactory, cradleService, toadScheduler){
21
+ this.cradleService = cradleService;
22
+ this.toadScheduler = toadScheduler;
23
+ this.taskStates = {};
24
+ this.logger = loggerFactory(TaskManagerService.name);
24
25
  }
25
- validateInput(taskId, workload, schedulerOptions) {
26
- if (!taskId) {
27
- throw new _jobexceptions.JobValidationException("Task ID was not provided. Cant register task or schedule job.", taskId);
28
- }
29
- const prefix = `Job '${workload?.name || "anonymous"}' with ID '${taskId}'`;
30
- if (!!this.taskStates[taskId]) {
31
- throw new _jobexceptions.JobValidationException(`${prefix} was already registered. Cant register a key twice.`, taskId);
32
- }
33
- if (typeof workload !== "function") {
34
- if (typeof workload !== "string") {
35
- throw new _jobexceptions.JobValidationException(`${prefix} is not a callable nor a string dependency to lookup. It can't be scheduled.`, taskId);
36
- }
37
- let resolvedService;
38
- try {
39
- resolvedService = this.cradle[workload];
40
- } catch (e) {
41
- if (e instanceof _awilix.AwilixResolutionError) {
42
- throw new _jobexceptions.JobValidationException(`${prefix} had an awilix dependency resolution error. It can't be scheduled without fixing this problem. Inner error:\n` + e.stack, taskId);
43
- } else {
44
- throw new _jobexceptions.JobValidationException(`${prefix} is not a registered awilix dependency. It can't be scheduled. Error:\n` + e.stack, taskId);
45
- }
46
- }
47
- if (typeof resolvedService?.run !== "function") {
48
- throw new _jobexceptions.JobValidationException(`${prefix} was resolved but it doesn't have a 'run(..)' method to call.`, taskId);
49
- }
50
- }
51
- if (!schedulerOptions?.periodic && !schedulerOptions?.runOnce && !schedulerOptions?.runDelayed) {
52
- throw new _jobexceptions.JobValidationException(`Provide 'periodic' or 'runOnce' or 'runDelayed' option'.`, taskId);
53
- }
54
- if (!schedulerOptions?.periodic && !!schedulerOptions.disabled) {
55
- throw new _jobexceptions.JobValidationException(`Only tasks of type 'periodic' can be disabled at boot.`, taskId);
56
- }
57
- if (schedulerOptions?.runDelayed && !schedulerOptions.milliseconds && !schedulerOptions.seconds) {
58
- throw new _jobexceptions.JobValidationException(`Provide a delayed timing parameter (milliseconds|seconds)'`, taskId);
59
- }
60
- if (schedulerOptions?.periodic && !schedulerOptions.milliseconds && !schedulerOptions.seconds && !schedulerOptions.minutes && !schedulerOptions.hours && !schedulerOptions.days) {
61
- throw new _jobexceptions.JobValidationException(`Provide a periodic timing parameter (milliseconds|seconds|minutes|hours|days)'`, taskId);
62
- }
63
- }
64
- registerJobOrTask({ id: taskId, task: asyncTaskCallbackOrToken, preset: schedulerOptions }) {
26
+ registerJobOrTask(registration) {
27
+ const { id: taskId, task: serviceIdentifier, preset: schedulerOptions } = registration;
65
28
  try {
66
- this.validateInput(taskId, asyncTaskCallbackOrToken, schedulerOptions);
29
+ this.validateInput(taskId, serviceIdentifier, schedulerOptions);
67
30
  } catch (e) {
68
- this.logger.error(e.stack, schedulerOptions);
31
+ this.logger.error((0, _errorutils.errorSummary)(e), schedulerOptions);
69
32
  return;
70
33
  }
71
- const timedTask = this.getSafeTimedTask(taskId, asyncTaskCallbackOrToken);
34
+ const timedTask = this.getSafeTimedTask(taskId, serviceIdentifier);
72
35
  this.taskStates[taskId] = {
73
36
  options: schedulerOptions,
74
37
  timedTask
@@ -76,10 +39,10 @@ class TaskManagerService {
76
39
  if (schedulerOptions.runOnce) {
77
40
  timedTask.execute();
78
41
  } else if (schedulerOptions.runDelayed) {
79
- const delay = (schedulerOptions.milliseconds || 0) + (schedulerOptions.seconds || 0) * 1000;
42
+ const delay = (schedulerOptions.milliseconds ?? 0) + (schedulerOptions.seconds ?? 0) * 1000;
80
43
  this.runTimeoutTaskInstance(taskId, delay);
81
44
  } else {
82
- this.#scheduleEnabledPeriodicJob(taskId);
45
+ this.scheduleEnabledPeriodicJob(taskId);
83
46
  }
84
47
  }
85
48
  scheduleDisabledJob(taskId, failIfEnabled = true) {
@@ -92,18 +55,18 @@ class TaskManagerService {
92
55
  return;
93
56
  }
94
57
  taskState.options.disabled = false;
95
- this.#scheduleEnabledPeriodicJob(taskId);
58
+ this.scheduleEnabledPeriodicJob(taskId);
96
59
  }
97
60
  disableJob(taskId, failIfDisabled = true) {
98
61
  if (this.isTaskDisabled(taskId)) {
99
62
  if (failIfDisabled) {
100
- throw new _jobexceptions.JobValidationException("Cant disable a job which is already disabled", taskId);
63
+ throw new _jobexceptions.JobValidationException("Can't disable a job which is already disabled", taskId);
101
64
  }
102
65
  return;
103
66
  }
104
67
  const taskState = this.getTaskState(taskId);
105
68
  taskState.options.disabled = true;
106
- taskState.job.stop();
69
+ taskState.job?.stop();
107
70
  }
108
71
  isTaskDisabled(taskId) {
109
72
  return !!this.getTaskState(taskId).options.disabled;
@@ -111,7 +74,7 @@ class TaskManagerService {
111
74
  deregisterTask(taskId) {
112
75
  this.getTaskState(taskId);
113
76
  delete this.taskStates[taskId];
114
- this.jobScheduler.removeById(taskId);
77
+ this.toadScheduler.removeById(taskId);
115
78
  }
116
79
  getTaskState(taskId) {
117
80
  const taskState = this.taskStates[taskId];
@@ -123,23 +86,57 @@ class TaskManagerService {
123
86
  runTimeoutTaskInstance(taskId, timeoutMs) {
124
87
  const taskState = this.getTaskState(taskId);
125
88
  this.logger.log(`Running delayed task '${taskId}' in ${timeoutMs}ms`);
126
- setTimeout(()=>taskState.timedTask.execute(), timeoutMs, taskId);
89
+ setTimeout(()=>taskState.timedTask.execute(), timeoutMs);
127
90
  }
128
- getSafeTimedTask(taskId, handler) {
91
+ stopSchedulerTasks() {
92
+ this.toadScheduler.stop();
93
+ }
94
+ validateInput(taskId, serviceIdentifier, schedulerOptions) {
95
+ if (!taskId) {
96
+ throw new _jobexceptions.JobValidationException("Task ID was not provided. Can't register task or schedule job.", taskId);
97
+ }
98
+ const serviceName = serviceIdentifier || "unknown";
99
+ const prefix = `Job '${schedulerOptions?.name ?? serviceName}' with ID '${taskId}'`;
100
+ if (this.taskStates[taskId]) {
101
+ throw new _jobexceptions.JobValidationException(`${prefix} was already registered. Can't register a key twice.`, taskId);
102
+ }
103
+ let resolvedService;
104
+ try {
105
+ resolvedService = this.cradleService.resolve(serviceIdentifier);
106
+ } catch (e) {
107
+ if (e instanceof _awilix.AwilixResolutionError) {
108
+ throw new _jobexceptions.JobValidationException(`${prefix} had an awilix dependency resolution error. It can't be scheduled without fixing this problem. Inner error:\n` + e.stack, taskId);
109
+ } else {
110
+ throw new _jobexceptions.JobValidationException(`${prefix} is not a registered awilix dependency. It can't be scheduled. Error:\n` + e.stack, taskId);
111
+ }
112
+ }
113
+ if (typeof resolvedService?.run !== "function") {
114
+ throw new _jobexceptions.JobValidationException(`${prefix} was resolved but it doesn't have a 'run()' method to call.`, taskId);
115
+ }
116
+ if (!schedulerOptions?.periodic && !schedulerOptions?.runOnce && !schedulerOptions?.runDelayed) {
117
+ throw new _jobexceptions.JobValidationException(`${prefix} Provide 'periodic', 'runOnce', or 'runDelayed' option.`, taskId);
118
+ }
119
+ if (!schedulerOptions?.periodic && !!schedulerOptions.disabled) {
120
+ throw new _jobexceptions.JobValidationException(`${prefix} Only tasks of type 'periodic' can be disabled at boot.`, taskId);
121
+ }
122
+ if (schedulerOptions?.runDelayed && !schedulerOptions.milliseconds && !schedulerOptions.seconds) {
123
+ throw new _jobexceptions.JobValidationException(`${prefix} Provide a delayed timing parameter (milliseconds|seconds)`, taskId);
124
+ }
125
+ if (schedulerOptions?.periodic && !schedulerOptions.milliseconds && !schedulerOptions.seconds && !schedulerOptions.minutes && !schedulerOptions.hours && !schedulerOptions.days) {
126
+ throw new _jobexceptions.JobValidationException(`${prefix} Provide a periodic timing parameter (milliseconds|seconds|minutes|hours|days)`, taskId);
127
+ }
128
+ }
129
+ getSafeTimedTask(taskId, serviceIdentifier) {
129
130
  const asyncHandler = async ()=>{
130
- await this.timeTask(taskId, handler);
131
+ await this.timeTask(taskId, serviceIdentifier);
131
132
  };
132
133
  return new _toadscheduler.AsyncTask(taskId, asyncHandler, this.getErrorHandler(taskId));
133
134
  }
134
- async timeTask(taskId, handler) {
135
- let taskState = this.taskStates[taskId];
135
+ async timeTask(taskId, serviceIdentifier) {
136
+ const taskState = this.taskStates[taskId];
136
137
  taskState.started = Date.now();
137
- if (typeof handler === "string") {
138
- const taskService = this.cradle[handler];
139
- await taskService.run();
140
- } else {
141
- await handler();
142
- }
138
+ const taskService = this.cradleService.resolve(serviceIdentifier);
139
+ await taskService.run();
143
140
  taskState.duration = Date.now() - taskState.started;
144
141
  if (taskState.options?.logFirstCompletion !== false && !taskState?.firstCompletion) {
145
142
  this.logger.log(`Task '${taskId}' first completion. Duration ${taskState.duration}ms`);
@@ -148,23 +145,20 @@ class TaskManagerService {
148
145
  }
149
146
  getErrorHandler(taskId) {
150
147
  return (error)=>{
151
- const registration = this.taskStates[taskId];
152
- if (!registration.lastError) registration.erroredlastError = {
148
+ const taskState = this.taskStates[taskId];
149
+ taskState.lastError ??= {
153
150
  time: Date.now(),
154
151
  error
155
152
  };
156
- this.logger.error(`Task '${taskId}' threw an exception:` + error.stack);
153
+ this.logger.error(`Task '${taskId}' threw an exception: ${error.stack}`);
157
154
  };
158
155
  }
159
- stopSchedulerTasks() {
160
- this.jobScheduler.stop();
161
- }
162
- #scheduleEnabledPeriodicJob(taskId) {
156
+ scheduleEnabledPeriodicJob(taskId) {
163
157
  const taskState = this.getTaskState(taskId);
164
158
  if (!taskState?.timedTask || !taskState?.options) {
165
159
  throw new _jobexceptions.JobValidationException(`The requested task with ID ${taskId} was not registered properly ('timedTask' or 'options' missing).`, taskId);
166
160
  }
167
- const schedulerOptions = taskState?.options;
161
+ const schedulerOptions = taskState.options;
168
162
  const timedTask = taskState.timedTask;
169
163
  if (!schedulerOptions?.periodic) {
170
164
  throw new _jobexceptions.JobValidationException(`The requested task with ID ${taskId} is not periodic and cannot be enabled.`, taskId);
@@ -173,7 +167,7 @@ class TaskManagerService {
173
167
  this.logger.log(`Task '${taskId}' was scheduled (runImmediately: ${!!schedulerOptions.runImmediately}).`);
174
168
  const job = new _toadscheduler.SimpleIntervalJob(schedulerOptions, timedTask);
175
169
  taskState.job = job;
176
- this.jobScheduler.addSimpleIntervalJob(job);
170
+ this.toadScheduler.addSimpleIntervalJob(job);
177
171
  } else {
178
172
  this.logger.log(`Task '${taskId}' was marked as disabled (deferred execution).`);
179
173
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/task-manager.service.ts"],"names":["TaskManagerService","taskStates","logger","constructor","loggerFactory","cradleService","toadScheduler","name","registerJobOrTask","registration","id","taskId","task","serviceIdentifier","preset","schedulerOptions","validateInput","e","error","errorSummary","timedTask","getSafeTimedTask","options","runOnce","execute","runDelayed","delay","milliseconds","seconds","runTimeoutTaskInstance","scheduleEnabledPeriodicJob","scheduleDisabledJob","failIfEnabled","taskState","getTaskState","disabled","JobValidationException","disableJob","failIfDisabled","isTaskDisabled","job","stop","deregisterTask","removeById","timeoutMs","log","setTimeout","stopSchedulerTasks","serviceName","prefix","resolvedService","resolve","AwilixResolutionError","stack","run","periodic","minutes","hours","days","asyncHandler","timeTask","AsyncTask","getErrorHandler","started","Date","now","taskService","duration","logFirstCompletion","firstCompletion","lastError","time","runImmediately","SimpleIntervalJob","addSimpleIntervalJob"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createCameraStreamSchema", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createCameraStreamSchema;
9
+ }
10
+ });
11
+ const _zod = require("zod");
12
+ const _genericvalidation = require("../../controllers/validation/generic.validation");
13
+ const createCameraStreamSchema = (isSqlite)=>_zod.z.object({
14
+ printerId: (0, _genericvalidation.idRuleV2)(isSqlite).nullish(),
15
+ streamURL: _zod.z.string().url(),
16
+ name: _zod.z.string().min(1).optional()
17
+ });
18
+
19
+ //# sourceMappingURL=camera-service.validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/validators/camera-service.validation.ts"],"names":["createCameraStreamSchema","isSqlite","z","object","printerId","idRuleV2","nullish","streamURL","string","url","name","min","optional"],"mappings":";;;;+BAGaA;;;eAAAA;;;qBAHK;mCACO;AAElB,MAAMA,2BAA2B,CAACC,WACvCC,MAAC,CAACC,MAAM,CAAC;QACPC,WAAWC,IAAAA,2BAAQ,EAACJ,UAAUK,OAAO;QACrCC,WAAWL,MAAC,CAACM,MAAM,GAAGC,GAAG;QACzBC,MAAMR,MAAC,CAACM,MAAM,GAAGG,GAAG,CAAC,GAAGC,QAAQ;IAClC"}
@@ -9,54 +9,65 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- createFloorRules: function() {
13
- return createFloorRules;
12
+ createOrUpdateFloorSchema: function() {
13
+ return createOrUpdateFloorSchema;
14
14
  },
15
- printerInFloorRules: function() {
16
- return printerInFloorRules;
15
+ floorLevelValidator: function() {
16
+ return floorLevelValidator;
17
17
  },
18
- removePrinterInFloorRules: function() {
19
- return removePrinterInFloorRules;
18
+ floorNameValidator: function() {
19
+ return floorNameValidator;
20
20
  },
21
- updateFloorNameRules: function() {
22
- return updateFloorNameRules;
21
+ printerInFloorSchema: function() {
22
+ return printerInFloorSchema;
23
23
  },
24
- updateFloorNumberRules: function() {
25
- return updateFloorNumberRules;
24
+ removePrinterInFloorSchema: function() {
25
+ return removePrinterInFloorSchema;
26
26
  },
27
- updateFloorRules: function() {
28
- return updateFloorRules;
27
+ updateFloorLevelSchema: function() {
28
+ return updateFloorLevelSchema;
29
+ },
30
+ updateFloorNameSchema: function() {
31
+ return updateFloorNameSchema;
32
+ },
33
+ xValidator: function() {
34
+ return xValidator;
35
+ },
36
+ yValidator: function() {
37
+ return yValidator;
29
38
  }
30
39
  });
40
+ const _zod = require("zod");
31
41
  const _serviceconstants = require("../../constants/service.constants");
32
42
  const _genericvalidation = require("../../controllers/validation/generic.validation");
33
- const removePrinterInFloorRules = (isSqlite)=>({
43
+ const removePrinterInFloorSchema = (isSqlite)=>_zod.z.object({
34
44
  printerId: (0, _genericvalidation.idRuleV2)(isSqlite)
35
45
  });
36
- const printerInFloorRules = (isSqlite)=>({
46
+ const xValidator = _zod.z.number().int().min(0).max(12);
47
+ const yValidator = _zod.z.number().int().min(0).max(12);
48
+ const floorLevelValidator = _zod.z.number().int();
49
+ const floorNameValidator = _zod.z.string().min(_serviceconstants.minFloorNameLength);
50
+ const printerInFloorSchema = (isSqlite)=>_zod.z.object({
37
51
  printerId: (0, _genericvalidation.idRuleV2)(isSqlite),
38
- floorId: isSqlite ? (0, _genericvalidation.idRuleV2)(true) : "not",
39
- x: "required|integer|between:0,12",
40
- y: "required|integer|between:0,12"
52
+ floorId: (0, _genericvalidation.idRuleV2)(isSqlite),
53
+ x: xValidator,
54
+ y: yValidator
55
+ });
56
+ const updateFloorNameSchema = _zod.z.object({
57
+ name: floorNameValidator
58
+ });
59
+ const updateFloorLevelSchema = _zod.z.object({
60
+ floor: floorLevelValidator
61
+ });
62
+ const createOrUpdateFloorSchema = (isSqlite)=>_zod.z.object({
63
+ name: floorNameValidator,
64
+ floor: floorLevelValidator,
65
+ printers: _zod.z.array(_zod.z.object({
66
+ printerId: (0, _genericvalidation.idRuleV2)(isSqlite),
67
+ floorId: (0, _genericvalidation.idRuleV2)(isSqlite).optional(),
68
+ x: xValidator,
69
+ y: yValidator
70
+ })).optional()
41
71
  });
42
- const updateFloorNameRules = {
43
- name: `required|minLength:${_serviceconstants.minFloorNameLength}`
44
- };
45
- const updateFloorNumberRules = {
46
- floor: "required|integer"
47
- };
48
- const updateFloorRules = {
49
- name: `required|minLength:${_serviceconstants.minFloorNameLength}`,
50
- floor: "required|integer",
51
- printers: "array",
52
- "printer.*.printerId": "required|mongoId",
53
- "printer.*.x": "required|integer|between:0,12",
54
- "printer.*.y": "required|integer|between:0,12"
55
- };
56
- const createFloorRules = {
57
- name: `required|minLength:${_serviceconstants.minFloorNameLength}`,
58
- floor: "required|integer",
59
- printers: "array"
60
- };
61
72
 
62
73
  //# sourceMappingURL=floor-service.validation.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/validators/floor-service.validation.ts"],"names":["createFloorRules","printerInFloorRules","removePrinterInFloorRules","updateFloorNameRules","updateFloorNumberRules","updateFloorRules","isSqlite","printerId","idRuleV2","floorId","x","y","name","minFloorNameLength","floor","printers"],"mappings":";;;;;;;;;;;IA+BaA,gBAAgB;eAAhBA;;IAxBAC,mBAAmB;eAAnBA;;IAJAC,yBAAyB;eAAzBA;;IAWAC,oBAAoB;eAApBA;;IAIAC,sBAAsB;eAAtBA;;IAIAC,gBAAgB;eAAhBA;;;kCAtBsB;mCACV;AAElB,MAAMH,4BAA4B,CAACI,WAAuB,CAAA;QAC/DC,WAAWC,IAAAA,2BAAQ,EAACF;IACtB,CAAA;AAEO,MAAML,sBAAsB,CAACK,WAAuB,CAAA;QACzDC,WAAWC,IAAAA,2BAAQ,EAACF;QACpBG,SAASH,WAAWE,IAAAA,2BAAQ,EAAC,QAAQ;QACrCE,GAAG;QACHC,GAAG;IACL,CAAA;AAEO,MAAMR,uBAAuB;IAClCS,MAAM,CAAC,mBAAmB,EAAEC,oCAAkB,EAAE;AAClD;AAEO,MAAMT,yBAAyB;IACpCU,OAAO;AACT;AAEO,MAAMT,mBAAmB;IAC9BO,MAAM,CAAC,mBAAmB,EAAEC,oCAAkB,EAAE;IAChDC,OAAO;IACPC,UAAU;IACV,uBAAuB;IACvB,eAAe;IACf,eAAe;AACjB;AAEO,MAAMf,mBAAmB;IAC9BY,MAAM,CAAC,mBAAmB,EAAEC,oCAAkB,EAAE;IAChDC,OAAO;IACPC,UAAU;AACZ"}
1
+ {"version":3,"sources":["../../../src/services/validators/floor-service.validation.ts"],"names":["createOrUpdateFloorSchema","floorLevelValidator","floorNameValidator","printerInFloorSchema","removePrinterInFloorSchema","updateFloorLevelSchema","updateFloorNameSchema","xValidator","yValidator","isSqlite","z","object","printerId","idRuleV2","number","int","min","max","string","minFloorNameLength","floorId","x","y","name","floor","printers","array","optional"],"mappings":";;;;;;;;;;;IA8BaA,yBAAyB;eAAzBA;;IAnBAC,mBAAmB;eAAnBA;;IACAC,kBAAkB;eAAlBA;;IAEAC,oBAAoB;eAApBA;;IAVAC,0BAA0B;eAA1BA;;IAsBAC,sBAAsB;eAAtBA;;IAJAC,qBAAqB;eAArBA;;IAbAC,UAAU;eAAVA;;IACAC,UAAU;eAAVA;;;qBAVK;kCACiB;mCACV;AAElB,MAAMJ,6BAA6B,CAACK,WACzCC,MAAC,CAACC,MAAM,CAAC;QACPC,WAAWC,IAAAA,2BAAQ,EAACJ;IACtB;AAEK,MAAMF,aAAaG,MAAC,CAACI,MAAM,GAAGC,GAAG,GAAGC,GAAG,CAAC,GAAGC,GAAG,CAAC;AAC/C,MAAMT,aAAaE,MAAC,CAACI,MAAM,GAAGC,GAAG,GAAGC,GAAG,CAAC,GAAGC,GAAG,CAAC;AAC/C,MAAMhB,sBAAsBS,MAAC,CAACI,MAAM,GAAGC,GAAG;AAC1C,MAAMb,qBAAqBQ,MAAC,CAACQ,MAAM,GAAGF,GAAG,CAACG,oCAAkB;AAE5D,MAAMhB,uBAAuB,CAACM,WACnCC,MAAC,CAACC,MAAM,CAAC;QACPC,WAAWC,IAAAA,2BAAQ,EAACJ;QACpBW,SAASP,IAAAA,2BAAQ,EAACJ;QAClBY,GAAGd;QACHe,GAAGd;IACL;AAEK,MAAMF,wBAAwBI,MAAC,CAACC,MAAM,CAAC;IAC5CY,MAAMrB;AACR;AAEO,MAAMG,yBAAyBK,MAAC,CAACC,MAAM,CAAC;IAC7Ca,OAAOvB;AACT;AAEO,MAAMD,4BAA4B,CAACS,WACxCC,MAAC,CAACC,MAAM,CAAC;QACPY,MAAMrB;QACNsB,OAAOvB;QACPwB,UAAUf,MAAC,CACRgB,KAAK,CACJhB,MAAC,CAACC,MAAM,CAAC;YACPC,WAAWC,IAAAA,2BAAQ,EAACJ;YACpBW,SAASP,IAAAA,2BAAQ,EAACJ,UAAUkB,QAAQ;YACpCN,GAAGd;YACHe,GAAGd;QACL,IAEDmB,QAAQ;IACb"}
@@ -2,19 +2,32 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "createPrintCompletionRules", {
5
+ Object.defineProperty(exports, "createPrintCompletionSchema", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return createPrintCompletionRules;
8
+ return createPrintCompletionSchema;
9
9
  }
10
10
  });
11
+ const _zod = require("zod");
11
12
  const _octoprintwebsocketconstants = require("../octoprint/constants/octoprint-websocket.constants");
12
- const createPrintCompletionRules = {
13
- fileName: "required",
14
- status: `required|string|in:${Object.values(_octoprintwebsocketconstants.EVENT_TYPES)}`,
15
- printerId: "required|string|mongoId",
16
- completionLog: "string",
17
- context: "required|object"
18
- };
13
+ const _genericvalidation = require("../../controllers/validation/generic.validation");
14
+ const createPrintCompletionSchema = (isSqlite)=>_zod.z.object({
15
+ fileName: _zod.z.string().min(1, "File name is required"),
16
+ status: _zod.z.enum(_octoprintwebsocketconstants.EVENT_TYPES_ARRAY, {
17
+ errorMap: (issue)=>{
18
+ if (issue.code === "invalid_type") {
19
+ return {
20
+ message: `Status must be one of: ${Object.values(_octoprintwebsocketconstants.EVENT_TYPES).join(", ")}`
21
+ };
22
+ }
23
+ return {
24
+ message: "Invalid status"
25
+ };
26
+ }
27
+ }),
28
+ printerId: (0, _genericvalidation.idRuleV2)(isSqlite),
29
+ completionLog: _zod.z.string().optional(),
30
+ context: _zod.z.any()
31
+ });
19
32
 
20
33
  //# sourceMappingURL=print-completion-service.validation.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/validators/print-completion-service.validation.ts"],"names":["createPrintCompletionRules","fileName","status","Object","values","EVENT_TYPES","printerId","completionLog","context"],"mappings":";;;;+BAEaA;;;eAAAA;;;6CAFe;AAErB,MAAMA,6BAA6B;IACxCC,UAAU;IACVC,QAAQ,CAAC,mBAAmB,EAAEC,OAAOC,MAAM,CAACC,wCAAW,GAAG;IAC1DC,WAAW;IACXC,eAAe;IACfC,SAAS;AACX"}
1
+ {"version":3,"sources":["../../../src/services/validators/print-completion-service.validation.ts"],"names":["createPrintCompletionSchema","isSqlite","z","object","fileName","string","min","status","enum","EVENT_TYPES_ARRAY","errorMap","issue","code","message","Object","values","EVENT_TYPES","join","printerId","idRuleV2","completionLog","optional","context","any"],"mappings":";;;;+BAIaA;;;eAAAA;;;qBAJK;6CAC6B;mCACtB;AAElB,MAAMA,8BAA8B,CAACC,WAC1CC,MAAC,CAACC,MAAM,CAAC;QACPC,UAAUF,MAAC,CAACG,MAAM,GAAGC,GAAG,CAAC,GAAG;QAC5BC,QAAQL,MAAC,CAACM,IAAI,CAACC,8CAAiB,EAA2B;YACzDC,UAAU,CAACC;gBACT,IAAIA,MAAMC,IAAI,KAAK,gBAAgB;oBACjC,OAAO;wBAAEC,SAAS,CAAC,uBAAuB,EAAEC,OAAOC,MAAM,CAACC,wCAAW,EAAEC,IAAI,CAAC,OAAO;oBAAC;gBACtF;gBACA,OAAO;oBAAEJ,SAAS;gBAAiB;YACrC;QACF;QACAK,WAAWC,IAAAA,2BAAQ,EAAClB;QACpBmB,eAAelB,MAAC,CAACG,MAAM,GAAGgB,QAAQ;QAClCC,SAASpB,MAAC,CAACqB,GAAG;IAChB"}