@nest-omni/core 1.0.3 → 1.0.6

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 (265) hide show
  1. package/package.json +1 -4
  2. package/src/boilerplate.polyfill.d.ts +39 -0
  3. package/src/boilerplate.polyfill.js +78 -0
  4. package/src/boilerplate.polyfill.ts +202 -0
  5. package/src/common/abstract-client.service.d.ts +20 -0
  6. package/src/common/abstract-client.service.js +39 -0
  7. package/src/common/abstract-client.service.ts +56 -0
  8. package/src/common/abstract.entity.d.ts +24 -0
  9. package/src/common/abstract.entity.js +152 -0
  10. package/src/common/abstract.entity.ts +73 -0
  11. package/src/common/dto/abstract.dto.d.ts +13 -0
  12. package/src/common/dto/abstract.dto.js +96 -0
  13. package/src/common/dto/abstract.dto.ts +64 -0
  14. package/src/common/dto/bulk-id.dto.d.ts +3 -0
  15. package/src/common/dto/bulk-id.dto.js +63 -0
  16. package/src/common/dto/bulk-id.dto.ts +13 -0
  17. package/src/common/dto/create-translation.dto.d.ts +5 -0
  18. package/src/common/dto/create-translation.dto.js +63 -0
  19. package/src/common/dto/create-translation.dto.ts +10 -0
  20. package/src/common/dto/page-meta.dto.d.ts +15 -0
  21. package/src/common/dto/page-meta.dto.js +88 -0
  22. package/src/common/dto/page-meta.dto.ts +37 -0
  23. package/src/common/dto/page-options.dto.d.ts +8 -0
  24. package/src/common/dto/page-options.dto.js +87 -0
  25. package/src/common/dto/page-options.dto.ts +35 -0
  26. package/src/common/dto/page.dto.d.ts +11 -0
  27. package/src/common/dto/page.dto.js +94 -0
  28. package/src/common/dto/page.dto.ts +36 -0
  29. package/src/common/utils.d.ts +14 -0
  30. package/src/common/utils.js +39 -0
  31. package/src/common/utils.ts +45 -0
  32. package/src/constants/index.d.ts +4 -0
  33. package/src/constants/index.js +20 -0
  34. package/src/constants/index.ts +4 -0
  35. package/src/constants/language-code.d.ts +5 -0
  36. package/src/constants/language-code.js +10 -0
  37. package/src/constants/language-code.ts +7 -0
  38. package/src/constants/order.d.ts +4 -0
  39. package/src/constants/order.js +8 -0
  40. package/src/constants/order.ts +4 -0
  41. package/src/constants/role-type.d.ts +4 -0
  42. package/src/constants/role-type.js +8 -0
  43. package/src/constants/role-type.ts +4 -0
  44. package/src/constants/token-type.d.ts +4 -0
  45. package/src/constants/token-type.js +8 -0
  46. package/src/constants/token-type.ts +4 -0
  47. package/src/decorators/api-page-ok-response.decorator.d.ts +5 -0
  48. package/src/decorators/api-page-ok-response.decorator.js +25 -0
  49. package/src/decorators/api-page-ok-response.decorator.ts +31 -0
  50. package/src/decorators/auth-user.decorator.d.ts +1 -0
  51. package/src/decorators/auth-user.decorator.js +15 -0
  52. package/src/decorators/auth-user.decorator.ts +16 -0
  53. package/src/decorators/controller.decorator.d.ts +1 -0
  54. package/src/decorators/controller.decorator.js +34 -0
  55. package/src/decorators/controller.decorator.ts +8 -0
  56. package/src/decorators/field.decorators.d.ts +71 -0
  57. package/src/decorators/field.decorators.js +455 -0
  58. package/src/decorators/field.decorators.ts +773 -0
  59. package/src/decorators/http.decorators.d.ts +3 -0
  60. package/src/decorators/http.decorators.js +8 -0
  61. package/src/decorators/http.decorators.ts +10 -0
  62. package/src/decorators/index.d.ts +12 -0
  63. package/src/decorators/index.js +28 -0
  64. package/src/decorators/index.ts +12 -0
  65. package/src/decorators/omni-auth.decorator.d.ts +8 -0
  66. package/src/decorators/omni-auth.decorator.js +60 -0
  67. package/src/decorators/omni-auth.decorator.ts +46 -0
  68. package/src/decorators/operation.decorator.d.ts +1 -0
  69. package/src/decorators/operation.decorator.js +6 -0
  70. package/src/decorators/operation.decorator.ts +4 -0
  71. package/src/decorators/property.decorators.d.ts +15 -0
  72. package/src/decorators/property.decorators.js +36 -0
  73. package/src/decorators/property.decorators.ts +62 -0
  74. package/src/decorators/public-route.decorator.d.ts +3 -0
  75. package/src/decorators/public-route.decorator.js +8 -0
  76. package/src/decorators/public-route.decorator.ts +8 -0
  77. package/src/decorators/swagger.schema.d.ts +5 -0
  78. package/src/decorators/swagger.schema.js +82 -0
  79. package/src/decorators/swagger.schema.ts +117 -0
  80. package/src/decorators/timestamp-column.decorator.d.ts +1 -0
  81. package/src/decorators/timestamp-column.decorator.js +28 -0
  82. package/src/decorators/timestamp-column.decorator.ts +29 -0
  83. package/src/decorators/transform.decorators.d.ts +35 -0
  84. package/src/decorators/transform.decorators.js +122 -0
  85. package/src/decorators/transform.decorators.ts +147 -0
  86. package/src/decorators/translate.decorator.d.ts +5 -0
  87. package/src/decorators/translate.decorator.js +18 -0
  88. package/src/decorators/translate.decorator.ts +19 -0
  89. package/src/decorators/use-dto.decorator.d.ts +4 -0
  90. package/src/decorators/use-dto.decorator.js +9 -0
  91. package/src/decorators/use-dto.decorator.ts +11 -0
  92. package/src/decorators/user-check.decorator.d.ts +6 -0
  93. package/src/decorators/user-check.decorator.js +44 -0
  94. package/src/decorators/user-check.decorator.ts +30 -0
  95. package/src/decorators/user.decorator.d.ts +8 -0
  96. package/src/decorators/user.decorator.js +62 -0
  97. package/src/decorators/user.decorator.ts +48 -0
  98. package/src/decorators/user_auth.decorator.d.ts +1 -0
  99. package/src/decorators/user_auth.decorator.js +16 -0
  100. package/src/decorators/user_auth.decorator.ts +15 -0
  101. package/src/decorators/validator.decorators.d.ts +10 -0
  102. package/src/decorators/validator.decorators.js +59 -0
  103. package/src/decorators/validator.decorators.ts +78 -0
  104. package/src/exceptions/file-not-image.exception.d.ts +4 -0
  105. package/src/exceptions/file-not-image.exception.js +10 -0
  106. package/src/exceptions/file-not-image.exception.ts +7 -0
  107. package/src/exceptions/index.d.ts +2 -0
  108. package/src/exceptions/index.js +18 -0
  109. package/src/exceptions/index.ts +2 -0
  110. package/src/exceptions/page-type.exception.d.ts +4 -0
  111. package/src/exceptions/page-type.exception.js +10 -0
  112. package/src/exceptions/page-type.exception.ts +7 -0
  113. package/src/exceptions/user-not-found.exception.d.ts +4 -0
  114. package/src/exceptions/user-not-found.exception.js +10 -0
  115. package/src/exceptions/user-not-found.exception.ts +7 -0
  116. package/src/filters/bad-request.filter.d.ts +5 -0
  117. package/src/filters/bad-request.filter.js +104 -0
  118. package/src/filters/bad-request.filter.ts +67 -0
  119. package/src/filters/constraint-errors.d.ts +1 -0
  120. package/src/filters/constraint-errors.js +7 -0
  121. package/src/filters/constraint-errors.ts +5 -0
  122. package/src/filters/index.d.ts +3 -0
  123. package/src/filters/index.js +19 -0
  124. package/src/filters/index.ts +3 -0
  125. package/src/filters/query-failed.filter.d.ts +10 -0
  126. package/src/filters/query-failed.filter.js +81 -0
  127. package/src/filters/query-failed.filter.ts +32 -0
  128. package/src/health-checker/health-checker.controller.d.ts +15 -0
  129. package/src/health-checker/health-checker.controller.js +104 -0
  130. package/src/health-checker/health-checker.controller.ts +51 -0
  131. package/src/health-checker/health-checker.module.d.ts +2 -0
  132. package/src/health-checker/health-checker.module.js +69 -0
  133. package/src/health-checker/health-checker.module.ts +13 -0
  134. package/src/health-checker/health-indicators/service.indicator.d.ts +8 -0
  135. package/src/health-checker/health-indicators/service.indicator.js +102 -0
  136. package/src/health-checker/health-indicators/service.indicator.ts +44 -0
  137. package/src/helpers/common.helper.d.ts +16 -0
  138. package/src/helpers/common.helper.js +49 -0
  139. package/src/helpers/common.helper.ts +49 -0
  140. package/src/helpers/date.helper.d.ts +10 -0
  141. package/src/helpers/date.helper.js +81 -0
  142. package/src/helpers/date.helper.ts +64 -0
  143. package/src/helpers/excel.helper.d.ts +27 -0
  144. package/src/helpers/excel.helper.js +338 -0
  145. package/src/helpers/index.d.ts +3 -0
  146. package/src/helpers/index.js +19 -0
  147. package/src/helpers/index.ts +3 -0
  148. package/src/i18n/en_US/validation.json +38 -0
  149. package/src/i18n/zh_CN/validation.json +38 -0
  150. package/src/index.d.ts +11 -0
  151. package/src/index.js +28 -0
  152. package/src/index.ts +12 -0
  153. package/src/interceptors/auth-user.interceptor.d.ts +4 -0
  154. package/src/interceptors/auth-user.interceptor.js +68 -0
  155. package/src/interceptors/auth-user.interceptor.ts +20 -0
  156. package/src/interceptors/index.d.ts +2 -0
  157. package/src/interceptors/index.js +18 -0
  158. package/src/interceptors/index.ts +2 -0
  159. package/src/interceptors/language-interceptor.service.d.ts +6 -0
  160. package/src/interceptors/language-interceptor.service.js +74 -0
  161. package/src/interceptors/language-interceptor.service.ts +31 -0
  162. package/src/interceptors/translation-interceptor.service.d.ts +5 -0
  163. package/src/interceptors/translation-interceptor.service.js +83 -0
  164. package/src/interceptors/translation-interceptor.service.ts +43 -0
  165. package/src/interfaces/IApiFile.d.ts +4 -0
  166. package/src/interfaces/IApiFile.js +2 -0
  167. package/src/interfaces/IApiFile.ts +4 -0
  168. package/src/interfaces/IFile.d.ts +9 -0
  169. package/src/interfaces/IFile.js +2 -0
  170. package/src/interfaces/IFile.ts +8 -0
  171. package/src/interfaces/ITranslationDecoratorInterface.d.ts +3 -0
  172. package/src/interfaces/ITranslationDecoratorInterface.js +2 -0
  173. package/src/interfaces/ITranslationDecoratorInterface.ts +3 -0
  174. package/src/interfaces/index.d.ts +3 -0
  175. package/src/interfaces/index.js +19 -0
  176. package/src/interfaces/index.ts +3 -0
  177. package/src/interfaces/response.d.ts +25 -0
  178. package/src/interfaces/response.js +2 -0
  179. package/src/interfaces/response.ts +37 -0
  180. package/src/middlewares/index.d.ts +3 -0
  181. package/src/middlewares/index.js +19 -0
  182. package/src/middlewares/index.ts +3 -0
  183. package/src/middlewares/omni-auth.middleware.d.ts +1 -0
  184. package/src/middlewares/omni-auth.middleware.js +13 -0
  185. package/src/middlewares/omni-auth.middleware.ts +10 -0
  186. package/src/middlewares/powerby.middleware.d.ts +1 -0
  187. package/src/middlewares/powerby.middleware.js +10 -0
  188. package/src/middlewares/powerby.middleware.ts +6 -0
  189. package/src/middlewares/request-id.middleware.d.ts +7 -0
  190. package/src/middlewares/request-id.middleware.js +22 -0
  191. package/src/middlewares/request-id.middleware.ts +28 -0
  192. package/src/providers/context.provider.d.ts +32 -0
  193. package/src/providers/context.provider.js +73 -0
  194. package/src/providers/context.provider.ts +98 -0
  195. package/src/providers/generator.provider.d.ts +13 -0
  196. package/src/providers/generator.provider.js +54 -0
  197. package/src/providers/generator.provider.ts +66 -0
  198. package/src/providers/index.d.ts +2 -0
  199. package/src/providers/index.js +18 -0
  200. package/src/providers/index.ts +2 -0
  201. package/src/setup/bootstrap.setup.d.ts +5 -0
  202. package/src/setup/bootstrap.setup.js +138 -0
  203. package/src/setup/bootstrap.setup.ts +139 -0
  204. package/src/setup/index.d.ts +1 -0
  205. package/src/setup/index.js +17 -0
  206. package/src/setup/index.ts +1 -0
  207. package/src/setup/microservices.setup.js +55 -0
  208. package/src/setup-swagger.d.ts +2 -0
  209. package/src/setup-swagger.js +62 -0
  210. package/src/setup-swagger.ts +67 -0
  211. package/src/shared/index.d.ts +2 -0
  212. package/src/shared/index.js +18 -0
  213. package/src/shared/index.ts +2 -0
  214. package/src/shared/serviceRegistryModule.d.ts +2 -0
  215. package/src/shared/serviceRegistryModule.js +176 -0
  216. package/src/shared/serviceRegistryModule.ts +110 -0
  217. package/src/shared/services/api-config.service.d.ts +73 -0
  218. package/src/shared/services/api-config.service.js +335 -0
  219. package/src/shared/services/api-config.service.ts +319 -0
  220. package/src/shared/services/aws-s3.service.d.ts +10 -0
  221. package/src/shared/services/aws-s3.service.js +96 -0
  222. package/src/shared/services/aws-s3.service.ts +39 -0
  223. package/src/shared/services/generator.service.d.ts +4 -0
  224. package/src/shared/services/generator.service.js +67 -0
  225. package/src/shared/services/generator.service.ts +13 -0
  226. package/src/shared/services/index.d.ts +5 -0
  227. package/src/shared/services/index.js +21 -0
  228. package/src/shared/services/index.ts +5 -0
  229. package/src/shared/services/translation.service.d.ts +9 -0
  230. package/src/shared/services/translation.service.js +109 -0
  231. package/src/shared/services/translation.service.ts +59 -0
  232. package/src/shared/services/validator.service.d.ts +3 -0
  233. package/src/shared/services/validator.service.js +64 -0
  234. package/src/shared/services/validator.service.ts +10 -0
  235. package/src/snake-naming.strategy.d.ts +11 -0
  236. package/src/snake-naming.strategy.js +37 -0
  237. package/src/snake-naming.strategy.ts +64 -0
  238. package/src/types.d.ts +9 -0
  239. package/src/types.js +2 -0
  240. package/src/types.ts +44 -0
  241. package/src/validators/file-mimetype.validator.d.ts +13 -0
  242. package/src/validators/file-mimetype.validator.js +21 -0
  243. package/src/validators/file-mimetype.validator.ts +34 -0
  244. package/src/validators/index.d.ts +3 -0
  245. package/src/validators/index.js +19 -0
  246. package/src/validators/index.ts +3 -0
  247. package/src/validators/is-exists.validator.d.ts +18 -0
  248. package/src/validators/is-exists.validator.js +99 -0
  249. package/src/validators/is-exists.validator.ts +60 -0
  250. package/src/validators/is-unique.validator.d.ts +17 -0
  251. package/src/validators/is-unique.validator.js +131 -0
  252. package/src/validators/is-unique.validator.ts +93 -0
  253. package/src/validators/phone-country-code.validator.d.ts +2 -0
  254. package/src/validators/phone-country-code.validator.js +30 -0
  255. package/src/validators/phone-country-code.validator.ts +36 -0
  256. package/src/validators/same-as.validator.d.ts +2 -0
  257. package/src/validators/same-as.validator.js +25 -0
  258. package/src/validators/same-as.validator.ts +27 -0
  259. package/src/validators/skip-empty.validator.d.ts +6 -0
  260. package/src/validators/skip-empty.validator.js +23 -0
  261. package/src/validators/skip-empty.validator.ts +25 -0
  262. package/tsconfig.json +26 -0
  263. package/tsconfig.lib.json +16 -0
  264. package/tsconfig.tsbuildinfo +1 -0
  265. /package/{README → README.md} +0 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextProvider = void 0;
