mongodb-dynamic-api 3.2.1 → 4.1.0

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 (217) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +36 -3
  3. package/package.json +5 -2
  4. package/src/adapters/socket-adapter.d.ts +4 -3
  5. package/src/adapters/socket-adapter.js +8 -1
  6. package/src/adapters/socket-adapter.js.map +1 -1
  7. package/src/builders/route-decorators/auth-decorators.builder.d.ts +1 -1
  8. package/src/builders/route-decorators/route-decorators.builder.d.ts +1 -1
  9. package/src/builders/route-decorators/route-decorators.builder.js.map +1 -1
  10. package/src/decorators/validator-pipe.decorator.js.map +1 -1
  11. package/src/dynamic-api.module.js +13 -8
  12. package/src/dynamic-api.module.js.map +1 -1
  13. package/src/gateways/base.gateway.js +10 -2
  14. package/src/gateways/base.gateway.js.map +1 -1
  15. package/src/gateways/dynamic-api-broadcast.gateway.d.ts +13 -1
  16. package/src/gateways/dynamic-api-broadcast.gateway.js +32 -0
  17. package/src/gateways/dynamic-api-broadcast.gateway.js.map +1 -1
  18. package/src/guards/jwt-socket.guard.js +1 -1
  19. package/src/guards/jwt-socket.guard.js.map +1 -1
  20. package/src/helpers/index.d.ts +1 -0
  21. package/src/helpers/index.js +1 -0
  22. package/src/helpers/index.js.map +1 -1
  23. package/src/helpers/resolve-rooms.helper.d.ts +3 -0
  24. package/src/helpers/resolve-rooms.helper.js +18 -0
  25. package/src/helpers/resolve-rooms.helper.js.map +1 -0
  26. package/src/helpers/swagger-config.helper.js.map +1 -1
  27. package/src/interceptors/dynamic-api-cache.interceptor.d.ts +3 -2
  28. package/src/interceptors/dynamic-api-cache.interceptor.js +4 -0
  29. package/src/interceptors/dynamic-api-cache.interceptor.js.map +1 -1
  30. package/src/interfaces/dynamic-api-ability.interface.d.ts +2 -1
  31. package/src/interfaces/dynamic-api-broadcast-config.interface.d.ts +2 -1
  32. package/src/interfaces/dynamic-api-decorator-builder.interface.d.ts +1 -1
  33. package/src/interfaces/dynamic-api-global-state.interface.d.ts +3 -0
  34. package/src/interfaces/dynamic-api-swagger-options.type.d.ts +1 -1
  35. package/src/modules/auth/auth-broadcast.helper.d.ts +3 -0
  36. package/src/modules/auth/auth-broadcast.helper.js +11 -0
  37. package/src/modules/auth/auth-broadcast.helper.js.map +1 -0
  38. package/src/modules/auth/auth-events.constants.d.ts +13 -0
  39. package/src/modules/auth/auth-events.constants.js +28 -0
  40. package/src/modules/auth/auth-events.constants.js.map +1 -0
  41. package/src/modules/auth/auth.helper.d.ts +20 -6
  42. package/src/modules/auth/auth.helper.js +34 -10
  43. package/src/modules/auth/auth.helper.js.map +1 -1
  44. package/src/modules/auth/auth.module.d.ts +5 -2
  45. package/src/modules/auth/auth.module.js +46 -7
  46. package/src/modules/auth/auth.module.js.map +1 -1
  47. package/src/modules/auth/guards/index.d.ts +2 -0
  48. package/src/modules/auth/guards/index.js +2 -0
  49. package/src/modules/auth/guards/index.js.map +1 -1
  50. package/src/modules/auth/guards/jwt-refresh/jwt-refresh.guard.d.ts +4 -0
  51. package/src/modules/auth/guards/jwt-refresh/jwt-refresh.guard.js +18 -0
  52. package/src/modules/auth/guards/jwt-refresh/jwt-refresh.guard.js.map +1 -0
  53. package/src/modules/auth/guards/jwt-socket-auth/jwt-socket-auth.guard.js +1 -1
  54. package/src/modules/auth/guards/jwt-socket-auth/jwt-socket-auth.guard.js.map +1 -1
  55. package/src/modules/auth/guards/jwt-socket-refresh/jwt-socket-refresh.guard.d.ts +8 -0
  56. package/src/modules/auth/guards/jwt-socket-refresh/jwt-socket-refresh.guard.js +62 -0
  57. package/src/modules/auth/guards/jwt-socket-refresh/jwt-socket-refresh.guard.js.map +1 -0
  58. package/src/modules/auth/index.d.ts +2 -0
  59. package/src/modules/auth/index.js +2 -0
  60. package/src/modules/auth/index.js.map +1 -1
  61. package/src/modules/auth/interfaces/auth-controller.interface.d.ts +19 -4
  62. package/src/modules/auth/interfaces/auth-gateway.interface.d.ts +2 -0
  63. package/src/modules/auth/interfaces/auth-options.interface.d.ts +23 -2
  64. package/src/modules/auth/interfaces/auth-service.interface.d.ts +3 -0
  65. package/src/modules/auth/mixins/auth-controller.mixin.d.ts +2 -2
  66. package/src/modules/auth/mixins/auth-controller.mixin.js +114 -18
  67. package/src/modules/auth/mixins/auth-controller.mixin.js.map +1 -1
  68. package/src/modules/auth/mixins/auth-gateway.mixin.d.ts +2 -2
  69. package/src/modules/auth/mixins/auth-gateway.mixin.js +65 -31
  70. package/src/modules/auth/mixins/auth-gateway.mixin.js.map +1 -1
  71. package/src/modules/auth/services/base-auth.service.d.ts +9 -0
  72. package/src/modules/auth/services/base-auth.service.js +74 -15
  73. package/src/modules/auth/services/base-auth.service.js.map +1 -1
  74. package/src/modules/auth/strategies/index.d.ts +1 -0
  75. package/src/modules/auth/strategies/index.js +1 -0
  76. package/src/modules/auth/strategies/index.js.map +1 -1
  77. package/src/modules/auth/strategies/jwt-refresh.strategy.d.ts +14 -0
  78. package/src/modules/auth/strategies/jwt-refresh.strategy.js +45 -0
  79. package/src/modules/auth/strategies/jwt-refresh.strategy.js.map +1 -0
  80. package/src/modules/auth/strategies/jwt.strategy.d.ts +3 -1
  81. package/src/modules/auth/strategies/jwt.strategy.js.map +1 -1
  82. package/src/routes/aggregate/base-aggregate.service.js.map +1 -1
  83. package/src/routes/create-many/base-create-many.service.js.map +1 -1
  84. package/src/routes/create-one/base-create-one.service.js.map +1 -1
  85. package/src/routes/delete-many/base-delete-many.service.js.map +1 -1
  86. package/src/routes/delete-one/base-delete-one.service.js.map +1 -1
  87. package/src/routes/duplicate-many/base-duplicate-many.service.js +4 -3
  88. package/src/routes/duplicate-many/base-duplicate-many.service.js.map +1 -1
  89. package/src/routes/duplicate-one/base-duplicate-one.service.js +3 -2
  90. package/src/routes/duplicate-one/base-duplicate-one.service.js.map +1 -1
  91. package/src/routes/get-many/base-get-many.service.js.map +1 -1
  92. package/src/routes/get-one/base-get-one.service.js.map +1 -1
  93. package/src/routes/replace-one/base-replace-one.service.js +3 -2
  94. package/src/routes/replace-one/base-replace-one.service.js.map +1 -1
  95. package/src/routes/update-many/base-update-many.service.js.map +1 -1
  96. package/src/routes/update-one/base-update-one.service.js.map +1 -1
  97. package/src/services/base/base.service.d.ts +3 -3
  98. package/src/services/base/base.service.js +26 -8
  99. package/src/services/base/base.service.js.map +1 -1
  100. package/src/services/dynamic-api-broadcast/dynamic-api-broadcast.service.js +10 -2
  101. package/src/services/dynamic-api-broadcast/dynamic-api-broadcast.service.js.map +1 -1
  102. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +3 -0
  103. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js.map +1 -1
  104. package/src/version.json +1 -1
  105. package/test/e2e.setup.d.ts +25 -2
  106. package/test/e2e.setup.js +150 -4
  107. package/test/e2e.setup.js.map +1 -1
  108. package/test/for-feature/base-entity.e2e-spec.js +316 -0
  109. package/test/for-feature/base-entity.e2e-spec.js.map +1 -0
  110. package/test/for-feature/http-broadcast.e2e-spec.js +187 -0
  111. package/test/for-feature/http-broadcast.e2e-spec.js.map +1 -0
  112. package/test/for-feature/room-broadcast.e2e-spec.d.ts +1 -0
  113. package/test/for-feature/room-broadcast.e2e-spec.js +192 -0
  114. package/test/for-feature/room-broadcast.e2e-spec.js.map +1 -0
  115. package/test/for-feature/soft-deletable-entity.e2e-spec.d.ts +1 -0
  116. package/test/for-feature/soft-deletable-entity.e2e-spec.js +335 -0
  117. package/test/for-feature/soft-deletable-entity.e2e-spec.js.map +1 -0
  118. package/test/for-feature/websockets.e2e-spec.d.ts +1 -0
  119. package/test/for-feature/websockets.e2e-spec.js +324 -0
  120. package/test/for-feature/websockets.e2e-spec.js.map +1 -0
  121. package/test/for-root/auth-api-basic.e2e-spec.d.ts +1 -0
  122. package/test/for-root/auth-api-basic.e2e-spec.js +338 -0
  123. package/test/for-root/auth-api-basic.e2e-spec.js.map +1 -0
  124. package/test/for-root/auth-api-broadcast.e2e-spec.d.ts +1 -0
  125. package/test/for-root/auth-api-broadcast.e2e-spec.js +82 -0
  126. package/test/for-root/auth-api-broadcast.e2e-spec.js.map +1 -0
  127. package/test/for-root/auth-api-login.e2e-spec.d.ts +1 -0
  128. package/test/for-root/auth-api-login.e2e-spec.js +103 -0
  129. package/test/for-root/auth-api-login.e2e-spec.js.map +1 -0
  130. package/test/for-root/auth-api-logout.e2e-spec.d.ts +1 -0
  131. package/test/for-root/auth-api-logout.e2e-spec.js +74 -0
  132. package/test/for-root/auth-api-logout.e2e-spec.js.map +1 -0
  133. package/test/for-root/auth-api-refresh-token-cookie.e2e-spec.d.ts +1 -0
  134. package/test/for-root/auth-api-refresh-token-cookie.e2e-spec.js +110 -0
  135. package/test/for-root/auth-api-refresh-token-cookie.e2e-spec.js.map +1 -0
  136. package/test/for-root/auth-api-refresh-token.e2e-spec.d.ts +1 -0
  137. package/test/for-root/auth-api-refresh-token.e2e-spec.js +153 -0
  138. package/test/for-root/auth-api-refresh-token.e2e-spec.js.map +1 -0
  139. package/test/for-root/auth-api-register.e2e-spec.d.ts +1 -0
  140. package/test/for-root/auth-api-register.e2e-spec.js +116 -0
  141. package/test/for-root/auth-api-register.e2e-spec.js.map +1 -0
  142. package/test/for-root/auth-api-reset-password.e2e-spec.d.ts +1 -0
  143. package/test/for-root/auth-api-reset-password.e2e-spec.js +168 -0
  144. package/test/for-root/auth-api-reset-password.e2e-spec.js.map +1 -0
  145. package/test/for-root/initialization.e2e-spec.d.ts +1 -0
  146. package/test/for-root/initialization.e2e-spec.js +84 -0
  147. package/test/for-root/initialization.e2e-spec.js.map +1 -0
  148. package/test/for-root/websockets-auth-basic.e2e-spec.d.ts +1 -0
  149. package/test/for-root/websockets-auth-basic.e2e-spec.js +313 -0
  150. package/test/for-root/websockets-auth-basic.e2e-spec.js.map +1 -0
  151. package/test/for-root/websockets-auth-broadcast.e2e-spec.d.ts +1 -0
  152. package/test/for-root/websockets-auth-broadcast.e2e-spec.js +86 -0
  153. package/test/for-root/websockets-auth-broadcast.e2e-spec.js.map +1 -0
  154. package/test/for-root/websockets-auth-login.e2e-spec.d.ts +1 -0
  155. package/test/for-root/websockets-auth-login.e2e-spec.js +107 -0
  156. package/test/for-root/websockets-auth-login.e2e-spec.js.map +1 -0
  157. package/test/for-root/websockets-auth-refresh-token.e2e-spec.d.ts +1 -0
  158. package/test/for-root/websockets-auth-refresh-token.e2e-spec.js +104 -0
  159. package/test/for-root/websockets-auth-refresh-token.e2e-spec.js.map +1 -0
  160. package/test/for-root/websockets-auth-register.e2e-spec.d.ts +1 -0
  161. package/test/for-root/websockets-auth-register.e2e-spec.js +131 -0
  162. package/test/for-root/websockets-auth-register.e2e-spec.js.map +1 -0
  163. package/test/for-root/websockets-auth-reset-password.e2e-spec.d.ts +1 -0
  164. package/test/for-root/websockets-auth-reset-password.e2e-spec.js +164 -0
  165. package/test/for-root/websockets-auth-reset-password.e2e-spec.js.map +1 -0
  166. package/test/shared/entities/basic-user.factory.d.ts +12 -0
  167. package/test/shared/entities/basic-user.factory.js +31 -0
  168. package/test/shared/entities/basic-user.factory.js.map +1 -0
  169. package/test/shared/entities/broadcast-user.factory.d.ts +13 -0
  170. package/test/shared/entities/broadcast-user.factory.js +35 -0
  171. package/test/shared/entities/broadcast-user.factory.js.map +1 -0
  172. package/test/shared/entities/index.d.ts +7 -0
  173. package/test/shared/entities/index.js +24 -0
  174. package/test/shared/entities/index.js.map +1 -0
  175. package/test/shared/entities/login-user.factory.d.ts +14 -0
  176. package/test/shared/entities/login-user.factory.js +39 -0
  177. package/test/shared/entities/login-user.factory.js.map +1 -0
  178. package/test/shared/entities/refresh-token-user.factory.d.ts +13 -0
  179. package/test/shared/entities/refresh-token-user.factory.js +35 -0
  180. package/test/shared/entities/refresh-token-user.factory.js.map +1 -0
  181. package/test/shared/entities/register-user.factory.d.ts +14 -0
  182. package/test/shared/entities/register-user.factory.js +39 -0
  183. package/test/shared/entities/register-user.factory.js.map +1 -0
  184. package/test/shared/entities/reset-password-user.factory.d.ts +14 -0
  185. package/test/shared/entities/reset-password-user.factory.js +39 -0
  186. package/test/shared/entities/reset-password-user.factory.js.map +1 -0
  187. package/test/shared/entities/validated-user.factory.d.ts +12 -0
  188. package/test/shared/entities/validated-user.factory.js +40 -0
  189. package/test/shared/entities/validated-user.factory.js.map +1 -0
  190. package/test/shared/fixtures/index.d.ts +2 -0
  191. package/test/shared/fixtures/index.js +19 -0
  192. package/test/shared/fixtures/index.js.map +1 -0
  193. package/test/shared/fixtures/login.fixtures.d.ts +16 -0
  194. package/test/shared/fixtures/login.fixtures.js +20 -0
  195. package/test/shared/fixtures/login.fixtures.js.map +1 -0
  196. package/test/shared/fixtures/register.fixtures.d.ts +10 -0
  197. package/test/shared/fixtures/register.fixtures.js +14 -0
  198. package/test/shared/fixtures/register.fixtures.js.map +1 -0
  199. package/test/shared/index.d.ts +4 -0
  200. package/test/shared/index.js +24 -0
  201. package/test/shared/index.js.map +1 -0
  202. package/test/shared/init-app.d.ts +3 -0
  203. package/test/shared/init-app.js +19 -0
  204. package/test/shared/init-app.js.map +1 -0
  205. package/test/shared/init-module.d.ts +4 -0
  206. package/test/shared/init-module.js +16 -0
  207. package/test/shared/init-module.js.map +1 -0
  208. package/test/test-socket-adapter.d.ts +1 -0
  209. package/test/test-socket-adapter.js +11 -4
  210. package/test/test-socket-adapter.js.map +1 -1
  211. package/tsconfig.tsbuildinfo +1 -1
  212. package/test/dynamic-api-for-feature.e2e-spec.js +0 -1100
  213. package/test/dynamic-api-for-feature.e2e-spec.js.map +0 -1
  214. package/test/dynamic-api-for-root.e2e-spec.js +0 -1573
  215. package/test/dynamic-api-for-root.e2e-spec.js.map +0 -1
  216. /package/test/{dynamic-api-for-feature.e2e-spec.d.ts → for-feature/base-entity.e2e-spec.d.ts} +0 -0
  217. /package/test/{dynamic-api-for-root.e2e-spec.d.ts → for-feature/http-broadcast.e2e-spec.d.ts} +0 -0
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./auth-broadcast.helper"), exports);
18
+ __exportStar(require("./auth-events.constants"), exports);
17
19
  __exportStar(require("./guards"), exports);
