@adaptivestone/framework 5.0.0-beta.2 → 5.0.0-beta.21

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 (285) hide show
  1. package/CHANGELOG.md +126 -1
  2. package/LICENCE +1 -1
  3. package/dist/Cli.d.ts +7 -0
  4. package/dist/Cli.js +19 -0
  5. package/dist/Cli.js.map +1 -0
  6. package/dist/cluster.d.ts +1 -0
  7. package/dist/cluster.js +18 -0
  8. package/dist/cluster.js.map +1 -0
  9. package/dist/commands/CreateUser.d.ts +32 -0
  10. package/dist/commands/CreateUser.js +81 -0
  11. package/dist/commands/CreateUser.js.map +1 -0
  12. package/dist/commands/Documentation.d.ts +5 -0
  13. package/dist/commands/Documentation.js +15 -0
  14. package/dist/commands/Documentation.js.map +1 -0
  15. package/dist/commands/DropIndex.d.ts +16 -0
  16. package/dist/commands/DropIndex.js +30 -0
  17. package/dist/commands/DropIndex.js.map +1 -0
  18. package/dist/commands/GenerateRandomBytes.d.ts +7 -0
  19. package/dist/commands/GenerateRandomBytes.js +18 -0
  20. package/dist/commands/GenerateRandomBytes.js.map +1 -0
  21. package/dist/commands/GenerateTypes.d.ts +12 -0
  22. package/dist/commands/GenerateTypes.js +60 -0
  23. package/dist/commands/GenerateTypes.js.map +1 -0
  24. package/dist/commands/GetOpenApiJson.d.ts +17 -0
  25. package/dist/commands/GetOpenApiJson.js +272 -0
  26. package/dist/commands/GetOpenApiJson.js.map +1 -0
  27. package/dist/commands/SyncIndexes.d.ts +6 -0
  28. package/dist/commands/SyncIndexes.js +32 -0
  29. package/dist/commands/SyncIndexes.js.map +1 -0
  30. package/dist/commands/migration/Create.d.ts +18 -0
  31. package/dist/commands/migration/Create.js +57 -0
  32. package/dist/commands/migration/Create.js.map +1 -0
  33. package/dist/commands/migration/Migrate.d.ts +6 -0
  34. package/dist/commands/migration/Migrate.js +46 -0
  35. package/dist/commands/migration/Migrate.js.map +1 -0
  36. package/dist/config/auth.d.ts +6 -0
  37. package/dist/config/auth.js +7 -0
  38. package/dist/config/auth.js.map +1 -0
  39. package/dist/config/http.d.ts +8 -0
  40. package/dist/config/http.js +10 -0
  41. package/dist/config/http.js.map +1 -0
  42. package/dist/config/i18n.d.ts +10 -0
  43. package/dist/config/i18n.js +13 -0
  44. package/dist/config/i18n.js.map +1 -0
  45. package/dist/config/ipDetector.d.ts +5 -0
  46. package/dist/config/ipDetector.js +15 -0
  47. package/dist/config/ipDetector.js.map +1 -0
  48. package/dist/config/log.d.ts +22 -0
  49. package/dist/config/log.js +23 -0
  50. package/dist/config/log.js.map +1 -0
  51. package/dist/config/mongo.d.ts +4 -0
  52. package/dist/config/mongo.js +4 -0
  53. package/dist/config/mongo.js.map +1 -0
  54. package/dist/config/rateLimiter.d.ts +15 -0
  55. package/dist/config/rateLimiter.js +17 -0
  56. package/dist/config/rateLimiter.js.map +1 -0
  57. package/dist/config/redis.d.ts +5 -0
  58. package/dist/config/redis.js +5 -0
  59. package/dist/config/redis.js.map +1 -0
  60. package/dist/config/validate.d.ts +4 -0
  61. package/dist/config/validate.js +4 -0
  62. package/dist/config/validate.js.map +1 -0
  63. package/dist/controllers/Auth.d.ts +74 -0
  64. package/dist/controllers/Auth.js +181 -0
  65. package/dist/controllers/Auth.js.map +1 -0
  66. package/dist/controllers/Home.d.ts +15 -0
  67. package/dist/controllers/Home.js +24 -0
  68. package/dist/controllers/Home.js.map +1 -0
  69. package/dist/controllers/index.d.ts +16 -0
  70. package/dist/controllers/index.js +59 -0
  71. package/dist/controllers/index.js.map +1 -0
  72. package/dist/folderConfig.d.ts +34 -0
  73. package/dist/folderConfig.js +15 -0
  74. package/dist/folderConfig.js.map +1 -0
  75. package/dist/helpers/appInstance.d.ts +3 -0
  76. package/dist/helpers/appInstance.js +8 -0
  77. package/dist/helpers/appInstance.js.map +1 -0
  78. package/dist/helpers/crypto.d.ts +3 -0
  79. package/dist/helpers/crypto.js +14 -0
  80. package/dist/helpers/crypto.js.map +1 -0
  81. package/dist/helpers/files.d.ts +16 -0
  82. package/dist/helpers/files.js +76 -0
  83. package/dist/helpers/files.js.map +1 -0
  84. package/dist/helpers/logger.d.ts +4 -0
  85. package/dist/helpers/logger.js +28 -0
  86. package/dist/helpers/logger.js.map +1 -0
  87. package/dist/helpers/redis/clearNamespace.d.ts +2 -0
  88. package/dist/helpers/redis/clearNamespace.js +14 -0
  89. package/dist/helpers/redis/clearNamespace.js.map +1 -0
  90. package/dist/helpers/yup.d.ts +13 -0
  91. package/{helpers → dist/helpers}/yup.js +9 -12
  92. package/dist/helpers/yup.js.map +1 -0
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.js +7 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/models/Lock.d.ts +89 -0
  97. package/dist/models/Lock.js +99 -0
  98. package/dist/models/Lock.js.map +1 -0
  99. package/dist/models/Migration.d.ts +10 -0
  100. package/dist/models/Migration.js +13 -0
  101. package/dist/models/Migration.js.map +1 -0
  102. package/dist/models/Sequence.d.ts +27 -0
  103. package/dist/models/Sequence.js +19 -0
  104. package/dist/models/Sequence.js.map +1 -0
  105. package/dist/models/User.d.ts +2372 -0
  106. package/dist/models/User.js +280 -0
  107. package/dist/models/User.js.map +1 -0
  108. package/dist/models/UserOld.d.ts +179 -0
  109. package/dist/models/UserOld.js +230 -0
  110. package/dist/models/UserOld.js.map +1 -0
  111. package/dist/modules/AbstractCommand.d.ts +34 -0
  112. package/dist/modules/AbstractCommand.js +48 -0
  113. package/dist/modules/AbstractCommand.js.map +1 -0
  114. package/dist/modules/AbstractConnector.d.ts +5 -0
  115. package/dist/modules/AbstractConnector.js +8 -0
  116. package/dist/modules/AbstractConnector.js.map +1 -0
  117. package/dist/modules/AbstractController.d.ts +90 -0
  118. package/dist/modules/AbstractController.js +324 -0
  119. package/dist/modules/AbstractController.js.map +1 -0
  120. package/dist/modules/AbstractModel.d.ts +29 -0
  121. package/dist/modules/AbstractModel.js +43 -0
  122. package/dist/modules/AbstractModel.js.map +1 -0
  123. package/dist/modules/Base.d.ts +29 -0
  124. package/dist/modules/Base.js +58 -0
  125. package/dist/modules/Base.js.map +1 -0
  126. package/dist/modules/BaseCli.d.ts +25 -0
  127. package/dist/modules/BaseCli.js +147 -0
  128. package/dist/modules/BaseCli.js.map +1 -0
  129. package/dist/modules/BaseModel.d.ts +41 -0
  130. package/dist/modules/BaseModel.js +36 -0
  131. package/dist/modules/BaseModel.js.map +1 -0
  132. package/dist/server.d.ts +121 -0
  133. package/dist/server.js +432 -0
  134. package/dist/server.js.map +1 -0
  135. package/dist/services/cache/Cache.d.ts +31 -0
  136. package/dist/services/cache/Cache.js +115 -0
  137. package/dist/services/cache/Cache.js.map +1 -0
  138. package/dist/services/documentation/DocumentationGenerator.d.ts +11 -0
  139. package/dist/services/documentation/DocumentationGenerator.js +134 -0
  140. package/dist/services/documentation/DocumentationGenerator.js.map +1 -0
  141. package/dist/services/http/HttpServer.d.ts +35 -0
  142. package/dist/services/http/HttpServer.js +71 -0
  143. package/dist/services/http/HttpServer.js.map +1 -0
  144. package/dist/services/http/middleware/AbstractMiddleware.d.ts +25 -0
  145. package/dist/services/http/middleware/AbstractMiddleware.js +43 -0
  146. package/dist/services/http/middleware/AbstractMiddleware.js.map +1 -0
  147. package/dist/services/http/middleware/Auth.d.ts +9 -0
  148. package/dist/services/http/middleware/Auth.js +18 -0
  149. package/dist/services/http/middleware/Auth.js.map +1 -0
  150. package/dist/services/http/middleware/Cors.d.ts +10 -0
  151. package/dist/services/http/middleware/Cors.js +36 -0
  152. package/dist/services/http/middleware/Cors.js.map +1 -0
  153. package/dist/services/http/middleware/GetUserByToken.d.ts +19 -0
  154. package/dist/services/http/middleware/GetUserByToken.js +40 -0
  155. package/dist/services/http/middleware/GetUserByToken.js.map +1 -0
  156. package/dist/services/http/middleware/I18n.d.ts +26 -0
  157. package/dist/services/http/middleware/I18n.js +97 -0
  158. package/dist/services/http/middleware/I18n.js.map +1 -0
  159. package/dist/services/http/middleware/IpDetector.d.ts +12 -0
  160. package/dist/services/http/middleware/IpDetector.js +51 -0
  161. package/dist/services/http/middleware/IpDetector.js.map +1 -0
  162. package/dist/services/http/middleware/Pagination.d.ts +27 -0
  163. package/dist/services/http/middleware/Pagination.js +47 -0
  164. package/dist/services/http/middleware/Pagination.js.map +1 -0
  165. package/dist/services/http/middleware/PrepareAppInfo.d.ts +8 -0
  166. package/dist/services/http/middleware/PrepareAppInfo.js +17 -0
  167. package/dist/services/http/middleware/PrepareAppInfo.js.map +1 -0
  168. package/dist/services/http/middleware/RateLimiter.d.ts +18 -0
  169. package/dist/services/http/middleware/RateLimiter.js +106 -0
  170. package/dist/services/http/middleware/RateLimiter.js.map +1 -0
  171. package/dist/services/http/middleware/RequestLogger.d.ts +8 -0
  172. package/dist/services/http/middleware/RequestLogger.js +18 -0
  173. package/dist/services/http/middleware/RequestLogger.js.map +1 -0
  174. package/dist/services/http/middleware/RequestParser.d.ts +8 -0
  175. package/dist/services/http/middleware/RequestParser.js +35 -0
  176. package/dist/services/http/middleware/RequestParser.js.map +1 -0
  177. package/dist/services/http/middleware/Role.d.ts +9 -0
  178. package/dist/services/http/middleware/Role.js +24 -0
  179. package/dist/services/http/middleware/Role.js.map +1 -0
  180. package/dist/services/validate/ValidateService.d.ts +31 -0
  181. package/dist/services/validate/ValidateService.js +96 -0
  182. package/dist/services/validate/ValidateService.js.map +1 -0
  183. package/dist/services/validate/drivers/AbstractValidator.d.ts +14 -0
  184. package/dist/services/validate/drivers/AbstractValidator.js +32 -0
  185. package/dist/services/validate/drivers/AbstractValidator.js.map +1 -0
  186. package/dist/services/validate/drivers/CustomValidator.d.ts +14 -0
  187. package/dist/services/validate/drivers/CustomValidator.js +48 -0
  188. package/dist/services/validate/drivers/CustomValidator.js.map +1 -0
  189. package/dist/services/validate/drivers/YupValidator.d.ts +13 -0
  190. package/dist/services/validate/drivers/YupValidator.js +86 -0
  191. package/dist/services/validate/drivers/YupValidator.js.map +1 -0
  192. package/dist/tests/globalSetupVitest.d.ts +2 -0
  193. package/dist/tests/globalSetupVitest.js +29 -0
  194. package/dist/tests/globalSetupVitest.js.map +1 -0
  195. package/dist/tests/setupVitest.d.ts +1 -0
  196. package/dist/tests/setupVitest.js +99 -0
  197. package/dist/tests/setupVitest.js.map +1 -0
  198. package/package.json +38 -23
  199. package/Cli.js +0 -22
  200. package/cluster.js +0 -27
  201. package/commands/CreateUser.js +0 -75
  202. package/commands/Documentation.js +0 -17
  203. package/commands/DropIndex.js +0 -29
  204. package/commands/GenerateRandomBytes.js +0 -21
  205. package/commands/GetOpenApiJson.js +0 -325
  206. package/commands/SyncIndexes.js +0 -39
  207. package/commands/migration/Create.js +0 -61
  208. package/commands/migration/Migrate.js +0 -55
  209. package/config/auth.js +0 -9
  210. package/config/http.js +0 -9
  211. package/config/i18n.js +0 -12
  212. package/config/ipDetector.js +0 -14
  213. package/config/log.js +0 -22
  214. package/config/mail.js +0 -29
  215. package/config/mongo.js +0 -3
  216. package/config/rateLimiter.js +0 -16
  217. package/config/redis.js +0 -4
  218. package/config/validate.js +0 -3
  219. package/controllers/Auth.js +0 -210
  220. package/controllers/Home.js +0 -28
  221. package/controllers/index.js +0 -60
  222. package/folderConfig.js +0 -14
  223. package/helpers/files.js +0 -79
  224. package/helpers/logger.js +0 -17
  225. package/helpers/redis/clearNamespace.js +0 -14
  226. package/index.js +0 -8
  227. package/jsconfig.json +0 -9
  228. package/locales/en/translation.json +0 -27
  229. package/locales/ru/translation.json +0 -27
  230. package/migrations/.gitkeep +0 -0
  231. package/models/Migration.js +0 -15
  232. package/models/Sequence.js +0 -22
  233. package/models/User.js +0 -263
  234. package/modules/AbstractCommand.js +0 -43
  235. package/modules/AbstractConnector.js +0 -9
  236. package/modules/AbstractController.js +0 -413
  237. package/modules/AbstractModel.d.ts +0 -48
  238. package/modules/AbstractModel.js +0 -86
  239. package/modules/Base.d.ts +0 -37
  240. package/modules/Base.js +0 -63
  241. package/modules/BaseCli.js +0 -97
  242. package/server.d.ts +0 -98
  243. package/server.js +0 -429
  244. package/services/cache/Cache.d.ts +0 -35
  245. package/services/cache/Cache.js +0 -124
  246. package/services/documentation/DocumentationGenerator.js +0 -169
  247. package/services/http/HttpServer.js +0 -96
  248. package/services/http/middleware/AbstractMiddleware.js +0 -51
  249. package/services/http/middleware/Auth.js +0 -20
  250. package/services/http/middleware/Cors.js +0 -46
  251. package/services/http/middleware/GetUserByToken.js +0 -47
  252. package/services/http/middleware/I18n.js +0 -117
  253. package/services/http/middleware/IpDetector.js +0 -59
  254. package/services/http/middleware/Pagination.js +0 -57
  255. package/services/http/middleware/PrepareAppInfo.js +0 -18
  256. package/services/http/middleware/RateLimiter.js +0 -134
  257. package/services/http/middleware/RequestLogger.js +0 -22
  258. package/services/http/middleware/RequestParser.js +0 -40
  259. package/services/http/middleware/Role.js +0 -29
  260. package/services/messaging/email/index.js +0 -217
  261. package/services/messaging/email/resources/.gitkeep +0 -1
  262. package/services/messaging/email/templates/emptyTemplate/html.pug +0 -9
  263. package/services/messaging/email/templates/emptyTemplate/subject.pug +0 -1
  264. package/services/messaging/email/templates/emptyTemplate/text.pug +0 -1
  265. package/services/messaging/email/templates/recovery/html.pug +0 -8
  266. package/services/messaging/email/templates/recovery/subject.pug +0 -2
  267. package/services/messaging/email/templates/recovery/text.pug +0 -3
  268. package/services/messaging/email/templates/verification/html.pug +0 -10
  269. package/services/messaging/email/templates/verification/subject.pug +0 -1
  270. package/services/messaging/email/templates/verification/text.pug +0 -1
  271. package/services/messaging/index.js +0 -3
  272. package/services/validate/ValidateService.js +0 -157
  273. package/services/validate/drivers/AbstractValidator.js +0 -37
  274. package/services/validate/drivers/CustomValidator.js +0 -51
  275. package/services/validate/drivers/YupValidator.js +0 -103
  276. package/tests/globalSetupVitest.js +0 -35
  277. package/tests/setup.js +0 -118
  278. package/tests/setupVitest.js +0 -109
  279. package/types/Expand.d.ts +0 -11
  280. package/types/TFoldersConfig.d.ts +0 -17
  281. package/views/404.pug +0 -3
  282. package/views/home.pug +0 -3
  283. package/views/layouts/base.pug +0 -39
  284. package/vitest.config.js +0 -16
  285. /package/{commands → dist/migrations}/.gitkeep +0 -0
