@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,15 @@
1
+ declare namespace _default {
2
+ namespace limiterOptions {
3
+ let points: number;
4
+ let duration: number;
5
+ }
6
+ let driver: string;
7
+ let consumePoints: number;
8
+ namespace consumeKeyComponents {
9
+ let ip: boolean;
10
+ let route: boolean;
11
+ let user: boolean;
12
+ let request: never[];
13
+ }
14
+ }
15
+ export default _default;
@@ -0,0 +1,17 @@
1
+ export default {
2
+ limiterOptions: {
3
+ // https://github.com/animir/node-rate-limiter-flexible
4
+ // https://github.com/animir/node-rate-limiter-flexible/wiki/Options
5
+ points: 10, // 10 points
6
+ duration: 60, // Per 60 seconds
7
+ },
8
+ driver: 'memory', // can be 'mongo', 'redis'
9
+ consumePoints: 1,
10
+ consumeKeyComponents: {
11
+ ip: true, // include ip to key generation
12
+ route: true, // include route to key generation
13
+ user: true, // include user id to key generation (if user exits)
14
+ request: [], // what should be included from request (req.appInfo.request) if it presented
15
+ },
16
+ };
17
+ //# sourceMappingURL=rateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/config/rateLimiter.js"],"names":[],"mappings":"AAAA,eAAe;IACb,cAAc,EAAE;QACd,uDAAuD;QACvD,oEAAoE;QACpE,MAAM,EAAE,EAAE,EAAE,YAAY;QACxB,QAAQ,EAAE,EAAE,EAAE,iBAAiB;KAChC;IACD,MAAM,EAAE,QAAQ,EAAE,0BAA0B;IAC5C,aAAa,EAAE,CAAC;IAChB,oBAAoB,EAAE;QACpB,EAAE,EAAE,IAAI,EAAE,+BAA+B;QACzC,KAAK,EAAE,IAAI,EAAE,kCAAkC;QAC/C,IAAI,EAAE,IAAI,EAAE,oDAAoD;QAChE,OAAO,EAAE,EAAE,EAAE,6EAA6E;KAC3F;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare namespace _default {
2
+ let url: string;
3
+ let namespace: string;
4
+ }
5
+ export default _default;
@@ -0,0 +1,5 @@
1
+ export default {
2
+ url: process.env.REDIS_URI || 'redis://localhost',
3
+ namespace: process.env.REDIS_NAMESPACE || 'main',
4
+ };
5
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/config/redis.js"],"names":[],"mappings":"AAAA,eAAe;IACb,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,mBAAmB;IACjD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM;CACjD,CAAC"}
@@ -0,0 +1,4 @@
1
+ declare namespace _default {
2
+ let controllerValidationAbortEarly: boolean;
3
+ }
4
+ export default _default;
@@ -0,0 +1,4 @@
1
+ export default {
2
+ controllerValidationAbortEarly: true, // abort validation on first error and return first error
3
+ };
4
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/config/validate.js"],"names":[],"mappings":"AAAA,eAAe;IACb,8BAA8B,EAAE,IAAI,EAAE,yDAAyD;CAChG,CAAC"}
@@ -0,0 +1,74 @@
1
+ import AbstractController from '../modules/AbstractController.ts';
2
+ import GetUserByToken from '../services/http/middleware/GetUserByToken.ts';
3
+ import RateLimiter from '../services/http/middleware/RateLimiter.ts';
4
+ import type { Response } from 'express';
5
+ import type { FrameworkRequest } from '../services/http/HttpServer.ts';
6
+ declare class Auth extends AbstractController {
7
+ get routes(): {
8
+ post: {
9
+ '/login': {
10
+ handler: (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
11
+ request: import("yup").ObjectSchema<{
12
+ email: string;
13
+ password: string;
14
+ }, import("yup").AnyObject, {
15
+ email: undefined;
16
+ password: undefined;
17
+ }, "">;
18
+ };
19
+ '/register': {
20
+ handler: (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
21
+ request: import("yup").ObjectSchema<{
22
+ email: string;
23
+ password: string;
24
+ nickName: string | undefined;
25
+ firstName: string | undefined;
26
+ lastName: string | undefined;
27
+ }, import("yup").AnyObject, {
28
+ email: undefined;
29
+ password: undefined;
30
+ nickName: undefined;
31
+ firstName: undefined;
32
+ lastName: undefined;
33
+ }, "">;
34
+ };
35
+ '/logout': (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
36
+ '/verify': (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
37
+ '/send-recovery-email': {
38
+ handler: (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
39
+ request: import("yup").ObjectSchema<{
40
+ email: string;
41
+ }, import("yup").AnyObject, {
42
+ email: undefined;
43
+ }, "">;
44
+ };
45
+ '/recover-password': {
46
+ handler: (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
47
+ request: import("yup").ObjectSchema<{
48
+ password: string;
49
+ passwordRecoveryToken: string;
50
+ }, import("yup").AnyObject, {
51
+ password: undefined;
52
+ passwordRecoveryToken: undefined;
53
+ }, "">;
54
+ };
55
+ '/send-verification': {
56
+ handler: (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
57
+ request: import("yup").ObjectSchema<{
58
+ email: string;
59
+ }, import("yup").AnyObject, {
60
+ email: undefined;
61
+ }, "">;
62
+ };
63
+ };
64
+ };
65
+ postLogin(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
66
+ postRegister(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
67
+ postLogout(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
68
+ verifyUser(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
69
+ sendPasswordRecoveryEmail(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
70
+ recoverPassword(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
71
+ sendVerification(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
72
+ static get middleware(): Map<string, (typeof GetUserByToken | typeof RateLimiter)[]>;
73
+ }
74
+ export default Auth;
@@ -0,0 +1,181 @@
1
+ import { object, string } from 'yup';
2
+ import AbstractController from "../modules/AbstractController.js";
3
+ import GetUserByToken from "../services/http/middleware/GetUserByToken.js";
4
+ import RateLimiter from "../services/http/middleware/RateLimiter.js";
5
+ class Auth extends AbstractController {
6
+ get routes() {
7
+ return {
8
+ post: {
9
+ '/login': {
10
+ handler: this.postLogin,
11
+ request: object().shape({
12
+ email: string().email().required('auth.emailProvided'), // if not provided then error will be generated
13
+ password: string().required('auth.passwordProvided'), // possible to provide values from translation
14
+ }),
15
+ },
16
+ '/register': {
17
+ handler: this.postRegister,
18
+ request: object().shape({
19
+ email: string()
20
+ .email('auth.emailValid')
21
+ .required('auth.emailProvided'),
22
+ password: string()
23
+ .matches(/^[a-zA-Z0-9!@#$%ˆ^&*()_+\-{}[\]<>]+$/, 'auth.passwordValid')
24
+ .required('auth.passwordProvided'),
25
+ nickName: string().matches(/^[a-zA-Z0-9_\-.]+$/, 'auth.nickNameValid'),
26
+ firstName: string(),
27
+ lastName: string(),
28
+ }),
29
+ },
30
+ '/logout': this.postLogout,
31
+ '/verify': this.verifyUser,
32
+ '/send-recovery-email': {
33
+ handler: this.sendPasswordRecoveryEmail,
34
+ request: object().shape({ email: string().email().required() }),
35
+ },
36
+ '/recover-password': {
37
+ handler: this.recoverPassword,
38
+ request: object().shape({
39
+ password: string()
40
+ .matches(/^[a-zA-Z0-9!@#$%ˆ^&*()_+\-{}[\]<>]+$/, 'auth.passwordValid')
41
+ .required(),
42
+ passwordRecoveryToken: string().required(),
43
+ }),
44
+ },
45
+ '/send-verification': {
46
+ handler: this.sendVerification,
47
+ request: object().shape({ email: string().email().required() }),
48
+ },
49
+ },
50
+ };
51
+ }
52
+ async postLogin(req, res) {
53
+ const User = this.app.getModel('User');
54
+ const user = await User.getUserByEmailAndPassword(req.appInfo.request.email, // we do a request casting
55
+ req.appInfo.request.password);
56
+ if (!user) {
57
+ return res
58
+ .status(400)
59
+ .json({ message: req.appInfo.i18n?.t('auth.errorUPValid') });
60
+ }
61
+ const { isAuthWithVefificationFlow } = this.app.getConfig('auth');
62
+ if (isAuthWithVefificationFlow && !user.isVerified) {
63
+ return res.status(400).json({
64
+ message: req.appInfo.i18n?.t('email.notVerified'),
65
+ notVerified: true,
66
+ });
67
+ }
68
+ const token = await user.generateToken();
69
+ return res.status(200).json({ data: { token, user: user.getPublic() } });
70
+ }
71
+ async postRegister(req, res) {
72
+ const User = req.appInfo.app.getModel('User');
73
+ let user = await User.getUserByEmail(req.appInfo.request.email);
74
+ if (user) {
75
+ return res
76
+ .status(400)
77
+ .json({ message: req.appInfo.i18n?.t('email.registered') });
78
+ }
79
+ if (req.appInfo.request.nickName) {
80
+ user = await User.findOne({ 'name.nick': req.appInfo.request.nickName });
81
+ if (user) {
82
+ return res
83
+ .status(400)
84
+ .json({ message: req.appInfo.i18n?.t('auth.nicknameExists') });
85
+ }
86
+ }
87
+ user = await User.create({
88
+ email: req.appInfo.request.email,
89
+ password: req.appInfo.request.password,
90
+ name: {
91
+ first: req.appInfo.request.firstName,
92
+ last: req.appInfo.request.lastName,
93
+ nick: req.appInfo.request.nickName,
94
+ },
95
+ });
96
+ const { isAuthWithVefificationFlow } = this.app.getConfig('auth');
97
+ if (isAuthWithVefificationFlow) {
98
+ await user.sendVerificationEmail(req.appInfo.i18n).catch((e) => {
99
+ this.logger?.error(e);
100
+ });
101
+ }
102
+ return res.status(201).json();
103
+ }
104
+ // eslint-disable-next-line class-methods-use-this
105
+ async postLogout(req, res) {
106
+ // todo remove token
107
+ return res.status(200).json();
108
+ }
109
+ async verifyUser(req, res) {
110
+ const User = req.appInfo.app.getModel('User');
111
+ let user;
112
+ try {
113
+ user = await User.getUserByVerificationToken(req.query.verification_token);
114
+ }
115
+ catch {
116
+ return res.status(400).json({
117
+ message: req.appInfo.i18n?.t('email.alreadyVerifiedOrWrongToken'),
118
+ });
119
+ }
120
+ this.logger?.debug(`Verify user user is :${user}`);
121
+ if (!user) {
122
+ return res.status(400).json({
123
+ message: req.appInfo.i18n?.t('email.alreadyVerifiedOrWrongToken'),
124
+ });
125
+ }
126
+ user.isVerified = true;
127
+ await user.save();
128
+ return res.status(200).json();
129
+ }
130
+ async sendPasswordRecoveryEmail(req, res) {
131
+ const User = req.appInfo.app.getModel('User');
132
+ try {
133
+ const user = await User.getUserByEmail(req.appInfo.request.email);
134
+ if (!user) {
135
+ return res
136
+ .status(400)
137
+ .json({ message: req.appInfo.i18n?.t('auth.errorUExist') });
138
+ }
139
+ await user.sendPasswordRecoveryEmail(req.appInfo.i18n);
140
+ return res.status(200).json();
141
+ }
142
+ catch (e) {
143
+ this.logger?.error(e);
144
+ return res
145
+ .status(400)
146
+ .json({ message: req.appInfo.i18n?.t('auth.errorUExist') });
147
+ }
148
+ }
149
+ async recoverPassword(req, res) {
150
+ const User = this.app.getModel('User');
151
+ const user = await User.getUserByPasswordRecoveryToken(req.appInfo.request.passwordRecoveryToken).catch((e) => {
152
+ this.logger?.error(e);
153
+ });
154
+ if (!user) {
155
+ return res
156
+ .status(400)
157
+ .json({ message: req.appInfo.i18n?.t('password.wrongToken') });
158
+ }
159
+ this.logger?.debug(`Password recovery user is :${user}`);
160
+ user.password = req.appInfo.request.password;
161
+ user.isVerified = true;
162
+ await user.save();
163
+ return res.status(200).json();
164
+ }
165
+ async sendVerification(req, res) {
166
+ const User = this.app.getModel('User');
167
+ const user = await User.getUserByEmail(req.appInfo.request.email);
168
+ if (!user) {
169
+ return res
170
+ .status(400)
171
+ .json({ message: req.appInfo.i18n?.t('auth.errorUExist') });
172
+ }
173
+ await user.sendVerificationEmail(req.appInfo.i18n);
174
+ return res.status(200).json();
175
+ }
176
+ static get middleware() {
177
+ return new Map([['/{*splat}', [GetUserByToken, RateLimiter]]]);
178
+ }
179
+ }
180
+ export default Auth;
181
+ //# sourceMappingURL=Auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/controllers/Auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import AbstractController from '../modules/AbstractController.ts';
2
+ import GetUserByToken from '../services/http/middleware/GetUserByToken.ts';
3
+ import type { Response } from 'express';
4
+ import type { FrameworkRequest } from '../services/http/HttpServer.ts';
5
+ declare class Home extends AbstractController {
6
+ get routes(): {
7
+ get: {
8
+ '/': (req: FrameworkRequest, res: Response) => Promise<Response<any, Record<string, any>>>;
9
+ };
10
+ };
11
+ home(req: FrameworkRequest, res: Response): Promise<Response<any, Record<string, any>>>;
12
+ getHttpPath(): string;
13
+ static get middleware(): Map<string, (typeof GetUserByToken)[]>;
14
+ }
15
+ export default Home;
@@ -0,0 +1,24 @@
1
+ import AbstractController from "../modules/AbstractController.js";
2
+ import GetUserByToken from "../services/http/middleware/GetUserByToken.js";
3
+ class Home extends AbstractController {
4
+ get routes() {
5
+ return {
6
+ get: {
7
+ '/': this.home,
8
+ },
9
+ };
10
+ }
11
+ // eslint-disable-next-line class-methods-use-this
12
+ async home(req, res) {
13
+ return res.json({ message: 'Home' });
14
+ }
15
+ // eslint-disable-next-line class-methods-use-this
16
+ getHttpPath() {
17
+ return '/';
18
+ }
19
+ static get middleware() {
20
+ return new Map([['/{*splat}', [GetUserByToken]]]);
21
+ }
22
+ }
23
+ export default Home;
24
+ //# sourceMappingURL=Home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Home.js","sourceRoot":"","sources":["../../src/controllers/Home.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAClE,OAAO,cAAc,MAAM,+CAA+C,CAAC;AAK3E,MAAM,IAAK,SAAQ,kBAAkB;IACnC,IAAI,MAAM;QACR,OAAO;YACL,GAAG,EAAE;gBACH,GAAG,EAAE,IAAI,CAAC,IAAI;aACf;SACF,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,IAAI,CAAC,GAAqB,EAAE,GAAa;QAC7C,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,kDAAkD;IAClD,WAAW;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AAED,eAAe,IAAI,CAAC"}
@@ -0,0 +1,16 @@
1
+ import Base from '../modules/Base.ts';
2
+ import type { IApp } from '../server.ts';
3
+ import type AbstractController from '../modules/AbstractController.ts';
4
+ /**
5
+ * Class do autoloading a http controllers
6
+ */
7
+ declare class ControllerManager extends Base {
8
+ controllers: Record<string, AbstractController>;
9
+ constructor(app: IApp);
10
+ /**
11
+ * Load controllers
12
+ */
13
+ initControllers(): Promise<void>;
14
+ static get loggerGroup(): string;
15
+ }
16
+ export default ControllerManager;
@@ -0,0 +1,59 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import path from 'node:path';
10
+ import * as url from 'node:url';
11
+ import Base from "../modules/Base.js";
12
+ /**
13
+ * Class do autoloading a http controllers
14
+ */
15
+ class ControllerManager extends Base {
16
+ controllers;
17
+ constructor(app) {
18
+ super(app);
19
+ this.controllers = {};
20
+ }
21
+ /**
22
+ * Load controllers
23
+ */
24
+ async initControllers() {
25
+ const dirname = url.fileURLToPath(new URL('.', import.meta.url));
26
+ const controllersToLoad = await this.getFilesPathWithInheritance(dirname, this.app.foldersConfig.controllers);
27
+ controllersToLoad.sort((a, b) => {
28
+ if (a.file.toLowerCase().endsWith('index.js') ||
29
+ a.file.toLowerCase().endsWith('index.ts')) {
30
+ if (b.file.toLowerCase().endsWith('index.js') ||
31
+ b.file.toLowerCase().endsWith('index.ts')) {
32
+ return 0;
33
+ }
34
+ return -1;
35
+ }
36
+ return 0;
37
+ });
38
+ const controllers = [];
39
+ for (const controller of controllersToLoad) {
40
+ controllers.push(import(__rewriteRelativeImportExtension(controller.path)).then(({ default: ControllerModule }) => {
41
+ const contollerName = ControllerModule.name.toLowerCase();
42
+ let prefix = path.dirname(controller.file);
43
+ if (prefix === '.') {
44
+ prefix = '';
45
+ }
46
+ const controllePath = prefix
47
+ ? `${prefix}/${contollerName}`
48
+ : contollerName;
49
+ this.controllers[controllePath] = new ControllerModule(this.app, prefix);
50
+ }));
51
+ }
52
+ await Promise.all(controllers);
53
+ }
54
+ static get loggerGroup() {
55
+ return 'controller';
56
+ }
57
+ }
58
+ export default ControllerManager;
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAKtC;;GAEG;AACH,MAAM,iBAAkB,SAAQ,IAAI;IAClC,WAAW,CAAqC;IAChD,YAAY,GAAS;QACnB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAC9D,OAAO,EACP,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CACnC,CAAC;QAEF,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,IACE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACzC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,CAAC;gBACD,IACE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACzC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,CAAC;oBACD,OAAO,CAAC,CAAC;gBACX,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CACd,MAAM,kCAAC,UAAU,CAAC,IAAI,EAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE;gBAC7D,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1D,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,MAAM,GAAG,EAAE,CAAC;gBACd,CAAC;gBACD,MAAM,aAAa,GAAG,MAAM;oBAC1B,CAAC,CAAC,GAAG,MAAM,IAAI,aAAa,EAAE;oBAC9B,CAAC,CAAC,aAAa,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,gBAAgB,CACpD,IAAI,CAAC,GAAG,EACR,MAAM,CACP,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,34 @@
1
+ declare const _default: {
2
+ folders: {
3
+ config: string;
4
+ models: string;
5
+ controllers: string;
6
+ locales: string;
7
+ emails: string;
8
+ commands: string;
9
+ migrations: string;
10
+ };
11
+ };
12
+ export default _default;
13
+ /**
14
+ * @param config path to folder with config files
15
+ * @param models path to folder with moidels files
16
+ * @param controllers path to folder with controllers files
17
+ * @param migrations path to folder with migrations files
18
+ * @param locales path to folder with locales files
19
+ * @param migrations path to folder with migrations files
20
+ * @param [emails] path to folder with emails files. Optional
21
+ */
22
+ type TFolderConfigFolders = {
23
+ config: string;
24
+ models: string;
25
+ controllers: string;
26
+ commands: string;
27
+ locales: string;
28
+ migrations: string;
29
+ emails?: string;
30
+ };
31
+ type TFolderConfig = {
32
+ folders: TFolderConfigFolders;
33
+ };
34
+ export { type TFolderConfig, type TFolderConfigFolders };
@@ -0,0 +1,15 @@
1
+ import path from 'node:path';
2
+ const basePath = new URL('.', import.meta.url).pathname;
3
+ export default {
4
+ folders: {
5
+ config: path.resolve(basePath, './config'),
6
+ models: path.resolve(basePath, './models'),
7
+ controllers: path.resolve(basePath, './controllers'),
8
+ locales: path.resolve(basePath, './locales'),
9
+ emails: path.resolve(basePath, './services/messaging/email/templates'),
10
+ commands: path.resolve(basePath, './commands'),
11
+ migrations: path.resolve(basePath, './migrations'),
12
+ },
13
+ };
14
+ export {};
15
+ //# sourceMappingURL=folderConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderConfig.js","sourceRoot":"","sources":["../src/folderConfig.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAExD,eAAe;IACb,OAAO,EAAE;QACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC1C,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC1C,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC;QACpD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC5C,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,sCAAsC,CAAC;QACtE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC9C,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC;KACnD;CACF,CAAC;AAyBF,OAAO,EAAiD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IApp } from '../server.ts';
2
+ export declare let appInstance: IApp;
3
+ export declare const setAppInstance: (app: IApp) => void;
@@ -0,0 +1,8 @@
1
+ export let appInstance;
2
+ export const setAppInstance = (app) => {
3
+ if (appInstance) {
4
+ throw new Error('App instance is already set');
5
+ }
6
+ appInstance = app;
7
+ };
8
+ //# sourceMappingURL=appInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appInstance.js","sourceRoot":"","sources":["../../src/helpers/appInstance.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAI,WAAiB,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAS,EAAE,EAAE;IAC1C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,WAAW,GAAG,GAAG,CAAC;AACpB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const scryptAsync: (arg1: string | Buffer<ArrayBufferLike> | NodeJS.TypedArray<ArrayBufferLike> | DataView<ArrayBufferLike>, arg2: string | Buffer<ArrayBufferLike> | NodeJS.TypedArray<ArrayBufferLike> | DataView<ArrayBufferLike>, arg3: number) => Promise<Buffer<ArrayBufferLike>>;
2
+ export declare const scryptAsyncWithSalt: (stringToHash: string) => Promise<Buffer<ArrayBufferLike>>;
3
+ export declare const scryptAsyncWithSaltAsString: (stringToHash: string) => Promise<string>;
@@ -0,0 +1,14 @@
1
+ import { scrypt } from 'node:crypto';
2
+ import { promisify } from 'node:util';
3
+ import { appInstance } from "./appInstance.js";
4
+ export const scryptAsync = promisify(scrypt);
5
+ export const scryptAsyncWithSalt = async (stringToHash) => {
6
+ const { saltSecret, hashRounds } = appInstance.getConfig('auth');
7
+ const res = await scryptAsync(stringToHash, saltSecret, hashRounds);
8
+ return res;
9
+ };
10
+ export const scryptAsyncWithSaltAsString = async (stringToHash) => {
11
+ const res = await scryptAsyncWithSalt(stringToHash);
12
+ return res.toString('base64url');
13
+ };
14
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/helpers/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAKlC,MAAM,CAAC,CAAC;AAEV,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,YAAoB,EAAE,EAAE;IAChE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEpE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAAE,YAAoB,EAAE,EAAE;IACxE,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ interface getFilesPathWithInheritanceProps {
2
+ internalFolder: string;
3
+ externalFolder: string;
4
+ logger: (val: string) => void;
5
+ loggerFileType?: string;
6
+ filter?: {
7
+ startWithCapital?: boolean;
8
+ notTests?: boolean;
9
+ notHidden?: boolean;
10
+ };
11
+ }
12
+ declare const getFilesPathWithInheritance: ({ internalFolder, externalFolder, logger, loggerFileType, filter: { startWithCapital, notTests, notHidden }, }: getFilesPathWithInheritanceProps) => Promise<{
13
+ path: string;
14
+ file: string;
15
+ }[]>;
16
+ export { getFilesPathWithInheritance };