mm-share-lib 0.0.5 → 0.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 (247) hide show
  1. package/.eslintrc.js +25 -25
  2. package/.prettierrc +3 -3
  3. package/README.md +73 -73
  4. package/dist/src/exception/index.d.ts +0 -7
  5. package/dist/src/exception/index.js +0 -23
  6. package/dist/src/exception/index.js.map +1 -1
  7. package/index.ts +1 -1
  8. package/nest-cli.json +8 -8
  9. package/package.json +91 -82
  10. package/src/auth/apple/apple.module.ts +10 -0
  11. package/src/auth/apple/apple.service.ts +28 -0
  12. package/src/auth/apple/dto/apple-login.dto.ts +16 -0
  13. package/src/auth/apple/dto/index.ts +1 -0
  14. package/src/auth/apple/index.ts +3 -0
  15. package/src/auth/config/apple.config.ts +18 -0
  16. package/src/auth/config/auth.config.ts +29 -0
  17. package/src/auth/config/facebook.config.ts +23 -0
  18. package/src/auth/config/file.config.ts +50 -0
  19. package/src/auth/config/google.config.ts +23 -0
  20. package/src/auth/config/index.ts +6 -0
  21. package/src/auth/config/twitter.config.ts +22 -0
  22. package/src/auth/facebook/dto/facebook-login.dto.ts +8 -0
  23. package/src/auth/facebook/dto/index.ts +1 -0
  24. package/src/auth/facebook/facebook.module.ts +11 -0
  25. package/src/auth/facebook/facebook.service.ts +51 -0
  26. package/src/auth/facebook/index.ts +4 -0
  27. package/src/auth/facebook/interface/facebook.interface.ts +6 -0
  28. package/src/auth/facebook/interface/index.ts +1 -0
  29. package/src/auth/google/dto/google-login.dto.ts +8 -0
  30. package/src/auth/google/dto/index.ts +1 -0
  31. package/src/auth/google/google.module.ts +10 -0
  32. package/src/auth/google/google.service.ts +51 -0
  33. package/src/auth/google/index.ts +3 -0
  34. package/src/auth/index.ts +5 -0
  35. package/src/auth/twitter/dto/index.ts +1 -0
  36. package/src/auth/twitter/dto/twitter-login.dto.ts +12 -0
  37. package/src/auth/twitter/index.ts +3 -0
  38. package/src/auth/twitter/twitter.module.ts +11 -0
  39. package/src/auth/twitter/twitter.service.ts +43 -0
  40. package/src/config/index.ts +1 -0
  41. package/src/config/type.config.ts +88 -0
  42. package/src/constant/entity-state.constant.ts +4 -4
  43. package/src/constant/index.ts +1 -1
  44. package/src/dto/base-filter.dto.ts +4 -4
  45. package/src/dto/index.ts +2 -2
  46. package/src/dto/pagination.dto.ts +16 -4
  47. package/src/filter/index.ts +1 -1
  48. package/src/filter/rpc-exception.filter.ts +15 -0
  49. package/src/generic/entity/entity.generic.ts +34 -34
  50. package/src/generic/entity/index.ts +1 -1
  51. package/src/generic/index.ts +2 -2
  52. package/src/generic/service/index.ts +1 -1
  53. package/src/generic/service/service.generic.ts +112 -112
  54. package/src/index.ts +1 -0
  55. package/src/interface/index.ts +1 -0
  56. package/src/interface/social.interface.ts +6 -0
  57. package/src/lib/index.ts +3 -1
  58. package/src/lib/mailer/config/index.ts +1 -0
  59. package/src/lib/mailer/config/mailer.config.ts +62 -0
  60. package/src/lib/mailer/index.ts +2 -0
  61. package/src/lib/mailer/mailer.module.ts +8 -0
  62. package/src/lib/mailer/mailer.service.ts +53 -0
  63. package/src/lib/search-engine/document/base.document.ts +3 -3
  64. package/src/lib/search-engine/index.ts +1 -1
  65. package/src/lib/search-engine/interface/index.ts +1 -1
  66. package/src/lib/search-engine/interface/search-document.interface.ts +13 -5
  67. package/src/lib/search-engine/interface/transform-service.interface.ts +10 -10
  68. package/src/lib/search-engine/schema/generic.schema.ts +1 -1
  69. package/src/lib/search-engine/schema/index.ts +1 -1
  70. package/src/lib/search-engine/typesense/collection/index.ts +1 -0
  71. package/src/lib/search-engine/typesense/document/index.ts +1 -0
  72. package/src/lib/search-engine/typesense/index.ts +4 -3
  73. package/src/lib/search-engine/typesense/metadata/index.ts +1 -1
  74. package/src/lib/search-engine/typesense/metadata/schema.metadata.ts +13 -13
  75. package/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.ts +28 -28
  76. package/src/lib/search-engine/typesense/service/client.service.ts +260 -258
  77. package/src/lib/search-engine/typesense/typesense-module.interface.ts +36 -36
  78. package/src/lib/search-engine/typesense/typesense.constants.ts +1 -1
  79. package/src/lib/search-engine/typesense/typesense.module.test.ts +94 -94
  80. package/src/lib/search-engine/typesense/typesense.module.ts +76 -76
  81. package/src/lib/search-engine/typesense/typesense.providers.ts +42 -42
  82. package/src/lib/storage/index.ts +0 -0
  83. package/src/lib/typesense/client/index.ts +1 -0
  84. package/src/lib/typesense/collection/index.ts +1 -0
  85. package/src/lib/typesense/decorator/field.decorator.spec.ts +89 -0
  86. package/src/lib/typesense/decorator/field.decorator.ts +44 -0
  87. package/src/lib/typesense/decorator/index.ts +2 -0
  88. package/src/lib/typesense/decorator/schema.decorator.ts +23 -0
  89. package/src/lib/typesense/document/base.document.ts +3 -0
  90. package/src/lib/typesense/index.ts +6 -0
  91. package/src/lib/typesense/metadata/index.ts +4 -0
  92. package/src/lib/typesense/metadata/schema.metadata.ts +21 -0
  93. package/src/lib/typesense/metadata/typesense.metadata-accessor.ts +37 -0
  94. package/src/lib/typesense/metadata/typesense.metadata-explorer.spec.ts +56 -0
  95. package/src/lib/typesense/metadata/typesense.metadata-explorer.ts +41 -0
  96. package/src/lib/typesense/metadata/typesense.metadata-registry.ts +28 -0
  97. package/src/lib/typesense/module/index.ts +4 -0
  98. package/src/lib/typesense/module/interface.module.ts +34 -0
  99. package/src/lib/typesense/module/typesense.constant.ts +1 -0
  100. package/src/lib/typesense/module/typesense.module.spec.ts +94 -0
  101. package/src/lib/typesense/module/typesense.module.ts +87 -0
  102. package/src/lib/typesense/module/typesense.provider.ts +54 -0
  103. package/src/response/base-entity.response.ts +8 -0
  104. package/src/response/index.ts +2 -1
  105. package/src/response/login.response.ts +0 -0
  106. package/src/response/pagination.response.ts +52 -37
  107. package/src/setup/index.ts +1 -1
  108. package/src/util/date.util.spec.ts +49 -49
  109. package/src/util/date.util.ts +10 -10
  110. package/src/util/generator.util.spec.ts +79 -79
  111. package/src/util/generator.util.ts +34 -34
  112. package/src/util/index.ts +4 -3
  113. package/src/util/validate-config.ts +20 -0
  114. package/test/app.e2e-spec.ts +24 -24
  115. package/test/jest-e2e.json +9 -9
  116. package/tsconfig.build.json +4 -4
  117. package/tsconfig.json +21 -21
  118. package/dist/index.d.ts +0 -1
  119. package/dist/index.js +0 -18
  120. package/dist/index.js.map +0 -1
  121. package/dist/src/dto/base-filter.dto.d.ts +0 -4
  122. package/dist/src/dto/base-filter.dto.js +0 -11
  123. package/dist/src/dto/base-filter.dto.js.map +0 -1
  124. package/dist/src/dto/index.d.ts +0 -2
  125. package/dist/src/dto/index.js +0 -19
  126. package/dist/src/dto/index.js.map +0 -1
  127. package/dist/src/dto/pagination.dto.d.ts +0 -4
  128. package/dist/src/dto/pagination.dto.js +0 -11
  129. package/dist/src/dto/pagination.dto.js.map +0 -1
  130. package/dist/src/exception/bad-request-error.exception.d.ts +0 -4
  131. package/dist/src/exception/bad-request-error.exception.js +0 -12
  132. package/dist/src/exception/bad-request-error.exception.js.map +0 -1
  133. package/dist/src/exception/base.exception.d.ts +0 -21
  134. package/dist/src/exception/base.exception.js +0 -16
  135. package/dist/src/exception/base.exception.js.map +0 -1
  136. package/dist/src/exception/conflict-error.exception.d.ts +0 -4
  137. package/dist/src/exception/conflict-error.exception.js +0 -12
  138. package/dist/src/exception/conflict-error.exception.js.map +0 -1
  139. package/dist/src/exception/forbidden-error.exception.d.ts +0 -4
  140. package/dist/src/exception/forbidden-error.exception.js +0 -12
  141. package/dist/src/exception/forbidden-error.exception.js.map +0 -1
  142. package/dist/src/exception/internal-server-error.exception.d.ts +0 -4
  143. package/dist/src/exception/internal-server-error.exception.js +0 -12
  144. package/dist/src/exception/internal-server-error.exception.js.map +0 -1
  145. package/dist/src/exception/not-found-error.exception.d.ts +0 -4
  146. package/dist/src/exception/not-found-error.exception.js +0 -12
  147. package/dist/src/exception/not-found-error.exception.js.map +0 -1
  148. package/dist/src/exception/unauthorized-error.exception.d.ts +0 -4
  149. package/dist/src/exception/unauthorized-error.exception.js +0 -12
  150. package/dist/src/exception/unauthorized-error.exception.js.map +0 -1
  151. package/dist/src/filter/http-exception.filter.d.ts +0 -4
  152. package/dist/src/filter/http-exception.filter.js +0 -27
  153. package/dist/src/filter/http-exception.filter.js.map +0 -1
  154. package/dist/src/filter/index.d.ts +0 -1
  155. package/dist/src/filter/index.js +0 -18
  156. package/dist/src/filter/index.js.map +0 -1
  157. package/dist/src/index.d.ts +0 -8
  158. package/dist/src/index.js +0 -25
  159. package/dist/src/index.js.map +0 -1
  160. package/dist/src/lib/index.d.ts +0 -1
  161. package/dist/src/lib/index.js +0 -18
  162. package/dist/src/lib/index.js.map +0 -1
  163. package/dist/src/lib/search-engine/document/base.document.d.ts +0 -3
  164. package/dist/src/lib/search-engine/document/base.document.js +0 -7
  165. package/dist/src/lib/search-engine/document/base.document.js.map +0 -1
  166. package/dist/src/lib/search-engine/document/index.js +0 -18
  167. package/dist/src/lib/search-engine/document/index.js.map +0 -1
  168. package/dist/src/lib/search-engine/index.d.ts +0 -1
  169. package/dist/src/lib/search-engine/index.js +0 -18
  170. package/dist/src/lib/search-engine/index.js.map +0 -1
  171. package/dist/src/lib/search-engine/interface/index.d.ts +0 -2
  172. package/dist/src/lib/search-engine/interface/index.js +0 -19
  173. package/dist/src/lib/search-engine/interface/index.js.map +0 -1
  174. package/dist/src/lib/search-engine/interface/search-document.interface.d.ts +0 -4
  175. package/dist/src/lib/search-engine/interface/search-document.interface.js +0 -3
  176. package/dist/src/lib/search-engine/interface/search-document.interface.js.map +0 -1
  177. package/dist/src/lib/search-engine/interface/transform-service.interface.d.ts +0 -6
  178. package/dist/src/lib/search-engine/interface/transform-service.interface.js +0 -3
  179. package/dist/src/lib/search-engine/interface/transform-service.interface.js.map +0 -1
  180. package/dist/src/lib/search-engine/schema/generic.schema.d.ts +0 -2
  181. package/dist/src/lib/search-engine/schema/generic.schema.js +0 -7
  182. package/dist/src/lib/search-engine/schema/generic.schema.js.map +0 -1
  183. package/dist/src/lib/search-engine/schema/index.d.ts +0 -1
  184. package/dist/src/lib/search-engine/schema/index.js +0 -18
  185. package/dist/src/lib/search-engine/schema/index.js.map +0 -1
  186. package/dist/src/lib/search-engine/typesense/index.d.ts +0 -3
  187. package/dist/src/lib/search-engine/typesense/index.js +0 -20
  188. package/dist/src/lib/search-engine/typesense/index.js.map +0 -1
  189. package/dist/src/lib/search-engine/typesense/metadata/index.d.ts +0 -2
  190. package/dist/src/lib/search-engine/typesense/metadata/index.js +0 -19
  191. package/dist/src/lib/search-engine/typesense/metadata/index.js.map +0 -1
  192. package/dist/src/lib/search-engine/typesense/metadata/schema.metadata.d.ts +0 -12
  193. package/dist/src/lib/search-engine/typesense/metadata/schema.metadata.js +0 -3
  194. package/dist/src/lib/search-engine/typesense/metadata/schema.metadata.js.map +0 -1
  195. package/dist/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.d.ts +0 -10
  196. package/dist/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.js +0 -33
  197. package/dist/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.js.map +0 -1
  198. package/dist/src/lib/search-engine/typesense/service/client.service.d.ts +0 -33
  199. package/dist/src/lib/search-engine/typesense/service/client.service.js +0 -197
  200. package/dist/src/lib/search-engine/typesense/service/client.service.js.map +0 -1
  201. package/dist/src/lib/search-engine/typesense/service/index.d.ts +0 -1
  202. package/dist/src/lib/search-engine/typesense/service/index.js +0 -18
  203. package/dist/src/lib/search-engine/typesense/service/index.js.map +0 -1
  204. package/dist/src/lib/search-engine/typesense/typesense-module.interface.d.ts +0 -27
  205. package/dist/src/lib/search-engine/typesense/typesense-module.interface.js +0 -3
  206. package/dist/src/lib/search-engine/typesense/typesense-module.interface.js.map +0 -1
  207. package/dist/src/lib/search-engine/typesense/typesense.constants.d.ts +0 -1
  208. package/dist/src/lib/search-engine/typesense/typesense.constants.js +0 -5
  209. package/dist/src/lib/search-engine/typesense/typesense.constants.js.map +0 -1
  210. package/dist/src/lib/search-engine/typesense/typesense.module.d.ts +0 -8
  211. package/dist/src/lib/search-engine/typesense/typesense.module.js +0 -68
  212. package/dist/src/lib/search-engine/typesense/typesense.module.js.map +0 -1
  213. package/dist/src/lib/search-engine/typesense/typesense.module.test.d.ts +0 -1
  214. package/dist/src/lib/search-engine/typesense/typesense.module.test.js +0 -89
  215. package/dist/src/lib/search-engine/typesense/typesense.module.test.js.map +0 -1
  216. package/dist/src/lib/search-engine/typesense/typesense.providers.d.ts +0 -4
  217. package/dist/src/lib/search-engine/typesense/typesense.providers.js +0 -40
  218. package/dist/src/lib/search-engine/typesense/typesense.providers.js.map +0 -1
  219. package/dist/src/response/index.d.ts +0 -1
  220. package/dist/src/response/index.js +0 -18
  221. package/dist/src/response/index.js.map +0 -1
  222. package/dist/src/response/pagination.response.d.ts +0 -17
  223. package/dist/src/response/pagination.response.js +0 -29
  224. package/dist/src/response/pagination.response.js.map +0 -1
  225. package/dist/src/setup/index.d.ts +0 -1
  226. package/dist/src/setup/index.js +0 -18
  227. package/dist/src/setup/index.js.map +0 -1
  228. package/dist/src/setup/microservice.setup.d.ts +0 -2
  229. package/dist/src/setup/microservice.setup.js +0 -25
  230. package/dist/src/setup/microservice.setup.js.map +0 -1
  231. package/dist/src/setup/swagger.setup.js +0 -1
  232. package/dist/src/setup/swagger.setup.js.map +0 -1
  233. package/dist/src/util/app.utils.d.ts +0 -4
  234. package/dist/src/util/app.utils.js +0 -21
  235. package/dist/src/util/app.utils.js.map +0 -1
  236. package/dist/src/util/date.util.d.ts +0 -2
  237. package/dist/src/util/date.util.js +0 -14
  238. package/dist/src/util/date.util.js.map +0 -1
  239. package/dist/src/util/generator.util.d.ts +0 -4
  240. package/dist/src/util/generator.util.js +0 -29
  241. package/dist/src/util/generator.util.js.map +0 -1
  242. package/dist/src/util/index.d.ts +0 -3
  243. package/dist/src/util/index.js +0 -20
  244. package/dist/src/util/index.js.map +0 -1
  245. package/dist/tsconfig.build.tsbuildinfo +0 -1
  246. /package/{dist/src/setup/swagger.setup.d.ts → src/lib/redis/index.ts} +0 -0
  247. /package/{dist/src/lib/search-engine/document/index.d.ts → src/lib/typesense/document/index.ts} +0 -0
