node-server-engine 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/.env.example +193 -193
  2. package/.mocharc.js +13 -13
  3. package/.nycrc +18 -18
  4. package/.prettierrc +7 -7
  5. package/Dockerfile +30 -30
  6. package/README.md +991 -1025
  7. package/babel.config.json +35 -35
  8. package/dist/const/DebeziumEvent.js.map +1 -1
  9. package/dist/const/LogSeverity.js.map +1 -1
  10. package/dist/const/index.js.map +1 -1
  11. package/dist/const/metrics.js.map +1 -1
  12. package/dist/const/mime.js.map +1 -1
  13. package/dist/const/tokenIssuer.js.map +1 -1
  14. package/dist/db/migrations/20241030121500-create-sequelize-meta-table.js.map +1 -1
  15. package/dist/db/models/SequelizeMeta.js.map +1 -1
  16. package/dist/db/models/index.js.map +1 -1
  17. package/dist/entities/ElasticSearch/ElasticSearch.js +7 -7
  18. package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
  19. package/dist/entities/ElasticSearch/ElasticSearch.types.js.map +1 -1
  20. package/dist/entities/ElasticSearch/index.js.map +1 -1
  21. package/dist/entities/Endpoint/Endpoint.js +8 -8
  22. package/dist/entities/Endpoint/Endpoint.js.map +1 -1
  23. package/dist/entities/Endpoint/Endpoint.types.js.map +1 -1
  24. package/dist/entities/Endpoint/index.js.map +1 -1
  25. package/dist/entities/EngineError/EngineError.js +2 -2
  26. package/dist/entities/EngineError/EngineError.js.map +1 -1
  27. package/dist/entities/EngineError/EngineError.types.js.map +1 -1
  28. package/dist/entities/EngineError/index.js.map +1 -1
  29. package/dist/entities/KeySet/KeySet.js +3 -3
  30. package/dist/entities/KeySet/KeySet.js.map +1 -1
  31. package/dist/entities/KeySet/KeySet.types.js.map +1 -1
  32. package/dist/entities/KeySet/index.js.map +1 -1
  33. package/dist/entities/LifecycleController/LifecycleController.js.map +1 -1
  34. package/dist/entities/LifecycleController/LifecycleController.types.js.map +1 -1
  35. package/dist/entities/LifecycleController/index.js.map +1 -1
  36. package/dist/entities/Localizator/Localizator.js +7 -7
  37. package/dist/entities/Localizator/Localizator.js.map +1 -1
  38. package/dist/entities/Localizator/Localizator.types.js.map +1 -1
  39. package/dist/entities/Localizator/guessNamingConvention/guessNamingConvention.js.map +1 -1
  40. package/dist/entities/Localizator/guessNamingConvention/index.js.map +1 -1
  41. package/dist/entities/Localizator/index.js.map +1 -1
  42. package/dist/entities/MessageHandler/MessageHandler.js +2 -2
  43. package/dist/entities/MessageHandler/MessageHandler.js.map +1 -1
  44. package/dist/entities/MessageHandler/MessageHandler.types.js.map +1 -1
  45. package/dist/entities/MessageHandler/index.js.map +1 -1
  46. package/dist/entities/PubSub/PubSub.js +25 -25
  47. package/dist/entities/PubSub/PubSub.js.map +1 -1
  48. package/dist/entities/PubSub/PubSub.types.js.map +1 -1
  49. package/dist/entities/PubSub/handleMessage/handleMessage.js +6 -6
  50. package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
  51. package/dist/entities/PubSub/handleMessage/index.js.map +1 -1
  52. package/dist/entities/PubSub/index.js.map +1 -1
  53. package/dist/entities/PushNotification/PushNotification.js +4 -4
  54. package/dist/entities/PushNotification/PushNotification.js.map +1 -1
  55. package/dist/entities/PushNotification/PushNotification.types.js.map +1 -1
  56. package/dist/entities/PushNotification/index.js.map +1 -1
  57. package/dist/entities/Redis/Redis.js +8 -8
  58. package/dist/entities/Redis/Redis.js.map +1 -1
  59. package/dist/entities/Redis/Redis.types.js.map +1 -1
  60. package/dist/entities/Redis/Redis.validate.js +2 -2
  61. package/dist/entities/Redis/Redis.validate.js.map +1 -1
  62. package/dist/entities/Redis/index.js.map +1 -1
  63. package/dist/entities/Sequelize/Sequelize.config.js +42 -2
  64. package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
  65. package/dist/entities/Sequelize/Sequelize.js +3 -3
  66. package/dist/entities/Sequelize/Sequelize.js.map +1 -1
  67. package/dist/entities/Sequelize/Sequelize.types.js.map +1 -1
  68. package/dist/entities/Sequelize/Sequelize.validate.js +2 -2
  69. package/dist/entities/Sequelize/Sequelize.validate.js.map +1 -1
  70. package/dist/entities/Sequelize/index.js.map +1 -1
  71. package/dist/entities/Server/Server.const.js.map +1 -1
  72. package/dist/entities/Server/Server.js +2 -2
  73. package/dist/entities/Server/Server.js.map +1 -1
  74. package/dist/entities/Server/Server.types.js.map +1 -1
  75. package/dist/entities/Server/index.js.map +1 -1
  76. package/dist/entities/SocketClient/SocketClient.js +15 -15
  77. package/dist/entities/SocketClient/SocketClient.js.map +1 -1
  78. package/dist/entities/SocketClient/SocketClient.types.js.map +1 -1
  79. package/dist/entities/SocketClient/index.js.map +1 -1
  80. package/dist/entities/SocketClient/parseMessage/index.js.map +1 -1
  81. package/dist/entities/SocketClient/parseMessage/parseMessage.js +2 -2
  82. package/dist/entities/SocketClient/parseMessage/parseMessage.js.map +1 -1
  83. package/dist/entities/Storage/Storage.js +20 -20
  84. package/dist/entities/Storage/Storage.js.map +1 -1
  85. package/dist/entities/Storage/Storage.types.js.map +1 -1
  86. package/dist/entities/Storage/index.js.map +1 -1
  87. package/dist/entities/ValidationError/ValidationError.js.map +1 -1
  88. package/dist/entities/ValidationError/index.js.map +1 -1
  89. package/dist/entities/WebError/WebError.js +4 -4
  90. package/dist/entities/WebError/WebError.js.map +1 -1
  91. package/dist/entities/WebError/WebError.types.js.map +1 -1
  92. package/dist/entities/WebError/index.js.map +1 -1
  93. package/dist/entities/index.js.map +1 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/metrics/debug.js.map +1 -1
  96. package/dist/metrics/index.js.map +1 -1
  97. package/dist/metrics/request.js.map +1 -1
  98. package/dist/middleware/authAdmin/authAdmin.js.map +1 -1
  99. package/dist/middleware/authAdmin/authAdmin.types.js.map +1 -1
  100. package/dist/middleware/authAdmin/index.js.map +1 -1
  101. package/dist/middleware/authHmac/authHmac.js.map +1 -1
  102. package/dist/middleware/authHmac/authHmac.types.js.map +1 -1
  103. package/dist/middleware/authHmac/index.js.map +1 -1
  104. package/dist/middleware/authJwt/authJwt.js.map +1 -1
  105. package/dist/middleware/authJwt/authJwt.types.js.map +1 -1
  106. package/dist/middleware/authJwt/index.js.map +1 -1
  107. package/dist/middleware/authStatic/authStatic.js +3 -3
  108. package/dist/middleware/authStatic/authStatic.js.map +1 -1
  109. package/dist/middleware/authStatic/index.js.map +1 -1
  110. package/dist/middleware/authTls/authTls.js +8 -8
  111. package/dist/middleware/authTls/authTls.js.map +1 -1
  112. package/dist/middleware/authTls/authTls.types.js.map +1 -1
  113. package/dist/middleware/authTls/index.js.map +1 -1
  114. package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
  115. package/dist/middleware/error/error.js.map +1 -1
  116. package/dist/middleware/error/index.js.map +1 -1
  117. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
  118. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
  119. package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
  120. package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
  121. package/dist/middleware/fileUploader/fileUploader.js +12 -12
  122. package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
  123. package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
  124. package/dist/middleware/fileUploader/index.js.map +1 -1
  125. package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
  126. package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
  127. package/dist/middleware/fileUploader/validate/index.js.map +1 -1
  128. package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
  129. package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
  130. package/dist/middleware/fourOhFour/index.js.map +1 -1
  131. package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
  132. package/dist/middleware/geminiFileUploader/index.js.map +1 -1
  133. package/dist/middleware/healthCheck/healthCheck.js +2 -2
  134. package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
  135. package/dist/middleware/healthCheck/index.js.map +1 -1
  136. package/dist/middleware/index.js.map +1 -1
  137. package/dist/middleware/metrics/index.js.map +1 -1
  138. package/dist/middleware/metrics/metrics.js.map +1 -1
  139. package/dist/middleware/requestMetrics/index.js.map +1 -1
  140. package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
  141. package/dist/middleware/swaggerDocs/index.js.map +1 -1
  142. package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
  143. package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
  144. package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
  145. package/dist/middleware/userResolver/index.js.map +1 -1
  146. package/dist/middleware/userResolver/userResolver.js.map +1 -1
  147. package/dist/middleware/validate/index.js.map +1 -1
  148. package/dist/middleware/validate/validate.js.map +1 -1
  149. package/dist/middleware/version/index.js.map +1 -1
  150. package/dist/middleware/version/version.js +3 -3
  151. package/dist/middleware/version/version.js.map +1 -1
  152. package/dist/utils/checkEnvironment/index.js +13 -13
  153. package/dist/utils/checkEnvironment/index.js.map +1 -1
  154. package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
  155. package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
  156. package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
  157. package/dist/utils/createHttpServer/index.js.map +1 -1
  158. package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
  159. package/dist/utils/createSortedObject/index.js.map +1 -1
  160. package/dist/utils/dbMigration/dbMigration.js +8 -8
  161. package/dist/utils/dbMigration/dbMigration.js.map +1 -1
  162. package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
  163. package/dist/utils/dbMigration/index.js.map +1 -1
  164. package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
  165. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.d.ts +2 -2
  166. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +48 -16
  167. package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
  168. package/dist/utils/envAssert/envAssert.js +6 -6
  169. package/dist/utils/envAssert/envAssert.js.map +1 -1
  170. package/dist/utils/envAssert/index.js.map +1 -1
  171. package/dist/utils/envAssert/validators/hostList.js +2 -2
  172. package/dist/utils/envAssert/validators/hostList.js.map +1 -1
  173. package/dist/utils/envAssert/validators/index.js.map +1 -1
  174. package/dist/utils/envAssert/validators/ipList.js +2 -2
  175. package/dist/utils/envAssert/validators/ipList.js.map +1 -1
  176. package/dist/utils/envAssert/validators/path.js +2 -2
  177. package/dist/utils/envAssert/validators/path.js.map +1 -1
  178. package/dist/utils/envAssert/validators/string.js +2 -2
  179. package/dist/utils/envAssert/validators/string.js.map +1 -1
  180. package/dist/utils/envAssert/validators/stringList.js +3 -3
  181. package/dist/utils/envAssert/validators/stringList.js.map +1 -1
  182. package/dist/utils/filter/filter.js +4 -4
  183. package/dist/utils/filter/filter.js.map +1 -1
  184. package/dist/utils/filter/index.js.map +1 -1
  185. package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
  186. package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
  187. package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
  188. package/dist/utils/getDynamicLink/index.js.map +1 -1
  189. package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
  190. package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
  191. package/dist/utils/hmac/checkEnv/index.js.map +1 -1
  192. package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
  193. package/dist/utils/hmac/createHmac/index.js.map +1 -1
  194. package/dist/utils/hmac/index.js.map +1 -1
  195. package/dist/utils/hmac/index.types.js.map +1 -1
  196. package/dist/utils/hmac/signPayload/index.js.map +1 -1
  197. package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
  198. package/dist/utils/hmac/verifySignature/index.js.map +1 -1
  199. package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
  200. package/dist/utils/index.js.map +1 -1
  201. package/dist/utils/jwt/index.js.map +1 -1
  202. package/dist/utils/jwt/jwt.js.map +1 -1
  203. package/dist/utils/jwt/jwt.types.js.map +1 -1
  204. package/dist/utils/report/index.js.map +1 -1
  205. package/dist/utils/report/output.js.map +1 -1
  206. package/dist/utils/report/output.types.js.map +1 -1
  207. package/dist/utils/report/report.js.map +1 -1
  208. package/dist/utils/report/report.types.js.map +1 -1
  209. package/dist/utils/request/index.js.map +1 -1
  210. package/dist/utils/request/request.js.map +1 -1
  211. package/dist/utils/semverCompare/index.js.map +1 -1
  212. package/dist/utils/semverCompare/semverCompare.js +5 -5
  213. package/dist/utils/semverCompare/semverCompare.js.map +1 -1
  214. package/dist/utils/sendEmail/index.js.map +1 -1
  215. package/dist/utils/sendEmail/sendEmail.js +8 -8
  216. package/dist/utils/sendEmail/sendEmail.js.map +1 -1
  217. package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
  218. package/dist/utils/sendPush/index.js.map +1 -1
  219. package/dist/utils/sendPush/sendPush.js +5 -5
  220. package/dist/utils/sendPush/sendPush.js.map +1 -1
  221. package/dist/utils/sendPush/sendPush.types.js.map +1 -1
  222. package/dist/utils/tlsConfig/index.js.map +1 -1
  223. package/dist/utils/tlsConfig/tlsConfig.js +2 -2
  224. package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
  225. package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
  226. package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
  227. package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
  228. package/dist/utils/tlsRequest/index.js.map +1 -1
  229. package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
  230. package/dist/utils/trimPathSlash/index.js.map +1 -1
  231. package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
  232. package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
  233. package/eslint.config.mjs +11 -11
  234. package/package.json +164 -161
  235. package/src/const/DebeziumEvent.ts +6 -6
  236. package/src/const/LogSeverity.ts +7 -7
  237. package/src/const/index.ts +5 -5
  238. package/src/const/metrics.ts +6 -6
  239. package/src/const/mime.ts +37 -37
  240. package/src/const/tokenIssuer.ts +9 -9
  241. package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
  242. package/src/db/models/SequelizeMeta.ts +16 -16
  243. package/src/db/models/index.ts +2 -2
  244. package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
  245. package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
  246. package/src/entities/ElasticSearch/index.ts +2 -2
  247. package/src/entities/Endpoint/Endpoint.test.ts +337 -337
  248. package/src/entities/Endpoint/Endpoint.ts +202 -202
  249. package/src/entities/Endpoint/Endpoint.types.ts +205 -205
  250. package/src/entities/Endpoint/index.ts +2 -2
  251. package/src/entities/EngineError/EngineError.ts +28 -28
  252. package/src/entities/EngineError/EngineError.types.ts +15 -15
  253. package/src/entities/EngineError/index.ts +2 -2
  254. package/src/entities/KeySet/KeySet.test.ts +126 -126
  255. package/src/entities/KeySet/KeySet.ts +172 -172
  256. package/src/entities/KeySet/KeySet.types.ts +28 -28
  257. package/src/entities/KeySet/index.ts +2 -2
  258. package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
  259. package/src/entities/LifecycleController/LifecycleController.ts +24 -24
  260. package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
  261. package/src/entities/LifecycleController/index.ts +2 -2
  262. package/src/entities/Localizator/Localizator.ts +139 -139
  263. package/src/entities/Localizator/Localizator.types.ts +52 -52
  264. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
  265. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
  266. package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
  267. package/src/entities/Localizator/index.ts +2 -2
  268. package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
  269. package/src/entities/MessageHandler/MessageHandler.ts +72 -72
  270. package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
  271. package/src/entities/MessageHandler/index.ts +2 -2
  272. package/src/entities/PubSub/PubSub.test.ts +297 -297
  273. package/src/entities/PubSub/PubSub.ts +202 -202
  274. package/src/entities/PubSub/PubSub.types.ts +76 -76
  275. package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
  276. package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
  277. package/src/entities/PubSub/handleMessage/index.ts +1 -1
  278. package/src/entities/PubSub/index.ts +2 -2
  279. package/src/entities/PushNotification/PushNotification.test.ts +35 -35
  280. package/src/entities/PushNotification/PushNotification.ts +44 -44
  281. package/src/entities/PushNotification/PushNotification.types.ts +25 -25
  282. package/src/entities/PushNotification/index.ts +2 -2
  283. package/src/entities/Redis/Redis.ts +71 -71
  284. package/src/entities/Redis/Redis.types.ts +19 -19
  285. package/src/entities/Redis/Redis.validate.ts +17 -17
  286. package/src/entities/Redis/index.ts +2 -2
  287. package/src/entities/Sequelize/Sequelize.config.ts +59 -29
  288. package/src/entities/Sequelize/Sequelize.test.ts +21 -21
  289. package/src/entities/Sequelize/Sequelize.ts +75 -75
  290. package/src/entities/Sequelize/Sequelize.types.ts +10 -10
  291. package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
  292. package/src/entities/Sequelize/index.ts +2 -2
  293. package/src/entities/Server/Server.const.ts +56 -56
  294. package/src/entities/Server/Server.test.ts +272 -272
  295. package/src/entities/Server/Server.ts +445 -445
  296. package/src/entities/Server/Server.types.ts +88 -88
  297. package/src/entities/Server/index.ts +2 -2
  298. package/src/entities/SocketClient/SocketClient.test.ts +392 -392
  299. package/src/entities/SocketClient/SocketClient.ts +401 -401
  300. package/src/entities/SocketClient/SocketClient.types.ts +62 -62
  301. package/src/entities/SocketClient/index.ts +2 -2
  302. package/src/entities/SocketClient/parseMessage/index.ts +1 -1
  303. package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
  304. package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
  305. package/src/entities/Storage/Storage.test.ts +58 -58
  306. package/src/entities/Storage/Storage.ts +219 -219
  307. package/src/entities/Storage/Storage.types.ts +57 -57
  308. package/src/entities/Storage/index.ts +2 -2
  309. package/src/entities/ValidationError/ValidationError.ts +34 -34
  310. package/src/entities/ValidationError/index.ts +1 -1
  311. package/src/entities/WebError/WebError.test.ts +18 -18
  312. package/src/entities/WebError/WebError.ts +23 -23
  313. package/src/entities/WebError/WebError.types.ts +9 -9
  314. package/src/entities/WebError/index.ts +2 -2
  315. package/src/entities/index.ts +16 -16
  316. package/src/index.ts +4 -4
  317. package/src/metrics/debug.ts +10 -10
  318. package/src/metrics/index.ts +2 -2
  319. package/src/metrics/request.ts +17 -17
  320. package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
  321. package/src/middleware/authAdmin/authAdmin.ts +114 -114
  322. package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
  323. package/src/middleware/authAdmin/index.ts +2 -2
  324. package/src/middleware/authHmac/authHmac.test.ts +86 -86
  325. package/src/middleware/authHmac/authHmac.ts +56 -56
  326. package/src/middleware/authHmac/authHmac.types.ts +7 -7
  327. package/src/middleware/authHmac/index.ts +2 -2
  328. package/src/middleware/authJwt/authJwt.test.ts +54 -54
  329. package/src/middleware/authJwt/authJwt.ts +55 -55
  330. package/src/middleware/authJwt/authJwt.types.ts +14 -14
  331. package/src/middleware/authJwt/index.ts +2 -2
  332. package/src/middleware/authStatic/authStatic.test.ts +36 -36
  333. package/src/middleware/authStatic/authStatic.ts +45 -45
  334. package/src/middleware/authStatic/index.ts +1 -1
  335. package/src/middleware/authTls/authTls.test.ts +138 -138
  336. package/src/middleware/authTls/authTls.ts +106 -106
  337. package/src/middleware/authTls/authTls.types.ts +13 -13
  338. package/src/middleware/authTls/index.ts +2 -2
  339. package/src/middleware/checkPermission/checkPermission.ts +32 -32
  340. package/src/middleware/error/error.test.ts +60 -60
  341. package/src/middleware/error/error.ts +25 -25
  342. package/src/middleware/error/index.ts +1 -1
  343. package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
  344. package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
  345. package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
  346. package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
  347. package/src/middleware/fileUploader/fileUploader.ts +303 -303
  348. package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
  349. package/src/middleware/fileUploader/index.ts +2 -2
  350. package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
  351. package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
  352. package/src/middleware/fileUploader/validate/index.ts +1 -1
  353. package/src/middleware/fileUploader/validate/validate.ts +27 -27
  354. package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
  355. package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
  356. package/src/middleware/fourOhFour/index.ts +1 -1
  357. package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
  358. package/src/middleware/geminiFileUploader/index.ts +1 -1
  359. package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
  360. package/src/middleware/healthCheck/healthCheck.ts +14 -14
  361. package/src/middleware/healthCheck/index.ts +1 -1
  362. package/src/middleware/index.ts +17 -17
  363. package/src/middleware/metrics/index.ts +1 -1
  364. package/src/middleware/metrics/metrics.test.ts +46 -46
  365. package/src/middleware/metrics/metrics.ts +24 -24
  366. package/src/middleware/requestMetrics/index.ts +1 -1
  367. package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
  368. package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
  369. package/src/middleware/swaggerDocs/index.ts +2 -2
  370. package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
  371. package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
  372. package/src/middleware/userResolver/index.ts +1 -1
  373. package/src/middleware/userResolver/userResolver.test.ts +35 -35
  374. package/src/middleware/userResolver/userResolver.ts +35 -35
  375. package/src/middleware/validate/index.ts +1 -1
  376. package/src/middleware/validate/validate.test.ts +43 -43
  377. package/src/middleware/validate/validate.ts +25 -25
  378. package/src/middleware/version/index.ts +1 -1
  379. package/src/middleware/version/version.test.ts +23 -23
  380. package/src/middleware/version/version.ts +12 -12
  381. package/src/utils/checkEnvironment/index.ts +49 -49
  382. package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
  383. package/src/utils/createHttpServer/createHttpServer.ts +34 -34
  384. package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
  385. package/src/utils/createHttpServer/index.ts +1 -1
  386. package/src/utils/createSortedObject/createSortedObject.ts +20 -20
  387. package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
  388. package/src/utils/createSortedObject/index.ts +1 -1
  389. package/src/utils/dbMigration/dbMigration.test.ts +209 -209
  390. package/src/utils/dbMigration/dbMigration.ts +199 -199
  391. package/src/utils/dbMigration/dbMigration.types.ts +11 -11
  392. package/src/utils/dbMigration/index.ts +2 -2
  393. package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
  394. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
  395. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -70
  396. package/src/utils/envAssert/envAssert.ts +31 -31
  397. package/src/utils/envAssert/index.ts +1 -1
  398. package/src/utils/envAssert/validators/hostList.ts +17 -17
  399. package/src/utils/envAssert/validators/index.ts +5 -5
  400. package/src/utils/envAssert/validators/ipList.ts +13 -13
  401. package/src/utils/envAssert/validators/path.ts +13 -13
  402. package/src/utils/envAssert/validators/string.ts +9 -9
  403. package/src/utils/envAssert/validators/stringList.ts +13 -13
  404. package/src/utils/filter/filter.ts +17 -17
  405. package/src/utils/filter/index.ts +1 -1
  406. package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
  407. package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
  408. package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
  409. package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
  410. package/src/utils/getDynamicLink/index.ts +2 -2
  411. package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
  412. package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
  413. package/src/utils/hmac/checkEnv/index.ts +1 -1
  414. package/src/utils/hmac/createHmac/createHmac.ts +33 -33
  415. package/src/utils/hmac/createHmac/index.ts +1 -1
  416. package/src/utils/hmac/index.ts +4 -4
  417. package/src/utils/hmac/index.types.ts +13 -13
  418. package/src/utils/hmac/signPayload/index.ts +1 -1
  419. package/src/utils/hmac/signPayload/signPayload.ts +16 -16
  420. package/src/utils/hmac/verifySignature/index.ts +1 -1
  421. package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
  422. package/src/utils/index.ts +26 -26
  423. package/src/utils/jwt/index.ts +2 -2
  424. package/src/utils/jwt/jwt.test.ts +41 -41
  425. package/src/utils/jwt/jwt.ts +204 -204
  426. package/src/utils/jwt/jwt.types.ts +21 -21
  427. package/src/utils/report/index.ts +3 -3
  428. package/src/utils/report/output.ts +45 -45
  429. package/src/utils/report/output.types.ts +70 -70
  430. package/src/utils/report/report.test.ts +133 -133
  431. package/src/utils/report/report.ts +134 -134
  432. package/src/utils/report/report.types.ts +13 -13
  433. package/src/utils/request/index.ts +1 -1
  434. package/src/utils/request/request.test.ts +26 -26
  435. package/src/utils/request/request.ts +48 -48
  436. package/src/utils/semverCompare/index.ts +1 -1
  437. package/src/utils/semverCompare/semverCompare.test.ts +49 -49
  438. package/src/utils/semverCompare/semverCompare.ts +60 -60
  439. package/src/utils/sendEmail/index.ts +1 -1
  440. package/src/utils/sendEmail/sendEmail.ts +27 -27
  441. package/src/utils/sendEmail/sendEmail.types.ts +7 -7
  442. package/src/utils/sendPush/index.ts +2 -2
  443. package/src/utils/sendPush/sendPush.ts +20 -20
  444. package/src/utils/sendPush/sendPush.types.ts +25 -25
  445. package/src/utils/tlsConfig/index.ts +2 -2
  446. package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
  447. package/src/utils/tlsConfig/tlsConfig.ts +47 -47
  448. package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
  449. package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
  450. package/src/utils/tlsRequest/index.ts +1 -1
  451. package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
  452. package/src/utils/tlsRequest/tlsRequest.ts +12 -12
  453. package/src/utils/trimPathSlash/index.ts +1 -1
  454. package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
  455. package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
  456. package/test/env.ts +56 -56
  457. package/test/factory/index.ts +8 -8
  458. package/test/factory/sequelizeMeta.ts +12 -12
  459. package/test/hooks.ts +37 -37
  460. package/test/index.ts +3 -3
  461. package/test/stub/index.ts +3 -3
  462. package/test/stub/stubLocales.ts +68 -68
  463. package/test/stub/stubPubSub.ts +7 -7
  464. package/test/stub/stubStorage.ts +77 -77
  465. package/test/stub/stubStorage.types.ts +11 -11
  466. package/test/utils/app.ts +31 -31
  467. package/test/utils/index.ts +1 -1
  468. package/tsconfig.build.json +5 -5
  469. package/tsconfig.json +32 -32
