node-server-engine 1.1.4 → 1.1.5

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 (468) hide show
  1. package/.env.example +193 -193
  2. package/.mocharc.js +13 -13
  3. package/.nycrc +18 -18
  4. package/.prettierrc +7 -7
  5. package/Dockerfile +30 -30
  6. package/README.md +991 -991
  7. package/babel.config.json +34 -35
  8. package/dist/const/DebeziumEvent.js.map +1 -1
  9. package/dist/const/LogSeverity.js.map +1 -1
  10. package/dist/const/index.js.map +1 -1
  11. package/dist/const/metrics.js.map +1 -1
  12. package/dist/const/mime.js.map +1 -1
  13. package/dist/const/tokenIssuer.js.map +1 -1
  14. package/dist/db/migrations/20241030121500-create-sequelize-meta-table.js.map +1 -1
  15. package/dist/db/models/SequelizeMeta.js +1 -0
  16. package/dist/db/models/SequelizeMeta.js.map +1 -1
  17. package/dist/db/models/index.js.map +1 -1
  18. package/dist/entities/ElasticSearch/ElasticSearch.js +7 -7
  19. package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
  20. package/dist/entities/ElasticSearch/ElasticSearch.types.js.map +1 -1
  21. package/dist/entities/ElasticSearch/index.js.map +1 -1
  22. package/dist/entities/Endpoint/Endpoint.js +18 -17
  23. package/dist/entities/Endpoint/Endpoint.js.map +1 -1
  24. package/dist/entities/Endpoint/Endpoint.types.js.map +1 -1
  25. package/dist/entities/Endpoint/index.js.map +1 -1
  26. package/dist/entities/EngineError/EngineError.js +7 -6
  27. package/dist/entities/EngineError/EngineError.js.map +1 -1
  28. package/dist/entities/EngineError/EngineError.types.js.map +1 -1
  29. package/dist/entities/EngineError/index.js.map +1 -1
  30. package/dist/entities/KeySet/KeySet.js +10 -9
  31. package/dist/entities/KeySet/KeySet.js.map +1 -1
  32. package/dist/entities/KeySet/KeySet.types.js.map +1 -1
  33. package/dist/entities/KeySet/index.js.map +1 -1
  34. package/dist/entities/LifecycleController/LifecycleController.js.map +1 -1
  35. package/dist/entities/LifecycleController/LifecycleController.types.js.map +1 -1
  36. package/dist/entities/LifecycleController/index.js.map +1 -1
  37. package/dist/entities/Localizator/Localizator.js +7 -7
  38. package/dist/entities/Localizator/Localizator.js.map +1 -1
  39. package/dist/entities/Localizator/Localizator.types.js.map +1 -1
  40. package/dist/entities/Localizator/guessNamingConvention/guessNamingConvention.js.map +1 -1
  41. package/dist/entities/Localizator/guessNamingConvention/index.js.map +1 -1
  42. package/dist/entities/Localizator/index.js.map +1 -1
  43. package/dist/entities/MessageHandler/MessageHandler.js +7 -6
  44. package/dist/entities/MessageHandler/MessageHandler.js.map +1 -1
  45. package/dist/entities/MessageHandler/MessageHandler.types.js.map +1 -1
  46. package/dist/entities/MessageHandler/index.js.map +1 -1
  47. package/dist/entities/PubSub/PubSub.js +25 -25
  48. package/dist/entities/PubSub/PubSub.js.map +1 -1
  49. package/dist/entities/PubSub/PubSub.types.js.map +1 -1
  50. package/dist/entities/PubSub/handleMessage/handleMessage.js +6 -6
  51. package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
  52. package/dist/entities/PubSub/handleMessage/index.js.map +1 -1
  53. package/dist/entities/PubSub/index.js.map +1 -1
  54. package/dist/entities/PushNotification/PushNotification.js +4 -4
  55. package/dist/entities/PushNotification/PushNotification.js.map +1 -1
  56. package/dist/entities/PushNotification/PushNotification.types.js.map +1 -1
  57. package/dist/entities/PushNotification/index.js.map +1 -1
  58. package/dist/entities/Redis/Redis.js +8 -8
  59. package/dist/entities/Redis/Redis.js.map +1 -1
  60. package/dist/entities/Redis/Redis.types.js.map +1 -1
  61. package/dist/entities/Redis/Redis.validate.js +2 -2
  62. package/dist/entities/Redis/Redis.validate.js.map +1 -1
  63. package/dist/entities/Redis/index.js.map +1 -1
  64. package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
  65. package/dist/entities/Sequelize/Sequelize.js +2 -2
  66. package/dist/entities/Sequelize/Sequelize.js.map +1 -1
  67. package/dist/entities/Sequelize/Sequelize.types.js.map +1 -1
  68. package/dist/entities/Sequelize/Sequelize.validate.js +2 -2
  69. package/dist/entities/Sequelize/Sequelize.validate.js.map +1 -1
  70. package/dist/entities/Sequelize/index.js.map +1 -1
  71. package/dist/entities/Server/Server.const.js.map +1 -1
  72. package/dist/entities/Server/Server.js +18 -17
  73. package/dist/entities/Server/Server.js.map +1 -1
  74. package/dist/entities/Server/Server.types.js.map +1 -1
  75. package/dist/entities/Server/index.js.map +1 -1
  76. package/dist/entities/SocketClient/SocketClient.js +33 -32
  77. package/dist/entities/SocketClient/SocketClient.js.map +1 -1
  78. package/dist/entities/SocketClient/SocketClient.types.js.map +1 -1
  79. package/dist/entities/SocketClient/index.js.map +1 -1
  80. package/dist/entities/SocketClient/parseMessage/index.js.map +1 -1
  81. package/dist/entities/SocketClient/parseMessage/parseMessage.js +2 -2
  82. package/dist/entities/SocketClient/parseMessage/parseMessage.js.map +1 -1
  83. package/dist/entities/Storage/Storage.js +20 -20
  84. package/dist/entities/Storage/Storage.js.map +1 -1
  85. package/dist/entities/Storage/Storage.types.js.map +1 -1
  86. package/dist/entities/Storage/index.js.map +1 -1
  87. package/dist/entities/ValidationError/ValidationError.js.map +1 -1
  88. package/dist/entities/ValidationError/index.js.map +1 -1
  89. package/dist/entities/WebError/WebError.js +7 -6
  90. package/dist/entities/WebError/WebError.js.map +1 -1
  91. package/dist/entities/WebError/WebError.types.js.map +1 -1
  92. package/dist/entities/WebError/index.js.map +1 -1
  93. package/dist/entities/index.js.map +1 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/metrics/debug.js.map +1 -1
  96. package/dist/metrics/index.js.map +1 -1
  97. package/dist/metrics/request.js.map +1 -1
  98. package/dist/middleware/authAdmin/authAdmin.js.map +1 -1
  99. package/dist/middleware/authAdmin/authAdmin.types.js.map +1 -1
  100. package/dist/middleware/authAdmin/index.js.map +1 -1
  101. package/dist/middleware/authHmac/authHmac.js.map +1 -1
  102. package/dist/middleware/authHmac/authHmac.types.js.map +1 -1
  103. package/dist/middleware/authHmac/index.js.map +1 -1
  104. package/dist/middleware/authJwt/authJwt.js.map +1 -1
  105. package/dist/middleware/authJwt/authJwt.types.js.map +1 -1
  106. package/dist/middleware/authJwt/index.js.map +1 -1
  107. package/dist/middleware/authStatic/authStatic.js +3 -3
  108. package/dist/middleware/authStatic/authStatic.js.map +1 -1
  109. package/dist/middleware/authStatic/index.js.map +1 -1
  110. package/dist/middleware/authTls/authTls.js +8 -8
  111. package/dist/middleware/authTls/authTls.js.map +1 -1
  112. package/dist/middleware/authTls/authTls.types.js.map +1 -1
  113. package/dist/middleware/authTls/index.js.map +1 -1
  114. package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
  115. package/dist/middleware/error/error.js.map +1 -1
  116. package/dist/middleware/error/index.js.map +1 -1
  117. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
  118. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
  119. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
  120. package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
  121. package/dist/middleware/fileUploader/fileUploader.js +12 -12
  122. package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
  123. package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
  124. package/dist/middleware/fileUploader/index.js.map +1 -1
  125. package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
  126. package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
  127. package/dist/middleware/fileUploader/validate/index.js.map +1 -1
  128. package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
  129. package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
  130. package/dist/middleware/fourOhFour/index.js.map +1 -1
  131. package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
  132. package/dist/middleware/geminiFileUploader/index.js.map +1 -1
  133. package/dist/middleware/healthCheck/healthCheck.js +2 -2
  134. package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
  135. package/dist/middleware/healthCheck/index.js.map +1 -1
  136. package/dist/middleware/index.js.map +1 -1
  137. package/dist/middleware/metrics/index.js.map +1 -1
  138. package/dist/middleware/metrics/metrics.js.map +1 -1
  139. package/dist/middleware/requestMetrics/index.js.map +1 -1
  140. package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
  141. package/dist/middleware/swaggerDocs/index.js.map +1 -1
  142. package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
  143. package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
  144. package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
  145. package/dist/middleware/userResolver/index.js.map +1 -1
  146. package/dist/middleware/userResolver/userResolver.js.map +1 -1
  147. package/dist/middleware/validate/index.js.map +1 -1
  148. package/dist/middleware/validate/validate.js.map +1 -1
  149. package/dist/middleware/version/index.js.map +1 -1
  150. package/dist/middleware/version/version.js +3 -3
  151. package/dist/middleware/version/version.js.map +1 -1
  152. package/dist/utils/checkEnvironment/index.js +13 -13
  153. package/dist/utils/checkEnvironment/index.js.map +1 -1
  154. package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
  155. package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
  156. package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
  157. package/dist/utils/createHttpServer/index.js.map +1 -1
  158. package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
  159. package/dist/utils/createSortedObject/index.js.map +1 -1
  160. package/dist/utils/dbMigration/dbMigration.js +8 -8
  161. package/dist/utils/dbMigration/dbMigration.js.map +1 -1
  162. package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
  163. package/dist/utils/dbMigration/index.js.map +1 -1
  164. package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
  165. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +4 -4
  166. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
  167. package/dist/utils/envAssert/envAssert.js +6 -6
  168. package/dist/utils/envAssert/envAssert.js.map +1 -1
  169. package/dist/utils/envAssert/index.js.map +1 -1
  170. package/dist/utils/envAssert/validators/hostList.js +2 -2
  171. package/dist/utils/envAssert/validators/hostList.js.map +1 -1
  172. package/dist/utils/envAssert/validators/index.js.map +1 -1
  173. package/dist/utils/envAssert/validators/ipList.js +2 -2
  174. package/dist/utils/envAssert/validators/ipList.js.map +1 -1
  175. package/dist/utils/envAssert/validators/path.js +2 -2
  176. package/dist/utils/envAssert/validators/path.js.map +1 -1
  177. package/dist/utils/envAssert/validators/string.js +2 -2
  178. package/dist/utils/envAssert/validators/string.js.map +1 -1
  179. package/dist/utils/envAssert/validators/stringList.js +3 -3
  180. package/dist/utils/envAssert/validators/stringList.js.map +1 -1
  181. package/dist/utils/filter/filter.js +4 -4
  182. package/dist/utils/filter/filter.js.map +1 -1
  183. package/dist/utils/filter/index.js.map +1 -1
  184. package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
  185. package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
  186. package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
  187. package/dist/utils/getDynamicLink/index.js.map +1 -1
  188. package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
  189. package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
  190. package/dist/utils/hmac/checkEnv/index.js.map +1 -1
  191. package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
  192. package/dist/utils/hmac/createHmac/index.js.map +1 -1
  193. package/dist/utils/hmac/index.js.map +1 -1
  194. package/dist/utils/hmac/index.types.js.map +1 -1
  195. package/dist/utils/hmac/signPayload/index.js.map +1 -1
  196. package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
  197. package/dist/utils/hmac/verifySignature/index.js.map +1 -1
  198. package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
  199. package/dist/utils/index.js.map +1 -1
  200. package/dist/utils/jwt/index.js.map +1 -1
  201. package/dist/utils/jwt/jwt.js.map +1 -1
  202. package/dist/utils/jwt/jwt.types.js.map +1 -1
  203. package/dist/utils/report/index.js.map +1 -1
  204. package/dist/utils/report/output.js.map +1 -1
  205. package/dist/utils/report/output.types.js.map +1 -1
  206. package/dist/utils/report/report.js.map +1 -1
  207. package/dist/utils/report/report.types.js.map +1 -1
  208. package/dist/utils/request/index.js.map +1 -1
  209. package/dist/utils/request/request.js.map +1 -1
  210. package/dist/utils/semverCompare/index.js.map +1 -1
  211. package/dist/utils/semverCompare/semverCompare.js +5 -5
  212. package/dist/utils/semverCompare/semverCompare.js.map +1 -1
  213. package/dist/utils/sendEmail/index.js.map +1 -1
  214. package/dist/utils/sendEmail/sendEmail.js +8 -8
  215. package/dist/utils/sendEmail/sendEmail.js.map +1 -1
  216. package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
  217. package/dist/utils/sendPush/index.js.map +1 -1
  218. package/dist/utils/sendPush/sendPush.js +5 -5
  219. package/dist/utils/sendPush/sendPush.js.map +1 -1
  220. package/dist/utils/sendPush/sendPush.types.js.map +1 -1
  221. package/dist/utils/tlsConfig/index.js.map +1 -1
  222. package/dist/utils/tlsConfig/tlsConfig.js +2 -2
  223. package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
  224. package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
  225. package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
  226. package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
  227. package/dist/utils/tlsRequest/index.js.map +1 -1
  228. package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
  229. package/dist/utils/trimPathSlash/index.js.map +1 -1
  230. package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
  231. package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
  232. package/eslint.config.mjs +11 -11
  233. package/package.json +159 -164
  234. package/src/const/DebeziumEvent.ts +6 -6
  235. package/src/const/LogSeverity.ts +7 -7
  236. package/src/const/index.ts +5 -5
  237. package/src/const/metrics.ts +6 -6
  238. package/src/const/mime.ts +37 -37
  239. package/src/const/tokenIssuer.ts +9 -9
  240. package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
  241. package/src/db/models/SequelizeMeta.ts +16 -16
  242. package/src/db/models/index.ts +2 -2
  243. package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
  244. package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
  245. package/src/entities/ElasticSearch/index.ts +2 -2
  246. package/src/entities/Endpoint/Endpoint.test.ts +337 -337
  247. package/src/entities/Endpoint/Endpoint.ts +202 -202
  248. package/src/entities/Endpoint/Endpoint.types.ts +205 -205
  249. package/src/entities/Endpoint/index.ts +2 -2
  250. package/src/entities/EngineError/EngineError.ts +28 -28
  251. package/src/entities/EngineError/EngineError.types.ts +15 -15
  252. package/src/entities/EngineError/index.ts +2 -2
  253. package/src/entities/KeySet/KeySet.test.ts +126 -126
  254. package/src/entities/KeySet/KeySet.ts +172 -172
  255. package/src/entities/KeySet/KeySet.types.ts +28 -28
  256. package/src/entities/KeySet/index.ts +2 -2
  257. package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
  258. package/src/entities/LifecycleController/LifecycleController.ts +24 -24
  259. package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
  260. package/src/entities/LifecycleController/index.ts +2 -2
  261. package/src/entities/Localizator/Localizator.ts +139 -139
  262. package/src/entities/Localizator/Localizator.types.ts +52 -52
  263. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
  264. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
  265. package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
  266. package/src/entities/Localizator/index.ts +2 -2
  267. package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
  268. package/src/entities/MessageHandler/MessageHandler.ts +72 -72
  269. package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
  270. package/src/entities/MessageHandler/index.ts +2 -2
  271. package/src/entities/PubSub/PubSub.test.ts +297 -297
  272. package/src/entities/PubSub/PubSub.ts +202 -202
  273. package/src/entities/PubSub/PubSub.types.ts +76 -76
  274. package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
  275. package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
  276. package/src/entities/PubSub/handleMessage/index.ts +1 -1
  277. package/src/entities/PubSub/index.ts +2 -2
  278. package/src/entities/PushNotification/PushNotification.test.ts +35 -35
  279. package/src/entities/PushNotification/PushNotification.ts +44 -44
  280. package/src/entities/PushNotification/PushNotification.types.ts +25 -25
  281. package/src/entities/PushNotification/index.ts +2 -2
  282. package/src/entities/Redis/Redis.ts +71 -71
  283. package/src/entities/Redis/Redis.types.ts +19 -19
  284. package/src/entities/Redis/Redis.validate.ts +17 -17
  285. package/src/entities/Redis/index.ts +2 -2
  286. package/src/entities/Sequelize/Sequelize.config.ts +59 -59
  287. package/src/entities/Sequelize/Sequelize.test.ts +21 -21
  288. package/src/entities/Sequelize/Sequelize.ts +75 -75
  289. package/src/entities/Sequelize/Sequelize.types.ts +10 -10
  290. package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
  291. package/src/entities/Sequelize/index.ts +2 -2
  292. package/src/entities/Server/Server.const.ts +56 -56
  293. package/src/entities/Server/Server.test.ts +272 -272
  294. package/src/entities/Server/Server.ts +445 -445
  295. package/src/entities/Server/Server.types.ts +88 -88
  296. package/src/entities/Server/index.ts +2 -2
  297. package/src/entities/SocketClient/SocketClient.test.ts +392 -392
  298. package/src/entities/SocketClient/SocketClient.ts +401 -401
  299. package/src/entities/SocketClient/SocketClient.types.ts +62 -62
  300. package/src/entities/SocketClient/index.ts +2 -2
  301. package/src/entities/SocketClient/parseMessage/index.ts +1 -1
  302. package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
  303. package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
  304. package/src/entities/Storage/Storage.test.ts +58 -58
  305. package/src/entities/Storage/Storage.ts +219 -219
  306. package/src/entities/Storage/Storage.types.ts +57 -57
  307. package/src/entities/Storage/index.ts +2 -2
  308. package/src/entities/ValidationError/ValidationError.ts +34 -34
  309. package/src/entities/ValidationError/index.ts +1 -1
  310. package/src/entities/WebError/WebError.test.ts +18 -18
  311. package/src/entities/WebError/WebError.ts +23 -23
  312. package/src/entities/WebError/WebError.types.ts +9 -9
  313. package/src/entities/WebError/index.ts +2 -2
  314. package/src/entities/index.ts +16 -16
  315. package/src/index.ts +4 -4
  316. package/src/metrics/debug.ts +10 -10
  317. package/src/metrics/index.ts +2 -2
  318. package/src/metrics/request.ts +17 -17
  319. package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
  320. package/src/middleware/authAdmin/authAdmin.ts +114 -114
  321. package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
  322. package/src/middleware/authAdmin/index.ts +2 -2
  323. package/src/middleware/authHmac/authHmac.test.ts +86 -86
  324. package/src/middleware/authHmac/authHmac.ts +56 -56
  325. package/src/middleware/authHmac/authHmac.types.ts +7 -7
  326. package/src/middleware/authHmac/index.ts +2 -2
  327. package/src/middleware/authJwt/authJwt.test.ts +54 -54
  328. package/src/middleware/authJwt/authJwt.ts +55 -55
  329. package/src/middleware/authJwt/authJwt.types.ts +14 -14
  330. package/src/middleware/authJwt/index.ts +2 -2
  331. package/src/middleware/authStatic/authStatic.test.ts +36 -36
  332. package/src/middleware/authStatic/authStatic.ts +45 -45
  333. package/src/middleware/authStatic/index.ts +1 -1
  334. package/src/middleware/authTls/authTls.test.ts +138 -138
  335. package/src/middleware/authTls/authTls.ts +106 -106
  336. package/src/middleware/authTls/authTls.types.ts +13 -13
  337. package/src/middleware/authTls/index.ts +2 -2
  338. package/src/middleware/checkPermission/checkPermission.ts +32 -32
  339. package/src/middleware/error/error.test.ts +60 -60
  340. package/src/middleware/error/error.ts +25 -25
  341. package/src/middleware/error/index.ts +1 -1
  342. package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
  343. package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
  344. package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
  345. package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
  346. package/src/middleware/fileUploader/fileUploader.ts +303 -303
  347. package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
  348. package/src/middleware/fileUploader/index.ts +2 -2
  349. package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
  350. package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
  351. package/src/middleware/fileUploader/validate/index.ts +1 -1
  352. package/src/middleware/fileUploader/validate/validate.ts +27 -27
  353. package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
  354. package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
  355. package/src/middleware/fourOhFour/index.ts +1 -1
  356. package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
  357. package/src/middleware/geminiFileUploader/index.ts +1 -1
  358. package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
  359. package/src/middleware/healthCheck/healthCheck.ts +14 -14
  360. package/src/middleware/healthCheck/index.ts +1 -1
  361. package/src/middleware/index.ts +17 -17
  362. package/src/middleware/metrics/index.ts +1 -1
  363. package/src/middleware/metrics/metrics.test.ts +46 -46
  364. package/src/middleware/metrics/metrics.ts +24 -24
  365. package/src/middleware/requestMetrics/index.ts +1 -1
  366. package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
  367. package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
  368. package/src/middleware/swaggerDocs/index.ts +2 -2
  369. package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
  370. package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
  371. package/src/middleware/userResolver/index.ts +1 -1
  372. package/src/middleware/userResolver/userResolver.test.ts +35 -35
  373. package/src/middleware/userResolver/userResolver.ts +35 -35
  374. package/src/middleware/validate/index.ts +1 -1
  375. package/src/middleware/validate/validate.test.ts +43 -43
  376. package/src/middleware/validate/validate.ts +25 -25
  377. package/src/middleware/version/index.ts +1 -1
  378. package/src/middleware/version/version.test.ts +23 -23
  379. package/src/middleware/version/version.ts +12 -12
  380. package/src/utils/checkEnvironment/index.ts +49 -49
  381. package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
  382. package/src/utils/createHttpServer/createHttpServer.ts +34 -34
  383. package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
  384. package/src/utils/createHttpServer/index.ts +1 -1
  385. package/src/utils/createSortedObject/createSortedObject.ts +20 -20
  386. package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
  387. package/src/utils/createSortedObject/index.ts +1 -1
  388. package/src/utils/dbMigration/dbMigration.test.ts +209 -209
  389. package/src/utils/dbMigration/dbMigration.ts +199 -199
  390. package/src/utils/dbMigration/dbMigration.types.ts +11 -11
  391. package/src/utils/dbMigration/index.ts +2 -2
  392. package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
  393. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
  394. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -102
  395. package/src/utils/envAssert/envAssert.ts +31 -31
  396. package/src/utils/envAssert/index.ts +1 -1
  397. package/src/utils/envAssert/validators/hostList.ts +17 -17
  398. package/src/utils/envAssert/validators/index.ts +5 -5
  399. package/src/utils/envAssert/validators/ipList.ts +13 -13
  400. package/src/utils/envAssert/validators/path.ts +13 -13
  401. package/src/utils/envAssert/validators/string.ts +9 -9
  402. package/src/utils/envAssert/validators/stringList.ts +13 -13
  403. package/src/utils/filter/filter.ts +17 -17
  404. package/src/utils/filter/index.ts +1 -1
  405. package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
  406. package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
  407. package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
  408. package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
  409. package/src/utils/getDynamicLink/index.ts +2 -2
  410. package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
  411. package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
  412. package/src/utils/hmac/checkEnv/index.ts +1 -1
  413. package/src/utils/hmac/createHmac/createHmac.ts +33 -33
  414. package/src/utils/hmac/createHmac/index.ts +1 -1
  415. package/src/utils/hmac/index.ts +4 -4
  416. package/src/utils/hmac/index.types.ts +13 -13
  417. package/src/utils/hmac/signPayload/index.ts +1 -1
  418. package/src/utils/hmac/signPayload/signPayload.ts +16 -16
  419. package/src/utils/hmac/verifySignature/index.ts +1 -1
  420. package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
  421. package/src/utils/index.ts +26 -26
  422. package/src/utils/jwt/index.ts +2 -2
  423. package/src/utils/jwt/jwt.test.ts +41 -41
  424. package/src/utils/jwt/jwt.ts +204 -204
  425. package/src/utils/jwt/jwt.types.ts +21 -21
  426. package/src/utils/report/index.ts +3 -3
  427. package/src/utils/report/output.ts +45 -45
  428. package/src/utils/report/output.types.ts +70 -70
  429. package/src/utils/report/report.test.ts +133 -133
  430. package/src/utils/report/report.ts +134 -134
  431. package/src/utils/report/report.types.ts +13 -13
  432. package/src/utils/request/index.ts +1 -1
  433. package/src/utils/request/request.test.ts +26 -26
  434. package/src/utils/request/request.ts +48 -48
  435. package/src/utils/semverCompare/index.ts +1 -1
  436. package/src/utils/semverCompare/semverCompare.test.ts +49 -49
  437. package/src/utils/semverCompare/semverCompare.ts +60 -60
  438. package/src/utils/sendEmail/index.ts +1 -1
  439. package/src/utils/sendEmail/sendEmail.ts +27 -27
  440. package/src/utils/sendEmail/sendEmail.types.ts +7 -7
  441. package/src/utils/sendPush/index.ts +2 -2
  442. package/src/utils/sendPush/sendPush.ts +20 -20
  443. package/src/utils/sendPush/sendPush.types.ts +25 -25
  444. package/src/utils/tlsConfig/index.ts +2 -2
  445. package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
  446. package/src/utils/tlsConfig/tlsConfig.ts +47 -47
  447. package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
  448. package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
  449. package/src/utils/tlsRequest/index.ts +1 -1
  450. package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
  451. package/src/utils/tlsRequest/tlsRequest.ts +12 -12
  452. package/src/utils/trimPathSlash/index.ts +1 -1
  453. package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
  454. package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
  455. package/test/env.ts +56 -56
  456. package/test/factory/index.ts +8 -8
  457. package/test/factory/sequelizeMeta.ts +12 -12
  458. package/test/hooks.ts +37 -37
  459. package/test/index.ts +3 -3
  460. package/test/stub/index.ts +3 -3
  461. package/test/stub/stubLocales.ts +68 -68
  462. package/test/stub/stubPubSub.ts +7 -7
  463. package/test/stub/stubStorage.ts +77 -77
  464. package/test/stub/stubStorage.types.ts +11 -11
  465. package/test/utils/app.ts +31 -31
  466. package/test/utils/index.ts +1 -1
  467. package/tsconfig.build.json +5 -5
  468. package/tsconfig.json +32 -32
