node-server-engine 1.1.4 → 1.1.6

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,71 +1,71 @@
1
- import { Redis as RedisClient } from 'ioredis';
2
- import { RedisInterface, RedisCreateOptions } from './Redis.types';
3
- import { validateRedisEnvironment } from './Redis.validate';
4
- import { EngineError } from 'entities/EngineError';
5
- import { LifecycleController } from 'entities/LifecycleController';
6
-
7
- export let redisClient: undefined | RedisClient;
8
-
9
- /**
10
- * We use a proxy to extend the Redis behavior and allow initialization of the client only when needed while keeping the same interface
11
- */
12
- export const Redis = new Proxy<RedisInterface>(
13
- // 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
14
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
- // @ts-ignore
16
- {},
17
- {
18
- get: function (target, property): unknown {
19
- if (property === 'init') return init;
20
- if (property === 'shutdown') return shutdown;
21
- // Create the redis client if it does not exist
22
- if (!redisClient)
23
- throw new EngineError({ message: 'Redis client was not initialized' });
24
- // Call the function on the redis client
25
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
26
- // @ts-ignore
27
- return redisClient[property] as unknown;
28
- }
29
- }
30
- );
31
-
32
- /**
33
- * On init create client anc connect
34
- */
35
- export function init(): void {
36
- // Ignore if already initialized
37
- if (redisClient) return;
38
- redisClient = createRedisClient();
39
- LifecycleController.register(Redis);
40
- }
41
-
42
- /**
43
- * On shutdown close connection and clear client
44
- */
45
- export async function shutdown(): Promise<void> {
46
- if (redisClient) await redisClient.quit();
47
- redisClient = undefined;
48
- }
49
-
50
- /**
51
- * Create Redis client
52
- */
53
- export function createRedisClient(
54
- options: RedisCreateOptions = {}
55
- ): RedisClient {
56
- // Check that environment variables are correctly set
57
- validateRedisEnvironment(options);
58
- // Throw an error if there is no host initial
59
- if (!process.env.REDIS_HOST)
60
- throw new EngineError({
61
- message: 'Host required to initialize Redis connection'
62
- });
63
-
64
- return new RedisClient({
65
- port: process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : undefined,
66
- host: process.env.REDIS_HOST,
67
- username: process.env.REDIS_USERNAME,
68
- password: process.env.REDIS_PASSWORD,
69
- db: 0
70
- });
71
- }
1
+ import { Redis as RedisClient } from 'ioredis';
2
+ import { RedisInterface, RedisCreateOptions } from './Redis.types';
3
+ import { validateRedisEnvironment } from './Redis.validate';
4
+ import { EngineError } from 'entities/EngineError';
5
+ import { LifecycleController } from 'entities/LifecycleController';
6
+
7
+ export let redisClient: undefined | RedisClient;
8
+
9
+ /**
10
+ * We use a proxy to extend the Redis behavior and allow initialization of the client only when needed while keeping the same interface
11
+ */
12
+ export const Redis = new Proxy<RedisInterface>(
13
+ // 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
14
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
+ // @ts-ignore
16
+ {},
17
+ {
18
+ get: function (target, property): unknown {
19
+ if (property === 'init') return init;
20
+ if (property === 'shutdown') return shutdown;
21
+ // Create the redis client if it does not exist
22
+ if (!redisClient)
23
+ throw new EngineError({ message: 'Redis client was not initialized' });
24
+ // Call the function on the redis client
25
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
26
+ // @ts-ignore
27
+ return redisClient[property] as unknown;
28
+ }
29
+ }
30
+ );
31
+
32
+ /**
33
+ * On init create client anc connect
34
+ */
35
+ export function init(): void {
36
+ // Ignore if already initialized
37
+ if (redisClient) return;
38
+ redisClient = createRedisClient();
39
+ LifecycleController.register(Redis);
40
+ }
41
+
42
+ /**
43
+ * On shutdown close connection and clear client
44
+ */
45
+ export async function shutdown(): Promise<void> {
46
+ if (redisClient) await redisClient.quit();
47
+ redisClient = undefined;
48
+ }
49
+
50
+ /**
51
+ * Create Redis client
52
+ */
53
+ export function createRedisClient(
54
+ options: RedisCreateOptions = {}
55
+ ): RedisClient {
56
+ // Check that environment variables are correctly set
57
+ validateRedisEnvironment(options);
58
+ // Throw an error if there is no host initial
59
+ if (!process.env.REDIS_HOST)
60
+ throw new EngineError({
61
+ message: 'Host required to initialize Redis connection'
62
+ });
63
+
64
+ return new RedisClient({
65
+ port: process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : undefined,
66
+ host: process.env.REDIS_HOST,
67
+ username: process.env.REDIS_USERNAME,
68
+ password: process.env.REDIS_PASSWORD,
69
+ db: 0
70
+ });
71
+ }
@@ -1,19 +1,19 @@
1
- import { Redis as IoRedis, Cluster, RedisOptions } from 'ioredis';
2
-
3
- export type RedisInterface = IoRedis &
4
- Cluster & {
5
- /** Start the redis service */
6
- init: () => void;
7
- /** Stop the redis service */
8
- shutdown: () => Promise<void>;
9
- };
10
-
11
- /** Options to initialize a Redis client */
12
- export interface RedisCreateOptions {
13
- /** Redis client settings */
14
- redis?: RedisOptions;
15
- /** Should the client perform readiness check when establishing the connection */
16
- enableReadyCheck?: boolean;
17
- /** Cluster mode read operation settings, can make reads on masters, slaves, or both */
18
- scaleReads?: string;
19
- }
1
+ import { Redis as IoRedis, Cluster, RedisOptions } from 'ioredis';
2
+
3
+ export type RedisInterface = IoRedis &
4
+ Cluster & {
5
+ /** Start the redis service */
6
+ init: () => void;
7
+ /** Stop the redis service */
8
+ shutdown: () => Promise<void>;
9
+ };
10
+
11
+ /** Options to initialize a Redis client */
12
+ export interface RedisCreateOptions {
13
+ /** Redis client settings */
14
+ redis?: RedisOptions;
15
+ /** Should the client perform readiness check when establishing the connection */
16
+ enableReadyCheck?: boolean;
17
+ /** Cluster mode read operation settings, can make reads on masters, slaves, or both */
18
+ scaleReads?: string;
19
+ }
@@ -1,17 +1,17 @@
1
- import { RedisCreateOptions } from './Redis.types';
2
- import { EngineError } from 'entities/EngineError';
3
-
4
- /**
5
- * Verify that the environment variables to connect to a Redis server are properly set
6
- */
7
- export function validateRedisEnvironment(options: RedisCreateOptions): void {
8
- const host = process.env.REDIS_HOST ?? options.redis?.host;
9
- if (typeof host !== 'string')
10
- throw new EngineError({ message: 'No host specified for Redis instance' });
11
-
12
- const port = process.env.REDIS_PORT
13
- ? parseInt(process.env.REDIS_PORT)
14
- : options.redis?.port;
15
- if (typeof port !== 'number')
16
- throw new EngineError({ message: 'No port specified for Redis instance' });
17
- }
1
+ import { RedisCreateOptions } from './Redis.types';
2
+ import { EngineError } from 'entities/EngineError';
3
+
4
+ /**
5
+ * Verify that the environment variables to connect to a Redis server are properly set
6
+ */
7
+ export function validateRedisEnvironment(options: RedisCreateOptions): void {
8
+ const host = process.env.REDIS_HOST ?? options.redis?.host;
9
+ if (typeof host !== 'string')
10
+ throw new EngineError({ message: 'No host specified for Redis instance' });
11
+
12
+ const port = process.env.REDIS_PORT
13
+ ? parseInt(process.env.REDIS_PORT)
14
+ : options.redis?.port;
15
+ if (typeof port !== 'number')
16
+ throw new EngineError({ message: 'No port specified for Redis instance' });
17
+ }
@@ -1,2 +1,2 @@
1
- export { Redis, createRedisClient } from './Redis';
2
- export * from './Redis.types';
1
+ export { Redis, createRedisClient } from './Redis';
2
+ export * from './Redis.types';
@@ -1,59 +1,59 @@
1
- import { Options, Dialect } from 'sequelize';
2
- import { validateSequelizeEnvironment } from './Sequelize.validate';
3
-
4
- // Check that environment variables are correctly set
5
- validateSequelizeEnvironment();
6
-
7
- const config: Options = {
8
- username: process.env.SQL_USER,
9
- password: process.env.SQL_PASSWORD,
10
- database: process.env.SQL_DB,
11
- host: process.env.SQL_HOST,
12
- port: process.env.SQL_PORT ? parseInt(process.env.SQL_PORT) : 5432, // Default port for PostgreSQL
13
- dialect: (process.env.SQL_TYPE ?? 'postgres') as Dialect, // Dynamically set the dialect (postgres, mysql, mssql)
14
- logging: false, // Set to true for debugging SQL queries
15
- define: {
16
- freezeTableName: false, // Prevent automatic pluralization of table names
17
- charset: 'utf8mb4', // Set character set for MySQL/MariaDB
18
- collate: 'utf8mb4_unicode_ci' // Set collation for MySQL/MariaDB
19
- },
20
- retry: {
21
- max: 5 // Maximum retry attempts for failed queries
22
- },
23
- dialectOptions: {},
24
- pool: {
25
- max: 5,
26
- min: 0,
27
- acquire: 30000, // Maximum time to wait for a connection
28
- idle: 10000 // Maximum idle time for connections
29
- },
30
- };
31
-
32
- // Additional configurations for MSSQL
33
- if (config.dialect === 'mssql') {
34
- config.dialectOptions = {
35
- requestTimeout: 30000, // Increase request timeout for MSSQL
36
- connectTimeout: 30000, // Increase connection timeout for MSSQL
37
- encrypt: true, // Use encryption for MSSQL (set to false if not needed)
38
- trustServerCertificate: true, // Set to true if using self-signed certificates
39
- };
40
- }
41
-
42
- // Add specific dialect configurations if necessary for MySQL/PostgreSQL
43
- if (config.dialect === 'mysql') {
44
- config.dialectOptions = {
45
- timezone: 'Z', // Set timezone for MySQL
46
- };
47
- }
48
-
49
- if (config.dialect === 'postgres') {
50
- config.dialectOptions = {
51
- ssl: process.env.PG_SSL === 'true' ? { rejectUnauthorized: false } : false, // SSL options for PostgreSQL (if required)
52
- };
53
- }
54
-
55
- export const development = config;
56
- export const staging = config;
57
- export const production = config;
58
- export const test = config;
59
- export default config;
1
+ import { Options, Dialect } from 'sequelize';
2
+ import { validateSequelizeEnvironment } from './Sequelize.validate';
3
+
4
+ // Check that environment variables are correctly set
5
+ validateSequelizeEnvironment();
6
+
7
+ const config: Options = {
8
+ username: process.env.SQL_USER,
9
+ password: process.env.SQL_PASSWORD,
10
+ database: process.env.SQL_DB,
11
+ host: process.env.SQL_HOST,
12
+ port: process.env.SQL_PORT ? parseInt(process.env.SQL_PORT) : 5432, // Default port for PostgreSQL
13
+ dialect: (process.env.SQL_TYPE ?? 'postgres') as Dialect, // Dynamically set the dialect (postgres, mysql, mssql)
14
+ logging: false, // Set to true for debugging SQL queries
15
+ define: {
16
+ freezeTableName: false, // Prevent automatic pluralization of table names
17
+ charset: 'utf8mb4', // Set character set for MySQL/MariaDB
18
+ collate: 'utf8mb4_unicode_ci' // Set collation for MySQL/MariaDB
19
+ },
20
+ retry: {
21
+ max: 5 // Maximum retry attempts for failed queries
22
+ },
23
+ dialectOptions: {},
24
+ pool: {
25
+ max: 5,
26
+ min: 0,
27
+ acquire: 30000, // Maximum time to wait for a connection
28
+ idle: 10000 // Maximum idle time for connections
29
+ },
30
+ };
31
+
32
+ // Additional configurations for MSSQL
33
+ if (config.dialect === 'mssql') {
34
+ config.dialectOptions = {
35
+ requestTimeout: 30000, // Increase request timeout for MSSQL
36
+ connectTimeout: 30000, // Increase connection timeout for MSSQL
37
+ encrypt: true, // Use encryption for MSSQL (set to false if not needed)
38
+ trustServerCertificate: true, // Set to true if using self-signed certificates
39
+ };
40
+ }
41
+
42
+ // Add specific dialect configurations if necessary for MySQL/PostgreSQL
43
+ if (config.dialect === 'mysql') {
44
+ config.dialectOptions = {
45
+ timezone: 'Z', // Set timezone for MySQL
46
+ };
47
+ }
48
+
49
+ if (config.dialect === 'postgres') {
50
+ config.dialectOptions = {
51
+ ssl: process.env.PG_SSL === 'true' ? { rejectUnauthorized: false } : false, // SSL options for PostgreSQL (if required)
52
+ };
53
+ }
54
+
55
+ export const development = config;
56
+ export const staging = config;
57
+ export const production = config;
58
+ export const test = config;
59
+ export default config;
@@ -1,21 +1,21 @@
1
- import { expect } from 'chai';
2
- import { validateSequelizeEnvironment } from './Sequelize.validate';
3
-
4
- describe('Entity - Sequelize', () => {
5
- it('Should validate process env if needed', () => {
6
- process.env.SQL_HOST = '127.0.0.1';
7
- process.env.SQL_PORT = '5423';
8
- process.env.SQL_PASSWORD = 'password';
9
- process.env.SQL_DB = 'db';
10
- process.env.SQL_USER = 'sql';
11
- expect(validateSequelizeEnvironment).not.to.throw();
12
- });
13
-
14
- it('Should allow only required variables', () => {
15
- process.env.SQL_HOST = '127.0.0.1';
16
- process.env.SQL_PASSWORD = 'password';
17
- process.env.SQL_DB = 'db';
18
- process.env.SQL_USER = 'sql';
19
- expect(validateSequelizeEnvironment).not.to.throw();
20
- });
21
- });
1
+ import { expect } from 'chai';
2
+ import { validateSequelizeEnvironment } from './Sequelize.validate';
3
+
4
+ describe('Entity - Sequelize', () => {
5
+ it('Should validate process env if needed', () => {
6
+ process.env.SQL_HOST = '127.0.0.1';
7
+ process.env.SQL_PORT = '5423';
8
+ process.env.SQL_PASSWORD = 'password';
9
+ process.env.SQL_DB = 'db';
10
+ process.env.SQL_USER = 'sql';
11
+ expect(validateSequelizeEnvironment).not.to.throw();
12
+ });
13
+
14
+ it('Should allow only required variables', () => {
15
+ process.env.SQL_HOST = '127.0.0.1';
16
+ process.env.SQL_PASSWORD = 'password';
17
+ process.env.SQL_DB = 'db';
18
+ process.env.SQL_USER = 'sql';
19
+ expect(validateSequelizeEnvironment).not.to.throw();
20
+ });
21
+ });
@@ -1,75 +1,75 @@
1
- import { Sequelize, ModelCtor } from 'sequelize-typescript';
2
- import dbConfig from './Sequelize.config';
3
- import { Sequelize as SequelizeInterface } from './Sequelize.types';
4
- import { validateSequelizeEnvironment } from './Sequelize.validate';
5
- import { EngineError } from 'entities/EngineError';
6
- import { LifecycleController } from 'entities/LifecycleController';
7
-
8
- export let sequelizeClient: undefined | Sequelize;
9
-
10
- /**
11
- * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface
12
- */
13
- export const sequelize = new Proxy<SequelizeInterface>(
14
- // 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
15
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16
- // @ts-ignore
17
- {},
18
- {
19
- get: function (target, property): unknown {
20
- if (property === 'init') return init;
21
- if (property === 'shutdown') return shutdown;
22
- if (property === 'addModels') return addModels;
23
- // Create the sequelize client if it does not exist
24
- if (!sequelizeClient)
25
- throw new EngineError({
26
- message: 'Sequelize client was not initialized'
27
- });
28
- // Call the function on the sequelize client
29
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
30
- // @ts-ignore
31
- return sequelizeClient[property] as unknown;
32
- }
33
- }
34
- );
35
-
36
- /** On init create client and connect */
37
- export function init(): void {
38
- // Ignore if already initialized
39
- if (sequelizeClient) return;
40
- sequelizeClient = createSequelizeClient();
41
- sequelizeClient
42
- .authenticate()
43
- .then(() => console.log('Connected to database.'))
44
- .catch((err: Error) =>
45
- console.error('Unable to connect to the database:', err)
46
- );
47
- LifecycleController.register(sequelize);
48
- }
49
-
50
- /** On shutdown close connection and clear client */
51
- export async function shutdown(): Promise<void> {
52
- if (sequelizeClient) await sequelizeClient.close();
53
- sequelizeClient = undefined;
54
- }
55
-
56
- export function addModels(models: Array<ModelCtor>): void {
57
- if (!sequelizeClient)
58
- throw new EngineError({
59
- message: 'Sequelize client was not initialized'
60
- });
61
- sequelizeClient.addModels(models);
62
- sequelizeClient.sync();
63
- }
64
-
65
- /** Create Sequelize client */
66
- export function createSequelizeClient(): Sequelize {
67
- // Throw an error if there is no host initial
68
- validateSequelizeEnvironment();
69
- return new Sequelize(
70
- process.env.SQL_DB as string,
71
- process.env.SQL_USER as string,
72
- process.env.SQL_PASSWORD as string,
73
- dbConfig
74
- );
75
- }
1
+ import { Sequelize, ModelCtor } from 'sequelize-typescript';
2
+ import dbConfig from './Sequelize.config';
3
+ import { Sequelize as SequelizeInterface } from './Sequelize.types';
4
+ import { validateSequelizeEnvironment } from './Sequelize.validate';
5
+ import { EngineError } from 'entities/EngineError';
6
+ import { LifecycleController } from 'entities/LifecycleController';
7
+
8
+ export let sequelizeClient: undefined | Sequelize;
9
+
10
+ /**
11
+ * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface
12
+ */
13
+ export const sequelize = new Proxy<SequelizeInterface>(
14
+ // 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
15
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16
+ // @ts-ignore
17
+ {},
18
+ {
19
+ get: function (target, property): unknown {
20
+ if (property === 'init') return init;
21
+ if (property === 'shutdown') return shutdown;
22
+ if (property === 'addModels') return addModels;
23
+ // Create the sequelize client if it does not exist
24
+ if (!sequelizeClient)
25
+ throw new EngineError({
26
+ message: 'Sequelize client was not initialized'
27
+ });
28
+ // Call the function on the sequelize client
29
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
30
+ // @ts-ignore
31
+ return sequelizeClient[property] as unknown;
32
+ }
33
+ }
34
+ );
35
+
36
+ /** On init create client and connect */
37
+ export function init(): void {
38
+ // Ignore if already initialized
39
+ if (sequelizeClient) return;
40
+ sequelizeClient = createSequelizeClient();
41
+ sequelizeClient
42
+ .authenticate()
43
+ .then(() => console.log('Connected to database.'))
44
+ .catch((err: Error) =>
45
+ console.error('Unable to connect to the database:', err)
46
+ );
47
+ LifecycleController.register(sequelize);
48
+ }
49
+
50
+ /** On shutdown close connection and clear client */
51
+ export async function shutdown(): Promise<void> {
52
+ if (sequelizeClient) await sequelizeClient.close();
53
+ sequelizeClient = undefined;
54
+ }
55
+
56
+ export function addModels(models: Array<ModelCtor>): void {
57
+ if (!sequelizeClient)
58
+ throw new EngineError({
59
+ message: 'Sequelize client was not initialized'
60
+ });
61
+ sequelizeClient.addModels(models);
62
+ sequelizeClient.sync();
63
+ }
64
+
65
+ /** Create Sequelize client */
66
+ export function createSequelizeClient(): Sequelize {
67
+ // Throw an error if there is no host initial
68
+ validateSequelizeEnvironment();
69
+ return new Sequelize(
70
+ process.env.SQL_DB as string,
71
+ process.env.SQL_USER as string,
72
+ process.env.SQL_PASSWORD as string,
73
+ dbConfig
74
+ );
75
+ }
@@ -1,10 +1,10 @@
1
- import { Sequelize as SequelizeClass, ModelCtor } from 'sequelize-typescript';
2
-
3
- export type Sequelize = SequelizeClass & {
4
- /** Start the sequelize service */
5
- init: () => void;
6
- /** Stop the sequelize service */
7
- shutdown: () => Promise<void>;
8
- /** Register a model with sequelize */
9
- addModels: (models: Array<ModelCtor>) => void;
10
- };
1
+ import { Sequelize as SequelizeClass, ModelCtor } from 'sequelize-typescript';
2
+
3
+ export type Sequelize = SequelizeClass & {
4
+ /** Start the sequelize service */
5
+ init: () => void;
6
+ /** Stop the sequelize service */
7
+ shutdown: () => Promise<void>;
8
+ /** Register a model with sequelize */
9
+ addModels: (models: Array<ModelCtor>) => void;
10
+ };
@@ -1,15 +1,15 @@
1
- import { assertEnvironment } from 'utils/checkEnvironment';
2
- import { envAssert } from 'utils/envAssert';
3
-
4
- /**
5
- * Verify that the environment variables to connect to a SQL server are properly set
6
- */
7
- export function validateSequelizeEnvironment(): void {
8
- // We only check if there is at least the host specified
9
- if (process.env.SQL_HOST) assertEnvironment({ SQL_HOST: envAssert.isHost() });
10
- if (process.env.SQL_PASSWORD)
11
- assertEnvironment({ SQL_PASSWORD: envAssert.isString() });
12
- if (process.env.SQL_DB) assertEnvironment({ SQL_DB: envAssert.isString() });
13
- if (process.env.SQL_USER)
14
- assertEnvironment({ SQL_USER: envAssert.isString() });
15
- }
1
+ import { assertEnvironment } from 'utils/checkEnvironment';
2
+ import { envAssert } from 'utils/envAssert';
3
+
4
+ /**
5
+ * Verify that the environment variables to connect to a SQL server are properly set
6
+ */
7
+ export function validateSequelizeEnvironment(): void {
8
+ // We only check if there is at least the host specified
9
+ if (process.env.SQL_HOST) assertEnvironment({ SQL_HOST: envAssert.isHost() });
10
+ if (process.env.SQL_PASSWORD)
11
+ assertEnvironment({ SQL_PASSWORD: envAssert.isString() });
12
+ if (process.env.SQL_DB) assertEnvironment({ SQL_DB: envAssert.isString() });
13
+ if (process.env.SQL_USER)
14
+ assertEnvironment({ SQL_USER: envAssert.isString() });
15
+ }
@@ -1,2 +1,2 @@
1
- export { sequelize } from './Sequelize';
2
- export * from './Sequelize.types';
1
+ export { sequelize } from './Sequelize';
2
+ export * from './Sequelize.types';