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 +1 @@
1
- {"version":3,"file":"SocketClient.js","names":["_crypto","require","_parseMessage","_const","_EngineError","_MessageHandler","_ValidationError","_WebError","_jwt","_report","namespace","SocketClient","exports","webSocket","request","options","_classCallCheck2","default","id","establishedAt","ws","handlers","initCallbacks","authCallbacks","shutdownCallbacks","authenticated","authRenewTimer","authExpireTimer","userId","deviceId","tokenId","audience","isAlive","pingInterval","randomUUID","Date","reportDebug","message","Array","handler","MessageHandler","EngineError","socketClients","reportInfo","on","handleClose","bind","catch","error","reportError","severity","LogSeverity","WARNING","data","handleMessage","callbackResults","Promise","allSettled","map","callback","forEach","result","status","reason","setInterval","terminate","ping","process","env","WS_PING_INTERVAL","parseInt","_createClass2","key","value","sendMessage","type","payload","send","noAuth","includes","DEFAULT_MESSAGE_AUDIENCE","JSON","stringify","isAuthenticated","getUser","parseMessage","toString","authenticate","handle","handleError","token","WebError","errorCode","jwtVerify","setUserData","authExpiration","exp","now","clearTimeouts","setTimeout","clearTimeout","sub","dev","jti","aud","hint","ValidationError","code","clearInterval","getSocketClients","getSocketClient"],"sources":["../../../src/entities/SocketClient/SocketClient.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { IncomingMessage } from 'http';\nimport WS, { RawData } from 'ws';\nimport { parseMessage } from './parseMessage';\nimport {\n SocketClientOptions,\n SocketClientSendMessageOptions,\n SocketAuthenticationMessage,\n SocketClientCallback,\n SocketClientList,\n SocketUser\n} from './SocketClient.types';\nimport { LogSeverity } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { MessageHandler } from 'entities/MessageHandler';\nimport { ValidationError } from 'entities/ValidationError';\nimport { WebError } from 'entities/WebError';\nimport { jwtVerify, UserTokenPayload } from 'utils/jwt';\nimport { reportInfo, reportError, reportDebug } from 'utils/report';\n\nconst namespace = 'SocketClient';\n\n/**\n * Class where each instance represents a client connected through web-sockets\n */\nexport class SocketClient {\n /** Mapping of all the connected socket clients */\n private static socketClients: SocketClientList = {};\n /** Unique identifier of the client */\n public readonly id: string;\n /** Date at which the client connection was established */\n public readonly establishedAt: Date;\n /** WS instance of the client connection */\n private ws: WS;\n /** List of message handlers that are registered with the client */\n private handlers: Array<MessageHandler>;\n /** Callback function that are called when the client is created */\n private initCallbacks: Array<SocketClientCallback> = [];\n /** Callback function that are called when the client successfully authenticates */\n private authCallbacks: Array<SocketClientCallback> = [];\n /** Callback function that are called when the client connection is terminated */\n private shutdownCallbacks: Array<SocketClientCallback> = [];\n /** Authentication status of the client */\n private authenticated = false;\n /** Timer used to track when to send authentication renewal reminder to the client */\n private authRenewTimer: NodeJS.Timeout | string | number | undefined;\n /** Timers used to track the time at which a user losses authentication */\n private authExpireTimer: NodeJS.Timeout | string | number | undefined;\n /** ID of the user that is authenticated */\n private userId: undefined | string;\n /** ID of the device with which the client authenticated */\n private deviceId: undefined | string;\n /** Id of the token with which the client authenticated */\n private tokenId: undefined | string;\n /** Audience claims that were in the latest authentication token used by the client */\n private audience: undefined | Array<string>;\n /** Status tracking variable used to check the liveness of connections */\n private isAlive = true;\n /** Timer used to track interval between client pinging */\n private pingInterval: NodeJS.Timeout | string | number | undefined;\n\n /**\n * Create a WS client\n */\n public constructor(\n webSocket: WS,\n request: IncomingMessage,\n options: SocketClientOptions\n ) {\n this.id = randomUUID();\n this.ws = webSocket;\n this.establishedAt = new Date();\n\n reportDebug({ namespace, message: `Creating socket client [${this.id}]` });\n\n // Make sure that callbacks are made as lists of functions\n // Init\n if (typeof options.initCallbacks === 'function')\n this.initCallbacks = [options.initCallbacks];\n else if (options.initCallbacks instanceof Array)\n this.initCallbacks = options.initCallbacks;\n // Auth\n if (typeof options.authCallbacks === 'function')\n this.authCallbacks = [options.authCallbacks];\n else if (options.authCallbacks instanceof Array)\n this.authCallbacks = options.authCallbacks;\n // Shutdown\n if (typeof options.shutdownCallbacks === 'function')\n this.shutdownCallbacks = [options.shutdownCallbacks];\n else if (options.shutdownCallbacks instanceof Array)\n this.shutdownCallbacks = options.shutdownCallbacks;\n\n // Check that all handlers are valid\n this.handlers = options.handlers;\n for (const handler of this.handlers) {\n if (!(handler instanceof MessageHandler))\n throw new EngineError({\n message: 'Handler is not an instance of MessageHandler'\n });\n }\n // Register in clients list\n SocketClient.socketClients[this.id] = this;\n\n reportInfo({ message: `Client connected [${this.id}]` });\n // On socket close, deregister from clients list\n this.ws.on('close', () => {\n this.handleClose\n .bind(this)()\n .catch((error) => {\n reportError(error);\n });\n });\n // On socket error, log the error\n this.ws.on('error', (error) => {\n reportError(\n new EngineError({\n severity: LogSeverity.WARNING,\n message: `Error [${this.id}]`\n })\n );\n reportError(error);\n });\n // When receiving a message, call message handler\n this.ws.on('message', (data) => {\n this.handleMessage\n .bind(this)(data)\n .catch((error) => {\n reportError(error);\n });\n });\n\n // Run all the init callbacks\n // For proper error handling of potential asynchronous callbacks, we wrap the execution in an auto-executing async function\n (async (): Promise<void> => {\n const callbackResults = await Promise.allSettled(\n this.initCallbacks.map((callback) => callback(this))\n );\n callbackResults.forEach((result) => {\n if (result.status === 'rejected') reportError(result.reason);\n });\n })().catch((error) => {\n reportError(error);\n });\n\n // Server -> client ping mechanism using WS standard ping control frames\n // We terminate the connection if we did not get a reply in the previous interval\n this.pingInterval = setInterval(\n () => {\n if (!this.isAlive) {\n reportError(\n new EngineError({\n severity: LogSeverity.WARNING,\n message: `Terminating socket connection, ping timeout [${this.id}]`\n })\n );\n this.ws.terminate();\n return;\n }\n this.isAlive = false;\n this.ws.ping();\n reportDebug({ namespace, message: `Ping sent to client [${this.id}]` });\n },\n process.env.WS_PING_INTERVAL\n ? parseInt(process.env.WS_PING_INTERVAL) * 1000\n : 30000\n );\n\n // Track the connection as alive as we get a pong back\n this.ws.on('pong', () => {\n reportDebug({\n namespace,\n message: `Client responded to ping [${this.id}]`\n });\n this.isAlive = true;\n });\n }\n\n /** Get the list of all connected clients indexed by ID */\n public static getSocketClients(): SocketClientList {\n return this.socketClients;\n }\n\n /** Get a client by his ID */\n public static getSocketClient(id: string): SocketClient | undefined {\n return this.socketClients[id];\n }\n\n /**\n * Send a message to the client\n */\n public sendMessage(\n type: string,\n payload: unknown = {},\n options: SocketClientSendMessageOptions = {}\n ): void {\n reportDebug({\n namespace,\n message: `Received request to send message to client of type \"${type}\" [${this.id}]`,\n data: { options }\n });\n let send = false;\n // If the message is sent to unauthenticated user skip auth check\n if (options.noAuth) send = true;\n // If the message is authenticated and with the correct audience, it gets sent\n else if (\n this.authenticated &&\n (this.audience as Array<string>).includes(\n options.audience ?? (process.env.DEFAULT_MESSAGE_AUDIENCE as string)\n )\n )\n send = true;\n\n if (send) {\n reportDebug({\n namespace,\n message: `Sending message to client of type \"${type ?? 'unknown'}\" [${this.id}]`\n });\n this.ws.send(JSON.stringify({ type, payload }));\n }\n }\n\n /** Get the client authentication status */\n public isAuthenticated(): boolean {\n return this.authenticated;\n }\n\n /** Fetch data on the user if he is authenticated */\n public getUser(): SocketUser | undefined {\n if (this.authenticated)\n return {\n userId: this.userId as string,\n deviceId: this.deviceId as string,\n tokenId: this.tokenId as string,\n audience: this.audience as Array<string>\n };\n }\n\n /** Process an incoming message */\n private async handleMessage(data: RawData): Promise<void> {\n try {\n const message = parseMessage(data.toString('utf-8'));\n reportInfo({\n message: `Received message of type \"${message?.type ?? 'unknown'}\" [${this.id}]`\n });\n switch (message.type) {\n case 'authenticate':\n await this.authenticate(message as SocketAuthenticationMessage);\n break;\n // As not all client libraries allow sending pings through WS control frames,\n // we add a higher level ping mechanism\n case 'ping':\n reportDebug({\n namespace,\n message: `Received ping from client [${this.id}]`\n });\n this.sendMessage('pong', {}, { noAuth: true });\n break;\n default:\n for (const handler of this.handlers) {\n await handler.handle(message, this);\n }\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Process an authentication request\n * @param {String} message - Authentication message\n */\n private async authenticate(\n message: SocketAuthenticationMessage\n ): Promise<void> {\n const token = message.payload?.token;\n if (!token) {\n throw new WebError({\n errorCode: 'no-token',\n message: 'No token was given',\n data: { message }\n });\n }\n const payload = await jwtVerify(token);\n this.setUserData(payload);\n\n this.authenticated = true;\n // Time remaining before token expiration\n const authExpiration = payload.exp * 1000 - Date.now();\n // Clear previously created timers\n this.clearTimeouts();\n // Send a refresh request to the client 1 minute before expiration\n this.authRenewTimer = setTimeout(\n () => {\n this.sendMessage('renewAuthentication');\n },\n authExpiration - 60 * 1000\n );\n // Expire client authentication\n this.authExpireTimer = setTimeout(() => {\n this.authenticated = false;\n }, authExpiration);\n\n // Run all the post-authentication callbacks\n const callbackResults = await Promise.allSettled(\n this.authCallbacks.map((callback) => callback(this))\n );\n callbackResults.forEach((result) => {\n if (result.status === 'rejected') reportError(result.reason);\n });\n }\n\n // Clear all the pending timers\n /** */\n private clearTimeouts(): void {\n if (this.authRenewTimer) clearTimeout(this.authRenewTimer);\n if (this.authExpireTimer) clearTimeout(this.authExpireTimer);\n }\n\n /**\n * Fetch the user's data and attach it to the connection for new connections. For existing connections, it checks that the authentication is done on the same user.\n */\n private setUserData({ sub, dev, jti, aud }: UserTokenPayload): void {\n // Check if the user is already authenticated\n if (this.userId) {\n // Check that the token is for the same connection as before\n if (this.userId && this.userId !== sub)\n throw new WebError({\n errorCode: 'wrong-user-token',\n message:\n 'A user tried to authenticate with a token that is not for him [userId]'\n });\n } else {\n // Set the user's ID\n this.userId = sub;\n // Set the user's Device Id\n this.deviceId = dev;\n // Set the token ID\n this.tokenId = jti;\n // Set the aud\n this.audience = aud instanceof Array ? aud : [aud];\n\n reportDebug({\n namespace,\n message: `Successfully authenticated client [${this.id}]`,\n data: {\n userId: this.userId,\n deviceId: this.deviceId,\n tokenId: this.tokenId,\n audience: this.audience\n }\n });\n }\n }\n\n /**\n * Properly return errors to clients\n */\n private handleError(error: unknown): void {\n reportError(error);\n if (error instanceof WebError) {\n this.sendMessage(\n 'error',\n { errorCode: error.errorCode, hint: error.hint },\n { noAuth: true }\n );\n } else if (error instanceof ValidationError) {\n this.sendMessage(\n 'error',\n { errorCode: 'validation-error', hint: error.data },\n { noAuth: true }\n );\n } else {\n this.sendMessage(\n 'error',\n { errorCode: 'server-error' },\n { noAuth: true }\n );\n }\n }\n\n /**\n * Process a socket close event\n */\n private async handleClose(code?: string, reason?: string): Promise<void> {\n delete SocketClient.socketClients[this.id];\n this.clearTimeouts();\n // Stop ping process\n if (this.pingInterval) clearInterval(this.pingInterval);\n // Run all the shutdown callbacks\n const callbackResults = await Promise.allSettled(\n this.shutdownCallbacks.map((callback) => callback(this))\n );\n callbackResults.forEach((result) => {\n if (result.status === 'rejected') reportError(result.reason);\n });\n reportInfo({\n message: `Client disconnected [${this.id}]`,\n data: { code, reason }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SocketClient.js","names":["_crypto","require","_parseMessage","_const","_EngineError","_MessageHandler","_ValidationError","_WebError","_jwt","_report","namespace","SocketClient","exports","webSocket","request","options","_classCallCheck2","default","id","establishedAt","ws","handlers","initCallbacks","authCallbacks","shutdownCallbacks","authenticated","authRenewTimer","authExpireTimer","userId","deviceId","tokenId","audience","isAlive","pingInterval","randomUUID","Date","reportDebug","message","Array","handler","MessageHandler","EngineError","socketClients","reportInfo","on","handleClose","bind","catch","error","reportError","severity","LogSeverity","WARNING","data","handleMessage","callbackResults","Promise","allSettled","map","callback","forEach","result","status","reason","setInterval","terminate","ping","process","env","WS_PING_INTERVAL","parseInt","_createClass2","key","value","sendMessage","type","payload","send","noAuth","includes","DEFAULT_MESSAGE_AUDIENCE","JSON","stringify","isAuthenticated","getUser","parseMessage","toString","authenticate","handle","handleError","token","WebError","errorCode","jwtVerify","setUserData","authExpiration","exp","now","clearTimeouts","setTimeout","clearTimeout","sub","dev","jti","aud","hint","ValidationError","code","clearInterval","getSocketClients","getSocketClient"],"sources":["../../../src/entities/SocketClient/SocketClient.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\r\nimport { IncomingMessage } from 'http';\r\nimport WS, { RawData } from 'ws';\r\nimport { parseMessage } from './parseMessage';\r\nimport {\r\n SocketClientOptions,\r\n SocketClientSendMessageOptions,\r\n SocketAuthenticationMessage,\r\n SocketClientCallback,\r\n SocketClientList,\r\n SocketUser\r\n} from './SocketClient.types';\r\nimport { LogSeverity } from 'const';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { MessageHandler } from 'entities/MessageHandler';\r\nimport { ValidationError } from 'entities/ValidationError';\r\nimport { WebError } from 'entities/WebError';\r\nimport { jwtVerify, UserTokenPayload } from 'utils/jwt';\r\nimport { reportInfo, reportError, reportDebug } from 'utils/report';\r\n\r\nconst namespace = 'SocketClient';\r\n\r\n/**\r\n * Class where each instance represents a client connected through web-sockets\r\n */\r\nexport class SocketClient {\r\n /** Mapping of all the connected socket clients */\r\n private static socketClients: SocketClientList = {};\r\n /** Unique identifier of the client */\r\n public readonly id: string;\r\n /** Date at which the client connection was established */\r\n public readonly establishedAt: Date;\r\n /** WS instance of the client connection */\r\n private ws: WS;\r\n /** List of message handlers that are registered with the client */\r\n private handlers: Array<MessageHandler>;\r\n /** Callback function that are called when the client is created */\r\n private initCallbacks: Array<SocketClientCallback> = [];\r\n /** Callback function that are called when the client successfully authenticates */\r\n private authCallbacks: Array<SocketClientCallback> = [];\r\n /** Callback function that are called when the client connection is terminated */\r\n private shutdownCallbacks: Array<SocketClientCallback> = [];\r\n /** Authentication status of the client */\r\n private authenticated = false;\r\n /** Timer used to track when to send authentication renewal reminder to the client */\r\n private authRenewTimer: NodeJS.Timeout | string | number | undefined;\r\n /** Timers used to track the time at which a user losses authentication */\r\n private authExpireTimer: NodeJS.Timeout | string | number | undefined;\r\n /** ID of the user that is authenticated */\r\n private userId: undefined | string;\r\n /** ID of the device with which the client authenticated */\r\n private deviceId: undefined | string;\r\n /** Id of the token with which the client authenticated */\r\n private tokenId: undefined | string;\r\n /** Audience claims that were in the latest authentication token used by the client */\r\n private audience: undefined | Array<string>;\r\n /** Status tracking variable used to check the liveness of connections */\r\n private isAlive = true;\r\n /** Timer used to track interval between client pinging */\r\n private pingInterval: NodeJS.Timeout | string | number | undefined;\r\n\r\n /**\r\n * Create a WS client\r\n */\r\n public constructor(\r\n webSocket: WS,\r\n request: IncomingMessage,\r\n options: SocketClientOptions\r\n ) {\r\n this.id = randomUUID();\r\n this.ws = webSocket;\r\n this.establishedAt = new Date();\r\n\r\n reportDebug({ namespace, message: `Creating socket client [${this.id}]` });\r\n\r\n // Make sure that callbacks are made as lists of functions\r\n // Init\r\n if (typeof options.initCallbacks === 'function')\r\n this.initCallbacks = [options.initCallbacks];\r\n else if (options.initCallbacks instanceof Array)\r\n this.initCallbacks = options.initCallbacks;\r\n // Auth\r\n if (typeof options.authCallbacks === 'function')\r\n this.authCallbacks = [options.authCallbacks];\r\n else if (options.authCallbacks instanceof Array)\r\n this.authCallbacks = options.authCallbacks;\r\n // Shutdown\r\n if (typeof options.shutdownCallbacks === 'function')\r\n this.shutdownCallbacks = [options.shutdownCallbacks];\r\n else if (options.shutdownCallbacks instanceof Array)\r\n this.shutdownCallbacks = options.shutdownCallbacks;\r\n\r\n // Check that all handlers are valid\r\n this.handlers = options.handlers;\r\n for (const handler of this.handlers) {\r\n if (!(handler instanceof MessageHandler))\r\n throw new EngineError({\r\n message: 'Handler is not an instance of MessageHandler'\r\n });\r\n }\r\n // Register in clients list\r\n SocketClient.socketClients[this.id] = this;\r\n\r\n reportInfo({ message: `Client connected [${this.id}]` });\r\n // On socket close, deregister from clients list\r\n this.ws.on('close', () => {\r\n this.handleClose\r\n .bind(this)()\r\n .catch((error) => {\r\n reportError(error);\r\n });\r\n });\r\n // On socket error, log the error\r\n this.ws.on('error', (error) => {\r\n reportError(\r\n new EngineError({\r\n severity: LogSeverity.WARNING,\r\n message: `Error [${this.id}]`\r\n })\r\n );\r\n reportError(error);\r\n });\r\n // When receiving a message, call message handler\r\n this.ws.on('message', (data) => {\r\n this.handleMessage\r\n .bind(this)(data)\r\n .catch((error) => {\r\n reportError(error);\r\n });\r\n });\r\n\r\n // Run all the init callbacks\r\n // For proper error handling of potential asynchronous callbacks, we wrap the execution in an auto-executing async function\r\n (async (): Promise<void> => {\r\n const callbackResults = await Promise.allSettled(\r\n this.initCallbacks.map((callback) => callback(this))\r\n );\r\n callbackResults.forEach((result) => {\r\n if (result.status === 'rejected') reportError(result.reason);\r\n });\r\n })().catch((error) => {\r\n reportError(error);\r\n });\r\n\r\n // Server -> client ping mechanism using WS standard ping control frames\r\n // We terminate the connection if we did not get a reply in the previous interval\r\n this.pingInterval = setInterval(\r\n () => {\r\n if (!this.isAlive) {\r\n reportError(\r\n new EngineError({\r\n severity: LogSeverity.WARNING,\r\n message: `Terminating socket connection, ping timeout [${this.id}]`\r\n })\r\n );\r\n this.ws.terminate();\r\n return;\r\n }\r\n this.isAlive = false;\r\n this.ws.ping();\r\n reportDebug({ namespace, message: `Ping sent to client [${this.id}]` });\r\n },\r\n process.env.WS_PING_INTERVAL\r\n ? parseInt(process.env.WS_PING_INTERVAL) * 1000\r\n : 30000\r\n );\r\n\r\n // Track the connection as alive as we get a pong back\r\n this.ws.on('pong', () => {\r\n reportDebug({\r\n namespace,\r\n message: `Client responded to ping [${this.id}]`\r\n });\r\n this.isAlive = true;\r\n });\r\n }\r\n\r\n /** Get the list of all connected clients indexed by ID */\r\n public static getSocketClients(): SocketClientList {\r\n return this.socketClients;\r\n }\r\n\r\n /** Get a client by his ID */\r\n public static getSocketClient(id: string): SocketClient | undefined {\r\n return this.socketClients[id];\r\n }\r\n\r\n /**\r\n * Send a message to the client\r\n */\r\n public sendMessage(\r\n type: string,\r\n payload: unknown = {},\r\n options: SocketClientSendMessageOptions = {}\r\n ): void {\r\n reportDebug({\r\n namespace,\r\n message: `Received request to send message to client of type \"${type}\" [${this.id}]`,\r\n data: { options }\r\n });\r\n let send = false;\r\n // If the message is sent to unauthenticated user skip auth check\r\n if (options.noAuth) send = true;\r\n // If the message is authenticated and with the correct audience, it gets sent\r\n else if (\r\n this.authenticated &&\r\n (this.audience as Array<string>).includes(\r\n options.audience ?? (process.env.DEFAULT_MESSAGE_AUDIENCE as string)\r\n )\r\n )\r\n send = true;\r\n\r\n if (send) {\r\n reportDebug({\r\n namespace,\r\n message: `Sending message to client of type \"${type ?? 'unknown'}\" [${this.id}]`\r\n });\r\n this.ws.send(JSON.stringify({ type, payload }));\r\n }\r\n }\r\n\r\n /** Get the client authentication status */\r\n public isAuthenticated(): boolean {\r\n return this.authenticated;\r\n }\r\n\r\n /** Fetch data on the user if he is authenticated */\r\n public getUser(): SocketUser | undefined {\r\n if (this.authenticated)\r\n return {\r\n userId: this.userId as string,\r\n deviceId: this.deviceId as string,\r\n tokenId: this.tokenId as string,\r\n audience: this.audience as Array<string>\r\n };\r\n }\r\n\r\n /** Process an incoming message */\r\n private async handleMessage(data: RawData): Promise<void> {\r\n try {\r\n const message = parseMessage(data.toString('utf-8'));\r\n reportInfo({\r\n message: `Received message of type \"${message?.type ?? 'unknown'}\" [${this.id}]`\r\n });\r\n switch (message.type) {\r\n case 'authenticate':\r\n await this.authenticate(message as SocketAuthenticationMessage);\r\n break;\r\n // As not all client libraries allow sending pings through WS control frames,\r\n // we add a higher level ping mechanism\r\n case 'ping':\r\n reportDebug({\r\n namespace,\r\n message: `Received ping from client [${this.id}]`\r\n });\r\n this.sendMessage('pong', {}, { noAuth: true });\r\n break;\r\n default:\r\n for (const handler of this.handlers) {\r\n await handler.handle(message, this);\r\n }\r\n }\r\n } catch (error) {\r\n this.handleError(error);\r\n }\r\n }\r\n\r\n /**\r\n * Process an authentication request\r\n * @param {String} message - Authentication message\r\n */\r\n private async authenticate(\r\n message: SocketAuthenticationMessage\r\n ): Promise<void> {\r\n const token = message.payload?.token;\r\n if (!token) {\r\n throw new WebError({\r\n errorCode: 'no-token',\r\n message: 'No token was given',\r\n data: { message }\r\n });\r\n }\r\n const payload = await jwtVerify(token);\r\n this.setUserData(payload);\r\n\r\n this.authenticated = true;\r\n // Time remaining before token expiration\r\n const authExpiration = payload.exp * 1000 - Date.now();\r\n // Clear previously created timers\r\n this.clearTimeouts();\r\n // Send a refresh request to the client 1 minute before expiration\r\n this.authRenewTimer = setTimeout(\r\n () => {\r\n this.sendMessage('renewAuthentication');\r\n },\r\n authExpiration - 60 * 1000\r\n );\r\n // Expire client authentication\r\n this.authExpireTimer = setTimeout(() => {\r\n this.authenticated = false;\r\n }, authExpiration);\r\n\r\n // Run all the post-authentication callbacks\r\n const callbackResults = await Promise.allSettled(\r\n this.authCallbacks.map((callback) => callback(this))\r\n );\r\n callbackResults.forEach((result) => {\r\n if (result.status === 'rejected') reportError(result.reason);\r\n });\r\n }\r\n\r\n // Clear all the pending timers\r\n /** */\r\n private clearTimeouts(): void {\r\n if (this.authRenewTimer) clearTimeout(this.authRenewTimer);\r\n if (this.authExpireTimer) clearTimeout(this.authExpireTimer);\r\n }\r\n\r\n /**\r\n * Fetch the user's data and attach it to the connection for new connections. For existing connections, it checks that the authentication is done on the same user.\r\n */\r\n private setUserData({ sub, dev, jti, aud }: UserTokenPayload): void {\r\n // Check if the user is already authenticated\r\n if (this.userId) {\r\n // Check that the token is for the same connection as before\r\n if (this.userId && this.userId !== sub)\r\n throw new WebError({\r\n errorCode: 'wrong-user-token',\r\n message:\r\n 'A user tried to authenticate with a token that is not for him [userId]'\r\n });\r\n } else {\r\n // Set the user's ID\r\n this.userId = sub;\r\n // Set the user's Device Id\r\n this.deviceId = dev;\r\n // Set the token ID\r\n this.tokenId = jti;\r\n // Set the aud\r\n this.audience = aud instanceof Array ? aud : [aud];\r\n\r\n reportDebug({\r\n namespace,\r\n message: `Successfully authenticated client [${this.id}]`,\r\n data: {\r\n userId: this.userId,\r\n deviceId: this.deviceId,\r\n tokenId: this.tokenId,\r\n audience: this.audience\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Properly return errors to clients\r\n */\r\n private handleError(error: unknown): void {\r\n reportError(error);\r\n if (error instanceof WebError) {\r\n this.sendMessage(\r\n 'error',\r\n { errorCode: error.errorCode, hint: error.hint },\r\n { noAuth: true }\r\n );\r\n } else if (error instanceof ValidationError) {\r\n this.sendMessage(\r\n 'error',\r\n { errorCode: 'validation-error', hint: error.data },\r\n { noAuth: true }\r\n );\r\n } else {\r\n this.sendMessage(\r\n 'error',\r\n { errorCode: 'server-error' },\r\n { noAuth: true }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Process a socket close event\r\n */\r\n private async handleClose(code?: string, reason?: string): Promise<void> {\r\n delete SocketClient.socketClients[this.id];\r\n this.clearTimeouts();\r\n // Stop ping process\r\n if (this.pingInterval) clearInterval(this.pingInterval);\r\n // Run all the shutdown callbacks\r\n const callbackResults = await Promise.allSettled(\r\n this.shutdownCallbacks.map((callback) => callback(this))\r\n );\r\n callbackResults.forEach((result) => {\r\n if (result.status === 'rejected') reportError(result.reason);\r\n });\r\n reportInfo({\r\n message: `Client disconnected [${this.id}]`,\r\n data: { code, reason }\r\n });\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"SocketClient.types.js","names":[],"sources":["../../../src/entities/SocketClient/SocketClient.types.ts"],"sourcesContent":["import { SocketClient } from './SocketClient';\nimport { MessageHandler } from 'entities/MessageHandler';\n\nexport type SocketClientCallback = (\n client: SocketClient\n) => void | Promise<void>;\n\n/** SocketClient creation option */\nexport interface SocketClientOptions {\n /** List of message handlers that are registered with the client */\n handlers: Array<MessageHandler>;\n /** Callback function that are called when the client is created */\n initCallbacks?: SocketClientCallback | Array<SocketClientCallback>;\n /** Callback function that are called when the client successfully authenticates */\n authCallbacks?: SocketClientCallback | Array<SocketClientCallback>;\n /** Callback function that are called when the client connection is terminated */\n shutdownCallbacks?: SocketClientCallback | Array<SocketClientCallback>;\n}\n\n/** Socket Message abstract typing */\nexport interface SocketMessage<T = unknown> {\n /** A string that identifies the message type */\n type: string;\n /** Free-form data payload of the message */\n payload: T;\n}\n\n/** SocketMessage used by client for authentication */\nexport interface SocketAuthenticationMessage extends SocketMessage {\n /** Sting that identifies the message type */\n type: 'authenticate';\n /** Data payload of the message */\n payload: {\n /** Authentication token */\n token: string;\n };\n}\n\n/** Options for sending a message with the client */\nexport interface SocketClientSendMessageOptions {\n /** Send message event if the user is not authenticated */\n noAuth?: boolean;\n /** Audience that the authenticated user must have on his token to continue */\n audience?: string;\n}\n\n/** Map of socket clients connected to the server */\nexport interface SocketClientList {\n [id: string]: SocketClient;\n}\n\n/** User that authenticated though his socket */\nexport interface SocketUser {\n /** ID od the user */\n userId: string;\n /** ID of the device */\n deviceId: string;\n /** ID of the token used */\n tokenId: string;\n /** Audience included in the token */\n audience: Array<string>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"SocketClient.types.js","names":[],"sources":["../../../src/entities/SocketClient/SocketClient.types.ts"],"sourcesContent":["import { SocketClient } from './SocketClient';\r\nimport { MessageHandler } from 'entities/MessageHandler';\r\n\r\nexport type SocketClientCallback = (\r\n client: SocketClient\r\n) => void | Promise<void>;\r\n\r\n/** SocketClient creation option */\r\nexport interface SocketClientOptions {\r\n /** List of message handlers that are registered with the client */\r\n handlers: Array<MessageHandler>;\r\n /** Callback function that are called when the client is created */\r\n initCallbacks?: SocketClientCallback | Array<SocketClientCallback>;\r\n /** Callback function that are called when the client successfully authenticates */\r\n authCallbacks?: SocketClientCallback | Array<SocketClientCallback>;\r\n /** Callback function that are called when the client connection is terminated */\r\n shutdownCallbacks?: SocketClientCallback | Array<SocketClientCallback>;\r\n}\r\n\r\n/** Socket Message abstract typing */\r\nexport interface SocketMessage<T = unknown> {\r\n /** A string that identifies the message type */\r\n type: string;\r\n /** Free-form data payload of the message */\r\n payload: T;\r\n}\r\n\r\n/** SocketMessage used by client for authentication */\r\nexport interface SocketAuthenticationMessage extends SocketMessage {\r\n /** Sting that identifies the message type */\r\n type: 'authenticate';\r\n /** Data payload of the message */\r\n payload: {\r\n /** Authentication token */\r\n token: string;\r\n };\r\n}\r\n\r\n/** Options for sending a message with the client */\r\nexport interface SocketClientSendMessageOptions {\r\n /** Send message event if the user is not authenticated */\r\n noAuth?: boolean;\r\n /** Audience that the authenticated user must have on his token to continue */\r\n audience?: string;\r\n}\r\n\r\n/** Map of socket clients connected to the server */\r\nexport interface SocketClientList {\r\n [id: string]: SocketClient;\r\n}\r\n\r\n/** User that authenticated though his socket */\r\nexport interface SocketUser {\r\n /** ID od the user */\r\n userId: string;\r\n /** ID of the device */\r\n deviceId: string;\r\n /** ID of the token used */\r\n tokenId: string;\r\n /** Audience included in the token */\r\n audience: Array<string>;\r\n}\r\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_SocketClient","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_SocketClient2"],"sources":["../../../src/entities/SocketClient/index.ts"],"sourcesContent":["export * from './SocketClient';\nexport * from './SocketClient.types';\n"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_SocketClient","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_SocketClient2"],"sources":["../../../src/entities/SocketClient/index.ts"],"sourcesContent":["export * from './SocketClient';\r\nexport * from './SocketClient.types';\r\n"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_parseMessage","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/entities/SocketClient/parseMessage/index.ts"],"sourcesContent":["export * from './parseMessage';\n"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_parseMessage","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/entities/SocketClient/parseMessage/index.ts"],"sourcesContent":["export * from './parseMessage';\r\n"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.parseMessage = parseMessage;
7
7
  var _WebError = require("../../WebError");
8
- /**
9
- * Parse an incoming message into a JSON object
8
+ /**
9
+ * Parse an incoming message into a JSON object
10
10
  */
11
11
  function parseMessage(data) {
12
12
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"parseMessage.js","names":["_WebError","require","parseMessage","data","message","JSON","parse","constructor","name","WebError","statusCode","errorCode"],"sources":["../../../../src/entities/SocketClient/parseMessage/parseMessage.ts"],"sourcesContent":["import { SocketMessage } from '../SocketClient.types';\nimport { WebError } from 'entities/WebError';\n\n/**\n * Parse an incoming message into a JSON object\n */\nexport function parseMessage(data: string): SocketMessage {\n try {\n const message = JSON.parse(data) as SocketMessage;\n if (message.constructor.name !== 'Object')\n throw new WebError({\n statusCode: 400,\n errorCode: 'non-json',\n message: 'Received message is not an object',\n data: { data }\n });\n return message;\n } catch {\n throw new WebError({\n statusCode: 400,\n errorCode: 'non-json',\n message: 'Received message is not valid JSON',\n data: { data }\n });\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACO,SAASC,YAAYA,CAACC,IAAY,EAAiB;EACxD,IAAI;IACF,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAAkB;IACjD,IAAIC,OAAO,CAACG,WAAW,CAACC,IAAI,KAAK,QAAQ,EACvC,MAAM,IAAIC,kBAAQ,CAAC;MACjBC,UAAU,EAAE,GAAG;MACfC,SAAS,EAAE,UAAU;MACrBP,OAAO,EAAE,mCAAmC;MAC5CD,IAAI,EAAE;QAAEA;MAAK;IACf,CAAC,CAAC;IACJ,OAAOC,OAAO;EAChB,CAAC,CAAC,MAAM;IACN,MAAM,IAAIK,kBAAQ,CAAC;MACjBC,UAAU,EAAE,GAAG;MACfC,SAAS,EAAE,UAAU;MACrBP,OAAO,EAAE,oCAAoC;MAC7CD,IAAI,EAAE;QAAEA;MAAK;IACf,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
1
+ {"version":3,"file":"parseMessage.js","names":["_WebError","require","parseMessage","data","message","JSON","parse","constructor","name","WebError","statusCode","errorCode"],"sources":["../../../../src/entities/SocketClient/parseMessage/parseMessage.ts"],"sourcesContent":["import { SocketMessage } from '../SocketClient.types';\r\nimport { WebError } from 'entities/WebError';\r\n\r\n/**\r\n * Parse an incoming message into a JSON object\r\n */\r\nexport function parseMessage(data: string): SocketMessage {\r\n try {\r\n const message = JSON.parse(data) as SocketMessage;\r\n if (message.constructor.name !== 'Object')\r\n throw new WebError({\r\n statusCode: 400,\r\n errorCode: 'non-json',\r\n message: 'Received message is not an object',\r\n data: { data }\r\n });\r\n return message;\r\n } catch {\r\n throw new WebError({\r\n statusCode: 400,\r\n errorCode: 'non-json',\r\n message: 'Received message is not valid JSON',\r\n data: { data }\r\n });\r\n }\r\n}\r\n"],"mappings":";;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACO,SAASC,YAAYA,CAACC,IAAY,EAAiB;EACxD,IAAI;IACF,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAAkB;IACjD,IAAIC,OAAO,CAACG,WAAW,CAACC,IAAI,KAAK,QAAQ,EACvC,MAAM,IAAIC,kBAAQ,CAAC;MACjBC,UAAU,EAAE,GAAG;MACfC,SAAS,EAAE,UAAU;MACrBP,OAAO,EAAE,mCAAmC;MAC5CD,IAAI,EAAE;QAAEA;MAAK;IACf,CAAC,CAAC;IACJ,OAAOC,OAAO;EAChB,CAAC,CAAC,MAAM;IACN,MAAM,IAAIK,kBAAQ,CAAC;MACjBC,UAAU,EAAE,GAAG;MACfC,SAAS,EAAE,UAAU;MACrBP,OAAO,EAAE,oCAAoC;MAC7CD,IAAI,EAAE;QAAEA;MAAK;IACf,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
@@ -18,14 +18,14 @@ const Storage = exports.Storage = {
18
18
  projectId: process.env.GC_PROJECT,
19
19
  keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS
20
20
  }),
21
- /**
22
- * Upload a file to the cloud storage
23
- * @param readStream - Stream of the file content
24
- * @param bucket - Bucket in which the file should be stored
25
- * @param destinationOptions - Options for the destination generator [see: generateFileDestination(options)]
26
- * @param storageOptions - Storage library options
27
- * @param uploaderOptions - Options for this service's specific behavior
28
- * @return {Promise<Object>} - Details regarding the uploaded file's metadata
21
+ /**
22
+ * Upload a file to the cloud storage
23
+ * @param readStream - Stream of the file content
24
+ * @param bucket - Bucket in which the file should be stored
25
+ * @param destinationOptions - Options for the destination generator [see: generateFileDestination(options)]
26
+ * @param storageOptions - Storage library options
27
+ * @param uploaderOptions - Options for this service's specific behavior
28
+ * @return {Promise<Object>} - Details regarding the uploaded file's metadata
29
29
  */
30
30
  async upload(readStream, bucket, destinationOptions = {}, storageOptions = {}, uploaderOptions = {}) {
31
31
  const {
@@ -121,8 +121,8 @@ const Storage = exports.Storage = {
121
121
  });
122
122
  });
123
123
  },
124
- /**
125
- * Return the read stream for a given file and bucket
124
+ /**
125
+ * Return the read stream for a given file and bucket
126
126
  */
127
127
  async get(bucket, path) {
128
128
  const file = this.cloudStorage.bucket(bucket).file(path);
@@ -141,8 +141,8 @@ const Storage = exports.Storage = {
141
141
  metadata
142
142
  };
143
143
  },
144
- /**
145
- * Return the read stream for a given file and bucket
144
+ /**
145
+ * Return the read stream for a given file and bucket
146
146
  */
147
147
  async download(bucket, path) {
148
148
  const file = this.cloudStorage.bucket(bucket).file(path);
@@ -161,10 +161,10 @@ const Storage = exports.Storage = {
161
161
  metadata
162
162
  };
163
163
  },
164
- /**
165
- * Return the read stream for a given file path and bucket
166
- * @param {String} bucket
167
- * @param {String} path
164
+ /**
165
+ * Return the read stream for a given file path and bucket
166
+ * @param {String} bucket
167
+ * @param {String} path
168
168
  */
169
169
  getFileStream(bucket, path) {
170
170
  const file = this.cloudStorage.bucket(bucket).file(path);
@@ -178,8 +178,8 @@ const Storage = exports.Storage = {
178
178
  });
179
179
  return file.createReadStream();
180
180
  },
181
- /**
182
- * Delete a file from the cloud storage
181
+ /**
182
+ * Delete a file from the cloud storage
183
183
  */
184
184
  async delete(bucket, path) {
185
185
  (0, _report.reportDebug)({
@@ -192,8 +192,8 @@ const Storage = exports.Storage = {
192
192
  });
193
193
  await this.cloudStorage.bucket(bucket).file(path).delete();
194
194
  },
195
- /**
196
- * Builds the full file path on the cloud and generates it a random name
195
+ /**
196
+ * Builds the full file path on the cloud and generates it a random name
197
197
  */
198
198
  generateFileDestination(options = {}) {
199
199
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.js","names":["_crypto","require","_storage","_filesizeParser","_interopRequireDefault","_mimeTypes","_WebError","_report","_trimPathSlash","namespace","Storage","exports","cloudStorage","CloudStorage","projectId","process","env","GC_PROJECT","keyFilename","GOOGLE_APPLICATION_CREDENTIALS","upload","readStream","bucket","destinationOptions","storageOptions","uploaderOptions","maxSize","file","reportDebug","message","data","fileName","directory","trimmedDirectory","trimPathSlash","path","generateFileDestination","exists","Promise","resolve","reject","receivedSize","writeStream","createWriteStream","intMaxSize","fileSizeParser","on","length","WebError","statusCode","errorCode","hint","write","err","end","metadata","getMetadata","catch","error","get","all","download","stream","createReadStream","getFileStream","delete","options","mime","noExtension","extension","mimeTypes","undefined","fullName","randomUUID"],"sources":["../../../src/entities/Storage/Storage.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { Readable } from 'stream';\nimport {\n Storage as CloudStorage,\n CreateWriteStreamOptions,\n File\n} from '@google-cloud/storage';\nimport fileSizeParser from 'filesize-parser';\nimport mimeTypes from 'mime-types';\nimport {\n UploadDestinationOptions,\n StorageUploadedFile,\n UploaderOptions,\n StorageGetResponse,\n StorageDownloadResponse\n} from './Storage.types';\nimport { WebError } from 'entities/WebError';\nimport { reportDebug } from 'utils/report';\nimport { trimPathSlash } from 'utils/trimPathSlash';\n\nconst namespace = 'engine:storage';\n\nexport const Storage = {\n cloudStorage: new CloudStorage({\n projectId: process.env.GC_PROJECT,\n keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS\n }),\n\n /**\n * Upload a file to the cloud storage\n * @param readStream - Stream of the file content\n * @param bucket - Bucket in which the file should be stored\n * @param destinationOptions - Options for the destination generator [see: generateFileDestination(options)]\n * @param storageOptions - Storage library options\n * @param uploaderOptions - Options for this service's specific behavior\n * @return {Promise<Object>} - Details regarding the uploaded file's metadata\n */\n async upload(\n readStream: Readable,\n bucket: string,\n destinationOptions: UploadDestinationOptions = {},\n storageOptions: CreateWriteStreamOptions = {},\n uploaderOptions: UploaderOptions = {}\n ): Promise<StorageUploadedFile> {\n const { maxSize } = uploaderOptions;\n\n let file: File;\n reportDebug({\n namespace,\n message: 'Uploading file to storage',\n data: { bucket, destinationOptions, storageOptions, uploaderOptions }\n });\n\n // Generate the file path\n // We either use a given file name, or we generate a random file name\n const { fileName, directory } = destinationOptions;\n\n // Upload file with given file name\n if (fileName) {\n // Only keep required slashes in full path\n const trimmedDirectory = trimPathSlash(directory ?? '/');\n const path = `${trimmedDirectory}/${fileName}`;\n file = this.cloudStorage.bucket(bucket).file(path);\n }\n // Generate random destination for file and check that it is not already occupied\n else {\n do {\n const path = this.generateFileDestination(destinationOptions);\n file = this.cloudStorage.bucket(bucket).file(path);\n } while ((await file.exists())[0]);\n }\n\n // Pipe user's file stream to the storage\n return new Promise((resolve, reject) => {\n let receivedSize = 0;\n const writeStream = file.createWriteStream(storageOptions);\n const intMaxSize = maxSize && fileSizeParser(maxSize);\n // Calculate transferred size and write to storage stream\n readStream.on('data', function (data: Buffer) {\n receivedSize += data.length;\n // Fail if transferred data over max size\n if (intMaxSize && receivedSize > intMaxSize) {\n reject(\n new WebError({\n statusCode: 413,\n errorCode: 'file-too-large',\n message: 'Request contains a file that is over the maximum size',\n hint: { maxSize },\n data: {\n bucket,\n destinationOptions,\n storageOptions,\n receivedSize,\n maxSize\n }\n })\n );\n return;\n }\n writeStream.write(data);\n });\n // Error handling\n readStream.on('error', (err) => {\n reject(err);\n });\n writeStream.on('error', (err) => {\n reject(err);\n });\n // Graceful termination of the read\n readStream.on('end', () => {\n writeStream.end();\n });\n // Graceful termination of the write\n writeStream.on('finish', () => {\n (async (): Promise<void> => {\n const [metadata] = (await file.getMetadata()) as [\n StorageUploadedFile,\n unknown\n ];\n reportDebug({\n namespace,\n message: 'File uploaded to storage',\n data: metadata\n });\n resolve(metadata);\n })().catch((error) => {\n reject(error);\n });\n });\n });\n },\n\n /**\n * Return the read stream for a given file and bucket\n */\n async get(bucket: string, path: string): Promise<StorageGetResponse> {\n const file = this.cloudStorage.bucket(bucket).file(path);\n const [[metadata], [data]] = (await Promise.all([\n file.getMetadata(),\n file.download()\n ])) as [[StorageUploadedFile, unknown], [Buffer]];\n reportDebug({\n namespace,\n message: 'Downloaded file from storage',\n data: { bucket, path, metadata }\n });\n return {\n data,\n metadata\n };\n },\n\n /**\n * Return the read stream for a given file and bucket\n */\n async download(\n bucket: string,\n path: string\n ): Promise<StorageDownloadResponse> {\n const file = this.cloudStorage.bucket(bucket).file(path);\n const [metadata] = (await file.getMetadata()) as [\n StorageUploadedFile,\n unknown\n ];\n reportDebug({\n namespace,\n message: 'Fetched file stream from storage',\n data: { bucket, path, metadata }\n });\n return {\n stream: file.createReadStream(),\n metadata\n };\n },\n\n /**\n * Return the read stream for a given file path and bucket\n * @param {String} bucket\n * @param {String} path\n */\n getFileStream(bucket: string, path: string): Readable {\n const file = this.cloudStorage.bucket(bucket).file(path);\n reportDebug({\n namespace,\n message: \"Fetched file stream from storage's bucket\",\n data: { bucket, path }\n });\n return file.createReadStream();\n },\n\n /**\n * Delete a file from the cloud storage\n */\n async delete(bucket: string, path: string): Promise<void> {\n reportDebug({\n namespace,\n message: 'Deleting file from storage',\n data: { bucket, path }\n });\n await this.cloudStorage.bucket(bucket).file(path).delete();\n },\n\n /**\n * Builds the full file path on the cloud and generates it a random name\n */\n generateFileDestination(options: UploadDestinationOptions = {}): string {\n const { directory = '/', mime, noExtension = false } = options;\n\n // use provided mime type default otherwise\n const extension =\n mime && mimeTypes.extension(mime) ? mimeTypes.extension(mime) : undefined;\n // Build the full name\n const fullName =\n extension && !noExtension ? `${randomUUID()}.${extension}` : randomUUID();\n // Only keep required slashes in full path\n const trimmedDirectory = trimPathSlash(directory);\n return `${trimmedDirectory ? `${trimmedDirectory}/` : ''}${fullName}`;\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Storage.js","names":["_crypto","require","_storage","_filesizeParser","_interopRequireDefault","_mimeTypes","_WebError","_report","_trimPathSlash","namespace","Storage","exports","cloudStorage","CloudStorage","projectId","process","env","GC_PROJECT","keyFilename","GOOGLE_APPLICATION_CREDENTIALS","upload","readStream","bucket","destinationOptions","storageOptions","uploaderOptions","maxSize","file","reportDebug","message","data","fileName","directory","trimmedDirectory","trimPathSlash","path","generateFileDestination","exists","Promise","resolve","reject","receivedSize","writeStream","createWriteStream","intMaxSize","fileSizeParser","on","length","WebError","statusCode","errorCode","hint","write","err","end","metadata","getMetadata","catch","error","get","all","download","stream","createReadStream","getFileStream","delete","options","mime","noExtension","extension","mimeTypes","undefined","fullName","randomUUID"],"sources":["../../../src/entities/Storage/Storage.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\r\nimport { Readable } from 'stream';\r\nimport {\r\n Storage as CloudStorage,\r\n CreateWriteStreamOptions,\r\n File\r\n} from '@google-cloud/storage';\r\nimport fileSizeParser from 'filesize-parser';\r\nimport mimeTypes from 'mime-types';\r\nimport {\r\n UploadDestinationOptions,\r\n StorageUploadedFile,\r\n UploaderOptions,\r\n StorageGetResponse,\r\n StorageDownloadResponse\r\n} from './Storage.types';\r\nimport { WebError } from 'entities/WebError';\r\nimport { reportDebug } from 'utils/report';\r\nimport { trimPathSlash } from 'utils/trimPathSlash';\r\n\r\nconst namespace = 'engine:storage';\r\n\r\nexport const Storage = {\r\n cloudStorage: new CloudStorage({\r\n projectId: process.env.GC_PROJECT,\r\n keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS\r\n }),\r\n\r\n /**\r\n * Upload a file to the cloud storage\r\n * @param readStream - Stream of the file content\r\n * @param bucket - Bucket in which the file should be stored\r\n * @param destinationOptions - Options for the destination generator [see: generateFileDestination(options)]\r\n * @param storageOptions - Storage library options\r\n * @param uploaderOptions - Options for this service's specific behavior\r\n * @return {Promise<Object>} - Details regarding the uploaded file's metadata\r\n */\r\n async upload(\r\n readStream: Readable,\r\n bucket: string,\r\n destinationOptions: UploadDestinationOptions = {},\r\n storageOptions: CreateWriteStreamOptions = {},\r\n uploaderOptions: UploaderOptions = {}\r\n ): Promise<StorageUploadedFile> {\r\n const { maxSize } = uploaderOptions;\r\n\r\n let file: File;\r\n reportDebug({\r\n namespace,\r\n message: 'Uploading file to storage',\r\n data: { bucket, destinationOptions, storageOptions, uploaderOptions }\r\n });\r\n\r\n // Generate the file path\r\n // We either use a given file name, or we generate a random file name\r\n const { fileName, directory } = destinationOptions;\r\n\r\n // Upload file with given file name\r\n if (fileName) {\r\n // Only keep required slashes in full path\r\n const trimmedDirectory = trimPathSlash(directory ?? '/');\r\n const path = `${trimmedDirectory}/${fileName}`;\r\n file = this.cloudStorage.bucket(bucket).file(path);\r\n }\r\n // Generate random destination for file and check that it is not already occupied\r\n else {\r\n do {\r\n const path = this.generateFileDestination(destinationOptions);\r\n file = this.cloudStorage.bucket(bucket).file(path);\r\n } while ((await file.exists())[0]);\r\n }\r\n\r\n // Pipe user's file stream to the storage\r\n return new Promise((resolve, reject) => {\r\n let receivedSize = 0;\r\n const writeStream = file.createWriteStream(storageOptions);\r\n const intMaxSize = maxSize && fileSizeParser(maxSize);\r\n // Calculate transferred size and write to storage stream\r\n readStream.on('data', function (data: Buffer) {\r\n receivedSize += data.length;\r\n // Fail if transferred data over max size\r\n if (intMaxSize && receivedSize > intMaxSize) {\r\n reject(\r\n new WebError({\r\n statusCode: 413,\r\n errorCode: 'file-too-large',\r\n message: 'Request contains a file that is over the maximum size',\r\n hint: { maxSize },\r\n data: {\r\n bucket,\r\n destinationOptions,\r\n storageOptions,\r\n receivedSize,\r\n maxSize\r\n }\r\n })\r\n );\r\n return;\r\n }\r\n writeStream.write(data);\r\n });\r\n // Error handling\r\n readStream.on('error', (err) => {\r\n reject(err);\r\n });\r\n writeStream.on('error', (err) => {\r\n reject(err);\r\n });\r\n // Graceful termination of the read\r\n readStream.on('end', () => {\r\n writeStream.end();\r\n });\r\n // Graceful termination of the write\r\n writeStream.on('finish', () => {\r\n (async (): Promise<void> => {\r\n const [metadata] = (await file.getMetadata()) as [\r\n StorageUploadedFile,\r\n unknown\r\n ];\r\n reportDebug({\r\n namespace,\r\n message: 'File uploaded to storage',\r\n data: metadata\r\n });\r\n resolve(metadata);\r\n })().catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n },\r\n\r\n /**\r\n * Return the read stream for a given file and bucket\r\n */\r\n async get(bucket: string, path: string): Promise<StorageGetResponse> {\r\n const file = this.cloudStorage.bucket(bucket).file(path);\r\n const [[metadata], [data]] = (await Promise.all([\r\n file.getMetadata(),\r\n file.download()\r\n ])) as [[StorageUploadedFile, unknown], [Buffer]];\r\n reportDebug({\r\n namespace,\r\n message: 'Downloaded file from storage',\r\n data: { bucket, path, metadata }\r\n });\r\n return {\r\n data,\r\n metadata\r\n };\r\n },\r\n\r\n /**\r\n * Return the read stream for a given file and bucket\r\n */\r\n async download(\r\n bucket: string,\r\n path: string\r\n ): Promise<StorageDownloadResponse> {\r\n const file = this.cloudStorage.bucket(bucket).file(path);\r\n const [metadata] = (await file.getMetadata()) as [\r\n StorageUploadedFile,\r\n unknown\r\n ];\r\n reportDebug({\r\n namespace,\r\n message: 'Fetched file stream from storage',\r\n data: { bucket, path, metadata }\r\n });\r\n return {\r\n stream: file.createReadStream(),\r\n metadata\r\n };\r\n },\r\n\r\n /**\r\n * Return the read stream for a given file path and bucket\r\n * @param {String} bucket\r\n * @param {String} path\r\n */\r\n getFileStream(bucket: string, path: string): Readable {\r\n const file = this.cloudStorage.bucket(bucket).file(path);\r\n reportDebug({\r\n namespace,\r\n message: \"Fetched file stream from storage's bucket\",\r\n data: { bucket, path }\r\n });\r\n return file.createReadStream();\r\n },\r\n\r\n /**\r\n * Delete a file from the cloud storage\r\n */\r\n async delete(bucket: string, path: string): Promise<void> {\r\n reportDebug({\r\n namespace,\r\n message: 'Deleting file from storage',\r\n data: { bucket, path }\r\n });\r\n await this.cloudStorage.bucket(bucket).file(path).delete();\r\n },\r\n\r\n /**\r\n * Builds the full file path on the cloud and generates it a random name\r\n */\r\n generateFileDestination(options: UploadDestinationOptions = {}): string {\r\n const { directory = '/', mime, noExtension = false } = options;\r\n\r\n // use provided mime type default otherwise\r\n const extension =\r\n mime && mimeTypes.extension(mime) ? mimeTypes.extension(mime) : undefined;\r\n // Build the full name\r\n const fullName =\r\n extension && !noExtension ? `${randomUUID()}.${extension}` : randomUUID();\r\n // Only keep required slashes in full path\r\n const trimmedDirectory = trimPathSlash(directory);\r\n return `${trimmedDirectory ? `${trimmedDirectory}/` : ''}${fullName}`;\r\n }\r\n};\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.types.js","names":[],"sources":["../../../src/entities/Storage/Storage.types.ts"],"sourcesContent":["import { Readable } from 'stream';\n\n/** Options to set where an uploaded file is stored in the bucket */\nexport interface UploadDestinationOptions {\n /** Directory of the bucket in which the file is stored. Defaults to the root directory */\n directory?: string;\n /** Name under which the file is stored. If specified, the file is stored with that name. Otherwise random name generation is done */\n fileName?: string;\n /** When using random file name generation (ie: fileName is undefined). We use the MIME type to determine which is the best extension to apply to the file */\n mime?: string;\n /** When using random file name generation (ie: fileName is undefined), use this parameter to skip adding an extension to the file */\n noExtension?: boolean;\n}\n\n/** Options of the file uploader */\nexport interface UploaderOptions {\n /** Maximum size of the file (ex: 2MB) */\n maxSize?: string;\n}\n\n/** Object representing a file that has been uploaded */\nexport interface StorageUploadedFile {\n /** Bucket in which the file has been uploaded */\n bucket: string;\n /** Name of the stored object with path */\n name: string;\n /** Content-type of the file */\n contentType: string;\n /** Byte size of the file */\n size: string;\n /** ISO string of the creation date */\n timeCreated: string;\n /** ISO string of the update date */\n updated: string;\n /** MD5 hash of the content */\n md5Hash: string;\n /** CRC32C hash of the content */\n crc32c: string;\n /** Storage class applied */\n storageClass: string;\n}\n\n/** Return type for a file download */\nexport interface StorageGetResponse {\n /** The file raw binary content */\n data: Buffer;\n /** The file's metadata */\n metadata: StorageUploadedFile;\n}\n\n/** Return time for a file streaming fetching */\nexport interface StorageDownloadResponse {\n /** A readable stream with the file's content */\n stream: Readable;\n /** The file's metadata */\n metadata: StorageUploadedFile;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"Storage.types.js","names":[],"sources":["../../../src/entities/Storage/Storage.types.ts"],"sourcesContent":["import { Readable } from 'stream';\r\n\r\n/** Options to set where an uploaded file is stored in the bucket */\r\nexport interface UploadDestinationOptions {\r\n /** Directory of the bucket in which the file is stored. Defaults to the root directory */\r\n directory?: string;\r\n /** Name under which the file is stored. If specified, the file is stored with that name. Otherwise random name generation is done */\r\n fileName?: string;\r\n /** When using random file name generation (ie: fileName is undefined). We use the MIME type to determine which is the best extension to apply to the file */\r\n mime?: string;\r\n /** When using random file name generation (ie: fileName is undefined), use this parameter to skip adding an extension to the file */\r\n noExtension?: boolean;\r\n}\r\n\r\n/** Options of the file uploader */\r\nexport interface UploaderOptions {\r\n /** Maximum size of the file (ex: 2MB) */\r\n maxSize?: string;\r\n}\r\n\r\n/** Object representing a file that has been uploaded */\r\nexport interface StorageUploadedFile {\r\n /** Bucket in which the file has been uploaded */\r\n bucket: string;\r\n /** Name of the stored object with path */\r\n name: string;\r\n /** Content-type of the file */\r\n contentType: string;\r\n /** Byte size of the file */\r\n size: string;\r\n /** ISO string of the creation date */\r\n timeCreated: string;\r\n /** ISO string of the update date */\r\n updated: string;\r\n /** MD5 hash of the content */\r\n md5Hash: string;\r\n /** CRC32C hash of the content */\r\n crc32c: string;\r\n /** Storage class applied */\r\n storageClass: string;\r\n}\r\n\r\n/** Return type for a file download */\r\nexport interface StorageGetResponse {\r\n /** The file raw binary content */\r\n data: Buffer;\r\n /** The file's metadata */\r\n metadata: StorageUploadedFile;\r\n}\r\n\r\n/** Return time for a file streaming fetching */\r\nexport interface StorageDownloadResponse {\r\n /** A readable stream with the file's content */\r\n stream: Readable;\r\n /** The file's metadata */\r\n metadata: StorageUploadedFile;\r\n}\r\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_Storage","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_Storage2"],"sources":["../../../src/entities/Storage/index.ts"],"sourcesContent":["export * from './Storage';\nexport * from './Storage.types';\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,SAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,SAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,SAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,SAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_Storage","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_Storage2"],"sources":["../../../src/entities/Storage/index.ts"],"sourcesContent":["export * from './Storage';\r\nexport * from './Storage.types';\r\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,SAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,SAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,SAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,SAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationError.js","names":["_const","require","_EngineError","_WebError2","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","ValidationError","exports","_WebError","validationResult","_classCallCheck2","isEmpty","EngineError","message","errors","array","hint","reduce","error","type","msg","errorCode","statusCode","severity","LogSeverity","WARNING","data","_inherits2","_createClass2","WebError"],"sources":["../../../src/entities/ValidationError/ValidationError.ts"],"sourcesContent":["import {\n ValidationError as ExpressValidationError,\n Result\n} from 'express-validator';\nimport { LogSeverity } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { WebError } from 'entities/WebError';\n\n/** Error class for request/message validation errors */\nexport class ValidationError extends WebError {\n /** Create an ValidationError this represents errors in parsing incoming messages/requests */\n public constructor(validationResult: Result<ExpressValidationError>) {\n if (validationResult.isEmpty())\n throw new EngineError({\n message:\n 'Attempted to create a validation error while validation was successful'\n });\n\n const errors = validationResult.array();\n // Hint that is sent to the client as logged as data\n const hint = errors.reduce(\n (hint, error) => ({ ...hint, [error.type]: error.msg as string }),\n {}\n );\n super({\n message: 'Request did not pass validation',\n errorCode: 'invalid-request',\n statusCode: 400,\n severity: LogSeverity.WARNING,\n data: hint,\n hint\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAA6C,SAAAG,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,OAAA,CAAAC,SAAA,CAAAP,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAS,WAAA,IAAAR,CAAA,CAAAS,KAAA,CAAAV,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAW,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAP,OAAA,CAAAC,SAAA,CAAAG,OAAA,iCAAAX,CAAA,aAAAM,yBAAA,YAAAA,CAAA,aAAAN,CAAA;AAE7C;AAAA,IACae,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAAE,SAAA;EAC1B;EACA,SAAAF,gBAAmBG,gBAAgD,EAAE;IAAA,IAAAC,gBAAA,CAAAf,OAAA,QAAAW,eAAA;IACnE,IAAIG,gBAAgB,CAACE,OAAO,CAAC,CAAC,EAC5B,MAAM,IAAIC,wBAAW,CAAC;MACpBC,OAAO,EACL;IACJ,CAAC,CAAC;IAEJ,MAAMC,MAAM,GAAGL,gBAAgB,CAACM,KAAK,CAAC,CAAC;IACvC;IACA,MAAMC,IAAI,GAAGF,MAAM,CAACG,MAAM,CACxB,CAACD,IAAI,EAAEE,KAAK,MAAM;MAAE,GAAGF,IAAI;MAAE,CAACE,KAAK,CAACC,IAAI,GAAGD,KAAK,CAACE;IAAc,CAAC,CAAC,EACjE,CAAC,CACH,CAAC;IAAC,OAAA9B,UAAA,OAAAgB,eAAA,GACI;MACJO,OAAO,EAAE,iCAAiC;MAC1CQ,SAAS,EAAE,iBAAiB;MAC5BC,UAAU,EAAE,GAAG;MACfC,QAAQ,EAAEC,kBAAW,CAACC,OAAO;MAC7BC,IAAI,EAAEV,IAAI;MACVA;IACF,CAAC;EACH;EAAC,IAAAW,UAAA,CAAAhC,OAAA,EAAAW,eAAA,EAAAE,SAAA;EAAA,WAAAoB,aAAA,CAAAjC,OAAA,EAAAW,eAAA;AAAA,EAvBkCuB,mBAAQ","ignoreList":[]}
1
+ {"version":3,"file":"ValidationError.js","names":["_const","require","_EngineError","_WebError2","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","ValidationError","exports","_WebError","validationResult","_classCallCheck2","isEmpty","EngineError","message","errors","array","hint","reduce","error","type","msg","errorCode","statusCode","severity","LogSeverity","WARNING","data","_inherits2","_createClass2","WebError"],"sources":["../../../src/entities/ValidationError/ValidationError.ts"],"sourcesContent":["import {\r\n ValidationError as ExpressValidationError,\r\n Result\r\n} from 'express-validator';\r\nimport { LogSeverity } from 'const';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { WebError } from 'entities/WebError';\r\n\r\n/** Error class for request/message validation errors */\r\nexport class ValidationError extends WebError {\r\n /** Create an ValidationError this represents errors in parsing incoming messages/requests */\r\n public constructor(validationResult: Result<ExpressValidationError>) {\r\n if (validationResult.isEmpty())\r\n throw new EngineError({\r\n message:\r\n 'Attempted to create a validation error while validation was successful'\r\n });\r\n\r\n const errors = validationResult.array();\r\n // Hint that is sent to the client as logged as data\r\n const hint = errors.reduce(\r\n (hint, error) => ({ ...hint, [error.type]: error.msg as string }),\r\n {}\r\n );\r\n super({\r\n message: 'Request did not pass validation',\r\n errorCode: 'invalid-request',\r\n statusCode: 400,\r\n severity: LogSeverity.WARNING,\r\n data: hint,\r\n hint\r\n });\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAA6C,SAAAG,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,OAAA,CAAAC,SAAA,CAAAP,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAS,WAAA,IAAAR,CAAA,CAAAS,KAAA,CAAAV,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAW,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAP,OAAA,CAAAC,SAAA,CAAAG,OAAA,iCAAAX,CAAA,aAAAM,yBAAA,YAAAA,CAAA,aAAAN,CAAA;AAE7C;AAAA,IACae,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAAE,SAAA;EAC1B;EACA,SAAAF,gBAAmBG,gBAAgD,EAAE;IAAA,IAAAC,gBAAA,CAAAf,OAAA,QAAAW,eAAA;IACnE,IAAIG,gBAAgB,CAACE,OAAO,CAAC,CAAC,EAC5B,MAAM,IAAIC,wBAAW,CAAC;MACpBC,OAAO,EACL;IACJ,CAAC,CAAC;IAEJ,MAAMC,MAAM,GAAGL,gBAAgB,CAACM,KAAK,CAAC,CAAC;IACvC;IACA,MAAMC,IAAI,GAAGF,MAAM,CAACG,MAAM,CACxB,CAACD,IAAI,EAAEE,KAAK,MAAM;MAAE,GAAGF,IAAI;MAAE,CAACE,KAAK,CAACC,IAAI,GAAGD,KAAK,CAACE;IAAc,CAAC,CAAC,EACjE,CAAC,CACH,CAAC;IAAC,OAAA9B,UAAA,OAAAgB,eAAA,GACI;MACJO,OAAO,EAAE,iCAAiC;MAC1CQ,SAAS,EAAE,iBAAiB;MAC5BC,UAAU,EAAE,GAAG;MACfC,QAAQ,EAAEC,kBAAW,CAACC,OAAO;MAC7BC,IAAI,EAAEV,IAAI;MACVA;IACF,CAAC;EACH;EAAC,IAAAW,UAAA,CAAAhC,OAAA,EAAAW,eAAA,EAAAE,SAAA;EAAA,WAAAoB,aAAA,CAAAjC,OAAA,EAAAW,eAAA;AAAA,EAvBkCuB,mBAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_ValidationError","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/entities/ValidationError/index.ts"],"sourcesContent":["export * from './ValidationError';\n"],"mappings":";;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,gBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,gBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,gBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_ValidationError","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/entities/ValidationError/index.ts"],"sourcesContent":["export * from './ValidationError';\r\n"],"mappings":";;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,gBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,gBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,gBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -14,12 +14,12 @@ var _const = require("../../const");
14
14
  var _EngineError2 = require("../EngineError");
15
15
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
16
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function () { return !!t; })(); }
17
- /**
18
- * Error class used when errors should be reported to the client
17
+ /**
18
+ * Error class used when errors should be reported to the client
19
19
  */
20
20
  let WebError = exports.WebError = /*#__PURE__*/function (_EngineError) {
21
- /**
22
- * Create a WebError, these errors are best suited for runtime errors
21
+ /**
22
+ * Create a WebError, these errors are best suited for runtime errors
23
23
  */
24
24
  function WebError(config) {
25
25
  var _this;
@@ -1 +1 @@
1
- {"version":3,"file":"WebError.js","names":["_const","require","_EngineError2","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","WebError","exports","_EngineError","config","_this","_classCallCheck2","severity","LogSeverity","WARNING","errorCode","statusCode","_inherits2","_createClass2","EngineError"],"sources":["../../../src/entities/WebError/WebError.ts"],"sourcesContent":["import { WebErrorOptions } from './WebError.types';\nimport { LogSeverity } from 'const';\nimport { EngineError } from 'entities/EngineError';\n\n/**\n * Error class used when errors should be reported to the client\n */\nexport class WebError extends EngineError {\n /** Machine readable error code that will be sent to the client */\n public errorCode: string;\n /** HTTP status code associated with this error */\n public statusCode: number;\n\n /**\n * Create a WebError, these errors are best suited for runtime errors\n */\n public constructor(config: WebErrorOptions) {\n super({ ...config, severity: config.severity ?? LogSeverity.WARNING });\n\n this.statusCode = config.statusCode ?? 400;\n this.errorCode = config.errorCode;\n }\n}\n"],"mappings":";;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAAmD,SAAAE,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,OAAA,CAAAC,SAAA,CAAAP,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAS,WAAA,IAAAR,CAAA,CAAAS,KAAA,CAAAV,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAW,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAP,OAAA,CAAAC,SAAA,CAAAG,OAAA,iCAAAX,CAAA,aAAAM,yBAAA,YAAAA,CAAA,aAAAN,CAAA;AAEnD;AACA;AACA;AAFA,IAGae,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAAAE,YAAA;EAMnB;AACF;AACA;EACE,SAAAF,SAAmBG,MAAuB,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAhB,OAAA,QAAAW,QAAA;IAC1CI,KAAA,GAAApB,UAAA,OAAAgB,QAAA,GAAM;MAAE,GAAGG,MAAM;MAAEG,QAAQ,EAAEH,MAAM,CAACG,QAAQ,IAAIC,kBAAW,CAACC;IAAQ,CAAC;IATvE;IAAAJ,KAAA,CACOK,SAAS;IAChB;IAAAL,KAAA,CACOM,UAAU;IAQfN,KAAA,CAAKM,UAAU,GAAGP,MAAM,CAACO,UAAU,IAAI,GAAG;IAC1CN,KAAA,CAAKK,SAAS,GAAGN,MAAM,CAACM,SAAS;IAAC,OAAAL,KAAA;EACpC;EAAC,IAAAO,UAAA,CAAAtB,OAAA,EAAAW,QAAA,EAAAE,YAAA;EAAA,WAAAU,aAAA,CAAAvB,OAAA,EAAAW,QAAA;AAAA,EAd2Ba,yBAAW","ignoreList":[]}
1
+ {"version":3,"file":"WebError.js","names":["_const","require","_EngineError2","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","WebError","exports","_EngineError","config","_this","_classCallCheck2","severity","LogSeverity","WARNING","errorCode","statusCode","_inherits2","_createClass2","EngineError"],"sources":["../../../src/entities/WebError/WebError.ts"],"sourcesContent":["import { WebErrorOptions } from './WebError.types';\r\nimport { LogSeverity } from 'const';\r\nimport { EngineError } from 'entities/EngineError';\r\n\r\n/**\r\n * Error class used when errors should be reported to the client\r\n */\r\nexport class WebError extends EngineError {\r\n /** Machine readable error code that will be sent to the client */\r\n public errorCode: string;\r\n /** HTTP status code associated with this error */\r\n public statusCode: number;\r\n\r\n /**\r\n * Create a WebError, these errors are best suited for runtime errors\r\n */\r\n public constructor(config: WebErrorOptions) {\r\n super({ ...config, severity: config.severity ?? LogSeverity.WARNING });\r\n\r\n this.statusCode = config.statusCode ?? 400;\r\n this.errorCode = config.errorCode;\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAAmD,SAAAE,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,OAAA,CAAAC,SAAA,CAAAP,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAS,WAAA,IAAAR,CAAA,CAAAS,KAAA,CAAAV,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAW,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAP,OAAA,CAAAC,SAAA,CAAAG,OAAA,iCAAAX,CAAA,aAAAM,yBAAA,YAAAA,CAAA,aAAAN,CAAA;AAEnD;AACA;AACA;AAFA,IAGae,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAAAE,YAAA;EAMnB;AACF;AACA;EACE,SAAAF,SAAmBG,MAAuB,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAhB,OAAA,QAAAW,QAAA;IAC1CI,KAAA,GAAApB,UAAA,OAAAgB,QAAA,GAAM;MAAE,GAAGG,MAAM;MAAEG,QAAQ,EAAEH,MAAM,CAACG,QAAQ,IAAIC,kBAAW,CAACC;IAAQ,CAAC;IATvE;IAAAJ,KAAA,CACOK,SAAS;IAChB;IAAAL,KAAA,CACOM,UAAU;IAQfN,KAAA,CAAKM,UAAU,GAAGP,MAAM,CAACO,UAAU,IAAI,GAAG;IAC1CN,KAAA,CAAKK,SAAS,GAAGN,MAAM,CAACM,SAAS;IAAC,OAAAL,KAAA;EACpC;EAAC,IAAAO,UAAA,CAAAtB,OAAA,EAAAW,QAAA,EAAAE,YAAA;EAAA,WAAAU,aAAA,CAAAvB,OAAA,EAAAW,QAAA;AAAA,EAd2Ba,yBAAW","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"WebError.types.js","names":[],"sources":["../../../src/entities/WebError/WebError.types.ts"],"sourcesContent":["import { EngineErrorOptions } from 'entities/EngineError';\n\n/** Options to create a Web Error */\nexport interface WebErrorOptions extends EngineErrorOptions {\n /** Machine readable error code that will be sent to the client */\n errorCode: string;\n /** HTTP status code associated with this error (default: 400) */\n statusCode?: number;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"WebError.types.js","names":[],"sources":["../../../src/entities/WebError/WebError.types.ts"],"sourcesContent":["import { EngineErrorOptions } from 'entities/EngineError';\r\n\r\n/** Options to create a Web Error */\r\nexport interface WebErrorOptions extends EngineErrorOptions {\r\n /** Machine readable error code that will be sent to the client */\r\n errorCode: string;\r\n /** HTTP status code associated with this error (default: 400) */\r\n statusCode?: number;\r\n}\r\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_WebError","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_WebError2"],"sources":["../../../src/entities/WebError/index.ts"],"sourcesContent":["export * from './WebError';\nexport * from './WebError.types';\n"],"mappings":";;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,UAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,UAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,UAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,UAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_WebError","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_WebError2"],"sources":["../../../src/entities/WebError/index.ts"],"sourcesContent":["export * from './WebError';\r\nexport * from './WebError.types';\r\n"],"mappings":";;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,UAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,UAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,UAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,UAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_EngineError","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_WebError","_ValidationError","_KeySet","_Endpoint","_MessageHandler","_SocketClient","_Server","_Redis","_Localizator","_Storage","_Sequelize","_ElasticSearch","_LifecycleController","_PubSub","_PushNotification"],"sources":["../../src/entities/index.ts"],"sourcesContent":["export * from './EngineError';\nexport * from './WebError';\nexport * from './ValidationError';\nexport * from './KeySet';\nexport * from './Endpoint';\nexport * from './MessageHandler';\nexport * from './SocketClient';\nexport * from './Server';\nexport * from './Redis';\nexport * from './Localizator';\nexport * from './Storage';\nexport * from './Sequelize';\nexport * from './ElasticSearch';\nexport * from './LifecycleController';\nexport * from './PubSub';\nexport * from './PushNotification';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_EngineError","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_WebError","_ValidationError","_KeySet","_Endpoint","_MessageHandler","_SocketClient","_Server","_Redis","_Localizator","_Storage","_Sequelize","_ElasticSearch","_LifecycleController","_PubSub","_PushNotification"],"sources":["../../src/entities/index.ts"],"sourcesContent":["export * from './EngineError';\r\nexport * from './WebError';\r\nexport * from './ValidationError';\r\nexport * from './KeySet';\r\nexport * from './Endpoint';\r\nexport * from './MessageHandler';\r\nexport * from './SocketClient';\r\nexport * from './Server';\r\nexport * from './Redis';\r\nexport * from './Localizator';\r\nexport * from './Storage';\r\nexport * from './Sequelize';\r\nexport * from './ElasticSearch';\r\nexport * from './LifecycleController';\r\nexport * from './PubSub';\r\nexport * from './PushNotification';\r\n"],"mappings":"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","ignoreList":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_const","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_entities","_utils","_middleware","_interopRequireWildcard","middleware","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set"],"sources":["../src/index.ts"],"sourcesContent":["export * from './const';\nexport * from './entities';\nexport * from './utils';\nexport * as middleware from './middleware';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_const","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_entities","_utils","_middleware","_interopRequireWildcard","middleware","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set"],"sources":["../src/index.ts"],"sourcesContent":["export * from './const';\r\nexport * from './entities';\r\nexport * from './utils';\r\nexport * as middleware from './middleware';\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","names":["_promClient","require","_const","debugActivated","exports","Gauge","name","help","registers","instanceRegistry","set","process","env","DEBUG","length"],"sources":["../../src/metrics/debug.ts"],"sourcesContent":["import { Gauge } from 'prom-client';\nimport { instanceRegistry } from 'const';\n\nexport const debugActivated = new Gauge({\n name: 'debug_activated',\n help: 'Debug is activated',\n registers: [instanceRegistry]\n});\n\ndebugActivated.set(process.env.DEBUG?.length ? 1 : 0);\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,IAAIE,iBAAK,CAAC;EACtCC,IAAI,EAAE,iBAAiB;EACvBC,IAAI,EAAE,oBAAoB;EAC1BC,SAAS,EAAE,CAACC,uBAAgB;AAC9B,CAAC,CAAC;AAEFN,cAAc,CAACO,GAAG,CAACC,OAAO,CAACC,GAAG,CAACC,KAAK,EAAEC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"debug.js","names":["_promClient","require","_const","debugActivated","exports","Gauge","name","help","registers","instanceRegistry","set","process","env","DEBUG","length"],"sources":["../../src/metrics/debug.ts"],"sourcesContent":["import { Gauge } from 'prom-client';\r\nimport { instanceRegistry } from 'const';\r\n\r\nexport const debugActivated = new Gauge({\r\n name: 'debug_activated',\r\n help: 'Debug is activated',\r\n registers: [instanceRegistry]\r\n});\r\n\r\ndebugActivated.set(process.env.DEBUG?.length ? 1 : 0);\r\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,IAAIE,iBAAK,CAAC;EACtCC,IAAI,EAAE,iBAAiB;EACvBC,IAAI,EAAE,oBAAoB;EAC1BC,SAAS,EAAE,CAACC,uBAAgB;AAC9B,CAAC,CAAC;AAEFN,cAAc,CAACO,GAAG,CAACC,OAAO,CAACC,GAAG,CAACC,KAAK,EAAEC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_request","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_debug"],"sources":["../../src/metrics/index.ts"],"sourcesContent":["export * from './request';\nexport * from './debug';\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,MAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,MAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,MAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,MAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_request","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_debug"],"sources":["../../src/metrics/index.ts"],"sourcesContent":["export * from './request';\r\nexport * from './debug';\r\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,MAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,MAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,MAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,MAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","names":["_promClient","require","_const","httpRequestCount","exports","Counter","name","help","registers","instanceRegistry","labelNames","httpRequestDuration","Histogram","buckets"],"sources":["../../src/metrics/request.ts"],"sourcesContent":["import { Counter, Histogram } from 'prom-client';\nimport { instanceRegistry } from 'const';\n\nexport const httpRequestCount = new Counter({\n name: 'http_requests_total',\n help: 'Total count of request received',\n registers: [instanceRegistry],\n labelNames: ['service', 'path', 'method', 'status']\n});\n\nexport const httpRequestDuration = new Histogram({\n name: 'http_requests_duration',\n help: 'Duration of the request received',\n registers: [instanceRegistry],\n labelNames: ['service', 'path', 'method', 'status'],\n buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 0.5, 1, 2.5, 5, 10]\n});\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,IAAIE,mBAAO,CAAC;EAC1CC,IAAI,EAAE,qBAAqB;EAC3BC,IAAI,EAAE,iCAAiC;EACvCC,SAAS,EAAE,CAACC,uBAAgB,CAAC;EAC7BC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;AACpD,CAAC,CAAC;AAEK,MAAMC,mBAAmB,GAAAP,OAAA,CAAAO,mBAAA,GAAG,IAAIC,qBAAS,CAAC;EAC/CN,IAAI,EAAE,wBAAwB;EAC9BC,IAAI,EAAE,kCAAkC;EACxCC,SAAS,EAAE,CAACC,uBAAgB,CAAC;EAC7BC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;EACnDG,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;AACxE,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"request.js","names":["_promClient","require","_const","httpRequestCount","exports","Counter","name","help","registers","instanceRegistry","labelNames","httpRequestDuration","Histogram","buckets"],"sources":["../../src/metrics/request.ts"],"sourcesContent":["import { Counter, Histogram } from 'prom-client';\r\nimport { instanceRegistry } from 'const';\r\n\r\nexport const httpRequestCount = new Counter({\r\n name: 'http_requests_total',\r\n help: 'Total count of request received',\r\n registers: [instanceRegistry],\r\n labelNames: ['service', 'path', 'method', 'status']\r\n});\r\n\r\nexport const httpRequestDuration = new Histogram({\r\n name: 'http_requests_duration',\r\n help: 'Duration of the request received',\r\n registers: [instanceRegistry],\r\n labelNames: ['service', 'path', 'method', 'status'],\r\n buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 0.5, 1, 2.5, 5, 10]\r\n});\r\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,IAAIE,mBAAO,CAAC;EAC1CC,IAAI,EAAE,qBAAqB;EAC3BC,IAAI,EAAE,iCAAiC;EACvCC,SAAS,EAAE,CAACC,uBAAgB,CAAC;EAC7BC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;AACpD,CAAC,CAAC;AAEK,MAAMC,mBAAmB,GAAAP,OAAA,CAAAO,mBAAA,GAAG,IAAIC,qBAAS,CAAC;EAC/CN,IAAI,EAAE,wBAAwB;EAC9BC,IAAI,EAAE,kCAAkC;EACxCC,SAAS,EAAE,CAACC,uBAAgB,CAAC;EAC7BC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;EACnDG,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;AACxE,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"authAdmin.js","names":["_const","require","_EngineError","_WebError","_utils","namespace","authAdmin","options","permission","EngineError","message","request","response","next","scheme","credentials","headers","authorization","split","toLowerCase","WebError","errorCode","statusCode","data","reportDebug","payload","jwtVerify","TokenIssuer","ADMIN_API","per","permissions","userPermissions","Array","endpointPermission","adminPermissions","checkUserPermissions","admin","email","sub","endpointPermissionParts","userPermissionLoop","permissionParts","length","i"],"sources":["../../../src/middleware/authAdmin/authAdmin.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\nimport { TokenIssuer } from 'const';\nimport { EndpointAuthParams, EndpointAuthType } from 'entities/Endpoint';\nimport { EngineError } from 'entities/EngineError';\nimport { WebError } from 'entities/WebError';\nimport { reportDebug, jwtVerify } from 'utils';\nimport {} from './authAdmin.types';\n\nconst namespace = 'engine:middleware:authAdmin';\n\n/** Generate a middleware to authenticate the client connection with a Admin api */\nexport function authAdmin(\n options: EndpointAuthParams<EndpointAuthType.ADMIN>\n): (request: Request, response: Response, next: NextFunction) => Promise<void> {\n if (!options.permission)\n throw new EngineError({\n message: 'Endpoint using admin auth type must specify permission'\n });\n return async (\n request: Request,\n response: Response,\n next: NextFunction\n ): Promise<void> => {\n const [scheme, credentials] =\n request.headers?.authorization?.split(' ') ?? [];\n // No bearer token has been sent\n if (!credentials || scheme.toLowerCase() !== 'bearer') {\n throw new WebError({\n errorCode: 'unauthorized',\n statusCode: 401,\n message: 'No bearer token found',\n data: { authorization: request.headers?.authorization }\n });\n }\n reportDebug({\n namespace,\n message: 'Performing JWT authentication',\n data: { scheme, credentials }\n });\n // Verify token and extract its payload\n const payload = await jwtVerify(credentials, TokenIssuer.ADMIN_API);\n reportDebug({\n namespace,\n message: 'Extracted user data from JWT',\n data: { payload, credentials }\n });\n\n if (!payload.per)\n throw new WebError({\n errorCode: 'unauthorized',\n statusCode: 401,\n message: `User token does not contain any permission claim`\n });\n\n // User Permission\n const permissions = payload.per;\n const userPermissions =\n permissions instanceof Array ? permissions : [permissions];\n\n reportDebug({\n namespace,\n message: 'Performing Admin Permission check',\n data: {\n permissions,\n endpointPermission: options.permission,\n adminPermissions: userPermissions\n }\n });\n\n if (!checkUserPermissions(userPermissions, options.permission)) {\n throw new WebError({\n errorCode: 'unauthorized',\n statusCode: 401,\n message: `User does not have required permission \"${options.permission}\"`,\n data: { userPermissions }\n });\n }\n\n // The user object on the request is hydrated with data from the token\n request.admin = {\n ...request.admin,\n email: payload.sub,\n permissions: userPermissions\n };\n\n next();\n };\n}\n\n/** */\nfunction checkUserPermissions(\n userPermissions: Array<string>,\n endpointPermission: string\n): boolean {\n const endpointPermissionParts = endpointPermission.split(':');\n userPermissionLoop: for (const permission of userPermissions) {\n const permissionParts = permission.split(':');\n\n // Ignore if both are not same length\n if (permissionParts.length !== endpointPermissionParts.length)\n continue userPermissionLoop;\n\n for (let i = 0; i < permissionParts.length; i++) {\n // Wildcards get automatic validation, otherwise it must match with the same part of the endpoint permission\n if (\n permissionParts[i] !== '*' &&\n permissionParts[i] !== endpointPermissionParts[i]\n )\n continue userPermissionLoop;\n }\n return true;\n }\n return false;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"authAdmin.js","names":["_const","require","_EngineError","_WebError","_utils","namespace","authAdmin","options","permission","EngineError","message","request","response","next","scheme","credentials","headers","authorization","split","toLowerCase","WebError","errorCode","statusCode","data","reportDebug","payload","jwtVerify","TokenIssuer","ADMIN_API","per","permissions","userPermissions","Array","endpointPermission","adminPermissions","checkUserPermissions","admin","email","sub","endpointPermissionParts","userPermissionLoop","permissionParts","length","i"],"sources":["../../../src/middleware/authAdmin/authAdmin.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\r\nimport { TokenIssuer } from 'const';\r\nimport { EndpointAuthParams, EndpointAuthType } from 'entities/Endpoint';\r\nimport { EngineError } from 'entities/EngineError';\r\nimport { WebError } from 'entities/WebError';\r\nimport { reportDebug, jwtVerify } from 'utils';\r\nimport {} from './authAdmin.types';\r\n\r\nconst namespace = 'engine:middleware:authAdmin';\r\n\r\n/** Generate a middleware to authenticate the client connection with a Admin api */\r\nexport function authAdmin(\r\n options: EndpointAuthParams<EndpointAuthType.ADMIN>\r\n): (request: Request, response: Response, next: NextFunction) => Promise<void> {\r\n if (!options.permission)\r\n throw new EngineError({\r\n message: 'Endpoint using admin auth type must specify permission'\r\n });\r\n return async (\r\n request: Request,\r\n response: Response,\r\n next: NextFunction\r\n ): Promise<void> => {\r\n const [scheme, credentials] =\r\n request.headers?.authorization?.split(' ') ?? [];\r\n // No bearer token has been sent\r\n if (!credentials || scheme.toLowerCase() !== 'bearer') {\r\n throw new WebError({\r\n errorCode: 'unauthorized',\r\n statusCode: 401,\r\n message: 'No bearer token found',\r\n data: { authorization: request.headers?.authorization }\r\n });\r\n }\r\n reportDebug({\r\n namespace,\r\n message: 'Performing JWT authentication',\r\n data: { scheme, credentials }\r\n });\r\n // Verify token and extract its payload\r\n const payload = await jwtVerify(credentials, TokenIssuer.ADMIN_API);\r\n reportDebug({\r\n namespace,\r\n message: 'Extracted user data from JWT',\r\n data: { payload, credentials }\r\n });\r\n\r\n if (!payload.per)\r\n throw new WebError({\r\n errorCode: 'unauthorized',\r\n statusCode: 401,\r\n message: `User token does not contain any permission claim`\r\n });\r\n\r\n // User Permission\r\n const permissions = payload.per;\r\n const userPermissions =\r\n permissions instanceof Array ? permissions : [permissions];\r\n\r\n reportDebug({\r\n namespace,\r\n message: 'Performing Admin Permission check',\r\n data: {\r\n permissions,\r\n endpointPermission: options.permission,\r\n adminPermissions: userPermissions\r\n }\r\n });\r\n\r\n if (!checkUserPermissions(userPermissions, options.permission)) {\r\n throw new WebError({\r\n errorCode: 'unauthorized',\r\n statusCode: 401,\r\n message: `User does not have required permission \"${options.permission}\"`,\r\n data: { userPermissions }\r\n });\r\n }\r\n\r\n // The user object on the request is hydrated with data from the token\r\n request.admin = {\r\n ...request.admin,\r\n email: payload.sub,\r\n permissions: userPermissions\r\n };\r\n\r\n next();\r\n };\r\n}\r\n\r\n/** */\r\nfunction checkUserPermissions(\r\n userPermissions: Array<string>,\r\n endpointPermission: string\r\n): boolean {\r\n const endpointPermissionParts = endpointPermission.split(':');\r\n userPermissionLoop: for (const permission of userPermissions) {\r\n const permissionParts = permission.split(':');\r\n\r\n // Ignore if both are not same length\r\n if (permissionParts.length !== endpointPermissionParts.length)\r\n continue userPermissionLoop;\r\n\r\n for (let i = 0; i < permissionParts.length; i++) {\r\n // Wildcards get automatic validation, otherwise it must match with the same part of the endpoint permission\r\n if (\r\n permissionParts[i] !== '*' &&\r\n permissionParts[i] !== endpointPermissionParts[i]\r\n )\r\n continue userPermissionLoop;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"authAdmin.types.js","names":[],"sources":["../../../src/middleware/authAdmin/authAdmin.types.ts"],"sourcesContent":["// Override the Express request object to add the files\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Express {\n /** Express request object */\n interface Request {\n /** User that identified using a JWT */\n admin?: RequestAdminProps;\n }\n }\n}\n\n/** Admin auth properties of the request */\nexport interface RequestAdminProps {\n /** Email address of the user */\n email: string;\n /** List of permissions that the user has */\n permissions: Array<string>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"authAdmin.types.js","names":[],"sources":["../../../src/middleware/authAdmin/authAdmin.types.ts"],"sourcesContent":["// Override the Express request object to add the files\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/no-namespace\r\n namespace Express {\r\n /** Express request object */\r\n interface Request {\r\n /** User that identified using a JWT */\r\n admin?: RequestAdminProps;\r\n }\r\n }\r\n}\r\n\r\n/** Admin auth properties of the request */\r\nexport interface RequestAdminProps {\r\n /** Email address of the user */\r\n email: string;\r\n /** List of permissions that the user has */\r\n permissions: Array<string>;\r\n}\r\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_authAdmin","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_authAdmin2"],"sources":["../../../src/middleware/authAdmin/index.ts"],"sourcesContent":["export * from './authAdmin';\nexport * from './authAdmin.types';\n"],"mappings":";;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,UAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,UAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,UAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,WAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,WAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,WAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,WAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_authAdmin","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_authAdmin2"],"sources":["../../../src/middleware/authAdmin/index.ts"],"sourcesContent":["export * from './authAdmin';\r\nexport * from './authAdmin.types';\r\n"],"mappings":";;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,UAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,UAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,UAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,WAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,WAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,WAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,WAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}