@@ -0,0 +1,51 @@
1
+ import { BlockList } from 'node:net';
2
+ import AbstractMiddleware from "./AbstractMiddleware.js";
3
+ class IpDetector extends AbstractMiddleware {
4
+ static get description() {
5
+ return 'Detect real user IP address. Support proxy and load balancer';
6
+ }
7
+ blockList;
8
+ constructor(app, params) {
9
+ super(app, params);
10
+ const { trustedProxy } = this.app.getConfig('ipDetector');
11
+ this.blockList = new BlockList();
12
+ for (const subnet of trustedProxy) {
13
+ const addressType = subnet.includes(':') ? 'ipv6' : 'ipv4';
14
+ if (subnet.includes('/')) {
15
+ // CIDR
16
+ const [realSubnet, prefixLength] = subnet.split('/');
17
+ this.blockList.addSubnet(realSubnet, parseInt(prefixLength, 10), addressType);
18
+ }
19
+ else if (subnet.includes('-')) {
20
+ // RANGE
21
+ const [start, end] = subnet.split('-');
22
+ this.blockList.addRange(start, end, addressType);
23
+ }
24
+ else {
25
+ // just an address
26
+ this.blockList.addAddress(subnet, addressType);
27
+ }
28
+ }
29
+ }
30
+ async middleware(req, res, next) {
31
+ const { headers } = this.app.getConfig('ipDetector');
32
+ const initialIp = req.socket.remoteAddress;
33
+ req.appInfo.ip = initialIp;
34
+ const addressType = initialIp?.includes(':') ? 'ipv6' : 'ipv4';
35
+ if (this.blockList.check(initialIp ?? '', addressType)) {
36
+ // we can trust this source
37
+ for (const header of headers) {
38
+ // in a range
39
+ const ipHeader = req.headers[header.toLowerCase()];
40
+ if (ipHeader) {
41
+ const [firstIp] = ipHeader.split(',').map((ip) => ip.trim());
42
+ req.appInfo.ip = firstIp;
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ next();
48
+ }
49
+ }
50
+ export default IpDetector;
51
+ //# sourceMappingURL=IpDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpDetector.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/IpDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAMzD,MAAM,UAAW,SAAQ,kBAAkB;IACzC,MAAM,KAAK,WAAW;QACpB,OAAO,8DAA8D,CAAC;IACxE,CAAC;IAED,SAAS,CAAY;IAErB,YAAY,GAAS,EAAE,MAAY;QACjC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAE1D,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO;gBACP,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,UAAU,EACV,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,EAC1B,WAAW,CACZ,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,QAAQ;gBACR,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAqB,EAAE,GAAa,EAAE,IAAkB;QACvE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;QAC3B,MAAM,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAE/D,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;YACvD,2BAA2B;YAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,aAAa;gBACb,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAW,CAAC;gBAC7D,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC7D,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC;oBACzB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;CACF;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,27 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ export interface PaginationMiddlewareAppInfo {
5
+ appInfo: {
6
+ pagination: {
7
+ page: number;
8
+ limit: number;
9
+ skip: number;
10
+ };
11
+ };
12
+ }
13
+ /**
14
+ * Middleware for reusing pagination
15
+ */
16
+ declare class Pagination extends AbstractMiddleware {
17
+ static get description(): string;
18
+ get relatedQueryParameters(): import("yup").ObjectSchema<{
19
+ page: number | undefined;
20
+ limit: number | undefined;
21
+ }, import("yup").AnyObject, {
22
+ page: undefined;
23
+ limit: undefined;
24
+ }, "">;
25
+ middleware(req: FrameworkRequest & PaginationMiddlewareAppInfo, res: Response, next: NextFunction): Promise<void>;
26
+ }
27
+ export default Pagination;
@@ -0,0 +1,47 @@
1
+ import { object, number } from 'yup';
2
+ import AbstractMiddleware from "./AbstractMiddleware.js";
3
+ /**
4
+ * Middleware for reusing pagination
5
+ */
6
+ class Pagination extends AbstractMiddleware {
7
+ static get description() {
8
+ return 'Pagination middleware. You can use limit=10 and maxLimit=100 parameters';
9
+ }
10
+ // eslint-disable-next-line class-methods-use-this
11
+ get relatedQueryParameters() {
12
+ return object().shape({
13
+ page: number(),
14
+ limit: number(),
15
+ });
16
+ }
17
+ async middleware(req, res, next) {
18
+ let { limit, maxLimit } = this.params;
19
+ limit = (typeof limit !== 'number' ? parseInt(limit, 10) : limit) || 10;
20
+ maxLimit =
21
+ (typeof maxLimit !== 'number' ? parseInt(maxLimit, 10) : maxLimit) || 100;
22
+ req.appInfo.pagination = {
23
+ page: typeof req?.query?.page === 'string'
24
+ ? parseInt(req?.query?.page, 10) || 1
25
+ : 1,
26
+ limit: typeof req?.query?.limit === 'string'
27
+ ? parseInt(req?.query?.limit, 10) || 0
28
+ : limit,
29
+ skip: 0,
30
+ };
31
+ if (req.appInfo.pagination.limit > maxLimit) {
32
+ req.appInfo.pagination.limit = maxLimit;
33
+ }
34
+ if (req.appInfo.pagination.page < 1) {
35
+ req.appInfo.pagination.page = 1;
36
+ }
37
+ if (req.appInfo.pagination.limit < 0) {
38
+ req.appInfo.pagination.limit = 0;
39
+ }
40
+ req.appInfo.pagination.skip =
41
+ req.appInfo.pagination.page * req.appInfo.pagination.limit -
42
+ req.appInfo.pagination.limit;
43
+ return next();
44
+ }
45
+ }
46
+ export default Pagination;
47
+ //# sourceMappingURL=Pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAezD;;GAEG;AACH,MAAM,UAAW,SAAQ,kBAAkB;IACzC,MAAM,KAAK,WAAW;QACpB,OAAO,yEAAyE,CAAC;IACnF,CAAC;IAED,kDAAkD;IAClD,IAAI,sBAAsB;QACxB,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC;YACpB,IAAI,EAAE,MAAM,EAAE;YACd,KAAK,EAAE,MAAM,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAAmD,EACnD,GAAa,EACb,IAAkB;QAElB,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAEtC,KAAK,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxE,QAAQ;YACN,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAE5E,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG;YACvB,IAAI,EACF,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ;gBAClC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;gBACrC,CAAC,CAAC,CAAC;YAEP,KAAK,EACH,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,QAAQ;gBACnC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;gBACtC,CAAC,CAAC,KAAK;YACX,IAAI,EAAE,CAAC;SACR,CAAC;QAEF,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;YAC5C,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC1C,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;YACzB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;gBAC1D,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAE/B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ declare class PrepareAppInfo extends AbstractMiddleware {
5
+ static get description(): string;
6
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void>;
7
+ }
8
+ export default PrepareAppInfo;
@@ -0,0 +1,17 @@
1
+ import AbstractMiddleware from "./AbstractMiddleware.js";
2
+ class PrepareAppInfo extends AbstractMiddleware {
3
+ static get description() {
4
+ return 'Basic middleware that creates "req.appInfo" object';
5
+ }
6
+ async middleware(req, res, next) {
7
+ if (!req.appInfo) {
8
+ //@ts-ignore
9
+ req.appInfo = {
10
+ app: this.app,
11
+ };
12
+ }
13
+ next();
14
+ }
15
+ }
16
+ export default PrepareAppInfo;
17
+ //# sourceMappingURL=PrepareAppInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrepareAppInfo.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/PrepareAppInfo.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAKzD,MAAM,cAAe,SAAQ,kBAAkB;IAC7C,MAAM,KAAK,WAAW;QACpB,OAAO,oDAAoD,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAqB,EAAE,GAAa,EAAE,IAAkB;QACvE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY;YACZ,GAAG,CAAC,OAAO,GAAG;gBACZ,GAAG,EAAE,IAAI,CAAC,GAAG;aACd,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { RateLimiterRedis } from 'rate-limiter-flexible';
2
+ import AbstractMiddleware from './AbstractMiddleware.ts';
3
+ import type { Response, NextFunction } from 'express';
4
+ import type { RateLimiterAbstract } from 'rate-limiter-flexible';
5
+ import type { FrameworkRequest } from '../HttpServer.ts';
6
+ import type { GetUserByTokenAppInfo } from './GetUserByToken.ts';
7
+ import type { IApp } from '../../../server.ts';
8
+ import type rateLimiterConfig from '../../../config/rateLimiter.js';
9
+ declare class RateLimiter extends AbstractMiddleware {
10
+ static get description(): string;
11
+ finalOptions: typeof rateLimiterConfig;
12
+ limiter: RateLimiterAbstract;
13
+ constructor(app: IApp, params?: any);
14
+ initRedisLimiter(): RateLimiterRedis;
15
+ gerenateConsumeKey(req: FrameworkRequest & GetUserByTokenAppInfo): string;
16
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void | Response<any, Record<string, any>>>;
17
+ }
18
+ export default RateLimiter;
@@ -0,0 +1,106 @@
1
+ import { RateLimiterMemory, RateLimiterRedis, RateLimiterMongo, } from 'rate-limiter-flexible';
2
+ import merge from 'deepmerge';
3
+ import { createClient } from '@redis/client';
4
+ import mongoose from 'mongoose';
5
+ import AbstractMiddleware from "./AbstractMiddleware.js";
6
+ class RateLimiter extends AbstractMiddleware {
7
+ static get description() {
8
+ return 'Rate limiter middleware. Limit amount of request. Please refer to documentation';
9
+ }
10
+ finalOptions;
11
+ limiter;
12
+ constructor(app, params) {
13
+ super(app, params);
14
+ const limiterOptions = this.app.getConfig('rateLimiter');
15
+ this.finalOptions = merge(limiterOptions, params || {});
16
+ switch (this.finalOptions.driver) {
17
+ case 'memory':
18
+ this.limiter = new RateLimiterMemory(this.finalOptions.limiterOptions);
19
+ break;
20
+ case 'redis':
21
+ this.limiter = this.initRedisLimiter();
22
+ break;
23
+ case 'mongo':
24
+ this.limiter = new RateLimiterMongo({
25
+ storeClient: mongoose.connection,
26
+ ...this.finalOptions.limiterOptions,
27
+ });
28
+ break;
29
+ default:
30
+ this.logger?.error(`Unknwon option for driver ${this.finalOptions.driver}`);
31
+ break;
32
+ }
33
+ }
34
+ initRedisLimiter() {
35
+ const redisConfig = this.app.getConfig('redis');
36
+ const redisClient = createClient({
37
+ url: redisConfig.url,
38
+ });
39
+ // TODO: change it
40
+ (async () => {
41
+ await redisClient.connect();
42
+ })();
43
+ redisClient.on('error', (error, b, c) => {
44
+ this.logger?.error(error, b, c);
45
+ });
46
+ redisClient.on('connect', () => {
47
+ this.logger?.info('Redis connection success');
48
+ });
49
+ this.app.events.on('shutdown', async () => {
50
+ await redisClient.disconnect();
51
+ });
52
+ return new RateLimiterRedis({
53
+ storeClient: redisClient,
54
+ useRedisPackage: true,
55
+ ...this.finalOptions.limiterOptions,
56
+ });
57
+ }
58
+ gerenateConsumeKey(req) {
59
+ const { ip, route, user, request } = this.finalOptions.consumeKeyComponents;
60
+ const key = [];
61
+ if (ip) {
62
+ if (!req.appInfo.ip) {
63
+ this.logger?.error(`RateLimiter: Can't get remote address from request. Please check that you used IpDetecor middleware before RateLimiter`);
64
+ }
65
+ else {
66
+ key.push(req.appInfo.ip);
67
+ }
68
+ }
69
+ if (route) {
70
+ key.push(`${req.baseUrl ?? ''}${req.path ?? ''}`); // to avoid quesry params
71
+ }
72
+ if (user && req.appInfo?.user) {
73
+ key.push(req.appInfo?.user.id);
74
+ }
75
+ if (request && request.length) {
76
+ request.forEach((val) => {
77
+ if (req.body && req.body[val]) {
78
+ key.push(req.body[val]);
79
+ }
80
+ // if (req.appInfo.request && req.appInfo.request[val]) {
81
+ // key.push(req.appInfo.request[val]);
82
+ // }
83
+ });
84
+ }
85
+ return key.join('_');
86
+ }
87
+ async middleware(req, res, next) {
88
+ if (!this.limiter) {
89
+ this.logger?.info(`RateLimiter not inited correclty! Please check init logs `);
90
+ return res.status(500).json({ message: 'RateLimiter error' });
91
+ }
92
+ const { namespace } = this.app.getConfig('redis');
93
+ const consumeKey = `${namespace}-${this.gerenateConsumeKey(req)}`;
94
+ const consumeResult = await this.limiter
95
+ .consume(consumeKey, this.finalOptions.consumePoints)
96
+ .catch(() => {
97
+ this.logger?.warn(`Too many requests. Consume key: ${consumeKey}`);
98
+ });
99
+ if (consumeResult) {
100
+ return next();
101
+ }
102
+ return res.status(429).json({ message: 'Too Many Requests' });
103
+ }
104
+ }
105
+ export default RateLimiter;
106
+ //# sourceMappingURL=RateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ declare class RequestLogger extends AbstractMiddleware {
5
+ static get description(): string;
6
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void>;
7
+ }
8
+ export default RequestLogger;
@@ -0,0 +1,18 @@
1
+ import AbstractMiddleware from "./AbstractMiddleware.js";
2
+ class RequestLogger extends AbstractMiddleware {
3
+ static get description() {
4
+ return 'Log info about the request';
5
+ }
6
+ async middleware(req, res, next) {
7
+ const startTime = performance.now();
8
+ const text = `Request is [${req.method}] ${req.url}`;
9
+ this.logger?.info(text);
10
+ res.on('finish', () => {
11
+ const end = performance.now();
12
+ this.logger?.info(`Finished ${text}. Status: ${res.statusCode}. [${(end - startTime).toFixed(2)} ms]`);
13
+ });
14
+ next();
15
+ }
16
+ }
17
+ export default RequestLogger;
18
+ //# sourceMappingURL=RequestLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestLogger.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/RequestLogger.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAIzD,MAAM,aAAc,SAAQ,kBAAkB;IAC5C,MAAM,KAAK,WAAW;QACpB,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAqB,EAAE,GAAa,EAAE,IAAkB;QACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,gBAAgB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,YAAY,IAAI,aAAa,GAAG,CAAC,UAAU,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CACrF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,EAAE,CAAC;IACT,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ declare class RequestParser extends AbstractMiddleware {
5
+ static get description(): string;
6
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void | Response<any, Record<string, any>>>;
7
+ }
8
+ export default RequestParser;
@@ -0,0 +1,35 @@
1
+ import formidable from 'formidable';
2
+ import AbstractMiddleware from "./AbstractMiddleware.js";
3
+ class RequestParser extends AbstractMiddleware {
4
+ static get description() {
5
+ return 'Parses incoming request. Based on Formidable library';
6
+ }
7
+ async middleware(req, res, next) {
8
+ const time = Date.now();
9
+ this.logger?.verbose(`Parsing request`);
10
+ // TODO update this to https://github.com/node-formidable/formidable/issues/412#issuecomment-1367914268 in node v20 (in 2023?)
11
+ const form = formidable(this.params); // not in construstor as reuse formidable affects performance
12
+ let fields;
13
+ let files;
14
+ try {
15
+ [fields, files] = await form.parse(req);
16
+ }
17
+ catch (err) {
18
+ this.logger?.error(`Parsing failed ${err}`);
19
+ return res.status(400).json({
20
+ message: `Error to parse your request. You provided invalid content type or content-length. Please check your request headers and content type.`,
21
+ });
22
+ // return next(err);
23
+ }
24
+ this.logger?.verbose(`Parsing multipart/formdata request DONE ${Date.now() - time}ms`);
25
+ req.body = {
26
+ // todo avoid body in next versions
27
+ ...(req.body || {}),
28
+ ...fields,
29
+ ...files,
30
+ };
31
+ return next();
32
+ }
33
+ }
34
+ export default RequestParser;
35
+ //# sourceMappingURL=RequestParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestParser.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/RequestParser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAKzD,MAAM,aAAc,SAAQ,kBAAkB;IAC5C,MAAM,KAAK,WAAW;QACpB,OAAO,sDAAsD,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAqB,EAAE,GAAa,EAAE,IAAkB;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACxC,8HAA8H;QAE9H,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,6DAA6D;QACnG,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;YAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,uIAAuI;aACjJ,CAAC,CAAC;YACH,oBAAoB;QACtB,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,OAAO,CAClB,2CAA2C,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CACjE,CAAC;QAEF,GAAG,CAAC,IAAI,GAAG;YACT,mCAAmC;YACnC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACnB,GAAG,MAAM;YACT,GAAG,KAAK;SACT,CAAC;QACF,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ import type { GetUserByTokenAppInfo } from './GetUserByToken.ts';
5
+ declare class RoleMiddleware extends AbstractMiddleware {
6
+ static get description(): string;
7
+ middleware(req: FrameworkRequest & GetUserByTokenAppInfo, res: Response, next: NextFunction): Promise<void | Response<any, Record<string, any>>>;
8
+ }
9
+ export default RoleMiddleware;
@@ -0,0 +1,24 @@
1
+ import AbstractMiddleware from "./AbstractMiddleware.js";
2
+ class RoleMiddleware extends AbstractMiddleware {
3
+ static get description() {
4
+ return 'Check user role (user.roles property). If the user has no role then stop request and return error. OR logic (any role will pass user)';
5
+ }
6
+ async middleware(req, res, next) {
7
+ const { user } = req.appInfo;
8
+ if (!user) {
9
+ return res.status(401).json({ message: 'User should be provided' });
10
+ }
11
+ let hasRole = false;
12
+ user.roles.forEach((role) => {
13
+ if (this.params.roles.includes(role)) {
14
+ hasRole = true;
15
+ }
16
+ });
17
+ if (!hasRole) {
18
+ return res.status(403).json({ message: 'You do not have access' });
19
+ }
20
+ return next();
21
+ }
22
+ }
23
+ export default RoleMiddleware;
24
+ //# sourceMappingURL=Role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Role.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/Role.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAMzD,MAAM,cAAe,SAAQ,kBAAkB;IAC7C,MAAM,KAAK,WAAW;QACpB,OAAO,uIAAuI,CAAC;IACjJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAA6C,EAC7C,GAAa,EACb,IAAkB;QAElB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,31 @@
1
+ export default ValidateService;
2
+ declare class ValidateService extends Base {
3
+ static drivers: {
4
+ YupValidator: typeof YupValidator;
5
+ CustomValidator: typeof CustomValidator;
6
+ };
7
+ static isValidatorExists(validator: any): boolean;
8
+ static getDriverByValidatorBody(app: any, body?: {}): {};
9
+ constructor(app: any, validator: any);
10
+ validator: {} | null;
11
+ /**
12
+ * Filter middlewares by route path and select all parameters
13
+ */
14
+ filterRelatedParametersByRoute(middlewares: any, method: any, path: any): any;
15
+ /**
16
+ * Group all middleware(routes + controller) parameters
17
+ */
18
+ getMiddlewareParams(controllerMiddlewares: any, AllrouteMiddlewares: any, options: any): {
19
+ request: any[];
20
+ query: any[];
21
+ };
22
+ validateSchema(req: any, validator: any, data: any): Promise<any>;
23
+ validateArrayOfSchemas(req: any, validators: any, data: any): Promise<any[]>;
24
+ /**
25
+ * Validate req data. For example req.body, req.query
26
+ */
27
+ validateReqData(req: any, options: any): Promise<any>;
28
+ }
29
+ import Base from '../../modules/Base.ts';
30
+ import YupValidator from './drivers/YupValidator.js';
31
+ import CustomValidator from './drivers/CustomValidator.js';
@@ -0,0 +1,96 @@
1
+ import { isSchema } from 'yup';
2
+ import YupValidator from './drivers/YupValidator.js';
3
+ import CustomValidator from './drivers/CustomValidator.js';
4
+ import Base from "../../modules/Base.js";
5
+ class ValidateService extends Base {
6
+ constructor(app, validator) {
7
+ super(app);
8
+ this.validator = validator
9
+ ? ValidateService.getDriverByValidatorBody(app, validator)
10
+ : null;
11
+ }
12
+ static drivers = {
13
+ YupValidator,
14
+ CustomValidator,
15
+ };
16
+ static isValidatorExists(validator) {
17
+ if (!(validator instanceof Object)) {
18
+ return false;
19
+ }
20
+ return Object.values(this.drivers).some((driver) => validator instanceof driver);
21
+ }
22
+ static getDriverByValidatorBody(app, body = {}) {
23
+ if (this.isValidatorExists(body)) {
24
+ return body;
25
+ }
26
+ if (isSchema(body)) {
27
+ const yupValidator = new YupValidator(app, body);
28
+ return yupValidator;
29
+ }
30
+ const customValidator = new CustomValidator(app, body);
31
+ return customValidator;
32
+ }
33
+ /**
34
+ * Filter middlewares by route path and select all parameters
35
+ */
36
+ filterRelatedParametersByRoute(middlewares, method, path) {
37
+ const middlewaresParams = middlewares
38
+ .filter((middleware) => middleware.method.toLowerCase() === method.toLowerCase() &&
39
+ middleware.fullPath.toLowerCase() === path.toLowerCase())
40
+ ?.map((middleware) => {
41
+ const instance = new middleware.MiddlewareFunction(this.app, middleware.params);
42
+ return instance.relatedReqParameters;
43
+ });
44
+ return middlewaresParams;
45
+ }
46
+ /**
47
+ * Group all middleware(routes + controller) parameters
48
+ */
49
+ getMiddlewareParams(controllerMiddlewares, AllrouteMiddlewares, options) {
50
+ const { method, path } = options;
51
+ const routeMiddlewaresParams = this.filterRelatedParametersByRoute(AllrouteMiddlewares, method, path);
52
+ const controllerMiddlewaresParams = this.filterRelatedParametersByRoute(controllerMiddlewares, method, path);
53
+ return {
54
+ request: [
55
+ ...controllerMiddlewaresParams.map((x) => x.request),
56
+ ...routeMiddlewaresParams.map((x) => x.request),
57
+ ],
58
+ query: [
59
+ ...controllerMiddlewaresParams.map((x) => x.query),
60
+ ...routeMiddlewaresParams.map((x) => x.query),
61
+ ],
62
+ };
63
+ }
64
+ // eslint-disable-next-line class-methods-use-this
65
+ async validateSchema(req, validator, data) {
66
+ if (!validator) {
67
+ return {};
68
+ }
69
+ await validator.validateFields(data, req);
70
+ return validator.castFields(data, req);
71
+ }
72
+ async validateArrayOfSchemas(req, validators, data) {
73
+ const result = [];
74
+ for (const validator of validators) {
75
+ const formatedValidator = ValidateService.getDriverByValidatorBody(this.app, validator);
76
+ result.push(this.validateSchema(req, formatedValidator, data));
77
+ }
78
+ return Promise.all(result);
79
+ }
80
+ /**
81
+ * Validate req data. For example req.body, req.query
82
+ */
83
+ async validateReqData(req, options) {
84
+ const { selectedReqData, additionalMiddlewareFieldsData } = options;
85
+ const { middlewaresInfo, routeMiddlewaresReg, options: routeOptions, } = additionalMiddlewareFieldsData;
86
+ let validatedFields = await this.validateSchema(req, this.validator, selectedReqData);
87
+ const additionalMiddlewareSchemas = this.getMiddlewareParams(middlewaresInfo, routeMiddlewaresReg, routeOptions)[routeOptions.prefix];
88
+ if (additionalMiddlewareSchemas.length) {
89
+ const middlewareValidatedFields = await this.validateArrayOfSchemas(req, additionalMiddlewareSchemas, selectedReqData);
90
+ validatedFields = Object.assign({}, validatedFields, ...middlewareValidatedFields);
91
+ }
92
+ return validatedFields;
93
+ }
94
+ }
95
+ export default ValidateService;
96
+ //# sourceMappingURL=ValidateService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateService.js","sourceRoot":"","sources":["../../../src/services/validate/ValidateService.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export default AbstractValidator;
2
+ declare class AbstractValidator extends Base {
3
+ static convertFieldsToJson(fields: any): {};
4
+ constructor(app: any, body: any);
5
+ body: any;
6
+ get fieldsInJsonFormat(): {};
7
+ validateFields(data: any, { query, body, appInfo }: {
8
+ query: any;
9
+ body: any;
10
+ appInfo: any;
11
+ }): Promise<boolean>;
12
+ castFields(): Promise<boolean>;
13
+ }
14
+ import Base from '../../../modules/Base.ts';
@@ -0,0 +1,32 @@
1
+ import Base from "../../../modules/Base.js";
2
+ class AbstractValidator extends Base {
3
+ constructor(app, body) {
4
+ super(app);
5
+ this.body = body;
6
+ }
7
+ // eslint-disable-next-line no-unused-vars
8
+ static convertFieldsToJson(fields) {
9
+ // IMPLENT;
10
+ return {};
11
+ }
12
+ // eslint-disable-next-line class-methods-use-this
13
+ get fieldsInJsonFormat() {
14
+ // IMPLENT;
15
+ return {};
16
+ }
17
+ // eslint-disable-next-line class-methods-use-this, no-unused-vars
18
+ async validateFields(data, { query, body, appInfo }) {
19
+ // IMPLENT;
20
+ return true;
21
+ }
22
+ // eslint-disable-next-line class-methods-use-this
23
+ async castFields() {
24
+ // IMPLENT;
25
+ return true;
26
+ }
27
+ static get loggerGroup() {
28
+ return 'AbstractValidator_';
29
+ }
30
+ }
31
+ export default AbstractValidator;
32
+ //# sourceMappingURL=AbstractValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractValidator.js","sourceRoot":"","sources":["../../../../src/services/validate/drivers/AbstractValidator.js"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAE5C,MAAM,iBAAkB,SAAQ,IAAI;IAClC,YAAY,GAAG,EAAE,IAAI;QACnB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,mBAAmB,CAAC,MAAM;QAC/B,WAAW;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kDAAkD;IAClD,IAAI,kBAAkB;QACpB,WAAW;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;QACjD,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,UAAU;QACd,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;CACF;AACD,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export default CustomValidator;
2
+ declare class CustomValidator extends AbstractValidator {
3
+ validateFields(data: any, { query, body, appInfo }: {
4
+ query: any;
5
+ body: any;
6
+ appInfo: any;
7
+ }): Promise<void>;
8
+ castFields(data: any, { query, body, appInfo }: {
9
+ query: any;
10
+ body: any;
11
+ appInfo: any;
12
+ }): Promise<any>;
13
+ }
14
+ import AbstractValidator from './AbstractValidator.js';