@@ -1 +1 @@
1
- {"version":3,"file":"handleMessage.js","names":["_const","require","_EngineError","_utils","namespace","handleMessage","message","subscription","handlers","isDebezium","reportDebug","name","ack","payload","JSON","parse","data","toString","before","after","diff","Object","keys","filter","key","EngineError","severity","LogSeverity","WARNING","handler","attributes","publishTime","error","reportError"],"sources":["../../../../src/entities/PubSub/handleMessage/handleMessage.ts"],"sourcesContent":["import { Subscription, Message } from '@google-cloud/pubsub';\r\nimport { PubSubMessageHandler, PubSubDebeziumPayload } from '../PubSub.types';\r\nimport { LogSeverity } from 'const';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { reportDebug, reportError } from 'utils';\r\n\r\nconst namespace = 'engine:PubSub:handleMessage';\r\n\r\n/**\r\n * handle the pubSubClients on message event\r\n * @param message - Message to parse and handle\r\n * @param subscription - The related Pub/Sub subscription object\r\n * @param handlers - Message handlers\r\n * @param isDebezium - Indicates that the subscription from Debezium events\r\n */\r\nexport async function handleMessage(\r\n message: Message,\r\n subscription: Subscription,\r\n handlers: Array<PubSubMessageHandler<unknown>>,\r\n isDebezium = false\r\n): Promise<void> {\r\n reportDebug({\r\n namespace,\r\n message: `Received message from Pub/Sub [${subscription.name}]`\r\n });\r\n\r\n message.ack();\r\n\r\n let payload;\r\n try {\r\n payload = JSON.parse(message.data.toString()) as unknown;\r\n\r\n // When handling Debezium message, we calculate automatically the keys that have changed between the previous and current state\r\n if (isDebezium) {\r\n payload = payload as PubSubDebeziumPayload<Record<string, unknown>>;\r\n const { before, after } = payload;\r\n if (before && after)\r\n payload.diff = Object.keys(after).filter(\r\n (key) => after[key] !== before[key]\r\n );\r\n else if (before) payload.diff = Object.keys(before);\r\n else if (after) payload.diff = Object.keys(after);\r\n else\r\n throw new EngineError({\r\n severity: LogSeverity.WARNING,\r\n message: `Debezium Pub/Sub message did not include before nor after value [${subscription.name}]`,\r\n data: { subscription, message: message.data.toString() }\r\n });\r\n }\r\n } catch {\r\n throw new EngineError({\r\n severity: LogSeverity.WARNING,\r\n message: `Pub/Sub message is not valid JSON ${subscription.name}`,\r\n data: { subscription, message: message.data.toString() }\r\n });\r\n }\r\n\r\n for (const handler of handlers) {\r\n try {\r\n await handler(payload, message.attributes, message.publishTime);\r\n } catch (error) {\r\n reportError(error);\r\n }\r\n }\r\n}\r\n"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA,MAAMG,SAAS,GAAG,6BAA6B;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeC,aAAaA,CACjCC,OAAgB,EAChBC,YAA0B,EAC1BC,QAA8C,EAC9CC,UAAU,GAAG,KAAK,EACH;EACf,IAAAC,kBAAW,EAAC;IACVN,SAAS;IACTE,OAAO,EAAE,kCAAkCC,YAAY,CAACI,IAAI;EAC9D,CAAC,CAAC;EAEFL,OAAO,CAACM,GAAG,CAAC,CAAC;EAEb,IAAIC,OAAO;EACX,IAAI;IACFA,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACT,OAAO,CAACU,IAAI,CAACC,QAAQ,CAAC,CAAC,CAAY;;IAExD;IACA,IAAIR,UAAU,EAAE;MACdI,OAAO,GAAGA,OAAyD;MACnE,MAAM;QAAEK,MAAM;QAAEC;MAAM,CAAC,GAAGN,OAAO;MACjC,IAAIK,MAAM,IAAIC,KAAK,EACjBN,OAAO,CAACO,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAACI,MAAM,CACrCC,GAAG,IAAKL,KAAK,CAACK,GAAG,CAAC,KAAKN,MAAM,CAACM,GAAG,CACpC,CAAC,CAAC,KACC,IAAIN,MAAM,EAAEL,OAAO,CAACO,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACJ,MAAM,CAAC,CAAC,KAC/C,IAAIC,KAAK,EAAEN,OAAO,CAACO,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAAC,KAEhD,MAAM,IAAIM,wBAAW,CAAC;QACpBC,QAAQ,EAAEC,kBAAW,CAACC,OAAO;QAC7BtB,OAAO,EAAE,oEAAoEC,YAAY,CAACI,IAAI,GAAG;QACjGK,IAAI,EAAE;UAAET,YAAY;UAAED,OAAO,EAAEA,OAAO,CAACU,IAAI,CAACC,QAAQ,CAAC;QAAE;MACzD,CAAC,CAAC;IACN;EACF,CAAC,CAAC,MAAM;IACN,MAAM,IAAIQ,wBAAW,CAAC;MACpBC,QAAQ,EAAEC,kBAAW,CAACC,OAAO;MAC7BtB,OAAO,EAAE,qCAAqCC,YAAY,CAACI,IAAI,EAAE;MACjEK,IAAI,EAAE;QAAET,YAAY;QAAED,OAAO,EAAEA,OAAO,CAACU,IAAI,CAACC,QAAQ,CAAC;MAAE;IACzD,CAAC,CAAC;EACJ;EAEA,KAAK,MAAMY,OAAO,IAAIrB,QAAQ,EAAE;IAC9B,IAAI;MACF,MAAMqB,OAAO,CAAChB,OAAO,EAAEP,OAAO,CAACwB,UAAU,EAAExB,OAAO,CAACyB,WAAW,CAAC;IACjE,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAAC,kBAAW,EAACD,KAAK,CAAC;IACpB;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"handleMessage.js","names":["_const","require","_EngineError","_utils","namespace","handleMessage","message","subscription","handlers","isDebezium","reportDebug","name","ack","payload","JSON","parse","data","toString","before","after","diff","Object","keys","filter","key","EngineError","severity","LogSeverity","WARNING","handler","attributes","publishTime","error","reportError"],"sources":["../../../../src/entities/PubSub/handleMessage/handleMessage.ts"],"sourcesContent":["import { Subscription, Message } from '@google-cloud/pubsub';\nimport { PubSubMessageHandler, PubSubDebeziumPayload } from '../PubSub.types';\nimport { LogSeverity } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { reportDebug, reportError } from 'utils';\n\nconst namespace = 'engine:PubSub:handleMessage';\n\n/**\n * handle the pubSubClients on message event\n * @param message - Message to parse and handle\n * @param subscription - The related Pub/Sub subscription object\n * @param handlers - Message handlers\n * @param isDebezium - Indicates that the subscription from Debezium events\n */\nexport async function handleMessage(\n message: Message,\n subscription: Subscription,\n handlers: Array<PubSubMessageHandler<unknown>>,\n isDebezium = false\n): Promise<void> {\n reportDebug({\n namespace,\n message: `Received message from Pub/Sub [${subscription.name}]`\n });\n\n message.ack();\n\n let payload;\n try {\n payload = JSON.parse(message.data.toString()) as unknown;\n\n // When handling Debezium message, we calculate automatically the keys that have changed between the previous and current state\n if (isDebezium) {\n payload = payload as PubSubDebeziumPayload<Record<string, unknown>>;\n const { before, after } = payload;\n if (before && after)\n payload.diff = Object.keys(after).filter(\n (key) => after[key] !== before[key]\n );\n else if (before) payload.diff = Object.keys(before);\n else if (after) payload.diff = Object.keys(after);\n else\n throw new EngineError({\n severity: LogSeverity.WARNING,\n message: `Debezium Pub/Sub message did not include before nor after value [${subscription.name}]`,\n data: { subscription, message: message.data.toString() }\n });\n }\n } catch {\n throw new EngineError({\n severity: LogSeverity.WARNING,\n message: `Pub/Sub message is not valid JSON ${subscription.name}`,\n data: { subscription, message: message.data.toString() }\n });\n }\n\n for (const handler of handlers) {\n try {\n await handler(payload, message.attributes, message.publishTime);\n } catch (error) {\n reportError(error);\n }\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA,MAAMG,SAAS,GAAG,6BAA6B;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeC,aAAaA,CACjCC,OAAgB,EAChBC,YAA0B,EAC1BC,QAA8C,EAC9CC,UAAU,GAAG,KAAK,EACH;EACf,IAAAC,kBAAW,EAAC;IACVN,SAAS;IACTE,OAAO,EAAE,kCAAkCC,YAAY,CAACI,IAAI;EAC9D,CAAC,CAAC;EAEFL,OAAO,CAACM,GAAG,CAAC,CAAC;EAEb,IAAIC,OAAO;EACX,IAAI;IACFA,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACT,OAAO,CAACU,IAAI,CAACC,QAAQ,CAAC,CAAC,CAAY;;IAExD;IACA,IAAIR,UAAU,EAAE;MACdI,OAAO,GAAGA,OAAyD;MACnE,MAAM;QAAEK,MAAM;QAAEC;MAAM,CAAC,GAAGN,OAAO;MACjC,IAAIK,MAAM,IAAIC,KAAK,EACjBN,OAAO,CAACO,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAACI,MAAM,CACrCC,GAAG,IAAKL,KAAK,CAACK,GAAG,CAAC,KAAKN,MAAM,CAACM,GAAG,CACpC,CAAC,CAAC,KACC,IAAIN,MAAM,EAAEL,OAAO,CAACO,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACJ,MAAM,CAAC,CAAC,KAC/C,IAAIC,KAAK,EAAEN,OAAO,CAACO,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAAC,KAEhD,MAAM,IAAIM,wBAAW,CAAC;QACpBC,QAAQ,EAAEC,kBAAW,CAACC,OAAO;QAC7BtB,OAAO,EAAE,oEAAoEC,YAAY,CAACI,IAAI,GAAG;QACjGK,IAAI,EAAE;UAAET,YAAY;UAAED,OAAO,EAAEA,OAAO,CAACU,IAAI,CAACC,QAAQ,CAAC;QAAE;MACzD,CAAC,CAAC;IACN;EACF,CAAC,CAAC,MAAM;IACN,MAAM,IAAIQ,wBAAW,CAAC;MACpBC,QAAQ,EAAEC,kBAAW,CAACC,OAAO;MAC7BtB,OAAO,EAAE,qCAAqCC,YAAY,CAACI,IAAI,EAAE;MACjEK,IAAI,EAAE;QAAET,YAAY;QAAED,OAAO,EAAEA,OAAO,CAACU,IAAI,CAACC,QAAQ,CAAC;MAAE;IACzD,CAAC,CAAC;EACJ;EAEA,KAAK,MAAMY,OAAO,IAAIrB,QAAQ,EAAE;IAC9B,IAAI;MACF,MAAMqB,OAAO,CAAChB,OAAO,EAAEP,OAAO,CAACwB,UAAU,EAAExB,OAAO,CAACyB,WAAW,CAAC;IACjE,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAAC,kBAAW,EAACD,KAAK,CAAC;IACpB;EACF;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_handleMessage","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/entities/PubSub/handleMessage/index.ts"],"sourcesContent":["export * from './handleMessage';\r\n"],"mappings":";;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,cAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,cAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,cAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_handleMessage","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/entities/PubSub/handleMessage/index.ts"],"sourcesContent":["export * from './handleMessage';\n"],"mappings":";;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,cAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,cAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,cAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_PubSub","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_PubSub2"],"sources":["../../../src/entities/PubSub/index.ts"],"sourcesContent":["export * from './PubSub';\r\nexport * from './PubSub.types';\r\n"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,QAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,QAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,QAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,QAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_PubSub","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_PubSub2"],"sources":["../../../src/entities/PubSub/index.ts"],"sourcesContent":["export * from './PubSub';\nexport * from './PubSub.types';\n"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,QAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,QAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,QAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,QAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -21,10 +21,10 @@ const PushNotification = exports.PushNotification = {
21
21
  // Register publisher
22
22
  _PubSub.PubSub.addPublisher(process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC);
23
23
  },
