node-server-engine 1.1.2 → 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 (469) 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.js.map +1 -1
  115. package/dist/middleware/error/error.js.map +1 -1
  116. package/dist/middleware/error/index.js.map +1 -1
  117. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
  118. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
  119. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
  120. package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
  121. package/dist/middleware/fileUploader/fileUploader.js +12 -12
  122. package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
  123. package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
  124. package/dist/middleware/fileUploader/index.js.map +1 -1
  125. package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
  126. package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
  127. package/dist/middleware/fileUploader/validate/index.js.map +1 -1
  128. package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
  129. package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
  130. package/dist/middleware/fourOhFour/index.js.map +1 -1
  131. package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
  132. package/dist/middleware/geminiFileUploader/index.js.map +1 -1
  133. package/dist/middleware/healthCheck/healthCheck.js +2 -2
  134. package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
  135. package/dist/middleware/healthCheck/index.js.map +1 -1
  136. package/dist/middleware/index.js.map +1 -1
  137. package/dist/middleware/metrics/index.js.map +1 -1
  138. package/dist/middleware/metrics/metrics.js.map +1 -1
  139. package/dist/middleware/requestMetrics/index.js.map +1 -1
  140. package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
  141. package/dist/middleware/swaggerDocs/index.js.map +1 -1
  142. package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
  143. package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
  144. package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
  145. package/dist/middleware/userResolver/index.js.map +1 -1
  146. package/dist/middleware/userResolver/userResolver.js.map +1 -1
  147. package/dist/middleware/validate/index.js.map +1 -1
  148. package/dist/middleware/validate/validate.js.map +1 -1
  149. package/dist/middleware/version/index.js.map +1 -1
  150. package/dist/middleware/version/version.js +3 -3
  151. package/dist/middleware/version/version.js.map +1 -1
  152. package/dist/utils/checkEnvironment/index.js +13 -13
  153. package/dist/utils/checkEnvironment/index.js.map +1 -1
  154. package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
  155. package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
  156. package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
  157. package/dist/utils/createHttpServer/index.js.map +1 -1
  158. package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
  159. package/dist/utils/createSortedObject/index.js.map +1 -1
  160. package/dist/utils/dbMigration/dbMigration.js +8 -8
  161. package/dist/utils/dbMigration/dbMigration.js.map +1 -1
  162. package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
  163. package/dist/utils/dbMigration/index.js.map +1 -1
  164. package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
  165. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.d.ts +2 -2
  166. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +47 -15
  167. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
  168. package/dist/utils/envAssert/envAssert.js +6 -6
  169. package/dist/utils/envAssert/envAssert.js.map +1 -1
  170. package/dist/utils/envAssert/index.js.map +1 -1
  171. package/dist/utils/envAssert/validators/hostList.js +2 -2
  172. package/dist/utils/envAssert/validators/hostList.js.map +1 -1
  173. package/dist/utils/envAssert/validators/index.js.map +1 -1
  174. package/dist/utils/envAssert/validators/ipList.js +2 -2
  175. package/dist/utils/envAssert/validators/ipList.js.map +1 -1
  176. package/dist/utils/envAssert/validators/path.js +2 -2
  177. package/dist/utils/envAssert/validators/path.js.map +1 -1
  178. package/dist/utils/envAssert/validators/string.js +2 -2
  179. package/dist/utils/envAssert/validators/string.js.map +1 -1
  180. package/dist/utils/envAssert/validators/stringList.js +3 -3
  181. package/dist/utils/envAssert/validators/stringList.js.map +1 -1
  182. package/dist/utils/filter/filter.js +4 -4
  183. package/dist/utils/filter/filter.js.map +1 -1
  184. package/dist/utils/filter/index.js.map +1 -1
  185. package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
  186. package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
  187. package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
  188. package/dist/utils/getDynamicLink/index.js.map +1 -1
  189. package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
  190. package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
  191. package/dist/utils/hmac/checkEnv/index.js.map +1 -1
  192. package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
  193. package/dist/utils/hmac/createHmac/index.js.map +1 -1
  194. package/dist/utils/hmac/index.js.map +1 -1
  195. package/dist/utils/hmac/index.types.js.map +1 -1
  196. package/dist/utils/hmac/signPayload/index.js.map +1 -1
  197. package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
  198. package/dist/utils/hmac/verifySignature/index.js.map +1 -1
  199. package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
  200. package/dist/utils/index.js.map +1 -1
  201. package/dist/utils/jwt/index.js.map +1 -1
  202. package/dist/utils/jwt/jwt.js.map +1 -1
  203. package/dist/utils/jwt/jwt.types.js.map +1 -1
  204. package/dist/utils/report/index.js.map +1 -1
  205. package/dist/utils/report/output.js.map +1 -1
  206. package/dist/utils/report/output.types.js.map +1 -1
  207. package/dist/utils/report/report.js.map +1 -1
  208. package/dist/utils/report/report.types.js.map +1 -1
  209. package/dist/utils/request/index.js.map +1 -1
  210. package/dist/utils/request/request.js.map +1 -1
  211. package/dist/utils/semverCompare/index.js.map +1 -1
  212. package/dist/utils/semverCompare/semverCompare.js +5 -5
  213. package/dist/utils/semverCompare/semverCompare.js.map +1 -1
  214. package/dist/utils/sendEmail/index.js.map +1 -1
  215. package/dist/utils/sendEmail/sendEmail.js +8 -8
  216. package/dist/utils/sendEmail/sendEmail.js.map +1 -1
  217. package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
  218. package/dist/utils/sendPush/index.js.map +1 -1
  219. package/dist/utils/sendPush/sendPush.js +5 -5
  220. package/dist/utils/sendPush/sendPush.js.map +1 -1
  221. package/dist/utils/sendPush/sendPush.types.js.map +1 -1
  222. package/dist/utils/tlsConfig/index.js.map +1 -1
  223. package/dist/utils/tlsConfig/tlsConfig.js +2 -2
  224. package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
  225. package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
  226. package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
  227. package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
  228. package/dist/utils/tlsRequest/index.js.map +1 -1
  229. package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
  230. package/dist/utils/trimPathSlash/index.js.map +1 -1
  231. package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
  232. package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
  233. package/eslint.config.mjs +11 -11
  234. package/package.json +164 -161
  235. package/src/const/DebeziumEvent.ts +6 -6
  236. package/src/const/LogSeverity.ts +7 -7
  237. package/src/const/index.ts +5 -5
  238. package/src/const/metrics.ts +6 -6
  239. package/src/const/mime.ts +37 -37
  240. package/src/const/tokenIssuer.ts +9 -9
  241. package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
  242. package/src/db/models/SequelizeMeta.ts +16 -16
  243. package/src/db/models/index.ts +2 -2
  244. package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
  245. package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
  246. package/src/entities/ElasticSearch/index.ts +2 -2
  247. package/src/entities/Endpoint/Endpoint.test.ts +337 -337
  248. package/src/entities/Endpoint/Endpoint.ts +202 -202
  249. package/src/entities/Endpoint/Endpoint.types.ts +205 -205
  250. package/src/entities/Endpoint/index.ts +2 -2
  251. package/src/entities/EngineError/EngineError.ts +28 -28
  252. package/src/entities/EngineError/EngineError.types.ts +15 -15
  253. package/src/entities/EngineError/index.ts +2 -2
  254. package/src/entities/KeySet/KeySet.test.ts +126 -126
  255. package/src/entities/KeySet/KeySet.ts +172 -172
  256. package/src/entities/KeySet/KeySet.types.ts +28 -28
  257. package/src/entities/KeySet/index.ts +2 -2
  258. package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
  259. package/src/entities/LifecycleController/LifecycleController.ts +24 -24
  260. package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
  261. package/src/entities/LifecycleController/index.ts +2 -2
  262. package/src/entities/Localizator/Localizator.ts +139 -139
  263. package/src/entities/Localizator/Localizator.types.ts +52 -52
  264. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
  265. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
  266. package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
  267. package/src/entities/Localizator/index.ts +2 -2
  268. package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
  269. package/src/entities/MessageHandler/MessageHandler.ts +72 -72
  270. package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
  271. package/src/entities/MessageHandler/index.ts +2 -2
  272. package/src/entities/PubSub/PubSub.test.ts +297 -297
  273. package/src/entities/PubSub/PubSub.ts +202 -202
  274. package/src/entities/PubSub/PubSub.types.ts +76 -76
  275. package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
  276. package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
  277. package/src/entities/PubSub/handleMessage/index.ts +1 -1
  278. package/src/entities/PubSub/index.ts +2 -2
  279. package/src/entities/PushNotification/PushNotification.test.ts +35 -35
  280. package/src/entities/PushNotification/PushNotification.ts +44 -44
  281. package/src/entities/PushNotification/PushNotification.types.ts +25 -25
  282. package/src/entities/PushNotification/index.ts +2 -2
  283. package/src/entities/Redis/Redis.ts +71 -71
  284. package/src/entities/Redis/Redis.types.ts +19 -19
  285. package/src/entities/Redis/Redis.validate.ts +17 -17
  286. package/src/entities/Redis/index.ts +2 -2
  287. package/src/entities/Sequelize/Sequelize.config.ts +59 -29
  288. package/src/entities/Sequelize/Sequelize.test.ts +21 -21
  289. package/src/entities/Sequelize/Sequelize.ts +75 -75
  290. package/src/entities/Sequelize/Sequelize.types.ts +10 -10
  291. package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
  292. package/src/entities/Sequelize/index.ts +2 -2
  293. package/src/entities/Server/Server.const.ts +56 -56
  294. package/src/entities/Server/Server.test.ts +272 -272
  295. package/src/entities/Server/Server.ts +445 -445
  296. package/src/entities/Server/Server.types.ts +88 -88
  297. package/src/entities/Server/index.ts +2 -2
  298. package/src/entities/SocketClient/SocketClient.test.ts +392 -392
  299. package/src/entities/SocketClient/SocketClient.ts +401 -401
  300. package/src/entities/SocketClient/SocketClient.types.ts +62 -62
  301. package/src/entities/SocketClient/index.ts +2 -2
  302. package/src/entities/SocketClient/parseMessage/index.ts +1 -1
  303. package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
  304. package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
  305. package/src/entities/Storage/Storage.test.ts +58 -58
  306. package/src/entities/Storage/Storage.ts +219 -219
  307. package/src/entities/Storage/Storage.types.ts +57 -57
  308. package/src/entities/Storage/index.ts +2 -2
  309. package/src/entities/ValidationError/ValidationError.ts +34 -34
  310. package/src/entities/ValidationError/index.ts +1 -1
  311. package/src/entities/WebError/WebError.test.ts +18 -18
  312. package/src/entities/WebError/WebError.ts +23 -23
  313. package/src/entities/WebError/WebError.types.ts +9 -9
  314. package/src/entities/WebError/index.ts +2 -2
  315. package/src/entities/index.ts +16 -16
  316. package/src/index.ts +4 -4
  317. package/src/metrics/debug.ts +10 -10
  318. package/src/metrics/index.ts +2 -2
  319. package/src/metrics/request.ts +17 -17
  320. package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
  321. package/src/middleware/authAdmin/authAdmin.ts +114 -114
  322. package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
  323. package/src/middleware/authAdmin/index.ts +2 -2
  324. package/src/middleware/authHmac/authHmac.test.ts +86 -86
  325. package/src/middleware/authHmac/authHmac.ts +56 -56
  326. package/src/middleware/authHmac/authHmac.types.ts +7 -7
  327. package/src/middleware/authHmac/index.ts +2 -2
  328. package/src/middleware/authJwt/authJwt.test.ts +54 -54
  329. package/src/middleware/authJwt/authJwt.ts +55 -55
  330. package/src/middleware/authJwt/authJwt.types.ts +14 -14
  331. package/src/middleware/authJwt/index.ts +2 -2
  332. package/src/middleware/authStatic/authStatic.test.ts +36 -36
  333. package/src/middleware/authStatic/authStatic.ts +45 -45
  334. package/src/middleware/authStatic/index.ts +1 -1
  335. package/src/middleware/authTls/authTls.test.ts +138 -138
  336. package/src/middleware/authTls/authTls.ts +106 -106
  337. package/src/middleware/authTls/authTls.types.ts +13 -13
  338. package/src/middleware/authTls/index.ts +2 -2
  339. package/src/middleware/checkPermission/checkPermission.ts +32 -32
  340. package/src/middleware/error/error.test.ts +60 -60
  341. package/src/middleware/error/error.ts +25 -25
  342. package/src/middleware/error/index.ts +1 -1
  343. package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
  344. package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
  345. package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
  346. package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
  347. package/src/middleware/fileUploader/fileUploader.ts +303 -303
  348. package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
  349. package/src/middleware/fileUploader/index.ts +2 -2
  350. package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
  351. package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
  352. package/src/middleware/fileUploader/validate/index.ts +1 -1
  353. package/src/middleware/fileUploader/validate/validate.ts +27 -27
  354. package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
  355. package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
  356. package/src/middleware/fourOhFour/index.ts +1 -1
  357. package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
  358. package/src/middleware/geminiFileUploader/index.ts +1 -1
  359. package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
  360. package/src/middleware/healthCheck/healthCheck.ts +14 -14
  361. package/src/middleware/healthCheck/index.ts +1 -1
  362. package/src/middleware/index.ts +17 -17
  363. package/src/middleware/metrics/index.ts +1 -1
  364. package/src/middleware/metrics/metrics.test.ts +46 -46
  365. package/src/middleware/metrics/metrics.ts +24 -24
  366. package/src/middleware/requestMetrics/index.ts +1 -1
  367. package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
  368. package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
  369. package/src/middleware/swaggerDocs/index.ts +2 -2
  370. package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
  371. package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
  372. package/src/middleware/userResolver/index.ts +1 -1
  373. package/src/middleware/userResolver/userResolver.test.ts +35 -35
  374. package/src/middleware/userResolver/userResolver.ts +35 -35
  375. package/src/middleware/validate/index.ts +1 -1
  376. package/src/middleware/validate/validate.test.ts +43 -43
  377. package/src/middleware/validate/validate.ts +25 -25
  378. package/src/middleware/version/index.ts +1 -1
  379. package/src/middleware/version/version.test.ts +23 -23
  380. package/src/middleware/version/version.ts +12 -12
  381. package/src/utils/checkEnvironment/index.ts +49 -49
  382. package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
  383. package/src/utils/createHttpServer/createHttpServer.ts +34 -34
  384. package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
  385. package/src/utils/createHttpServer/index.ts +1 -1
  386. package/src/utils/createSortedObject/createSortedObject.ts +20 -20
  387. package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
  388. package/src/utils/createSortedObject/index.ts +1 -1
  389. package/src/utils/dbMigration/dbMigration.test.ts +209 -209
  390. package/src/utils/dbMigration/dbMigration.ts +199 -199
  391. package/src/utils/dbMigration/dbMigration.types.ts +11 -11
  392. package/src/utils/dbMigration/index.ts +2 -2
  393. package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
  394. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
  395. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -70
  396. package/src/utils/envAssert/envAssert.ts +31 -31
  397. package/src/utils/envAssert/index.ts +1 -1
  398. package/src/utils/envAssert/validators/hostList.ts +17 -17
  399. package/src/utils/envAssert/validators/index.ts +5 -5
  400. package/src/utils/envAssert/validators/ipList.ts +13 -13
  401. package/src/utils/envAssert/validators/path.ts +13 -13
  402. package/src/utils/envAssert/validators/string.ts +9 -9
  403. package/src/utils/envAssert/validators/stringList.ts +13 -13
  404. package/src/utils/filter/filter.ts +17 -17
  405. package/src/utils/filter/index.ts +1 -1
  406. package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
  407. package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
  408. package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
  409. package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
  410. package/src/utils/getDynamicLink/index.ts +2 -2
  411. package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
  412. package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
  413. package/src/utils/hmac/checkEnv/index.ts +1 -1
  414. package/src/utils/hmac/createHmac/createHmac.ts +33 -33
  415. package/src/utils/hmac/createHmac/index.ts +1 -1
  416. package/src/utils/hmac/index.ts +4 -4
  417. package/src/utils/hmac/index.types.ts +13 -13
  418. package/src/utils/hmac/signPayload/index.ts +1 -1
  419. package/src/utils/hmac/signPayload/signPayload.ts +16 -16
  420. package/src/utils/hmac/verifySignature/index.ts +1 -1
  421. package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
  422. package/src/utils/index.ts +26 -26
  423. package/src/utils/jwt/index.ts +2 -2
  424. package/src/utils/jwt/jwt.test.ts +41 -41
  425. package/src/utils/jwt/jwt.ts +204 -204
  426. package/src/utils/jwt/jwt.types.ts +21 -21
  427. package/src/utils/report/index.ts +3 -3
  428. package/src/utils/report/output.ts +45 -45
  429. package/src/utils/report/output.types.ts +70 -70
  430. package/src/utils/report/report.test.ts +133 -133
  431. package/src/utils/report/report.ts +134 -134
  432. package/src/utils/report/report.types.ts +13 -13
  433. package/src/utils/request/index.ts +1 -1
  434. package/src/utils/request/request.test.ts +26 -26
  435. package/src/utils/request/request.ts +48 -48
  436. package/src/utils/semverCompare/index.ts +1 -1
  437. package/src/utils/semverCompare/semverCompare.test.ts +49 -49
  438. package/src/utils/semverCompare/semverCompare.ts +60 -60
  439. package/src/utils/sendEmail/index.ts +1 -1
  440. package/src/utils/sendEmail/sendEmail.ts +27 -27
  441. package/src/utils/sendEmail/sendEmail.types.ts +7 -7
  442. package/src/utils/sendPush/index.ts +2 -2
  443. package/src/utils/sendPush/sendPush.ts +20 -20
  444. package/src/utils/sendPush/sendPush.types.ts +25 -25
  445. package/src/utils/tlsConfig/index.ts +2 -2
  446. package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
  447. package/src/utils/tlsConfig/tlsConfig.ts +47 -47
  448. package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
  449. package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
  450. package/src/utils/tlsRequest/index.ts +1 -1
  451. package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
  452. package/src/utils/tlsRequest/tlsRequest.ts +12 -12
  453. package/src/utils/trimPathSlash/index.ts +1 -1
  454. package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
  455. package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
  456. package/test/env.ts +56 -56
  457. package/test/factory/index.ts +8 -8
  458. package/test/factory/sequelizeMeta.ts +12 -12
  459. package/test/hooks.ts +37 -37
  460. package/test/index.ts +3 -3
  461. package/test/stub/index.ts +3 -3
  462. package/test/stub/stubLocales.ts +68 -68
  463. package/test/stub/stubPubSub.ts +7 -7
  464. package/test/stub/stubStorage.ts +77 -77
  465. package/test/stub/stubStorage.types.ts +11 -11
  466. package/test/utils/app.ts +31 -31
  467. package/test/utils/index.ts +1 -1
  468. package/tsconfig.build.json +5 -5
  469. package/tsconfig.json +32 -32