18
20
  __exportStar(require("./interfaces"), exports);
19
21
  __exportStar(require("./mixins"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB;AACzB,6CAA2B;AAC3B,+CAA6B;AAC7B,gDAA8B;AAC9B,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,0DAAwC;AACxC,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB;AACzB,6CAA2B;AAC3B,+CAA6B;AAC7B,gDAA8B;AAC9B,gDAA8B"}
@@ -1,16 +1,31 @@
1
+ import { JwtService } from '@nestjs/jwt';
2
+ import { Response } from 'express';
1
3
  import { BaseEntity } from '../../../models';
4
+ import { DynamicApiBroadcastService } from '../../../services';
2
5
  import { ChangePasswordDto } from '../dtos/change-password.dto';
3
6
  import { ResetPasswordDto } from '../dtos/reset-password.dto';
4
7
  import { AuthService, LoginResponse } from './auth-service.interface';
5
8
  interface AuthController<Entity extends BaseEntity> {
6
- login<Body>(req: any, body: Body): Promise<LoginResponse>;
7
- register<Body>(body: Body): Promise<LoginResponse>;
8
- getAccount(req: any): Promise<Partial<Entity>>;
9
+ login<Body>(req: {
10
+ user: Entity;
11
+ }, body: Body, res: Response): Promise<LoginResponse>;
12
+ register<Body>(body: Body, res: Response): Promise<LoginResponse>;
13
+ getAccount(req: {
14
+ user: Entity;
15
+ }): Promise<Partial<Entity>>;
9
16
  updateAccount<Body>(req: {
10
17
  user: Entity;
11
18
  }, body: Body): Promise<Entity>;
12
19
  resetPassword(body: ResetPasswordDto): Promise<void>;
13
20
  changePassword(body: ChangePasswordDto): Promise<void>;
21
+ refreshToken(req: {
22
+ user: Entity;
23
+ headers: Record<string, string>;
24
+ cookies: Record<string, string>;
25
+ }, res: Response): Promise<LoginResponse>;
26
+ logout(req: {
27
+ user: Entity;
28
+ }, res: Response): Promise<void>;
14
29
  }
15
- type AuthControllerConstructor<Entity extends BaseEntity> = new (service: AuthService<Entity>) => AuthController<Entity>;
30
+ type AuthControllerConstructor<Entity extends BaseEntity> = new (service: AuthService<Entity>, broadcastService?: DynamicApiBroadcastService, jwtService?: JwtService) => AuthController<Entity>;
16
31
  export type { AuthController, AuthControllerConstructor };
@@ -11,6 +11,8 @@ interface AuthGateway<Entity extends BaseEntity> {
11
11
  updateAccount<Body>(socket: ExtendedSocket<Entity>, body: Body): GatewayResponse<Partial<Entity>>;
12
12
  resetPassword(body: ResetPasswordDto): GatewayResponse<void>;
13
13
  changePassword(body: ChangePasswordDto): GatewayResponse<void>;
14
+ refreshToken(socket: ExtendedSocket<Entity>): GatewayResponse<LoginResponse>;
15
+ logout(socket: ExtendedSocket<Entity>): GatewayResponse<void>;
14
16
  }
15
17
  type AuthGatewayConstructor<Entity extends BaseEntity> = new (service: AuthService<Entity>, jwtService: JwtService) => AuthGateway<Entity>;
16
18
  export type { AuthGateway, AuthGatewayConstructor };
@@ -1,9 +1,18 @@
1
1
  import { ModuleMetadata, NestInterceptor, Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { AuthAbilityPredicate, DynamicApiResetPasswordCallback, DynamicApiServiceBeforeSaveCallback, DynamicApiServiceCallback, DynamicApiWebSocketOptions } from '../../../interfaces';
2
+ import type { Request } from 'express';
3
+ import { AuthAbilityPredicate, BroadcastAbilityPredicate, BroadcastRooms, DynamicApiResetPasswordCallback, DynamicApiServiceBeforeSaveCallback, DynamicApiServiceCallback, DynamicApiWebSocketOptions } from '../../../interfaces';
3
4
  import { BaseEntity } from '../../../models';
4
5
  type DynamicApiJWTOptions = {
5
6
  secret: string;
6
7
  expiresIn?: string | number;
8
+ refreshTokenExpiresIn?: string | number;
9
+ refreshSecret?: string;
10
+ };
11
+ type DynamicApiAuthBroadcastConfig<Entity extends BaseEntity = any> = {
12
+ enabled: boolean | BroadcastAbilityPredicate<Partial<Entity>>;
13
+ eventName?: string;
14
+ fields?: (keyof Entity)[];
15
+ rooms?: BroadcastRooms<Partial<Entity>>;
7
16
  };
8
17
  type DynamicApiLoginOptions<Entity extends BaseEntity = any> = {
9
18
  loginField?: keyof Entity;
@@ -12,10 +21,14 @@ type DynamicApiLoginOptions<Entity extends BaseEntity = any> = {
12
21
  abilityPredicate?: AuthAbilityPredicate;
13
22
  additionalFields?: (keyof Entity)[];
14
23
  useInterceptors?: Type<NestInterceptor>[];
24
+ broadcast?: DynamicApiAuthBroadcastConfig<Entity>;
25
+ customValidate?: (req: Request) => Promise<Entity | null>;
26
+ useStrategy?: Type<any>;
15
27
  };
16
28
  type DynamicApiGetAccountOptions<Entity extends BaseEntity = any> = {
17
29
  callback?: DynamicApiServiceCallback<Entity>;
18
30
  useInterceptors?: Type<NestInterceptor>[];
31
+ broadcast?: DynamicApiAuthBroadcastConfig<Entity>;
19
32
  };
20
33
  type DynamicApiRegisterOptions<Entity extends BaseEntity = any> = {
21
34
  beforeSaveCallback?: DynamicApiServiceBeforeSaveCallback<Entity>;
@@ -27,6 +40,7 @@ type DynamicApiRegisterOptions<Entity extends BaseEntity = any> = {
27
40
  required?: boolean;
28
41
  })[];
29
42
  useInterceptors?: Type<NestInterceptor>[];
43
+ broadcast?: DynamicApiAuthBroadcastConfig<Entity>;
30
44
  };
31
45
  type DynamicApiUpdateAccountOptions<Entity extends BaseEntity = any> = {
32
46
  beforeSaveCallback?: DynamicApiServiceBeforeSaveCallback<Entity>;
@@ -34,6 +48,7 @@ type DynamicApiUpdateAccountOptions<Entity extends BaseEntity = any> = {
34
48
  abilityPredicate?: AuthAbilityPredicate;
35
49
  additionalFieldsToExclude?: (keyof Entity)[];
36
50
  useInterceptors?: Type<NestInterceptor>[];
51
+ broadcast?: DynamicApiAuthBroadcastConfig<Entity>;
37
52
  };
38
53
  type DynamicApiResetPasswordOptions<Entity extends BaseEntity = any> = {
39
54
  emailField?: keyof Entity | string;
@@ -45,6 +60,11 @@ type DynamicApiResetPasswordOptions<Entity extends BaseEntity = any> = {
45
60
  changePasswordAbilityPredicate?: AuthAbilityPredicate;
46
61
  changePasswordUseInterceptors?: Type<NestInterceptor>[];
47
62
  };
63
+ type DynamicApiRefreshTokenOptions<Entity extends BaseEntity = any> = {
64
+ useInterceptors?: Type<NestInterceptor>[];
65
+ refreshTokenField?: keyof Entity;
66
+ useCookie?: boolean;
67
+ };
48
68
  type DynamicApiAuthOptions<Entity extends BaseEntity = any> = {
49
69
  userEntity: Type<Entity>;
50
70
  jwt?: DynamicApiJWTOptions;
@@ -53,10 +73,11 @@ type DynamicApiAuthOptions<Entity extends BaseEntity = any> = {
53
73
  register?: DynamicApiRegisterOptions<Entity>;
54
74
  updateAccount?: DynamicApiUpdateAccountOptions<Entity>;
55
75
  resetPassword?: Partial<DynamicApiResetPasswordOptions<Entity>>;
76
+ refreshToken?: DynamicApiRefreshTokenOptions<Entity>;
56
77
  validationPipeOptions?: ValidationPipeOptions;
57
78
  webSocket?: DynamicApiWebSocketOptions;
58
79
  extraImports?: ModuleMetadata['imports'];
59
80
  extraProviders?: ModuleMetadata['providers'];
60
81
  extraControllers?: ModuleMetadata['controllers'];
61
82
  };
62
- export type { DynamicApiAuthOptions, DynamicApiRegisterOptions, DynamicApiUpdateAccountOptions, DynamicApiGetAccountOptions, DynamicApiJWTOptions, DynamicApiLoginOptions, DynamicApiResetPasswordOptions, };
83
+ export type { DynamicApiAuthBroadcastConfig, DynamicApiAuthOptions, DynamicApiRegisterOptions, DynamicApiUpdateAccountOptions, DynamicApiGetAccountOptions, DynamicApiJWTOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiResetPasswordOptions, };
@@ -1,6 +1,7 @@
1
1
  import { BaseEntity } from '../../../models';
2
2
  type LoginResponse = {
3
3
  accessToken: string;
4
+ refreshToken?: string;
4
5
  };
5
6
  interface AuthService<Entity extends BaseEntity> {
6
7
  validateUser(login: string, pass: string): Promise<Entity>;
@@ -10,5 +11,7 @@ interface AuthService<Entity extends BaseEntity> {
10
11
  updateAccount(user: Entity, update: Partial<Entity>): Promise<Entity>;
11
12
  resetPassword(email: string): Promise<void>;
12
13
  changePassword(resetPasswordToken: string, newPassword: string): Promise<void>;
14
+ refreshToken(user: Entity, rawToken?: string): Promise<LoginResponse>;
15
+ logout(user: Entity): Promise<void>;
13
16
  }
14
17
  export type { AuthService, LoginResponse };
@@ -1,5 +1,5 @@
1
1
  import { Type } from '@nestjs/common';
2
2
  import { BaseEntity } from '../../../models';
3
- import { AuthControllerConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from '../interfaces';
4
- declare function AuthControllerMixin<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, additionalFields: additionalRequestFields, useInterceptors: loginUseInterceptors, }: DynamicApiLoginOptions<Entity>, { additionalFields: additionalRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors, }?: DynamicApiRegisterOptions<Entity>, { resetPasswordUseInterceptors, changePasswordUseInterceptors, ...resetPasswordOptions }?: DynamicApiResetPasswordOptions<Entity>, { useInterceptors: updateAccountUseInterceptors, ...updateAccountOptions }?: DynamicApiUpdateAccountOptions<Entity>, { useInterceptors: getAccountUseInterceptors, }?: DynamicApiGetAccountOptions<Entity>): AuthControllerConstructor<Entity>;
3
+ import { AuthControllerConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from '../interfaces';
4
+ declare function AuthControllerMixin<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, additionalFields: additionalRequestFields, useInterceptors: loginUseInterceptors, broadcast: loginBroadcastConfig, }: DynamicApiLoginOptions<Entity>, { additionalFields: additionalRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors, broadcast: registerBroadcastConfig, }?: DynamicApiRegisterOptions<Entity>, { resetPasswordUseInterceptors, changePasswordUseInterceptors, ...resetPasswordOptions }?: DynamicApiResetPasswordOptions<Entity>, { useInterceptors: updateAccountUseInterceptors, broadcast: updateAccountBroadcastConfig, ...updateAccountOptions }?: DynamicApiUpdateAccountOptions<Entity>, { useInterceptors: getAccountUseInterceptors, broadcast: getAccountBroadcastConfig, }?: DynamicApiGetAccountOptions<Entity>, { useInterceptors: refreshTokenUseInterceptors, useCookie, }?: DynamicApiRefreshTokenOptions<Entity>): AuthControllerConstructor<Entity>;
5
5
  export { AuthControllerMixin };
@@ -14,16 +14,22 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.AuthControllerMixin = AuthControllerMixin;
16
16
  const common_1 = require("@nestjs/common");
17
+ const jwt_1 = require("@nestjs/jwt");
17
18
  const swagger_1 = require("@nestjs/swagger");
18
19
  const builders_1 = require("../../../builders");
19
20
  const decorators_1 = require("../../../decorators");
20
21
  const helpers_1 = require("../../../helpers");
21
22
  const mixins_1 = require("../../../mixins");
23
+ const services_1 = require("../../../services");
24
+ const auth_broadcast_helper_1 = require("../auth-broadcast.helper");
25
+ const auth_events_constants_1 = require("../auth-events.constants");
22
26
  const change_password_dto_1 = require("../dtos/change-password.dto");
23
27
  const reset_password_dto_1 = require("../dtos/reset-password.dto");
24
28
  const guards_1 = require("../guards");
25
29
  const auth_policies_guard_mixin_1 = require("./auth-policies-guard.mixin");
26
- function AuthControllerMixin(userEntity, { loginField, passwordField, additionalFields: additionalRequestFields = [], useInterceptors: loginUseInterceptors = [], }, { additionalFields: additionalRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors = [], } = {}, { resetPasswordUseInterceptors = [], changePasswordUseInterceptors = [], ...resetPasswordOptions } = {}, { useInterceptors: updateAccountUseInterceptors = [], ...updateAccountOptions } = {}, { useInterceptors: getAccountUseInterceptors = [], } = {}) {
30
+ const REFRESH_TOKEN_COOKIE = 'refreshToken';
31
+ const COOKIE_OPTIONS = { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'strict' };
32
+ function AuthControllerMixin(userEntity, { loginField, passwordField, additionalFields: additionalRequestFields = [], useInterceptors: loginUseInterceptors = [], broadcast: loginBroadcastConfig, }, { additionalFields: additionalRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors = [], broadcast: registerBroadcastConfig, } = {}, { resetPasswordUseInterceptors = [], changePasswordUseInterceptors = [], ...resetPasswordOptions } = {}, { useInterceptors: updateAccountUseInterceptors = [], broadcast: updateAccountBroadcastConfig, ...updateAccountOptions } = {}, { useInterceptors: getAccountUseInterceptors = [], broadcast: getAccountBroadcastConfig, } = {}, { useInterceptors: refreshTokenUseInterceptors = [], useCookie = false, } = {}) {
27
33
  var _a;
28
34
  if (!loginField || !passwordField) {
29
35
  throw new Error('Login and password fields are required');
@@ -71,6 +77,10 @@ function AuthControllerMixin(userEntity, { loginField, passwordField, additional
71
77
  (0, swagger_1.ApiProperty)(),
72
78
  __metadata("design:type", String)
73
79
  ], AuthPresenter.prototype, "accessToken", void 0);
80
+ __decorate([
81
+ (0, swagger_1.ApiProperty)({ required: false }),
82
+ __metadata("design:type", String)
83
+ ], AuthPresenter.prototype, "refreshToken", void 0);
74
84
  class AuthUserPresenter extends (0, swagger_1.PickType)(userEntity, ['id', loginField, ...additionalRequestFields]) {
75
85
  }
76
86
  class AuthRegisterPoliciesGuard extends (0, auth_policies_guard_mixin_1.AuthPoliciesGuardMixin)(userEntity, registerAbilityPredicate) {
@@ -79,29 +89,81 @@ function AuthControllerMixin(userEntity, { loginField, passwordField, additional
79
89
  class AuthUpdateAccountPoliciesGuard extends (0, auth_policies_guard_mixin_1.AuthPoliciesGuardMixin)(userEntity, updateAccountOptions.abilityPredicate) {
80
90
  }
81
91
  const authUpdateAccountDecorators = new builders_1.AuthDecoratorsBuilder(true, AuthUpdateAccountPoliciesGuard);
82
- class BaseAuthController {
83
- constructor(service) {
92
+ let BaseAuthController = class BaseAuthController {
93
+ constructor(service, broadcastService, jwtService) {
84
94
  this.service = service;
95
+ this.broadcastService = broadcastService;
96
+ this.jwtService = jwtService;
85
97
  }
86
- getAccount(req) {
87
- return this.service.getAccount(req.user);
98
+ async getAccount(req) {
99
+ const account = await this.service.getAccount(req.user);
100
+ if (getAccountBroadcastConfig) {
101
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(account, getAccountBroadcastConfig.fields);
102
+ this.broadcastService?.broadcastFromHttp(getAccountBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_GET_ACCOUNT_BROADCAST_EVENT, [broadcastData], getAccountBroadcastConfig);
103
+ }
104
+ return account;
88
105
  }
89
106
  changePassword({ resetPasswordToken, newPassword }) {
90
107
  return this.service.changePassword(resetPasswordToken, newPassword);
91
108
  }
92
- login(req, _) {
93
- return this.service.login(req.user);
109
+ async login(req, _, res) {
110
+ const result = await this.service.login(req.user);
111
+ if (loginBroadcastConfig) {
112
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(req.user, loginBroadcastConfig.fields);
113
+ this.broadcastService?.broadcastFromHttp(loginBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_LOGIN_BROADCAST_EVENT, [broadcastData], loginBroadcastConfig);
114
+ }
115
+ if (useCookie) {
116
+ res.cookie(REFRESH_TOKEN_COOKIE, result.refreshToken, COOKIE_OPTIONS);
117
+ const { refreshToken: _rt, ...bodyResult } = result;
118
+ return bodyResult;
119
+ }
120
+ return result;
94
121
  }
95
- register(body) {
96
- return this.service.register(body);
122
+ async register(body, res) {
123
+ const result = await this.service.register(body);
124
+ if (registerBroadcastConfig && this.jwtService) {
125
+ const decoded = this.jwtService.decode(result.accessToken);
126
+ const { iat, exp, ...userPayload } = (decoded && typeof decoded !== 'string' ? decoded : {});
127
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(userPayload, registerBroadcastConfig.fields);
128
+ this.broadcastService?.broadcastFromHttp(registerBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_REGISTER_BROADCAST_EVENT, [broadcastData], registerBroadcastConfig);
129
+ }
130
+ if (useCookie) {
131
+ res.cookie(REFRESH_TOKEN_COOKIE, result.refreshToken, COOKIE_OPTIONS);
132
+ const { refreshToken: _rt, ...bodyResult } = result;
133
+ return bodyResult;
134
+ }
135
+ return result;
97
136
  }
98
137
  resetPassword({ email }) {
99
138
  return this.service.resetPassword(email);
100
139
  }
101
- updateAccount(req, body) {
102
- return this.service.updateAccount(req.user, body);
140
+ async updateAccount(req, body) {
141
+ const account = await this.service.updateAccount(req.user, body);
142
+ if (updateAccountBroadcastConfig) {
143
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(account, updateAccountBroadcastConfig.fields);
144
+ this.broadcastService?.broadcastFromHttp(updateAccountBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_UPDATE_ACCOUNT_BROADCAST_EVENT, [broadcastData], updateAccountBroadcastConfig);
145
+ }
146
+ return account;
103
147
  }
104
- }
148
+ async refreshToken(req, res) {
149
+ const rawToken = useCookie
150
+ ? req.cookies?.[REFRESH_TOKEN_COOKIE]
151
+ : req.headers?.authorization?.split(' ')[1];
152
+ const result = await this.service.refreshToken(req.user, rawToken);
153
+ if (useCookie) {
154
+ res.cookie(REFRESH_TOKEN_COOKIE, result.refreshToken, COOKIE_OPTIONS);
155
+ const { refreshToken: _rt, ...bodyResult } = result;
156
+ return bodyResult;
157
+ }
158
+ return result;
159
+ }
160
+ async logout(req, res) {
161
+ await this.service.logout(req.user);
162
+ if (useCookie) {
163
+ res.clearCookie(REFRESH_TOKEN_COOKIE);
164
+ }
165
+ }
166
+ };
105
167
  __decorate([
106
168
  (0, swagger_1.ApiBearerAuth)(),
107
169
  (0, common_1.UseGuards)(guards_1.JwtAuthGuard),
@@ -112,7 +174,7 @@ function AuthControllerMixin(userEntity, { loginField, passwordField, additional
112
174
  __param(0, (0, common_1.Request)()),
113
175
  __metadata("design:type", Function),
114
176
  __metadata("design:paramtypes", [Object]),
115
- __metadata("design:returntype", void 0)
177
+ __metadata("design:returntype", Promise)
116
178
  ], BaseAuthController.prototype, "getAccount", null);
117
179
  __decorate([
118
180
  (0, decorators_1.ApiEndpointVisibility)(!!resetPasswordOptions, (0, decorators_1.Public)()),
@@ -134,9 +196,10 @@ function AuthControllerMixin(userEntity, { loginField, passwordField, additional
134
196
  (0, common_1.Post)('login'),
135
197
  __param(0, (0, common_1.Request)()),
136
198
  __param(1, (0, common_1.Body)()),
199
+ __param(2, (0, common_1.Res)({ passthrough: true })),
137
200
  __metadata("design:type", Function),
138
- __metadata("design:paramtypes", [Object, AuthLoginDto]),
139
- __metadata("design:returntype", void 0)
201
+ __metadata("design:paramtypes", [Object, AuthLoginDto, Object]),
202
+ __metadata("design:returntype", Promise)
140
203
  ], BaseAuthController.prototype, "login", null);
141
204
  __decorate([
142
205
  (0, helpers_1.RouteDecoratorsHelper)(authRegisterDecorators),
@@ -145,9 +208,10 @@ function AuthControllerMixin(userEntity, { loginField, passwordField, additional
145
208
  (0, common_1.UseInterceptors)(...registerUseInterceptors),
146
209
  (0, common_1.Post)('register'),
147
210
  __param(0, (0, common_1.Body)()),
211
+ __param(1, (0, common_1.Res)({ passthrough: true })),
148
212
  __metadata("design:type", Function),
149
- __metadata("design:paramtypes", [AuthRegisterDto]),
150
- __metadata("design:returntype", void 0)
213
+ __metadata("design:paramtypes", [AuthRegisterDto, Object]),
214
+ __metadata("design:returntype", Promise)
151
215
  ], BaseAuthController.prototype, "register", null);
152
216
  __decorate([
153
217
  (0, decorators_1.ApiEndpointVisibility)(!!resetPasswordOptions, (0, decorators_1.Public)()),
@@ -170,8 +234,40 @@ function AuthControllerMixin(userEntity, { loginField, passwordField, additional
170
234
  __param(1, (0, common_1.Body)()),
171
235
  __metadata("design:type", Function),
172
236
  __metadata("design:paramtypes", [Object, AuthUpdateAccountDto]),
173
- __metadata("design:returntype", void 0)
237
+ __metadata("design:returntype", Promise)
174
238
  ], BaseAuthController.prototype, "updateAccount", null);
239
+ __decorate([
240
+ (0, decorators_1.Public)(),
241
+ (0, swagger_1.ApiBearerAuth)(),
242
+ (0, common_1.UseGuards)(guards_1.JwtRefreshGuard),
243
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
244
+ (0, swagger_1.ApiOkResponse)({ type: AuthPresenter }),
245
+ (0, common_1.UseInterceptors)(...refreshTokenUseInterceptors),
246
+ (0, common_1.Post)('refresh-token'),
247
+ __param(0, (0, common_1.Request)()),
248
+ __param(1, (0, common_1.Res)({ passthrough: true })),
249
+ __metadata("design:type", Function),
250
+ __metadata("design:paramtypes", [Object, Object]),
251
+ __metadata("design:returntype", Promise)
252
+ ], BaseAuthController.prototype, "refreshToken", null);
253
+ __decorate([
254
+ (0, decorators_1.Public)(),
255
+ (0, swagger_1.ApiBearerAuth)(),
256
+ (0, common_1.UseGuards)(guards_1.JwtRefreshGuard),
257
+ (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
258
+ (0, common_1.Post)('logout'),
259
+ __param(0, (0, common_1.Request)()),
260
+ __param(1, (0, common_1.Res)({ passthrough: true })),
261
+ __metadata("design:type", Function),
262
+ __metadata("design:paramtypes", [Object, Object]),
263
+ __metadata("design:returntype", Promise)
264
+ ], BaseAuthController.prototype, "logout", null);
265
+ BaseAuthController = __decorate([
266
+ __param(1, (0, common_1.Optional)()),
267
+ __param(2, (0, common_1.Optional)()),
268
+ __metadata("design:paramtypes", [Object, services_1.DynamicApiBroadcastService,
269
+ jwt_1.JwtService])
270
+ ], BaseAuthController);
175
271
  return BaseAuthController;
176
272
  }
177
273
  //# sourceMappingURL=auth-controller.mixin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-controller.mixin.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/mixins/auth-controller.mixin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-controller.mixin.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/mixins/auth-controller.mixin.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Type } from '@nestjs/common';
2
2
  import { BaseEntity } from '../../../models';
3
- import { AuthGatewayConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from '../interfaces';
4
- declare function AuthGatewayMixin<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, abilityPredicate: loginAbilityPredicate, useInterceptors: loginUseInterceptors, }: DynamicApiLoginOptions<Entity>, { additionalFields: additionalSocketRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors, }?: DynamicApiRegisterOptions<Entity>, { resetPasswordUseInterceptors, changePasswordUseInterceptors, ...resetPasswordOptions }?: DynamicApiResetPasswordOptions<Entity>, { useInterceptors: updateAccountUseInterceptors, ...updateAccountOptions }?: DynamicApiUpdateAccountOptions<Entity>, { useInterceptors: getAccountUseInterceptors, }?: DynamicApiGetAccountOptions<Entity>): AuthGatewayConstructor<Entity>;
3
+ import { AuthGatewayConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from '../interfaces';
4
+ declare function AuthGatewayMixin<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, abilityPredicate: loginAbilityPredicate, useInterceptors: loginUseInterceptors, broadcast: loginBroadcastConfig, }: DynamicApiLoginOptions<Entity>, { additionalFields: additionalSocketRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors, broadcast: registerBroadcastConfig, }?: DynamicApiRegisterOptions<Entity>, { resetPasswordUseInterceptors, changePasswordUseInterceptors, ...resetPasswordOptions }?: DynamicApiResetPasswordOptions<Entity>, { useInterceptors: updateAccountUseInterceptors, broadcast: updateAccountBroadcastConfig, ...updateAccountOptions }?: DynamicApiUpdateAccountOptions<Entity>, { useInterceptors: getAccountUseInterceptors, broadcast: getAccountBroadcastConfig, }?: DynamicApiGetAccountOptions<Entity>, { useInterceptors: refreshTokenUseInterceptors, }?: DynamicApiRefreshTokenOptions<Entity>): AuthGatewayConstructor<Entity>;
5
5
  export { AuthGatewayMixin };
@@ -20,11 +20,13 @@ const lodash_1 = require("lodash");
20
20
  const gateways_1 = require("../../../gateways");
21
21
  const helpers_1 = require("../../../helpers");
22
22
  const mixins_1 = require("../../../mixins");
23
+ const auth_broadcast_helper_1 = require("../auth-broadcast.helper");
24
+ const auth_events_constants_1 = require("../auth-events.constants");
23
25
  const change_password_dto_1 = require("../dtos/change-password.dto");
24
26
  const reset_password_dto_1 = require("../dtos/reset-password.dto");
25
27
  const guards_1 = require("../guards");
26
28
  const auth_policies_guard_mixin_1 = require("./auth-policies-guard.mixin");
27
- function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredicate: loginAbilityPredicate, useInterceptors: loginUseInterceptors = [], }, { additionalFields: additionalSocketRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors = [], } = {}, { resetPasswordUseInterceptors = [], changePasswordUseInterceptors = [], ...resetPasswordOptions } = {}, { useInterceptors: updateAccountUseInterceptors = [], ...updateAccountOptions } = {}, { useInterceptors: getAccountUseInterceptors = [], } = {}) {
29
+ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredicate: loginAbilityPredicate, useInterceptors: loginUseInterceptors = [], broadcast: loginBroadcastConfig, }, { additionalFields: additionalSocketRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors = [], broadcast: registerBroadcastConfig, } = {}, { resetPasswordUseInterceptors = [], changePasswordUseInterceptors = [], ...resetPasswordOptions } = {}, { useInterceptors: updateAccountUseInterceptors = [], broadcast: updateAccountBroadcastConfig, ...updateAccountOptions } = {}, { useInterceptors: getAccountUseInterceptors = [], broadcast: getAccountBroadcastConfig, } = {}, { useInterceptors: refreshTokenUseInterceptors = [], } = {}) {
28
30
  var _a;
29
31
  class AuthSocketBodyPasswordFieldDto extends (0, swagger_1.PickType)(userEntity, [passwordField]) {
30
32
  }
@@ -67,12 +69,6 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
67
69
  }
68
70
  class AuthUpdateAccountPoliciesGuard extends (0, auth_policies_guard_mixin_1.AuthSocketPoliciesGuardMixin)(userEntity, updateAccountOptions.abilityPredicate) {
69
71
  }
70
- const getAccountEvent = 'auth-get-account';
71
- const updateAccountEvent = 'auth-update-account';
72
- const loginEvent = 'auth-login';
73
- const registerEvent = 'auth-register';
74
- const resetPasswordEvent = 'auth-reset-password';
75
- const changePasswordEvent = 'auth-change-password';
76
72
  class BaseAuthGateway extends gateways_1.BaseGateway {
77
73
  constructor(service, jwtService) {
78
74
  super(jwtService);
@@ -80,16 +76,20 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
80
76
  this.jwtService = jwtService;
81
77
  }
82
78
  async getAccount(socket) {
83
- return {
84
- event: getAccountEvent,
85
- data: socket.user ? await this.service.getAccount(socket.user) : undefined,
86
- };
79
+ const account = socket.user ? await this.service.getAccount(socket.user) : undefined;
80
+ if (getAccountBroadcastConfig && account) {
81
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(account, getAccountBroadcastConfig.fields);
82
+ this.broadcastIfNeeded(socket, getAccountBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_GET_ACCOUNT_BROADCAST_EVENT, [broadcastData], getAccountBroadcastConfig);
83
+ }
84
+ return { event: auth_events_constants_1.AUTH_GET_ACCOUNT_EVENT, data: account };
87
85
  }
88
86
  async updateAccount(socket, body) {
89
- return {
90
- event: updateAccountEvent,
91
- data: socket.user ? await this.service.updateAccount(socket.user, body) : undefined,
92
- };
87
+ const account = socket.user ? await this.service.updateAccount(socket.user, body) : undefined;
88
+ if (updateAccountBroadcastConfig && account) {
89
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(account, updateAccountBroadcastConfig.fields);
90
+ this.broadcastIfNeeded(socket, updateAccountBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_UPDATE_ACCOUNT_BROADCAST_EVENT, [broadcastData], updateAccountBroadcastConfig);
91
+ }
92
+ return { event: auth_events_constants_1.AUTH_UPDATE_ACCOUNT_EVENT, data: account };
93
93
  }
94
94
  async login(socket, { [loginField]: login, [passwordField]: password }) {
95
95
  if (login && password) {
@@ -101,24 +101,30 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
101
101
  if (loginAbilityPredicate && !loginAbilityPredicate(socket.user)) {
102
102
  throw new websockets_1.WsException('Access denied');
103
103
  }
104
- return {
105
- event: loginEvent,
106
- data: await this.service.login(socket.user),
107
- };
104
+ const result = await this.service.login(socket.user);
105
+ if (loginBroadcastConfig) {
106
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(socket.user, loginBroadcastConfig.fields);
107
+ this.broadcastIfNeeded(socket, loginBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_LOGIN_BROADCAST_EVENT, [broadcastData], loginBroadcastConfig);
108
+ }
109
+ return { event: auth_events_constants_1.AUTH_LOGIN_EVENT, data: result };
108
110
  }
109
111
  async register(socket, data) {
110
112
  this.addUserToSocket(socket, !registerProtected && !registerAbilityPredicate);
111
- return {
112
- event: registerEvent,
113
- data: await this.service.register(data),
114
- };
113
+ const result = await this.service.register(data);
114
+ if (registerBroadcastConfig) {
115
+ const decoded = this.jwtService.decode(result.accessToken);
116
+ const { iat, exp, ...userPayload } = (decoded && typeof decoded !== 'string' ? decoded : {});
117
+ const broadcastData = (0, auth_broadcast_helper_1.buildAuthBroadcastData)(userPayload, registerBroadcastConfig.fields);
118
+ this.broadcastIfNeeded(socket, registerBroadcastConfig.eventName ?? auth_events_constants_1.AUTH_REGISTER_BROADCAST_EVENT, [broadcastData], registerBroadcastConfig);
119
+ }
120
+ return { event: auth_events_constants_1.AUTH_REGISTER_EVENT, data: result };
115
121
  }
116
122
  async resetPassword({ email }) {
117
123
  if ((0, lodash_1.isEmpty)(resetPasswordOptions)) {
118
124
  throw new websockets_1.WsException('This feature is not enabled');
119
125
  }
120
126
  return {
121
- event: resetPasswordEvent,
127
+ event: auth_events_constants_1.AUTH_RESET_PASSWORD_EVENT,
122
128
  data: await this.service.resetPassword(email),
123
129
  };
124
130
  }
@@ -127,15 +133,26 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
127
133
  throw new websockets_1.WsException('This feature is not enabled');
128
134
  }
129
135
  return {
130
- event: changePasswordEvent,
136
+ event: auth_events_constants_1.AUTH_CHANGE_PASSWORD_EVENT,
131
137
  data: await this.service.changePassword(resetPasswordToken, newPassword),
132
138
  };
133
139
  }
140
+ async refreshToken(socket) {
141
+ const rawToken = socket.handshake.query.refreshToken;
142
+ const result = socket.user ? await this.service.refreshToken(socket.user, rawToken) : undefined;
143
+ return { event: auth_events_constants_1.AUTH_REFRESH_TOKEN_EVENT, data: result };
144
+ }
145
+ async logout(socket) {
146
+ if (socket.user) {
147
+ await this.service.logout(socket.user);
148
+ }
149
+ return { event: auth_events_constants_1.AUTH_LOGOUT_EVENT, data: undefined };
150
+ }
134
151
  }
135
152
  __decorate([
136
153
  (0, common_1.UseGuards)(new guards_1.JwtSocketAuthGuard()),
137
154
  (0, common_1.UseInterceptors)(...getAccountUseInterceptors),
138
- (0, websockets_1.SubscribeMessage)(getAccountEvent),
155
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_GET_ACCOUNT_EVENT),
139
156
  __param(0, (0, websockets_1.ConnectedSocket)()),
140
157
  __metadata("design:type", Function),
141
158
  __metadata("design:paramtypes", [Object]),
@@ -144,7 +161,7 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
144
161
  __decorate([
145
162
  (0, common_1.UseGuards)(new guards_1.JwtSocketAuthGuard(), new AuthUpdateAccountPoliciesGuard()),
146
163
  (0, common_1.UseInterceptors)(...updateAccountUseInterceptors),
147
- (0, websockets_1.SubscribeMessage)(updateAccountEvent),
164
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_UPDATE_ACCOUNT_EVENT),
148
165
  __param(0, (0, websockets_1.ConnectedSocket)()),
149
166
  __param(1, (0, websockets_1.MessageBody)()),
150
167
  __metadata("design:type", Function),
@@ -153,7 +170,7 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
153
170
  ], BaseAuthGateway.prototype, "updateAccount", null);
154
171
  __decorate([
155
172
  (0, common_1.UseInterceptors)(...loginUseInterceptors),
156
- (0, websockets_1.SubscribeMessage)(loginEvent),
173
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_LOGIN_EVENT),
157
174
  __param(0, (0, websockets_1.ConnectedSocket)()),
158
175
  __param(1, (0, websockets_1.MessageBody)()),
159
176
  __metadata("design:type", Function),
@@ -163,7 +180,7 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
163
180
  __decorate([
164
181
  (0, common_1.UseGuards)(new AuthRegisterPoliciesGuard()),
165
182
  (0, common_1.UseInterceptors)(...registerUseInterceptors),
166
- (0, websockets_1.SubscribeMessage)(registerEvent),
183
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_REGISTER_EVENT),
167
184
  __param(0, (0, websockets_1.ConnectedSocket)()),
168
185
  __param(1, (0, websockets_1.MessageBody)()),
169
186
  __metadata("design:type", Function),
@@ -173,7 +190,7 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
173
190
  __decorate([
174
191
  (0, common_1.UseGuards)(new guards_1.ResetPasswordGuard((0, helpers_1.isNotEmptyObject)(resetPasswordOptions))),
175
192
  (0, common_1.UseInterceptors)(...resetPasswordUseInterceptors),
176
- (0, websockets_1.SubscribeMessage)(resetPasswordEvent),
193
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_RESET_PASSWORD_EVENT),
177
194
  __param(0, (0, websockets_1.MessageBody)()),
178
195
  __metadata("design:type", Function),
179
196
  __metadata("design:paramtypes", [reset_password_dto_1.ResetPasswordDto]),
@@ -182,12 +199,29 @@ function AuthGatewayMixin(userEntity, { loginField, passwordField, abilityPredic
182
199
  __decorate([
183
200
  (0, common_1.UseGuards)(new guards_1.ResetPasswordGuard((0, helpers_1.isNotEmptyObject)(resetPasswordOptions))),
184
201
  (0, common_1.UseInterceptors)(...changePasswordUseInterceptors),
185
- (0, websockets_1.SubscribeMessage)(changePasswordEvent),
202
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_CHANGE_PASSWORD_EVENT),
186
203
  __param(0, (0, websockets_1.MessageBody)()),
187
204
  __metadata("design:type", Function),
188
205
  __metadata("design:paramtypes", [change_password_dto_1.ChangePasswordDto]),
189
206
  __metadata("design:returntype", Promise)
190
207
  ], BaseAuthGateway.prototype, "changePassword", null);
208
+ __decorate([
209
+ (0, common_1.UseGuards)(new guards_1.JwtSocketRefreshGuard()),
210
+ (0, common_1.UseInterceptors)(...refreshTokenUseInterceptors),
211
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_REFRESH_TOKEN_EVENT),
212
+ __param(0, (0, websockets_1.ConnectedSocket)()),
213
+ __metadata("design:type", Function),
214
+ __metadata("design:paramtypes", [Object]),
215
+ __metadata("design:returntype", Promise)
216
+ ], BaseAuthGateway.prototype, "refreshToken", null);
217
+ __decorate([
218
+ (0, common_1.UseGuards)(new guards_1.JwtSocketRefreshGuard()),
219
+ (0, websockets_1.SubscribeMessage)(auth_events_constants_1.AUTH_LOGOUT_EVENT),
220
+ __param(0, (0, websockets_1.ConnectedSocket)()),
221
+ __metadata("design:type", Function),
222
+ __metadata("design:paramtypes", [Object]),
223
+ __metadata("design:returntype", Promise)
224
+ ], BaseAuthGateway.prototype, "logout", null);
191
225
  return BaseAuthGateway;
192
226
  }
193
227
  //# sourceMappingURL=auth-gateway.mixin.js.map