4
+ const nestjs_cls_1 = require("nestjs-cls");
5
+ class ContextProvider {
6
+ static get(key) {
7
+ const store = nestjs_cls_1.ClsServiceManager.getClsService();
8
+ return store.get(ContextProvider.getKeyWithNamespace(key));
9
+ }
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ static set(key, value) {
12
+ const store = nestjs_cls_1.ClsServiceManager.getClsService();
13
+ store.set(ContextProvider.getKeyWithNamespace(key), value);
14
+ }
15
+ static getKeyWithNamespace(key) {
16
+ return `${ContextProvider.nameSpace}.${key}`;
17
+ }
18
+ static setRouter(user) {
19
+ ContextProvider.set(ContextProvider.routerKey, user);
20
+ }
21
+ static getCanLog() {
22
+ return ContextProvider.getRouter().canLog;
23
+ }
24
+ static getRouter() {
25
+ const value = ContextProvider.get(ContextProvider.routerKey);
26
+ if (value) {
27
+ // @ts-ignore
28
+ return value;
29
+ }
30
+ return {
31
+ action: { feature: '', action: '' },
32
+ id: '',
33
+ method: {},
34
+ ip: '',
35
+ canLog: false,
36
+ };
37
+ }
38
+ static setRequestId(id) {
39
+ ContextProvider.set(ContextProvider.requestKey, id);
40
+ }
41
+ static getRequestId() {
42
+ return ContextProvider.get(ContextProvider.requestKey);
43
+ }
44
+ static setAuthUser(user) {
45
+ ContextProvider.set(ContextProvider.authUserKey, user);
46
+ }
47
+ static setLanguage(language) {
48
+ ContextProvider.set(ContextProvider.languageKey, language);
49
+ }
50
+ static getLanguage() {
51
+ return ContextProvider.get(ContextProvider.languageKey);
52
+ }
53
+ static getAuthUserField(field) {
54
+ var _a;
55
+ const auth = (_a = ContextProvider.get(ContextProvider.authUserKey)) !== null && _a !== void 0 ? _a : {};
56
+ return auth[field];
57
+ }
58
+ static getAuthUser() {
59
+ return ContextProvider.get(ContextProvider.authUserKey);
60
+ }
61
+ static getAppId() {
62
+ return ContextProvider.getAuthUserField('appId');
63
+ }
64
+ static getTenantId() {
65
+ return ContextProvider.getAuthUserField('tenantId');
66
+ }
67
+ }
68
+ exports.ContextProvider = ContextProvider;
69
+ ContextProvider.nameSpace = 'request';
70
+ ContextProvider.authUserKey = 'user_key';
71
+ ContextProvider.routerKey = 'router_key';
72
+ ContextProvider.languageKey = 'language_key';
73
+ ContextProvider.requestKey = 'request_key';
@@ -0,0 +1,98 @@
1
+ import { ClsServiceManager } from 'nestjs-cls';
2
+ import { IOmniAuth } from '../decorators/omni-auth.decorator';
3
+
4
+ export class ContextProvider {
5
+ private static readonly nameSpace = 'request';
6
+
7
+ private static readonly authUserKey = 'user_key';
8
+
9
+ private static readonly routerKey = 'router_key';
10
+
11
+ private static readonly languageKey = 'language_key';
12
+
13
+ private static readonly requestKey = 'request_key';
14
+
15
+ private static get<T>(key: string) {
16
+ const store = ClsServiceManager.getClsService();
17
+
18
+ return store.get<T>(ContextProvider.getKeyWithNamespace(key));
19
+ }
20
+
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ private static set(key: string, value: any): void {
23
+ const store = ClsServiceManager.getClsService();
24
+
25
+ store.set(ContextProvider.getKeyWithNamespace(key), value);
26
+ }
27
+
28
+ private static getKeyWithNamespace(key: string): string {
29
+ return `${ContextProvider.nameSpace}.${key}`;
30
+ }
31
+
32
+ static setRouter(user: any): void {
33
+ ContextProvider.set(ContextProvider.routerKey, user);
34
+ }
35
+
36
+ static getCanLog(): boolean {
37
+ return ContextProvider.getRouter().canLog;
38
+ }
39
+
40
+ static getRouter(): {
41
+ action: { feature: string; action: string };
42
+ id: string;
43
+ method: object;
44
+ ip: string;
45
+ canLog: boolean;
46
+ } {
47
+ const value = ContextProvider.get(ContextProvider.routerKey);
48
+ if (value) {
49
+ // @ts-ignore
50
+ return value;
51
+ }
52
+ return {
53
+ action: { feature: '', action: '' },
54
+ id: '',
55
+ method: {},
56
+ ip: '',
57
+ canLog: false,
58
+ };
59
+ }
60
+
61
+ static setRequestId(id: string): void {
62
+ ContextProvider.set(ContextProvider.requestKey, id);
63
+ }
64
+
65
+ static getRequestId(): string {
66
+ return ContextProvider.get(ContextProvider.requestKey);
67
+ }
68
+
69
+ static setAuthUser(user: IOmniAuth): void {
70
+ ContextProvider.set(ContextProvider.authUserKey, user);
71
+ }
72
+
73
+ static setLanguage(language: string): void {
74
+ ContextProvider.set(ContextProvider.languageKey, language);
75
+ }
76
+
77
+ static getLanguage(): string {
78
+ return ContextProvider.get(ContextProvider.languageKey);
79
+ }
80
+
81
+ static getAuthUserField<T extends keyof IOmniAuth>(field: T): IOmniAuth[T] {
82
+ const auth: IOmniAuth =
83
+ ContextProvider.get(ContextProvider.authUserKey) ?? ({} as IOmniAuth);
84
+ return auth[field];
85
+ }
86
+
87
+ static getAuthUser(): IOmniAuth {
88
+ return ContextProvider.get(ContextProvider.authUserKey);
89
+ }
90
+
91
+ static getAppId(): string {
92
+ return ContextProvider.getAuthUserField('appId');
93
+ }
94
+
95
+ static getTenantId(): string {
96
+ return ContextProvider.getAuthUserField('tenantId');
97
+ }
98
+ }
@@ -0,0 +1,13 @@
1
+ export declare class GeneratorProvider {
2
+ static uuid(): string;
3
+ static fileName(ext: string): string;
4
+ static getS3PublicUrl(key: string): string;
5
+ static getS3Key(publicUrl: string): string;
6
+ static generateVerificationCode(): string;
7
+ static generatePassword(): string;
8
+ /**
9
+ * generate random string
10
+ * @param length
11
+ */
12
+ static generateRandomString(length: number): string;
13
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeneratorProvider = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class GeneratorProvider {
6
+ static uuid() {
7
+ return (0, uuid_1.v1)();
8
+ }
9
+ static fileName(ext) {
10
+ return GeneratorProvider.uuid() + '.' + ext;
11
+ }
12
+ static getS3PublicUrl(key) {
13
+ if (!key) {
14
+ throw new TypeError('key is required');
15
+ }
16
+ return `https://s3.${process.env.AWS_S3_BUCKET_NAME_REGION}.amazonaws.com/${process.env.AWS_S3_BUCKET_NAME}/${key}`;
17
+ }
18
+ static getS3Key(publicUrl) {
19
+ if (!publicUrl) {
20
+ throw new TypeError('key is required');
21
+ }
22
+ const exec = new RegExp(`(?<=https://s3.${process.env.AWS_S3_BUCKET_NAME_REGION}.amazonaws.com/${process.env.AWS_S3_BUCKET_NAME}/).*`).exec(publicUrl);
23
+ if (!exec) {
24
+ throw new TypeError('publicUrl is invalid');
25
+ }
26
+ return exec[0];
27
+ }
28
+ static generateVerificationCode() {
29
+ return Math.floor(1000 + Math.random() * 9000).toString();
30
+ }
31
+ static generatePassword() {
32
+ const lowercase = 'abcdefghijklmnopqrstuvwxyz';
33
+ const uppercase = lowercase.toUpperCase();
34
+ const numbers = '0123456789';
35
+ let text = '';
36
+ for (let i = 0; i < 12; i++) {
37
+ text += uppercase.charAt(Math.floor(Math.random() * uppercase.length));
38
+ text += lowercase.charAt(Math.floor(Math.random() * lowercase.length));
39
+ text += numbers.charAt(Math.floor(Math.random() * numbers.length));
40
+ }
41
+ return text;
42
+ }
43
+ /**
44
+ * generate random string
45
+ * @param length
46
+ */
47
+ static generateRandomString(length) {
48
+ return Math.random()
49
+ .toString(36)
50
+ .replace(/[^\dA-Za-z]+/g, '')
51
+ .slice(0, Math.max(0, length));
52
+ }
53
+ }
54
+ exports.GeneratorProvider = GeneratorProvider;
@@ -0,0 +1,66 @@
1
+ import { v1 as uuid } from 'uuid';
2
+
3
+ export class GeneratorProvider {
4
+ static uuid(): string {
5
+ return uuid();
6
+ }
7
+
8
+ static fileName(ext: string): string {
9
+ return GeneratorProvider.uuid() + '.' + ext;
10
+ }
11
+
12
+ static getS3PublicUrl(key: string): string {
13
+ if (!key) {
14
+ throw new TypeError('key is required');
15
+ }
16
+
17
+ return `https://s3.${process.env.AWS_S3_BUCKET_NAME_REGION}.amazonaws.com/${process.env.AWS_S3_BUCKET_NAME}/${key}`;
18
+ }
19
+
20
+ static getS3Key(publicUrl: string): string {
21
+ if (!publicUrl) {
22
+ throw new TypeError('key is required');
23
+ }
24
+
25
+ const exec = new RegExp(
26
+ `(?<=https://s3.${process.env.AWS_S3_BUCKET_NAME_REGION}.amazonaws.com/${process.env.AWS_S3_BUCKET_NAME}/).*`,
27
+ ).exec(publicUrl);
28
+
29
+ if (!exec) {
30
+ throw new TypeError('publicUrl is invalid');
31
+ }
32
+
33
+ return exec[0];
34
+ }
35
+
36
+ static generateVerificationCode(): string {
37
+ return Math.floor(1000 + Math.random() * 9000).toString();
38
+ }
39
+
40
+ static generatePassword(): string {
41
+ const lowercase = 'abcdefghijklmnopqrstuvwxyz';
42
+ const uppercase = lowercase.toUpperCase();
43
+ const numbers = '0123456789';
44
+
45
+ let text = '';
46
+
47
+ for (let i = 0; i < 12; i++) {
48
+ text += uppercase.charAt(Math.floor(Math.random() * uppercase.length));
49
+ text += lowercase.charAt(Math.floor(Math.random() * lowercase.length));
50
+ text += numbers.charAt(Math.floor(Math.random() * numbers.length));
51
+ }
52
+
53
+ return text;
54
+ }
55
+
56
+ /**
57
+ * generate random string
58
+ * @param length
59
+ */
60
+ static generateRandomString(length: number): string {
61
+ return Math.random()
62
+ .toString(36)
63
+ .replace(/[^\dA-Za-z]+/g, '')
64
+ .slice(0, Math.max(0, length));
65
+ }
66
+ }
@@ -0,0 +1,2 @@
1
+ export * from './context.provider';
2
+ export * from './generator.provider';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./context.provider"), exports);
18
+ __exportStar(require("./generator.provider"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './context.provider';
2
+ export * from './generator.provider';
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node/http" />
3
+ /// <reference types="pino-http" />
4
+ import type { NestExpressApplication } from '@nestjs/platform-express';
5
+ export declare function bootstrapSetup(AppModule: any, SetupSwagger: any): Promise<NestExpressApplication<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>>>;
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.bootstrapSetup = void 0;
39
+ const core_1 = require("@nestjs/core");
40
+ const typeorm_transactional_1 = require("typeorm-transactional");
41
+ const skywalking_backend_js_1 = __importDefault(require("skywalking-backend-js"));
42
+ const nestjs_pino_1 = require("nestjs-pino");
43
+ const session = __importStar(require("express-session"));
44
+ const path_1 = require("path");
45
+ const core_2 = require("@omni/core");
46
+ const common_1 = require("@nestjs/common");
47
+ const nestjs_sentry_1 = require("@ntegral/nestjs-sentry");
48
+ const nestjs_i18n_1 = require("nestjs-i18n");
49
+ const crud_1 = require("@dataui/crud");
50
+ const auth_user_interceptor_1 = require("../interceptors/auth-user.interceptor");
51
+ const nestjs_cls_1 = require("nestjs-cls");
52
+ crud_1.CrudConfigService.load({
53
+ auth: {
54
+ property: 'user',
55
+ },
56
+ params: {
57
+ id: {
58
+ field: 'id',
59
+ type: 'string',
60
+ primary: true,
61
+ },
62
+ },
63
+ query: {
64
+ limit: 10,
65
+ alwaysPaginate: true,
66
+ },
67
+ routes: {
68
+ updateOneBase: {
69
+ allowParamsOverride: false,
70
+ },
71
+ deleteOneBase: {
72
+ returnDeleted: false,
73
+ },
74
+ createOneBase: {
75
+ returnShallow: false,
76
+ },
77
+ },
78
+ });
79
+ function bootstrapSetup(AppModule, SetupSwagger) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ (0, typeorm_transactional_1.initializeTransactionalContext)();
82
+ const app = yield core_1.NestFactory.create(AppModule, {
83
+ bufferLogs: true,
84
+ });
85
+ const configService = app.select(core_2.ServiceRegistryModule).get(core_2.ApiConfigService);
86
+ app.useLogger(app.get(nestjs_pino_1.Logger));
87
+ app.flushLogs();
88
+ app.enableShutdownHooks();
89
+ app.enableVersioning();
90
+ app.enable('trust proxy');
91
+ const reflector = app.get(core_1.Reflector);
92
+ app.useGlobalFilters(new core_2.HttpExceptionFilter(), new core_2.QueryFailedFilter(reflector));
93
+ app.use(new nestjs_cls_1.ClsMiddleware({}).use, (0, core_2.RequestIdMiddleware)(), (0, core_2.PowerByMiddleware)(), (0, core_2.OmniAuthMiddleware)());
94
+ app.useStaticAssets('public', { prefix: '/' });
95
+ app.useGlobalInterceptors(new auth_user_interceptor_1.AuthUserInterceptor(), new core_2.TranslationInterceptor(), new nestjs_pino_1.LoggerErrorInterceptor(), new nestjs_sentry_1.SentryInterceptor({
96
+ filters: [
97
+ {
98
+ type: common_1.HttpException,
99
+ filter: (exception) => {
100
+ const status = exception.getStatus();
101
+ if (status === 401 || status === 404) {
102
+ return true;
103
+ }
104
+ return 200 > status;
105
+ },
106
+ },
107
+ ],
108
+ }));
109
+ app.useGlobalPipes(new nestjs_i18n_1.I18nValidationPipe({
110
+ whitelist: true,
111
+ errorHttpStatusCode: common_1.HttpStatus.UNPROCESSABLE_ENTITY,
112
+ transform: true,
113
+ stopAtFirstError: true,
114
+ validationError: { target: false, value: false },
115
+ }));
116
+ if (configService.skywalkingEnabled) {
117
+ skywalking_backend_js_1.default.start();
118
+ }
119
+ if (configService.documentationEnabled && SetupSwagger) {
120
+ SetupSwagger(app, configService.documentationPath);
121
+ }
122
+ if (configService.viewsEnabled) {
123
+ app.setBaseViewsDir((0, path_1.join)(__dirname, 'views'));
124
+ app.setViewEngine('ejs');
125
+ }
126
+ if (configService.sessionEnabled) {
127
+ app.use(session(configService.sessionConfig));
128
+ }
129
+ if (configService.corsEnabled) {
130
+ app.enableCors(configService.corsConfig);
131
+ }
132
+ const port = configService.appConfig.port;
133
+ yield app.listen(port);
134
+ console.info(`server running on ${yield app.getUrl()}`);
135
+ return app;
136
+ });
137
+ }
138
+ exports.bootstrapSetup = bootstrapSetup;
@@ -0,0 +1,139 @@
1
+ import { NestFactory, Reflector } from '@nestjs/core';
2
+ import type { NestExpressApplication } from '@nestjs/platform-express';
3
+ import { initializeTransactionalContext } from 'typeorm-transactional';
4
+ import agent from 'skywalking-backend-js';
5
+ import { Logger, LoggerErrorInterceptor } from 'nestjs-pino';
6
+ import * as session from 'express-session';
7
+ import { join } from 'path';
8
+ import {
9
+ ApiConfigService,
10
+ HttpExceptionFilter,
11
+ OmniAuthMiddleware,
12
+ PowerByMiddleware,
13
+ QueryFailedFilter,
14
+ RequestIdMiddleware,
15
+ ServiceRegistryModule,
16
+ TranslationInterceptor,
17
+ } from '../';
18
+ import { HttpException, HttpStatus } from '@nestjs/common';
19
+ import { SentryInterceptor } from '@ntegral/nestjs-sentry';
20
+ import { I18nValidationPipe } from 'nestjs-i18n';
21
+ import { CrudConfigService } from '@dataui/crud';
22
+ import { AuthUserInterceptor } from '../interceptors/auth-user.interceptor';
23
+ import { ClsMiddleware } from 'nestjs-cls';
24
+
25
+ CrudConfigService.load({
26
+ auth: {
27
+ property: 'user',
28
+ },
29
+ params: {
30
+ id: {
31
+ field: 'id',
32
+ type: 'string',
33
+ primary: true,
34
+ },
35
+ },
36
+ query: {
37
+ limit: 10,
38
+ alwaysPaginate: true,
39
+ },
40
+ routes: {
41
+ updateOneBase: {
42
+ allowParamsOverride: false,
43
+ },
44
+ deleteOneBase: {
45
+ returnDeleted: false,
46
+ },
47
+ createOneBase: {
48
+ returnShallow: false,
49
+ },
50
+ },
51
+ });
52
+
53
+ export async function bootstrapSetup(AppModule, SetupSwagger) {
54
+ initializeTransactionalContext();
55
+ const app = await NestFactory.create<NestExpressApplication>(AppModule, {
56
+ bufferLogs: true,
57
+ });
58
+ const configService = app.select(ServiceRegistryModule).get(ApiConfigService);
59
+
60
+ app.useLogger(app.get(Logger));
61
+ app.flushLogs();
62
+ app.enableShutdownHooks();
63
+ app.enableVersioning();
64
+ app.enable('trust proxy');
65
+
66
+ const reflector = app.get(Reflector);
67
+
68
+ app.useGlobalFilters(
69
+ new HttpExceptionFilter(),
70
+ new QueryFailedFilter(reflector),
71
+ );
72
+
73
+ app.use(
74
+ new ClsMiddleware({}).use,
75
+ RequestIdMiddleware(),
76
+ PowerByMiddleware(),
77
+ OmniAuthMiddleware(),
78
+ );
79
+
80
+ app.useStaticAssets('public', { prefix: '/' });
81
+
82
+ app.useGlobalInterceptors(
83
+ new AuthUserInterceptor(),
84
+ new TranslationInterceptor(),
85
+ new LoggerErrorInterceptor(),
86
+ new SentryInterceptor({
87
+ filters: [
88
+ {
89
+ type: HttpException,
90
+ filter: (exception: HttpException) => {
91
+ const status = exception.getStatus();
92
+ if (status === 401 || status === 404) {
93
+ return true;
94
+ }
95
+
96
+ return 200 > status;
97
+ },
98
+ },
99
+ ],
100
+ }),
101
+ );
102
+
103
+ app.useGlobalPipes(
104
+ new I18nValidationPipe({
105
+ whitelist: true,
106
+ errorHttpStatusCode: HttpStatus.UNPROCESSABLE_ENTITY,
107
+ transform: true,
108
+ stopAtFirstError: true,
109
+ validationError: { target: false, value: false },
110
+ }),
111
+ );
112
+
113
+ if (configService.skywalkingEnabled) {
114
+ agent.start();
115
+ }
116
+
117
+ if (configService.documentationEnabled && SetupSwagger) {
118
+ SetupSwagger(app, configService.documentationPath);
119
+ }
120
+
121
+ if (configService.viewsEnabled) {
122
+ app.setBaseViewsDir(join(__dirname, 'views'));
123
+ app.setViewEngine('ejs');
124
+ }
125
+
126
+ if (configService.sessionEnabled) {
127
+ app.use(session(configService.sessionConfig));
128
+ }
129
+
130
+ if (configService.corsEnabled) {
131
+ app.enableCors(configService.corsConfig);
132
+ }
133
+
134
+ const port = configService.appConfig.port;
135
+ await app.listen(port);
136
+
137
+ console.info(`server running on ${await app.getUrl()}`);
138
+ return app;
139
+ }
@@ -0,0 +1 @@
1
+ export * from './bootstrap.setup';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./bootstrap.setup"), exports);
@@ -0,0 +1 @@
1
+ export * from './bootstrap.setup';