@@ -1,79 +1,79 @@
1
- import * as bcrypt from 'bcrypt';
2
- import {
3
- generateKey,
4
- generateDigitCode,
5
- generatePassword,
6
- } from './generator.util';
7
-
8
- describe('Utils', () => {
9
- describe('generateKey', () => {
10
- it('should generate a key of the specified length', () => {
11
- const keyLength = 10;
12
- const key = generateKey(keyLength);
13
- expect(key).toHaveLength(keyLength);
14
- });
15
-
16
- it('should generate a key with default length if not specified', () => {
17
- const defaultKeyLength = 36;
18
- const key = generateKey();
19
- expect(key).toHaveLength(defaultKeyLength);
20
- });
21
- });
22
-
23
- describe('generateDigitCode', () => {
24
- it('should generate a digit code of the specified length', () => {
25
- const codeLength = 6;
26
- const code = generateDigitCode(codeLength);
27
- expect(code).toHaveLength(codeLength);
28
- expect(Number(code)).toBeGreaterThanOrEqual(100000);
29
- expect(Number(code)).toBeLessThanOrEqual(999999);
30
- });
31
-
32
- it('should generate a digit code with default length if not specified', () => {
33
- const defaultCodeLength = 4;
34
- const code = generateDigitCode();
35
- expect(code).toHaveLength(defaultCodeLength);
36
- expect(Number(code)).toBeGreaterThanOrEqual(1000);
37
- expect(Number(code)).toBeLessThanOrEqual(9999);
38
- });
39
- });
40
-
41
- describe('Utility Functions', () => {
42
- test('generatePassword should return a hashed password with the specified salt rounds', async () => {
43
- // Arrange
44
- const password = 'password123';
45
- const saltRounds = 12;
46
-
47
- // Act
48
- const hashedPassword = await generatePassword(password, saltRounds);
49
-
50
- // Assert
51
- expect(typeof hashedPassword).toBe('string');
52
- expect(hashedPassword).not.toBe(password);
53
- expect(await bcrypt.compare(password, hashedPassword)).toBeTruthy();
54
- });
55
-
56
- test('generatePassword should use the default salt rounds when no value is provided', async () => {
57
- // Arrange
58
- const password = 'password123';
59
- const defaultSaltRounds = 10;
60
-
61
- // Act
62
- const hashedPassword = await generatePassword(password);
63
-
64
- // Assert
65
- expect(typeof hashedPassword).toBe('string');
66
- expect(hashedPassword).not.toBe(password);
67
- expect(await bcrypt.compare(password, hashedPassword)).toBeTruthy();
68
- expect(bcrypt.getRounds(hashedPassword)).toBe(defaultSaltRounds);
69
- });
70
-
71
- test('generatePassword should throw an error when an invalid password is provided', async () => {
72
- // Arrange
73
- const invalidPassword = '';
74
-
75
- // Act and Assert
76
- await expect(generatePassword(invalidPassword)).rejects.toThrow();
77
- });
78
- });
79
- });
1
+ import * as bcrypt from 'bcrypt';
2
+ import {
3
+ generateKey,
4
+ generateDigitCode,
5
+ generatePassword,
6
+ } from './generator.util';
7
+
8
+ describe('Utils', () => {
9
+ describe('generateKey', () => {
10
+ it('should generate a key of the specified length', () => {
11
+ const keyLength = 10;
12
+ const key = generateKey(keyLength);
13
+ expect(key).toHaveLength(keyLength);
14
+ });
15
+
16
+ it('should generate a key with default length if not specified', () => {
17
+ const defaultKeyLength = 36;
18
+ const key = generateKey();
19
+ expect(key).toHaveLength(defaultKeyLength);
20
+ });
21
+ });
22
+
23
+ describe('generateDigitCode', () => {
24
+ it('should generate a digit code of the specified length', () => {
25
+ const codeLength = 6;
26
+ const code = generateDigitCode(codeLength);
27
+ expect(code).toHaveLength(codeLength);
28
+ expect(Number(code)).toBeGreaterThanOrEqual(100000);
29
+ expect(Number(code)).toBeLessThanOrEqual(999999);
30
+ });
31
+
32
+ it('should generate a digit code with default length if not specified', () => {
33
+ const defaultCodeLength = 4;
34
+ const code = generateDigitCode();
35
+ expect(code).toHaveLength(defaultCodeLength);
36
+ expect(Number(code)).toBeGreaterThanOrEqual(1000);
37
+ expect(Number(code)).toBeLessThanOrEqual(9999);
38
+ });
39
+ });
40
+
41
+ describe('Utility Functions', () => {
42
+ test('generatePassword should return a hashed password with the specified salt rounds', async () => {
43
+ // Arrange
44
+ const password = 'password123';
45
+ const saltRounds = 12;
46
+
47
+ // Act
48
+ const hashedPassword = await generatePassword(password, saltRounds);
49
+
50
+ // Assert
51
+ expect(typeof hashedPassword).toBe('string');
52
+ expect(hashedPassword).not.toBe(password);
53
+ expect(await bcrypt.compare(password, hashedPassword)).toBeTruthy();
54
+ });
55
+
56
+ test('generatePassword should use the default salt rounds when no value is provided', async () => {
57
+ // Arrange
58
+ const password = 'password123';
59
+ const defaultSaltRounds = 10;
60
+
61
+ // Act
62
+ const hashedPassword = await generatePassword(password);
63
+
64
+ // Assert
65
+ expect(typeof hashedPassword).toBe('string');
66
+ expect(hashedPassword).not.toBe(password);
67
+ expect(await bcrypt.compare(password, hashedPassword)).toBeTruthy();
68
+ expect(bcrypt.getRounds(hashedPassword)).toBe(defaultSaltRounds);
69
+ });
70
+
71
+ test('generatePassword should throw an error when an invalid password is provided', async () => {
72
+ // Arrange
73
+ const invalidPassword = '';
74
+
75
+ // Act and Assert
76
+ await expect(generatePassword(invalidPassword)).rejects.toThrow();
77
+ });
78
+ });
79
+ });
@@ -1,34 +1,34 @@
1
- import * as bcrypt from 'bcrypt';
2
-
3
- export const generateKey = (length = 36) => {
4
- const chars =
5
- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
6
- let result = '';
7
- for (let i = length; i > 0; i--) {
8
- result += chars[Math.floor(Math.random() * chars.length)];
9
- }
10
- return result;
11
- };
12
-
13
- export const generateDigitCode = (length = 4): string => {
14
- const startAt = 1 + '0'.repeat(length - 1);
15
- const endAt = 9 + '0'.repeat(length - 1);
16
- const generateCode = `${Math.floor(
17
- Number(startAt) + Math.random() * Number(endAt),
18
- )}`;
19
- return generateCode;
20
- };
21
-
22
- export const generatePassword = async (
23
- password: string,
24
- saltOrRounds = 10,
25
- ): Promise<string> => {
26
- return await bcrypt.hash(password, saltOrRounds);
27
- };
28
-
29
- export const comparePassword = (
30
- password: string,
31
- hashPassword: string,
32
- ): Promise<boolean> => {
33
- return bcrypt.compare(password, hashPassword);
34
- };
1
+ import * as bcrypt from 'bcrypt';
2
+
3
+ export const generateKey = (length = 36) => {
4
+ const chars =
5
+ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
6
+ let result = '';
7
+ for (let i = length; i > 0; i--) {
8
+ result += chars[Math.floor(Math.random() * chars.length)];
9
+ }
10
+ return result;
11
+ };
12
+
13
+ export const generateDigitCode = (length = 4): string => {
14
+ const startAt = 1 + '0'.repeat(length - 1);
15
+ const endAt = 9 + '0'.repeat(length - 1);
16
+ const generateCode = `${Math.floor(
17
+ Number(startAt) + Math.random() * Number(endAt),
18
+ )}`;
19
+ return generateCode;
20
+ };
21
+
22
+ export const generatePassword = async (
23
+ password: string,
24
+ saltOrRounds = 10,
25
+ ): Promise<string> => {
26
+ return await bcrypt.hash(password, saltOrRounds);
27
+ };
28
+
29
+ export const comparePassword = (
30
+ password: string,
31
+ hashPassword: string,
32
+ ): Promise<boolean> => {
33
+ return bcrypt.compare(password, hashPassword);
34
+ };
package/src/util/index.ts CHANGED
@@ -1,3 +1,4 @@
1
- export * from './date.util';
2
- export * from './generator.util';
3
- export * from './app.utils';
1
+ export * from './date.util';
2
+ export * from './generator.util';
3
+ export * from './app.utils';
4
+ export * from './validate-config';
@@ -0,0 +1,20 @@
1
+ import { plainToClass } from 'class-transformer';
2
+ import { validateSync } from 'class-validator';
3
+ import { ClassConstructor } from 'class-transformer/types/interfaces';
4
+
5
+ export function validateConfig<T extends object>(
6
+ config: Record<string, unknown>,
7
+ envVariablesClass: ClassConstructor<T>,
8
+ ) {
9
+ const validatedConfig = plainToClass(envVariablesClass, config, {
10
+ enableImplicitConversion: true,
11
+ });
12
+ const errors = validateSync(validatedConfig, {
13
+ skipMissingProperties: false,
14
+ });
15
+
16
+ if (errors.length > 0) {
17
+ throw new Error(errors.toString());
18
+ }
19
+ return validatedConfig;
20
+ }
@@ -1,24 +1,24 @@
1
- import { Test, TestingModule } from '@nestjs/testing';
2
- import { INestApplication } from '@nestjs/common';
3
- import * as request from 'supertest';
4
- import { AppModule } from './../src/app.module';
5
-
6
- describe('AppController (e2e)', () => {
7
- let app: INestApplication;
8
-
9
- beforeEach(async () => {
10
- const moduleFixture: TestingModule = await Test.createTestingModule({
11
- imports: [AppModule],
12
- }).compile();
13
-
14
- app = moduleFixture.createNestApplication();
15
- await app.init();
16
- });
17
-
18
- it('/ (GET)', () => {
19
- return request(app.getHttpServer())
20
- .get('/')
21
- .expect(200)
22
- .expect('Hello World!');
23
- });
24
- });
1
+ import { Test, TestingModule } from '@nestjs/testing';
2
+ import { INestApplication } from '@nestjs/common';
3
+ import * as request from 'supertest';
4
+ import { AppModule } from './../src/app.module';
5
+
6
+ describe('AppController (e2e)', () => {
7
+ let app: INestApplication;
8
+
9
+ beforeEach(async () => {
10
+ const moduleFixture: TestingModule = await Test.createTestingModule({
11
+ imports: [AppModule],
12
+ }).compile();
13
+
14
+ app = moduleFixture.createNestApplication();
15
+ await app.init();
16
+ });
17
+
18
+ it('/ (GET)', () => {
19
+ return request(app.getHttpServer())
20
+ .get('/')
21
+ .expect(200)
22
+ .expect('Hello World!');
23
+ });
24
+ });
@@ -1,9 +1,9 @@
1
- {
2
- "moduleFileExtensions": ["js", "json", "ts"],
3
- "rootDir": ".",
4
- "testEnvironment": "node",
5
- "testRegex": ".e2e-spec.ts$",
6
- "transform": {
7
- "^.+\\.(t|j)s$": "ts-jest"
8
- }
9
- }
1
+ {
2
+ "moduleFileExtensions": ["js", "json", "ts"],
3
+ "rootDir": ".",
4
+ "testEnvironment": "node",
5
+ "testRegex": ".e2e-spec.ts$",
6
+ "transform": {
7
+ "^.+\\.(t|j)s$": "ts-jest"
8
+ }
9
+ }
@@ -1,4 +1,4 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
4
- }
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
4
+ }
package/tsconfig.json CHANGED
@@ -1,21 +1,21 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "declaration": true,
5
- "removeComments": true,
6
- "emitDecoratorMetadata": true,
7
- "experimentalDecorators": true,
8
- "allowSyntheticDefaultImports": true,
9
- "target": "es2017",
10
- "sourceMap": true,
11
- "outDir": "./dist",
12
- "baseUrl": "./",
13
- "incremental": true,
14
- "skipLibCheck": true,
15
- "strictNullChecks": false,
16
- "noImplicitAny": false,
17
- "strictBindCallApply": false,
18
- "forceConsistentCasingInFileNames": false,
19
- "noFallthroughCasesInSwitch": false
20
- }
21
- }
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "declaration": true,
5
+ "removeComments": true,
6
+ "emitDecoratorMetadata": true,
7
+ "experimentalDecorators": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "target": "es2017",
10
+ "sourceMap": true,
11
+ "outDir": "./dist",
12
+ "baseUrl": "./",
13
+ "incremental": true,
14
+ "skipLibCheck": true,
15
+ "strictNullChecks": false,
16
+ "noImplicitAny": false,
17
+ "strictBindCallApply": false,
18
+ "forceConsistentCasingInFileNames": false,
19
+ "noFallthroughCasesInSwitch": false
20
+ }
21
+ }
package/dist/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './src';
package/dist/index.js DELETED
@@ -1,18 +0,0 @@
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("./src"), exports);
18
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB"}
@@ -1,4 +0,0 @@
1
- export declare abstract class BaseFilterDto {
2
- excludeIds: number[];
3
- includeIds: number[];
4
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseFilterDto = void 0;
4
- class BaseFilterDto {
5
- constructor() {
6
- this.excludeIds = undefined;
7
- this.includeIds = undefined;
8
- }
9
- }
10
- exports.BaseFilterDto = BaseFilterDto;
11
- //# sourceMappingURL=base-filter.dto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-filter.dto.js","sourceRoot":"","sources":["../../../src/dto/base-filter.dto.ts"],"names":[],"mappings":";;;AAAA,MAAsB,aAAa;IAAnC;QACE,eAAU,GAAa,SAAS,CAAC;QACjC,eAAU,GAAa,SAAS,CAAC;IACnC,CAAC;CAAA;AAHD,sCAGC"}
@@ -1,2 +0,0 @@
1
- export * from './pagination.dto';
2
- export * from './base-filter.dto';
@@ -1,19 +0,0 @@
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("./pagination.dto"), exports);
18
- __exportStar(require("./base-filter.dto"), exports);
19
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dto/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,oDAAkC"}
@@ -1,4 +0,0 @@
1
- export declare class PaginationDto {
2
- limit: number;
3
- offset: number;
4
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PaginationDto = void 0;
4
- class PaginationDto {
5
- constructor() {
6
- this.limit = 25;
7
- this.offset = 0;
8
- }
9
- }
10
- exports.PaginationDto = PaginationDto;
11
- //# sourceMappingURL=pagination.dto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination.dto.js","sourceRoot":"","sources":["../../../src/dto/pagination.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IAA1B;QACE,UAAK,GAAG,EAAE,CAAC;QACX,WAAM,GAAG,CAAC,CAAC;IACb,CAAC;CAAA;AAHD,sCAGC"}
@@ -1,4 +0,0 @@
1
- import { BaseException, ParametersType } from './base.exception';
2
- export declare class BadRequestException extends BaseException {
3
- constructor(message?: string, parameters?: ParametersType);
4
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BadRequestException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const base_exception_1 = require("./base.exception");
6
- class BadRequestException extends base_exception_1.BaseException {
7
- constructor(message, parameters) {
8
- super(message !== null && message !== void 0 ? message : 'BadRequestException', common_1.HttpStatus.BAD_REQUEST, parameters);
9
- }
10
- }
11
- exports.BadRequestException = BadRequestException;
12
- //# sourceMappingURL=bad-request-error.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bad-request-error.exception.js","sourceRoot":"","sources":["../../../src/exception/bad-request-error.exception.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,qDAAiE;AAEjE,MAAa,mBAAoB,SAAQ,8BAAa;IACpD,YAAY,OAAgB,EAAE,UAA2B;QACvD,KAAK,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,qBAAqB,EAAE,mBAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;CACF;AAJD,kDAIC"}
@@ -1,21 +0,0 @@
1
- import { HttpException, HttpStatus } from '@nestjs/common';
2
- export type ErrorModel = {
3
- error: {
4
- code: string | number;
5
- traceid: string;
6
- message: string;
7
- timestamp: string;
8
- path: string;
9
- };
10
- };
11
- export type ParametersType = {
12
- [key: string]: unknown;
13
- };
14
- export declare class BaseException extends HttpException {
15
- traceid: string;
16
- readonly context: string;
17
- readonly statusCode: number;
18
- readonly code?: string;
19
- readonly parameters: ParametersType;
20
- constructor(message: string, status: HttpStatus, parameters?: ParametersType);
21
- }
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- class BaseException extends common_1.HttpException {
6
- constructor(message, status, parameters) {
7
- super(message, status);
8
- if (parameters) {
9
- this.parameters = parameters;
10
- }
11
- this.statusCode = super.getStatus();
12
- Error.captureStackTrace(this);
13
- }
14
- }
15
- exports.BaseException = BaseException;
16
- //# sourceMappingURL=base.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.exception.js","sourceRoot":"","sources":["../../../src/exception/base.exception.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAc3D,MAAa,aAAc,SAAQ,sBAAa;IAO9C,YACE,OAAe,EACf,MAAkB,EAClB,UAA2B;QAE3B,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEvB,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;SAC9B;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACF;AArBD,sCAqBC"}
@@ -1,4 +0,0 @@
1
- import { BaseException, ParametersType } from './base.exception';
2
- export declare class ConflictException extends BaseException {
3
- constructor(message?: string, parameters?: ParametersType);
4
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConflictException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const base_exception_1 = require("./base.exception");
6
- class ConflictException extends base_exception_1.BaseException {
7
- constructor(message, parameters) {
8
- super(message !== null && message !== void 0 ? message : 'ConflictException', common_1.HttpStatus.CONFLICT, parameters);
9
- }
10
- }
11
- exports.ConflictException = ConflictException;
12
- //# sourceMappingURL=conflict-error.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conflict-error.exception.js","sourceRoot":"","sources":["../../../src/exception/conflict-error.exception.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,qDAAiE;AAEjE,MAAa,iBAAkB,SAAQ,8BAAa;IAClD,YAAY,OAAgB,EAAE,UAA2B;QACvD,KAAK,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,mBAAmB,EAAE,mBAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC;CACF;AAJD,8CAIC"}
@@ -1,4 +0,0 @@
1
- import { BaseException, ParametersType } from './base.exception';
2
- export declare class ForbiddenException extends BaseException {
3
- constructor(message?: string, parameters?: ParametersType);
4
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ForbiddenException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const base_exception_1 = require("./base.exception");
6
- class ForbiddenException extends base_exception_1.BaseException {
7
- constructor(message, parameters) {
8
- super(message !== null && message !== void 0 ? message : 'BadRequestException', common_1.HttpStatus.FORBIDDEN, parameters);
9
- }
10
- }
11
- exports.ForbiddenException = ForbiddenException;
12
- //# sourceMappingURL=forbidden-error.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"forbidden-error.exception.js","sourceRoot":"","sources":["../../../src/exception/forbidden-error.exception.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,qDAAiE;AAEjE,MAAa,kBAAmB,SAAQ,8BAAa;IACnD,YAAY,OAAgB,EAAE,UAA2B;QACvD,KAAK,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,qBAAqB,EAAE,mBAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC5E,CAAC;CACF;AAJD,gDAIC"}
@@ -1,4 +0,0 @@
1
- import { BaseException, ParametersType } from './base.exception';
2
- export declare class InternalServerException extends BaseException {
3
- constructor(message?: string, parameters?: ParametersType);
4
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InternalServerException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const base_exception_1 = require("./base.exception");
6
- class InternalServerException extends base_exception_1.BaseException {
7
- constructor(message, parameters) {
8
- super(message !== null && message !== void 0 ? message : 'InternalServerException', common_1.HttpStatus.INTERNAL_SERVER_ERROR, parameters);
9
- }
10
- }
11
- exports.InternalServerException = InternalServerException;
12
- //# sourceMappingURL=internal-server-error.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal-server-error.exception.js","sourceRoot":"","sources":["../../../src/exception/internal-server-error.exception.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,qDAAiE;AAEjE,MAAa,uBAAwB,SAAQ,8BAAa;IACxD,YAAY,OAAgB,EAAE,UAA2B;QACvD,KAAK,CACH,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,yBAAyB,EACpC,mBAAU,CAAC,qBAAqB,EAChC,UAAU,CACX,CAAC;IACJ,CAAC;CACF;AARD,0DAQC"}
@@ -1,4 +0,0 @@
1
- import { BaseException, ParametersType } from './base.exception';
2
- export declare class NotFoundException extends BaseException {
3
- constructor(message?: string, parameters?: ParametersType);
4
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NotFoundException = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const base_exception_1 = require("./base.exception");
6
- class NotFoundException extends base_exception_1.BaseException {
7
- constructor(message, parameters) {
8
- super(message !== null && message !== void 0 ? message : 'NotFoundException', common_1.HttpStatus.NOT_FOUND, parameters);
9
- }
10
- }
11
- exports.NotFoundException = NotFoundException;
12
- //# sourceMappingURL=not-found-error.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"not-found-error.exception.js","sourceRoot":"","sources":["../../../src/exception/not-found-error.exception.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,qDAAiE;AAEjE,MAAa,iBAAkB,SAAQ,8BAAa;IAClD,YAAY,OAAgB,EAAE,UAA2B;QACvD,KAAK,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,mBAAmB,EAAE,mBAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;CACF;AAJD,8CAIC"}