@@ -1,114 +1,114 @@
1
- import { Request, Response, NextFunction } from 'express';
2
- import { TokenIssuer } from 'const';
3
- import { EndpointAuthParams, EndpointAuthType } from 'entities/Endpoint';
4
- import { EngineError } from 'entities/EngineError';
5
- import { WebError } from 'entities/WebError';
6
- import { reportDebug, jwtVerify } from 'utils';
7
- import {} from './authAdmin.types';
8
-
9
- const namespace = 'engine:middleware:authAdmin';
10
-
11
- /** Generate a middleware to authenticate the client connection with a Admin api */
12
- export function authAdmin(
13
- options: EndpointAuthParams<EndpointAuthType.ADMIN>
14
- ): (request: Request, response: Response, next: NextFunction) => Promise<void> {
15
- if (!options.permission)
16
- throw new EngineError({
17
- message: 'Endpoint using admin auth type must specify permission'
18
- });
19
- return async (
20
- request: Request,
21
- response: Response,
22
- next: NextFunction
23
- ): Promise<void> => {
24
- const [scheme, credentials] =
25
- request.headers?.authorization?.split(' ') ?? [];
26
- // No bearer token has been sent
27
- if (!credentials || scheme.toLowerCase() !== 'bearer') {
28
- throw new WebError({
29
- errorCode: 'unauthorized',
30
- statusCode: 401,
31
- message: 'No bearer token found',
32
- data: { authorization: request.headers?.authorization }
33
- });
34
- }
35
- reportDebug({
36
- namespace,
37
- message: 'Performing JWT authentication',
38
- data: { scheme, credentials }
39
- });
40
- // Verify token and extract its payload
41
- const payload = await jwtVerify(credentials, TokenIssuer.ADMIN_API);
42
- reportDebug({
43
- namespace,
44
- message: 'Extracted user data from JWT',
45
- data: { payload, credentials }
46
- });
47
-
48
- if (!payload.per)
49
- throw new WebError({
50
- errorCode: 'unauthorized',
51
- statusCode: 401,
52
- message: `User token does not contain any permission claim`
53
- });
54
-
55
- // User Permission
56
- const permissions = payload.per;
57
- const userPermissions =
58
- permissions instanceof Array ? permissions : [permissions];
59
-
60
- reportDebug({
61
- namespace,
62
- message: 'Performing Admin Permission check',
63
- data: {
64
- permissions,
65
- endpointPermission: options.permission,
66
- adminPermissions: userPermissions
67
- }
68
- });
69
-
70
- if (!checkUserPermissions(userPermissions, options.permission)) {
71
- throw new WebError({
72
- errorCode: 'unauthorized',
73
- statusCode: 401,
74
- message: `User does not have required permission "${options.permission}"`,
75
- data: { userPermissions }
76
- });
77
- }
78
-
79
- // The user object on the request is hydrated with data from the token
80
- request.admin = {
81
- ...request.admin,
82
- email: payload.sub,
83
- permissions: userPermissions
84
- };
85
-
86
- next();
87
- };
88
- }
89
-
90
- /** */
91
- function checkUserPermissions(
92
- userPermissions: Array<string>,
93
- endpointPermission: string
94
- ): boolean {
95
- const endpointPermissionParts = endpointPermission.split(':');
96
- userPermissionLoop: for (const permission of userPermissions) {
97
- const permissionParts = permission.split(':');
98
-
99
- // Ignore if both are not same length
100
- if (permissionParts.length !== endpointPermissionParts.length)
101
- continue userPermissionLoop;
102
-
103
- for (let i = 0; i < permissionParts.length; i++) {
104
- // Wildcards get automatic validation, otherwise it must match with the same part of the endpoint permission
105
- if (
106
- permissionParts[i] !== '*' &&
107
- permissionParts[i] !== endpointPermissionParts[i]
108
- )
109
- continue userPermissionLoop;
110
- }
111
- return true;
112
- }
113
- return false;
114
- }
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import { TokenIssuer } from 'const';
3
+ import { EndpointAuthParams, EndpointAuthType } from 'entities/Endpoint';
4
+ import { EngineError } from 'entities/EngineError';
5
+ import { WebError } from 'entities/WebError';
6
+ import { reportDebug, jwtVerify } from 'utils';
7
+ import {} from './authAdmin.types';
8
+
9
+ const namespace = 'engine:middleware:authAdmin';
10
+
11
+ /** Generate a middleware to authenticate the client connection with a Admin api */
12
+ export function authAdmin(
13
+ options: EndpointAuthParams<EndpointAuthType.ADMIN>
14
+ ): (request: Request, response: Response, next: NextFunction) => Promise<void> {
15
+ if (!options.permission)
16
+ throw new EngineError({
17
+ message: 'Endpoint using admin auth type must specify permission'
18
+ });
19
+ return async (
20
+ request: Request,
21
+ response: Response,
22
+ next: NextFunction
23
+ ): Promise<void> => {
24
+ const [scheme, credentials] =
25
+ request.headers?.authorization?.split(' ') ?? [];
26
+ // No bearer token has been sent
27
+ if (!credentials || scheme.toLowerCase() !== 'bearer') {
28
+ throw new WebError({
29
+ errorCode: 'unauthorized',
30
+ statusCode: 401,
31
+ message: 'No bearer token found',
32
+ data: { authorization: request.headers?.authorization }
33
+ });
34
+ }
35
+ reportDebug({
36
+ namespace,
37
+ message: 'Performing JWT authentication',
38
+ data: { scheme, credentials }
39
+ });
40
+ // Verify token and extract its payload
41
+ const payload = await jwtVerify(credentials, TokenIssuer.ADMIN_API);
42
+ reportDebug({
43
+ namespace,
44
+ message: 'Extracted user data from JWT',
45
+ data: { payload, credentials }
46
+ });
47
+
48
+ if (!payload.per)
49
+ throw new WebError({
50
+ errorCode: 'unauthorized',
51
+ statusCode: 401,
52
+ message: `User token does not contain any permission claim`
53
+ });
54
+
55
+ // User Permission
56
+ const permissions = payload.per;
57
+ const userPermissions =
58
+ permissions instanceof Array ? permissions : [permissions];
59
+
60
+ reportDebug({
61
+ namespace,
62
+ message: 'Performing Admin Permission check',
63
+ data: {
64
+ permissions,
65
+ endpointPermission: options.permission,
66
+ adminPermissions: userPermissions
67
+ }
68
+ });
69
+
70
+ if (!checkUserPermissions(userPermissions, options.permission)) {
71
+ throw new WebError({
72
+ errorCode: 'unauthorized',
73
+ statusCode: 401,
74
+ message: `User does not have required permission "${options.permission}"`,
75
+ data: { userPermissions }
76
+ });
77
+ }
78
+
79
+ // The user object on the request is hydrated with data from the token
80
+ request.admin = {
81
+ ...request.admin,
82
+ email: payload.sub,
83
+ permissions: userPermissions
84
+ };
85
+
86
+ next();
87
+ };
88
+ }
89
+
90
+ /** */
91
+ function checkUserPermissions(
92
+ userPermissions: Array<string>,
93
+ endpointPermission: string
94
+ ): boolean {
95
+ const endpointPermissionParts = endpointPermission.split(':');
96
+ userPermissionLoop: for (const permission of userPermissions) {
97
+ const permissionParts = permission.split(':');
98
+
99
+ // Ignore if both are not same length
100
+ if (permissionParts.length !== endpointPermissionParts.length)
101
+ continue userPermissionLoop;
102
+
103
+ for (let i = 0; i < permissionParts.length; i++) {
104
+ // Wildcards get automatic validation, otherwise it must match with the same part of the endpoint permission
105
+ if (
106
+ permissionParts[i] !== '*' &&
107
+ permissionParts[i] !== endpointPermissionParts[i]
108
+ )
109
+ continue userPermissionLoop;
110
+ }
111
+ return true;
112
+ }
113
+ return false;
114
+ }
@@ -1,19 +1,19 @@
1
- // Override the Express request object to add the files
2
- declare global {
3
- // eslint-disable-next-line @typescript-eslint/no-namespace
4
- namespace Express {
5
- /** Express request object */
6
- interface Request {
7
- /** User that identified using a JWT */
8
- admin?: RequestAdminProps;
9
- }
10
- }
11
- }
12
-
13
- /** Admin auth properties of the request */
14
- export interface RequestAdminProps {
15
- /** Email address of the user */
16
- email: string;
17
- /** List of permissions that the user has */
18
- permissions: Array<string>;
19
- }
1
+ // Override the Express request object to add the files
2
+ declare global {
3
+ // eslint-disable-next-line @typescript-eslint/no-namespace
4
+ namespace Express {
5
+ /** Express request object */
6
+ interface Request {
7
+ /** User that identified using a JWT */
8
+ admin?: RequestAdminProps;
9
+ }
10
+ }
11
+ }
12
+
13
+ /** Admin auth properties of the request */
14
+ export interface RequestAdminProps {
15
+ /** Email address of the user */
16
+ email: string;
17
+ /** List of permissions that the user has */
18
+ permissions: Array<string>;
19
+ }
@@ -1,2 +1,2 @@
1
- export * from './authAdmin';
2
- export * from './authAdmin.types';
1
+ export * from './authAdmin';
2
+ export * from './authAdmin.types';
@@ -1,86 +1,86 @@
1
- import crypto from 'crypto';
2
- import express, { json, Request, Response, Application } from 'express';
3
- import { faker } from '@faker-js/faker';
4
- import request from 'supertest';
5
- import {
6
- Endpoint,
7
- EndpointAuthType,
8
- EndpointMethod,
9
- EndpointOptions
10
- } from 'entities/Endpoint';
11
- import { signPayload } from 'utils/hmac';
12
-
13
- describe('Middleware - authHmac', () => {
14
- let app: Application;
15
-
16
- const PATH = '/test';
17
- const config: EndpointOptions<EndpointAuthType.HMAC> = {
18
- path: PATH,
19
- method: EndpointMethod.POST,
20
- handler: (req: Request, res: Response) => {
21
- res.sendStatus(200);
22
- },
23
- authType: EndpointAuthType.HMAC,
24
- validator: {}
25
- };
26
-
27
- beforeEach(() => {
28
- app = express();
29
- app.use(json());
30
- process.env.PAYLOAD_SIGNATURE_SECRET = faker.lorem.slug();
31
- });
32
-
33
- it('should allow properly signed requests', async () => {
34
- const payload = signPayload({ test: 'test' });
35
- const endpoint = new Endpoint({
36
- ...config,
37
- authType: EndpointAuthType.HMAC
38
- });
39
- endpoint.register(app);
40
- await request(app).post(PATH).send(payload).expect(200);
41
- });
42
-
43
- it('should allow properly signed requests with a custom secret', async () => {
44
- const secret = faker.lorem.word();
45
- const payload = signPayload({ test: 'test' }, { secret });
46
- const endpoint = new Endpoint({
47
- ...config,
48
- authType: EndpointAuthType.HMAC,
49
- authParams: { secret }
50
- });
51
- endpoint.register(app);
52
- await request(app).post(PATH).send(payload);
53
- });
54
-
55
- it('should not allow wrongly signed requests', async () => {
56
- const payload = signPayload({ test: 'test' }, { secret: 'hacker' });
57
- const endpoint = new Endpoint({
58
- ...config,
59
- authType: EndpointAuthType.HMAC
60
- });
61
- endpoint.register(app);
62
- await request(app).post(PATH).send(payload).expect(401);
63
- });
64
-
65
- it('should allow signed requests from Github', async () => {
66
- const payload = {
67
- z: faker.lorem.word(),
68
- a: { z: faker.lorem.word(), a: faker.lorem.word() }
69
- };
70
- const signature = crypto
71
- .createHmac('sha1', process.env.PAYLOAD_SIGNATURE_SECRET as string)
72
- .update(JSON.stringify(payload))
73
- .digest('hex');
74
- const endpoint = new Endpoint({
75
- ...config,
76
- authType: EndpointAuthType.HMAC,
77
- authParams: { isGithub: true }
78
- });
79
- endpoint.register(app);
80
- await request(app)
81
- .post(PATH)
82
- .send(payload)
83
- .set({ 'X-Hub-Signature': `sha1=${signature}` })
84
- .expect(200);
85
- });
86
- });
1
+ import crypto from 'crypto';
2
+ import express, { json, Request, Response, Application } from 'express';
3
+ import { faker } from '@faker-js/faker';
4
+ import request from 'supertest';
5
+ import {
6
+ Endpoint,
7
+ EndpointAuthType,
8
+ EndpointMethod,
9
+ EndpointOptions
10
+ } from 'entities/Endpoint';
11
+ import { signPayload } from 'utils/hmac';
12
+
13
+ describe('Middleware - authHmac', () => {
14
+ let app: Application;
15
+
16
+ const PATH = '/test';
17
+ const config: EndpointOptions<EndpointAuthType.HMAC> = {
18
+ path: PATH,
19
+ method: EndpointMethod.POST,
20
+ handler: (req: Request, res: Response) => {
21
+ res.sendStatus(200);
22
+ },
23
+ authType: EndpointAuthType.HMAC,
24
+ validator: {}
25
+ };
26
+
27
+ beforeEach(() => {
28
+ app = express();
29
+ app.use(json());
30
+ process.env.PAYLOAD_SIGNATURE_SECRET = faker.lorem.slug();
31
+ });
32
+
33
+ it('should allow properly signed requests', async () => {
34
+ const payload = signPayload({ test: 'test' });
35
+ const endpoint = new Endpoint({
36
+ ...config,
37
+ authType: EndpointAuthType.HMAC
38
+ });
39
+ endpoint.register(app);
40
+ await request(app).post(PATH).send(payload).expect(200);
41
+ });
42
+
43
+ it('should allow properly signed requests with a custom secret', async () => {
44
+ const secret = faker.lorem.word();
45
+ const payload = signPayload({ test: 'test' }, { secret });
46
+ const endpoint = new Endpoint({
47
+ ...config,
48
+ authType: EndpointAuthType.HMAC,
49
+ authParams: { secret }
50
+ });
51
+ endpoint.register(app);
52
+ await request(app).post(PATH).send(payload);
53
+ });
54
+
55
+ it('should not allow wrongly signed requests', async () => {
56
+ const payload = signPayload({ test: 'test' }, { secret: 'hacker' });
57
+ const endpoint = new Endpoint({
58
+ ...config,
59
+ authType: EndpointAuthType.HMAC
60
+ });
61
+ endpoint.register(app);
62
+ await request(app).post(PATH).send(payload).expect(401);
63
+ });
64
+
65
+ it('should allow signed requests from Github', async () => {
66
+ const payload = {
67
+ z: faker.lorem.word(),
68
+ a: { z: faker.lorem.word(), a: faker.lorem.word() }
69
+ };
70
+ const signature = crypto
71
+ .createHmac('sha1', process.env.PAYLOAD_SIGNATURE_SECRET as string)
72
+ .update(JSON.stringify(payload))
73
+ .digest('hex');
74
+ const endpoint = new Endpoint({
75
+ ...config,
76
+ authType: EndpointAuthType.HMAC,
77
+ authParams: { isGithub: true }
78
+ });
79
+ endpoint.register(app);
80
+ await request(app)
81
+ .post(PATH)
82
+ .send(payload)
83
+ .set({ 'X-Hub-Signature': `sha1=${signature}` })
84
+ .expect(200);
85
+ });
86
+ });
@@ -1,56 +1,56 @@
1
- import { BinaryToTextEncoding } from 'crypto';
2
- import { Request, Response, NextFunction } from 'express';
3
- import { HmacPayload } from './authHmac.types';
4
- import { EndpointAuthParams, EndpointAuthType } from 'entities/Endpoint';
5
- import { WebError } from 'entities/WebError';
6
- import { verifySignature } from 'utils/hmac';
7
- import { reportDebug } from 'utils/report';
8
-
9
- const namespace = 'engine:middleware:authHmac';
10
-
11
- /** Generate an HMAC authentication middleware */
12
- export function authHmac(
13
- options: EndpointAuthParams<EndpointAuthType.HMAC> = {}
14
- ): (req: Request, res: Response, next: NextFunction) => void {
15
- return (req: Request, res: Response, next: NextFunction): void => {
16
- const payload = (
17
- req.method === 'GET' ? req.query : req.body
18
- ) as HmacPayload;
19
- let signature: string | undefined;
20
- let signatureSettings;
21
- if (options.isGithub) {
22
- // For GitHub, the signature is in the header and is has specific settings
23
- signature =
24
- req.headers['x-hub-signature'] &&
25
- (req.headers['x-hub-signature'] as string).substr(5);
26
- signatureSettings = {
27
- algorithm: 'sha1',
28
- sort: false,
29
- encode: 'hex' as BinaryToTextEncoding
30
- };
31
- } else {
32
- // In our standard authentication, the signature is included in the payload
33
- signature = payload.signature;
34
- delete payload.signature;
35
- }
36
- const settings = { secret: options.secret, ...signatureSettings };
37
- if (!signature)
38
- throw new WebError({
39
- message: 'No signature was provided',
40
- errorCode: 'unauthorized',
41
- statusCode: 401
42
- });
43
- reportDebug({
44
- namespace,
45
- message: 'Performing HMAC authentication',
46
- data: { payload, signature, settings }
47
- });
48
- if (!verifySignature(payload, signature, settings))
49
- throw new WebError({
50
- message: 'Signature does not match hmac of payload',
51
- errorCode: 'unauthorized',
52
- statusCode: 401
53
- });
54
- next();
55
- };
56
- }
1
+ import { BinaryToTextEncoding } from 'crypto';
2
+ import { Request, Response, NextFunction } from 'express';
3
+ import { HmacPayload } from './authHmac.types';
4
+ import { EndpointAuthParams, EndpointAuthType } from 'entities/Endpoint';
5
+ import { WebError } from 'entities/WebError';
6
+ import { verifySignature } from 'utils/hmac';
7
+ import { reportDebug } from 'utils/report';
8
+
9
+ const namespace = 'engine:middleware:authHmac';
10
+
11
+ /** Generate an HMAC authentication middleware */
12
+ export function authHmac(
13
+ options: EndpointAuthParams<EndpointAuthType.HMAC> = {}
14
+ ): (req: Request, res: Response, next: NextFunction) => void {
15
+ return (req: Request, res: Response, next: NextFunction): void => {
16
+ const payload = (
17
+ req.method === 'GET' ? req.query : req.body
18
+ ) as HmacPayload;
19
+ let signature: string | undefined;
20
+ let signatureSettings;
21
+ if (options.isGithub) {
22
+ // For GitHub, the signature is in the header and is has specific settings
23
+ signature =
24
+ req.headers['x-hub-signature'] &&
25
+ (req.headers['x-hub-signature'] as string).substr(5);
26
+ signatureSettings = {
27
+ algorithm: 'sha1',
28
+ sort: false,
29
+ encode: 'hex' as BinaryToTextEncoding
30
+ };
31
+ } else {
32
+ // In our standard authentication, the signature is included in the payload
33
+ signature = payload.signature;
34
+ delete payload.signature;
35
+ }
36
+ const settings = { secret: options.secret, ...signatureSettings };
37
+ if (!signature)
38
+ throw new WebError({
39
+ message: 'No signature was provided',
40
+ errorCode: 'unauthorized',
41
+ statusCode: 401
42
+ });
43
+ reportDebug({
44
+ namespace,
45
+ message: 'Performing HMAC authentication',
46
+ data: { payload, signature, settings }
47
+ });
48
+ if (!verifySignature(payload, signature, settings))
49
+ throw new WebError({
50
+ message: 'Signature does not match hmac of payload',
51
+ errorCode: 'unauthorized',
52
+ statusCode: 401
53
+ });
54
+ next();
55
+ };
56
+ }
@@ -1,7 +1,7 @@
1
- /** Options for HMAC auth */
2
- export interface HmacPayload {
3
- /** Generic object payload */
4
- [key: string]: unknown;
5
- /** HMAC signature of the whole payload */
6
- signature?: string;
7
- }
1
+ /** Options for HMAC auth */
2
+ export interface HmacPayload {
3
+ /** Generic object payload */
4
+ [key: string]: unknown;
5
+ /** HMAC signature of the whole payload */
6
+ signature?: string;
7
+ }
@@ -1,2 +1,2 @@
1
- export * from './authHmac';
2
- export * from './authHmac.types';
1
+ export * from './authHmac';
2
+ export * from './authHmac.types';