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,337 +1,337 @@
1
- import { randomUUID } from 'crypto';
2
- import { generateAccessToken } from 'backend-test-tools';
3
- import { expect } from 'chai';
4
- import express, { Request, Response, NextFunction } from 'express';
5
- import { faker } from '@faker-js/faker';
6
- import { fake } from 'sinon';
7
- import request from 'supertest';
8
- import { Endpoint } from './Endpoint';
9
- import {
10
- EndpointMethod,
11
- EndpointAuthType,
12
- EndpointOptions
13
- } from './Endpoint.types';
14
- import { Server } from 'entities/Server';
15
- import { request as httpRequest } from 'utils/request';
16
- import { tlsRequest } from 'utils/tlsRequest';
17
-
18
- const PATH = '/test';
19
- let app = express();
20
-
21
- const config: EndpointOptions<EndpointAuthType.NONE> = {
22
- method: EndpointMethod.GET,
23
- path: PATH,
24
- handler: (req: Request, res: Response) => {
25
- res.sendStatus(200);
26
- },
27
- validator: {},
28
- authType: EndpointAuthType.NONE
29
- };
30
-
31
- describe('Entity - Endpoint', () => {
32
- beforeEach(() => {
33
- app = express();
34
- });
35
-
36
- // Base
37
-
38
- it('should create a valid Endpoint', async () => {
39
- const endpoint = new Endpoint(config);
40
- endpoint.register(app);
41
- await request(app).get(PATH).expect(200);
42
- });
43
-
44
- // Async
45
-
46
- it('should handle asynchronous errors', async () => {
47
- const endpoint = new Endpoint({
48
- ...config,
49
- handler: async (): Promise<void> => {
50
- return new Promise((resolve, reject) => {
51
- reject(new Error());
52
- });
53
- }
54
- });
55
- endpoint.register(app);
56
- await request(app).get(PATH).expect(500);
57
- });
58
-
59
- // Middleware
60
-
61
- it('should handle specific middleware', async () => {
62
- const middleware = fake(
63
- (req: Request, res: Response, next: NextFunction) => {
64
- next();
65
- }
66
- );
67
- const endpoint = new Endpoint({
68
- ...config,
69
- middleware: [middleware]
70
- });
71
- endpoint.register(app);
72
- await request(app).get(PATH).expect(200);
73
- expect(middleware).to.have.been.called;
74
- });
75
-
76
- it('should handle specific error middleware', async () => {
77
- const middleware = fake(
78
- (err: Error, req: Request, res: Response, next: NextFunction) => {
79
- res.sendStatus(200);
80
- }
81
- );
82
- const endpoint = new Endpoint({
83
- ...config,
84
- handler: (): void => {
85
- throw new Error();
86
- },
87
- errorMiddleware: [middleware]
88
- });
89
- endpoint.register(app);
90
- await request(app).get(PATH).expect(200);
91
- expect(middleware).to.have.been.called;
92
- });
93
-
94
- // Validator
95
-
96
- it('should accept request with a valid shape', async () => {
97
- const endpoint = new Endpoint({
98
- ...config,
99
- validator: { number: { in: 'query', isInt: true } }
100
- });
101
- endpoint.register(app);
102
- await request(app)
103
- .get(PATH)
104
- .query({ number: faker.number.int() })
105
- .expect(200);
106
- });
107
-
108
- it('should reject request with an invalid shape', async () => {
109
- const endpoint = new Endpoint({
110
- ...config,
111
- validator: { number: { in: 'query', isInt: true } }
112
- });
113
- endpoint.register(app);
114
- await request(app)
115
- .get(PATH)
116
- .query({ number: faker.lorem.word() })
117
- .expect(400);
118
- });
119
-
120
- // Middleware
121
- it('should inject middlewares', async () => {
122
- const middleware = fake(
123
- (req: Request, res: Response, next: NextFunction) => {
124
- next();
125
- }
126
- );
127
- const endpoint = new Endpoint({
128
- ...config,
129
- middleware
130
- });
131
- endpoint.register(app);
132
- await request(app).get(PATH).expect(200);
133
- expect(middleware.called).to.be.true;
134
- });
135
-
136
- it('should inject multiple middlewares', async () => {
137
- const middleware = [
138
- fake((req: Request, res: Response, next: NextFunction) => {
139
- next();
140
- }),
141
- fake((req: Request, res: Response, next: NextFunction) => {
142
- next();
143
- })
144
- ];
145
- const endpoint = new Endpoint({
146
- ...config,
147
- middleware
148
- });
149
- endpoint.register(app);
150
- await request(app).get(PATH).expect(200);
151
- expect(middleware[0].called).to.be.true;
152
- expect(middleware[1].called).to.be.true;
153
- });
154
-
155
- // AUTH JWT
156
-
157
- it('it should authenticate with authJwt middleware', async () => {
158
- const id = randomUUID();
159
- const token = generateAccessToken(id);
160
- const endpoint = new Endpoint({
161
- ...config,
162
- authType: EndpointAuthType.JWT,
163
- handler: (req: Request, res: Response) => {
164
- res.sendStatus(200);
165
- }
166
- } as EndpointOptions<EndpointAuthType.JWT>);
167
- const server = new Server({ endpoints: [endpoint] });
168
-
169
- await server.init();
170
-
171
- await request(server.getApp())
172
- .get(PATH)
173
- .set('Authorization', 'Bearer ' + token)
174
- .expect(200);
175
-
176
- await server.shutdown();
177
- });
178
-
179
- // AUTH ADMIN
180
-
181
- it('it should authenticate with authAdmin middleware', async () => {
182
- const email = faker.internet.email();
183
- const permission = faker.lorem.word();
184
- const token = generateAccessToken(
185
- email,
186
- {
187
- audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
188
- issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER as string
189
- },
190
- { per: permission }
191
- );
192
- const endpoint = new Endpoint({
193
- ...config,
194
- authType: EndpointAuthType.ADMIN,
195
- authParams: { permission },
196
- handler: (req: Request, res: Response) => {
197
- res.sendStatus(200);
198
- }
199
- } as EndpointOptions<EndpointAuthType.ADMIN>);
200
-
201
- endpoint.register(app);
202
- await request(app)
203
- .get(PATH)
204
- .set('Authorization', 'Bearer ' + token)
205
- .expect(200);
206
- });
207
-
208
- it('it should authenticate with authAdmin middleware and check permission', async () => {
209
- const email = faker.internet.email();
210
- const permission = faker.lorem.word();
211
- const token = generateAccessToken(
212
- email,
213
- {
214
- audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
215
- issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER as string
216
- },
217
- { per: permission }
218
- );
219
-
220
- const endpoint = new Endpoint({
221
- ...config,
222
- authType: EndpointAuthType.ADMIN,
223
- authParams: { permission },
224
- handler: (req: Request, res: Response) => {
225
- res.sendStatus(200);
226
- }
227
- } as EndpointOptions<EndpointAuthType.ADMIN>);
228
-
229
- endpoint.register(app);
230
- await request(app)
231
- .get(PATH)
232
- .set('Authorization', 'Bearer ' + token)
233
- .expect(200);
234
- });
235
-
236
- it('it should authenticate with authAdmin middleware and check permissions', async () => {
237
- const email = faker.internet.email();
238
- const permissions = [
239
- faker.lorem.word(),
240
- faker.lorem.word(),
241
- faker.lorem.word()
242
- ];
243
- const token = generateAccessToken(
244
- email,
245
- {
246
- audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
247
- issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER as string
248
- },
249
- { per: permissions }
250
- );
251
-
252
- const endpoint = new Endpoint({
253
- ...config,
254
- authType: EndpointAuthType.ADMIN,
255
- authParams: { permission: permissions[1] },
256
- handler: (req: Request, res: Response) => {
257
- res.sendStatus(200);
258
- }
259
- } as EndpointOptions<EndpointAuthType.ADMIN>);
260
-
261
- endpoint.register(app);
262
- await request(app)
263
- .get(PATH)
264
- .set('Authorization', 'Bearer ' + token)
265
- .expect(200);
266
- });
267
-
268
- it('it should reject if the user has no valid JWT', async () => {
269
- const endpoint = new Endpoint({
270
- ...config,
271
- authType: EndpointAuthType.JWT,
272
- handler: (req: Request, res: Response) => {
273
- res.sendStatus(200);
274
- }
275
- } as EndpointOptions<EndpointAuthType.JWT>);
276
- endpoint.register(app);
277
- await request(app).get(PATH).expect(401);
278
- });
279
-
280
- it('it should not trigger JWT error if acceptInvalid is set', async () => {
281
- const endpoint = new Endpoint({
282
- ...config,
283
- authType: EndpointAuthType.JWT,
284
- authParams: { acceptInvalid: true },
285
- handler: (req: Request, res: Response) => {
286
- res.sendStatus(200);
287
- }
288
- } as EndpointOptions<EndpointAuthType.JWT>);
289
- endpoint.register(app);
290
- await request(app).get(PATH).expect(200);
291
- });
292
-
293
- // TLS
294
- it('it should authenticate with authTLS middleware', async () => {
295
- const endpoint = new Endpoint({
296
- ...config,
297
- authType: EndpointAuthType.TLS,
298
- handler: (req: Request, res: Response) => {
299
- res.sendStatus(200);
300
- }
301
- } as EndpointOptions<EndpointAuthType.TLS>);
302
- const server = new Server({ endpoints: [endpoint] });
303
-
304
- await server.init();
305
-
306
- await expect(
307
- tlsRequest({
308
- method: 'get',
309
- url: `https://127.0.0.1:${process.env.PORT as string}${PATH}`
310
- })
311
- ).to.not.be.rejected;
312
-
313
- await server.shutdown();
314
- });
315
-
316
- it('it should reject if the user has no valid TLS credentials', async () => {
317
- const endpoint = new Endpoint({
318
- ...config,
319
- authType: EndpointAuthType.TLS,
320
- handler: (req: Request, res: Response) => {
321
- res.sendStatus(200);
322
- }
323
- } as EndpointOptions<EndpointAuthType.TLS>);
324
- const server = new Server({ endpoints: [endpoint] });
325
-
326
- await server.init();
327
-
328
- await expect(
329
- httpRequest({
330
- method: 'get',
331
- url: `https://127.0.0.1:${process.env.PORT as string}${PATH}`
332
- })
333
- ).to.be.rejected;
334
-
335
- await server.shutdown();
336
- });
337
- });
1
+ import { randomUUID } from 'crypto';
2
+ import { generateAccessToken } from 'backend-test-tools';
3
+ import { expect } from 'chai';
4
+ import express, { Request, Response, NextFunction } from 'express';
5
+ import { faker } from '@faker-js/faker';
6
+ import { fake } from 'sinon';
7
+ import request from 'supertest';
8
+ import { Endpoint } from './Endpoint';
9
+ import {
10
+ EndpointMethod,
11
+ EndpointAuthType,
12
+ EndpointOptions
13
+ } from './Endpoint.types';
14
+ import { Server } from 'entities/Server';
15
+ import { request as httpRequest } from 'utils/request';
16
+ import { tlsRequest } from 'utils/tlsRequest';
17
+
18
+ const PATH = '/test';
19
+ let app = express();
20
+
21
+ const config: EndpointOptions<EndpointAuthType.NONE> = {
22
+ method: EndpointMethod.GET,
23
+ path: PATH,
24
+ handler: (req: Request, res: Response) => {
25
+ res.sendStatus(200);
26
+ },
27
+ validator: {},
28
+ authType: EndpointAuthType.NONE
29
+ };
30
+
31
+ describe('Entity - Endpoint', () => {
32
+ beforeEach(() => {
33
+ app = express();
34
+ });
35
+
36
+ // Base
37
+
38
+ it('should create a valid Endpoint', async () => {
39
+ const endpoint = new Endpoint(config);
40
+ endpoint.register(app);
41
+ await request(app).get(PATH).expect(200);
42
+ });
43
+
44
+ // Async
45
+
46
+ it('should handle asynchronous errors', async () => {
47
+ const endpoint = new Endpoint({
48
+ ...config,
49
+ handler: async (): Promise<void> => {
50
+ return new Promise((resolve, reject) => {
51
+ reject(new Error());
52
+ });
53
+ }
54
+ });
55
+ endpoint.register(app);
56
+ await request(app).get(PATH).expect(500);
57
+ });
58
+
59
+ // Middleware
60
+
61
+ it('should handle specific middleware', async () => {
62
+ const middleware = fake(
63
+ (req: Request, res: Response, next: NextFunction) => {
64
+ next();
65
+ }
66
+ );
67
+ const endpoint = new Endpoint({
68
+ ...config,
69
+ middleware: [middleware]
70
+ });
71
+ endpoint.register(app);
72
+ await request(app).get(PATH).expect(200);
73
+ expect(middleware).to.have.been.called;
74
+ });
75
+
76
+ it('should handle specific error middleware', async () => {
77
+ const middleware = fake(
78
+ (err: Error, req: Request, res: Response, next: NextFunction) => {
79
+ res.sendStatus(200);
80
+ }
81
+ );
82
+ const endpoint = new Endpoint({
83
+ ...config,
84
+ handler: (): void => {
85
+ throw new Error();
86
+ },
87
+ errorMiddleware: [middleware]
88
+ });
89
+ endpoint.register(app);
90
+ await request(app).get(PATH).expect(200);
91
+ expect(middleware).to.have.been.called;
92
+ });
93
+
94
+ // Validator
95
+
96
+ it('should accept request with a valid shape', async () => {
97
+ const endpoint = new Endpoint({
98
+ ...config,
99
+ validator: { number: { in: 'query', isInt: true } }
100
+ });
101
+ endpoint.register(app);
102
+ await request(app)
103
+ .get(PATH)
104
+ .query({ number: faker.number.int() })
105
+ .expect(200);
106
+ });
107
+
108
+ it('should reject request with an invalid shape', async () => {
109
+ const endpoint = new Endpoint({
110
+ ...config,
111
+ validator: { number: { in: 'query', isInt: true } }
112
+ });
113
+ endpoint.register(app);
114
+ await request(app)
115
+ .get(PATH)
116
+ .query({ number: faker.lorem.word() })
117
+ .expect(400);
118
+ });
119
+
120
+ // Middleware
121
+ it('should inject middlewares', async () => {
122
+ const middleware = fake(
123
+ (req: Request, res: Response, next: NextFunction) => {
124
+ next();
125
+ }
126
+ );
127
+ const endpoint = new Endpoint({
128
+ ...config,
129
+ middleware
130
+ });
131
+ endpoint.register(app);
132
+ await request(app).get(PATH).expect(200);
133
+ expect(middleware.called).to.be.true;
134
+ });
135
+
136
+ it('should inject multiple middlewares', async () => {
137
+ const middleware = [
138
+ fake((req: Request, res: Response, next: NextFunction) => {
139
+ next();
140
+ }),
141
+ fake((req: Request, res: Response, next: NextFunction) => {
142
+ next();
143
+ })
144
+ ];
145
+ const endpoint = new Endpoint({
146
+ ...config,
147
+ middleware
148
+ });
149
+ endpoint.register(app);
150
+ await request(app).get(PATH).expect(200);
151
+ expect(middleware[0].called).to.be.true;
152
+ expect(middleware[1].called).to.be.true;
153
+ });
154
+
155
+ // AUTH JWT
156
+
157
+ it('it should authenticate with authJwt middleware', async () => {
158
+ const id = randomUUID();
159
+ const token = generateAccessToken(id);
160
+ const endpoint = new Endpoint({
161
+ ...config,
162
+ authType: EndpointAuthType.JWT,
163
+ handler: (req: Request, res: Response) => {
164
+ res.sendStatus(200);
165
+ }
166
+ } as EndpointOptions<EndpointAuthType.JWT>);
167
+ const server = new Server({ endpoints: [endpoint] });
168
+
169
+ await server.init();
170
+
171
+ await request(server.getApp())
172
+ .get(PATH)
173
+ .set('Authorization', 'Bearer ' + token)
174
+ .expect(200);
175
+
176
+ await server.shutdown();
177
+ });
178
+
179
+ // AUTH ADMIN
180
+
181
+ it('it should authenticate with authAdmin middleware', async () => {
182
+ const email = faker.internet.email();
183
+ const permission = faker.lorem.word();
184
+ const token = generateAccessToken(
185
+ email,
186
+ {
187
+ audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
188
+ issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER as string
189
+ },
190
+ { per: permission }
191
+ );
192
+ const endpoint = new Endpoint({
193
+ ...config,
194
+ authType: EndpointAuthType.ADMIN,
195
+ authParams: { permission },
196
+ handler: (req: Request, res: Response) => {
197
+ res.sendStatus(200);
198
+ }
199
+ } as EndpointOptions<EndpointAuthType.ADMIN>);
200
+
201
+ endpoint.register(app);
202
+ await request(app)
203
+ .get(PATH)
204
+ .set('Authorization', 'Bearer ' + token)
205
+ .expect(200);
206
+ });
207
+
208
+ it('it should authenticate with authAdmin middleware and check permission', async () => {
209
+ const email = faker.internet.email();
210
+ const permission = faker.lorem.word();
211
+ const token = generateAccessToken(
212
+ email,
213
+ {
214
+ audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
215
+ issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER as string
216
+ },
217
+ { per: permission }
218
+ );
219
+
220
+ const endpoint = new Endpoint({
221
+ ...config,
222
+ authType: EndpointAuthType.ADMIN,
223
+ authParams: { permission },
224
+ handler: (req: Request, res: Response) => {
225
+ res.sendStatus(200);
226
+ }
227
+ } as EndpointOptions<EndpointAuthType.ADMIN>);
228
+
229
+ endpoint.register(app);
230
+ await request(app)
231
+ .get(PATH)
232
+ .set('Authorization', 'Bearer ' + token)
233
+ .expect(200);
234
+ });
235
+
236
+ it('it should authenticate with authAdmin middleware and check permissions', async () => {
237
+ const email = faker.internet.email();
238
+ const permissions = [
239
+ faker.lorem.word(),
240
+ faker.lorem.word(),
241
+ faker.lorem.word()
242
+ ];
243
+ const token = generateAccessToken(
244
+ email,
245
+ {
246
+ audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
247
+ issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER as string
248
+ },
249
+ { per: permissions }
250
+ );
251
+
252
+ const endpoint = new Endpoint({
253
+ ...config,
254
+ authType: EndpointAuthType.ADMIN,
255
+ authParams: { permission: permissions[1] },
256
+ handler: (req: Request, res: Response) => {
257
+ res.sendStatus(200);
258
+ }
259
+ } as EndpointOptions<EndpointAuthType.ADMIN>);
260
+
261
+ endpoint.register(app);
262
+ await request(app)
263
+ .get(PATH)
264
+ .set('Authorization', 'Bearer ' + token)
265
+ .expect(200);
266
+ });
267
+
268
+ it('it should reject if the user has no valid JWT', async () => {
269
+ const endpoint = new Endpoint({
270
+ ...config,
271
+ authType: EndpointAuthType.JWT,
272
+ handler: (req: Request, res: Response) => {
273
+ res.sendStatus(200);
274
+ }
275
+ } as EndpointOptions<EndpointAuthType.JWT>);
276
+ endpoint.register(app);
277
+ await request(app).get(PATH).expect(401);
278
+ });
279
+
280
+ it('it should not trigger JWT error if acceptInvalid is set', async () => {
281
+ const endpoint = new Endpoint({
282
+ ...config,
283
+ authType: EndpointAuthType.JWT,
284
+ authParams: { acceptInvalid: true },
285
+ handler: (req: Request, res: Response) => {
286
+ res.sendStatus(200);
287
+ }
288
+ } as EndpointOptions<EndpointAuthType.JWT>);
289
+ endpoint.register(app);
290
+ await request(app).get(PATH).expect(200);
291
+ });
292
+
293
+ // TLS
294
+ it('it should authenticate with authTLS middleware', async () => {
295
+ const endpoint = new Endpoint({
296
+ ...config,
297
+ authType: EndpointAuthType.TLS,
298
+ handler: (req: Request, res: Response) => {
299
+ res.sendStatus(200);
300
+ }
301
+ } as EndpointOptions<EndpointAuthType.TLS>);
302
+ const server = new Server({ endpoints: [endpoint] });
303
+
304
+ await server.init();
305
+
306
+ await expect(
307
+ tlsRequest({
308
+ method: 'get',
309
+ url: `https://127.0.0.1:${process.env.PORT as string}${PATH}`
310
+ })
311
+ ).to.not.be.rejected;
312
+
313
+ await server.shutdown();
314
+ });
315
+
316
+ it('it should reject if the user has no valid TLS credentials', async () => {
317
+ const endpoint = new Endpoint({
318
+ ...config,
319
+ authType: EndpointAuthType.TLS,
320
+ handler: (req: Request, res: Response) => {
321
+ res.sendStatus(200);
322
+ }
323
+ } as EndpointOptions<EndpointAuthType.TLS>);
324
+ const server = new Server({ endpoints: [endpoint] });
325
+
326
+ await server.init();
327
+
328
+ await expect(
329
+ httpRequest({
330
+ method: 'get',
331
+ url: `https://127.0.0.1:${process.env.PORT as string}${PATH}`
332
+ })
333
+ ).to.be.rejected;
334
+
335
+ await server.shutdown();
336
+ });
337
+ });