@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,134 @@
1
+ import Base from "../../modules/Base.js";
2
+ import ValidateService from '../validate/ValidateService.js';
3
+ class DocumentationGenerator extends Base {
4
+ // eslint-disable-next-line class-methods-use-this
5
+ processingFields(fieldsByRoute) {
6
+ const fields = [];
7
+ if (!fieldsByRoute) {
8
+ return fields;
9
+ }
10
+ const entries = Object.entries(fieldsByRoute);
11
+ entries.forEach(([key, value]) => {
12
+ const field = {};
13
+ field.name = key;
14
+ field.type = value.type;
15
+ if (value.exclusiveTests) {
16
+ field.required = value.exclusiveTests.required;
17
+ }
18
+ if (value?.innerType) {
19
+ field.innerType = value?.innerType?.type;
20
+ }
21
+ if (value.fields) {
22
+ field.fields = [];
23
+ // eslint-disable-next-line no-shadow
24
+ const entries = Object.entries(value.fields);
25
+ // eslint-disable-next-line no-shadow
26
+ entries.forEach(([key, value]) => {
27
+ field.fields.push({
28
+ name: key,
29
+ type: value.type,
30
+ });
31
+ });
32
+ }
33
+ fields.push(field);
34
+ });
35
+ return fields;
36
+ }
37
+ // eslint-disable-next-line class-methods-use-this
38
+ selectUniqueFields(fields) {
39
+ return Array.from(new Map(fields.map((item) => [item.name, item])).values()).reduce((uniqueArray, item) => {
40
+ const existingItem = uniqueArray.find((uniqueItem) => uniqueItem.name === item.name);
41
+ if (!existingItem) {
42
+ uniqueArray.push(item);
43
+ }
44
+ else if (item.required) {
45
+ existingItem.required = true;
46
+ }
47
+ return uniqueArray;
48
+ }, []);
49
+ }
50
+ groupFieldsFromSchemas(schemas) {
51
+ const result = [];
52
+ schemas.forEach((schema) => {
53
+ const convertedSchema = new ValidateService(this.app, schema).validator;
54
+ for (const [key, value] of Object.entries(convertedSchema?.fieldsInJsonFormat)) {
55
+ result.push({
56
+ name: key,
57
+ type: value.type,
58
+ required: value.required,
59
+ });
60
+ }
61
+ });
62
+ return result;
63
+ }
64
+ convertDataToDocumentationElement(controllerName, routesInfo, middlewaresInfo, routeMiddlewaresReg) {
65
+ return {
66
+ contollerName: controllerName,
67
+ routesInfo: routesInfo.map((route) => {
68
+ const middlewareQueryParams = new ValidateService(this.app).getMiddlewareParams(middlewaresInfo, routeMiddlewaresReg, {
69
+ method: route.method.toLowerCase(),
70
+ path: route.fullPath,
71
+ }).query;
72
+ const middlewareRequestParams = new ValidateService(this.app).getMiddlewareParams(middlewaresInfo, routeMiddlewaresReg, {
73
+ method: route.method.toLowerCase(),
74
+ path: route.fullPath,
75
+ }).request;
76
+ const queryParams = this.groupFieldsFromSchemas(middlewareQueryParams);
77
+ const requestParams = this.groupFieldsFromSchemas(middlewareRequestParams);
78
+ return {
79
+ [route.fullPath]: {
80
+ method: route.method,
81
+ name: route.name,
82
+ description: route?.description,
83
+ fields: this.selectUniqueFields([
84
+ ...this.processingFields(route.fields),
85
+ ...requestParams,
86
+ ]),
87
+ queryFields: this.selectUniqueFields([
88
+ ...this.processingFields(route.queryFields),
89
+ ...queryParams,
90
+ ]),
91
+ routeMiddlewares: routeMiddlewaresReg
92
+ .map((middleware) => {
93
+ const routeFullPath = route.fullPath.toUpperCase();
94
+ const middlewareFullPath = middleware.fullPath.toUpperCase();
95
+ if (route.method.toLowerCase() ===
96
+ middleware.method.toLowerCase() &&
97
+ (middlewareFullPath === routeFullPath ||
98
+ middlewareFullPath === `${routeFullPath}*`)) {
99
+ return {
100
+ name: middleware.name,
101
+ params: middleware.params,
102
+ authParams: middleware.authParams,
103
+ };
104
+ }
105
+ return null;
106
+ })
107
+ .filter(Boolean),
108
+ controllerMiddlewares: [
109
+ ...new Set(middlewaresInfo
110
+ .filter((middleware) => {
111
+ const routeFullPath = route.fullPath.toUpperCase();
112
+ const middlewareFullPath = middleware.fullPath.toUpperCase();
113
+ const middlewareFullPathWithSliced = middleware.fullPath
114
+ .toUpperCase()
115
+ .slice(0, -1);
116
+ return (middlewareFullPath === routeFullPath ||
117
+ middlewareFullPath === `${routeFullPath}*` ||
118
+ routeFullPath?.indexOf(middlewareFullPathWithSliced) !==
119
+ -1);
120
+ })
121
+ .map(({ name, params, authParams }) => ({
122
+ name,
123
+ params,
124
+ authParams,
125
+ }))),
126
+ ],
127
+ },
128
+ };
129
+ }),
130
+ };
131
+ }
132
+ }
133
+ export default DocumentationGenerator;
134
+ //# sourceMappingURL=DocumentationGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentationGenerator.js","sourceRoot":"","sources":["../../../src/services/documentation/DocumentationGenerator.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import Base from '../../modules/Base.ts';
2
+ import type { IApp } from '../../server.ts';
3
+ import type { Express, Request } from 'express';
4
+ import type { Server } from 'node:http';
5
+ import type { TFunction } from 'i18next';
6
+ export interface FrameworkRequest extends Request {
7
+ appInfo: {
8
+ app: IApp;
9
+ ip?: string | undefined;
10
+ request: Record<string, any>;
11
+ query: Record<string, any>;
12
+ i18n?: {
13
+ t: TFunction;
14
+ language: string;
15
+ };
16
+ };
17
+ }
18
+ /**
19
+ * HTTP server based on Express
20
+ */
21
+ declare class HttpServer extends Base {
22
+ express: Express;
23
+ httpServer: Server;
24
+ constructor(app: IApp);
25
+ /**
26
+ * Add handle for 404 error
27
+ */
28
+ add404Page(): void;
29
+ static get loggerGroup(): string;
30
+ /**
31
+ * Stop http server (mostly for unit testing)
32
+ */
33
+ shutdown(): void;
34
+ }
35
+ export default HttpServer;
@@ -0,0 +1,71 @@
1
+ import http from 'node:http';
2
+ // import path from 'node:path';
3
+ // import * as url from 'node:url';
4
+ import express from 'express';
5
+ import RequestLoggerMiddleware from "./middleware/RequestLogger.js";
6
+ import I18nMiddleware from "./middleware/I18n.js";
7
+ import PrepareAppInfoMiddleware from "./middleware/PrepareAppInfo.js";
8
+ import RequestParserMiddleware from "./middleware/RequestParser.js";
9
+ import IpDetector from "./middleware/IpDetector.js";
10
+ import Cors from "./middleware/Cors.js";
11
+ import Base from "../../modules/Base.js";
12
+ /**
13
+ * HTTP server based on Express
14
+ */
15
+ class HttpServer extends Base {
16
+ express;
17
+ httpServer;
18
+ constructor(app) {
19
+ super(app);
20
+ this.express = express();
21
+ this.express.disable('x-powered-by');
22
+ this.express.use(new RequestLoggerMiddleware(this.app).getMiddleware());
23
+ this.express.use(new PrepareAppInfoMiddleware(this.app).getMiddleware());
24
+ this.express.use(new IpDetector(this.app).getMiddleware());
25
+ this.express.use(new I18nMiddleware(this.app).getMiddleware());
26
+ const httpConfig = this.app.getConfig('http');
27
+ this.express.use(new Cors(this.app, {
28
+ origins: httpConfig.corsDomains,
29
+ }).getMiddleware());
30
+ this.express.use(new RequestParserMiddleware(this.app).getMiddleware());
31
+ // As exprress will check numbersof arguments
32
+ // eslint-disable-next-line no-unused-vars
33
+ this.express.use((err, req, res, next) => {
34
+ // error handling
35
+ console.error(err.stack);
36
+ // TODO
37
+ res.status(500).json({ message: 'Something broke!' });
38
+ });
39
+ this.httpServer = http.createServer(this.express);
40
+ const listener = this.httpServer.listen(httpConfig.port, httpConfig.hostname, () => {
41
+ const address = listener.address();
42
+ const port = typeof address === 'string' ? 0 : address?.port || 0;
43
+ this.logger?.info(`App started and listening on port ${port}`);
44
+ if (+port !== +httpConfig.port) {
45
+ // in case we using port 0
46
+ this.app.updateConfig('http', { port });
47
+ this.logger?.info(`Updating http config to use new port ${port}. Old was ${httpConfig.port} `);
48
+ }
49
+ });
50
+ }
51
+ /**
52
+ * Add handle for 404 error
53
+ */
54
+ add404Page() {
55
+ this.express.use((req, res) => {
56
+ // error handling
57
+ res.status(404).json({ message: '404' });
58
+ });
59
+ }
60
+ static get loggerGroup() {
61
+ return 'service';
62
+ }
63
+ /**
64
+ * Stop http server (mostly for unit testing)
65
+ */
66
+ shutdown() {
67
+ this.httpServer.close();
68
+ }
69
+ }
70
+ export default HttpServer;
71
+ //# sourceMappingURL=HttpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpServer.js","sourceRoot":"","sources":["../../../src/services/http/HttpServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import Base from '../../../modules/Base.ts';
2
+ import type { IApp } from '../../../server.ts';
3
+ import type { Response, NextFunction } from 'express';
4
+ import type { FrameworkRequest } from '../HttpServer.ts';
5
+ declare class AbstractMiddleware extends Base {
6
+ params: any;
7
+ constructor(app: IApp, params?: any);
8
+ static get description(): string;
9
+ get usedAuthParameters(): Array<{
10
+ name: string;
11
+ type: string;
12
+ in: string;
13
+ description: string;
14
+ }>;
15
+ get relatedQueryParameters(): import("yup").ObjectSchema<{}, import("yup").AnyObject, {}, "">;
16
+ get relatedRequestParameters(): import("yup").ObjectSchema<{}, import("yup").AnyObject, {}, "">;
17
+ get relatedReqParameters(): {
18
+ request: import("yup").ObjectSchema<{}, import("yup").AnyObject, {}, "">;
19
+ query: import("yup").ObjectSchema<{}, import("yup").AnyObject, {}, "">;
20
+ };
21
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void | Response>;
22
+ getMiddleware(): (req: FrameworkRequest, res: Response, next: NextFunction) => Promise<void | Response>;
23
+ static get loggerGroup(): string;
24
+ }
25
+ export default AbstractMiddleware;
@@ -0,0 +1,43 @@
1
+ import { object } from 'yup';
2
+ import Base from "../../../modules/Base.js";
3
+ class AbstractMiddleware extends Base {
4
+ params;
5
+ constructor(app, params) {
6
+ super(app);
7
+ this.params = params;
8
+ }
9
+ static get description() {
10
+ return 'Middleware description. Please provide own';
11
+ }
12
+ get usedAuthParameters() {
13
+ return [];
14
+ }
15
+ // eslint-disable-next-line class-methods-use-this
16
+ get relatedQueryParameters() {
17
+ // For example yup.object().shape({page: yup.number().required(),limit: yup.number()})
18
+ return object().shape({});
19
+ }
20
+ // eslint-disable-next-line class-methods-use-this
21
+ get relatedRequestParameters() {
22
+ // For example yup.object().shape({page: yup.number().required(),limit: yup.number()})
23
+ return object().shape({});
24
+ }
25
+ get relatedReqParameters() {
26
+ return {
27
+ request: this.relatedRequestParameters,
28
+ query: this.relatedQueryParameters,
29
+ };
30
+ }
31
+ async middleware(req, res, next) {
32
+ this.logger?.warn('Middleware is not implemented');
33
+ return next();
34
+ }
35
+ getMiddleware() {
36
+ return this.middleware.bind(this);
37
+ }
38
+ static get loggerGroup() {
39
+ return 'middleware';
40
+ }
41
+ }
42
+ export default AbstractMiddleware;
43
+ //# sourceMappingURL=AbstractMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractMiddleware.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/AbstractMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAK5C,MAAM,kBAAmB,SAAQ,IAAI;IACnC,MAAM,CAAM;IAEZ,YAAY,GAAS,EAAE,MAAY;QACjC,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,4CAA4C,CAAC;IACtD,CAAC;IAED,IAAI,kBAAkB;QAMpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kDAAkD;IAClD,IAAI,sBAAsB;QACxB,uFAAuF;QACvF,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,kDAAkD;IAClD,IAAI,wBAAwB;QAC1B,uFAAuF;QACvF,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,wBAAwB;YACtC,KAAK,EAAE,IAAI,CAAC,sBAAsB;SACnC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAAqB,EACrB,GAAa,EACb,IAAkB;QAElB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACnD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAED,eAAe,kBAAkB,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 '../middleware/GetUserByToken.ts';
5
+ declare class AuthMiddleware 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 AuthMiddleware;
@@ -0,0 +1,18 @@
1
+ import AbstractMiddleware from "./AbstractMiddleware.js";
2
+ class AuthMiddleware extends AbstractMiddleware {
3
+ static get description() {
4
+ return 'Allow to pass only if the user provided. Please use any middleware that provide user instance before';
5
+ }
6
+ async middleware(req, res, next) {
7
+ if (!req.appInfo.user) {
8
+ this.logger?.info('User try to access resource without credentials');
9
+ return res.status(401).json({
10
+ error: 'AUTH001',
11
+ message: 'Please login to application',
12
+ });
13
+ }
14
+ return next();
15
+ }
16
+ }
17
+ export default AuthMiddleware;
18
+ //# sourceMappingURL=Auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAMzD,MAAM,cAAe,SAAQ,kBAAkB;IAC7C,MAAM,KAAK,WAAW;QACpB,OAAO,sGAAsG,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAA6C,EAC7C,GAAa,EACb,IAAkB;QAElB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iDAAiD,CAAC,CAAC;YACrE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,6BAA6B;aACvC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ import type { IApp } from '../../../server.ts';
5
+ declare class Cors extends AbstractMiddleware {
6
+ constructor(app: IApp, params: any);
7
+ static get description(): string;
8
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void | Response<any, Record<string, any>>>;
9
+ }
10
+ export default Cors;
@@ -0,0 +1,36 @@
1
+ import AbstractMiddleware from "./AbstractMiddleware.js";
2
+ class Cors extends AbstractMiddleware {
3
+ constructor(app, params) {
4
+ super(app);
5
+ this.params = params;
6
+ if (!Array.isArray(params?.origins) || !params.origins.length) {
7
+ throw new Error('Cors inited without origin config');
8
+ }
9
+ }
10
+ static get description() {
11
+ return 'Add CORS headers to request';
12
+ }
13
+ async middleware(req, res, next) {
14
+ for (const host of this.params.origins) {
15
+ if ((typeof host === 'string' && req.headers.origin === host) ||
16
+ (host instanceof RegExp && host.test(req.headers.origin ?? ''))) {
17
+ res.set('Access-Control-Allow-Origin', req.headers.origin);
18
+ res.set('Vary', 'Origin');
19
+ if (req.method === 'OPTIONS') {
20
+ res.set('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
21
+ res.set('Vary', 'Origin, Access-Control-Request-Headers');
22
+ const allowedHeaders = req.headers['access-control-request-headers'];
23
+ if (allowedHeaders) {
24
+ res.set('Access-Control-Allow-Headers', allowedHeaders);
25
+ }
26
+ res.set('Content-Length', '0');
27
+ res.status(204);
28
+ return res.end();
29
+ }
30
+ }
31
+ }
32
+ return next();
33
+ }
34
+ }
35
+ export default Cors;
36
+ //# sourceMappingURL=Cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cors.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/Cors.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAMzD,MAAM,IAAK,SAAQ,kBAAkB;IACnC,YAAY,GAAS,EAAE,MAAW;QAChC,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,WAAW;QACpB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAqB,EAAE,GAAa,EAAE,IAAkB;QACvE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,IACE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;gBACzD,CAAC,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,EAC/D,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAE1B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC7B,GAAG,CAAC,GAAG,CACL,8BAA8B,EAC9B,gCAAgC,CACjC,CAAC;oBACF,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAC;oBAE1D,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;oBACrE,IAAI,cAAc,EAAE,CAAC;wBACnB,GAAG,CAAC,GAAG,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;oBAC1D,CAAC;oBACD,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;oBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAChB,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAED,eAAe,IAAI,CAAC"}
@@ -0,0 +1,19 @@
1
+ import AbstractMiddleware from './AbstractMiddleware.ts';
2
+ import type { Response, NextFunction } from 'express';
3
+ import type { FrameworkRequest } from '../HttpServer.ts';
4
+ export interface GetUserByTokenAppInfo {
5
+ appInfo: {
6
+ user?: any;
7
+ };
8
+ }
9
+ declare class GetUserByToken extends AbstractMiddleware {
10
+ static get description(): string;
11
+ get usedAuthParameters(): {
12
+ name: string;
13
+ type: string;
14
+ in: string;
15
+ description: string;
16
+ }[];
17
+ middleware(req: FrameworkRequest & GetUserByTokenAppInfo, res: Response, next: NextFunction): Promise<void>;
18
+ }
19
+ export default GetUserByToken;
@@ -0,0 +1,40 @@
1
+ import AbstractMiddleware from "./AbstractMiddleware.js";
2
+ class GetUserByToken extends AbstractMiddleware {
3
+ static get description() {
4
+ return 'Grab a token and try to parse the user from it. It user exist will add req.appInfo.user variable';
5
+ }
6
+ // eslint-disable-next-line class-methods-use-this
7
+ get usedAuthParameters() {
8
+ return [
9
+ {
10
+ name: 'Authorization',
11
+ type: 'apiKey',
12
+ in: 'header',
13
+ description: GetUserByToken.description,
14
+ },
15
+ ];
16
+ }
17
+ async middleware(req, res, next) {
18
+ if (req.appInfo.user) {
19
+ this.logger?.warn('You call GetUserByToken more then once');
20
+ return next();
21
+ }
22
+ let { token } = req.body || {};
23
+ this.logger?.verbose(`GetUserByToken token in BODY ${token}. Token in Authorization header ${req.get('Authorization')}`);
24
+ if (!token) {
25
+ token = req.get('Authorization');
26
+ if (!token || token === 'null') {
27
+ // is null express bug*
28
+ return next();
29
+ }
30
+ }
31
+ const User = this.app.getModel('User');
32
+ const user = await User.getUserByToken(token);
33
+ if (user) {
34
+ req.appInfo.user = user;
35
+ }
36
+ return next();
37
+ }
38
+ }
39
+ export default GetUserByToken;
40
+ //# sourceMappingURL=GetUserByToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetUserByToken.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/GetUserByToken.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAUzD,MAAM,cAAe,SAAQ,kBAAkB;IAC7C,MAAM,KAAK,WAAW;QACpB,OAAO,kGAAkG,CAAC;IAC5G,CAAC;IAED,kDAAkD;IAClD,IAAI,kBAAkB;QACpB,OAAO;YACL;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,QAAQ;gBACZ,WAAW,EAAE,cAAc,CAAC,WAAW;aACxC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAA6C,EAC7C,GAAa,EACb,IAAkB;QAElB,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAC5D,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,CAClB,gCAAgC,KAAK,mCAAmC,GAAG,CAAC,GAAG,CAC7E,eAAe,CAChB,EAAE,CACJ,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC/B,uBAAuB;gBACvB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type TFunction } from 'i18next';
2
+ import AbstractMiddleware from './AbstractMiddleware.ts';
3
+ import type { Response, NextFunction } from 'express';
4
+ import type { FrameworkRequest } from '../HttpServer.ts';
5
+ import type { GetUserByTokenAppInfo } from './GetUserByToken.ts';
6
+ import type { IApp } from '../../../server.ts';
7
+ declare class I18n extends AbstractMiddleware {
8
+ cache: {
9
+ [key: string]: any;
10
+ };
11
+ enabled: boolean;
12
+ lookupQuerystring: string;
13
+ supportedLngs: Array<string>;
14
+ fallbackLng: string;
15
+ i18n: {
16
+ t: TFunction;
17
+ language: string;
18
+ };
19
+ constructor(app: IApp, params?: any);
20
+ static get description(): string;
21
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void>;
22
+ detectors: Record<string, (req: FrameworkRequest & GetUserByTokenAppInfo) => string | undefined | false>;
23
+ detectorOrder: string[];
24
+ detectLang(req: FrameworkRequest, isUseShortCode?: boolean): string;
25
+ }
26
+ export default I18n;
@@ -0,0 +1,97 @@
1
+ import i18next, {} from 'i18next';
2
+ import BackendFS from 'i18next-fs-backend';
3
+ import AbstractMiddleware from "./AbstractMiddleware.js";
4
+ class I18n extends AbstractMiddleware {
5
+ cache = {};
6
+ enabled = true;
7
+ lookupQuerystring = '';
8
+ supportedLngs = [];
9
+ fallbackLng = 'en';
10
+ i18n = {
11
+ t: ((text) => text),
12
+ language: 'en',
13
+ };
14
+ constructor(app, params) {
15
+ super(app, params);
16
+ const I18NConfig = this.app.getConfig('i18n');
17
+ if (I18NConfig.enabled) {
18
+ this.logger?.info('Enabling i18n support');
19
+ this.i18n = i18next;
20
+ // eslint-disable-next-line import-x/no-named-as-default-member
21
+ i18next.use(BackendFS).init({
22
+ backend: {
23
+ loadPath: `${this.app.foldersConfig.locales}/{{lng}}/{{ns}}.json`,
24
+ addPath: `${this.app.foldersConfig.locales}/{{lng}}/{{ns}}.missing.json`,
25
+ },
26
+ fallbackLng: I18NConfig.fallbackLng,
27
+ preload: I18NConfig.preload,
28
+ saveMissing: I18NConfig.saveMissing,
29
+ debug: I18NConfig.debug,
30
+ });
31
+ }
32
+ this.enabled = I18NConfig.enabled;
33
+ this.lookupQuerystring = I18NConfig.lookupQuerystring;
34
+ this.supportedLngs = I18NConfig.supportedLngs;
35
+ this.fallbackLng = I18NConfig.fallbackLng;
36
+ }
37
+ static get description() {
38
+ return 'Provide language detection and translation';
39
+ }
40
+ async middleware(req, res, next) {
41
+ let i18n;
42
+ if (this.enabled) {
43
+ let lang = this.detectLang(req);
44
+ if (!lang || this.supportedLngs.indexOf(lang) === -1) {
45
+ this.logger?.verbose(`Language "${lang}" is not supported or not detected. Using fallback on ${this.fallbackLng}`);
46
+ lang = this.fallbackLng;
47
+ }
48
+ if (!this.cache[lang]) {
49
+ this.cache[lang] = i18next.cloneInstance({
50
+ initAsync: false,
51
+ lng: lang,
52
+ });
53
+ }
54
+ i18n = this.cache[lang];
55
+ }
56
+ if (!i18n) {
57
+ i18n = this.i18n;
58
+ }
59
+ req.appInfo.i18n = i18n;
60
+ //@ts-ignore
61
+ req.i18n = new Proxy(req.appInfo.i18n, {
62
+ get: (target, prop) => {
63
+ this.logger?.warn('Please not use "req.i18n" Use "req.appInfo.i18n"');
64
+ //@ts-ignore
65
+ return target[prop];
66
+ },
67
+ });
68
+ return next();
69
+ }
70
+ detectors = {
71
+ XLang: (req) => req.get('X-Lang'), // grab from header
72
+ query: (req) => req.query ? req.query[this.lookupQuerystring] : false, // grab from query
73
+ user: (req) => req.appInfo?.user?.locale, // what if we have a user and user have a defined locale?
74
+ };
75
+ detectorOrder = ['XLang', 'query', 'user'];
76
+ detectLang(req, isUseShortCode = true) {
77
+ let lang = '';
78
+ for (const detectorName of this.detectorOrder) {
79
+ const lng = this.detectors[detectorName](req);
80
+ if (!lng) {
81
+ continue;
82
+ }
83
+ if (i18next.services.languageUtils.isSupportedCode(lng)) {
84
+ if (isUseShortCode) {
85
+ lang = i18next.services.languageUtils.getLanguagePartFromCode(lng);
86
+ }
87
+ else {
88
+ lang = lng;
89
+ }
90
+ break;
91
+ }
92
+ }
93
+ return lang;
94
+ }
95
+ }
96
+ export default I18n;
97
+ //# sourceMappingURL=I18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18n.js","sourceRoot":"","sources":["../../../../src/services/http/middleware/I18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { BlockList } from 'node:net';
2
+ import AbstractMiddleware from './AbstractMiddleware.ts';
3
+ import type { IApp } from '../../../server.ts';
4
+ import type { Response, NextFunction } from 'express';
5
+ import type { FrameworkRequest } from '../HttpServer.ts';
6
+ declare class IpDetector extends AbstractMiddleware {
7
+ static get description(): string;
8
+ blockList: BlockList;
9
+ constructor(app: IApp, params?: any);
10
+ middleware(req: FrameworkRequest, res: Response, next: NextFunction): Promise<void>;
11
+ }
12
+ export default IpDetector;