@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,225 @@
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
+ ensureMongoDBConnectionStringSet: function() {
13
+ return ensureMongoDBConnectionStringSet;
14
+ },
15
+ ensurePortSet: function() {
16
+ return ensurePortSet;
17
+ },
18
+ fetchMongoDBConnectionString: function() {
19
+ return fetchMongoDBConnectionString;
20
+ },
21
+ fetchServerPort: function() {
22
+ return fetchServerPort;
23
+ },
24
+ isEnvProd: function() {
25
+ return isEnvProd;
26
+ },
27
+ runMigrations: function() {
28
+ return runMigrations;
29
+ },
30
+ setupEnvConfig: function() {
31
+ return setupEnvConfig;
32
+ },
33
+ setupSentry: function() {
34
+ return setupSentry;
35
+ }
36
+ });
37
+ const _migratemongo = require("migrate-mongo");
38
+ const _path = require("path");
39
+ const _child_process = require("child_process");
40
+ const _node = /*#__PURE__*/ _interop_require_wildcard(require("@sentry/node"));
41
+ const _dotenv = require("dotenv");
42
+ const _serverconstants = require("./server.constants");
43
+ const _logger = require("./handlers/logger");
44
+ const _envutils = require("./utils/env.utils");
45
+ const _errorutils = require("./utils/error.utils");
46
+ const _fsutils = require("./utils/fs.utils");
47
+ function _getRequireWildcardCache(nodeInterop) {
48
+ if (typeof WeakMap !== "function") return null;
49
+ var cacheBabelInterop = new WeakMap();
50
+ var cacheNodeInterop = new WeakMap();
51
+ return (_getRequireWildcardCache = function(nodeInterop) {
52
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
53
+ })(nodeInterop);
54
+ }
55
+ function _interop_require_wildcard(obj, nodeInterop) {
56
+ if (!nodeInterop && obj && obj.__esModule) {
57
+ return obj;
58
+ }
59
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
60
+ return {
61
+ default: obj
62
+ };
63
+ }
64
+ var cache = _getRequireWildcardCache(nodeInterop);
65
+ if (cache && cache.has(obj)) {
66
+ return cache.get(obj);
67
+ }
68
+ var newObj = {};
69
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
70
+ for(var key in obj){
71
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
72
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
73
+ if (desc && (desc.get || desc.set)) {
74
+ Object.defineProperty(newObj, key, desc);
75
+ } else {
76
+ newObj[key] = obj[key];
77
+ }
78
+ }
79
+ }
80
+ newObj.default = obj;
81
+ if (cache) {
82
+ cache.set(obj, newObj);
83
+ }
84
+ return newObj;
85
+ }
86
+ const logger = new _logger.LoggerService("FDM-Environment", false);
87
+ // Constants and definition
88
+ const instructionsReferralURL = "https://github.com/fdm-monster/fdm-monster/blob/master/README.md";
89
+ const packageJsonPath = (0, _path.join)((0, _fsutils.superRootPath)(), "./package.json");
90
+ const dotEnvPath = (0, _path.join)((0, _fsutils.superRootPath)(), "./.env");
91
+ function isEnvTest() {
92
+ return process.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultTestEnv;
93
+ }
94
+ function isEnvProd() {
95
+ return process.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultProductionEnv;
96
+ }
97
+ /**
98
+ * Set and write the environment name to file, if applicable
99
+
100
+ */ function ensureNodeEnvSet() {
101
+ const environment = process.env[_serverconstants.AppConstants.NODE_ENV_KEY];
102
+ if (!environment || !_serverconstants.AppConstants.knownEnvNames.includes(environment)) {
103
+ const newEnvName = _serverconstants.AppConstants.defaultProductionEnv;
104
+ process.env[_serverconstants.AppConstants.NODE_ENV_KEY] = newEnvName;
105
+ logger.warn(`NODE_ENV=${environment} was not set, or not known. Defaulting to NODE_ENV=${newEnvName}`);
106
+ } else {
107
+ logger.log(`✓ NODE_ENV variable correctly set (${environment})!`);
108
+ }
109
+ }
110
+ /**
111
+ * Ensures that `process.env[AppConstants.VERSION_KEY]` is never undefined
112
+ */ function ensureEnvNpmVersionSet() {
113
+ const packageJsonVersion = require(packageJsonPath).version;
114
+ if (!process.env[_serverconstants.AppConstants.VERSION_KEY]) {
115
+ process.env[_serverconstants.AppConstants.VERSION_KEY] = packageJsonVersion;
116
+ process.env[_serverconstants.AppConstants.NON_NPM_MODE_KEY] = "true";
117
+ logger.log(`✓ Running server version ${process.env[_serverconstants.AppConstants.VERSION_KEY]} in non-NPM mode!`);
118
+ } else {
119
+ logger.debug(`✓ Running server version ${process.env[_serverconstants.AppConstants.VERSION_KEY]} in NPM mode!`);
120
+ }
121
+ if (process.env[_serverconstants.AppConstants.VERSION_KEY] !== packageJsonVersion) {
122
+ process.env[_serverconstants.AppConstants.VERSION_KEY] = packageJsonVersion;
123
+ logger.debug(`~ Had to synchronize FDM version to '${packageJsonVersion}' as it was outdated.`);
124
+ }
125
+ }
126
+ function removePm2Service(reason) {
127
+ logger.error(`Removing PM2 service as Server failed to start: ${reason}`);
128
+ (0, _child_process.execSync)(`pm2 delete ${_serverconstants.AppConstants.pm2ServiceName}`);
129
+ }
130
+ function setupPackageJsonVersionOrThrow() {
131
+ const result = (0, _envutils.verifyPackageJsonRequirements)((0, _fsutils.superRootPath)());
132
+ if (!result) {
133
+ if ((0, _envutils.isPm2)()) {
134
+ // TODO test this works under docker as well
135
+ removePm2Service("didnt pass startup validation (package.json)");
136
+ }
137
+ throw new Error(`Aborting server.`);
138
+ }
139
+ }
140
+ /**
141
+ * Print out instructions URL
142
+ */ function printInstructionsURL() {
143
+ logger.log(`Please make sure to read ${instructionsReferralURL} on how to configure your environment correctly.`);
144
+ }
145
+ function fetchMongoDBConnectionString() {
146
+ if (!process.env[_serverconstants.AppConstants.MONGO_KEY]) {
147
+ logger.debug(`~ ${_serverconstants.AppConstants.MONGO_KEY} environment variable is not set. Assuming default: ${_serverconstants.AppConstants.MONGO_KEY}=${_serverconstants.AppConstants.defaultMongoStringUnauthenticated}`);
148
+ printInstructionsURL();
149
+ process.env[_serverconstants.AppConstants.MONGO_KEY] = _serverconstants.AppConstants.defaultMongoStringUnauthenticated;
150
+ }
151
+ return process.env[_serverconstants.AppConstants.MONGO_KEY];
152
+ }
153
+ function fetchServerPort() {
154
+ let port = process.env[_serverconstants.AppConstants.SERVER_PORT_KEY];
155
+ if (Number.isNaN(parseInt(port))) {
156
+ // Update config immediately
157
+ process.env[_serverconstants.AppConstants.SERVER_PORT_KEY] = _serverconstants.AppConstants.defaultServerPort.toString();
158
+ port = process.env[_serverconstants.AppConstants.SERVER_PORT_KEY];
159
+ }
160
+ return port;
161
+ }
162
+ function ensureMongoDBConnectionStringSet() {
163
+ let dbConnectionString = process.env[_serverconstants.AppConstants.MONGO_KEY];
164
+ if (!dbConnectionString) {
165
+ fetchMongoDBConnectionString();
166
+ } else {
167
+ logger.log(`✓ ${_serverconstants.AppConstants.MONGO_KEY} environment variable set!`);
168
+ }
169
+ }
170
+ function setupSentry() {
171
+ const sentryDsnToken = (0, _envutils.getEnvOrDefault)(_serverconstants.AppConstants.sentryCustomDsnToken, _serverconstants.AppConstants.sentryCustomDsnDefault);
172
+ _node.init({
173
+ dsn: sentryDsnToken,
174
+ environment: process.env.NODE_ENV,
175
+ release: process.env.npm_package_version,
176
+ enabled: !isEnvTest(),
177
+ tracesSampleRate: (0, _envutils.isProductionEnvironment)() ? 0.25 : 1.0
178
+ });
179
+ process.on("unhandledRejection", (e)=>{
180
+ const message = `Unhandled rejection error - ${(0, _errorutils.errorSummary)(e)}`;
181
+ logger.error(message);
182
+ // The server must not crash
183
+ _node.captureException(e);
184
+ });
185
+ }
186
+ function ensurePortSet() {
187
+ fetchServerPort();
188
+ if (!process.env[_serverconstants.AppConstants.SERVER_PORT_KEY]) {
189
+ logger.log(`~ ${_serverconstants.AppConstants.SERVER_PORT_KEY} environment variable is not set. Assuming default: ${_serverconstants.AppConstants.SERVER_PORT_KEY}=${_serverconstants.AppConstants.defaultServerPort}.`);
190
+ printInstructionsURL();
191
+ process.env[_serverconstants.AppConstants.SERVER_PORT_KEY] = _serverconstants.AppConstants.defaultServerPort.toString();
192
+ }
193
+ }
194
+ function setupEnvConfig(skipDotEnv = false) {
195
+ if (!skipDotEnv) {
196
+ // This needs to be CWD of app.js, so be careful not to move this call.
197
+ (0, _dotenv.config)({
198
+ path: dotEnvPath
199
+ });
200
+ logger.log("✓ Parsed environment and (optional) .env file");
201
+ }
202
+ ensureNodeEnvSet();
203
+ setupPackageJsonVersionOrThrow();
204
+ ensureEnvNpmVersionSet();
205
+ setupSentry();
206
+ ensureMongoDBConnectionStringSet();
207
+ ensurePortSet();
208
+ }
209
+ async function runMigrations(db, client) {
210
+ const migrationsStatus = await (0, _migratemongo.status)(db);
211
+ const pendingMigrations = migrationsStatus.filter((m)=>m.appliedAt === "PENDING");
212
+ if (pendingMigrations.length) {
213
+ logger.log(`! MongoDB has ${pendingMigrations.length} migrations left to run (${migrationsStatus.length} migrations in total)`);
214
+ } else {
215
+ logger.log(`✓ Mongo Database is up to date [${migrationsStatus.length} migration applied]`);
216
+ }
217
+ const migrationResult = await (0, _migratemongo.up)(db, client);
218
+ if (migrationResult?.length > 0) {
219
+ logger.log(`Applied ${migrationResult.length} migrations successfully`, migrationResult);
220
+ } else {
221
+ logger.log("No migrations were run");
222
+ }
223
+ }
224
+
225
+ //# sourceMappingURL=server.env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.env.ts"],"names":["ensureMongoDBConnectionStringSet","ensurePortSet","fetchMongoDBConnectionString","fetchServerPort","isEnvProd","runMigrations","setupEnvConfig","setupSentry","logger","Logger","instructionsReferralURL","packageJsonPath","join","superRootPath","dotEnvPath","isEnvTest","process","env","AppConstants","NODE_ENV_KEY","defaultTestEnv","defaultProductionEnv","ensureNodeEnvSet","environment","knownEnvNames","includes","newEnvName","warn","log","ensureEnvNpmVersionSet","packageJsonVersion","require","version","VERSION_KEY","NON_NPM_MODE_KEY","debug","removePm2Service","reason","error","execSync","pm2ServiceName","setupPackageJsonVersionOrThrow","result","verifyPackageJsonRequirements","isPm2","Error","printInstructionsURL","MONGO_KEY","defaultMongoStringUnauthenticated","port","SERVER_PORT_KEY","Number","isNaN","parseInt","defaultServerPort","toString","dbConnectionString","sentryDsnToken","getEnvOrDefault","sentryCustomDsnToken","sentryCustomDsnDefault","Sentry","init","dsn","NODE_ENV","release","npm_package_version","enabled","tracesSampleRate","isProductionEnvironment","on","e","message","errorSummary","captureException","skipDotEnv","config","path","db","client","migrationsStatus","status","pendingMigrations","filter","m","appliedAt","length","migrationResult","up"],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ServerHost", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ServerHost;
9
+ }
10
+ });
11
+ const _express = /*#__PURE__*/ _interop_require_default(require("express"));
12
+ const _mongoose = /*#__PURE__*/ _interop_require_default(require("mongoose"));
13
+ const _connecthistoryapifallback = /*#__PURE__*/ _interop_require_default(require("connect-history-api-fallback"));
14
+ const _awilixexpress = require("awilix-express");
15
+ const _path = require("path");
16
+ const _exceptionhandler = require("./middleware/exception.handler");
17
+ const _serverenv = require("./server.env");
18
+ const _runtimeexceptions = require("./exceptions/runtime.exceptions");
19
+ const _serverconstants = require("./server.constants");
20
+ const _fsutils = require("./utils/fs.utils");
21
+ const _envutils = require("./utils/env.utils");
22
+ function _interop_require_default(obj) {
23
+ return obj && obj.__esModule ? obj : {
24
+ default: obj
25
+ };
26
+ }
27
+ class ServerHost {
28
+ bootTask;
29
+ taskManagerService;
30
+ socketIoGateway;
31
+ appInstance = null;
32
+ configService;
33
+ logger;
34
+ constructor({ loggerFactory, bootTask, taskManagerService, socketIoGateway, configService }){
35
+ this.logger = loggerFactory(ServerHost.name);
36
+ this.bootTask = bootTask;
37
+ this.taskManagerService = taskManagerService;
38
+ this.socketIoGateway = socketIoGateway;
39
+ this.configService = configService;
40
+ }
41
+ async boot(app, quick_boot = false, listenRequests = true) {
42
+ // Enforce models to be strictly applied, any unknown property will not be persisted
43
+ _mongoose.default.set("strictQuery", true);
44
+ this.appInstance = app;
45
+ this.serveControllerRoutes(this.appInstance);
46
+ if (!quick_boot) {
47
+ await this.bootTask.runOnce();
48
+ }
49
+ if (listenRequests) return this.httpListen();
50
+ }
51
+ hasConnected() {
52
+ return _mongoose.default.connections[0].readyState;
53
+ }
54
+ serveControllerRoutes(app) {
55
+ const routePath = "./controllers";
56
+ // Catches any HTML request to paths like / or file/ as long as its text/html
57
+ app.use((req, res, next)=>{
58
+ if (!req.originalUrl.startsWith("/api") && !req.originalUrl.startsWith("/socket.io")) {
59
+ (0, _connecthistoryapifallback.default)()(req, res, next);
60
+ } else {
61
+ next();
62
+ }
63
+ }).use((0, _awilixexpress.loadControllers)(`${routePath}/*.controller.*`, {
64
+ cwd: __dirname,
65
+ ignore: "**/*.map"
66
+ })).use(_exceptionhandler.exceptionHandler);
67
+ // Serve the files for our frontend - do this later than the controllers
68
+ const bundleDistPath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleStorage, "dist");
69
+ app.use(_express.default.static(bundleDistPath));
70
+ // Backup client in node_modules
71
+ const backupClientPath = (0, _path.join)((0, _fsutils.superRootPath)(), "node_modules", _serverconstants.AppConstants.clientPackageName, "dist");
72
+ app.use(_express.default.static(backupClientPath));
73
+ app.get("*", (req, res)=>{
74
+ const path = req.originalUrl;
75
+ let resource = "MVC";
76
+ if (path.startsWith("/socket.io") || path.startsWith("/api") || path.startsWith("/plugins")) {
77
+ resource = "API";
78
+ } else if (path.endsWith(".min.js")) {
79
+ resource = "client-bundle";
80
+ }
81
+ this.logger.error(`${resource} resource at '${path}' was not found`);
82
+ if (!path.startsWith("/socket.io")) {
83
+ throw new _runtimeexceptions.NotFoundException(`${resource} resource was not found`, path);
84
+ }
85
+ }).use(_exceptionhandler.exceptionHandler);
86
+ }
87
+ async httpListen() {
88
+ const port = (0, _serverenv.fetchServerPort)();
89
+ if (!(0, _envutils.isProductionEnvironment)() && this.configService.get(_serverconstants.AppConstants.debugRoutesKey, "false") === "true") {
90
+ const expressListRoutes = require("express-list-routes");
91
+ expressListRoutes(this.appInstance, {
92
+ prefix: "/"
93
+ });
94
+ }
95
+ if (!port || Number.isNaN(parseInt(port))) {
96
+ throw new Error("The FDM Server requires a numeric port input argument to run");
97
+ }
98
+ const hostOrFqdn = "0.0.0.0";
99
+ const server = this.appInstance.listen(parseInt(port), hostOrFqdn, ()=>{
100
+ this.logger.log(`Server started... open it at http://127.0.0.1:${port}`);
101
+ });
102
+ this.socketIoGateway.attachServer(server);
103
+ }
104
+ }
105
+
106
+ //# sourceMappingURL=server.host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.host.ts"],"names":["ServerHost","bootTask","taskManagerService","socketIoGateway","appInstance","configService","logger","constructor","loggerFactory","name","boot","app","quick_boot","listenRequests","mongoose","set","serveControllerRoutes","runOnce","httpListen","hasConnected","connections","readyState","routePath","use","req","res","next","originalUrl","startsWith","history","loadControllers","cwd","__dirname","ignore","exceptionHandler","bundleDistPath","join","superRootPath","AppConstants","defaultClientBundleStorage","express","static","backupClientPath","clientPackageName","get","path","resource","endsWith","error","NotFoundException","port","fetchServerPort","isProductionEnvironment","debugRoutesKey","expressListRoutes","require","prefix","Number","isNaN","parseInt","Error","hostOrFqdn","server","listen","log","attachServer"],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "AuthService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return AuthService;
9
+ }
10
+ });
11
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
12
+ const _cryptoutils = require("../../utils/crypto.utils");
13
+ class AuthService {
14
+ logger;
15
+ userService;
16
+ jwtService;
17
+ settingsStore;
18
+ refreshTokenService;
19
+ /**
20
+ * When users are blacklisted at runtime, this cache can make quick work of rejecting them
21
+ */ blacklistedJwtCache = {};
22
+ /**
23
+ * loginUser: starts new session: id-token, refresh, removing any old refresh
24
+ * logoutUser: ends session, removes refresh token and blacklists userId
25
+ * renewLoginByRefreshToken: renews session, reduces refresh attempts
26
+ * addBlackListEntry: private, adds a blacklisted entry after logout
27
+ * removeBlacklistEntry: private, removes a blacklisted entry
28
+ * logoutUser
29
+ * signJwtToken: private, purely signs a new jwt token
30
+ */ /**
31
+ * cool features: faking other user logins (encapsulated login? Double login?)
32
+ * registration link
33
+ * loginUser: username/password based login
34
+ * blacklist: forcing all existing refresh tokens and jwts to be rejected of that user until login
35
+ * refreshAttempts => integer in setting with cap?
36
+ */ constructor({ userService, jwtService, loggerFactory, settingsStore, refreshTokenService }){
37
+ this.userService = userService;
38
+ this.jwtService = jwtService;
39
+ this.logger = loggerFactory(AuthService.name);
40
+ this.settingsStore = settingsStore;
41
+ this.refreshTokenService = refreshTokenService;
42
+ }
43
+ async loginUser(username, password) {
44
+ const userDoc = await this.userService.findRawByUsername(username);
45
+ if (!userDoc) {
46
+ throw new _runtimeexceptions.AuthenticationError("Login incorrect");
47
+ }
48
+ const result = (0, _cryptoutils.comparePasswordHash)(password, userDoc.passwordHash);
49
+ if (!result) {
50
+ throw new _runtimeexceptions.AuthenticationError("Login incorrect");
51
+ }
52
+ const userId = userDoc.id.toString();
53
+ const token = await this.signJwtToken(userId);
54
+ await this.refreshTokenService.purgeOutdatedRefreshTokensByUserId(userId);
55
+ await this.purgeBlacklistedJwtCache();
56
+ const refreshToken = await this.refreshTokenService.createRefreshTokenForUserId(userId);
57
+ return {
58
+ token,
59
+ refreshToken
60
+ };
61
+ }
62
+ async logoutUserId(userId, jwtToken) {
63
+ await this.refreshTokenService.deleteRefreshTokenByUserId(userId);
64
+ if (jwtToken?.length) {
65
+ this.blacklistedJwtCache[jwtToken] = {
66
+ userId,
67
+ createdAt: Date.now()
68
+ };
69
+ await this.purgeBlacklistedJwtCache();
70
+ }
71
+ }
72
+ async purgeBlacklistedJwtCache() {
73
+ try {
74
+ const { jwtExpiresIn } = await this.settingsStore.getCredentialSettings();
75
+ const now = Date.now();
76
+ const keys = Object.keys(this.blacklistedJwtCache);
77
+ for (const key of keys){
78
+ const { createdAt } = this.blacklistedJwtCache[key];
79
+ if (now - createdAt > jwtExpiresIn) {
80
+ delete this.blacklistedJwtCache[key];
81
+ }
82
+ }
83
+ } catch (err) {
84
+ this.logger.error("Failed to purge blacklisted jwt cache", err);
85
+ }
86
+ }
87
+ async logoutUserRefreshToken(refreshToken) {
88
+ const userRefreshToken = await this.getValidRefreshToken(refreshToken);
89
+ await this.refreshTokenService.deleteRefreshTokenByUserId(userRefreshToken.userId.toString());
90
+ }
91
+ async renewLoginByRefreshToken(refreshToken) {
92
+ const userRefreshToken = await this.getValidRefreshToken(refreshToken, false);
93
+ if (!userRefreshToken) {
94
+ throw new _runtimeexceptions.AuthenticationError("The refresh token was invalid or expired, could not refresh user token");
95
+ }
96
+ const userId = userRefreshToken.userId.toString();
97
+ const token = await this.signJwtToken(userId);
98
+ await this.increaseRefreshTokenAttemptsUsed(userRefreshToken.refreshToken);
99
+ return token;
100
+ }
101
+ isJwtTokenBlacklisted(jwtToken) {
102
+ return this.blacklistedJwtCache[jwtToken];
103
+ }
104
+ async getValidRefreshToken(refreshToken, throwNotFoundError = true) {
105
+ const userRefreshToken = await this.refreshTokenService.getRefreshToken(refreshToken, throwNotFoundError);
106
+ if (Date.now() > userRefreshToken.expiresAt) {
107
+ await this.refreshTokenService.deleteRefreshTokenByUserId(userRefreshToken.userId.toString());
108
+ throw new _runtimeexceptions.AuthenticationError("Refresh token expired, login required");
109
+ }
110
+ return userRefreshToken;
111
+ }
112
+ async increaseRefreshTokenAttemptsUsed(refreshToken) {
113
+ const { refreshTokenAttempts } = await this.settingsStore.getCredentialSettings();
114
+ const userRefreshToken = await this.getValidRefreshToken(refreshToken);
115
+ // If no attempts are set, then we don't care about attempts
116
+ if (refreshTokenAttempts < 0) return;
117
+ const attemptsUsed = userRefreshToken.refreshAttemptsUsed;
118
+ if (attemptsUsed >= refreshTokenAttempts) {
119
+ await this.refreshTokenService.deleteRefreshTokenByUserId(userRefreshToken.userId.toString());
120
+ throw new _runtimeexceptions.AuthenticationError("Refresh token attempts exceeded, login required");
121
+ }
122
+ await this.refreshTokenService.updateRefreshTokenAttempts(refreshToken, attemptsUsed + 1);
123
+ }
124
+ async signJwtToken(userId) {
125
+ const user = await this.userService.getUser(userId);
126
+ if (user.needsPasswordChange) {
127
+ throw new _runtimeexceptions.PasswordChangeRequiredError();
128
+ }
129
+ if (!user.isVerified) {
130
+ throw new _runtimeexceptions.AuthenticationError("User is not verified yet");
131
+ }
132
+ return this.jwtService.signJwtToken(userId, user.username);
133
+ }
134
+ }
135
+
136
+ //# sourceMappingURL=auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/authentication/auth.service.ts"],"names":["AuthService","logger","userService","jwtService","settingsStore","refreshTokenService","blacklistedJwtCache","constructor","loggerFactory","name","loginUser","username","password","userDoc","findRawByUsername","AuthenticationError","result","comparePasswordHash","passwordHash","userId","id","toString","token","signJwtToken","purgeOutdatedRefreshTokensByUserId","purgeBlacklistedJwtCache","refreshToken","createRefreshTokenForUserId","logoutUserId","jwtToken","deleteRefreshTokenByUserId","length","createdAt","Date","now","jwtExpiresIn","getCredentialSettings","keys","Object","key","err","error","logoutUserRefreshToken","userRefreshToken","getValidRefreshToken","renewLoginByRefreshToken","increaseRefreshTokenAttemptsUsed","isJwtTokenBlacklisted","throwNotFoundError","getRefreshToken","expiresAt","refreshTokenAttempts","attemptsUsed","refreshAttemptsUsed","updateRefreshTokenAttempts","user","getUser","needsPasswordChange","PasswordChangeRequiredError","isVerified"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "JwtService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return JwtService;
9
+ }
10
+ });
11
+ const _jsonwebtoken = require("jsonwebtoken");
12
+ const _serverconstants = require("../../server.constants");
13
+ class JwtService {
14
+ settingsStore;
15
+ configService;
16
+ constructor({ settingsStore, configService }){
17
+ this.settingsStore = settingsStore;
18
+ this.configService = configService;
19
+ }
20
+ async signJwtToken(userId, username) {
21
+ const { jwtSecret, jwtExpiresIn } = await this.settingsStore.getCredentialSettings();
22
+ return (0, _jsonwebtoken.sign)({
23
+ userId,
24
+ username
25
+ }, jwtSecret, {
26
+ expiresIn: jwtExpiresIn,
27
+ subject: userId,
28
+ audience: this.configService.get(_serverconstants.AppConstants.OVERRIDE_JWT_AUDIENCE, _serverconstants.AppConstants.DEFAULT_JWT_AUDIENCE),
29
+ issuer: this.configService.get(_serverconstants.AppConstants.OVERRIDE_JWT_ISSUER, _serverconstants.AppConstants.DEFAULT_JWT_ISSUER)
30
+ });
31
+ }
32
+ }
33
+
34
+ //# sourceMappingURL=jwt.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/authentication/jwt.service.ts"],"names":["JwtService","settingsStore","configService","constructor","signJwtToken","userId","username","jwtSecret","jwtExpiresIn","getCredentialSettings","sign","expiresIn","subject","audience","get","AppConstants","OVERRIDE_JWT_AUDIENCE","DEFAULT_JWT_AUDIENCE","issuer","OVERRIDE_JWT_ISSUER","DEFAULT_JWT_ISSUER"],"mappings":";;;;+BAOaA;;;eAAAA;;;8BAPQ;iCACQ;AAMtB,MAAMA;IACXC,cAA6B;IAC7BC,cAA8B;IAE9BC,YAAY,EAAEF,aAAa,EAAEC,aAAa,EAAmE,CAAE;QAC7G,IAAI,CAACD,aAAa,GAAGA;QACrB,IAAI,CAACC,aAAa,GAAGA;IACvB;IAEA,MAAME,aAAaC,MAAc,EAAEC,QAAgB,EAAE;QACnD,MAAM,EAAEC,SAAS,EAAEC,YAAY,EAAE,GAAG,MAAM,IAAI,CAACP,aAAa,CAACQ,qBAAqB;QAElF,OAAOC,IAAAA,kBAAI,EAAC;YAAEL;YAAQC;QAAS,GAAGC,WAAW;YAC3CI,WAAWH;YACXI,SAASP;YACTQ,UAAU,IAAI,CAACX,aAAa,CAACY,GAAG,CAACC,6BAAY,CAACC,qBAAqB,EAAED,6BAAY,CAACE,oBAAoB;YACtGC,QAAQ,IAAI,CAAChB,aAAa,CAACY,GAAG,CAACC,6BAAY,CAACI,mBAAmB,EAAEJ,6BAAY,CAACK,kBAAkB;QAClG;IACF;AACF"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PermissionService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PermissionService;
9
+ }
10
+ });
11
+ const _models = require("../../models");
12
+ const _authorizationconstants = require("../../constants/authorization.constants");
13
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
14
+ class PermissionService {
15
+ logger;
16
+ constructor({ loggerFactory }){
17
+ this.logger = loggerFactory(PermissionService.name);
18
+ }
19
+ _permissions = [];
20
+ get permissions() {
21
+ return this._permissions;
22
+ }
23
+ toDto(permission) {
24
+ return {
25
+ id: permission.id,
26
+ name: permission.name
27
+ };
28
+ }
29
+ authorizePermission(requiredPermission, assignedPermissions) {
30
+ return !!assignedPermissions.find((assignedPermission)=>{
31
+ const normalizePermission = this.normalizePermission(assignedPermission);
32
+ if (!normalizePermission) return false;
33
+ return normalizePermission === requiredPermission;
34
+ });
35
+ }
36
+ async getPermissionByName(permissionName) {
37
+ const permission = this.permissions.find((r)=>r.name === permissionName);
38
+ if (!permission) throw new _runtimeexceptions.NotFoundException("Permission not found");
39
+ return permission;
40
+ }
41
+ async getPermission(permissionId) {
42
+ const permission = this.permissions.find((r)=>r.id === permissionId);
43
+ if (!permission) throw new _runtimeexceptions.NotFoundException(`Permission Id '${permissionId}' not found`);
44
+ return permission;
45
+ }
46
+ async syncPermissions() {
47
+ this._permissions = [];
48
+ const permissionDefinition = (0, _authorizationconstants.flattenPermissionDefinition)();
49
+ for (let permission of permissionDefinition){
50
+ const storedPermission = await _models.Permission.findOne({
51
+ name: permission
52
+ });
53
+ if (!storedPermission) {
54
+ const newPermission = await _models.Permission.create({
55
+ name: permission
56
+ });
57
+ this._permissions.push(newPermission);
58
+ } else {
59
+ this._permissions.push(storedPermission);
60
+ }
61
+ }
62
+ }
63
+ normalizePermission(assignedPermission) {
64
+ const permissionInstance = this.permissions.find((r)=>r.id === assignedPermission || r.name === assignedPermission);
65
+ if (!permissionInstance) {
66
+ this.logger.warn(`The permission by ID ${assignedPermission} did not exist. Skipping.`);
67
+ return;
68
+ }
69
+ return permissionInstance.name;
70
+ }
71
+ }
72
+
73
+ //# sourceMappingURL=permission.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/authentication/permission.service.ts"],"names":["PermissionService","logger","constructor","loggerFactory","name","_permissions","permissions","toDto","permission","id","authorizePermission","requiredPermission","assignedPermissions","find","assignedPermission","normalizePermission","getPermissionByName","permissionName","r","NotFoundException","getPermission","permissionId","syncPermissions","permissionDefinition","flattenPermissionDefinition","storedPermission","Permission","findOne","newPermission","create","push","permissionInstance","warn"],"mappings":";;;;+BASaA;;;eAAAA;;;wBATc;wCACiB;mCACV;AAO3B,MAAMA;IACHC,OAAsB;IAE9BC,YAAY,EAAEC,aAAa,EAAqC,CAAE;QAChE,IAAI,CAACF,MAAM,GAAGE,cAAcH,kBAAkBI,IAAI;IACpD;IAEQC,eAA8B,EAAE,CAAC;IAEzC,IAAIC,cAAc;QAChB,OAAO,IAAI,CAACD,YAAY;IAC1B;IAEAE,MAAMC,UAAuB,EAAE;QAC7B,OAAO;YACLC,IAAID,WAAWC,EAAE;YACjBL,MAAMI,WAAWJ,IAAI;QACvB;IACF;IAEAM,oBAAoBC,kBAA0B,EAAEC,mBAA6B,EAAE;QAC7E,OAAO,CAAC,CAACA,oBAAoBC,IAAI,CAAC,CAACC;YACjC,MAAMC,sBAAsB,IAAI,CAACA,mBAAmB,CAACD;YACrD,IAAI,CAACC,qBAAqB,OAAO;YACjC,OAAOA,wBAAwBJ;QACjC;IACF;IAEA,MAAMK,oBAAoBC,cAAsB,EAAE;QAChD,MAAMT,aAAa,IAAI,CAACF,WAAW,CAACO,IAAI,CAAC,CAACK,IAAMA,EAAEd,IAAI,KAAKa;QAC3D,IAAI,CAACT,YAAY,MAAM,IAAIW,oCAAiB,CAAC;QAE7C,OAAOX;IACT;IAEA,MAAMY,cAAcC,YAAyB,EAAE;QAC7C,MAAMb,aAAa,IAAI,CAACF,WAAW,CAACO,IAAI,CAAC,CAACK,IAAMA,EAAET,EAAE,KAAKY;QACzD,IAAI,CAACb,YAAY,MAAM,IAAIW,oCAAiB,CAAC,CAAC,eAAe,EAAEE,aAAa,WAAW,CAAC;QAExF,OAAOb;IACT;IAEA,MAAMc,kBAAkB;QACtB,IAAI,CAACjB,YAAY,GAAG,EAAE;QAEtB,MAAMkB,uBAAuBC,IAAAA,mDAA2B;QACxD,KAAK,IAAIhB,cAAce,qBAAsB;YAC3C,MAAME,mBAAmB,MAAMC,kBAAU,CAACC,OAAO,CAAC;gBAAEvB,MAAMI;YAAW;YACrE,IAAI,CAACiB,kBAAkB;gBACrB,MAAMG,gBAAgB,MAAMF,kBAAU,CAACG,MAAM,CAAC;oBAC5CzB,MAAMI;gBACR;gBACA,IAAI,CAACH,YAAY,CAACyB,IAAI,CAACF;YACzB,OAAO;gBACL,IAAI,CAACvB,YAAY,CAACyB,IAAI,CAACL;YACzB;QACF;IACF;IAEAV,oBAAoBD,kBAA0B,EAAE;QAC9C,MAAMiB,qBAAqB,IAAI,CAACzB,WAAW,CAACO,IAAI,CAAC,CAACK,IAAMA,EAAET,EAAE,KAAKK,sBAAsBI,EAAEd,IAAI,KAAKU;QAClG,IAAI,CAACiB,oBAAoB;YACvB,IAAI,CAAC9B,MAAM,CAAC+B,IAAI,CAAC,CAAC,qBAAqB,EAAElB,mBAAmB,yBAAyB,CAAC;YACtF;QACF;QACA,OAAOiB,mBAAmB3B,IAAI;IAChC;AACF"}