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
@@ -0,0 +1,23 @@
1
+ import { IsOptional, IsString } from 'class-validator';
2
+ import { registerAs } from '@nestjs/config';
3
+ import { GoogleConfig } from '../../config';
4
+ import { validateConfig } from '../../util';
5
+
6
+ class EnvironmentVariablesValidator {
7
+ @IsString()
8
+ @IsOptional()
9
+ GOOGLE_CLIENT_ID: string;
10
+
11
+ @IsString()
12
+ @IsOptional()
13
+ GOOGLE_CLIENT_SECRET: string;
14
+ }
15
+
16
+ export default registerAs<GoogleConfig>('google', () => {
17
+ validateConfig(process.env, EnvironmentVariablesValidator);
18
+
19
+ return {
20
+ clientId: process.env.GOOGLE_CLIENT_ID,
21
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
22
+ };
23
+ });
@@ -0,0 +1,6 @@
1
+ export * from './auth.config';
2
+ export * from './file.config';
3
+ export * from './apple.config';
4
+ export * from './google.config';
5
+ export * from './twitter.config';
6
+ export * from './facebook.config';
@@ -0,0 +1,22 @@
1
+ import { registerAs } from '@nestjs/config';
2
+ import { IsString, IsOptional } from 'class-validator';
3
+ import { validateConfig } from '../../util';
4
+
5
+ class EnvironmentVariablesValidator {
6
+ @IsString()
7
+ @IsOptional()
8
+ TWITTER_CONSUMER_KEY: string;
9
+
10
+ @IsString()
11
+ @IsOptional()
12
+ TWITTER_CONSUMER_SECRET: string;
13
+ }
14
+
15
+ export default registerAs('twitter', () => {
16
+ validateConfig(process.env, EnvironmentVariablesValidator);
17
+
18
+ return {
19
+ consumerKey: process.env.TWITTER_CONSUMER_KEY,
20
+ consumerSecret: process.env.TWITTER_CONSUMER_SECRET,
21
+ };
22
+ });
@@ -0,0 +1,8 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+ import { IsNotEmpty } from 'class-validator';
3
+
4
+ export class FacebookLoginDto {
5
+ @ApiProperty({ example: 'abc' })
6
+ @IsNotEmpty()
7
+ accessToken: string;
8
+ }
@@ -0,0 +1 @@
1
+ export * from './facebook-login.dto';
@@ -0,0 +1,11 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { ConfigModule } from '@nestjs/config';
3
+ import { FacebookService } from './facebook.service';
4
+
5
+ @Module({
6
+ imports: [ConfigModule],
7
+ providers: [FacebookService],
8
+ exports: [FacebookService],
9
+ controllers: [],
10
+ })
11
+ export class FacebookModule {}
@@ -0,0 +1,51 @@
1
+ import { Facebook } from 'fb';
2
+ import { Injectable } from '@nestjs/common';
3
+ import { ConfigService } from '@nestjs/config';
4
+ import { SocialInterface } from '../../interface';
5
+ import { FacebookInterface } from './interface';
6
+ import { FacebookLoginDto } from './dto/facebook-login.dto';
7
+ import { AllConfigType } from '../../config';
8
+
9
+ @Injectable()
10
+ export class FacebookService {
11
+ private fb: Facebook;
12
+
13
+ constructor(private readonly configService: ConfigService<AllConfigType>) {
14
+ this.fb = new Facebook({
15
+ appId: configService.get('facebook.appId', {
16
+ infer: true,
17
+ }),
18
+ appSecret: configService.get('facebook.appSecret', {
19
+ infer: true,
20
+ }),
21
+ version: 'v7.0',
22
+ });
23
+ }
24
+
25
+ async getProfileByToken(
26
+ loginDto: FacebookLoginDto,
27
+ ): Promise<SocialInterface> {
28
+ const { accessToken } = loginDto;
29
+ this.fb.setAccessToken(accessToken);
30
+
31
+ const data: FacebookInterface = await new Promise((resolve) => {
32
+ this.fb.api(
33
+ '/me',
34
+ 'get',
35
+ { fields: 'id,last_name,email,first_name' },
36
+ (response: FacebookInterface) => {
37
+ resolve(response);
38
+ },
39
+ );
40
+ });
41
+
42
+ const { id, email, first_name, last_name } = data;
43
+
44
+ return {
45
+ id: id,
46
+ email: email,
47
+ firstName: first_name,
48
+ lastName: last_name,
49
+ };
50
+ }
51
+ }
@@ -0,0 +1,4 @@
1
+ export * from './dto';
2
+ export * from './interface';
3
+ export * from './facebook.module';
4
+ export * from './facebook.service';
@@ -0,0 +1,6 @@
1
+ export interface FacebookInterface {
2
+ id: string;
3
+ first_name?: string;
4
+ last_name?: string;
5
+ email?: string;
6
+ }
@@ -0,0 +1 @@
1
+ export * from './facebook.interface';
@@ -0,0 +1,8 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+ import { IsNotEmpty } from 'class-validator';
3
+
4
+ export class GoogleLoginDto {
5
+ @ApiProperty({ example: 'abc' })
6
+ @IsNotEmpty()
7
+ idToken: string;
8
+ }
@@ -0,0 +1 @@
1
+ export * from './google-login.dto';
@@ -0,0 +1,10 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { ConfigModule } from '@nestjs/config';
3
+ import { GoogleService } from './google.service';
4
+
5
+ @Module({
6
+ imports: [ConfigModule],
7
+ providers: [GoogleService],
8
+ exports: [GoogleService],
9
+ })
10
+ export class GoogleModule {}
@@ -0,0 +1,51 @@
1
+ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { OAuth2Client } from 'google-auth-library';
4
+ import { SocialInterface } from '../../interface';
5
+ import { GoogleLoginDto } from './dto/google-login.dto';
6
+ import { AllConfigType } from '../../config';
7
+
8
+ @Injectable()
9
+ export class GoogleService {
10
+ private google: OAuth2Client;
11
+
12
+ constructor(private configService: ConfigService<AllConfigType>) {
13
+ this.google = new OAuth2Client(
14
+ configService.get('google.clientId', { infer: true }),
15
+ configService.get('google.clientSecret', { infer: true }),
16
+ );
17
+ }
18
+
19
+ async getProfileByToken(loginDto: GoogleLoginDto): Promise<SocialInterface> {
20
+ const { idToken } = loginDto;
21
+ const ticket = await this.google.verifyIdToken({
22
+ idToken: idToken,
23
+ audience: [
24
+ this.configService.getOrThrow('google.clientId', { infer: true }),
25
+ ],
26
+ });
27
+
28
+ const data = ticket.getPayload();
29
+
30
+ if (!data) {
31
+ throw new HttpException(
32
+ {
33
+ status: HttpStatus.UNPROCESSABLE_ENTITY,
34
+ errors: {
35
+ user: 'wrongToken',
36
+ },
37
+ },
38
+ HttpStatus.UNPROCESSABLE_ENTITY,
39
+ );
40
+ }
41
+
42
+ const { sub, email, given_name, family_name } = data;
43
+
44
+ return {
45
+ id: sub,
46
+ email: email,
47
+ firstName: given_name,
48
+ lastName: family_name,
49
+ };
50
+ }
51
+ }
@@ -0,0 +1,3 @@
1
+ export * from './dto';
2
+ export * from './google.module';
3
+ export * from './google.service';
@@ -0,0 +1,5 @@
1
+ export * from './apple';
2
+ export * from './config';
3
+ export * from './facebook';
4
+ export * from './google';
5
+ export * from './twitter';
@@ -0,0 +1 @@
1
+ export * from './twitter-login.dto';
@@ -0,0 +1,12 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+ import { IsNotEmpty } from 'class-validator';
3
+
4
+ export class TwitterLoginDto {
5
+ @ApiProperty({ example: 'abc' })
6
+ @IsNotEmpty()
7
+ accessTokenKey: string;
8
+
9
+ @ApiProperty({ example: 'abc' })
10
+ @IsNotEmpty()
11
+ accessTokenSecret: string;
12
+ }
@@ -0,0 +1,3 @@
1
+ export * from './dto';
2
+ export * from './twitter.module';
3
+ export * from './twitter.service';
@@ -0,0 +1,11 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { ConfigModule } from '@nestjs/config';
3
+ import { TwitterService } from './twitter.service';
4
+
5
+ @Module({
6
+ imports: [ConfigModule],
7
+ providers: [TwitterService],
8
+ exports: [TwitterService],
9
+ controllers: [],
10
+ })
11
+ export class TwitterModule {}
@@ -0,0 +1,43 @@
1
+ import Twitter from 'twitter';
2
+ import { Injectable } from '@nestjs/common';
3
+ import { ConfigService } from '@nestjs/config';
4
+ import { AllConfigType } from '../../config';
5
+ import { SocialInterface } from '../../interface';
6
+ import { TwitterLoginDto } from './dto/twitter-login.dto';
7
+
8
+ @Injectable()
9
+ export class TwitterService {
10
+ constructor(private configService: ConfigService<AllConfigType>) {}
11
+
12
+ async getProfileByToken(loginDto: TwitterLoginDto): Promise<SocialInterface> {
13
+ const { accessTokenKey, accessTokenSecret } = loginDto;
14
+ const twitter = new Twitter({
15
+ consumer_key: this.configService.getOrThrow('twitter.consumerKey', {
16
+ infer: true,
17
+ }),
18
+ consumer_secret: this.configService.getOrThrow('twitter.consumerSecret', {
19
+ infer: true,
20
+ }),
21
+ access_token_key: accessTokenKey,
22
+ access_token_secret: accessTokenSecret,
23
+ });
24
+
25
+ const data: Twitter.ResponseData = await new Promise((resolve) => {
26
+ twitter.get(
27
+ 'account/verify_credentials',
28
+ { include_email: true },
29
+ (error, profile) => {
30
+ resolve(profile);
31
+ },
32
+ );
33
+ });
34
+
35
+ const { id, email, name } = data;
36
+
37
+ return {
38
+ id: id.toString(),
39
+ email: email,
40
+ firstName: name,
41
+ };
42
+ }
43
+ }
@@ -0,0 +1 @@
1
+ export * from './type.config';
@@ -0,0 +1,88 @@
1
+ export type AppConfig = {
2
+ nodeEnv: string;
3
+ name: string;
4
+ workingDirectory: string;
5
+ frontendDomain?: string;
6
+ backendDomain: string;
7
+ port: number;
8
+ apiPrefix: string;
9
+ fallbackLanguage: string;
10
+ headerLanguage: string;
11
+ };
12
+
13
+ export type AppleConfig = {
14
+ appAudience: string[];
15
+ };
16
+
17
+ export type AuthConfig = {
18
+ secret?: string;
19
+ expires?: string;
20
+ refreshSecret?: string;
21
+ refreshExpires?: string;
22
+ };
23
+
24
+ export type DatabaseConfig = {
25
+ url?: string;
26
+ type?: string;
27
+ host?: string;
28
+ port?: number;
29
+ password?: string;
30
+ name?: string;
31
+ username?: string;
32
+ synchronize?: boolean;
33
+ maxConnections: number;
34
+ sslEnabled?: boolean;
35
+ rejectUnauthorized?: boolean;
36
+ ca?: string;
37
+ key?: string;
38
+ cert?: string;
39
+ };
40
+
41
+ export type FacebookConfig = {
42
+ appId?: string;
43
+ appSecret?: string;
44
+ };
45
+
46
+ export type FileConfig = {
47
+ driver: string;
48
+ accessKeyId?: string;
49
+ secretAccessKey?: string;
50
+ awsDefaultS3Bucket?: string;
51
+ awsDefaultS3Url?: string;
52
+ awsS3Region?: string;
53
+ maxFileSize: number;
54
+ };
55
+
56
+ export type GoogleConfig = {
57
+ clientId?: string;
58
+ clientSecret?: string;
59
+ };
60
+
61
+ export type MailConfig = {
62
+ port: number;
63
+ host?: string;
64
+ user?: string;
65
+ password?: string;
66
+ defaultEmail?: string;
67
+ defaultName?: string;
68
+ ignoreTLS: boolean;
69
+ secure: boolean;
70
+ requireTLS: boolean;
71
+ };
72
+
73
+ export type TwitterConfig = {
74
+ consumerKey?: string;
75
+ consumerSecret?: string;
76
+ };
77
+
78
+ export type AllConfigType = {
79
+ app: AppConfig;
80
+ apple: AppleConfig;
81
+ auth: AuthConfig;
82
+ database: DatabaseConfig;
83
+ facebook: FacebookConfig;
84
+ file: FileConfig;
85
+ google: GoogleConfig;
86
+ mail: MailConfig;
87
+ twitter: TwitterConfig;
88
+ };
@@ -1,4 +1,4 @@
1
- export enum EntityStateConstant {
2
- Active = 1,
3
- Archived = 0,
4
- }
1
+ export enum EntityStateConstant {
2
+ Active = 1,
3
+ Archived = 0,
4
+ }
@@ -1 +1 @@
1
- export * from './entity-state.constant';
1
+ export * from './entity-state.constant';
@@ -1,4 +1,4 @@
1
- export abstract class BaseFilterDto {
2
- excludeIds: number[] = undefined;
3
- includeIds: number[] = undefined;
4
- }
1
+ export abstract class BaseFilterDto {
2
+ excludeIds: number[] = undefined;
3
+ includeIds: number[] = undefined;
4
+ }
package/src/dto/index.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './pagination.dto';
2
- export * from './base-filter.dto';
1
+ export * from './pagination.dto';
2
+ export * from './base-filter.dto';
@@ -1,4 +1,16 @@
1
- export class PaginationDto {
2
- limit = 25;
3
- offset = 0;
4
- }
1
+ import { ApiPropertyOptional } from '@nestjs/swagger';
2
+ import { Type } from 'class-transformer';
3
+
4
+ export class PaginationDto {
5
+ @ApiPropertyOptional()
6
+ @Type(() => String)
7
+ query?: string;
8
+
9
+ @ApiPropertyOptional()
10
+ @Type(() => Number)
11
+ limit?: number = 25;
12
+
13
+ @ApiPropertyOptional()
14
+ @Type(() => Number)
15
+ offset?: number = 0;
16
+ }
@@ -1 +1 @@
1
- export * from './http-exception.filter';
1
+ export * from './http-exception.filter';
@@ -0,0 +1,15 @@
1
+ import { Catch } from '@nestjs/common';
2
+ import { RpcException } from '@nestjs/microservices';
3
+ import type { RpcExceptionFilter as NestRpcExceptionFilter } from '@nestjs/common';
4
+ import { throwError } from 'rxjs';
5
+ import type { Observable } from 'rxjs';
6
+
7
+ @Catch(RpcException)
8
+ export class RpcExceptionFilter
9
+ implements NestRpcExceptionFilter<RpcException>
10
+ {
11
+ catch(exception: RpcException): Observable<any> {
12
+ // TODO: handle grpc error here instead of throwing it inside each service
13
+ return throwError(() => exception.getError());
14
+ }
15
+ }
@@ -1,34 +1,34 @@
1
- import {
2
- Column,
3
- VersionColumn,
4
- CreateDateColumn,
5
- UpdateDateColumn,
6
- PrimaryGeneratedColumn,
7
- } from 'typeorm';
8
-
9
- export class EntityGeneric {
10
- constructor(id?: number) {
11
- this.id = id;
12
- }
13
-
14
- @PrimaryGeneratedColumn()
15
- id: number;
16
-
17
- @CreateDateColumn()
18
- createdAt: Date;
19
-
20
- @UpdateDateColumn()
21
- updatedAt: Date;
22
-
23
- @Column()
24
- createdBy: number;
25
-
26
- @Column({ select: false })
27
- updatedBy: number;
28
-
29
- @Column()
30
- state: number;
31
-
32
- @VersionColumn({ select: false })
33
- version: number;
34
- }
1
+ import {
2
+ Column,
3
+ VersionColumn,
4
+ CreateDateColumn,
5
+ UpdateDateColumn,
6
+ PrimaryGeneratedColumn,
7
+ } from 'typeorm';
8
+
9
+ export class EntityGeneric {
10
+ constructor(id?: number) {
11
+ this.id = id;
12
+ }
13
+
14
+ @PrimaryGeneratedColumn()
15
+ id: number;
16
+
17
+ @CreateDateColumn()
18
+ createdAt: Date;
19
+
20
+ @UpdateDateColumn()
21
+ updatedAt: Date;
22
+
23
+ @Column()
24
+ createdBy: number;
25
+
26
+ @Column({ select: false })
27
+ updatedBy: number;
28
+
29
+ @Column()
30
+ state: number;
31
+
32
+ @VersionColumn({ select: false })
33
+ version: number;
34
+ }
@@ -1 +1 @@
1
- export * from './entity.generic';
1
+ export * from './entity.generic';
@@ -1,2 +1,2 @@
1
- export * from './entity/entity.generic';
2
- export * from './service/service.generic';
1
+ export * from './entity/entity.generic';
2
+ export * from './service/service.generic';
@@ -1 +1 @@
1
- export * from './service.generic';
1
+ export * from './service.generic';