@@ -1,310 +1,310 @@
1
- import { randomUUID } from 'crypto';
2
- import { Readable } from 'stream';
3
- import { setTimeout as setTimeoutAsync } from 'timers/promises';
4
- import axios from 'axios';
5
- import { expect } from 'chai';
6
- import { faker } from '@faker-js/faker';
7
- import FormData from 'form-data';
8
- import { Sequelize } from 'sequelize';
9
- import { stub, SinonStub } from 'sinon';
10
- import request from 'supertest';
11
- import { EndpointAuthType, EndpointMethod, Endpoint } from 'entities/Endpoint';
12
- import { Server } from 'entities/Server';
13
- import { stubPubSub, stubStorage, createTestApp } from 'test';
14
-
15
- const PATH = '/test';
16
- const buffer = Buffer.from(faker.lorem.paragraphs());
17
- let uploadStub: SinonStub;
18
- let deleteStub: SinonStub;
19
- let bucket: string;
20
-
21
- describe('Middleware - File Uploader', () => {
22
- beforeEach(() => {
23
- const { upload, remove } = stubStorage();
24
- uploadStub = upload;
25
- deleteStub = remove;
26
- stub(Sequelize.prototype, 'close');
27
- stubPubSub();
28
- bucket = faker.lorem.slug();
29
- });
30
-
31
- it('should throw an error for multipart requests', async () => {
32
- const key = faker.lorem.word();
33
- const app = createTestApp({ path: PATH, file: { bucket, key } });
34
- await request(app)
35
- .post(PATH)
36
- .set('Content-Type', 'application/json')
37
- .expect(415, { errorCode: 'invalid-content-type' });
38
- expect(uploadStub).to.not.have.been.called;
39
- });
40
-
41
- // it('should throw an error for unknown file fields', async () => {
42
- // const key = faker.lorem.words();
43
- // const app = createTestApp({
44
- // path: PATH,
45
- // file: { bucket, key: faker.lorem.word() }
46
- // });
47
- // await request(app)
48
- // .post(PATH)
49
- // .attach(key, buffer, faker.system.fileName())
50
- // .expect(400, { errorCode: 'invalid-file-field', hint: { field: key } });
51
- // expect(uploadStub).to.not.have.been.called;
52
- // });
53
-
54
- // it('should throw an error for a file with an unexpected mime type', async () => {
55
- // const key = faker.lorem.word();
56
- // const app = createTestApp({
57
- // path: PATH,
58
- // file: { bucket, key, mimeTypes: [faker.lorem.word()] }
59
- // });
60
- // await request(app)
61
- // .post(PATH)
62
- // .attach(key, buffer, faker.system.fileName())
63
- // .expect(415, { errorCode: 'invalid-mime-type', hint: { field: key } });
64
- // expect(uploadStub).to.not.have.been.called;
65
- // });
66
-
67
- // it('should upload a single file', async () => {
68
- // const key = faker.lorem.word();
69
- // const app = createTestApp({ path: PATH, file: { bucket, key } });
70
- // await request(app)
71
- // .post(PATH)
72
- // .attach(key, buffer, faker.system.fileName())
73
- // .expect(200);
74
- // expect(uploadStub).to.have.been.calledOnce;
75
- // });
76
-
77
- // it('should upload multiple files', async () => {
78
- // const key1 = faker.lorem.word();
79
- // const key2 = faker.lorem.word();
80
- // const app = createTestApp({
81
- // path: PATH,
82
- // files: [
83
- // { bucket, key: key1 },
84
- // { bucket, key: key2 }
85
- // ]
86
- // });
87
- // await request(app)
88
- // .post(PATH)
89
- // .attach(key1, buffer, faker.system.fileName())
90
- // .attach(key2, buffer, faker.system.fileName())
91
- // .expect(200);
92
- // expect(uploadStub).to.have.been.calledTwice;
93
- // });
94
-
95
- // it('should handle file error after one has already been uploaded', async () => {
96
- // uploadStub.onSecondCall().rejects(new Error('Fake error'));
97
- // const key1 = faker.lorem.word();
98
- // const key2 = faker.lorem.word();
99
- // const app = createTestApp({
100
- // path: PATH,
101
- // files: [
102
- // { bucket, key: key1, path: '/test' },
103
- // { bucket, key: key2 }
104
- // ]
105
- // });
106
- // await request(app)
107
- // .post(PATH)
108
- // .attach(key1, buffer, faker.system.fileName())
109
- // .attach(key2, buffer, faker.system.fileName())
110
- // .expect(500, { errorCode: 'server-error' });
111
- // expect(uploadStub).to.have.been.calledTwice;
112
- // expect(deleteStub).to.have.been.calledOnce;
113
- // });
114
-
115
- // it('should throw an error if some files are missing', async () => {
116
- // uploadStub.onSecondCall().rejects(new Error('Fake error'));
117
- // const key1 = faker.lorem.word();
118
- // const key2 = faker.lorem.word();
119
- // const app = createTestApp({
120
- // path: PATH,
121
- // files: [
122
- // { bucket, key: key1, path: '/test' },
123
- // { bucket, key: key2, required: true }
124
- // ]
125
- // });
126
- // await request(app)
127
- // .post(PATH)
128
- // .attach(key1, buffer, faker.system.fileName())
129
- // .expect(400, { errorCode: 'missing-field' });
130
- // expect(uploadStub).to.have.been.calledOnce;
131
- // expect(deleteStub).to.have.been.calledOnce;
132
- // });
133
-
134
- // it('should not throw an error when there is no files and all are optional', async () => {
135
- // const key = faker.lorem.word();
136
- // const app = createTestApp({ path: PATH, file: { bucket, key } });
137
- // await request(app).post(PATH).field('id', randomUUID()).expect(200);
138
- // });
139
-
140
- // it('should handle additional fields', async () => {
141
- // uploadStub.onSecondCall().rejects(new Error('Fake error'));
142
- // const key1 = randomUUID();
143
- // const key2 = randomUUID();
144
- // const value2 = randomUUID();
145
- // const key3 = randomUUID();
146
- // const value3 = false;
147
- // const key4 = randomUUID();
148
- // const value4 = [randomUUID(), randomUUID()];
149
- // const app = createTestApp({
150
- // path: PATH,
151
- // files: [{ bucket, key: key1, path: '/test' }],
152
- // handler: (req, res) => {
153
- // res.json(req.body);
154
- // },
155
- // validator: {
156
- // [key2]: {
157
- // in: ['body'],
158
- // isArray: { options: { min: 1, max: 1 } },
159
- // customSanitizer: { options: (value: Array<unknown>) => value[0] }
160
- // },
161
- // [`${key2}.*`]: {
162
- // isUUID: { options: 4 }
163
- // },
164
- // [key3]: {
165
- // in: ['body'],
166
- // isArray: { options: { min: 1, max: 1 } },
167
- // customSanitizer: {
168
- // options: (value: Array<unknown>) => value[0] === 'true'
169
- // }
170
- // },
171
- // [`${key3}.*`]: {
172
- // isBoolean: true
173
- // },
174
- // [key4]: {
175
- // in: ['body'],
176
- // isArray: { options: { min: 2, max: 2 } }
177
- // },
178
- // [`${key4}.*`]: {
179
- // isUUID: { options: 4 }
180
- // }
181
- // }
182
- // });
183
- // const { body } = <
184
- // {
185
- // /** */
186
- // body: { [name: string]: string };
187
- // }
188
- // >await request(app).post(PATH).attach(key1, buffer, faker.system.fileName()).field(key2, value2).field(key3, value3).field(key4, value4).expect(200);
189
- // expect(uploadStub).to.have.been.calledOnce;
190
- // expect(deleteStub).to.not.have.been.calledOnce;
191
- // expect(body[key2]).to.equal(value2);
192
- // expect(body[key3]).to.equal(value3);
193
- // expect(body[key4]).to.deep.equal(value4);
194
- // });
195
-
196
- // it('should handle field validation error', async () => {
197
- // uploadStub.onSecondCall().rejects(new Error('Fake error'));
198
- // const key1 = faker.lorem.word();
199
- // const key2 = faker.lorem.word();
200
- // const value2 = randomUUID();
201
- // const key3 = faker.lorem.word();
202
- // const value3 = [randomUUID(), randomUUID()];
203
- // const app = createTestApp({
204
- // path: PATH,
205
- // files: [{ bucket, key: key1, path: '/test' }],
206
- // handler: (req, res) => {
207
- // res.json(req.body);
208
- // },
209
- // validator: {
210
- // [`${key2}.*`]: {
211
- // isLength: { options: { max: 1 } }
212
- // },
213
- // [key2]: {
214
- // in: ['body'],
215
- // isArray: { options: { min: 1, max: 1 } },
216
- // customSanitizer: { options: (value: Array<unknown>) => value[0] }
217
- // },
218
- // [key3]: {
219
- // in: ['body'],
220
- // isArray: { options: { min: 1, max: 1 } }
221
- // }
222
- // }
223
- // });
224
- // await request(app)
225
- // .post(PATH)
226
- // .attach(key1, buffer, faker.system.fileName())
227
- // .field(key2, value2)
228
- // .field(key3, value3)
229
- // .expect(400, {
230
- // errorCode: 'invalid-request',
231
- // hint: { [`${key2}[0]`]: 'Invalid value', [key3]: 'Invalid value' }
232
- // });
233
- // });
234
-
235
- // it('should delete already uploaded files on cancel request', async () => {
236
- // const key1 = faker.lorem.word();
237
- // const key2 = faker.lorem.word();
238
- // const key3 = faker.lorem.word();
239
- // process.env.PORT = '3000';
240
- // process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
241
-
242
- // const server = new Server({
243
- // endpoints: [
244
- // new Endpoint({
245
- // method: EndpointMethod.POST,
246
- // authType: EndpointAuthType.NONE,
247
- // handler: (req, res): void => {
248
- // res.json({ message: 'success' });
249
- // },
250
- // files: [
251
- // { bucket, key: key1 },
252
- // { bucket, key: key2 },
253
- // { bucket, key: key3 }
254
- // ],
255
- // path: PATH,
256
- // validator: {}
257
- // })
258
- // ]
259
- // });
260
-
261
- // await server.init();
262
-
263
- // const form = new FormData();
264
- // form.append(key1, buffer);
265
- // form.append(key2, buffer);
266
- // form.append(key3, buffer);
267
-
268
- // const requestConfig = {
269
- // headers: {
270
- // ...form.getHeaders()
271
- // }
272
- // };
273
-
274
- // // eslint-disable-next-line import/no-named-as-default-member
275
- // const abort = axios.CancelToken.source();
276
-
277
- // setTimeout(() => {
278
- // abort.cancel(`Request Cancelled`);
279
- // }, 50);
280
-
281
- // uploadStub.callsFake(async (file: Readable, bucket: string) => {
282
- // file.resume();
283
- // await setTimeoutAsync(1);
284
- // return { bucket };
285
- // });
286
-
287
- // await axios
288
- // .post(`https://localhost:3000` + PATH, form, {
289
- // ...requestConfig,
290
- // cancelToken: abort.token
291
- // })
292
- // .catch((err: Error) => {
293
- // expect(err.message).to.equal('Request Cancelled');
294
- // });
295
-
296
- // expect(uploadStub).to.have.been.calledThrice;
297
- // await server.shutdown();
298
- // process.env.PORT = '8080';
299
- // });
300
-
301
- // it('should compress avatar before uploading', async () => {
302
- // const key = 'avatar';
303
- // const app = createTestApp({ path: PATH, file: { bucket, key } });
304
- // await request(app)
305
- // .post(PATH)
306
- // .attach(key, buffer, faker.system.fileName())
307
- // .expect(200);
308
- // expect(uploadStub).to.have.been.calledOnce;
309
- // });
310
- });
1
+ import { randomUUID } from 'crypto';
2
+ import { Readable } from 'stream';
3
+ import { setTimeout as setTimeoutAsync } from 'timers/promises';
4
+ import axios from 'axios';
5
+ import { expect } from 'chai';
6
+ import { faker } from '@faker-js/faker';
7
+ import FormData from 'form-data';
8
+ import { Sequelize } from 'sequelize';
9
+ import { stub, SinonStub } from 'sinon';
10
+ import request from 'supertest';
11
+ import { EndpointAuthType, EndpointMethod, Endpoint } from 'entities/Endpoint';
12
+ import { Server } from 'entities/Server';
13
+ import { stubPubSub, stubStorage, createTestApp } from 'test';
14
+
15
+ const PATH = '/test';
16
+ const buffer = Buffer.from(faker.lorem.paragraphs());
17
+ let uploadStub: SinonStub;
18
+ let deleteStub: SinonStub;
19
+ let bucket: string;
20
+
21
+ describe('Middleware - File Uploader', () => {
22
+ beforeEach(() => {
23
+ const { upload, remove } = stubStorage();
24
+ uploadStub = upload;
25
+ deleteStub = remove;
26
+ stub(Sequelize.prototype, 'close');
27
+ stubPubSub();
28
+ bucket = faker.lorem.slug();
29
+ });
30
+
31
+ it('should throw an error for multipart requests', async () => {
32
+ const key = faker.lorem.word();
33
+ const app = createTestApp({ path: PATH, file: { bucket, key } });
34
+ await request(app)
35
+ .post(PATH)
36
+ .set('Content-Type', 'application/json')
37
+ .expect(415, { errorCode: 'invalid-content-type' });
38
+ expect(uploadStub).to.not.have.been.called;
39
+ });
40
+
41
+ // it('should throw an error for unknown file fields', async () => {
42
+ // const key = faker.lorem.words();
43
+ // const app = createTestApp({
44
+ // path: PATH,
45
+ // file: { bucket, key: faker.lorem.word() }
46
+ // });
47
+ // await request(app)
48
+ // .post(PATH)
49
+ // .attach(key, buffer, faker.system.fileName())
50
+ // .expect(400, { errorCode: 'invalid-file-field', hint: { field: key } });
51
+ // expect(uploadStub).to.not.have.been.called;
52
+ // });
53
+
54
+ // it('should throw an error for a file with an unexpected mime type', async () => {
55
+ // const key = faker.lorem.word();
56
+ // const app = createTestApp({
57
+ // path: PATH,
58
+ // file: { bucket, key, mimeTypes: [faker.lorem.word()] }
59
+ // });
60
+ // await request(app)
61
+ // .post(PATH)
62
+ // .attach(key, buffer, faker.system.fileName())
63
+ // .expect(415, { errorCode: 'invalid-mime-type', hint: { field: key } });
64
+ // expect(uploadStub).to.not.have.been.called;
65
+ // });
66
+
67
+ // it('should upload a single file', async () => {
68
+ // const key = faker.lorem.word();
69
+ // const app = createTestApp({ path: PATH, file: { bucket, key } });
70
+ // await request(app)
71
+ // .post(PATH)
72
+ // .attach(key, buffer, faker.system.fileName())
73
+ // .expect(200);
74
+ // expect(uploadStub).to.have.been.calledOnce;
75
+ // });
76
+
77
+ // it('should upload multiple files', async () => {
78
+ // const key1 = faker.lorem.word();
79
+ // const key2 = faker.lorem.word();
80
+ // const app = createTestApp({
81
+ // path: PATH,
82
+ // files: [
83
+ // { bucket, key: key1 },
84
+ // { bucket, key: key2 }
85
+ // ]
86
+ // });
87
+ // await request(app)
88
+ // .post(PATH)
89
+ // .attach(key1, buffer, faker.system.fileName())
90
+ // .attach(key2, buffer, faker.system.fileName())
91
+ // .expect(200);
92
+ // expect(uploadStub).to.have.been.calledTwice;
93
+ // });
94
+
95
+ // it('should handle file error after one has already been uploaded', async () => {
96
+ // uploadStub.onSecondCall().rejects(new Error('Fake error'));
97
+ // const key1 = faker.lorem.word();
98
+ // const key2 = faker.lorem.word();
99
+ // const app = createTestApp({
100
+ // path: PATH,
101
+ // files: [
102
+ // { bucket, key: key1, path: '/test' },
103
+ // { bucket, key: key2 }
104
+ // ]
105
+ // });
106
+ // await request(app)
107
+ // .post(PATH)
108
+ // .attach(key1, buffer, faker.system.fileName())
109
+ // .attach(key2, buffer, faker.system.fileName())
110
+ // .expect(500, { errorCode: 'server-error' });
111
+ // expect(uploadStub).to.have.been.calledTwice;
112
+ // expect(deleteStub).to.have.been.calledOnce;
113
+ // });
114
+
115
+ // it('should throw an error if some files are missing', async () => {
116
+ // uploadStub.onSecondCall().rejects(new Error('Fake error'));
117
+ // const key1 = faker.lorem.word();
118
+ // const key2 = faker.lorem.word();
119
+ // const app = createTestApp({
120
+ // path: PATH,
121
+ // files: [
122
+ // { bucket, key: key1, path: '/test' },
123
+ // { bucket, key: key2, required: true }
124
+ // ]
125
+ // });
126
+ // await request(app)
127
+ // .post(PATH)
128
+ // .attach(key1, buffer, faker.system.fileName())
129
+ // .expect(400, { errorCode: 'missing-field' });
130
+ // expect(uploadStub).to.have.been.calledOnce;
131
+ // expect(deleteStub).to.have.been.calledOnce;
132
+ // });
133
+
134
+ // it('should not throw an error when there is no files and all are optional', async () => {
135
+ // const key = faker.lorem.word();
136
+ // const app = createTestApp({ path: PATH, file: { bucket, key } });
137
+ // await request(app).post(PATH).field('id', randomUUID()).expect(200);
138
+ // });
139
+
140
+ // it('should handle additional fields', async () => {
141
+ // uploadStub.onSecondCall().rejects(new Error('Fake error'));
142
+ // const key1 = randomUUID();
143
+ // const key2 = randomUUID();
144
+ // const value2 = randomUUID();
145
+ // const key3 = randomUUID();
146
+ // const value3 = false;
147
+ // const key4 = randomUUID();
148
+ // const value4 = [randomUUID(), randomUUID()];
149
+ // const app = createTestApp({
150
+ // path: PATH,
151
+ // files: [{ bucket, key: key1, path: '/test' }],
152
+ // handler: (req, res) => {
153
+ // res.json(req.body);
154
+ // },
155
+ // validator: {
156
+ // [key2]: {
157
+ // in: ['body'],
158
+ // isArray: { options: { min: 1, max: 1 } },
159
+ // customSanitizer: { options: (value: Array<unknown>) => value[0] }
160
+ // },
161
+ // [`${key2}.*`]: {
162
+ // isUUID: { options: 4 }
163
+ // },
164
+ // [key3]: {
165
+ // in: ['body'],
166
+ // isArray: { options: { min: 1, max: 1 } },
167
+ // customSanitizer: {
168
+ // options: (value: Array<unknown>) => value[0] === 'true'
169
+ // }
170
+ // },
171
+ // [`${key3}.*`]: {
172
+ // isBoolean: true
173
+ // },
174
+ // [key4]: {
175
+ // in: ['body'],
176
+ // isArray: { options: { min: 2, max: 2 } }
177
+ // },
178
+ // [`${key4}.*`]: {
179
+ // isUUID: { options: 4 }
180
+ // }
181
+ // }
182
+ // });
183
+ // const { body } = <
184
+ // {
185
+ // /** */
186
+ // body: { [name: string]: string };
187
+ // }
188
+ // >await request(app).post(PATH).attach(key1, buffer, faker.system.fileName()).field(key2, value2).field(key3, value3).field(key4, value4).expect(200);
189
+ // expect(uploadStub).to.have.been.calledOnce;
190
+ // expect(deleteStub).to.not.have.been.calledOnce;
191
+ // expect(body[key2]).to.equal(value2);
192
+ // expect(body[key3]).to.equal(value3);
193
+ // expect(body[key4]).to.deep.equal(value4);
194
+ // });
195
+
196
+ // it('should handle field validation error', async () => {
197
+ // uploadStub.onSecondCall().rejects(new Error('Fake error'));
198
+ // const key1 = faker.lorem.word();
199
+ // const key2 = faker.lorem.word();
200
+ // const value2 = randomUUID();
201
+ // const key3 = faker.lorem.word();
202
+ // const value3 = [randomUUID(), randomUUID()];
203
+ // const app = createTestApp({
204
+ // path: PATH,
205
+ // files: [{ bucket, key: key1, path: '/test' }],
206
+ // handler: (req, res) => {
207
+ // res.json(req.body);
208
+ // },
209
+ // validator: {
210
+ // [`${key2}.*`]: {
211
+ // isLength: { options: { max: 1 } }
212
+ // },
213
+ // [key2]: {
214
+ // in: ['body'],
215
+ // isArray: { options: { min: 1, max: 1 } },
216
+ // customSanitizer: { options: (value: Array<unknown>) => value[0] }
217
+ // },
218
+ // [key3]: {
219
+ // in: ['body'],
220
+ // isArray: { options: { min: 1, max: 1 } }
221
+ // }
222
+ // }
223
+ // });
224
+ // await request(app)
225
+ // .post(PATH)
226
+ // .attach(key1, buffer, faker.system.fileName())
227
+ // .field(key2, value2)
228
+ // .field(key3, value3)
229
+ // .expect(400, {
230
+ // errorCode: 'invalid-request',
231
+ // hint: { [`${key2}[0]`]: 'Invalid value', [key3]: 'Invalid value' }
232
+ // });
233
+ // });
234
+
235
+ // it('should delete already uploaded files on cancel request', async () => {
236
+ // const key1 = faker.lorem.word();
237
+ // const key2 = faker.lorem.word();
238
+ // const key3 = faker.lorem.word();
239
+ // process.env.PORT = '3000';
240
+ // process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
241
+
242
+ // const server = new Server({
243
+ // endpoints: [
244
+ // new Endpoint({
245
+ // method: EndpointMethod.POST,
246
+ // authType: EndpointAuthType.NONE,
247
+ // handler: (req, res): void => {
248
+ // res.json({ message: 'success' });
249
+ // },
250
+ // files: [
251
+ // { bucket, key: key1 },
252
+ // { bucket, key: key2 },
253
+ // { bucket, key: key3 }
254
+ // ],
255
+ // path: PATH,
256
+ // validator: {}
257
+ // })
258
+ // ]
259
+ // });
260
+
261
+ // await server.init();
262
+
263
+ // const form = new FormData();
264
+ // form.append(key1, buffer);
265
+ // form.append(key2, buffer);
266
+ // form.append(key3, buffer);
267
+
268
+ // const requestConfig = {
269
+ // headers: {
270
+ // ...form.getHeaders()
271
+ // }
272
+ // };
273
+
274
+ // // eslint-disable-next-line import/no-named-as-default-member
275
+ // const abort = axios.CancelToken.source();
276
+
277
+ // setTimeout(() => {
278
+ // abort.cancel(`Request Cancelled`);
279
+ // }, 50);
280
+
281
+ // uploadStub.callsFake(async (file: Readable, bucket: string) => {
282
+ // file.resume();
283
+ // await setTimeoutAsync(1);
284
+ // return { bucket };
285
+ // });
286
+
287
+ // await axios
288
+ // .post(`https://localhost:3000` + PATH, form, {
289
+ // ...requestConfig,
290
+ // cancelToken: abort.token
291
+ // })
292
+ // .catch((err: Error) => {
293
+ // expect(err.message).to.equal('Request Cancelled');
294
+ // });
295
+
296
+ // expect(uploadStub).to.have.been.calledThrice;
297
+ // await server.shutdown();
298
+ // process.env.PORT = '8080';
299
+ // });
300
+
301
+ // it('should compress avatar before uploading', async () => {
302
+ // const key = 'avatar';
303
+ // const app = createTestApp({ path: PATH, file: { bucket, key } });
304
+ // await request(app)
305
+ // .post(PATH)
306
+ // .attach(key, buffer, faker.system.fileName())
307
+ // .expect(200);
308
+ // expect(uploadStub).to.have.been.calledOnce;
309
+ // });
310
+ });