@fdm-monster/server 1.5.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 (377) hide show
  1. package/.env +19 -0
  2. package/.env.template +43 -0
  3. package/.gitattributes +1 -0
  4. package/.idea/codeStyles/Project.xml +85 -0
  5. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  6. package/.idea/dbnavigator.xml +574 -0
  7. package/.idea/fdm-monster.iml +16 -0
  8. package/.idea/inspectionProfiles/Project_Default.xml +22 -0
  9. package/.idea/jsLibraryMappings.xml +6 -0
  10. package/.idea/modules.xml +12 -0
  11. package/.idea/prettier.xml +6 -0
  12. package/.idea/vcs.xml +17 -0
  13. package/.swcrc +33 -0
  14. package/CODE_OF_CONDUCT.md +46 -0
  15. package/CONTRIBUTING.md +134 -0
  16. package/LICENSE +661 -0
  17. package/README.md +149 -0
  18. package/SECURITY.md +16 -0
  19. package/dist/@type/express/index.d.js +7 -0
  20. package/dist/@type/express/index.d.js.map +1 -0
  21. package/dist/constants/authorization.constants.js +99 -0
  22. package/dist/constants/authorization.constants.js.map +1 -0
  23. package/dist/constants/event.constants.js +55 -0
  24. package/dist/constants/event.constants.js.map +1 -0
  25. package/dist/constants/http-status-codes.constants.js +268 -0
  26. package/dist/constants/http-status-codes.constants.js.map +1 -0
  27. package/dist/constants/server-settings.constants.js +119 -0
  28. package/dist/constants/server-settings.constants.js.map +1 -0
  29. package/dist/constants/service.constants.js +48 -0
  30. package/dist/constants/service.constants.js.map +1 -0
  31. package/dist/container.js +161 -0
  32. package/dist/container.js.map +1 -0
  33. package/dist/container.tokens.js +83 -0
  34. package/dist/container.tokens.js.map +1 -0
  35. package/dist/controllers/auth.controller.js +143 -0
  36. package/dist/controllers/auth.controller.js.map +1 -0
  37. package/dist/controllers/batch-call.controller.js +59 -0
  38. package/dist/controllers/batch-call.controller.js.map +1 -0
  39. package/dist/controllers/camera-stream.controller.js +57 -0
  40. package/dist/controllers/camera-stream.controller.js.map +1 -0
  41. package/dist/controllers/custom-gcode.controller.js +76 -0
  42. package/dist/controllers/custom-gcode.controller.js.map +1 -0
  43. package/dist/controllers/first-time-setup.controller.js +65 -0
  44. package/dist/controllers/first-time-setup.controller.js.map +1 -0
  45. package/dist/controllers/floor.controller.js +78 -0
  46. package/dist/controllers/floor.controller.js.map +1 -0
  47. package/dist/controllers/plugin-firmware-update.controller.js +140 -0
  48. package/dist/controllers/plugin-firmware-update.controller.js.map +1 -0
  49. package/dist/controllers/print-completion.controller.js +58 -0
  50. package/dist/controllers/print-completion.controller.js.map +1 -0
  51. package/dist/controllers/printer-files.controller.js +208 -0
  52. package/dist/controllers/printer-files.controller.js.map +1 -0
  53. package/dist/controllers/printer-settings.controller.js +58 -0
  54. package/dist/controllers/printer-settings.controller.js.map +1 -0
  55. package/dist/controllers/printer.controller.js +287 -0
  56. package/dist/controllers/printer.controller.js.map +1 -0
  57. package/dist/controllers/server-private.controller.js +122 -0
  58. package/dist/controllers/server-private.controller.js.map +1 -0
  59. package/dist/controllers/server-public.controller.js +140 -0
  60. package/dist/controllers/server-public.controller.js.map +1 -0
  61. package/dist/controllers/settings.controller.js +89 -0
  62. package/dist/controllers/settings.controller.js.map +1 -0
  63. package/dist/controllers/user.controller.js +137 -0
  64. package/dist/controllers/user.controller.js.map +1 -0
  65. package/dist/controllers/validation/auth-controller.validation.js +15 -0
  66. package/dist/controllers/validation/auth-controller.validation.js.map +1 -0
  67. package/dist/controllers/validation/batch-controller.validation.js +29 -0
  68. package/dist/controllers/validation/batch-controller.validation.js.map +1 -0
  69. package/dist/controllers/validation/generic.validation.js +15 -0
  70. package/dist/controllers/validation/generic.validation.js.map +1 -0
  71. package/dist/controllers/validation/printer-controller.validation.js +66 -0
  72. package/dist/controllers/validation/printer-controller.validation.js.map +1 -0
  73. package/dist/controllers/validation/printer-files-controller.validation.js +66 -0
  74. package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -0
  75. package/dist/controllers/validation/printer-settings-controller.validation.js +15 -0
  76. package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -0
  77. package/dist/controllers/validation/setting.validation.js +19 -0
  78. package/dist/controllers/validation/setting.validation.js.map +1 -0
  79. package/dist/controllers/validation/user-controller.validation.js +16 -0
  80. package/dist/controllers/validation/user-controller.validation.js.map +1 -0
  81. package/dist/exceptions/job.exceptions.js +18 -0
  82. package/dist/exceptions/job.exceptions.js.map +1 -0
  83. package/dist/exceptions/runtime.exceptions.js +108 -0
  84. package/dist/exceptions/runtime.exceptions.js.map +1 -0
  85. package/dist/handlers/cache-manager.js +25 -0
  86. package/dist/handlers/cache-manager.js.map +1 -0
  87. package/dist/handlers/event-emitter.js +31 -0
  88. package/dist/handlers/event-emitter.js.map +1 -0
  89. package/dist/handlers/logger-factory.js +18 -0
  90. package/dist/handlers/logger-factory.js.map +1 -0
  91. package/dist/handlers/logger.js +85 -0
  92. package/dist/handlers/logger.js.map +1 -0
  93. package/dist/handlers/validators.js +131 -0
  94. package/dist/handlers/validators.js.map +1 -0
  95. package/dist/index.js +19 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/middleware/authenticate.js +83 -0
  98. package/dist/middleware/authenticate.js.map +1 -0
  99. package/dist/middleware/database.js +26 -0
  100. package/dist/middleware/database.js.map +1 -0
  101. package/dist/middleware/exception.handler.js +96 -0
  102. package/dist/middleware/exception.handler.js.map +1 -0
  103. package/dist/middleware/global.middleware.js +58 -0
  104. package/dist/middleware/global.middleware.js.map +1 -0
  105. package/dist/middleware/passport.js +44 -0
  106. package/dist/middleware/passport.js.map +1 -0
  107. package/dist/middleware/printer.js +49 -0
  108. package/dist/middleware/printer.js.map +1 -0
  109. package/dist/migrations/1696187882312-PrinterFile.js +40 -0
  110. package/dist/migrations/1696187882312-PrinterFile.js.map +1 -0
  111. package/dist/models/Auth/Permission.js +20 -0
  112. package/dist/models/Auth/Permission.js.map +1 -0
  113. package/dist/models/Auth/RefreshToken.js +41 -0
  114. package/dist/models/Auth/RefreshToken.js.map +1 -0
  115. package/dist/models/Auth/Role.js +20 -0
  116. package/dist/models/Auth/Role.js.map +1 -0
  117. package/dist/models/Auth/User.js +51 -0
  118. package/dist/models/Auth/User.js.map +1 -0
  119. package/dist/models/CameraStream.js +59 -0
  120. package/dist/models/CameraStream.js.map +1 -0
  121. package/dist/models/CustomGcode.js +28 -0
  122. package/dist/models/CustomGcode.js.map +1 -0
  123. package/dist/models/Floor.js +33 -0
  124. package/dist/models/Floor.js.map +1 -0
  125. package/dist/models/FloorPrinter.js +29 -0
  126. package/dist/models/FloorPrinter.js.map +1 -0
  127. package/dist/models/PrintCompletion.js +40 -0
  128. package/dist/models/PrintCompletion.js.map +1 -0
  129. package/dist/models/Printer.js +113 -0
  130. package/dist/models/Printer.js.map +1 -0
  131. package/dist/models/ServerSettings.js +168 -0
  132. package/dist/models/ServerSettings.js.map +1 -0
  133. package/dist/models/Settings.js +168 -0
  134. package/dist/models/Settings.js.map +1 -0
  135. package/dist/models/index.js +54 -0
  136. package/dist/models/index.js.map +1 -0
  137. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +49 -0
  138. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -0
  139. package/dist/mongo-migrations/20210907173950-printers-enabled.js +39 -0
  140. package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -0
  141. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +39 -0
  142. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -0
  143. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +60 -0
  144. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -0
  145. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +30 -0
  146. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -0
  147. package/dist/mongo-migrations/20230716065316-user-remove-name.js +30 -0
  148. package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -0
  149. package/dist/nodemon_restart_trigger.js +4 -0
  150. package/dist/nodemon_restart_trigger.js.map +1 -0
  151. package/dist/server.constants.js +99 -0
  152. package/dist/server.constants.js.map +1 -0
  153. package/dist/server.core.js +91 -0
  154. package/dist/server.core.js.map +1 -0
  155. package/dist/server.env.js +225 -0
  156. package/dist/server.env.js.map +1 -0
  157. package/dist/server.host.js +106 -0
  158. package/dist/server.host.js.map +1 -0
  159. package/dist/services/authentication/auth.service.js +136 -0
  160. package/dist/services/authentication/auth.service.js.map +1 -0
  161. package/dist/services/authentication/jwt.service.js +34 -0
  162. package/dist/services/authentication/jwt.service.js.map +1 -0
  163. package/dist/services/authentication/permission.service.js +73 -0
  164. package/dist/services/authentication/permission.service.js.map +1 -0
  165. package/dist/services/authentication/refresh-token.service.js +99 -0
  166. package/dist/services/authentication/refresh-token.service.js.map +1 -0
  167. package/dist/services/authentication/role.service.js +120 -0
  168. package/dist/services/authentication/role.service.js.map +1 -0
  169. package/dist/services/authentication/user.service.js +154 -0
  170. package/dist/services/authentication/user.service.js.map +1 -0
  171. package/dist/services/batch-call.service.js +148 -0
  172. package/dist/services/batch-call.service.js.map +1 -0
  173. package/dist/services/camera-stream.service.js +80 -0
  174. package/dist/services/camera-stream.service.js.map +1 -0
  175. package/dist/services/core/client-bundle.service.js +156 -0
  176. package/dist/services/core/client-bundle.service.js.map +1 -0
  177. package/dist/services/core/config.service.js +26 -0
  178. package/dist/services/core/config.service.js.map +1 -0
  179. package/dist/services/core/github.service.js +74 -0
  180. package/dist/services/core/github.service.js.map +1 -0
  181. package/dist/services/core/logs-manager.service.js +87 -0
  182. package/dist/services/core/logs-manager.service.js.map +1 -0
  183. package/dist/services/core/monsterpi.service.js +38 -0
  184. package/dist/services/core/monsterpi.service.js.map +1 -0
  185. package/dist/services/core/multer.service.js +122 -0
  186. package/dist/services/core/multer.service.js.map +1 -0
  187. package/dist/services/core/server-release.service.js +116 -0
  188. package/dist/services/core/server-release.service.js.map +1 -0
  189. package/dist/services/core/server-update.service.js +73 -0
  190. package/dist/services/core/server-update.service.js.map +1 -0
  191. package/dist/services/core/task-manager.service.js +196 -0
  192. package/dist/services/core/task-manager.service.js.map +1 -0
  193. package/dist/services/core/yaml.service.js +278 -0
  194. package/dist/services/core/yaml.service.js.map +1 -0
  195. package/dist/services/custom-gcode.service.js +48 -0
  196. package/dist/services/custom-gcode.service.js.map +1 -0
  197. package/dist/services/floor.service.js +183 -0
  198. package/dist/services/floor.service.js.map +1 -0
  199. package/dist/services/influxdb-v2/influx-db-v2-base.service.js +45 -0
  200. package/dist/services/influxdb-v2/influx-db-v2-base.service.js.map +1 -0
  201. package/dist/services/interfaces/auth.service.interface.js +6 -0
  202. package/dist/services/interfaces/auth.service.interface.js.map +1 -0
  203. package/dist/services/interfaces/camera-stream.dto.js +109 -0
  204. package/dist/services/interfaces/camera-stream.dto.js.map +1 -0
  205. package/dist/services/interfaces/camera-stream.service.interface.js +6 -0
  206. package/dist/services/interfaces/camera-stream.service.interface.js.map +1 -0
  207. package/dist/services/interfaces/custom-gcode.dto.js +18 -0
  208. package/dist/services/interfaces/custom-gcode.dto.js.map +1 -0
  209. package/dist/services/interfaces/custom-gcode.service.interface.js +6 -0
  210. package/dist/services/interfaces/custom-gcode.service.interface.js.map +1 -0
  211. package/dist/services/interfaces/floor.dto.js +61 -0
  212. package/dist/services/interfaces/floor.dto.js.map +1 -0
  213. package/dist/services/interfaces/floor.service.interface.js +6 -0
  214. package/dist/services/interfaces/floor.service.interface.js.map +1 -0
  215. package/dist/services/interfaces/gcode-analysis.dto.js +6 -0
  216. package/dist/services/interfaces/gcode-analysis.dto.js.map +1 -0
  217. package/dist/services/interfaces/jwt.service.interface.js +6 -0
  218. package/dist/services/interfaces/jwt.service.interface.js.map +1 -0
  219. package/dist/services/interfaces/login.dto.js +16 -0
  220. package/dist/services/interfaces/login.dto.js.map +1 -0
  221. package/dist/services/interfaces/page.interface.js +16 -0
  222. package/dist/services/interfaces/page.interface.js.map +1 -0
  223. package/dist/services/interfaces/permission.dto.js +16 -0
  224. package/dist/services/interfaces/permission.dto.js.map +1 -0
  225. package/dist/services/interfaces/permission.service.interface.js +6 -0
  226. package/dist/services/interfaces/permission.service.interface.js.map +1 -0
  227. package/dist/services/interfaces/printer-file.dto.js +27 -0
  228. package/dist/services/interfaces/printer-file.dto.js.map +1 -0
  229. package/dist/services/interfaces/printer-files.service.interface.js +6 -0
  230. package/dist/services/interfaces/printer-files.service.interface.js.map +1 -0
  231. package/dist/services/interfaces/printer.dto.js +18 -0
  232. package/dist/services/interfaces/printer.dto.js.map +1 -0
  233. package/dist/services/interfaces/printer.service.interface.js +6 -0
  234. package/dist/services/interfaces/printer.service.interface.js.map +1 -0
  235. package/dist/services/interfaces/role-service.interface.js +6 -0
  236. package/dist/services/interfaces/role-service.interface.js.map +1 -0
  237. package/dist/services/interfaces/settings.dto.js +34 -0
  238. package/dist/services/interfaces/settings.dto.js.map +1 -0
  239. package/dist/services/interfaces/settings.service.interface.js +6 -0
  240. package/dist/services/interfaces/settings.service.interface.js.map +1 -0
  241. package/dist/services/interfaces/user-service.interface.js +6 -0
  242. package/dist/services/interfaces/user-service.interface.js.map +1 -0
  243. package/dist/services/interfaces/user.dto.js +39 -0
  244. package/dist/services/interfaces/user.dto.js.map +1 -0
  245. package/dist/services/octoprint/constants/firmware-update-settings.constants.js +32 -0
  246. package/dist/services/octoprint/constants/firmware-update-settings.constants.js.map +1 -0
  247. package/dist/services/octoprint/constants/octoprint-service.constants.js +101 -0
  248. package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -0
  249. package/dist/services/octoprint/constants/octoprint-websocket.constants.js +88 -0
  250. package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -0
  251. package/dist/services/octoprint/octoprint-api.routes.js +192 -0
  252. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -0
  253. package/dist/services/octoprint/octoprint-api.service.js +402 -0
  254. package/dist/services/octoprint/octoprint-api.service.js.map +1 -0
  255. package/dist/services/octoprint/octoprint-sockio.adapter.js +309 -0
  256. package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -0
  257. package/dist/services/octoprint/plugin-base.service.js +102 -0
  258. package/dist/services/octoprint/plugin-base.service.js.map +1 -0
  259. package/dist/services/octoprint/plugin-firmware-update.service.js +104 -0
  260. package/dist/services/octoprint/plugin-firmware-update.service.js.map +1 -0
  261. package/dist/services/octoprint/plugin-repository.cache.js +45 -0
  262. package/dist/services/octoprint/plugin-repository.cache.js.map +1 -0
  263. package/dist/services/octoprint/socket.factory.js +22 -0
  264. package/dist/services/octoprint/socket.factory.js.map +1 -0
  265. package/dist/services/octoprint/utils/api.utils.js +72 -0
  266. package/dist/services/octoprint/utils/api.utils.js.map +1 -0
  267. package/dist/services/orm/floor.service.interface.js +73 -0
  268. package/dist/services/orm/floor.service.interface.js.map +1 -0
  269. package/dist/services/orm/printer.service.interface.js +6 -0
  270. package/dist/services/orm/printer.service.interface.js.map +1 -0
  271. package/dist/services/print-completion.service.js +162 -0
  272. package/dist/services/print-completion.service.js.map +1 -0
  273. package/dist/services/printer-files.service.js +91 -0
  274. package/dist/services/printer-files.service.js.map +1 -0
  275. package/dist/services/printer.service.js +230 -0
  276. package/dist/services/printer.service.js.map +1 -0
  277. package/dist/services/settings.service.js +158 -0
  278. package/dist/services/settings.service.js.map +1 -0
  279. package/dist/services/validators/floor-service.validation.js +60 -0
  280. package/dist/services/validators/floor-service.validation.js.map +1 -0
  281. package/dist/services/validators/print-completion-service.validation.js +20 -0
  282. package/dist/services/validators/print-completion-service.validation.js.map +1 -0
  283. package/dist/services/validators/printer-service.validation.js +48 -0
  284. package/dist/services/validators/printer-service.validation.js.map +1 -0
  285. package/dist/services/validators/settings-service.validation.js +71 -0
  286. package/dist/services/validators/settings-service.validation.js.map +1 -0
  287. package/dist/services/validators/user-service.validation.js +33 -0
  288. package/dist/services/validators/user-service.validation.js.map +1 -0
  289. package/dist/services/validators/yaml-service.validation.js +63 -0
  290. package/dist/services/validators/yaml-service.validation.js.map +1 -0
  291. package/dist/services/yaml.service.js +278 -0
  292. package/dist/services/yaml.service.js.map +1 -0
  293. package/dist/shared.constants.js +15 -0
  294. package/dist/shared.constants.js.map +1 -0
  295. package/dist/state/file-upload-tracker.cache.js +88 -0
  296. package/dist/state/file-upload-tracker.cache.js.map +1 -0
  297. package/dist/state/file.cache.js +99 -0
  298. package/dist/state/file.cache.js.map +1 -0
  299. package/dist/state/files.store.js +132 -0
  300. package/dist/state/files.store.js.map +1 -0
  301. package/dist/state/floor.store.js +99 -0
  302. package/dist/state/floor.store.js.map +1 -0
  303. package/dist/state/printer-events.cache.js +97 -0
  304. package/dist/state/printer-events.cache.js.map +1 -0
  305. package/dist/state/printer-socket.store.js +217 -0
  306. package/dist/state/printer-socket.store.js.map +1 -0
  307. package/dist/state/printer.cache.js +112 -0
  308. package/dist/state/printer.cache.js.map +1 -0
  309. package/dist/state/settings.store.js +154 -0
  310. package/dist/state/settings.store.js.map +1 -0
  311. package/dist/state/socket-io.gateway.js +66 -0
  312. package/dist/state/socket-io.gateway.js.map +1 -0
  313. package/dist/state/test-printer-socket.store.js +91 -0
  314. package/dist/state/test-printer-socket.store.js.map +1 -0
  315. package/dist/state/validation/create-test-printer.validation.js +18 -0
  316. package/dist/state/validation/create-test-printer.validation.js.map +1 -0
  317. package/dist/task.presets.js +50 -0
  318. package/dist/task.presets.js.map +1 -0
  319. package/dist/tasks/boot.task.js +198 -0
  320. package/dist/tasks/boot.task.js.map +1 -0
  321. package/dist/tasks/client-bundle.task.js +32 -0
  322. package/dist/tasks/client-bundle.task.js.map +1 -0
  323. package/dist/tasks/print-completion.socketio.task.js +85 -0
  324. package/dist/tasks/print-completion.socketio.task.js.map +1 -0
  325. package/dist/tasks/printer-file-clean.task.js +72 -0
  326. package/dist/tasks/printer-file-clean.task.js.map +1 -0
  327. package/dist/tasks/printer-websocket-restore.task.js +64 -0
  328. package/dist/tasks/printer-websocket-restore.task.js.map +1 -0
  329. package/dist/tasks/printer-websocket.task.js +43 -0
  330. package/dist/tasks/printer-websocket.task.js.map +1 -0
  331. package/dist/tasks/socketio.task.js +83 -0
  332. package/dist/tasks/socketio.task.js.map +1 -0
  333. package/dist/tasks/software-update.task.js +22 -0
  334. package/dist/tasks/software-update.task.js.map +1 -0
  335. package/dist/tasks.js +48 -0
  336. package/dist/tasks.js.map +1 -0
  337. package/dist/types/express/index.d.js +7 -0
  338. package/dist/types/express/index.d.js.map +1 -0
  339. package/dist/utils/array.util.js +27 -0
  340. package/dist/utils/array.util.js.map +1 -0
  341. package/dist/utils/benchmark.util.js +39 -0
  342. package/dist/utils/benchmark.util.js.map +1 -0
  343. package/dist/utils/cache/key-diff.cache.js +128 -0
  344. package/dist/utils/cache/key-diff.cache.js.map +1 -0
  345. package/dist/utils/correlation-token.util.js +15 -0
  346. package/dist/utils/correlation-token.util.js.map +1 -0
  347. package/dist/utils/crypto.utils.js +29 -0
  348. package/dist/utils/crypto.utils.js.map +1 -0
  349. package/dist/utils/env.utils.js +98 -0
  350. package/dist/utils/env.utils.js.map +1 -0
  351. package/dist/utils/error.utils.js +15 -0
  352. package/dist/utils/error.utils.js.map +1 -0
  353. package/dist/utils/find-predicate.utils.js +18 -0
  354. package/dist/utils/find-predicate.utils.js.map +1 -0
  355. package/dist/utils/fs.utils.js +38 -0
  356. package/dist/utils/fs.utils.js.map +1 -0
  357. package/dist/utils/is-docker.js +40 -0
  358. package/dist/utils/is-docker.js.map +1 -0
  359. package/dist/utils/mapper.utils.js +33 -0
  360. package/dist/utils/mapper.utils.js.map +1 -0
  361. package/dist/utils/metric.utils.js +35 -0
  362. package/dist/utils/metric.utils.js.map +1 -0
  363. package/dist/utils/normalize-url.js +245 -0
  364. package/dist/utils/normalize-url.js.map +1 -0
  365. package/dist/utils/semver.utils.js +18 -0
  366. package/dist/utils/semver.utils.js.map +1 -0
  367. package/dist/utils/time.utils.js +26 -0
  368. package/dist/utils/time.utils.js.map +1 -0
  369. package/dist/utils/url.utils.js +33 -0
  370. package/dist/utils/url.utils.js.map +1 -0
  371. package/dist/utils/websocket.adapter.js +105 -0
  372. package/dist/utils/websocket.adapter.js.map +1 -0
  373. package/migrate-mongo-config.js +45 -0
  374. package/nodemon_restart_trigger.js +1 -0
  375. package/package.json +149 -0
  376. package/src/index.ts +19 -0
  377. package/tsconfig.json +28 -0
