node-server-engine 1.1.1 → 1.1.3

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 (471) 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 -1025
  7. package/babel.config.json +35 -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.map +1 -1
  16. package/dist/db/models/index.js.map +1 -1
  17. package/dist/entities/ElasticSearch/ElasticSearch.js +7 -7
  18. package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
  19. package/dist/entities/ElasticSearch/ElasticSearch.types.js.map +1 -1
  20. package/dist/entities/ElasticSearch/index.js.map +1 -1
  21. package/dist/entities/Endpoint/Endpoint.js +8 -8
  22. package/dist/entities/Endpoint/Endpoint.js.map +1 -1
  23. package/dist/entities/Endpoint/Endpoint.types.js.map +1 -1
  24. package/dist/entities/Endpoint/index.js.map +1 -1
  25. package/dist/entities/EngineError/EngineError.js +2 -2
  26. package/dist/entities/EngineError/EngineError.js.map +1 -1
  27. package/dist/entities/EngineError/EngineError.types.js.map +1 -1
  28. package/dist/entities/EngineError/index.js.map +1 -1
  29. package/dist/entities/KeySet/KeySet.js +3 -3
  30. package/dist/entities/KeySet/KeySet.js.map +1 -1
  31. package/dist/entities/KeySet/KeySet.types.js.map +1 -1
  32. package/dist/entities/KeySet/index.js.map +1 -1
  33. package/dist/entities/LifecycleController/LifecycleController.js.map +1 -1
  34. package/dist/entities/LifecycleController/LifecycleController.types.js.map +1 -1
  35. package/dist/entities/LifecycleController/index.js.map +1 -1
  36. package/dist/entities/Localizator/Localizator.js +7 -7
  37. package/dist/entities/Localizator/Localizator.js.map +1 -1
  38. package/dist/entities/Localizator/Localizator.types.js.map +1 -1
  39. package/dist/entities/Localizator/guessNamingConvention/guessNamingConvention.js.map +1 -1
  40. package/dist/entities/Localizator/guessNamingConvention/index.js.map +1 -1
  41. package/dist/entities/Localizator/index.js.map +1 -1
  42. package/dist/entities/MessageHandler/MessageHandler.js +2 -2
  43. package/dist/entities/MessageHandler/MessageHandler.js.map +1 -1
  44. package/dist/entities/MessageHandler/MessageHandler.types.js.map +1 -1
  45. package/dist/entities/MessageHandler/index.js.map +1 -1
  46. package/dist/entities/PubSub/PubSub.js +25 -25
  47. package/dist/entities/PubSub/PubSub.js.map +1 -1
  48. package/dist/entities/PubSub/PubSub.types.js.map +1 -1
  49. package/dist/entities/PubSub/handleMessage/handleMessage.js +6 -6
  50. package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
  51. package/dist/entities/PubSub/handleMessage/index.js.map +1 -1
  52. package/dist/entities/PubSub/index.js.map +1 -1
  53. package/dist/entities/PushNotification/PushNotification.js +4 -4
  54. package/dist/entities/PushNotification/PushNotification.js.map +1 -1
  55. package/dist/entities/PushNotification/PushNotification.types.js.map +1 -1
  56. package/dist/entities/PushNotification/index.js.map +1 -1
  57. package/dist/entities/Redis/Redis.js +8 -8
  58. package/dist/entities/Redis/Redis.js.map +1 -1
  59. package/dist/entities/Redis/Redis.types.js.map +1 -1
  60. package/dist/entities/Redis/Redis.validate.js +2 -2
  61. package/dist/entities/Redis/Redis.validate.js.map +1 -1
  62. package/dist/entities/Redis/index.js.map +1 -1
  63. package/dist/entities/Sequelize/Sequelize.config.js +42 -2
  64. package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
  65. package/dist/entities/Sequelize/Sequelize.js +3 -3
  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 +2 -2
  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 +15 -15
  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 +4 -4
  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.d.ts +3 -1
  115. package/dist/middleware/checkPermission/checkPermission.js +2 -2
  116. package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
  117. package/dist/middleware/error/error.js.map +1 -1
  118. package/dist/middleware/error/index.js.map +1 -1
  119. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
  120. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
  121. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
  122. package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
  123. package/dist/middleware/fileUploader/fileUploader.js +12 -12
  124. package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
  125. package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
  126. package/dist/middleware/fileUploader/index.js.map +1 -1
  127. package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
  128. package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
  129. package/dist/middleware/fileUploader/validate/index.js.map +1 -1
  130. package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
  131. package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
  132. package/dist/middleware/fourOhFour/index.js.map +1 -1
  133. package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
  134. package/dist/middleware/geminiFileUploader/index.js.map +1 -1
  135. package/dist/middleware/healthCheck/healthCheck.js +2 -2
  136. package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
  137. package/dist/middleware/healthCheck/index.js.map +1 -1
  138. package/dist/middleware/index.js.map +1 -1
  139. package/dist/middleware/metrics/index.js.map +1 -1
  140. package/dist/middleware/metrics/metrics.js.map +1 -1
  141. package/dist/middleware/requestMetrics/index.js.map +1 -1
  142. package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
  143. package/dist/middleware/swaggerDocs/index.js.map +1 -1
  144. package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
  145. package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
  146. package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
  147. package/dist/middleware/userResolver/index.js.map +1 -1
  148. package/dist/middleware/userResolver/userResolver.js.map +1 -1
  149. package/dist/middleware/validate/index.js.map +1 -1
  150. package/dist/middleware/validate/validate.js.map +1 -1
  151. package/dist/middleware/version/index.js.map +1 -1
  152. package/dist/middleware/version/version.js +3 -3
  153. package/dist/middleware/version/version.js.map +1 -1
  154. package/dist/utils/checkEnvironment/index.js +13 -13
  155. package/dist/utils/checkEnvironment/index.js.map +1 -1
  156. package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
  157. package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
  158. package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
  159. package/dist/utils/createHttpServer/index.js.map +1 -1
  160. package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
  161. package/dist/utils/createSortedObject/index.js.map +1 -1
  162. package/dist/utils/dbMigration/dbMigration.js +8 -8
  163. package/dist/utils/dbMigration/dbMigration.js.map +1 -1
  164. package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
  165. package/dist/utils/dbMigration/index.js.map +1 -1
  166. package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
  167. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.d.ts +2 -2
  168. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +47 -15
  169. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
  170. package/dist/utils/envAssert/envAssert.js +6 -6
  171. package/dist/utils/envAssert/envAssert.js.map +1 -1
  172. package/dist/utils/envAssert/index.js.map +1 -1
  173. package/dist/utils/envAssert/validators/hostList.js +2 -2
  174. package/dist/utils/envAssert/validators/hostList.js.map +1 -1
  175. package/dist/utils/envAssert/validators/index.js.map +1 -1
  176. package/dist/utils/envAssert/validators/ipList.js +2 -2
  177. package/dist/utils/envAssert/validators/ipList.js.map +1 -1
  178. package/dist/utils/envAssert/validators/path.js +2 -2
  179. package/dist/utils/envAssert/validators/path.js.map +1 -1
  180. package/dist/utils/envAssert/validators/string.js +2 -2
  181. package/dist/utils/envAssert/validators/string.js.map +1 -1
  182. package/dist/utils/envAssert/validators/stringList.js +3 -3
  183. package/dist/utils/envAssert/validators/stringList.js.map +1 -1
  184. package/dist/utils/filter/filter.js +4 -4
  185. package/dist/utils/filter/filter.js.map +1 -1
  186. package/dist/utils/filter/index.js.map +1 -1
  187. package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
  188. package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
  189. package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
  190. package/dist/utils/getDynamicLink/index.js.map +1 -1
  191. package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
  192. package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
  193. package/dist/utils/hmac/checkEnv/index.js.map +1 -1
  194. package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
  195. package/dist/utils/hmac/createHmac/index.js.map +1 -1
  196. package/dist/utils/hmac/index.js.map +1 -1
  197. package/dist/utils/hmac/index.types.js.map +1 -1
  198. package/dist/utils/hmac/signPayload/index.js.map +1 -1
  199. package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
  200. package/dist/utils/hmac/verifySignature/index.js.map +1 -1
  201. package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
  202. package/dist/utils/index.js.map +1 -1
  203. package/dist/utils/jwt/index.js.map +1 -1
  204. package/dist/utils/jwt/jwt.js.map +1 -1
  205. package/dist/utils/jwt/jwt.types.js.map +1 -1
  206. package/dist/utils/report/index.js.map +1 -1
  207. package/dist/utils/report/output.js.map +1 -1
  208. package/dist/utils/report/output.types.js.map +1 -1
  209. package/dist/utils/report/report.js.map +1 -1
  210. package/dist/utils/report/report.types.js.map +1 -1
  211. package/dist/utils/request/index.js.map +1 -1
  212. package/dist/utils/request/request.js.map +1 -1
  213. package/dist/utils/semverCompare/index.js.map +1 -1
  214. package/dist/utils/semverCompare/semverCompare.js +5 -5
  215. package/dist/utils/semverCompare/semverCompare.js.map +1 -1
  216. package/dist/utils/sendEmail/index.js.map +1 -1
  217. package/dist/utils/sendEmail/sendEmail.js +8 -8
  218. package/dist/utils/sendEmail/sendEmail.js.map +1 -1
  219. package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
  220. package/dist/utils/sendPush/index.js.map +1 -1
  221. package/dist/utils/sendPush/sendPush.js +5 -5
  222. package/dist/utils/sendPush/sendPush.js.map +1 -1
  223. package/dist/utils/sendPush/sendPush.types.js.map +1 -1
  224. package/dist/utils/tlsConfig/index.js.map +1 -1
  225. package/dist/utils/tlsConfig/tlsConfig.js +2 -2
  226. package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
  227. package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
  228. package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
  229. package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
  230. package/dist/utils/tlsRequest/index.js.map +1 -1
  231. package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
  232. package/dist/utils/trimPathSlash/index.js.map +1 -1
  233. package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
  234. package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
  235. package/eslint.config.mjs +11 -11
  236. package/package.json +164 -161
  237. package/src/const/DebeziumEvent.ts +6 -6
  238. package/src/const/LogSeverity.ts +7 -7
  239. package/src/const/index.ts +5 -5
  240. package/src/const/metrics.ts +6 -6
  241. package/src/const/mime.ts +37 -37
  242. package/src/const/tokenIssuer.ts +9 -9
  243. package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
  244. package/src/db/models/SequelizeMeta.ts +16 -16
  245. package/src/db/models/index.ts +2 -2
  246. package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
  247. package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
  248. package/src/entities/ElasticSearch/index.ts +2 -2
  249. package/src/entities/Endpoint/Endpoint.test.ts +337 -337
  250. package/src/entities/Endpoint/Endpoint.ts +202 -202
  251. package/src/entities/Endpoint/Endpoint.types.ts +205 -205
  252. package/src/entities/Endpoint/index.ts +2 -2
  253. package/src/entities/EngineError/EngineError.ts +28 -28
  254. package/src/entities/EngineError/EngineError.types.ts +15 -15
  255. package/src/entities/EngineError/index.ts +2 -2
  256. package/src/entities/KeySet/KeySet.test.ts +126 -126
  257. package/src/entities/KeySet/KeySet.ts +172 -172
  258. package/src/entities/KeySet/KeySet.types.ts +28 -28
  259. package/src/entities/KeySet/index.ts +2 -2
  260. package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
  261. package/src/entities/LifecycleController/LifecycleController.ts +24 -24
  262. package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
  263. package/src/entities/LifecycleController/index.ts +2 -2
  264. package/src/entities/Localizator/Localizator.ts +139 -139
  265. package/src/entities/Localizator/Localizator.types.ts +52 -52
  266. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
  267. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
  268. package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
  269. package/src/entities/Localizator/index.ts +2 -2
  270. package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
  271. package/src/entities/MessageHandler/MessageHandler.ts +72 -72
  272. package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
  273. package/src/entities/MessageHandler/index.ts +2 -2
  274. package/src/entities/PubSub/PubSub.test.ts +297 -297
  275. package/src/entities/PubSub/PubSub.ts +202 -202
  276. package/src/entities/PubSub/PubSub.types.ts +76 -76
  277. package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
  278. package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
  279. package/src/entities/PubSub/handleMessage/index.ts +1 -1
  280. package/src/entities/PubSub/index.ts +2 -2
  281. package/src/entities/PushNotification/PushNotification.test.ts +35 -35
  282. package/src/entities/PushNotification/PushNotification.ts +44 -44
  283. package/src/entities/PushNotification/PushNotification.types.ts +25 -25
  284. package/src/entities/PushNotification/index.ts +2 -2
  285. package/src/entities/Redis/Redis.ts +71 -71
  286. package/src/entities/Redis/Redis.types.ts +19 -19
  287. package/src/entities/Redis/Redis.validate.ts +17 -17
  288. package/src/entities/Redis/index.ts +2 -2
  289. package/src/entities/Sequelize/Sequelize.config.ts +59 -29
  290. package/src/entities/Sequelize/Sequelize.test.ts +21 -21
  291. package/src/entities/Sequelize/Sequelize.ts +75 -75
  292. package/src/entities/Sequelize/Sequelize.types.ts +10 -10
  293. package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
  294. package/src/entities/Sequelize/index.ts +2 -2
  295. package/src/entities/Server/Server.const.ts +56 -56
  296. package/src/entities/Server/Server.test.ts +272 -272
  297. package/src/entities/Server/Server.ts +445 -445
  298. package/src/entities/Server/Server.types.ts +88 -88
  299. package/src/entities/Server/index.ts +2 -2
  300. package/src/entities/SocketClient/SocketClient.test.ts +392 -392
  301. package/src/entities/SocketClient/SocketClient.ts +401 -401
  302. package/src/entities/SocketClient/SocketClient.types.ts +62 -62
  303. package/src/entities/SocketClient/index.ts +2 -2
  304. package/src/entities/SocketClient/parseMessage/index.ts +1 -1
  305. package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
  306. package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
  307. package/src/entities/Storage/Storage.test.ts +58 -58
  308. package/src/entities/Storage/Storage.ts +219 -219
  309. package/src/entities/Storage/Storage.types.ts +57 -57
  310. package/src/entities/Storage/index.ts +2 -2
  311. package/src/entities/ValidationError/ValidationError.ts +34 -34
  312. package/src/entities/ValidationError/index.ts +1 -1
  313. package/src/entities/WebError/WebError.test.ts +18 -18
  314. package/src/entities/WebError/WebError.ts +23 -23
  315. package/src/entities/WebError/WebError.types.ts +9 -9
  316. package/src/entities/WebError/index.ts +2 -2
  317. package/src/entities/index.ts +16 -16
  318. package/src/index.ts +4 -4
  319. package/src/metrics/debug.ts +10 -10
  320. package/src/metrics/index.ts +2 -2
  321. package/src/metrics/request.ts +17 -17
  322. package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
  323. package/src/middleware/authAdmin/authAdmin.ts +114 -114
  324. package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
  325. package/src/middleware/authAdmin/index.ts +2 -2
  326. package/src/middleware/authHmac/authHmac.test.ts +86 -86
  327. package/src/middleware/authHmac/authHmac.ts +56 -56
  328. package/src/middleware/authHmac/authHmac.types.ts +7 -7
  329. package/src/middleware/authHmac/index.ts +2 -2
  330. package/src/middleware/authJwt/authJwt.test.ts +54 -54
  331. package/src/middleware/authJwt/authJwt.ts +55 -55
  332. package/src/middleware/authJwt/authJwt.types.ts +14 -14
  333. package/src/middleware/authJwt/index.ts +2 -2
  334. package/src/middleware/authStatic/authStatic.test.ts +36 -36
  335. package/src/middleware/authStatic/authStatic.ts +45 -45
  336. package/src/middleware/authStatic/index.ts +1 -1
  337. package/src/middleware/authTls/authTls.test.ts +138 -138
  338. package/src/middleware/authTls/authTls.ts +106 -106
  339. package/src/middleware/authTls/authTls.types.ts +13 -13
  340. package/src/middleware/authTls/index.ts +2 -2
  341. package/src/middleware/checkPermission/checkPermission.ts +33 -35
  342. package/src/middleware/error/error.test.ts +60 -60
  343. package/src/middleware/error/error.ts +25 -25
  344. package/src/middleware/error/index.ts +1 -1
  345. package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
  346. package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
  347. package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
  348. package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
  349. package/src/middleware/fileUploader/fileUploader.ts +303 -303
  350. package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
  351. package/src/middleware/fileUploader/index.ts +2 -2
  352. package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
  353. package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
  354. package/src/middleware/fileUploader/validate/index.ts +1 -1
  355. package/src/middleware/fileUploader/validate/validate.ts +27 -27
  356. package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
  357. package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
  358. package/src/middleware/fourOhFour/index.ts +1 -1
  359. package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
  360. package/src/middleware/geminiFileUploader/index.ts +1 -1
  361. package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
  362. package/src/middleware/healthCheck/healthCheck.ts +14 -14
  363. package/src/middleware/healthCheck/index.ts +1 -1
  364. package/src/middleware/index.ts +17 -17
  365. package/src/middleware/metrics/index.ts +1 -1
  366. package/src/middleware/metrics/metrics.test.ts +46 -46
  367. package/src/middleware/metrics/metrics.ts +24 -24
  368. package/src/middleware/requestMetrics/index.ts +1 -1
  369. package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
  370. package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
  371. package/src/middleware/swaggerDocs/index.ts +2 -2
  372. package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
  373. package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
  374. package/src/middleware/userResolver/index.ts +1 -1
  375. package/src/middleware/userResolver/userResolver.test.ts +35 -35
  376. package/src/middleware/userResolver/userResolver.ts +35 -35
  377. package/src/middleware/validate/index.ts +1 -1
  378. package/src/middleware/validate/validate.test.ts +43 -43
  379. package/src/middleware/validate/validate.ts +25 -25
  380. package/src/middleware/version/index.ts +1 -1
  381. package/src/middleware/version/version.test.ts +23 -23
  382. package/src/middleware/version/version.ts +12 -12
  383. package/src/utils/checkEnvironment/index.ts +49 -49
  384. package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
  385. package/src/utils/createHttpServer/createHttpServer.ts +34 -34
  386. package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
  387. package/src/utils/createHttpServer/index.ts +1 -1
  388. package/src/utils/createSortedObject/createSortedObject.ts +20 -20
  389. package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
  390. package/src/utils/createSortedObject/index.ts +1 -1
  391. package/src/utils/dbMigration/dbMigration.test.ts +209 -209
  392. package/src/utils/dbMigration/dbMigration.ts +199 -199
  393. package/src/utils/dbMigration/dbMigration.types.ts +11 -11
  394. package/src/utils/dbMigration/index.ts +2 -2
  395. package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
  396. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
  397. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -70
  398. package/src/utils/envAssert/envAssert.ts +31 -31
  399. package/src/utils/envAssert/index.ts +1 -1
  400. package/src/utils/envAssert/validators/hostList.ts +17 -17
  401. package/src/utils/envAssert/validators/index.ts +5 -5
  402. package/src/utils/envAssert/validators/ipList.ts +13 -13
  403. package/src/utils/envAssert/validators/path.ts +13 -13
  404. package/src/utils/envAssert/validators/string.ts +9 -9
  405. package/src/utils/envAssert/validators/stringList.ts +13 -13
  406. package/src/utils/filter/filter.ts +17 -17
  407. package/src/utils/filter/index.ts +1 -1
  408. package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
  409. package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
  410. package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
  411. package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
  412. package/src/utils/getDynamicLink/index.ts +2 -2
  413. package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
  414. package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
  415. package/src/utils/hmac/checkEnv/index.ts +1 -1
  416. package/src/utils/hmac/createHmac/createHmac.ts +33 -33
  417. package/src/utils/hmac/createHmac/index.ts +1 -1
  418. package/src/utils/hmac/index.ts +4 -4
  419. package/src/utils/hmac/index.types.ts +13 -13
  420. package/src/utils/hmac/signPayload/index.ts +1 -1
  421. package/src/utils/hmac/signPayload/signPayload.ts +16 -16
  422. package/src/utils/hmac/verifySignature/index.ts +1 -1
  423. package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
  424. package/src/utils/index.ts +26 -26
  425. package/src/utils/jwt/index.ts +2 -2
  426. package/src/utils/jwt/jwt.test.ts +41 -41
  427. package/src/utils/jwt/jwt.ts +204 -204
  428. package/src/utils/jwt/jwt.types.ts +21 -21
  429. package/src/utils/report/index.ts +3 -3
  430. package/src/utils/report/output.ts +45 -45
  431. package/src/utils/report/output.types.ts +70 -70
  432. package/src/utils/report/report.test.ts +133 -133
  433. package/src/utils/report/report.ts +134 -134
  434. package/src/utils/report/report.types.ts +13 -13
  435. package/src/utils/request/index.ts +1 -1
  436. package/src/utils/request/request.test.ts +26 -26
  437. package/src/utils/request/request.ts +48 -48
  438. package/src/utils/semverCompare/index.ts +1 -1
  439. package/src/utils/semverCompare/semverCompare.test.ts +49 -49
  440. package/src/utils/semverCompare/semverCompare.ts +60 -60
  441. package/src/utils/sendEmail/index.ts +1 -1
  442. package/src/utils/sendEmail/sendEmail.ts +27 -27
  443. package/src/utils/sendEmail/sendEmail.types.ts +7 -7
  444. package/src/utils/sendPush/index.ts +2 -2
  445. package/src/utils/sendPush/sendPush.ts +20 -20
  446. package/src/utils/sendPush/sendPush.types.ts +25 -25
  447. package/src/utils/tlsConfig/index.ts +2 -2
  448. package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
  449. package/src/utils/tlsConfig/tlsConfig.ts +47 -47
  450. package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
  451. package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
  452. package/src/utils/tlsRequest/index.ts +1 -1
  453. package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
  454. package/src/utils/tlsRequest/tlsRequest.ts +12 -12
  455. package/src/utils/trimPathSlash/index.ts +1 -1
  456. package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
  457. package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
  458. package/test/env.ts +56 -56
  459. package/test/factory/index.ts +8 -8
  460. package/test/factory/sequelizeMeta.ts +12 -12
  461. package/test/hooks.ts +37 -37
  462. package/test/index.ts +3 -3
  463. package/test/stub/index.ts +3 -3
  464. package/test/stub/stubLocales.ts +68 -68
  465. package/test/stub/stubPubSub.ts +7 -7
  466. package/test/stub/stubStorage.ts +77 -77
  467. package/test/stub/stubStorage.types.ts +11 -11
  468. package/test/utils/app.ts +31 -31
  469. package/test/utils/index.ts +1 -1
  470. package/tsconfig.build.json +5 -5
  471. package/tsconfig.json +32 -32