24
- /**
25
- * Send a push notification through the push service
26
- * @param userId - ID of the user that should receive the notification
27
- * @param notification - Notification that should be sent
24
+ /**
25
+ * Send a push notification through the push service
26
+ * @param userId - ID of the user that should receive the notification
27
+ * @param notification - Notification that should be sent
28
28
  */
29
29
  async sendPush(userId, notification) {
30
30
  (0, _utils.reportDebug)({
@@ -1 +1 @@
1
- {"version":3,"file":"PushNotification.js","names":["_","require","_PubSub","_utils","namespace","PushNotification","exports","init","reportDebug","message","process","env","PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC","EngineError","PubSub","addPublisher","sendPush","userId","notification","data","publish"],"sources":["../../../src/entities/PushNotification/PushNotification.ts"],"sourcesContent":["import { PushNotificationNotification } from './PushNotification.types';\r\nimport { EngineError } from 'entities';\r\nimport { PubSub } from 'entities/PubSub';\r\nimport { reportDebug } from 'utils';\r\n\r\nconst namespace = 'engine:PushNotification';\r\n\r\nexport const PushNotification = {\r\n /** Initialize the push notification entity */\r\n init(): void {\r\n reportDebug({ namespace, message: 'Initializing PushNotification' });\r\n if (!process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC)\r\n throw new EngineError({\r\n message:\r\n 'Environment variable PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC is not defined'\r\n });\r\n // Register publisher\r\n PubSub.addPublisher(process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC);\r\n },\r\n\r\n /**\r\n * Send a push notification through the push service\r\n * @param userId - ID of the user that should receive the notification\r\n * @param notification - Notification that should be sent\r\n */\r\n async sendPush(\r\n userId: string,\r\n notification: PushNotificationNotification\r\n ): Promise<void> {\r\n reportDebug({\r\n namespace,\r\n message: `Received data to send notification to user with Id '${userId}'`,\r\n data: { userId, notification }\r\n });\r\n\r\n await PubSub.publish(\r\n process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC as string,\r\n {\r\n ...notification,\r\n userId\r\n }\r\n );\r\n }\r\n};\r\n"],"mappings":";;;;;;AACA,IAAAA,CAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA,MAAMG,SAAS,GAAG,yBAAyB;AAEpC,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EAC9B;EACAE,IAAIA,CAAA,EAAS;IACX,IAAAC,kBAAW,EAAC;MAAEJ,SAAS;MAAEK,OAAO,EAAE;IAAgC,CAAC,CAAC;IACpE,IAAI,CAACC,OAAO,CAACC,GAAG,CAACC,oCAAoC,EACnD,MAAM,IAAIC,aAAW,CAAC;MACpBJ,OAAO,EACL;IACJ,CAAC,CAAC;IACJ;IACAK,cAAM,CAACC,YAAY,CAACL,OAAO,CAACC,GAAG,CAACC,oCAAoC,CAAC;EACvE,CAAC;EAED;AACF;AACA;AACA;AACA;EACE,MAAMI,QAAQA,CACZC,MAAc,EACdC,YAA0C,EAC3B;IACf,IAAAV,kBAAW,EAAC;MACVJ,SAAS;MACTK,OAAO,EAAE,uDAAuDQ,MAAM,GAAG;MACzEE,IAAI,EAAE;QAAEF,MAAM;QAAEC;MAAa;IAC/B,CAAC,CAAC;IAEF,MAAMJ,cAAM,CAACM,OAAO,CAClBV,OAAO,CAACC,GAAG,CAACC,oCAAoC,EAChD;MACE,GAAGM,YAAY;MACfD;IACF,CACF,CAAC;EACH;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"PushNotification.js","names":["_","require","_PubSub","_utils","namespace","PushNotification","exports","init","reportDebug","message","process","env","PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC","EngineError","PubSub","addPublisher","sendPush","userId","notification","data","publish"],"sources":["../../../src/entities/PushNotification/PushNotification.ts"],"sourcesContent":["import { PushNotificationNotification } from './PushNotification.types';\nimport { EngineError } from 'entities';\nimport { PubSub } from 'entities/PubSub';\nimport { reportDebug } from 'utils';\n\nconst namespace = 'engine:PushNotification';\n\nexport const PushNotification = {\n /** Initialize the push notification entity */\n init(): void {\n reportDebug({ namespace, message: 'Initializing PushNotification' });\n if (!process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC)\n throw new EngineError({\n message:\n 'Environment variable PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC is not defined'\n });\n // Register publisher\n PubSub.addPublisher(process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC);\n },\n\n /**\n * Send a push notification through the push service\n * @param userId - ID of the user that should receive the notification\n * @param notification - Notification that should be sent\n */\n async sendPush(\n userId: string,\n notification: PushNotificationNotification\n ): Promise<void> {\n reportDebug({\n namespace,\n message: `Received data to send notification to user with Id '${userId}'`,\n data: { userId, notification }\n });\n\n await PubSub.publish(\n process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC as string,\n {\n ...notification,\n userId\n }\n );\n }\n};\n"],"mappings":";;;;;;AACA,IAAAA,CAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA,MAAMG,SAAS,GAAG,yBAAyB;AAEpC,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EAC9B;EACAE,IAAIA,CAAA,EAAS;IACX,IAAAC,kBAAW,EAAC;MAAEJ,SAAS;MAAEK,OAAO,EAAE;IAAgC,CAAC,CAAC;IACpE,IAAI,CAACC,OAAO,CAACC,GAAG,CAACC,oCAAoC,EACnD,MAAM,IAAIC,aAAW,CAAC;MACpBJ,OAAO,EACL;IACJ,CAAC,CAAC;IACJ;IACAK,cAAM,CAACC,YAAY,CAACL,OAAO,CAACC,GAAG,CAACC,oCAAoC,CAAC;EACvE,CAAC;EAED;AACF;AACA;AACA;AACA;EACE,MAAMI,QAAQA,CACZC,MAAc,EACdC,YAA0C,EAC3B;IACf,IAAAV,kBAAW,EAAC;MACVJ,SAAS;MACTK,OAAO,EAAE,uDAAuDQ,MAAM,GAAG;MACzEE,IAAI,EAAE;QAAEF,MAAM;QAAEC;MAAa;IAC/B,CAAC,CAAC;IAEF,MAAMJ,cAAM,CAACM,OAAO,CAClBV,OAAO,CAACC,GAAG,CAACC,oCAAoC,EAChD;MACE,GAAGM,YAAY;MACfD;IACF,CACF,CAAC;EACH;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PushNotification.types.js","names":[],"sources":["../../../src/entities/PushNotification/PushNotification.types.ts"],"sourcesContent":["/** Notification to send to the user's device */\r\nexport interface PushNotificationNotification {\r\n /** Title of the notification */\r\n title?: string;\r\n /** Body of the notification */\r\n body?: string;\r\n /** Data payload of the notification */\r\n payload?: unknown;\r\n /** Indicates that the notification is a VOIP notification */\r\n voip?: boolean;\r\n /** Indicate that it is a background notification (data only, low priority) */\r\n background?: boolean;\r\n /** Push token can be specified here is we want to send to a given user */\r\n token?: string;\r\n /** Indicates that the data content can be mutated by the client (iOS) */\r\n mutable?: boolean;\r\n /** Indicates that the notification requires some client side processing to be displayed (iOS) */\r\n contentAvailable?: boolean;\r\n /** Time to live of the notification in seconds. After this the notification will not be distributed */\r\n ttl?: number;\r\n /** Indicate that it is a high priority notification */\r\n priority?: boolean;\r\n /** Notifications with the same string here will be collapsed in the system tray */\r\n collapseId?: string;\r\n}\r\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"PushNotification.types.js","names":[],"sources":["../../../src/entities/PushNotification/PushNotification.types.ts"],"sourcesContent":["/** Notification to send to the user's device */\nexport interface PushNotificationNotification {\n /** Title of the notification */\n title?: string;\n /** Body of the notification */\n body?: string;\n /** Data payload of the notification */\n payload?: unknown;\n /** Indicates that the notification is a VOIP notification */\n voip?: boolean;\n /** Indicate that it is a background notification (data only, low priority) */\n background?: boolean;\n /** Push token can be specified here is we want to send to a given user */\n token?: string;\n /** Indicates that the data content can be mutated by the client (iOS) */\n mutable?: boolean;\n /** Indicates that the notification requires some client side processing to be displayed (iOS) */\n contentAvailable?: boolean;\n /** Time to live of the notification in seconds. After this the notification will not be distributed */\n ttl?: number;\n /** Indicate that it is a high priority notification */\n priority?: boolean;\n /** Notifications with the same string here will be collapsed in the system tray */\n collapseId?: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_PushNotification","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_PushNotification2"],"sources":["../../../src/entities/PushNotification/index.ts"],"sourcesContent":["export * from './PushNotification';\r\nexport * from './PushNotification.types';\r\n"],"mappings":";;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,iBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,iBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,iBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,kBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,kBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,kBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,kBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_PushNotification","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_PushNotification2"],"sources":["../../../src/entities/PushNotification/index.ts"],"sourcesContent":["export * from './PushNotification';\nexport * from './PushNotification.types';\n"],"mappings":";;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,iBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,iBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,iBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,kBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,kBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,kBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,kBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -14,8 +14,8 @@ var _EngineError = require("../EngineError");
14
14
  var _LifecycleController = require("../LifecycleController");
15
15
  let redisClient = exports.redisClient = void 0;
16
16
 
17
- /**
18
- * We use a proxy to extend the Redis behavior and allow initialization of the client only when needed while keeping the same interface
17
+ /**
18
+ * We use a proxy to extend the Redis behavior and allow initialization of the client only when needed while keeping the same interface
19
19
  */
20
20
  const Redis = exports.Redis = new Proxy(
21
21
  // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly
@@ -36,8 +36,8 @@ const Redis = exports.Redis = new Proxy(
36
36
  }
37
37
  });
38
38
 
39
- /**
40
- * On init create client anc connect
39
+ /**
40
+ * On init create client anc connect
41
41
  */
42
42
  function init() {
43
43
  // Ignore if already initialized
@@ -46,16 +46,16 @@ function init() {
46
46
  _LifecycleController.LifecycleController.register(Redis);
47
47
  }
48
48
 
49
- /**
50
- * On shutdown close connection and clear client
49
+ /**
50
+ * On shutdown close connection and clear client
51
51
  */
52
52
  async function shutdown() {
53
53
  if (redisClient) await redisClient.quit();
54
54
  exports.redisClient = redisClient = undefined;
55
55
  }
56
56
 
57
- /**
58
- * Create Redis client
57
+ /**
58
+ * Create Redis client
59
59
  */
60
60
  function createRedisClient(options = {}) {
61
61
  // Check that environment variables are correctly set
@@ -1 +1 @@
1
- {"version":3,"file":"Redis.js","names":["_ioredis","require","_Redis","_EngineError","_LifecycleController","redisClient","exports","Redis","Proxy","get","target","property","init","shutdown","EngineError","message","createRedisClient","LifecycleController","register","quit","undefined","options","validateRedisEnvironment","process","env","REDIS_HOST","RedisClient","port","REDIS_PORT","parseInt","host","username","REDIS_USERNAME","password","REDIS_PASSWORD","db"],"sources":["../../../src/entities/Redis/Redis.ts"],"sourcesContent":["import { Redis as RedisClient } from 'ioredis';\r\nimport { RedisInterface, RedisCreateOptions } from './Redis.types';\r\nimport { validateRedisEnvironment } from './Redis.validate';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { LifecycleController } from 'entities/LifecycleController';\r\n\r\nexport let redisClient: undefined | RedisClient;\r\n\r\n/**\r\n * We use a proxy to extend the Redis behavior and allow initialization of the client only when needed while keeping the same interface\r\n */\r\nexport const Redis = new Proxy<RedisInterface>(\r\n // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n {},\r\n {\r\n get: function (target, property): unknown {\r\n if (property === 'init') return init;\r\n if (property === 'shutdown') return shutdown;\r\n // Create the redis client if it does not exist\r\n if (!redisClient)\r\n throw new EngineError({ message: 'Redis client was not initialized' });\r\n // Call the function on the redis client\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n return redisClient[property] as unknown;\r\n }\r\n }\r\n);\r\n\r\n/**\r\n * On init create client anc connect\r\n */\r\nexport function init(): void {\r\n // Ignore if already initialized\r\n if (redisClient) return;\r\n redisClient = createRedisClient();\r\n LifecycleController.register(Redis);\r\n}\r\n\r\n/**\r\n * On shutdown close connection and clear client\r\n */\r\nexport async function shutdown(): Promise<void> {\r\n if (redisClient) await redisClient.quit();\r\n redisClient = undefined;\r\n}\r\n\r\n/**\r\n * Create Redis client\r\n */\r\nexport function createRedisClient(\r\n options: RedisCreateOptions = {}\r\n): RedisClient {\r\n // Check that environment variables are correctly set\r\n validateRedisEnvironment(options);\r\n // Throw an error if there is no host initial\r\n if (!process.env.REDIS_HOST)\r\n throw new EngineError({\r\n message: 'Host required to initialize Redis connection'\r\n });\r\n\r\n return new RedisClient({\r\n port: process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : undefined,\r\n host: process.env.REDIS_HOST,\r\n username: process.env.REDIS_USERNAME,\r\n password: process.env.REDIS_PASSWORD,\r\n db: 0\r\n });\r\n}\r\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AAEO,IAAII,WAAoC,GAAAC,OAAA,CAAAD,WAAA;;AAE/C;AACA;AACA;AACO,MAAME,KAAK,GAAAD,OAAA,CAAAC,KAAA,GAAG,IAAIC,KAAK;AAC5B;AACA;AACA;AACA,CAAC,CAAC,EACF;EACEC,GAAG,EAAE,SAAAA,CAAUC,MAAM,EAAEC,QAAQ,EAAW;IACxC,IAAIA,QAAQ,KAAK,MAAM,EAAE,OAAOC,IAAI;IACpC,IAAID,QAAQ,KAAK,UAAU,EAAE,OAAOE,QAAQ;IAC5C;IACA,IAAI,CAACR,WAAW,EACd,MAAM,IAAIS,wBAAW,CAAC;MAAEC,OAAO,EAAE;IAAmC,CAAC,CAAC;IACxE;IACA;IACA;IACA,OAAOV,WAAW,CAACM,QAAQ,CAAC;EAC9B;AACF,CACF,CAAC;;AAED;AACA;AACA;AACO,SAASC,IAAIA,CAAA,EAAS;EAC3B;EACA,IAAIP,WAAW,EAAE;EACjBC,OAAA,CAAAD,WAAA,GAAAA,WAAW,GAAGW,iBAAiB,CAAC,CAAC;EACjCC,wCAAmB,CAACC,QAAQ,CAACX,KAAK,CAAC;AACrC;;AAEA;AACA;AACA;AACO,eAAeM,QAAQA,CAAA,EAAkB;EAC9C,IAAIR,WAAW,EAAE,MAAMA,WAAW,CAACc,IAAI,CAAC,CAAC;EACzCb,OAAA,CAAAD,WAAA,GAAAA,WAAW,GAAGe,SAAS;AACzB;;AAEA;AACA;AACA;AACO,SAASJ,iBAAiBA,CAC/BK,OAA2B,GAAG,CAAC,CAAC,EACnB;EACb;EACA,IAAAC,+BAAwB,EAACD,OAAO,CAAC;EACjC;EACA,IAAI,CAACE,OAAO,CAACC,GAAG,CAACC,UAAU,EACzB,MAAM,IAAIX,wBAAW,CAAC;IACpBC,OAAO,EAAE;EACX,CAAC,CAAC;EAEJ,OAAO,IAAIW,cAAW,CAAC;IACrBC,IAAI,EAAEJ,OAAO,CAACC,GAAG,CAACI,UAAU,GAAGC,QAAQ,CAACN,OAAO,CAACC,GAAG,CAACI,UAAU,CAAC,GAAGR,SAAS;IAC3EU,IAAI,EAAEP,OAAO,CAACC,GAAG,CAACC,UAAU;IAC5BM,QAAQ,EAAER,OAAO,CAACC,GAAG,CAACQ,cAAc;IACpCC,QAAQ,EAAEV,OAAO,CAACC,GAAG,CAACU,cAAc;IACpCC,EAAE,EAAE;EACN,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"Redis.js","names":["_ioredis","require","_Redis","_EngineError","_LifecycleController","redisClient","exports","Redis","Proxy","get","target","property","init","shutdown","EngineError","message","createRedisClient","LifecycleController","register","quit","undefined","options","validateRedisEnvironment","process","env","REDIS_HOST","RedisClient","port","REDIS_PORT","parseInt","host","username","REDIS_USERNAME","password","REDIS_PASSWORD","db"],"sources":["../../../src/entities/Redis/Redis.ts"],"sourcesContent":["import { Redis as RedisClient } from 'ioredis';\nimport { RedisInterface, RedisCreateOptions } from './Redis.types';\nimport { validateRedisEnvironment } from './Redis.validate';\nimport { EngineError } from 'entities/EngineError';\nimport { LifecycleController } from 'entities/LifecycleController';\n\nexport let redisClient: undefined | RedisClient;\n\n/**\n * We use a proxy to extend the Redis behavior and allow initialization of the client only when needed while keeping the same interface\n */\nexport const Redis = new Proxy<RedisInterface>(\n // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n {},\n {\n get: function (target, property): unknown {\n if (property === 'init') return init;\n if (property === 'shutdown') return shutdown;\n // Create the redis client if it does not exist\n if (!redisClient)\n throw new EngineError({ message: 'Redis client was not initialized' });\n // Call the function on the redis client\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return redisClient[property] as unknown;\n }\n }\n);\n\n/**\n * On init create client anc connect\n */\nexport function init(): void {\n // Ignore if already initialized\n if (redisClient) return;\n redisClient = createRedisClient();\n LifecycleController.register(Redis);\n}\n\n/**\n * On shutdown close connection and clear client\n */\nexport async function shutdown(): Promise<void> {\n if (redisClient) await redisClient.quit();\n redisClient = undefined;\n}\n\n/**\n * Create Redis client\n */\nexport function createRedisClient(\n options: RedisCreateOptions = {}\n): RedisClient {\n // Check that environment variables are correctly set\n validateRedisEnvironment(options);\n // Throw an error if there is no host initial\n if (!process.env.REDIS_HOST)\n throw new EngineError({\n message: 'Host required to initialize Redis connection'\n });\n\n return new RedisClient({\n port: process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : undefined,\n host: process.env.REDIS_HOST,\n username: process.env.REDIS_USERNAME,\n password: process.env.REDIS_PASSWORD,\n db: 0\n });\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AAEO,IAAII,WAAoC,GAAAC,OAAA,CAAAD,WAAA;;AAE/C;AACA;AACA;AACO,MAAME,KAAK,GAAAD,OAAA,CAAAC,KAAA,GAAG,IAAIC,KAAK;AAC5B;AACA;AACA;AACA,CAAC,CAAC,EACF;EACEC,GAAG,EAAE,SAAAA,CAAUC,MAAM,EAAEC,QAAQ,EAAW;IACxC,IAAIA,QAAQ,KAAK,MAAM,EAAE,OAAOC,IAAI;IACpC,IAAID,QAAQ,KAAK,UAAU,EAAE,OAAOE,QAAQ;IAC5C;IACA,IAAI,CAACR,WAAW,EACd,MAAM,IAAIS,wBAAW,CAAC;MAAEC,OAAO,EAAE;IAAmC,CAAC,CAAC;IACxE;IACA;IACA;IACA,OAAOV,WAAW,CAACM,QAAQ,CAAC;EAC9B;AACF,CACF,CAAC;;AAED;AACA;AACA;AACO,SAASC,IAAIA,CAAA,EAAS;EAC3B;EACA,IAAIP,WAAW,EAAE;EACjBC,OAAA,CAAAD,WAAA,GAAAA,WAAW,GAAGW,iBAAiB,CAAC,CAAC;EACjCC,wCAAmB,CAACC,QAAQ,CAACX,KAAK,CAAC;AACrC;;AAEA;AACA;AACA;AACO,eAAeM,QAAQA,CAAA,EAAkB;EAC9C,IAAIR,WAAW,EAAE,MAAMA,WAAW,CAACc,IAAI,CAAC,CAAC;EACzCb,OAAA,CAAAD,WAAA,GAAAA,WAAW,GAAGe,SAAS;AACzB;;AAEA;AACA;AACA;AACO,SAASJ,iBAAiBA,CAC/BK,OAA2B,GAAG,CAAC,CAAC,EACnB;EACb;EACA,IAAAC,+BAAwB,EAACD,OAAO,CAAC;EACjC;EACA,IAAI,CAACE,OAAO,CAACC,GAAG,CAACC,UAAU,EACzB,MAAM,IAAIX,wBAAW,CAAC;IACpBC,OAAO,EAAE;EACX,CAAC,CAAC;EAEJ,OAAO,IAAIW,cAAW,CAAC;IACrBC,IAAI,EAAEJ,OAAO,CAACC,GAAG,CAACI,UAAU,GAAGC,QAAQ,CAACN,OAAO,CAACC,GAAG,CAACI,UAAU,CAAC,GAAGR,SAAS;IAC3EU,IAAI,EAAEP,OAAO,CAACC,GAAG,CAACC,UAAU;IAC5BM,QAAQ,EAAER,OAAO,CAACC,GAAG,CAACQ,cAAc;IACpCC,QAAQ,EAAEV,OAAO,CAACC,GAAG,CAACU,cAAc;IACpCC,EAAE,EAAE;EACN,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Redis.types.js","names":[],"sources":["../../../src/entities/Redis/Redis.types.ts"],"sourcesContent":["import { Redis as IoRedis, Cluster, RedisOptions } from 'ioredis';\r\n\r\nexport type RedisInterface = IoRedis &\r\n Cluster & {\r\n /** Start the redis service */\r\n init: () => void;\r\n /** Stop the redis service */\r\n shutdown: () => Promise<void>;\r\n };\r\n\r\n/** Options to initialize a Redis client */\r\nexport interface RedisCreateOptions {\r\n /** Redis client settings */\r\n redis?: RedisOptions;\r\n /** Should the client perform readiness check when establishing the connection */\r\n enableReadyCheck?: boolean;\r\n /** Cluster mode read operation settings, can make reads on masters, slaves, or both */\r\n scaleReads?: string;\r\n}\r\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"Redis.types.js","names":[],"sources":["../../../src/entities/Redis/Redis.types.ts"],"sourcesContent":["import { Redis as IoRedis, Cluster, RedisOptions } from 'ioredis';\n\nexport type RedisInterface = IoRedis &\n Cluster & {\n /** Start the redis service */\n init: () => void;\n /** Stop the redis service */\n shutdown: () => Promise<void>;\n };\n\n/** Options to initialize a Redis client */\nexport interface RedisCreateOptions {\n /** Redis client settings */\n redis?: RedisOptions;\n /** Should the client perform readiness check when establishing the connection */\n enableReadyCheck?: boolean;\n /** Cluster mode read operation settings, can make reads on masters, slaves, or both */\n scaleReads?: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.validateRedisEnvironment = validateRedisEnvironment;
7
7
  var _EngineError = require("../EngineError");
8
- /**
9
- * Verify that the environment variables to connect to a Redis server are properly set
8
+ /**
9
+ * Verify that the environment variables to connect to a Redis server are properly set
10
10
  */
11
11
  function validateRedisEnvironment(options) {
12
12
  const host = process.env.REDIS_HOST ?? options.redis?.host;
@@ -1 +1 @@
1
- {"version":3,"file":"Redis.validate.js","names":["_EngineError","require","validateRedisEnvironment","options","host","process","env","REDIS_HOST","redis","EngineError","message","port","REDIS_PORT","parseInt"],"sources":["../../../src/entities/Redis/Redis.validate.ts"],"sourcesContent":["import { RedisCreateOptions } from './Redis.types';\r\nimport { EngineError } from 'entities/EngineError';\r\n\r\n/**\r\n * Verify that the environment variables to connect to a Redis server are properly set\r\n */\r\nexport function validateRedisEnvironment(options: RedisCreateOptions): void {\r\n const host = process.env.REDIS_HOST ?? options.redis?.host;\r\n if (typeof host !== 'string')\r\n throw new EngineError({ message: 'No host specified for Redis instance' });\r\n\r\n const port = process.env.REDIS_PORT\r\n ? parseInt(process.env.REDIS_PORT)\r\n : options.redis?.port;\r\n if (typeof port !== 'number')\r\n throw new EngineError({ message: 'No port specified for Redis instance' });\r\n}\r\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACO,SAASC,wBAAwBA,CAACC,OAA2B,EAAQ;EAC1E,MAAMC,IAAI,GAAGC,OAAO,CAACC,GAAG,CAACC,UAAU,IAAIJ,OAAO,CAACK,KAAK,EAAEJ,IAAI;EAC1D,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAC1B,MAAM,IAAIK,wBAAW,CAAC;IAAEC,OAAO,EAAE;EAAuC,CAAC,CAAC;EAE5E,MAAMC,IAAI,GAAGN,OAAO,CAACC,GAAG,CAACM,UAAU,GAC/BC,QAAQ,CAACR,OAAO,CAACC,GAAG,CAACM,UAAU,CAAC,GAChCT,OAAO,CAACK,KAAK,EAAEG,IAAI;EACvB,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAC1B,MAAM,IAAIF,wBAAW,CAAC;IAAEC,OAAO,EAAE;EAAuC,CAAC,CAAC;AAC9E","ignoreList":[]}
1
+ {"version":3,"file":"Redis.validate.js","names":["_EngineError","require","validateRedisEnvironment","options","host","process","env","REDIS_HOST","redis","EngineError","message","port","REDIS_PORT","parseInt"],"sources":["../../../src/entities/Redis/Redis.validate.ts"],"sourcesContent":["import { RedisCreateOptions } from './Redis.types';\nimport { EngineError } from 'entities/EngineError';\n\n/**\n * Verify that the environment variables to connect to a Redis server are properly set\n */\nexport function validateRedisEnvironment(options: RedisCreateOptions): void {\n const host = process.env.REDIS_HOST ?? options.redis?.host;\n if (typeof host !== 'string')\n throw new EngineError({ message: 'No host specified for Redis instance' });\n\n const port = process.env.REDIS_PORT\n ? parseInt(process.env.REDIS_PORT)\n : options.redis?.port;\n if (typeof port !== 'number')\n throw new EngineError({ message: 'No port specified for Redis instance' });\n}\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACO,SAASC,wBAAwBA,CAACC,OAA2B,EAAQ;EAC1E,MAAMC,IAAI,GAAGC,OAAO,CAACC,GAAG,CAACC,UAAU,IAAIJ,OAAO,CAACK,KAAK,EAAEJ,IAAI;EAC1D,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAC1B,MAAM,IAAIK,wBAAW,CAAC;IAAEC,OAAO,EAAE;EAAuC,CAAC,CAAC;EAE5E,MAAMC,IAAI,GAAGN,OAAO,CAACC,GAAG,CAACM,UAAU,GAC/BC,QAAQ,CAACR,OAAO,CAACC,GAAG,CAACM,UAAU,CAAC,GAChCT,OAAO,CAACK,KAAK,EAAEG,IAAI;EACvB,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAC1B,MAAM,IAAIF,wBAAW,CAAC;IAAEC,OAAO,EAAE;EAAuC,CAAC,CAAC;AAC9E","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_Redis","require","_Redis2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../../../src/entities/Redis/index.ts"],"sourcesContent":["export { Redis, createRedisClient } from './Redis';\r\nexport * from './Redis.types';\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_Redis","require","_Redis2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../../../src/entities/Redis/index.ts"],"sourcesContent":["export { Redis, createRedisClient } from './Redis';\nexport * from './Redis.types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Sequelize.config.js","names":["_Sequelize","require","validateSequelizeEnvironment","config","username","process","env","SQL_USER","password","SQL_PASSWORD","database","SQL_DB","host","SQL_HOST","port","SQL_PORT","parseInt","dialect","SQL_TYPE","logging","define","freezeTableName","charset","collate","retry","max","dialectOptions","pool","min","acquire","idle","requestTimeout","connectTimeout","encrypt","trustServerCertificate","timezone","ssl","PG_SSL","rejectUnauthorized","development","exports","staging","production","test","_default","default"],"sources":["../../../src/entities/Sequelize/Sequelize.config.ts"],"sourcesContent":["import { Options, Dialect } from 'sequelize';\r\nimport { validateSequelizeEnvironment } from './Sequelize.validate';\r\n\r\n// Check that environment variables are correctly set\r\nvalidateSequelizeEnvironment();\r\n\r\nconst config: Options = {\r\n username: process.env.SQL_USER,\r\n password: process.env.SQL_PASSWORD,\r\n database: process.env.SQL_DB,\r\n host: process.env.SQL_HOST,\r\n port: process.env.SQL_PORT ? parseInt(process.env.SQL_PORT) : 5432, // Default port for PostgreSQL\r\n dialect: (process.env.SQL_TYPE ?? 'postgres') as Dialect, // Dynamically set the dialect (postgres, mysql, mssql)\r\n logging: false, // Set to true for debugging SQL queries\r\n define: {\r\n freezeTableName: false, // Prevent automatic pluralization of table names\r\n charset: 'utf8mb4', // Set character set for MySQL/MariaDB\r\n collate: 'utf8mb4_unicode_ci' // Set collation for MySQL/MariaDB\r\n },\r\n retry: {\r\n max: 5 // Maximum retry attempts for failed queries\r\n },\r\n dialectOptions: {},\r\n pool: {\r\n max: 5,\r\n min: 0,\r\n acquire: 30000, // Maximum time to wait for a connection\r\n idle: 10000 // Maximum idle time for connections\r\n },\r\n};\r\n\r\n// Additional configurations for MSSQL\r\nif (config.dialect === 'mssql') {\r\n config.dialectOptions = {\r\n requestTimeout: 30000, // Increase request timeout for MSSQL\r\n connectTimeout: 30000, // Increase connection timeout for MSSQL\r\n encrypt: true, // Use encryption for MSSQL (set to false if not needed)\r\n trustServerCertificate: true, // Set to true if using self-signed certificates\r\n };\r\n}\r\n\r\n// Add specific dialect configurations if necessary for MySQL/PostgreSQL\r\nif (config.dialect === 'mysql') {\r\n config.dialectOptions = {\r\n timezone: 'Z', // Set timezone for MySQL\r\n };\r\n}\r\n\r\nif (config.dialect === 'postgres') {\r\n config.dialectOptions = {\r\n ssl: process.env.PG_SSL === 'true' ? { rejectUnauthorized: false } : false, // SSL options for PostgreSQL (if required)\r\n };\r\n}\r\n\r\nexport const development = config;\r\nexport const staging = config;\r\nexport const production = config;\r\nexport const test = config;\r\nexport default config;\r\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAEA;AACA,IAAAC,uCAA4B,EAAC,CAAC;AAE9B,MAAMC,MAAe,GAAG;EACtBC,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,QAAQ;EAC9BC,QAAQ,EAAEH,OAAO,CAACC,GAAG,CAACG,YAAY;EAClCC,QAAQ,EAAEL,OAAO,CAACC,GAAG,CAACK,MAAM;EAC5BC,IAAI,EAAEP,OAAO,CAACC,GAAG,CAACO,QAAQ;EAC1BC,IAAI,EAAET,OAAO,CAACC,GAAG,CAACS,QAAQ,GAAGC,QAAQ,CAACX,OAAO,CAACC,GAAG,CAACS,QAAQ,CAAC,GAAG,IAAI;EAAE;EACpEE,OAAO,EAAGZ,OAAO,CAACC,GAAG,CAACY,QAAQ,IAAI,UAAsB;EAAE;EAC1DC,OAAO,EAAE,KAAK;EAAE;EAChBC,MAAM,EAAE;IACNC,eAAe,EAAE,KAAK;IAAE;IACxBC,OAAO,EAAE,SAAS;IAAE;IACpBC,OAAO,EAAE,oBAAoB,CAAC;EAChC,CAAC;EACDC,KAAK,EAAE;IACLC,GAAG,EAAE,CAAC,CAAC;EACT,CAAC;EACDC,cAAc,EAAE,CAAC,CAAC;EAClBC,IAAI,EAAE;IACJF,GAAG,EAAE,CAAC;IACNG,GAAG,EAAE,CAAC;IACNC,OAAO,EAAE,KAAK;IAAE;IAChBC,IAAI,EAAE,KAAK,CAAC;EACd;AACF,CAAC;;AAED;AACA,IAAI3B,MAAM,CAACc,OAAO,KAAK,OAAO,EAAE;EAC9Bd,MAAM,CAACuB,cAAc,GAAG;IACtBK,cAAc,EAAE,KAAK;IAAE;IACvBC,cAAc,EAAE,KAAK;IAAE;IACvBC,OAAO,EAAE,IAAI;IAAE;IACfC,sBAAsB,EAAE,IAAI,CAAE;EAChC,CAAC;AACH;;AAEA;AACA,IAAI/B,MAAM,CAACc,OAAO,KAAK,OAAO,EAAE;EAC9Bd,MAAM,CAACuB,cAAc,GAAG;IACtBS,QAAQ,EAAE,GAAG,CAAE;EACjB,CAAC;AACH;AAEA,IAAIhC,MAAM,CAACc,OAAO,KAAK,UAAU,EAAE;EACjCd,MAAM,CAACuB,cAAc,GAAG;IACtBU,GAAG,EAAE/B,OAAO,CAACC,GAAG,CAAC+B,MAAM,KAAK,MAAM,GAAG;MAAEC,kBAAkB,EAAE;IAAM,CAAC,GAAG,KAAK,CAAE;EAC9E,CAAC;AACH;AAEO,MAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGpC,MAAM;AAC1B,MAAMsC,OAAO,GAAAD,OAAA,CAAAC,OAAA,GAAGtC,MAAM;AACtB,MAAMuC,UAAU,GAAAF,OAAA,CAAAE,UAAA,GAAGvC,MAAM;AACzB,MAAMwC,IAAI,GAAAH,OAAA,CAAAG,IAAA,GAAGxC,MAAM;AAAC,IAAAyC,QAAA,GAAAJ,OAAA,CAAAK,OAAA,GACZ1C,MAAM","ignoreList":[]}
1
+ {"version":3,"file":"Sequelize.config.js","names":["_Sequelize","require","validateSequelizeEnvironment","config","username","process","env","SQL_USER","password","SQL_PASSWORD","database","SQL_DB","host","SQL_HOST","port","SQL_PORT","parseInt","dialect","SQL_TYPE","logging","define","freezeTableName","charset","collate","retry","max","dialectOptions","pool","min","acquire","idle","requestTimeout","connectTimeout","encrypt","trustServerCertificate","timezone","ssl","PG_SSL","rejectUnauthorized","development","exports","staging","production","test","_default","default"],"sources":["../../../src/entities/Sequelize/Sequelize.config.ts"],"sourcesContent":["import { Options, Dialect } from 'sequelize';\nimport { validateSequelizeEnvironment } from './Sequelize.validate';\n\n// Check that environment variables are correctly set\nvalidateSequelizeEnvironment();\n\nconst config: Options = {\n username: process.env.SQL_USER,\n password: process.env.SQL_PASSWORD,\n database: process.env.SQL_DB,\n host: process.env.SQL_HOST,\n port: process.env.SQL_PORT ? parseInt(process.env.SQL_PORT) : 5432, // Default port for PostgreSQL\n dialect: (process.env.SQL_TYPE ?? 'postgres') as Dialect, // Dynamically set the dialect (postgres, mysql, mssql)\n logging: false, // Set to true for debugging SQL queries\n define: {\n freezeTableName: false, // Prevent automatic pluralization of table names\n charset: 'utf8mb4', // Set character set for MySQL/MariaDB\n collate: 'utf8mb4_unicode_ci' // Set collation for MySQL/MariaDB\n },\n retry: {\n max: 5 // Maximum retry attempts for failed queries\n },\n dialectOptions: {},\n pool: {\n max: 5,\n min: 0,\n acquire: 30000, // Maximum time to wait for a connection\n idle: 10000 // Maximum idle time for connections\n },\n};\n\n// Additional configurations for MSSQL\nif (config.dialect === 'mssql') {\n config.dialectOptions = {\n requestTimeout: 30000, // Increase request timeout for MSSQL\n connectTimeout: 30000, // Increase connection timeout for MSSQL\n encrypt: true, // Use encryption for MSSQL (set to false if not needed)\n trustServerCertificate: true, // Set to true if using self-signed certificates\n };\n}\n\n// Add specific dialect configurations if necessary for MySQL/PostgreSQL\nif (config.dialect === 'mysql') {\n config.dialectOptions = {\n timezone: 'Z', // Set timezone for MySQL\n };\n}\n\nif (config.dialect === 'postgres') {\n config.dialectOptions = {\n ssl: process.env.PG_SSL === 'true' ? { rejectUnauthorized: false } : false, // SSL options for PostgreSQL (if required)\n };\n}\n\nexport const development = config;\nexport const staging = config;\nexport const production = config;\nexport const test = config;\nexport default config;\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAEA;AACA,IAAAC,uCAA4B,EAAC,CAAC;AAE9B,MAAMC,MAAe,GAAG;EACtBC,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,QAAQ;EAC9BC,QAAQ,EAAEH,OAAO,CAACC,GAAG,CAACG,YAAY;EAClCC,QAAQ,EAAEL,OAAO,CAACC,GAAG,CAACK,MAAM;EAC5BC,IAAI,EAAEP,OAAO,CAACC,GAAG,CAACO,QAAQ;EAC1BC,IAAI,EAAET,OAAO,CAACC,GAAG,CAACS,QAAQ,GAAGC,QAAQ,CAACX,OAAO,CAACC,GAAG,CAACS,QAAQ,CAAC,GAAG,IAAI;EAAE;EACpEE,OAAO,EAAGZ,OAAO,CAACC,GAAG,CAACY,QAAQ,IAAI,UAAsB;EAAE;EAC1DC,OAAO,EAAE,KAAK;EAAE;EAChBC,MAAM,EAAE;IACNC,eAAe,EAAE,KAAK;IAAE;IACxBC,OAAO,EAAE,SAAS;IAAE;IACpBC,OAAO,EAAE,oBAAoB,CAAC;EAChC,CAAC;EACDC,KAAK,EAAE;IACLC,GAAG,EAAE,CAAC,CAAC;EACT,CAAC;EACDC,cAAc,EAAE,CAAC,CAAC;EAClBC,IAAI,EAAE;IACJF,GAAG,EAAE,CAAC;IACNG,GAAG,EAAE,CAAC;IACNC,OAAO,EAAE,KAAK;IAAE;IAChBC,IAAI,EAAE,KAAK,CAAC;EACd;AACF,CAAC;;AAED;AACA,IAAI3B,MAAM,CAACc,OAAO,KAAK,OAAO,EAAE;EAC9Bd,MAAM,CAACuB,cAAc,GAAG;IACtBK,cAAc,EAAE,KAAK;IAAE;IACvBC,cAAc,EAAE,KAAK;IAAE;IACvBC,OAAO,EAAE,IAAI;IAAE;IACfC,sBAAsB,EAAE,IAAI,CAAE;EAChC,CAAC;AACH;;AAEA;AACA,IAAI/B,MAAM,CAACc,OAAO,KAAK,OAAO,EAAE;EAC9Bd,MAAM,CAACuB,cAAc,GAAG;IACtBS,QAAQ,EAAE,GAAG,CAAE;EACjB,CAAC;AACH;AAEA,IAAIhC,MAAM,CAACc,OAAO,KAAK,UAAU,EAAE;EACjCd,MAAM,CAACuB,cAAc,GAAG;IACtBU,GAAG,EAAE/B,OAAO,CAACC,GAAG,CAAC+B,MAAM,KAAK,MAAM,GAAG;MAAEC,kBAAkB,EAAE;IAAM,CAAC,GAAG,KAAK,CAAE;EAC9E,CAAC;AACH;AAEO,MAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGpC,MAAM;AAC1B,MAAMsC,OAAO,GAAAD,OAAA,CAAAC,OAAA,GAAGtC,MAAM;AACtB,MAAMuC,UAAU,GAAAF,OAAA,CAAAE,UAAA,GAAGvC,MAAM;AACzB,MAAMwC,IAAI,GAAAH,OAAA,CAAAG,IAAA,GAAGxC,MAAM;AAAC,IAAAyC,QAAA,GAAAJ,OAAA,CAAAK,OAAA,GACZ1C,MAAM","ignoreList":[]}
@@ -16,8 +16,8 @@ var _EngineError = require("../EngineError");
16
16
  var _LifecycleController = require("../LifecycleController");
17
17
  let sequelizeClient = exports.sequelizeClient = void 0;
18
18
 
19
- /**
20
- * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface
19
+ /**
20
+ * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface
21
21
  */
22
22
  const sequelize = exports.sequelize = new Proxy(
23
23
  // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly
@@ -1 +1 @@
1
- {"version":3,"file":"Sequelize.js","names":["_sequelizeTypescript","require","_Sequelize","_interopRequireDefault","_Sequelize2","_EngineError","_LifecycleController","sequelizeClient","exports","sequelize","Proxy","get","target","property","init","shutdown","addModels","EngineError","message","createSequelizeClient","authenticate","then","console","log","catch","err","error","LifecycleController","register","close","undefined","models","sync","validateSequelizeEnvironment","Sequelize","process","env","SQL_DB","SQL_USER","SQL_PASSWORD","dbConfig"],"sources":["../../../src/entities/Sequelize/Sequelize.ts"],"sourcesContent":["import { Sequelize, ModelCtor } from 'sequelize-typescript';\r\nimport dbConfig from './Sequelize.config';\r\nimport { Sequelize as SequelizeInterface } from './Sequelize.types';\r\nimport { validateSequelizeEnvironment } from './Sequelize.validate';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { LifecycleController } from 'entities/LifecycleController';\r\n\r\nexport let sequelizeClient: undefined | Sequelize;\r\n\r\n/**\r\n * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface\r\n */\r\nexport const sequelize = new Proxy<SequelizeInterface>(\r\n // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n {},\r\n {\r\n get: function (target, property): unknown {\r\n if (property === 'init') return init;\r\n if (property === 'shutdown') return shutdown;\r\n if (property === 'addModels') return addModels;\r\n // Create the sequelize client if it does not exist\r\n if (!sequelizeClient)\r\n throw new EngineError({\r\n message: 'Sequelize client was not initialized'\r\n });\r\n // Call the function on the sequelize client\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n return sequelizeClient[property] as unknown;\r\n }\r\n }\r\n);\r\n\r\n/** On init create client and connect */\r\nexport function init(): void {\r\n // Ignore if already initialized\r\n if (sequelizeClient) return;\r\n sequelizeClient = createSequelizeClient();\r\n sequelizeClient\r\n .authenticate()\r\n .then(() => console.log('Connected to database.'))\r\n .catch((err: Error) =>\r\n console.error('Unable to connect to the database:', err)\r\n );\r\n LifecycleController.register(sequelize);\r\n}\r\n\r\n/** On shutdown close connection and clear client */\r\nexport async function shutdown(): Promise<void> {\r\n if (sequelizeClient) await sequelizeClient.close();\r\n sequelizeClient = undefined;\r\n}\r\n\r\nexport function addModels(models: Array<ModelCtor>): void {\r\n if (!sequelizeClient)\r\n throw new EngineError({\r\n message: 'Sequelize client was not initialized'\r\n });\r\n sequelizeClient.addModels(models);\r\n sequelizeClient.sync();\r\n}\r\n\r\n/** Create Sequelize client */\r\nexport function createSequelizeClient(): Sequelize {\r\n // Throw an error if there is no host initial\r\n validateSequelizeEnvironment();\r\n return new Sequelize(\r\n process.env.SQL_DB as string,\r\n process.env.SQL_USER as string,\r\n process.env.SQL_PASSWORD as string,\r\n dbConfig\r\n );\r\n}\r\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AAEO,IAAIM,eAAsC,GAAAC,OAAA,CAAAD,eAAA;;AAEjD;AACA;AACA;AACO,MAAME,SAAS,GAAAD,OAAA,CAAAC,SAAA,GAAG,IAAIC,KAAK;AAChC;AACA;AACA;AACA,CAAC,CAAC,EACF;EACEC,GAAG,EAAE,SAAAA,CAAUC,MAAM,EAAEC,QAAQ,EAAW;IACxC,IAAIA,QAAQ,KAAK,MAAM,EAAE,OAAOC,IAAI;IACpC,IAAID,QAAQ,KAAK,UAAU,EAAE,OAAOE,QAAQ;IAC5C,IAAIF,QAAQ,KAAK,WAAW,EAAE,OAAOG,SAAS;IAC9C;IACA,IAAI,CAACT,eAAe,EAClB,MAAM,IAAIU,wBAAW,CAAC;MACpBC,OAAO,EAAE;IACX,CAAC,CAAC;IACJ;IACA;IACA;IACA,OAAOX,eAAe,CAACM,QAAQ,CAAC;EAClC;AACF,CACF,CAAC;;AAED;AACO,SAASC,IAAIA,CAAA,EAAS;EAC3B;EACA,IAAIP,eAAe,EAAE;EACrBC,OAAA,CAAAD,eAAA,GAAAA,eAAe,GAAGY,qBAAqB,CAAC,CAAC;EACzCZ,eAAe,CACZa,YAAY,CAAC,CAAC,CACdC,IAAI,CAAC,MAAMC,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CACjDC,KAAK,CAAEC,GAAU,IAChBH,OAAO,CAACI,KAAK,CAAC,oCAAoC,EAAED,GAAG,CACzD,CAAC;EACHE,wCAAmB,CAACC,QAAQ,CAACnB,SAAS,CAAC;AACzC;;AAEA;AACO,eAAeM,QAAQA,CAAA,EAAkB;EAC9C,IAAIR,eAAe,EAAE,MAAMA,eAAe,CAACsB,KAAK,CAAC,CAAC;EAClDrB,OAAA,CAAAD,eAAA,GAAAA,eAAe,GAAGuB,SAAS;AAC7B;AAEO,SAASd,SAASA,CAACe,MAAwB,EAAQ;EACxD,IAAI,CAACxB,eAAe,EAClB,MAAM,IAAIU,wBAAW,CAAC;IACpBC,OAAO,EAAE;EACX,CAAC,CAAC;EACJX,eAAe,CAACS,SAAS,CAACe,MAAM,CAAC;EACjCxB,eAAe,CAACyB,IAAI,CAAC,CAAC;AACxB;;AAEA;AACO,SAASb,qBAAqBA,CAAA,EAAc;EACjD;EACA,IAAAc,wCAA4B,EAAC,CAAC;EAC9B,OAAO,IAAIC,8BAAS,CAClBC,OAAO,CAACC,GAAG,CAACC,MAAM,EAClBF,OAAO,CAACC,GAAG,CAACE,QAAQ,EACpBH,OAAO,CAACC,GAAG,CAACG,YAAY,EACxBC,kBACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"Sequelize.js","names":["_sequelizeTypescript","require","_Sequelize","_interopRequireDefault","_Sequelize2","_EngineError","_LifecycleController","sequelizeClient","exports","sequelize","Proxy","get","target","property","init","shutdown","addModels","EngineError","message","createSequelizeClient","authenticate","then","console","log","catch","err","error","LifecycleController","register","close","undefined","models","sync","validateSequelizeEnvironment","Sequelize","process","env","SQL_DB","SQL_USER","SQL_PASSWORD","dbConfig"],"sources":["../../../src/entities/Sequelize/Sequelize.ts"],"sourcesContent":["import { Sequelize, ModelCtor } from 'sequelize-typescript';\nimport dbConfig from './Sequelize.config';\nimport { Sequelize as SequelizeInterface } from './Sequelize.types';\nimport { validateSequelizeEnvironment } from './Sequelize.validate';\nimport { EngineError } from 'entities/EngineError';\nimport { LifecycleController } from 'entities/LifecycleController';\n\nexport let sequelizeClient: undefined | Sequelize;\n\n/**\n * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface\n */\nexport const sequelize = new Proxy<SequelizeInterface>(\n // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n {},\n {\n get: function (target, property): unknown {\n if (property === 'init') return init;\n if (property === 'shutdown') return shutdown;\n if (property === 'addModels') return addModels;\n // Create the sequelize client if it does not exist\n if (!sequelizeClient)\n throw new EngineError({\n message: 'Sequelize client was not initialized'\n });\n // Call the function on the sequelize client\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return sequelizeClient[property] as unknown;\n }\n }\n);\n\n/** On init create client and connect */\nexport function init(): void {\n // Ignore if already initialized\n if (sequelizeClient) return;\n sequelizeClient = createSequelizeClient();\n sequelizeClient\n .authenticate()\n .then(() => console.log('Connected to database.'))\n .catch((err: Error) =>\n console.error('Unable to connect to the database:', err)\n );\n LifecycleController.register(sequelize);\n}\n\n/** On shutdown close connection and clear client */\nexport async function shutdown(): Promise<void> {\n if (sequelizeClient) await sequelizeClient.close();\n sequelizeClient = undefined;\n}\n\nexport function addModels(models: Array<ModelCtor>): void {\n if (!sequelizeClient)\n throw new EngineError({\n message: 'Sequelize client was not initialized'\n });\n sequelizeClient.addModels(models);\n sequelizeClient.sync();\n}\n\n/** Create Sequelize client */\nexport function createSequelizeClient(): Sequelize {\n // Throw an error if there is no host initial\n validateSequelizeEnvironment();\n return new Sequelize(\n process.env.SQL_DB as string,\n process.env.SQL_USER as string,\n process.env.SQL_PASSWORD as string,\n dbConfig\n );\n}\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AAEO,IAAIM,eAAsC,GAAAC,OAAA,CAAAD,eAAA;;AAEjD;AACA;AACA;AACO,MAAME,SAAS,GAAAD,OAAA,CAAAC,SAAA,GAAG,IAAIC,KAAK;AAChC;AACA;AACA;AACA,CAAC,CAAC,EACF;EACEC,GAAG,EAAE,SAAAA,CAAUC,MAAM,EAAEC,QAAQ,EAAW;IACxC,IAAIA,QAAQ,KAAK,MAAM,EAAE,OAAOC,IAAI;IACpC,IAAID,QAAQ,KAAK,UAAU,EAAE,OAAOE,QAAQ;IAC5C,IAAIF,QAAQ,KAAK,WAAW,EAAE,OAAOG,SAAS;IAC9C;IACA,IAAI,CAACT,eAAe,EAClB,MAAM,IAAIU,wBAAW,CAAC;MACpBC,OAAO,EAAE;IACX,CAAC,CAAC;IACJ;IACA;IACA;IACA,OAAOX,eAAe,CAACM,QAAQ,CAAC;EAClC;AACF,CACF,CAAC;;AAED;AACO,SAASC,IAAIA,CAAA,EAAS;EAC3B;EACA,IAAIP,eAAe,EAAE;EACrBC,OAAA,CAAAD,eAAA,GAAAA,eAAe,GAAGY,qBAAqB,CAAC,CAAC;EACzCZ,eAAe,CACZa,YAAY,CAAC,CAAC,CACdC,IAAI,CAAC,MAAMC,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CACjDC,KAAK,CAAEC,GAAU,IAChBH,OAAO,CAACI,KAAK,CAAC,oCAAoC,EAAED,GAAG,CACzD,CAAC;EACHE,wCAAmB,CAACC,QAAQ,CAACnB,SAAS,CAAC;AACzC;;AAEA;AACO,eAAeM,QAAQA,CAAA,EAAkB;EAC9C,IAAIR,eAAe,EAAE,MAAMA,eAAe,CAACsB,KAAK,CAAC,CAAC;EAClDrB,OAAA,CAAAD,eAAA,GAAAA,eAAe,GAAGuB,SAAS;AAC7B;AAEO,SAASd,SAASA,CAACe,MAAwB,EAAQ;EACxD,IAAI,CAACxB,eAAe,EAClB,MAAM,IAAIU,wBAAW,CAAC;IACpBC,OAAO,EAAE;EACX,CAAC,CAAC;EACJX,eAAe,CAACS,SAAS,CAACe,MAAM,CAAC;EACjCxB,eAAe,CAACyB,IAAI,CAAC,CAAC;AACxB;;AAEA;AACO,SAASb,qBAAqBA,CAAA,EAAc;EACjD;EACA,IAAAc,wCAA4B,EAAC,CAAC;EAC9B,OAAO,IAAIC,8BAAS,CAClBC,OAAO,CAACC,GAAG,CAACC,MAAM,EAClBF,OAAO,CAACC,GAAG,CAACE,QAAQ,EACpBH,OAAO,CAACC,GAAG,CAACG,YAAY,EACxBC,kBACF,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Sequelize.types.js","names":[],"sources":["../../../src/entities/Sequelize/Sequelize.types.ts"],"sourcesContent":["import { Sequelize as SequelizeClass, ModelCtor } from 'sequelize-typescript';\r\n\r\nexport type Sequelize = SequelizeClass & {\r\n /** Start the sequelize service */\r\n init: () => void;\r\n /** Stop the sequelize service */\r\n shutdown: () => Promise<void>;\r\n /** Register a model with sequelize */\r\n addModels: (models: Array<ModelCtor>) => void;\r\n};\r\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"Sequelize.types.js","names":[],"sources":["../../../src/entities/Sequelize/Sequelize.types.ts"],"sourcesContent":["import { Sequelize as SequelizeClass, ModelCtor } from 'sequelize-typescript';\n\nexport type Sequelize = SequelizeClass & {\n /** Start the sequelize service */\n init: () => void;\n /** Stop the sequelize service */\n shutdown: () => Promise<void>;\n /** Register a model with sequelize */\n addModels: (models: Array<ModelCtor>) => void;\n};\n"],"mappings":"","ignoreList":[]}
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.validateSequelizeEnvironment = validateSequelizeEnvironment;
7
7
  var _checkEnvironment = require("../../utils/checkEnvironment");
8
8
  var _envAssert = require("../../utils/envAssert");
9
- /**
10
- * Verify that the environment variables to connect to a SQL server are properly set
9
+ /**
10
+ * Verify that the environment variables to connect to a SQL server are properly set
11
11
  */
12
12
  function validateSequelizeEnvironment() {
13
13
  // We only check if there is at least the host specified
@@ -1 +1 @@
1
- {"version":3,"file":"Sequelize.validate.js","names":["_checkEnvironment","require","_envAssert","validateSequelizeEnvironment","process","env","SQL_HOST","assertEnvironment","envAssert","isHost","SQL_PASSWORD","isString","SQL_DB","SQL_USER"],"sources":["../../../src/entities/Sequelize/Sequelize.validate.ts"],"sourcesContent":["import { assertEnvironment } from 'utils/checkEnvironment';\r\nimport { envAssert } from 'utils/envAssert';\r\n\r\n/**\r\n * Verify that the environment variables to connect to a SQL server are properly set\r\n */\r\nexport function validateSequelizeEnvironment(): void {\r\n // We only check if there is at least the host specified\r\n if (process.env.SQL_HOST) assertEnvironment({ SQL_HOST: envAssert.isHost() });\r\n if (process.env.SQL_PASSWORD)\r\n assertEnvironment({ SQL_PASSWORD: envAssert.isString() });\r\n if (process.env.SQL_DB) assertEnvironment({ SQL_DB: envAssert.isString() });\r\n if (process.env.SQL_USER)\r\n assertEnvironment({ SQL_USER: envAssert.isString() });\r\n}\r\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACO,SAASE,4BAA4BA,CAAA,EAAS;EACnD;EACA,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,EAAE,IAAAC,mCAAiB,EAAC;IAAED,QAAQ,EAAEE,oBAAS,CAACC,MAAM,CAAC;EAAE,CAAC,CAAC;EAC7E,IAAIL,OAAO,CAACC,GAAG,CAACK,YAAY,EAC1B,IAAAH,mCAAiB,EAAC;IAAEG,YAAY,EAAEF,oBAAS,CAACG,QAAQ,CAAC;EAAE,CAAC,CAAC;EAC3D,IAAIP,OAAO,CAACC,GAAG,CAACO,MAAM,EAAE,IAAAL,mCAAiB,EAAC;IAAEK,MAAM,EAAEJ,oBAAS,CAACG,QAAQ,CAAC;EAAE,CAAC,CAAC;EAC3E,IAAIP,OAAO,CAACC,GAAG,CAACQ,QAAQ,EACtB,IAAAN,mCAAiB,EAAC;IAAEM,QAAQ,EAAEL,oBAAS,CAACG,QAAQ,CAAC;EAAE,CAAC,CAAC;AACzD","ignoreList":[]}
1
+ {"version":3,"file":"Sequelize.validate.js","names":["_checkEnvironment","require","_envAssert","validateSequelizeEnvironment","process","env","SQL_HOST","assertEnvironment","envAssert","isHost","SQL_PASSWORD","isString","SQL_DB","SQL_USER"],"sources":["../../../src/entities/Sequelize/Sequelize.validate.ts"],"sourcesContent":["import { assertEnvironment } from 'utils/checkEnvironment';\nimport { envAssert } from 'utils/envAssert';\n\n/**\n * Verify that the environment variables to connect to a SQL server are properly set\n */\nexport function validateSequelizeEnvironment(): void {\n // We only check if there is at least the host specified\n if (process.env.SQL_HOST) assertEnvironment({ SQL_HOST: envAssert.isHost() });\n if (process.env.SQL_PASSWORD)\n assertEnvironment({ SQL_PASSWORD: envAssert.isString() });\n if (process.env.SQL_DB) assertEnvironment({ SQL_DB: envAssert.isString() });\n if (process.env.SQL_USER)\n assertEnvironment({ SQL_USER: envAssert.isString() });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACO,SAASE,4BAA4BA,CAAA,EAAS;EACnD;EACA,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,EAAE,IAAAC,mCAAiB,EAAC;IAAED,QAAQ,EAAEE,oBAAS,CAACC,MAAM,CAAC;EAAE,CAAC,CAAC;EAC7E,IAAIL,OAAO,CAACC,GAAG,CAACK,YAAY,EAC1B,IAAAH,mCAAiB,EAAC;IAAEG,YAAY,EAAEF,oBAAS,CAACG,QAAQ,CAAC;EAAE,CAAC,CAAC;EAC3D,IAAIP,OAAO,CAACC,GAAG,CAACO,MAAM,EAAE,IAAAL,mCAAiB,EAAC;IAAEK,MAAM,EAAEJ,oBAAS,CAACG,QAAQ,CAAC;EAAE,CAAC,CAAC;EAC3E,IAAIP,OAAO,CAACC,GAAG,CAACQ,QAAQ,EACtB,IAAAN,mCAAiB,EAAC;IAAEM,QAAQ,EAAEL,oBAAS,CAACG,QAAQ,CAAC;EAAE,CAAC,CAAC;AACzD","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_Sequelize","require","_Sequelize2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../../../src/entities/Sequelize/index.ts"],"sourcesContent":["export { sequelize } from './Sequelize';\r\nexport * from './Sequelize.types';\r\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,WAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,WAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,WAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_Sequelize","require","_Sequelize2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../../../src/entities/Sequelize/index.ts"],"sourcesContent":["export { sequelize } from './Sequelize';\nexport * from './Sequelize.types';\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,WAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,WAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,WAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Server.const.js","names":["_express","require","_morgan","_interopRequireDefault","_middleware","ACCESS_LOG","JSON","stringify","method","status","url","ip","referrer","severity","message","defaultMiddleware","exports","healthCheck","json","limit","process","env","REQUEST_SIZE_LIMIT","urlencoded","extended","metrics","version","filter","val","defaultErrorMiddleware","error","fourOhFour","secondaryMiddleware","swaggerDocs","SILENCE_REPORT","unshift","morgan","shutdownSignals"],"sources":["../../../src/entities/Server/Server.const.ts"],"sourcesContent":["import { json, urlencoded, ErrorRequestHandler, RequestHandler } from 'express';\r\nimport morgan from 'morgan';\r\nimport {\r\n metrics,\r\n error,\r\n fourOhFour,\r\n healthCheck,\r\n version,\r\n swaggerDocs\r\n} from 'middleware';\r\n\r\nconst ACCESS_LOG = JSON.stringify({\r\n method: ':method',\r\n status: ':status',\r\n url: ':url',\r\n 'http-version': ':http-version',\r\n ip: ':remote-addr',\r\n 'user-agent': ':user-agent',\r\n 'content-length': ':res[content-length]',\r\n referrer: ':referrer',\r\n 'response-time': ':response-time',\r\n severity: 'DEBUG',\r\n message: ':method :url [:status]'\r\n});\r\n\r\n// Default middleware that are applied first thing on the primary port, before the business logic endpoints\r\nexport const defaultMiddleware: Array<RequestHandler> = [\r\n healthCheck(),\r\n json({ limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb' }),\r\n urlencoded({\r\n extended: true,\r\n limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb'\r\n }),\r\n metrics(),\r\n version()\r\n].filter((val) => val);\r\n\r\n// Error handling middleware that are run after the main business logic endpoints\r\nexport const defaultErrorMiddleware: Array<\r\n RequestHandler | ErrorRequestHandler\r\n> = [error, fourOhFour];\r\n\r\n// Middleware that are served on the secondary port\r\nexport const secondaryMiddleware: Array<RequestHandler> = [\r\n metrics(),\r\n version(),\r\n swaggerDocs()\r\n];\r\n\r\n// Add morgan logging to default middleware chain when reporting is not silenced\r\nif (!process.env.SILENCE_REPORT) {\r\n defaultMiddleware.unshift(morgan(ACCESS_LOG));\r\n secondaryMiddleware.unshift(morgan(ACCESS_LOG));\r\n}\r\n\r\nexport const shutdownSignals = ['SIGTERM', 'SIGUSR2', 'SIGINT'];\r\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AASA,MAAMI,UAAU,GAAGC,IAAI,CAACC,SAAS,CAAC;EAChCC,MAAM,EAAE,SAAS;EACjBC,MAAM,EAAE,SAAS;EACjBC,GAAG,EAAE,MAAM;EACX,cAAc,EAAE,eAAe;EAC/BC,EAAE,EAAE,cAAc;EAClB,YAAY,EAAE,aAAa;EAC3B,gBAAgB,EAAE,sBAAsB;EACxCC,QAAQ,EAAE,WAAW;EACrB,eAAe,EAAE,gBAAgB;EACjCC,QAAQ,EAAE,OAAO;EACjBC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEF;AACO,MAAMC,iBAAwC,GAAAC,OAAA,CAAAD,iBAAA,GAAG,CACtD,IAAAE,uBAAW,EAAC,CAAC,EACb,IAAAC,aAAI,EAAC;EAAEC,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,kBAAkB,IAAI;AAAM,CAAC,CAAC,EACxD,IAAAC,mBAAU,EAAC;EACTC,QAAQ,EAAE,IAAI;EACdL,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,kBAAkB,IAAI;AAC3C,CAAC,CAAC,EACF,IAAAG,mBAAO,EAAC,CAAC,EACT,IAAAC,mBAAO,EAAC,CAAC,CACV,CAACC,MAAM,CAAEC,GAAG,IAAKA,GAAG,CAAC;;AAEtB;AACO,MAAMC,sBAEZ,GAAAb,OAAA,CAAAa,sBAAA,GAAG,CAACC,iBAAK,EAAEC,sBAAU,CAAC;;AAEvB;AACO,MAAMC,mBAA0C,GAAAhB,OAAA,CAAAgB,mBAAA,GAAG,CACxD,IAAAP,mBAAO,EAAC,CAAC,EACT,IAAAC,mBAAO,EAAC,CAAC,EACT,IAAAO,uBAAW,EAAC,CAAC,CACd;;AAED;AACA,IAAI,CAACb,OAAO,CAACC,GAAG,CAACa,cAAc,EAAE;EAC/BnB,iBAAiB,CAACoB,OAAO,CAAC,IAAAC,eAAM,EAAC/B,UAAU,CAAC,CAAC;EAC7C2B,mBAAmB,CAACG,OAAO,CAAC,IAAAC,eAAM,EAAC/B,UAAU,CAAC,CAAC;AACjD;AAEO,MAAMgC,eAAe,GAAArB,OAAA,CAAAqB,eAAA,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Server.const.js","names":["_express","require","_morgan","_interopRequireDefault","_middleware","ACCESS_LOG","JSON","stringify","method","status","url","ip","referrer","severity","message","defaultMiddleware","exports","healthCheck","json","limit","process","env","REQUEST_SIZE_LIMIT","urlencoded","extended","metrics","version","filter","val","defaultErrorMiddleware","error","fourOhFour","secondaryMiddleware","swaggerDocs","SILENCE_REPORT","unshift","morgan","shutdownSignals"],"sources":["../../../src/entities/Server/Server.const.ts"],"sourcesContent":["import { json, urlencoded, ErrorRequestHandler, RequestHandler } from 'express';\nimport morgan from 'morgan';\nimport {\n metrics,\n error,\n fourOhFour,\n healthCheck,\n version,\n swaggerDocs\n} from 'middleware';\n\nconst ACCESS_LOG = JSON.stringify({\n method: ':method',\n status: ':status',\n url: ':url',\n 'http-version': ':http-version',\n ip: ':remote-addr',\n 'user-agent': ':user-agent',\n 'content-length': ':res[content-length]',\n referrer: ':referrer',\n 'response-time': ':response-time',\n severity: 'DEBUG',\n message: ':method :url [:status]'\n});\n\n// Default middleware that are applied first thing on the primary port, before the business logic endpoints\nexport const defaultMiddleware: Array<RequestHandler> = [\n healthCheck(),\n json({ limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb' }),\n urlencoded({\n extended: true,\n limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb'\n }),\n metrics(),\n version()\n].filter((val) => val);\n\n// Error handling middleware that are run after the main business logic endpoints\nexport const defaultErrorMiddleware: Array<\n RequestHandler | ErrorRequestHandler\n> = [error, fourOhFour];\n\n// Middleware that are served on the secondary port\nexport const secondaryMiddleware: Array<RequestHandler> = [\n metrics(),\n version(),\n swaggerDocs()\n];\n\n// Add morgan logging to default middleware chain when reporting is not silenced\nif (!process.env.SILENCE_REPORT) {\n defaultMiddleware.unshift(morgan(ACCESS_LOG));\n secondaryMiddleware.unshift(morgan(ACCESS_LOG));\n}\n\nexport const shutdownSignals = ['SIGTERM', 'SIGUSR2', 'SIGINT'];\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AASA,MAAMI,UAAU,GAAGC,IAAI,CAACC,SAAS,CAAC;EAChCC,MAAM,EAAE,SAAS;EACjBC,MAAM,EAAE,SAAS;EACjBC,GAAG,EAAE,MAAM;EACX,cAAc,EAAE,eAAe;EAC/BC,EAAE,EAAE,cAAc;EAClB,YAAY,EAAE,aAAa;EAC3B,gBAAgB,EAAE,sBAAsB;EACxCC,QAAQ,EAAE,WAAW;EACrB,eAAe,EAAE,gBAAgB;EACjCC,QAAQ,EAAE,OAAO;EACjBC,OAAO,EAAE;AACX,CAAC,CAAC;;AAEF;AACO,MAAMC,iBAAwC,GAAAC,OAAA,CAAAD,iBAAA,GAAG,CACtD,IAAAE,uBAAW,EAAC,CAAC,EACb,IAAAC,aAAI,EAAC;EAAEC,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,kBAAkB,IAAI;AAAM,CAAC,CAAC,EACxD,IAAAC,mBAAU,EAAC;EACTC,QAAQ,EAAE,IAAI;EACdL,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,kBAAkB,IAAI;AAC3C,CAAC,CAAC,EACF,IAAAG,mBAAO,EAAC,CAAC,EACT,IAAAC,mBAAO,EAAC,CAAC,CACV,CAACC,MAAM,CAAEC,GAAG,IAAKA,GAAG,CAAC;;AAEtB;AACO,MAAMC,sBAEZ,GAAAb,OAAA,CAAAa,sBAAA,GAAG,CAACC,iBAAK,EAAEC,sBAAU,CAAC;;AAEvB;AACO,MAAMC,mBAA0C,GAAAhB,OAAA,CAAAgB,mBAAA,GAAG,CACxD,IAAAP,mBAAO,EAAC,CAAC,EACT,IAAAC,mBAAO,EAAC,CAAC,EACT,IAAAO,uBAAW,EAAC,CAAC,CACd;;AAED;AACA,IAAI,CAACb,OAAO,CAACC,GAAG,CAACa,cAAc,EAAE;EAC/BnB,iBAAiB,CAACoB,OAAO,CAAC,IAAAC,eAAM,EAAC/B,UAAU,CAAC,CAAC;EAC7C2B,mBAAmB,CAACG,OAAO,CAAC,IAAAC,eAAM,EAAC/B,UAAU,CAAC,CAAC;AACjD;AAEO,MAAMgC,eAAe,GAAArB,OAAA,CAAAqB,eAAA,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC","ignoreList":[]}
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.Server = void 0;
8
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
11
  var _fs = _interopRequireDefault(require("fs"));
11
12
  var _path = _interopRequireDefault(require("path"));
12
13
  var _promises = require("timers/promises");
@@ -30,36 +31,36 @@ let Server = exports.Server = /*#__PURE__*/function () {
30
31
  function Server(config) {
31
32
  (0, _classCallCheck2.default)(this, Server);
32
33
  /** The express application powering the main endpoints */
33
- this.app = void 0;
34
+ (0, _defineProperty2.default)(this, "app", void 0);
34
35
  /** The node HTTP(S) server, serving the main express application */
35
- this.httpServer = void 0;
36
+ (0, _defineProperty2.default)(this, "httpServer", void 0);
36
37
  /** The express application powering the support endpoints */
37
- this.secondaryApp = void 0;
38
+ (0, _defineProperty2.default)(this, "secondaryApp", void 0);
38
39
  /** The node HTTP(S) server, serving the secondary express application */
39
- this.secondaryHttpServer = void 0;
40
+ (0, _defineProperty2.default)(this, "secondaryHttpServer", void 0);
40
41
  /** List of endpoint instances that the server should handle */
41
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
- this.endpoints = void 0;
43
+ (0, _defineProperty2.default)(this, "endpoints", void 0);
43
44
  /** Mapping of env variable name with functions that should run to check their validity */
44
- this.checkEnvironment = void 0;
45
+ (0, _defineProperty2.default)(this, "checkEnvironment", void 0);
45
46
  /** Middleware that should run on every request before the endpoint specific logic */
46
- this.globalMiddleware = void 0;
47
+ (0, _defineProperty2.default)(this, "globalMiddleware", void 0);
47
48
  /** Error middleware that should run on every request after the endpoint specific logic, but before the generic global middleware */
48
- this.errorMiddleware = void 0;
49
+ (0, _defineProperty2.default)(this, "errorMiddleware", void 0);
49
50
  /** Functions that should be called on server startup */
50
- this.initCallbacks = void 0;
51
+ (0, _defineProperty2.default)(this, "initCallbacks", void 0);
51
52
  /** Functions that should be called on server shutdown */
52
- this.shutdownCallbacks = void 0;
53
+ (0, _defineProperty2.default)(this, "shutdownCallbacks", void 0);
53
54
  /** When set to true, this indicates that init callbacks should run synchronously in the order they are declared. By default they all run in parallel */
54
- this.syncCallbacks = void 0;
55
+ (0, _defineProperty2.default)(this, "syncCallbacks", void 0);
55
56
  /** Config to set regularly running jobs on the server */
56
- this.cron = void 0;
57
+ (0, _defineProperty2.default)(this, "cron", void 0);
57
58
  /** Global auth related configuration */
58
- this.auth = void 0;
59
+ (0, _defineProperty2.default)(this, "auth", void 0);
59
60
  /** WebSocket server instance, if configured */
60
- this.wss = void 0;
61
+ (0, _defineProperty2.default)(this, "wss", void 0);
61
62
  /** Abort controller that handles signals for the server */
62
- this.abortController = new AbortController();
63
+ (0, _defineProperty2.default)(this, "abortController", new AbortController());
63
64
  this.validate(config);
64
65
  (0, _report.reportDebug)({
65
66
  namespace,
@@ -364,8 +365,8 @@ let Server = exports.Server = /*#__PURE__*/function () {
364
365
  return typeof callback === 'function' ? callback() : callback.function.apply(null, callback.parameters ?? []);
365
366
  }
366
367
 
367
- /**
368
- * Validate the Server constructor configuration
368
+ /**
369
+ * Validate the Server constructor configuration
369
370
  */
370
371
  }, {
371
372
  key: "validate",
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","names":["_fs","_interopRequireDefault","require","_path","_promises","_express","_ws","_SocketClient","_Server2","_Endpoint","_EngineError","_LifecycleController","_PubSub","_utils","_jwt","_report","_tlsConfig","namespace","Server","exports","config","_classCallCheck2","default","app","httpServer","secondaryApp","secondaryHttpServer","endpoints","checkEnvironment","globalMiddleware","errorMiddleware","initCallbacks","shutdownCallbacks","syncCallbacks","cron","auth","wss","abortController","AbortController","validate","reportDebug","message","noFetch","process","env","RUN_MIGRATION","UNDO_MIGRATION","SQL_HOST","envAssert","isHost","SQL_USER","isString","SQL_PASSWORD","SQL_DB","NODE_ENV","PORT","isPort","SECONDARY_PORT","express","registerMiddleware","createHttpServer","secondaryMiddleware","defaultErrorMiddleware","forEach","middleware","use","disable","server","headersTimeout","keepAliveTimeout","webSocket","attachWebSocket","_createClass2","key","value","init","initKeySets","callback","runCallback","Promise","all","map","PubSub","job","runCronJob","resolve","listen","reportInfo","data","port","secondaryPort","nodeEnv","handleSignal","watchTlsCaFileChange","shutdown","listening","address","on","error","reportError","exit","close","clients","socket","socketKillTimeout","WEBSOCKET_CLOSE_TIMEOUT","parseInt","setTimeout","readyState","CLOSING","OPEN","terminate","LifecycleController","shutdownRunningInstances","abort","shutdownKeySets","shutdownSignals","signal","removeAllListeners","getApp","getSecondaryApp","defaultMiddleware","path","endpoint","register","options","WebSocketServer","request","SocketClient","client","catch","file","fs","watch","event","loadTlsConfig","setSecureContext","tlsConfig","handler","name","interval","setTimeoutPromise","undefined","Error","function","apply","parameters","some","Endpoint","EngineError","Object","values","validator","Array"],"sources":["../../../src/entities/Server/Server.ts"],"sourcesContent":["import fs from 'fs';\r\nimport http from 'http';\r\nimport https from 'https';\r\nimport { AddressInfo } from 'net';\r\nimport path from 'path';\r\nimport { setTimeout as setTimeoutPromise } from 'timers/promises';\r\nimport { ValidatorSpec } from 'envalid';\r\nimport express, { Application } from 'express';\r\nimport { Server as WebSocketServer } from 'ws';\r\nimport { SocketClient } from '../SocketClient';\r\nimport {\r\n defaultMiddleware,\r\n defaultErrorMiddleware,\r\n secondaryMiddleware,\r\n shutdownSignals\r\n} from './Server.const';\r\nimport {\r\n ServerOptions,\r\n ServerCronJon,\r\n ServerAuthConfig,\r\n ServerWebSocketConfig,\r\n ServerGlobalMiddleware,\r\n ServerErrorMiddleWare,\r\n ServerCallback\r\n} from './Server.types';\r\nimport { Endpoint } from 'entities/Endpoint';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { LifecycleController } from 'entities/LifecycleController';\r\nimport { PubSub } from 'entities/PubSub';\r\nimport { checkEnvironment, envAssert, createHttpServer } from 'utils';\r\nimport { initKeySets, shutdownKeySets } from 'utils/jwt';\r\nimport { reportInfo, reportError, reportDebug } from 'utils/report';\r\nimport { tlsConfig, loadTlsConfig, TlsConfig } from 'utils/tlsConfig';\r\n\r\nconst namespace = 'engine:Server';\r\n\r\n/** Main server class */\r\nexport class Server {\r\n /** The express application powering the main endpoints */\r\n private app: Application;\r\n /** The node HTTP(S) server, serving the main express application */\r\n private httpServer: http.Server | https.Server;\r\n /** The express application powering the support endpoints */\r\n private secondaryApp: Application;\r\n /** The node HTTP(S) server, serving the secondary express application */\r\n private secondaryHttpServer: http.Server | https.Server;\r\n /** List of endpoint instances that the server should handle */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private endpoints: Array<Endpoint<any>>;\r\n /** Mapping of env variable name with functions that should run to check their validity */\r\n private checkEnvironment: Record<string, ValidatorSpec<unknown>>;\r\n /** Middleware that should run on every request before the endpoint specific logic */\r\n private globalMiddleware: Array<ServerGlobalMiddleware>;\r\n /** Error middleware that should run on every request after the endpoint specific logic, but before the generic global middleware */\r\n private errorMiddleware: Array<\r\n ServerGlobalMiddleware | ServerErrorMiddleWare\r\n >;\r\n /** Functions that should be called on server startup */\r\n private initCallbacks: Array<ServerCallback>;\r\n /** Functions that should be called on server shutdown */\r\n private shutdownCallbacks: Array<ServerCallback>;\r\n /** When set to true, this indicates that init callbacks should run synchronously in the order they are declared. By default they all run in parallel */\r\n private syncCallbacks: boolean;\r\n /** Config to set regularly running jobs on the server */\r\n private cron?: Array<ServerCronJon>;\r\n /** Global auth related configuration */\r\n private auth: ServerAuthConfig;\r\n /** WebSocket server instance, if configured */\r\n private wss?: WebSocketServer;\r\n /** Abort controller that handles signals for the server */\r\n private abortController = new AbortController();\r\n\r\n /** Create a server */\r\n public constructor(config: ServerOptions) {\r\n this.validate(config);\r\n\r\n reportDebug({\r\n namespace,\r\n message: `Creating server`\r\n });\r\n\r\n this.endpoints = config.endpoints;\r\n this.globalMiddleware = config.globalMiddleware ?? [];\r\n this.errorMiddleware = config.errorMiddleware ?? [];\r\n this.initCallbacks = config.initCallbacks ?? [];\r\n this.shutdownCallbacks = config.shutdownCallbacks ?? [];\r\n this.syncCallbacks = config.syncCallbacks ?? false;\r\n this.cron = config.cron;\r\n this.auth = { noFetch: false, ...config.auth };\r\n\r\n // The minimal environment check is different between the migration modes of execution and the regular server execution mode\r\n // When running in migration mode, we only check that we have SQL related environment variables\r\n this.checkEnvironment =\r\n process.env.RUN_MIGRATION === 'true' ||\r\n process.env.UNDO_MIGRATION === 'true'\r\n ? {\r\n SQL_HOST: envAssert.isHost(),\r\n SQL_USER: envAssert.isString(),\r\n SQL_PASSWORD: envAssert.isString(),\r\n SQL_DB: envAssert.isString()\r\n }\r\n : {\r\n NODE_ENV: envAssert.isString(),\r\n PORT: envAssert.isPort(),\r\n SECONDARY_PORT: envAssert.isPort(),\r\n ...config.checkEnvironment\r\n };\r\n\r\n checkEnvironment(this.checkEnvironment);\r\n\r\n // Create the primary express core that serves the business logic\r\n this.app = express();\r\n this.registerMiddleware(this.app);\r\n this.httpServer = createHttpServer(this.app);\r\n\r\n // Create a secondary express core that servers metrics and analytics\r\n // This will be served on a different port, allowing to specify different firewall rules for these routes\r\n this.secondaryApp = express();\r\n [...secondaryMiddleware, ...defaultErrorMiddleware].forEach(\r\n (middleware) => {\r\n if (middleware) this.secondaryApp.use(middleware);\r\n }\r\n );\r\n this.secondaryHttpServer = createHttpServer(this.secondaryApp);\r\n\r\n // Remove the express headers\r\n this.app.disable('x-powered-by');\r\n this.secondaryApp.disable('x-powered-by');\r\n\r\n // We remove all node timeout on connections and requests\r\n // This responsibility is delegated to the front-facing load balancer\r\n [this.httpServer, this.secondaryHttpServer].forEach((server) => {\r\n server.headersTimeout = 0;\r\n server.keepAliveTimeout = 0;\r\n });\r\n\r\n if (config.webSocket) {\r\n this.attachWebSocket(config.webSocket);\r\n }\r\n }\r\n\r\n /** Start the server */\r\n public async init(): Promise<void> {\r\n reportDebug({ namespace, message: `Starting Server` });\r\n // Fetch the keys for JWT authentication\r\n // Ignore in test environment as we do symmetrical token signing\r\n if (process.env.NODE_ENV !== 'test' && !this.auth.noFetch)\r\n await initKeySets();\r\n // Run all the init callbacks\r\n // We can either run them all 1/1 synchronously or run them all in parallel (default)\r\n // Callback can either be direct function or an object with function and parameters attributes\r\n\r\n if (this.syncCallbacks) {\r\n for (const callback of this.initCallbacks) {\r\n await this.runCallback(callback);\r\n }\r\n } else {\r\n await Promise.all(\r\n this.initCallbacks.map((callback) => this.runCallback(callback))\r\n );\r\n }\r\n\r\n // Initialize the Pub/Sub module\r\n await PubSub.init();\r\n // Run all the cronjob\r\n if (this.cron) {\r\n this.cron.forEach((job) => {\r\n this.runCronJob(job);\r\n });\r\n }\r\n\r\n // Start listening to requests\r\n await Promise.all([\r\n new Promise<void>((resolve) =>\r\n this.httpServer.listen(process.env.PORT, () => {\r\n resolve();\r\n })\r\n ),\r\n new Promise<void>((resolve) =>\r\n this.secondaryHttpServer.listen(process.env.SECONDARY_PORT, () => {\r\n resolve();\r\n })\r\n )\r\n ]);\r\n reportInfo({\r\n message: 'SERVER_RUNNING',\r\n data: {\r\n port: process.env.PORT,\r\n secondaryPort: process.env.SECONDARY_PORT,\r\n nodeEnv: process.env.NODE_ENV\r\n }\r\n });\r\n\r\n this.handleSignal();\r\n\r\n // Watch TSL config files changing\r\n this.watchTlsCaFileChange();\r\n }\r\n\r\n /** Graceful shutdown */\r\n public async shutdown(): Promise<void> {\r\n reportDebug({ namespace, message: `Shutting down Server` });\r\n\r\n // Stop listening to HTTP requests\r\n await Promise.all(\r\n [this.httpServer, this.secondaryHttpServer].map((server) => {\r\n // Ignore if the server was already stopped\r\n // We have observed cases where SIGTERM was thrown multiple times\r\n if (!server.listening) return;\r\n const { port } = server.address() as AddressInfo;\r\n server.on('close', (error: unknown) => {\r\n if (error) {\r\n reportError(error);\r\n process.exit(1);\r\n } else {\r\n reportInfo({\r\n message: `Stopped listening to requests on port ${port}`\r\n });\r\n }\r\n });\r\n server.close();\r\n })\r\n );\r\n\r\n // Close all socket connections\r\n if (this.wss) {\r\n // First ask then to close gracefully\r\n this.wss.clients.forEach((socket) => {\r\n socket.close();\r\n });\r\n // Hard terminate all connections still open after a defined time\r\n const socketKillTimeout = process.env.WEBSOCKET_CLOSE_TIMEOUT\r\n ? parseInt(process.env.WEBSOCKET_CLOSE_TIMEOUT)\r\n : 5000;\r\n await new Promise<void>((resolve) => {\r\n setTimeout(() => {\r\n (this.wss as WebSocketServer).clients.forEach((socket) => {\r\n if (\r\n socket.readyState === socket.CLOSING ||\r\n socket.readyState === socket.OPEN\r\n ) {\r\n socket.terminate();\r\n }\r\n });\r\n resolve();\r\n }, socketKillTimeout);\r\n });\r\n }\r\n\r\n // Run all the shutdown callback\r\n if (this.syncCallbacks) {\r\n for (const callback of this.shutdownCallbacks) {\r\n await this.runCallback(callback);\r\n }\r\n } else {\r\n await Promise.all(\r\n this.shutdownCallbacks.map((callback) => this.runCallback(callback))\r\n );\r\n }\r\n\r\n // Shutdown all the running entities\r\n await LifecycleController.shutdownRunningInstances();\r\n\r\n // Abort all the cronjob\r\n if (this.abortController) this.abortController.abort();\r\n\r\n // Stop the keyset timers\r\n shutdownKeySets();\r\n\r\n shutdownSignals.forEach((signal) => process.removeAllListeners(signal));\r\n }\r\n\r\n /** Get the express app instance of the server */\r\n public getApp(): Application {\r\n return this.app;\r\n }\r\n\r\n /** Get the express app instance of the server */\r\n public getSecondaryApp(): Application {\r\n return this.secondaryApp;\r\n }\r\n\r\n /** Registers all the middleware with the express app */\r\n private registerMiddleware(app: Application): void {\r\n // Global middleware can specify a path to which they apply\r\n [...defaultMiddleware, ...this.globalMiddleware].forEach((middleware) => {\r\n if (typeof middleware === 'function') {\r\n app.use(middleware);\r\n } else {\r\n app.use(middleware.path, middleware.middleware);\r\n }\r\n });\r\n // Call the register method of each endpoint\r\n this.endpoints.forEach((endpoint) => {\r\n endpoint.register(app);\r\n });\r\n // Add error middleware\r\n [...this.errorMiddleware, ...defaultErrorMiddleware].forEach(\r\n (middleware) => {\r\n if (typeof middleware === 'function') {\r\n app.use(middleware);\r\n } else {\r\n app.use(middleware.path, middleware.middleware);\r\n }\r\n }\r\n );\r\n }\r\n\r\n /** Add a handler for WebSocket connections */\r\n private attachWebSocket(options: ServerWebSocketConfig): void {\r\n this.wss = new WebSocketServer({\r\n ...options.server,\r\n server: this.httpServer\r\n })\r\n .on('connection', (webSocket, request) => {\r\n new SocketClient(webSocket, request, options.client);\r\n })\r\n .on('error', (error) => {\r\n reportError(error);\r\n });\r\n }\r\n\r\n /** Call shutdown if signal gets sent to the process */\r\n private handleSignal(): void {\r\n shutdownSignals.forEach((signal) =>\r\n process.on(signal, () => {\r\n (async (): Promise<void> => {\r\n reportInfo(`Received shutdown signal [${signal}]`);\r\n await this.shutdown();\r\n })().catch((error) => {\r\n reportError(error);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /** Watch the TLS certificate change event */\r\n private watchTlsCaFileChange(): void {\r\n [\r\n 'TLS_REQUEST_KEY',\r\n 'TLS_REQUEST_KEY_PASSPHRASE',\r\n 'TLS_REQUEST_CERT',\r\n 'TLS_REQUEST_CA',\r\n 'TLS_SERVER_KEY',\r\n 'TLS_SERVER_KEY_PASSPHRASE',\r\n 'TLS_SERVER_CERT',\r\n 'TLS_CA'\r\n ].forEach((key) => {\r\n const file = process.env[key];\r\n if (file)\r\n fs.watch(path.resolve(file), (event) => {\r\n if (event !== 'change') return;\r\n reportInfo(`Reloading TLS config [${file} changed]`);\r\n loadTlsConfig();\r\n (this.httpServer as https.Server).setSecureContext(\r\n tlsConfig as TlsConfig\r\n );\r\n });\r\n });\r\n }\r\n\r\n /** Executes a recurring job */\r\n private runCronJob(job: ServerCronJon): void {\r\n (async (): Promise<void> => {\r\n reportInfo({ message: `Starting scheduled job \"${job.handler.name}\"` });\r\n try {\r\n await job.handler();\r\n reportInfo({\r\n message: `Job \"${job.handler.name}\" finished, starting again in ${job.interval} seconds`\r\n });\r\n await setTimeoutPromise(job.interval * 1000, undefined, {\r\n signal: this.abortController.signal\r\n });\r\n this.runCronJob(job);\r\n } catch (error) {\r\n if (error instanceof Error && error.name === 'AbortError') {\r\n reportDebug({\r\n namespace,\r\n message: `Scheduled job \"${job.handler?.name}\" has been aborted`\r\n });\r\n } else {\r\n throw error;\r\n }\r\n }\r\n })().catch((error) => {\r\n reportError(error);\r\n });\r\n }\r\n\r\n /** Run a shutdown/init callback */\r\n private runCallback(callback: ServerCallback): unknown {\r\n return typeof callback === 'function'\r\n ? callback()\r\n : callback.function.apply(null, callback.parameters ?? []);\r\n }\r\n\r\n /**\r\n * Validate the Server constructor configuration\r\n */\r\n private validate(config: ServerOptions): void {\r\n if (\r\n !config.endpoints ||\r\n config.endpoints.some((endpoint) => !(endpoint instanceof Endpoint))\r\n )\r\n throw new EngineError(\r\n 'Server endpoints should be declared and all be Endpoint instances'\r\n );\r\n\r\n if (\r\n config.checkEnvironment &&\r\n Object.values(config.checkEnvironment).some(\r\n (validator) => typeof validator !== 'function'\r\n )\r\n )\r\n throw new EngineError(\r\n 'Some of the environment checks are not valid functions'\r\n );\r\n\r\n if (\r\n config.initCallbacks &&\r\n (!(config.initCallbacks instanceof Array) ||\r\n config.initCallbacks.some(\r\n (callback) =>\r\n !(\r\n typeof callback === 'function' ||\r\n typeof callback?.function === 'function'\r\n )\r\n ))\r\n )\r\n throw new EngineError('Init callbacks is not a list of functions');\r\n\r\n if (\r\n config.shutdownCallbacks &&\r\n (!(config.shutdownCallbacks instanceof Array) ||\r\n config.shutdownCallbacks.some(\r\n (callback) =>\r\n !(\r\n typeof callback === 'function' ||\r\n typeof callback?.function === 'function'\r\n )\r\n ))\r\n )\r\n throw new EngineError('Shutdown callbacks is not a list of functions');\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Server.js","names":["_fs","_interopRequireDefault","require","_path","_promises","_express","_ws","_SocketClient","_Server2","_Endpoint","_EngineError","_LifecycleController","_PubSub","_utils","_jwt","_report","_tlsConfig","namespace","Server","exports","config","_classCallCheck2","default","_defineProperty2","AbortController","validate","reportDebug","message","endpoints","globalMiddleware","errorMiddleware","initCallbacks","shutdownCallbacks","syncCallbacks","cron","auth","noFetch","checkEnvironment","process","env","RUN_MIGRATION","UNDO_MIGRATION","SQL_HOST","envAssert","isHost","SQL_USER","isString","SQL_PASSWORD","SQL_DB","NODE_ENV","PORT","isPort","SECONDARY_PORT","app","express","registerMiddleware","httpServer","createHttpServer","secondaryApp","secondaryMiddleware","defaultErrorMiddleware","forEach","middleware","use","secondaryHttpServer","disable","server","headersTimeout","keepAliveTimeout","webSocket","attachWebSocket","_createClass2","key","value","init","initKeySets","callback","runCallback","Promise","all","map","PubSub","job","runCronJob","resolve","listen","reportInfo","data","port","secondaryPort","nodeEnv","handleSignal","watchTlsCaFileChange","shutdown","listening","address","on","error","reportError","exit","close","wss","clients","socket","socketKillTimeout","WEBSOCKET_CLOSE_TIMEOUT","parseInt","setTimeout","readyState","CLOSING","OPEN","terminate","LifecycleController","shutdownRunningInstances","abortController","abort","shutdownKeySets","shutdownSignals","signal","removeAllListeners","getApp","getSecondaryApp","defaultMiddleware","path","endpoint","register","options","WebSocketServer","request","SocketClient","client","catch","file","fs","watch","event","loadTlsConfig","setSecureContext","tlsConfig","handler","name","interval","setTimeoutPromise","undefined","Error","function","apply","parameters","some","Endpoint","EngineError","Object","values","validator","Array"],"sources":["../../../src/entities/Server/Server.ts"],"sourcesContent":["import fs from 'fs';\nimport http from 'http';\nimport https from 'https';\nimport { AddressInfo } from 'net';\nimport path from 'path';\nimport { setTimeout as setTimeoutPromise } from 'timers/promises';\nimport { ValidatorSpec } from 'envalid';\nimport express, { Application } from 'express';\nimport { Server as WebSocketServer } from 'ws';\nimport { SocketClient } from '../SocketClient';\nimport {\n defaultMiddleware,\n defaultErrorMiddleware,\n secondaryMiddleware,\n shutdownSignals\n} from './Server.const';\nimport {\n ServerOptions,\n ServerCronJon,\n ServerAuthConfig,\n ServerWebSocketConfig,\n ServerGlobalMiddleware,\n ServerErrorMiddleWare,\n ServerCallback\n} from './Server.types';\nimport { Endpoint } from 'entities/Endpoint';\nimport { EngineError } from 'entities/EngineError';\nimport { LifecycleController } from 'entities/LifecycleController';\nimport { PubSub } from 'entities/PubSub';\nimport { checkEnvironment, envAssert, createHttpServer } from 'utils';\nimport { initKeySets, shutdownKeySets } from 'utils/jwt';\nimport { reportInfo, reportError, reportDebug } from 'utils/report';\nimport { tlsConfig, loadTlsConfig, TlsConfig } from 'utils/tlsConfig';\n\nconst namespace = 'engine:Server';\n\n/** Main server class */\nexport class Server {\n /** The express application powering the main endpoints */\n private app: Application;\n /** The node HTTP(S) server, serving the main express application */\n private httpServer: http.Server | https.Server;\n /** The express application powering the support endpoints */\n private secondaryApp: Application;\n /** The node HTTP(S) server, serving the secondary express application */\n private secondaryHttpServer: http.Server | https.Server;\n /** List of endpoint instances that the server should handle */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private endpoints: Array<Endpoint<any>>;\n /** Mapping of env variable name with functions that should run to check their validity */\n private checkEnvironment: Record<string, ValidatorSpec<unknown>>;\n /** Middleware that should run on every request before the endpoint specific logic */\n private globalMiddleware: Array<ServerGlobalMiddleware>;\n /** Error middleware that should run on every request after the endpoint specific logic, but before the generic global middleware */\n private errorMiddleware: Array<\n ServerGlobalMiddleware | ServerErrorMiddleWare\n >;\n /** Functions that should be called on server startup */\n private initCallbacks: Array<ServerCallback>;\n /** Functions that should be called on server shutdown */\n private shutdownCallbacks: Array<ServerCallback>;\n /** When set to true, this indicates that init callbacks should run synchronously in the order they are declared. By default they all run in parallel */\n private syncCallbacks: boolean;\n /** Config to set regularly running jobs on the server */\n private cron?: Array<ServerCronJon>;\n /** Global auth related configuration */\n private auth: ServerAuthConfig;\n /** WebSocket server instance, if configured */\n private wss?: WebSocketServer;\n /** Abort controller that handles signals for the server */\n private abortController = new AbortController();\n\n /** Create a server */\n public constructor(config: ServerOptions) {\n this.validate(config);\n\n reportDebug({\n namespace,\n message: `Creating server`\n });\n\n this.endpoints = config.endpoints;\n this.globalMiddleware = config.globalMiddleware ?? [];\n this.errorMiddleware = config.errorMiddleware ?? [];\n this.initCallbacks = config.initCallbacks ?? [];\n this.shutdownCallbacks = config.shutdownCallbacks ?? [];\n this.syncCallbacks = config.syncCallbacks ?? false;\n this.cron = config.cron;\n this.auth = { noFetch: false, ...config.auth };\n\n // The minimal environment check is different between the migration modes of execution and the regular server execution mode\n // When running in migration mode, we only check that we have SQL related environment variables\n this.checkEnvironment =\n process.env.RUN_MIGRATION === 'true' ||\n process.env.UNDO_MIGRATION === 'true'\n ? {\n SQL_HOST: envAssert.isHost(),\n SQL_USER: envAssert.isString(),\n SQL_PASSWORD: envAssert.isString(),\n SQL_DB: envAssert.isString()\n }\n : {\n NODE_ENV: envAssert.isString(),\n PORT: envAssert.isPort(),\n SECONDARY_PORT: envAssert.isPort(),\n ...config.checkEnvironment\n };\n\n checkEnvironment(this.checkEnvironment);\n\n // Create the primary express core that serves the business logic\n this.app = express();\n this.registerMiddleware(this.app);\n this.httpServer = createHttpServer(this.app);\n\n // Create a secondary express core that servers metrics and analytics\n // This will be served on a different port, allowing to specify different firewall rules for these routes\n this.secondaryApp = express();\n [...secondaryMiddleware, ...defaultErrorMiddleware].forEach(\n (middleware) => {\n if (middleware) this.secondaryApp.use(middleware);\n }\n );\n this.secondaryHttpServer = createHttpServer(this.secondaryApp);\n\n // Remove the express headers\n this.app.disable('x-powered-by');\n this.secondaryApp.disable('x-powered-by');\n\n // We remove all node timeout on connections and requests\n // This responsibility is delegated to the front-facing load balancer\n [this.httpServer, this.secondaryHttpServer].forEach((server) => {\n server.headersTimeout = 0;\n server.keepAliveTimeout = 0;\n });\n\n if (config.webSocket) {\n this.attachWebSocket(config.webSocket);\n }\n }\n\n /** Start the server */\n public async init(): Promise<void> {\n reportDebug({ namespace, message: `Starting Server` });\n // Fetch the keys for JWT authentication\n // Ignore in test environment as we do symmetrical token signing\n if (process.env.NODE_ENV !== 'test' && !this.auth.noFetch)\n await initKeySets();\n // Run all the init callbacks\n // We can either run them all 1/1 synchronously or run them all in parallel (default)\n // Callback can either be direct function or an object with function and parameters attributes\n\n if (this.syncCallbacks) {\n for (const callback of this.initCallbacks) {\n await this.runCallback(callback);\n }\n } else {\n await Promise.all(\n this.initCallbacks.map((callback) => this.runCallback(callback))\n );\n }\n\n // Initialize the Pub/Sub module\n await PubSub.init();\n // Run all the cronjob\n if (this.cron) {\n this.cron.forEach((job) => {\n this.runCronJob(job);\n });\n }\n\n // Start listening to requests\n await Promise.all([\n new Promise<void>((resolve) =>\n this.httpServer.listen(process.env.PORT, () => {\n resolve();\n })\n ),\n new Promise<void>((resolve) =>\n this.secondaryHttpServer.listen(process.env.SECONDARY_PORT, () => {\n resolve();\n })\n )\n ]);\n reportInfo({\n message: 'SERVER_RUNNING',\n data: {\n port: process.env.PORT,\n secondaryPort: process.env.SECONDARY_PORT,\n nodeEnv: process.env.NODE_ENV\n }\n });\n\n this.handleSignal();\n\n // Watch TSL config files changing\n this.watchTlsCaFileChange();\n }\n\n /** Graceful shutdown */\n public async shutdown(): Promise<void> {\n reportDebug({ namespace, message: `Shutting down Server` });\n\n // Stop listening to HTTP requests\n await Promise.all(\n [this.httpServer, this.secondaryHttpServer].map((server) => {\n // Ignore if the server was already stopped\n // We have observed cases where SIGTERM was thrown multiple times\n if (!server.listening) return;\n const { port } = server.address() as AddressInfo;\n server.on('close', (error: unknown) => {\n if (error) {\n reportError(error);\n process.exit(1);\n } else {\n reportInfo({\n message: `Stopped listening to requests on port ${port}`\n });\n }\n });\n server.close();\n })\n );\n\n // Close all socket connections\n if (this.wss) {\n // First ask then to close gracefully\n this.wss.clients.forEach((socket) => {\n socket.close();\n });\n // Hard terminate all connections still open after a defined time\n const socketKillTimeout = process.env.WEBSOCKET_CLOSE_TIMEOUT\n ? parseInt(process.env.WEBSOCKET_CLOSE_TIMEOUT)\n : 5000;\n await new Promise<void>((resolve) => {\n setTimeout(() => {\n (this.wss as WebSocketServer).clients.forEach((socket) => {\n if (\n socket.readyState === socket.CLOSING ||\n socket.readyState === socket.OPEN\n ) {\n socket.terminate();\n }\n });\n resolve();\n }, socketKillTimeout);\n });\n }\n\n // Run all the shutdown callback\n if (this.syncCallbacks) {\n for (const callback of this.shutdownCallbacks) {\n await this.runCallback(callback);\n }\n } else {\n await Promise.all(\n this.shutdownCallbacks.map((callback) => this.runCallback(callback))\n );\n }\n\n // Shutdown all the running entities\n await LifecycleController.shutdownRunningInstances();\n\n // Abort all the cronjob\n if (this.abortController) this.abortController.abort();\n\n // Stop the keyset timers\n shutdownKeySets();\n\n shutdownSignals.forEach((signal) => process.removeAllListeners(signal));\n }\n\n /** Get the express app instance of the server */\n public getApp(): Application {\n return this.app;\n }\n\n /** Get the express app instance of the server */\n public getSecondaryApp(): Application {\n return this.secondaryApp;\n }\n\n /** Registers all the middleware with the express app */\n private registerMiddleware(app: Application): void {\n // Global middleware can specify a path to which they apply\n [...defaultMiddleware, ...this.globalMiddleware].forEach((middleware) => {\n if (typeof middleware === 'function') {\n app.use(middleware);\n } else {\n app.use(middleware.path, middleware.middleware);\n }\n });\n // Call the register method of each endpoint\n this.endpoints.forEach((endpoint) => {\n endpoint.register(app);\n });\n // Add error middleware\n [...this.errorMiddleware, ...defaultErrorMiddleware].forEach(\n (middleware) => {\n if (typeof middleware === 'function') {\n app.use(middleware);\n } else {\n app.use(middleware.path, middleware.middleware);\n }\n }\n );\n }\n\n /** Add a handler for WebSocket connections */\n private attachWebSocket(options: ServerWebSocketConfig): void {\n this.wss = new WebSocketServer({\n ...options.server,\n server: this.httpServer\n })\n .on('connection', (webSocket, request) => {\n new SocketClient(webSocket, request, options.client);\n })\n .on('error', (error) => {\n reportError(error);\n });\n }\n\n /** Call shutdown if signal gets sent to the process */\n private handleSignal(): void {\n shutdownSignals.forEach((signal) =>\n process.on(signal, () => {\n (async (): Promise<void> => {\n reportInfo(`Received shutdown signal [${signal}]`);\n await this.shutdown();\n })().catch((error) => {\n reportError(error);\n });\n })\n );\n }\n\n /** Watch the TLS certificate change event */\n private watchTlsCaFileChange(): void {\n [\n 'TLS_REQUEST_KEY',\n 'TLS_REQUEST_KEY_PASSPHRASE',\n 'TLS_REQUEST_CERT',\n 'TLS_REQUEST_CA',\n 'TLS_SERVER_KEY',\n 'TLS_SERVER_KEY_PASSPHRASE',\n 'TLS_SERVER_CERT',\n 'TLS_CA'\n ].forEach((key) => {\n const file = process.env[key];\n if (file)\n fs.watch(path.resolve(file), (event) => {\n if (event !== 'change') return;\n reportInfo(`Reloading TLS config [${file} changed]`);\n loadTlsConfig();\n (this.httpServer as https.Server).setSecureContext(\n tlsConfig as TlsConfig\n );\n });\n });\n }\n\n /** Executes a recurring job */\n private runCronJob(job: ServerCronJon): void {\n (async (): Promise<void> => {\n reportInfo({ message: `Starting scheduled job \"${job.handler.name}\"` });\n try {\n await job.handler();\n reportInfo({\n message: `Job \"${job.handler.name}\" finished, starting again in ${job.interval} seconds`\n });\n await setTimeoutPromise(job.interval * 1000, undefined, {\n signal: this.abortController.signal\n });\n this.runCronJob(job);\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n reportDebug({\n namespace,\n message: `Scheduled job \"${job.handler?.name}\" has been aborted`\n });\n } else {\n throw error;\n }\n }\n })().catch((error) => {\n reportError(error);\n });\n }\n\n /** Run a shutdown/init callback */\n private runCallback(callback: ServerCallback): unknown {\n return typeof callback === 'function'\n ? callback()\n : callback.function.apply(null, callback.parameters ?? []);\n }\n\n /**\n * Validate the Server constructor configuration\n */\n private validate(config: ServerOptions): void {\n if (\n !config.endpoints ||\n config.endpoints.some((endpoint) => !(endpoint instanceof Endpoint))\n )\n throw new EngineError(\n 'Server endpoints should be declared and all be Endpoint instances'\n );\n\n if (\n config.checkEnvironment &&\n Object.values(config.checkEnvironment).some(\n (validator) => typeof validator !== 'function'\n )\n )\n throw new EngineError(\n 'Some of the environment checks are not valid functions'\n );\n\n if (\n config.initCallbacks &&\n (!(config.initCallbacks instanceof Array) ||\n config.initCallbacks.some(\n (callback) =>\n !(\n typeof callback === 'function' ||\n typeof callback?.function === 'function'\n )\n ))\n )\n throw new EngineError('Init callbacks is not a list of functions');\n\n if (\n config.shutdownCallbacks &&\n (!(config.shutdownCallbacks instanceof Array) ||\n config.shutdownCallbacks.some(\n (callback) =>\n !(\n typeof callback === 'function' ||\n typeof callback?.function === 'function'\n )\n ))\n )\n throw new EngineError('Shutdown callbacks is not a list of functions');\n }\n}\n"],"mappings":"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","ignoreList":[]}