@@ -0,0 +1,245 @@
1
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "normalizeUrl", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return normalizeUrl;
10
+ }
11
+ });
12
+ const DATA_URL_DEFAULT_MIME_TYPE = "text/plain";
13
+ const DATA_URL_DEFAULT_CHARSET = "us-ascii";
14
+ const testParameter = (name, filters)=>filters.some((filter)=>filter instanceof RegExp ? filter.test(name) : filter === name);
15
+ const supportedProtocols = new Set([
16
+ "https:",
17
+ "http:",
18
+ "file:"
19
+ ]);
20
+ const hasCustomProtocol = (urlString)=>{
21
+ try {
22
+ const { protocol } = new URL(urlString);
23
+ return protocol.endsWith(":") && !supportedProtocols.has(protocol);
24
+ } catch {
25
+ return false;
26
+ }
27
+ };
28
+ const normalizeDataURL = (urlString, { stripHash })=>{
29
+ const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);
30
+ if (!match) {
31
+ throw new Error(`Invalid URL: ${urlString}`);
32
+ }
33
+ let { type, data, hash } = match.groups;
34
+ const mediaType = type.split(";");
35
+ hash = stripHash ? "" : hash;
36
+ let isBase64 = false;
37
+ if (mediaType[mediaType.length - 1] === "base64") {
38
+ mediaType.pop();
39
+ isBase64 = true;
40
+ }
41
+ // Lowercase MIME type
42
+ const mimeType = mediaType.shift()?.toLowerCase() ?? "";
43
+ const attributes = mediaType.map((attribute)=>{
44
+ let [key, value = ""] = attribute.split("=").map((string)=>string.trim());
45
+ // Lowercase `charset`
46
+ if (key === "charset") {
47
+ value = value.toLowerCase();
48
+ if (value === DATA_URL_DEFAULT_CHARSET) {
49
+ return "";
50
+ }
51
+ }
52
+ return `${key}${value ? `=${value}` : ""}`;
53
+ }).filter(Boolean);
54
+ const normalizedMediaType = [
55
+ ...attributes
56
+ ];
57
+ if (isBase64) {
58
+ normalizedMediaType.push("base64");
59
+ }
60
+ if (normalizedMediaType.length > 0 || mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE) {
61
+ normalizedMediaType.unshift(mimeType);
62
+ }
63
+ return `data:${normalizedMediaType.join(";")},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ""}`;
64
+ };
65
+ function normalizeUrl(urlString, options) {
66
+ options = {
67
+ defaultProtocol: "http",
68
+ normalizeProtocol: true,
69
+ forceHttp: false,
70
+ forceHttps: false,
71
+ stripAuthentication: true,
72
+ stripHash: false,
73
+ stripTextFragment: true,
74
+ stripWWW: true,
75
+ removeQueryParameters: [
76
+ /^utm_\w+/i
77
+ ],
78
+ removeTrailingSlash: true,
79
+ removeSingleSlash: true,
80
+ removeDirectoryIndex: false,
81
+ removeExplicitPort: false,
82
+ sortQueryParameters: true,
83
+ ...options
84
+ };
85
+ // Legacy: Append `:` to the protocol if missing.
86
+ if (typeof options.defaultProtocol === "string" && !options.defaultProtocol.endsWith(":")) {
87
+ options.defaultProtocol = `${options.defaultProtocol}:`;
88
+ }
89
+ urlString = urlString.trim();
90
+ // Data URL
91
+ if (/^data:/i.test(urlString)) {
92
+ return normalizeDataURL(urlString, options);
93
+ }
94
+ if (hasCustomProtocol(urlString)) {
95
+ return urlString;
96
+ }
97
+ const hasRelativeProtocol = urlString.startsWith("//");
98
+ const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
99
+ // Prepend protocol
100
+ if (!isRelativeUrl) {
101
+ urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
102
+ }
103
+ const urlObject = new URL(urlString);
104
+ if (options.forceHttp && options.forceHttps) {
105
+ throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");
106
+ }
107
+ if (options.forceHttp && urlObject.protocol === "https:") {
108
+ urlObject.protocol = "http:";
109
+ }
110
+ if (options.forceHttps && urlObject.protocol === "http:") {
111
+ urlObject.protocol = "https:";
112
+ }
113
+ // Remove auth
114
+ if (options.stripAuthentication) {
115
+ urlObject.username = "";
116
+ urlObject.password = "";
117
+ }
118
+ // Remove hash
119
+ if (options.stripHash) {
120
+ urlObject.hash = "";
121
+ } else if (options.stripTextFragment) {
122
+ urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, "");
123
+ }
124
+ // Remove duplicate slashes if not preceded by a protocol
125
+ // NOTE: This could be implemented using a single negative lookbehind
126
+ // regex, but we avoid that to maintain compatibility with older js engines
127
+ // which do not have support for that feature.
128
+ if (urlObject.pathname) {
129
+ // TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\b[a-z][a-z\d+\-.]{1,50}:)\/{2,}/g, '/');` when Safari supports negative lookbehind.
130
+ // Split the string by occurrences of this protocol regex, and perform
131
+ // duplicate-slash replacement on the strings between those occurrences
132
+ // (if any).
133
+ const protocolRegex = /\b[a-z][a-z\d+\-.]{1,50}:\/\//g;
134
+ let lastIndex = 0;
135
+ let result = "";
136
+ for(;;){
137
+ const match = protocolRegex.exec(urlObject.pathname);
138
+ if (!match) {
139
+ break;
140
+ }
141
+ const protocol = match[0];
142
+ const protocolAtIndex = match.index;
143
+ const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex);
144
+ result += intermediate.replace(/\/{2,}/g, "/");
145
+ result += protocol;
146
+ lastIndex = protocolAtIndex + protocol.length;
147
+ }
148
+ const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length);
149
+ result += remnant.replace(/\/{2,}/g, "/");
150
+ urlObject.pathname = result;
151
+ }
152
+ // Decode URI octets
153
+ if (urlObject.pathname) {
154
+ try {
155
+ urlObject.pathname = decodeURI(urlObject.pathname);
156
+ } catch {}
157
+ }
158
+ // Remove directory index
159
+ if (options.removeDirectoryIndex === true) {
160
+ options.removeDirectoryIndex = [
161
+ /^index\.[a-z]+$/
162
+ ];
163
+ }
164
+ if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
165
+ let pathComponents = urlObject.pathname.split("/");
166
+ const lastComponent = pathComponents[pathComponents.length - 1];
167
+ if (testParameter(lastComponent, options.removeDirectoryIndex)) {
168
+ pathComponents = pathComponents.slice(0, -1);
169
+ urlObject.pathname = pathComponents.slice(1).join("/") + "/";
170
+ }
171
+ }
172
+ if (urlObject.hostname) {
173
+ // Remove trailing dot
174
+ urlObject.hostname = urlObject.hostname.replace(/\.$/, "");
175
+ // Remove `www.`
176
+ if (options.stripWWW && /^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(urlObject.hostname)) {
177
+ // Each label should be max 63 at length (min: 1).
178
+ // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
179
+ // Each TLD should be up to 63 characters long (min: 2).
180
+ // It is technically possible to have a single character TLD, but none currently exist.
181
+ urlObject.hostname = urlObject.hostname.replace(/^www\./, "");
182
+ }
183
+ }
184
+ // Remove query unwanted parameters
185
+ if (Array.isArray(options.removeQueryParameters)) {
186
+ // eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
187
+ for (const key of [
188
+ ...urlObject.searchParams.keys()
189
+ ]){
190
+ if (testParameter(key, options.removeQueryParameters)) {
191
+ urlObject.searchParams.delete(key);
192
+ }
193
+ }
194
+ }
195
+ if (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {
196
+ urlObject.search = "";
197
+ }
198
+ // Keep wanted query parameters
199
+ if (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {
200
+ // eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
201
+ for (const key of [
202
+ ...urlObject.searchParams.keys()
203
+ ]){
204
+ if (!testParameter(key, options.keepQueryParameters)) {
205
+ urlObject.searchParams.delete(key);
206
+ }
207
+ }
208
+ }
209
+ // Sort query parameters
210
+ if (options.sortQueryParameters) {
211
+ urlObject.searchParams.sort();
212
+ // Calling `.sort()` encodes the search parameters, so we need to decode them again.
213
+ try {
214
+ urlObject.search = decodeURIComponent(urlObject.search);
215
+ } catch {}
216
+ }
217
+ if (options.removeTrailingSlash) {
218
+ urlObject.pathname = urlObject.pathname.replace(/\/$/, "");
219
+ }
220
+ // Remove an explicit port number, excluding a default port number, if applicable
221
+ if (options.removeExplicitPort && urlObject.port) {
222
+ urlObject.port = "";
223
+ }
224
+ const oldUrlString = urlString;
225
+ // Take advantage of many of the Node `url` normalizations
226
+ urlString = urlObject.toString();
227
+ if (!options.removeSingleSlash && urlObject.pathname === "/" && !oldUrlString.endsWith("/") && urlObject.hash === "") {
228
+ urlString = urlString.replace(/\/$/, "");
229
+ }
230
+ // Remove ending `/` unless removeSingleSlash is false
231
+ if ((options.removeTrailingSlash || urlObject.pathname === "/") && urlObject.hash === "" && options.removeSingleSlash) {
232
+ urlString = urlString.replace(/\/$/, "");
233
+ }
234
+ // Restore relative protocol, if applicable
235
+ if (hasRelativeProtocol && !options.normalizeProtocol) {
236
+ urlString = urlString.replace(/^http:\/\//, "//");
237
+ }
238
+ // Remove http/https
239
+ if (options.stripProtocol) {
240
+ urlString = urlString.replace(/^(?:https?:)?\/\//, "");
241
+ }
242
+ return urlString;
243
+ }
244
+
245
+ //# sourceMappingURL=normalize-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/normalize-url.ts"],"names":["normalizeUrl","DATA_URL_DEFAULT_MIME_TYPE","DATA_URL_DEFAULT_CHARSET","testParameter","name","filters","some","filter","RegExp","test","supportedProtocols","Set","hasCustomProtocol","urlString","protocol","URL","endsWith","has","normalizeDataURL","stripHash","match","exec","Error","type","data","hash","groups","mediaType","split","isBase64","length","pop","mimeType","shift","toLowerCase","attributes","map","attribute","key","value","string","trim","Boolean","normalizedMediaType","push","unshift","join","options","defaultProtocol","normalizeProtocol","forceHttp","forceHttps","stripAuthentication","stripTextFragment","stripWWW","removeQueryParameters","removeTrailingSlash","removeSingleSlash","removeDirectoryIndex","removeExplicitPort","sortQueryParameters","hasRelativeProtocol","startsWith","isRelativeUrl","replace","urlObject","username","password","pathname","protocolRegex","lastIndex","result","protocolAtIndex","index","intermediate","slice","remnant","decodeURI","Array","isArray","pathComponents","lastComponent","hostname","searchParams","keys","delete","keepQueryParameters","search","sort","decodeURIComponent","port","oldUrlString","toString","stripProtocol"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "checkVersionSatisfiesMinimum", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return checkVersionSatisfiesMinimum;
9
+ }
10
+ });
11
+ const _semver = require("semver");
12
+ function checkVersionSatisfiesMinimum(newVersion, minimumVersion) {
13
+ const comparison = (0, _semver.compare)(newVersion, minimumVersion);
14
+ // Values 0 or 1 mean the client version is less than the minimum and should be force updated
15
+ return comparison > -1;
16
+ }
17
+
18
+ //# sourceMappingURL=semver.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/semver.utils.ts"],"names":["checkVersionSatisfiesMinimum","newVersion","minimumVersion","comparison","compare"],"mappings":";;;;+BAEgBA;;;eAAAA;;;wBAFQ;AAEjB,SAASA,6BAA6BC,UAAkB,EAAEC,cAAsB;IACrF,MAAMC,aAAaC,IAAAA,eAAO,EAACH,YAAYC;IACvC,6FAA6F;IAC7F,OAAOC,aAAa,CAAC;AACvB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ isValidDate: function() {
13
+ return isValidDate;
14
+ },
15
+ sleep: function() {
16
+ return sleep;
17
+ }
18
+ });
19
+ async function sleep(ms = 2000) {
20
+ return new Promise((resolve)=>setTimeout(resolve, ms));
21
+ }
22
+ function isValidDate(date) {
23
+ return date instanceof Date && !isNaN(date);
24
+ }
25
+
26
+ //# sourceMappingURL=time.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/time.utils.ts"],"names":["isValidDate","sleep","ms","Promise","resolve","setTimeout","date","Date","isNaN"],"mappings":";;;;;;;;;;;IAIgBA,WAAW;eAAXA;;IAJMC,KAAK;eAALA;;;AAAf,eAAeA,MAAMC,KAAK,IAAI;IACnC,OAAO,IAAIC,QAAQ,CAACC,UAAYC,WAAWD,SAASF;AACtD;AAEO,SAASF,YAAYM,IAAI;IAC9B,OAAOA,gBAAgBC,QAAQ,CAACC,MAAMF;AACxC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ httpToWsUrl: function() {
13
+ return httpToWsUrl;
14
+ },
15
+ normalizeURLWithProtocol: function() {
16
+ return normalizeURLWithProtocol;
17
+ }
18
+ });
19
+ const _normalizeurl = require("./normalize-url");
20
+ function httpToWsUrl(url, protocol = "ws") {
21
+ const wsUrl = new URL("/sockjs/websocket", (0, _normalizeurl.normalizeUrl)(url));
22
+ wsUrl.protocol = `${protocol}`;
23
+ wsUrl.pathname = "/sockjs/websocket";
24
+ return wsUrl;
25
+ }
26
+ function normalizeURLWithProtocol(printerURL) {
27
+ if (!printerURL.startsWith("http://") && !printerURL.startsWith("https://")) {
28
+ printerURL = `http://${printerURL}`;
29
+ }
30
+ return (0, _normalizeurl.normalizeUrl)(printerURL);
31
+ }
32
+
33
+ //# sourceMappingURL=url.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/url.utils.ts"],"names":["httpToWsUrl","normalizeURLWithProtocol","url","protocol","wsUrl","URL","normalizeUrl","pathname","printerURL","startsWith"],"mappings":";;;;;;;;;;;IAEgBA,WAAW;eAAXA;;IAOAC,wBAAwB;eAAxBA;;;8BATa;AAEtB,SAASD,YAAYE,GAAW,EAAEC,WAAW,IAAI;IACtD,MAAMC,QAAQ,IAAIC,IAAI,qBAAqBC,IAAAA,0BAAY,EAACJ;IACxDE,MAAMD,QAAQ,GAAG,CAAC,EAAEA,SAAS,CAAC;IAC9BC,MAAMG,QAAQ,GAAG;IACjB,OAAOH;AACT;AAEO,SAASH,yBAAyBO,UAAkB;IACzD,IAAI,CAACA,WAAWC,UAAU,CAAC,cAAc,CAACD,WAAWC,UAAU,CAAC,aAAa;QAC3ED,aAAa,CAAC,OAAO,EAAEA,WAAW,CAAC;IACrC;IAEA,OAAOF,IAAAA,0BAAY,EAACE;AACtB"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "WebsocketAdapter", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return WebsocketAdapter;
9
+ }
10
+ });
11
+ const _serverconstants = require("../server.constants");
12
+ const _ws = require("ws");
13
+ class WebsocketAdapter {
14
+ socket;
15
+ #logger;
16
+ constructor({ loggerFactory }){
17
+ this.#logger = loggerFactory(WebsocketAdapter.name);
18
+ }
19
+ get isOpened() {
20
+ return this.socket?.readyState === _ws.WebSocket.OPEN;
21
+ }
22
+ close() {
23
+ this.socket?.close();
24
+ delete this.socket;
25
+ }
26
+ /**
27
+ * @protected
28
+ * Open a WebSocket connection.
29
+ *
30
+ * @param {string|URL} url - The URL to connect to.
31
+ * @returns {void}
32
+ */ open(url) {
33
+ this.socket = new _ws.WebSocket(url, {
34
+ handshakeTimeout: _serverconstants.AppConstants.defaultWebsocketHandshakeTimeout
35
+ });
36
+ this.socket.onopen = (event)=>this.onOpen(event);
37
+ this.socket.onerror = (error)=>this.onError(error);
38
+ this.socket.onclose = (event)=>this.onClose(event);
39
+ this.socket.onmessage = (message)=>this.onMessage(message.data);
40
+ }
41
+ /**
42
+ * @protected
43
+ * Send a message through the WebSocket connection.
44
+ *
45
+ * @param {string} payload - The message payload to send.
46
+ * @returns {Promise<void>} A promise that resolves when the message is sent successfully.
47
+ */ async sendMessage(payload) {
48
+ if (!this.isOpened || !this.socket) {
49
+ this.#logger.error("Websocket is not opened, cant send a message");
50
+ return;
51
+ }
52
+ return await new Promise((resolve, reject)=>{
53
+ this.socket.send(payload, (error)=>{
54
+ if (error) reject(error);
55
+ resolve();
56
+ });
57
+ });
58
+ }
59
+ /**
60
+ * Handle error event.
61
+ * @protected
62
+ * @abstract
63
+ * @param {Event} error - The error event object.
64
+ * @returns {Promise<void> | void} A promise that resolves when the error handling is complete, or void if no promise is returned.
65
+ */ onError(error) {}
66
+ /**
67
+ * Handle after opened event.
68
+ * @protected
69
+ * @abstract
70
+ * @param {Event} event - The event object.
71
+ * @returns {Promise<void> | void} A promise that resolves when the after opened handling is complete, or void if no promise is returned.
72
+ */ afterOpened(event) {}
73
+ /**
74
+ * Handle after closed event.
75
+ * @protected
76
+ * @abstract
77
+ * @param {CloseEvent} event - The event object.
78
+ * @returns {Promise<void> | void} A promise that resolves when the after closed handling is complete, or void if no promise is returned.
79
+ */ afterClosed(event) {}
80
+ /**
81
+ * Handle message event.
82
+ * @protected
83
+ * @abstract
84
+ * @param {Data} event - The event object.
85
+ * @returns {Promise<void> | void} A promise that resolves when the message handling is complete, or void if no promise is returned.
86
+ */ onMessage(event) {}
87
+ /**
88
+ * Handle open event.
89
+ * @private
90
+ * @param {Event} event - The event object.
91
+ * @returns {Promise<void>} A promise that resolves when the open handling is complete.
92
+ */ async onOpen(event) {
93
+ await this.afterOpened(event);
94
+ }
95
+ /**
96
+ * Handle close event.
97
+ * @private
98
+ * @param {CloseEvent} event - The event object.
99
+ * @returns {Promise<void>} A promise that resolves when the close handling is complete.
100
+ */ async onClose(event) {
101
+ await this.afterClosed(event);
102
+ }
103
+ }
104
+
105
+ //# sourceMappingURL=websocket.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/websocket.adapter.ts"],"names":["WebsocketAdapter","socket","logger","constructor","loggerFactory","name","isOpened","readyState","WebSocket","OPEN","close","open","url","handshakeTimeout","AppConstants","defaultWebsocketHandshakeTimeout","onopen","event","onOpen","onerror","error","onError","onclose","onClose","onmessage","message","onMessage","data","sendMessage","payload","Promise","resolve","reject","send","afterOpened","afterClosed"],"mappings":";;;;+BAKaA;;;eAAAA;;;iCALgB;oBAC6C;AAInE,MAAMA;IACXC,OAAmB;IACnB,CAACC,MAAM,CAAgB;IAEvBC,YAAY,EAAEC,aAAa,EAAqC,CAAE;QAChE,IAAI,CAAC,CAACF,MAAM,GAAGE,cAAcJ,iBAAiBK,IAAI;IACpD;IAEA,IAAIC,WAAW;QACb,OAAO,IAAI,CAACL,MAAM,EAAEM,eAAeC,aAAS,CAACC,IAAI;IACnD;IAEAC,QAAQ;QACN,IAAI,CAACT,MAAM,EAAES;QACb,OAAO,IAAI,CAACT,MAAM;IACpB;IAEA;;;;;;GAMC,GACDU,KAAKC,GAAiB,EAAQ;QAC5B,IAAI,CAACX,MAAM,GAAG,IAAIO,aAAS,CAACI,KAAK;YAAEC,kBAAkBC,6BAAY,CAACC,gCAAgC;QAAC;QACnG,IAAI,CAACd,MAAM,CAACe,MAAM,GAAG,CAACC,QAAU,IAAI,CAACC,MAAM,CAACD;QAC5C,IAAI,CAAChB,MAAM,CAACkB,OAAO,GAAG,CAACC,QAAU,IAAI,CAACC,OAAO,CAACD;QAC9C,IAAI,CAACnB,MAAM,CAACqB,OAAO,GAAG,CAACL,QAAU,IAAI,CAACM,OAAO,CAACN;QAC9C,IAAI,CAAChB,MAAM,CAACuB,SAAS,GAAG,CAACC,UAAY,IAAI,CAACC,SAAS,CAACD,QAAQE,IAAI;IAClE;IAEA;;;;;;GAMC,GACD,MAAMC,YAAYC,OAAe,EAAiB;QAChD,IAAI,CAAC,IAAI,CAACvB,QAAQ,IAAI,CAAC,IAAI,CAACL,MAAM,EAAE;YAClC,IAAI,CAAC,CAACC,MAAM,CAACkB,KAAK,CAAC;YACnB;QACF;QACA,OAAO,MAAM,IAAIU,QAAQ,CAACC,SAASC;YACjC,IAAI,CAAC/B,MAAM,CAAEgC,IAAI,CAACJ,SAAS,CAACT;gBAC1B,IAAIA,OAAOY,OAAOZ;gBAClBW;YACF;QACF;IACF;IAEA;;;;;;GAMC,GACDV,QAAQD,KAAiB,EAAwB,CAAC;IAElD;;;;;;GAMC,GACDc,YAAYjB,KAAc,EAAwB,CAAC;IAEnD;;;;;;GAMC,GACDkB,YAAYlB,KAAiB,EAAwB,CAAC;IAEtD;;;;;;GAMC,GACDS,UAAUT,KAAW,EAAwB,CAAC;IAE9C;;;;;GAKC,GACD,MAAMC,OAAOD,KAAc,EAAiB;QAC1C,MAAM,IAAI,CAACiB,WAAW,CAACjB;IACzB;IAEA;;;;;GAKC,GACD,MAAMM,QAAQN,KAAiB,EAAiB;QAC9C,MAAM,IAAI,CAACkB,WAAW,CAAClB;IACzB;AACF"}
@@ -0,0 +1,45 @@
1
+ // In this file you can configure migrate-mongo
2
+ const { setupEnvConfig, fetchMongoDBConnectionString } = require("./dist/server.env");
3
+
4
+ if (!process.env.MONGO) {
5
+ setupEnvConfig();
6
+ }
7
+
8
+ const mongoDbString = fetchMongoDBConnectionString();
9
+
10
+ if (!mongoDbString) {
11
+ throw new Error("Cant migrate as the MONGO= environment variable was not resolved.");
12
+ }
13
+
14
+ const config = {
15
+ mongodb: {
16
+ url: mongoDbString,
17
+
18
+ // Dont override this unless you know what you are doing
19
+ // databaseName: "fdm-monster",
20
+
21
+ options: {
22
+ useNewUrlParser: true, // removes a deprecation warning when connecting
23
+ useUnifiedTopology: true, // removes a deprecating warning when connecting
24
+ // connectTimeoutMS: 3600000, // increase connection timeout to 1 hour
25
+ // socketTimeoutMS: 3600000, // increase socket timeout to 1 hour
26
+ },
27
+ },
28
+
29
+ // The migrations dir, can be a relative or absolute path. Only edit this when really necessary.
30
+ migrationsDir: "dist/mongo-migrations",
31
+
32
+ // The mongodb collection where the applied changes are stored. Only edit this when really necessary.
33
+ changelogCollectionName: "_migrations",
34
+
35
+ // The file extension to create migrations and search for in migration dir
36
+ migrationFileExtension: ".js",
37
+
38
+ // Enable the algorithm to create a checksum of the file contents and use that in the comparison to determine
39
+ // if the file should be run. Requires that scripts are coded to be run multiple times.
40
+ useFileHash: false,
41
+ moduleSystem: "commonjs",
42
+ };
43
+
44
+ // Return the config as a promise
45
+ module.exports = config;
@@ -0,0 +1 @@
1
+ '// Restart file for nodemon'
package/package.json ADDED
@@ -0,0 +1,149 @@
1
+ {
2
+ "name": "@fdm-monster/server",
3
+ "author": "David Zwart",
4
+ "license": "AGPL-3.0-or-later",
5
+ "private": false,
6
+ "version": "1.5.0-rc1",
7
+ "description": "FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.",
8
+ "main": "src/index.ts",
9
+ "scripts": {
10
+ "dev": "concurrently \"yarn build:watch\" \"yarn watch-dev\"",
11
+ "watch-dev": "cross-env NODE_ENV=development nodemon --watch \"dist/**/*\" -e js ./dist/index.js",
12
+ "build": "swc src -d dist",
13
+ "build:watch": "swc src -w -d dist",
14
+ "start:dev": "ts-node src/index.ts",
15
+ "start": "cross-env NODE_ENV=production node dist/index.js",
16
+ "migration:create": "migrate-mongo create printer-remove-sortindex",
17
+ "migration:up": "migrate-mongo up",
18
+ "migration:down": "migrate-mongo down",
19
+ "migration:status": "migrate-mongo status",
20
+ "format": "prettier --write \"src/**/*.js\" \"test/**/*.js\"",
21
+ "swc": "swc",
22
+ "tsc": "tsc --noEmit",
23
+ "test": "jest --forceExit",
24
+ "test:cov": "jest --forceExit --coverage",
25
+ "cov:show": "./coverage/lcov-report/index.html"
26
+ },
27
+ "repository": "https://github.com/fdm-monster/fdm-monster",
28
+ "keywords": [
29
+ "fdm-monster",
30
+ "fdm-connector",
31
+ "octoprint",
32
+ "fdm",
33
+ "3d printing",
34
+ "pi",
35
+ "node",
36
+ "vue"
37
+ ],
38
+ "dependencies": {
39
+ "@fdm-monster/client": "1.3.7",
40
+ "@influxdata/influxdb-client": "1.33.2",
41
+ "@sentry/node": "7.73.0",
42
+ "adm-zip": "0.5.10",
43
+ "awilix": "8.0.1",
44
+ "awilix-express": "8.0.0",
45
+ "axios": "1.5.1",
46
+ "bcryptjs": "2.4.3",
47
+ "cache-manager": "4.1.0",
48
+ "class-validator": "0.14.0",
49
+ "connect-history-api-fallback": "2.0.0",
50
+ "cookie-parser": "1.4.6",
51
+ "cors": "2.8.5",
52
+ "dotenv": "16.3.1",
53
+ "eventemitter2": "6.4.9",
54
+ "express": "4.18.2",
55
+ "form-data": "4.0.0",
56
+ "got": "11.8.6",
57
+ "helmet": "7.0.0",
58
+ "js-yaml": "4.1.0",
59
+ "jsonwebtoken": "9.0.2",
60
+ "lodash": "4.17.21",
61
+ "luxon": "3.4.3",
62
+ "migrate-mongo": "11.0.0",
63
+ "mongoose": "6.12.0",
64
+ "mqtt": "5.1.0",
65
+ "multer": "1.4.5-lts.1",
66
+ "node-input-validator": "4.5.1",
67
+ "nodemon": "3.0.1",
68
+ "octokit": "3.1.1",
69
+ "passport": "0.6.0",
70
+ "passport-anonymous": "1.0.1",
71
+ "passport-jwt": "4.0.1",
72
+ "reflect-metadata": "0.1.13",
73
+ "semver": "7.5.4",
74
+ "simple-git": "3.20.0",
75
+ "socket.io": "4.7.2",
76
+ "toad-scheduler": "3.0.0",
77
+ "uuid": "9.0.1",
78
+ "winston": "3.11.0",
79
+ "ws": "8.14.2"
80
+ },
81
+ "devDependencies": {
82
+ "@lcov-viewer/cli": "1.3.0",
83
+ "@lcov-viewer/istanbul-report": "1.4.0",
84
+ "@swc/cli": "0.1.62",
85
+ "@swc/core": "1.3.92",
86
+ "@swc/jest": "0.2.29",
87
+ "@types/adm-zip": "0.5.2",
88
+ "@types/bcryptjs": "2.4.4",
89
+ "@types/cache-manager": "4.0.3",
90
+ "@types/connect-history-api-fallback": "1.5.1",
91
+ "@types/cookie-parser": "1.4.4",
92
+ "@types/express": "4.17.18",
93
+ "@types/express-session": "1.17.8",
94
+ "@types/jest": "29.5.5",
95
+ "@types/js-yaml": "4.0.6",
96
+ "@types/lodash": "4.14.199",
97
+ "@types/luxon": "3.3.2",
98
+ "@types/migrate-mongo": "10.0.2",
99
+ "@types/multer": "1.4.8",
100
+ "@types/node": "20.8.3",
101
+ "@types/passport-anonymous": "1.0.3",
102
+ "@types/passport-jwt": "3.0.10",
103
+ "@types/semver": "7.5.3",
104
+ "@types/supertest": "2.0.14",
105
+ "@types/uuid": "9.0.5",
106
+ "chokidar": "3.5.3",
107
+ "concurrently": "8.2.1",
108
+ "cross-env": "7.0.3",
109
+ "eslint": "8.51.0",
110
+ "eslint-config-airbnb-base": "15.0.0",
111
+ "eslint-config-prettier": "9.0.0",
112
+ "eslint-config-standard": "17.1.0",
113
+ "eslint-plugin-import": "2.28.1",
114
+ "eslint-plugin-node": "11.1.0",
115
+ "eslint-plugin-prettier": "4.2.1",
116
+ "eslint-plugin-promise": "6.1.1",
117
+ "express-list-routes": "1.1.5",
118
+ "jest": "29.7.0",
119
+ "jest-27-expect-message": "1.1.0",
120
+ "mongodb-memory-server": "9.0.0",
121
+ "nock": "13.3.3",
122
+ "prettier": "2.8.8",
123
+ "supertest": "6.3.3",
124
+ "ts-node": "10.9.1",
125
+ "typescript": "5.2.2"
126
+ },
127
+ "resolutions": {
128
+ "got": "11.8.6"
129
+ },
130
+ "ignore-engines": false,
131
+ "engine-strict": true,
132
+ "engines": {
133
+ "node": ">= 18.0.0",
134
+ "npm": ">= 8.1.4",
135
+ "yarn": ">= 1.22.10"
136
+ },
137
+ "nodemonConfig": {
138
+ "verbose": false,
139
+ "ignore": [
140
+ ".github/*",
141
+ "docs/*",
142
+ "media",
143
+ "test/*",
144
+ "views/*",
145
+ "docker/*"
146
+ ],
147
+ "delay": 100
148
+ }
149
+ }