@@ -1,56 +1,56 @@
1
- import { json, urlencoded, ErrorRequestHandler, RequestHandler } from 'express';
2
- import morgan from 'morgan';
3
- import {
4
- metrics,
5
- error,
6
- fourOhFour,
7
- healthCheck,
8
- version,
9
- swaggerDocs
10
- } from 'middleware';
11
-
12
- const ACCESS_LOG = JSON.stringify({
13
- method: ':method',
14
- status: ':status',
15
- url: ':url',
16
- 'http-version': ':http-version',
17
- ip: ':remote-addr',
18
- 'user-agent': ':user-agent',
19
- 'content-length': ':res[content-length]',
20
- referrer: ':referrer',
21
- 'response-time': ':response-time',
22
- severity: 'DEBUG',
23
- message: ':method :url [:status]'
24
- });
25
-
26
- // Default middleware that are applied first thing on the primary port, before the business logic endpoints
27
- export const defaultMiddleware: Array<RequestHandler> = [
28
- healthCheck(),
29
- json({ limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb' }),
30
- urlencoded({
31
- extended: true,
32
- limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb'
33
- }),
34
- metrics(),
35
- version()
36
- ].filter((val) => val);
37
-
38
- // Error handling middleware that are run after the main business logic endpoints
39
- export const defaultErrorMiddleware: Array<
40
- RequestHandler | ErrorRequestHandler
41
- > = [error, fourOhFour];
42
-
43
- // Middleware that are served on the secondary port
44
- export const secondaryMiddleware: Array<RequestHandler> = [
45
- metrics(),
46
- version(),
47
- swaggerDocs()
48
- ];
49
-
50
- // Add morgan logging to default middleware chain when reporting is not silenced
51
- if (!process.env.SILENCE_REPORT) {
52
- defaultMiddleware.unshift(morgan(ACCESS_LOG));
53
- secondaryMiddleware.unshift(morgan(ACCESS_LOG));
54
- }
55
-
56
- export const shutdownSignals = ['SIGTERM', 'SIGUSR2', 'SIGINT'];
1
+ import { json, urlencoded, ErrorRequestHandler, RequestHandler } from 'express';
2
+ import morgan from 'morgan';
3
+ import {
4
+ metrics,
5
+ error,
6
+ fourOhFour,
7
+ healthCheck,
8
+ version,
9
+ swaggerDocs
10
+ } from 'middleware';
11
+
12
+ const ACCESS_LOG = JSON.stringify({
13
+ method: ':method',
14
+ status: ':status',
15
+ url: ':url',
16
+ 'http-version': ':http-version',
17
+ ip: ':remote-addr',
18
+ 'user-agent': ':user-agent',
19
+ 'content-length': ':res[content-length]',
20
+ referrer: ':referrer',
21
+ 'response-time': ':response-time',
22
+ severity: 'DEBUG',
23
+ message: ':method :url [:status]'
24
+ });
25
+
26
+ // Default middleware that are applied first thing on the primary port, before the business logic endpoints
27
+ export const defaultMiddleware: Array<RequestHandler> = [
28
+ healthCheck(),
29
+ json({ limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb' }),
30
+ urlencoded({
31
+ extended: true,
32
+ limit: process.env.REQUEST_SIZE_LIMIT ?? '1mb'
33
+ }),
34
+ metrics(),
35
+ version()
36
+ ].filter((val) => val);
37
+
38
+ // Error handling middleware that are run after the main business logic endpoints
39
+ export const defaultErrorMiddleware: Array<
40
+ RequestHandler | ErrorRequestHandler
41
+ > = [error, fourOhFour];
42
+
43
+ // Middleware that are served on the secondary port
44
+ export const secondaryMiddleware: Array<RequestHandler> = [
45
+ metrics(),
46
+ version(),
47
+ swaggerDocs()
48
+ ];
49
+
50
+ // Add morgan logging to default middleware chain when reporting is not silenced
51
+ if (!process.env.SILENCE_REPORT) {
52
+ defaultMiddleware.unshift(morgan(ACCESS_LOG));
53
+ secondaryMiddleware.unshift(morgan(ACCESS_LOG));
54
+ }
55
+
56
+ export const shutdownSignals = ['SIGTERM', 'SIGUSR2', 'SIGINT'];
@@ -1,272 +1,272 @@
1
- import { randomUUID } from 'crypto';
2
- // eslint-disable-next-line import/no-unresolved
3
- import { setTimeout } from 'timers/promises';
4
- import { generateAccessToken } from 'backend-test-tools';
5
- import Ajv, { JSONSchemaType } from 'ajv';
6
- import { expect } from 'chai';
7
- import { faker } from '@faker-js/faker';
8
- import { Sequelize } from 'sequelize';
9
- import { fake, SinonStub, stub } from 'sinon';
10
- import supertest from 'supertest';
11
- import WS from 'ws';
12
- import { Server } from './Server';
13
- import { Endpoint, EndpointMethod, EndpointAuthType } from 'entities/Endpoint';
14
- import { SocketClient, SocketMessage } from 'entities/SocketClient';
15
- import { stubPubSub } from 'test';
16
- import { httpsAgent, loadTlsConfig } from 'utils';
17
- import * as jwt from 'utils/jwt/jwt';
18
-
19
- describe('Entity - Server', function () {
20
- let token: string;
21
- let initKeySetsStub: SinonStub;
22
-
23
- before(() => {
24
- if (!httpsAgent) loadTlsConfig();
25
-
26
- const id = randomUUID();
27
- token = generateAccessToken(id);
28
- });
29
-
30
- beforeEach(() => {
31
- initKeySetsStub = stub(jwt, 'initKeySets').resolves();
32
- stub(Sequelize.prototype, 'close');
33
- stubPubSub();
34
- });
35
-
36
- afterEach(() => {
37
- });
38
-
39
- it('init and shutdown', async () => {
40
- const server = new Server({ endpoints: [] });
41
- await server.init();
42
- await server.shutdown();
43
- });
44
-
45
- it('init with callbacks (async)', async () => {
46
- const callbacks = [fake(), fake(), fake()];
47
- const server = new Server({
48
- endpoints: [],
49
- initCallbacks: callbacks,
50
- syncCallbacks: false
51
- });
52
-
53
- await server.init();
54
- await server.shutdown();
55
-
56
- callbacks.forEach((callback) =>
57
- expect(callback).to.have.been.calledOnceWithExactly()
58
- );
59
- });
60
-
61
- it('init with callbacks with parameters (async)', async () => {
62
- const callbacks = [
63
- {
64
- function: fake(),
65
- parameters: [faker.lorem.word(), faker.lorem.word(), faker.lorem.word()]
66
- }
67
- ];
68
- const server = new Server({
69
- endpoints: [],
70
- initCallbacks: callbacks,
71
- syncCallbacks: false
72
- });
73
-
74
- await server.init();
75
- await server.shutdown();
76
-
77
- callbacks.forEach((callback) =>
78
- expect(callback.function).to.have.been.calledOnceWithExactly(
79
- ...callback.parameters
80
- )
81
- );
82
- });
83
-
84
- it('init with callbacks (sync)', async () => {
85
- const callbacks = [fake(), fake(), fake()];
86
- const server = new Server({
87
- endpoints: [],
88
- initCallbacks: callbacks,
89
- syncCallbacks: true
90
- });
91
-
92
- await server.init();
93
- await server.shutdown();
94
-
95
- callbacks.forEach((callback) =>
96
- expect(callback).to.have.been.calledOnceWithExactly()
97
- );
98
- });
99
-
100
- it('init with callbacks with parameters (sync)', async () => {
101
- const callbacks = [
102
- {
103
- function: fake(),
104
- parameters: [faker.lorem.word(), faker.lorem.word(), faker.lorem.word()]
105
- }
106
- ];
107
- const server = new Server({
108
- endpoints: [],
109
- initCallbacks: callbacks,
110
- syncCallbacks: true
111
- });
112
-
113
- await server.init();
114
- await server.shutdown();
115
-
116
- callbacks.forEach((callback) =>
117
- expect(callback.function).to.have.been.calledOnceWithExactly(
118
- ...callback.parameters
119
- )
120
- );
121
- });
122
-
123
- it('should handle Endpoints', async () => {
124
- const sayHello = new Endpoint({
125
- method: EndpointMethod.GET,
126
- authType: EndpointAuthType.NONE,
127
- path: '/hello/:name',
128
- handler: (req, res): void => {
129
- res.json({ content: 'hello ' + req.params.name });
130
- },
131
- validator: {
132
- name: {
133
- in: 'params',
134
- isString: true
135
- }
136
- }
137
- });
138
-
139
- const sayGoodbye = new Endpoint({
140
- method: EndpointMethod.POST,
141
- authType: EndpointAuthType.NONE,
142
- path: '/hello',
143
- handler: (req, res): void => {
144
- res.json({
145
- content: `goodbye ${
146
- (
147
- req.body as {
148
- /** */ name: string;
149
- }
150
- ).name
151
- }`
152
- });
153
- },
154
- validator: {
155
- name: {
156
- in: 'body',
157
- isString: true
158
- }
159
- }
160
- });
161
-
162
- const server = new Server({ endpoints: [sayHello, sayGoodbye] });
163
-
164
- await server.init();
165
-
166
- await supertest(server.getApp())
167
- .get('/hello/example')
168
- .expect(200, { content: 'hello example' });
169
-
170
- await supertest(server.getApp())
171
- .post('/hello')
172
- .send({ name: 'example' })
173
- .expect(200, { content: 'goodbye example' });
174
-
175
- await server.shutdown();
176
- });
177
-
178
- it('should handle the cronjob', async () => {
179
- const handler = fake();
180
- const interval = 0.01; // 10ms
181
-
182
- const server = new Server({
183
- endpoints: [],
184
- cron: [{ handler, interval }]
185
- });
186
-
187
- await server.init();
188
- await Promise.resolve();
189
- expect(handler).to.have.been.calledOnce;
190
-
191
- await setTimeout(5);
192
- await Promise.resolve();
193
- expect(handler).to.have.been.calledOnce;
194
-
195
- await setTimeout(5);
196
- await Promise.resolve();
197
- expect(handler).to.have.been.calledTwice;
198
-
199
- await server.shutdown();
200
-
201
- await setTimeout(20);
202
- await Promise.resolve();
203
- expect(handler).to.have.been.calledTwice;
204
- });
205
-
206
- it('should init the KeySets', async () => {
207
- process.env.NODE_ENV = 'development';
208
- const server = new Server({ endpoints: [] });
209
-
210
- await server.init();
211
-
212
- expect(initKeySetsStub).to.have.been.called;
213
-
214
- await server.shutdown();
215
- });
216
-
217
- it('should not init KeySet in test env', async () => {
218
- const server = new Server({ endpoints: [] });
219
-
220
- await server.init();
221
-
222
- expect(initKeySetsStub).to.not.have.been.called;
223
-
224
- await server.shutdown();
225
- });
226
-
227
- it('should not init the KeySets when specified', async () => {
228
- process.env.NODE_ENV = 'development';
229
- const server = new Server({ endpoints: [], auth: { noFetch: true } });
230
-
231
- await server.init();
232
-
233
- expect(initKeySetsStub).to.not.have.been.called;
234
-
235
- await server.shutdown();
236
- });
237
-
238
- it('should serve metrics on the secondary IP', async () => {
239
- const server = new Server({ endpoints: [] });
240
-
241
- await server.init();
242
-
243
- await supertest(server.getSecondaryApp())
244
- .get('/metrics/instance')
245
- .expect(200);
246
- await supertest(server.getSecondaryApp())
247
- .get('/metrics/service')
248
- .expect(200);
249
-
250
- await server.shutdown();
251
- });
252
-
253
- it('should serve versions on the secondary IP', async () => {
254
- const server = new Server({ endpoints: [] });
255
-
256
- await server.init();
257
-
258
- await supertest(server.getSecondaryApp()).get('/version').expect(200);
259
-
260
- await server.shutdown();
261
- });
262
-
263
- it('should return 404 on the secondary IP', async () => {
264
- const server = new Server({ endpoints: [] });
265
-
266
- await server.init();
267
-
268
- await supertest(server.getSecondaryApp()).get('/random').expect(404);
269
-
270
- await server.shutdown();
271
- });
272
- });
1
+ import { randomUUID } from 'crypto';
2
+ // eslint-disable-next-line import/no-unresolved
3
+ import { setTimeout } from 'timers/promises';
4
+ import { generateAccessToken } from 'backend-test-tools';
5
+ import Ajv, { JSONSchemaType } from 'ajv';
6
+ import { expect } from 'chai';
7
+ import { faker } from '@faker-js/faker';
8
+ import { Sequelize } from 'sequelize';
9
+ import { fake, SinonStub, stub } from 'sinon';
10
+ import supertest from 'supertest';
11
+ import WS from 'ws';
12
+ import { Server } from './Server';
13
+ import { Endpoint, EndpointMethod, EndpointAuthType } from 'entities/Endpoint';
14
+ import { SocketClient, SocketMessage } from 'entities/SocketClient';
15
+ import { stubPubSub } from 'test';
16
+ import { httpsAgent, loadTlsConfig } from 'utils';
17
+ import * as jwt from 'utils/jwt/jwt';
18
+
19
+ describe('Entity - Server', function () {
20
+ let token: string;
21
+ let initKeySetsStub: SinonStub;
22
+
23
+ before(() => {
24
+ if (!httpsAgent) loadTlsConfig();
25
+
26
+ const id = randomUUID();
27
+ token = generateAccessToken(id);
28
+ });
29
+
30
+ beforeEach(() => {
31
+ initKeySetsStub = stub(jwt, 'initKeySets').resolves();
32
+ stub(Sequelize.prototype, 'close');
33
+ stubPubSub();
34
+ });
35
+
36
+ afterEach(() => {
37
+ });
38
+
39
+ it('init and shutdown', async () => {
40
+ const server = new Server({ endpoints: [] });
41
+ await server.init();
42
+ await server.shutdown();
43
+ });
44
+
45
+ it('init with callbacks (async)', async () => {
46
+ const callbacks = [fake(), fake(), fake()];
47
+ const server = new Server({
48
+ endpoints: [],
49
+ initCallbacks: callbacks,
50
+ syncCallbacks: false
51
+ });
52
+
53
+ await server.init();
54
+ await server.shutdown();
55
+
56
+ callbacks.forEach((callback) =>
57
+ expect(callback).to.have.been.calledOnceWithExactly()
58
+ );
59
+ });
60
+
61
+ it('init with callbacks with parameters (async)', async () => {
62
+ const callbacks = [
63
+ {
64
+ function: fake(),
65
+ parameters: [faker.lorem.word(), faker.lorem.word(), faker.lorem.word()]
66
+ }
67
+ ];
68
+ const server = new Server({
69
+ endpoints: [],
70
+ initCallbacks: callbacks,
71
+ syncCallbacks: false
72
+ });
73
+
74
+ await server.init();
75
+ await server.shutdown();
76
+
77
+ callbacks.forEach((callback) =>
78
+ expect(callback.function).to.have.been.calledOnceWithExactly(
79
+ ...callback.parameters
80
+ )
81
+ );
82
+ });
83
+
84
+ it('init with callbacks (sync)', async () => {
85
+ const callbacks = [fake(), fake(), fake()];
86
+ const server = new Server({
87
+ endpoints: [],
88
+ initCallbacks: callbacks,
89
+ syncCallbacks: true
90
+ });
91
+
92
+ await server.init();
93
+ await server.shutdown();
94
+
95
+ callbacks.forEach((callback) =>
96
+ expect(callback).to.have.been.calledOnceWithExactly()
97
+ );
98
+ });
99
+
100
+ it('init with callbacks with parameters (sync)', async () => {
101
+ const callbacks = [
102
+ {
103
+ function: fake(),
104
+ parameters: [faker.lorem.word(), faker.lorem.word(), faker.lorem.word()]
105
+ }
106
+ ];
107
+ const server = new Server({
108
+ endpoints: [],
109
+ initCallbacks: callbacks,
110
+ syncCallbacks: true
111
+ });
112
+
113
+ await server.init();
114
+ await server.shutdown();
115
+
116
+ callbacks.forEach((callback) =>
117
+ expect(callback.function).to.have.been.calledOnceWithExactly(
118
+ ...callback.parameters
119
+ )
120
+ );
121
+ });
122
+
123
+ it('should handle Endpoints', async () => {
124
+ const sayHello = new Endpoint({
125
+ method: EndpointMethod.GET,
126
+ authType: EndpointAuthType.NONE,
127
+ path: '/hello/:name',
128
+ handler: (req, res): void => {
129
+ res.json({ content: 'hello ' + req.params.name });
130
+ },
131
+ validator: {
132
+ name: {
133
+ in: 'params',
134
+ isString: true
135
+ }
136
+ }
137
+ });
138
+
139
+ const sayGoodbye = new Endpoint({
140
+ method: EndpointMethod.POST,
141
+ authType: EndpointAuthType.NONE,
142
+ path: '/hello',
143
+ handler: (req, res): void => {
144
+ res.json({
145
+ content: `goodbye ${
146
+ (
147
+ req.body as {
148
+ /** */ name: string;
149
+ }
150
+ ).name
151
+ }`
152
+ });
153
+ },
154
+ validator: {
155
+ name: {
156
+ in: 'body',
157
+ isString: true
158
+ }
159
+ }
160
+ });
161
+
162
+ const server = new Server({ endpoints: [sayHello, sayGoodbye] });
163
+
164
+ await server.init();
165
+
166
+ await supertest(server.getApp())
167
+ .get('/hello/example')
168
+ .expect(200, { content: 'hello example' });
169
+
170
+ await supertest(server.getApp())
171
+ .post('/hello')
172
+ .send({ name: 'example' })
173
+ .expect(200, { content: 'goodbye example' });
174
+
175
+ await server.shutdown();
176
+ });
177
+
178
+ it('should handle the cronjob', async () => {
179
+ const handler = fake();
180
+ const interval = 0.01; // 10ms
181
+
182
+ const server = new Server({
183
+ endpoints: [],
184
+ cron: [{ handler, interval }]
185
+ });
186
+
187
+ await server.init();
188
+ await Promise.resolve();
189
+ expect(handler).to.have.been.calledOnce;
190
+
191
+ await setTimeout(5);
192
+ await Promise.resolve();
193
+ expect(handler).to.have.been.calledOnce;
194
+
195
+ await setTimeout(5);
196
+ await Promise.resolve();
197
+ expect(handler).to.have.been.calledTwice;
198
+
199
+ await server.shutdown();
200
+
201
+ await setTimeout(20);
202
+ await Promise.resolve();
203
+ expect(handler).to.have.been.calledTwice;
204
+ });
205
+
206
+ it('should init the KeySets', async () => {
207
+ process.env.NODE_ENV = 'development';
208
+ const server = new Server({ endpoints: [] });
209
+
210
+ await server.init();
211
+
212
+ expect(initKeySetsStub).to.have.been.called;
213
+
214
+ await server.shutdown();
215
+ });
216
+
217
+ it('should not init KeySet in test env', async () => {
218
+ const server = new Server({ endpoints: [] });
219
+
220
+ await server.init();
221
+
222
+ expect(initKeySetsStub).to.not.have.been.called;
223
+
224
+ await server.shutdown();
225
+ });
226
+
227
+ it('should not init the KeySets when specified', async () => {
228
+ process.env.NODE_ENV = 'development';
229
+ const server = new Server({ endpoints: [], auth: { noFetch: true } });
230
+
231
+ await server.init();
232
+
233
+ expect(initKeySetsStub).to.not.have.been.called;
234
+
235
+ await server.shutdown();
236
+ });
237
+
238
+ it('should serve metrics on the secondary IP', async () => {
239
+ const server = new Server({ endpoints: [] });
240
+
241
+ await server.init();
242
+
243
+ await supertest(server.getSecondaryApp())
244
+ .get('/metrics/instance')
245
+ .expect(200);
246
+ await supertest(server.getSecondaryApp())
247
+ .get('/metrics/service')
248
+ .expect(200);
249
+
250
+ await server.shutdown();
251
+ });
252
+
253
+ it('should serve versions on the secondary IP', async () => {
254
+ const server = new Server({ endpoints: [] });
255
+
256
+ await server.init();
257
+
258
+ await supertest(server.getSecondaryApp()).get('/version').expect(200);
259
+
260
+ await server.shutdown();
261
+ });
262
+
263
+ it('should return 404 on the secondary IP', async () => {
264
+ const server = new Server({ endpoints: [] });
265
+
266
+ await server.init();
267
+
268
+ await supertest(server.getSecondaryApp()).get('/random').expect(404);
269
+
270
+ await server.shutdown();
271
+ });
272
+ });