@fabx.vn/core 1.0.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 (171) hide show
  1. package/README.md +270 -0
  2. package/dist/config/cookie.config.d.ts +3 -0
  3. package/dist/config/cookie.config.js +7 -0
  4. package/dist/config/cookie.config.js.map +1 -0
  5. package/dist/config/cors.config.d.ts +6 -0
  6. package/dist/config/cors.config.js +15 -0
  7. package/dist/config/cors.config.js.map +1 -0
  8. package/dist/config/database.config.d.ts +13 -0
  9. package/dist/config/database.config.js +17 -0
  10. package/dist/config/database.config.js.map +1 -0
  11. package/dist/config/google-oauth.config.d.ts +6 -0
  12. package/dist/config/google-oauth.config.js +10 -0
  13. package/dist/config/google-oauth.config.js.map +1 -0
  14. package/dist/config/internal.config.d.ts +8 -0
  15. package/dist/config/internal.config.js +15 -0
  16. package/dist/config/internal.config.js.map +1 -0
  17. package/dist/config/jwt.config.d.ts +5 -0
  18. package/dist/config/jwt.config.js +9 -0
  19. package/dist/config/jwt.config.js.map +1 -0
  20. package/dist/config/rabbitmq.config.d.ts +19 -0
  21. package/dist/config/rabbitmq.config.js +25 -0
  22. package/dist/config/rabbitmq.config.js.map +1 -0
  23. package/dist/config/redis.config.d.ts +9 -0
  24. package/dist/config/redis.config.js +13 -0
  25. package/dist/config/redis.config.js.map +1 -0
  26. package/dist/constants/http-status.constants.d.ts +106 -0
  27. package/dist/constants/http-status.constants.js +110 -0
  28. package/dist/constants/http-status.constants.js.map +1 -0
  29. package/dist/constants/messages.constants.d.ts +112 -0
  30. package/dist/constants/messages.constants.js +116 -0
  31. package/dist/constants/messages.constants.js.map +1 -0
  32. package/dist/core/core.module.d.ts +2 -0
  33. package/dist/core/core.module.js +72 -0
  34. package/dist/core/core.module.js.map +1 -0
  35. package/dist/core/decorators/current-user.decorator.d.ts +1 -0
  36. package/dist/core/decorators/current-user.decorator.js +9 -0
  37. package/dist/core/decorators/current-user.decorator.js.map +1 -0
  38. package/dist/core/decorators/public.decorator.d.ts +2 -0
  39. package/dist/core/decorators/public.decorator.js +8 -0
  40. package/dist/core/decorators/public.decorator.js.map +1 -0
  41. package/dist/core/decorators/require-permissions.decorator.d.ts +4 -0
  42. package/dist/core/decorators/require-permissions.decorator.js +11 -0
  43. package/dist/core/decorators/require-permissions.decorator.js.map +1 -0
  44. package/dist/core/dtos/api-response.dto.d.ts +10 -0
  45. package/dist/core/dtos/api-response.dto.js +22 -0
  46. package/dist/core/dtos/api-response.dto.js.map +1 -0
  47. package/dist/core/dtos/pagination.dto.d.ts +17 -0
  48. package/dist/core/dtos/pagination.dto.js +61 -0
  49. package/dist/core/dtos/pagination.dto.js.map +1 -0
  50. package/dist/core/filters/http-exception.filter.d.ts +5 -0
  51. package/dist/core/filters/http-exception.filter.js +47 -0
  52. package/dist/core/filters/http-exception.filter.js.map +1 -0
  53. package/dist/core/guards/internal-auth.guard.d.ts +7 -0
  54. package/dist/core/guards/internal-auth.guard.js +42 -0
  55. package/dist/core/guards/internal-auth.guard.js.map +1 -0
  56. package/dist/core/guards/jwt-auth.guard.d.ts +12 -0
  57. package/dist/core/guards/jwt-auth.guard.js +56 -0
  58. package/dist/core/guards/jwt-auth.guard.js.map +1 -0
  59. package/dist/core/guards/permission.guard.d.ts +9 -0
  60. package/dist/core/guards/permission.guard.js +71 -0
  61. package/dist/core/guards/permission.guard.js.map +1 -0
  62. package/dist/core/interceptors/request-context.interceptor.d.ts +8 -0
  63. package/dist/core/interceptors/request-context.interceptor.js +39 -0
  64. package/dist/core/interceptors/request-context.interceptor.js.map +1 -0
  65. package/dist/core/services/cache.service.d.ts +13 -0
  66. package/dist/core/services/cache.service.js +51 -0
  67. package/dist/core/services/cache.service.js.map +1 -0
  68. package/dist/core/services/cookie.service.d.ts +13 -0
  69. package/dist/core/services/cookie.service.js +50 -0
  70. package/dist/core/services/cookie.service.js.map +1 -0
  71. package/dist/core/services/jwt.service.d.ts +37 -0
  72. package/dist/core/services/jwt.service.js +187 -0
  73. package/dist/core/services/jwt.service.js.map +1 -0
  74. package/dist/core/services/permission.service.d.ts +23 -0
  75. package/dist/core/services/permission.service.js +83 -0
  76. package/dist/core/services/permission.service.js.map +1 -0
  77. package/dist/core/services/rabbitmq-publisher.service.d.ts +9 -0
  78. package/dist/core/services/rabbitmq-publisher.service.js +57 -0
  79. package/dist/core/services/rabbitmq-publisher.service.js.map +1 -0
  80. package/dist/core/services/redis.service.d.ts +18 -0
  81. package/dist/core/services/redis.service.js +66 -0
  82. package/dist/core/services/redis.service.js.map +1 -0
  83. package/dist/core/services/request-context.service.d.ts +18 -0
  84. package/dist/core/services/request-context.service.js +40 -0
  85. package/dist/core/services/request-context.service.js.map +1 -0
  86. package/dist/core/services/request-info.service.d.ts +8 -0
  87. package/dist/core/services/request-info.service.js +32 -0
  88. package/dist/core/services/request-info.service.js.map +1 -0
  89. package/dist/core/services/session.service.d.ts +21 -0
  90. package/dist/core/services/session.service.js +70 -0
  91. package/dist/core/services/session.service.js.map +1 -0
  92. package/dist/core/strategies/jwt.strategy.d.ts +7 -0
  93. package/dist/core/strategies/jwt.strategy.js +38 -0
  94. package/dist/core/strategies/jwt.strategy.js.map +1 -0
  95. package/dist/core/subscribers/audit.subscriber.d.ts +8 -0
  96. package/dist/core/subscribers/audit.subscriber.js +40 -0
  97. package/dist/core/subscribers/audit.subscriber.js.map +1 -0
  98. package/dist/core.module.d.ts +2 -0
  99. package/dist/core.module.js +72 -0
  100. package/dist/core.module.js.map +1 -0
  101. package/dist/decorators/current-user.decorator.d.ts +1 -0
  102. package/dist/decorators/current-user.decorator.js +9 -0
  103. package/dist/decorators/current-user.decorator.js.map +1 -0
  104. package/dist/decorators/public.decorator.d.ts +2 -0
  105. package/dist/decorators/public.decorator.js +8 -0
  106. package/dist/decorators/public.decorator.js.map +1 -0
  107. package/dist/decorators/require-permissions.decorator.d.ts +4 -0
  108. package/dist/decorators/require-permissions.decorator.js +11 -0
  109. package/dist/decorators/require-permissions.decorator.js.map +1 -0
  110. package/dist/dtos/api-response.dto.d.ts +10 -0
  111. package/dist/dtos/api-response.dto.js +22 -0
  112. package/dist/dtos/api-response.dto.js.map +1 -0
  113. package/dist/dtos/pagination.dto.d.ts +17 -0
  114. package/dist/dtos/pagination.dto.js +61 -0
  115. package/dist/dtos/pagination.dto.js.map +1 -0
  116. package/dist/filters/http-exception.filter.d.ts +5 -0
  117. package/dist/filters/http-exception.filter.js +47 -0
  118. package/dist/filters/http-exception.filter.js.map +1 -0
  119. package/dist/guards/internal-auth.guard.d.ts +7 -0
  120. package/dist/guards/internal-auth.guard.js +42 -0
  121. package/dist/guards/internal-auth.guard.js.map +1 -0
  122. package/dist/guards/jwt-auth.guard.d.ts +12 -0
  123. package/dist/guards/jwt-auth.guard.js +56 -0
  124. package/dist/guards/jwt-auth.guard.js.map +1 -0
  125. package/dist/guards/permission.guard.d.ts +9 -0
  126. package/dist/guards/permission.guard.js +71 -0
  127. package/dist/guards/permission.guard.js.map +1 -0
  128. package/dist/index.d.ts +33 -0
  129. package/dist/index.js +80 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/interceptors/request-context.interceptor.d.ts +8 -0
  132. package/dist/interceptors/request-context.interceptor.js +39 -0
  133. package/dist/interceptors/request-context.interceptor.js.map +1 -0
  134. package/dist/libs/axios/axios-client.d.ts +8 -0
  135. package/dist/libs/axios/axios-client.js +61 -0
  136. package/dist/libs/axios/axios-client.js.map +1 -0
  137. package/dist/libs/axios/index.d.ts +1 -0
  138. package/dist/libs/axios/index.js +8 -0
  139. package/dist/libs/axios/index.js.map +1 -0
  140. package/dist/services/cookie.service.d.ts +13 -0
  141. package/dist/services/cookie.service.js +50 -0
  142. package/dist/services/cookie.service.js.map +1 -0
  143. package/dist/services/jwt.service.d.ts +37 -0
  144. package/dist/services/jwt.service.js +187 -0
  145. package/dist/services/jwt.service.js.map +1 -0
  146. package/dist/services/rabbitmq-publisher.service.d.ts +9 -0
  147. package/dist/services/rabbitmq-publisher.service.js +57 -0
  148. package/dist/services/rabbitmq-publisher.service.js.map +1 -0
  149. package/dist/services/redis.service.d.ts +18 -0
  150. package/dist/services/redis.service.js +66 -0
  151. package/dist/services/redis.service.js.map +1 -0
  152. package/dist/services/request-context.service.d.ts +18 -0
  153. package/dist/services/request-context.service.js +40 -0
  154. package/dist/services/request-context.service.js.map +1 -0
  155. package/dist/services/request-info.service.d.ts +8 -0
  156. package/dist/services/request-info.service.js +32 -0
  157. package/dist/services/request-info.service.js.map +1 -0
  158. package/dist/services/session.service.d.ts +21 -0
  159. package/dist/services/session.service.js +70 -0
  160. package/dist/services/session.service.js.map +1 -0
  161. package/dist/strategies/jwt.strategy.d.ts +7 -0
  162. package/dist/strategies/jwt.strategy.js +38 -0
  163. package/dist/strategies/jwt.strategy.js.map +1 -0
  164. package/dist/subscribers/audit.subscriber.d.ts +8 -0
  165. package/dist/subscribers/audit.subscriber.js +40 -0
  166. package/dist/subscribers/audit.subscriber.js.map +1 -0
  167. package/dist/tsconfig.tsbuildinfo +1 -0
  168. package/dist/utils/date.utils.d.ts +4 -0
  169. package/dist/utils/date.utils.js +52 -0
  170. package/dist/utils/date.utils.js.map +1 -0
  171. package/package.json +52 -0
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var HttpExceptionFilter_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.HttpExceptionFilter = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const api_response_dto_1 = require("@core/dtos/api-response.dto");
13
+ const messages_constants_1 = require("@constants/messages.constants");
14
+ let HttpExceptionFilter = HttpExceptionFilter_1 = class HttpExceptionFilter {
15
+ constructor() {
16
+ this.logger = new common_1.Logger(HttpExceptionFilter_1.name);
17
+ }
18
+ catch(exception, host) {
19
+ const ctx = host.switchToHttp();
20
+ const response = ctx.getResponse();
21
+ let status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
22
+ let message = messages_constants_1.MESSAGES.API.INTERNAL_SERVER_ERROR;
23
+ if (exception instanceof common_1.HttpException) {
24
+ status = exception.getStatus();
25
+ const exceptionResponse = exception.getResponse();
26
+ message =
27
+ typeof exceptionResponse === "string"
28
+ ? exceptionResponse
29
+ : exceptionResponse.message || exception.message;
30
+ }
31
+ else if (exception instanceof Error) {
32
+ message = exception.message;
33
+ this.logger.error(`Unexpected error: ${exception.message}`, exception.stack);
34
+ }
35
+ else {
36
+ message = messages_constants_1.MESSAGES.API.UNEXPECTED_ERROR;
37
+ this.logger.error("Unknown exception:", exception);
38
+ }
39
+ const errorResponse = api_response_dto_1.ApiResponseDto.error(message, status);
40
+ response.status(status).json(errorResponse);
41
+ }
42
+ };
43
+ exports.HttpExceptionFilter = HttpExceptionFilter;
44
+ exports.HttpExceptionFilter = HttpExceptionFilter = HttpExceptionFilter_1 = __decorate([
45
+ (0, common_1.Catch)()
46
+ ], HttpExceptionFilter);
47
+ //# sourceMappingURL=http-exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../../src/core/filters/http-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAOwB;AAExB,kEAA6D;AAC7D,sEAAyD;AAGlD,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAAzB;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IA+BjE,CAAC;IA7BC,KAAK,CAAC,SAAkB,EAAE,IAAmB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAE7C,IAAI,MAAM,GAAG,mBAAU,CAAC,qBAAqB,CAAC;QAC9C,IAAI,OAAO,GAAW,6BAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAEzD,IAAI,SAAS,YAAY,sBAAa,EAAE,CAAC;YACvC,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YAClD,OAAO;gBACL,OAAO,iBAAiB,KAAK,QAAQ;oBACnC,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAE,iBAAyB,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;QAChE,CAAC;aAAM,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;YACtC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,qBAAqB,SAAS,CAAC,OAAO,EAAE,EACxC,SAAS,CAAC,KAAK,CAChB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,OAAO,GAAG,6BAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,aAAa,GAAG,iCAAc,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAhCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,cAAK,GAAE;GACK,mBAAmB,CAgC/B"}
@@ -0,0 +1,7 @@
1
+ import { CanActivate, ExecutionContext } from "@nestjs/common";
2
+ import { CoreJwtService } from "@core/services/jwt.service";
3
+ export declare class InternalAuthGuard implements CanActivate {
4
+ private readonly coreJwtService;
5
+ constructor(coreJwtService: CoreJwtService);
6
+ canActivate(context: ExecutionContext): boolean;
7
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.InternalAuthGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const jwt_service_1 = require("@core/services/jwt.service");
15
+ const messages_constants_1 = require("@constants/messages.constants");
16
+ let InternalAuthGuard = class InternalAuthGuard {
17
+ constructor(coreJwtService) {
18
+ this.coreJwtService = coreJwtService;
19
+ }
20
+ canActivate(context) {
21
+ const request = context.switchToHttp().getRequest();
22
+ const authHeader = request.headers.authorization;
23
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
24
+ throw new common_1.UnauthorizedException(messages_constants_1.MESSAGES.INTERNAL_AUTH.MISSING_OR_INVALID_HEADER);
25
+ }
26
+ const token = authHeader.split(" ")[1];
27
+ if (!token) {
28
+ throw new common_1.UnauthorizedException(messages_constants_1.MESSAGES.INTERNAL_AUTH.MISSING_INTERNAL_TOKEN);
29
+ }
30
+ const payload = this.coreJwtService.verifyInternalToken(token);
31
+ if (!payload || !payload.service) {
32
+ throw new common_1.UnauthorizedException(messages_constants_1.MESSAGES.INTERNAL_AUTH.INVALID_OR_EXPIRED_INTERNAL_TOKEN);
33
+ }
34
+ return true;
35
+ }
36
+ };
37
+ exports.InternalAuthGuard = InternalAuthGuard;
38
+ exports.InternalAuthGuard = InternalAuthGuard = __decorate([
39
+ (0, common_1.Injectable)(),
40
+ __metadata("design:paramtypes", [jwt_service_1.CoreJwtService])
41
+ ], InternalAuthGuard);
42
+ //# sourceMappingURL=internal-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-auth.guard.js","sourceRoot":"","sources":["../../../src/core/guards/internal-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,4DAA4D;AAC5D,sEAAyD;AAGlD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAE/D,WAAW,CAAC,OAAyB;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAEjD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,8BAAqB,CAC7B,6BAAQ,CAAC,aAAa,CAAC,yBAAyB,CACjD,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAC7B,6BAAQ,CAAC,aAAa,CAAC,sBAAsB,CAC9C,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,8BAAqB,CAC7B,6BAAQ,CAAC,aAAa,CAAC,iCAAiC,CACzD,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA/BY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAEkC,4BAAc;GADhD,iBAAiB,CA+B7B"}
@@ -0,0 +1,12 @@
1
+ import { ExecutionContext } from "@nestjs/common";
2
+ import { Reflector } from "@nestjs/core";
3
+ import { CoreJwtService } from "@core/services/jwt.service";
4
+ declare const JwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
5
+ export declare class JwtAuthGuard extends JwtAuthGuard_base {
6
+ private reflector;
7
+ private coreJwtService;
8
+ constructor(reflector: Reflector, coreJwtService: CoreJwtService);
9
+ canActivate(context: ExecutionContext): Promise<boolean>;
10
+ handleRequest(err: any, user: any, info: any): any;
11
+ }
12
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.JwtAuthGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const passport_1 = require("@nestjs/passport");
15
+ const core_1 = require("@nestjs/core");
16
+ const jwt_service_1 = require("@core/services/jwt.service");
17
+ const cookie_service_1 = require("@core/services/cookie.service");
18
+ const messages_constants_1 = require("@constants/messages.constants");
19
+ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)("jwt") {
20
+ constructor(reflector, coreJwtService) {
21
+ super();
22
+ this.reflector = reflector;
23
+ this.coreJwtService = coreJwtService;
24
+ }
25
+ async canActivate(context) {
26
+ const isPublic = this.reflector.getAllAndOverride("isPublic", [
27
+ context.getHandler(),
28
+ context.getClass(),
29
+ ]);
30
+ if (isPublic)
31
+ return true;
32
+ const request = context.switchToHttp().getRequest();
33
+ const tokens = cookie_service_1.CookieService.extractTokensFromCookie(request);
34
+ if (!tokens?.accessToken) {
35
+ throw new common_1.UnauthorizedException(messages_constants_1.MESSAGES.AUTH.NO_TOKEN);
36
+ }
37
+ const currentUser = await this.coreJwtService.getCurrentUser(tokens.accessToken);
38
+ if (!currentUser) {
39
+ throw new common_1.UnauthorizedException(messages_constants_1.MESSAGES.AUTH.INVALID_TOKEN);
40
+ }
41
+ request.user = currentUser;
42
+ return true;
43
+ }
44
+ handleRequest(err, user, info) {
45
+ if (err || !user)
46
+ new common_1.UnauthorizedException(messages_constants_1.MESSAGES.AUTH.INVALID_TOKEN);
47
+ return user;
48
+ }
49
+ };
50
+ exports.JwtAuthGuard = JwtAuthGuard;
51
+ exports.JwtAuthGuard = JwtAuthGuard = __decorate([
52
+ (0, common_1.Injectable)(),
53
+ __metadata("design:paramtypes", [core_1.Reflector,
54
+ jwt_service_1.CoreJwtService])
55
+ ], JwtAuthGuard);
56
+ //# sourceMappingURL=jwt-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../../src/core/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAIwB;AACxB,+CAA6C;AAC7C,uCAAyC;AACzC,4DAA4D;AAC5D,kEAA8D;AAC9D,sEAAyD;AAGlD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;IAChD,YACU,SAAoB,EACpB,cAA8B;QAEtC,KAAK,EAAE,CAAC;QAHA,cAAS,GAAT,SAAS,CAAW;QACpB,mBAAc,GAAd,cAAc,CAAgB;IAGxC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAyB;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,UAAU,EAAE;YACrE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,8BAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,8BAAqB,CAAC,6BAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAC1D,MAAM,CAAC,WAAW,CACnB,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,8BAAqB,CAAC,6BAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,CAAC;QAGD,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,GAAQ,EAAE,IAAS,EAAE,IAAS;QAC1C,IAAI,GAAG,IAAI,CAAC,IAAI;YAAE,IAAI,8BAAqB,CAAC,6BAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA1CY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAGU,gBAAS;QACJ,4BAAc;GAH7B,YAAY,CA0CxB"}
@@ -0,0 +1,9 @@
1
+ import { CanActivate, ExecutionContext } from "@nestjs/common";
2
+ import { Reflector } from "@nestjs/core";
3
+ import { CoreJwtService } from "@core/services/jwt.service";
4
+ export declare class PermissionGuard implements CanActivate {
5
+ private reflector;
6
+ private coreJwtService;
7
+ constructor(reflector: Reflector, coreJwtService: CoreJwtService);
8
+ canActivate(context: ExecutionContext): Promise<boolean>;
9
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PermissionGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const require_permissions_decorator_1 = require("@core/decorators/require-permissions.decorator");
16
+ const public_decorator_1 = require("@core/decorators/public.decorator");
17
+ const jwt_service_1 = require("@core/services/jwt.service");
18
+ const cookie_service_1 = require("@core/services/cookie.service");
19
+ const messages_constants_1 = require("@constants/messages.constants");
20
+ let PermissionGuard = class PermissionGuard {
21
+ constructor(reflector, coreJwtService) {
22
+ this.reflector = reflector;
23
+ this.coreJwtService = coreJwtService;
24
+ }
25
+ async canActivate(context) {
26
+ const request = context.switchToHttp().getRequest();
27
+ const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
28
+ context.getHandler(),
29
+ context.getClass(),
30
+ ]);
31
+ if (isPublic)
32
+ return true;
33
+ const tokens = cookie_service_1.CookieService.extractTokensFromCookie(request);
34
+ if (!tokens)
35
+ throw new common_1.ForbiddenException(messages_constants_1.MESSAGES.AUTH.NO_TOKEN);
36
+ try {
37
+ const currentUser = await this.coreJwtService.getCurrentUser(tokens.accessToken);
38
+ if (!currentUser)
39
+ throw new common_1.ForbiddenException(messages_constants_1.MESSAGES.AUTH.INVALID_TOKEN);
40
+ const userPermissions = currentUser.permissions || [];
41
+ const requiredPermissions = this.reflector.getAllAndOverride(require_permissions_decorator_1.PERMISSIONS_KEY, [context.getHandler(), context.getClass()]);
42
+ const anyPermissions = this.reflector.getAllAndOverride(require_permissions_decorator_1.ANY_PERMISSIONS_KEY, [context.getHandler(), context.getClass()]);
43
+ if ((!requiredPermissions || requiredPermissions.length === 0) &&
44
+ (!anyPermissions || anyPermissions.length === 0))
45
+ return true;
46
+ if (requiredPermissions && requiredPermissions.length > 0) {
47
+ const hasAllPermissions = requiredPermissions.every((permission) => userPermissions.includes(permission));
48
+ if (!hasAllPermissions)
49
+ throw new common_1.ForbiddenException(messages_constants_1.MESSAGES.AUTH.INSUFFICIENT_PERMISSIONS);
50
+ }
51
+ if (anyPermissions && anyPermissions.length > 0) {
52
+ const hasAnyPermission = anyPermissions.some((permission) => userPermissions.includes(permission));
53
+ if (!hasAnyPermission)
54
+ throw new common_1.ForbiddenException(messages_constants_1.MESSAGES.AUTH.INSUFFICIENT_PERMISSIONS);
55
+ }
56
+ return true;
57
+ }
58
+ catch (error) {
59
+ if (error instanceof common_1.ForbiddenException)
60
+ throw error;
61
+ throw new common_1.ForbiddenException(messages_constants_1.MESSAGES.AUTH.INVALID_TOKEN);
62
+ }
63
+ }
64
+ };
65
+ exports.PermissionGuard = PermissionGuard;
66
+ exports.PermissionGuard = PermissionGuard = __decorate([
67
+ (0, common_1.Injectable)(),
68
+ __metadata("design:paramtypes", [core_1.Reflector,
69
+ jwt_service_1.CoreJwtService])
70
+ ], PermissionGuard);
71
+ //# sourceMappingURL=permission.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.guard.js","sourceRoot":"","sources":["../../../src/core/guards/permission.guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from "@nestjs/common";
2
+ import { Observable } from "rxjs";
3
+ import { RequestInfoService } from "@core/services/request-info.service";
4
+ export declare class RequestContextInterceptor implements NestInterceptor {
5
+ private requestInfoService;
6
+ constructor(requestInfoService: RequestInfoService);
7
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
8
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RequestContextInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const request_context_service_1 = require("@core/services/request-context.service");
15
+ const request_info_service_1 = require("@core/services/request-info.service");
16
+ let RequestContextInterceptor = class RequestContextInterceptor {
17
+ constructor(requestInfoService) {
18
+ this.requestInfoService = requestInfoService;
19
+ }
20
+ intercept(context, next) {
21
+ const request = context.switchToHttp().getRequest();
22
+ const user = request.user;
23
+ const requestInfo = this.requestInfoService.getRequestInfo(request);
24
+ const requestContext = {
25
+ user,
26
+ requestId: request.headers["x-request-id"] ||
27
+ Math.random().toString(36).substring(7),
28
+ ipAddress: requestInfo.ipAddress,
29
+ userAgent: requestInfo.userAgent,
30
+ };
31
+ return request_context_service_1.RequestContextService.run(requestContext, () => next.handle());
32
+ }
33
+ };
34
+ exports.RequestContextInterceptor = RequestContextInterceptor;
35
+ exports.RequestContextInterceptor = RequestContextInterceptor = __decorate([
36
+ (0, common_1.Injectable)(),
37
+ __metadata("design:paramtypes", [request_info_service_1.RequestInfoService])
38
+ ], RequestContextInterceptor);
39
+ //# sourceMappingURL=request-context.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.interceptor.js","sourceRoot":"","sources":["../../../src/core/interceptors/request-context.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AAExB,oFAA+E;AAC/E,8EAAyE;AAGlE,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,YAAoB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAE9D,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAG1B,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAEpE,MAAM,cAAc,GAAG;YACrB,IAAI;YACJ,SAAS,EACP,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;gBAC/B,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACzC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC;QAEF,OAAO,+CAAqB,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AArBY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAE6B,yCAAkB;GAD/C,yBAAyB,CAqBrC"}
@@ -0,0 +1,13 @@
1
+ import { OnModuleInit, OnModuleDestroy } from "@nestjs/common";
2
+ export declare class CacheService implements OnModuleInit, OnModuleDestroy {
3
+ private redis;
4
+ onModuleInit(): Promise<void>;
5
+ onModuleDestroy(): Promise<void>;
6
+ get(key: string): Promise<string | null>;
7
+ set(key: string, value: string, ttl?: number): Promise<void>;
8
+ del(key: string): Promise<number>;
9
+ exists(key: string): Promise<number>;
10
+ expire(key: string, ttl: number): Promise<number>;
11
+ keys(pattern: string): Promise<string[]>;
12
+ flushall(): Promise<string>;
13
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CacheService = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const ioredis_1 = require("ioredis");
12
+ const redis_config_1 = require("@config/redis.config");
13
+ let CacheService = class CacheService {
14
+ async onModuleInit() {
15
+ this.redis = new ioredis_1.default(redis_config_1.redisConfig);
16
+ }
17
+ async onModuleDestroy() {
18
+ await this.redis.quit();
19
+ }
20
+ async get(key) {
21
+ return this.redis.get(key);
22
+ }
23
+ async set(key, value, ttl) {
24
+ if (ttl) {
25
+ await this.redis.setex(key, ttl, value);
26
+ }
27
+ else {
28
+ await this.redis.set(key, value);
29
+ }
30
+ }
31
+ async del(key) {
32
+ return this.redis.del(key);
33
+ }
34
+ async exists(key) {
35
+ return this.redis.exists(key);
36
+ }
37
+ async expire(key, ttl) {
38
+ return this.redis.expire(key, ttl);
39
+ }
40
+ async keys(pattern) {
41
+ return this.redis.keys(pattern);
42
+ }
43
+ async flushall() {
44
+ return this.redis.flushall();
45
+ }
46
+ };
47
+ exports.CacheService = CacheService;
48
+ exports.CacheService = CacheService = __decorate([
49
+ (0, common_1.Injectable)()
50
+ ], CacheService);
51
+ //# sourceMappingURL=cache.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../src/core/services/cache.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2E;AAC3E,qCAA4B;AAC5B,uDAAmD;AAG5C,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAK,CAAC,0BAAW,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,GAAY;QAChD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,GAAW;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF,CAAA;AA1CY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CA0CxB"}
@@ -0,0 +1,13 @@
1
+ import { Request, Response } from "express";
2
+ export interface ExtractedTokensDto {
3
+ accessToken?: string;
4
+ refreshToken?: string;
5
+ }
6
+ export declare class CookieService {
7
+ private static readonly COOKIE_NAME;
8
+ private static readonly COOKIE_OPTIONS;
9
+ static setAuthCookies(res: Response, accessToken: string, refreshToken: string, refreshTokenExpiresAt: Date): void;
10
+ static clearAuthCookies(res: Response): void;
11
+ static setRefreshedCookies(res: Response, accessToken: string, refreshToken: string, refreshTokenExpiresAt: Date): void;
12
+ static extractTokensFromCookie(request: Request): ExtractedTokensDto | undefined;
13
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CookieService = void 0;
4
+ const cookie_config_1 = require("@config/cookie.config");
5
+ class CookieService {
6
+ static setAuthCookies(res, accessToken, refreshToken, refreshTokenExpiresAt) {
7
+ const authData = {
8
+ accessToken,
9
+ refreshToken,
10
+ timestamp: Date.now(),
11
+ refreshTokenExpiresAt: refreshTokenExpiresAt.getTime(),
12
+ };
13
+ const cookieMaxAge = refreshTokenExpiresAt.getTime() - Date.now();
14
+ res.cookie(this.COOKIE_NAME, JSON.stringify(authData), {
15
+ ...this.COOKIE_OPTIONS,
16
+ maxAge: Math.max(cookieMaxAge, 0),
17
+ });
18
+ }
19
+ static clearAuthCookies(res) {
20
+ res.clearCookie(this.COOKIE_NAME, { path: "/" });
21
+ }
22
+ static setRefreshedCookies(res, accessToken, refreshToken, refreshTokenExpiresAt) {
23
+ this.setAuthCookies(res, accessToken, refreshToken, refreshTokenExpiresAt);
24
+ }
25
+ static extractTokensFromCookie(request) {
26
+ const authCookie = request.cookies?.[this.COOKIE_NAME];
27
+ if (!authCookie)
28
+ return undefined;
29
+ try {
30
+ const authData = JSON.parse(authCookie);
31
+ return {
32
+ accessToken: authData.accessToken,
33
+ refreshToken: authData.refreshToken,
34
+ };
35
+ }
36
+ catch (error) {
37
+ console.error("Failed to parse auth cookie:", error);
38
+ return undefined;
39
+ }
40
+ }
41
+ }
42
+ exports.CookieService = CookieService;
43
+ CookieService.COOKIE_NAME = cookie_config_1.cookieConfig.cookieName;
44
+ CookieService.COOKIE_OPTIONS = {
45
+ httpOnly: true,
46
+ secure: process.env.NODE_ENV === "production",
47
+ sameSite: process.env.NODE_ENV === "production" ? "none" : "strict",
48
+ path: "/",
49
+ };
50
+ //# sourceMappingURL=cookie.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.service.js","sourceRoot":"","sources":["../../../src/core/services/cookie.service.ts"],"names":[],"mappings":";;;AACA,yDAAqD;AAOrD,MAAa,aAAa;IAaxB,MAAM,CAAC,cAAc,CACnB,GAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,qBAA2B;QAE3B,MAAM,QAAQ,GAAG;YACf,WAAW;YACX,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,qBAAqB,EAAE,qBAAqB,CAAC,OAAO,EAAE;SACvD,CAAC;QAEF,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAElE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACrD,GAAG,IAAI,CAAC,cAAc;YACtB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAKD,MAAM,CAAC,gBAAgB,CAAC,GAAa;QACnC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAKD,MAAM,CAAC,mBAAmB,CACxB,GAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,qBAA2B;QAE3B,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAKD,MAAM,CAAC,uBAAuB,CAC5B,OAAgB;QAEhB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO;gBACL,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;;AAxEH,sCAyEC;AAxEyB,yBAAW,GAAG,4BAAY,CAAC,UAAU,CAAC;AAEtC,4BAAc,GAAG;IACvC,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;IAC7C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;IACnE,IAAI,EAAE,GAAG;CACD,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { JwtService } from "@nestjs/jwt";
2
+ import { SessionService, CurrentUserDto } from "@core/services/session.service";
3
+ export interface JwtTokenData {
4
+ sub: string | number;
5
+ sessionId?: string;
6
+ email?: string;
7
+ }
8
+ export interface JwtValidationResult {
9
+ isValid: boolean;
10
+ payload?: JwtTokenData;
11
+ error?: string;
12
+ }
13
+ export declare class CoreJwtService {
14
+ private readonly jwtService;
15
+ private readonly sessionService;
16
+ constructor(jwtService: JwtService, sessionService: SessionService);
17
+ createAccessToken(sessionData: CurrentUserDto): Promise<string>;
18
+ createSimpleAccessToken(userId: string | number, email: string): string;
19
+ decodeToken(token: string): JwtTokenData | null;
20
+ verifyToken(token: string): JwtTokenData | null;
21
+ validateTokenSignature(token: string): JwtValidationResult;
22
+ isTokenSignatureValid(token: string): boolean;
23
+ getUserIdFromToken(token: string): string | number | null;
24
+ getSessionIdFromToken(token: string): string | null;
25
+ deleteSessionFromToken(token: string): Promise<boolean>;
26
+ extractTokenFromHeader(request: any): string | null;
27
+ getTokenExpirationTime(token: string): number | null;
28
+ isTokenExpired(token: string): boolean;
29
+ createTokenPayload(userId: string | number, sessionId?: string, email?: string): JwtTokenData;
30
+ signToken(payload: JwtTokenData): string;
31
+ createInternalToken(service: string): string;
32
+ verifyInternalToken(token: string): {
33
+ service: string;
34
+ } | null;
35
+ getCurrentUser(accessToken: string): Promise<CurrentUserDto | null>;
36
+ getEmailFromToken(token: string): string | null;
37
+ }