@xfilecom/core-sdk 1.3.23

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 (96) hide show
  1. package/README.md +664 -0
  2. package/dist/core.module.d.ts +39 -0
  3. package/dist/core.module.js +188 -0
  4. package/dist/core.module.js.map +1 -0
  5. package/dist/database/database.constants.d.ts +2 -0
  6. package/dist/database/database.constants.js +6 -0
  7. package/dist/database/database.constants.js.map +1 -0
  8. package/dist/database/database.module.d.ts +19 -0
  9. package/dist/database/database.module.js +56 -0
  10. package/dist/database/database.module.js.map +1 -0
  11. package/dist/database/database.query.d.ts +103 -0
  12. package/dist/database/database.query.example.d.ts +36 -0
  13. package/dist/database/database.query.example.js +148 -0
  14. package/dist/database/database.query.example.js.map +1 -0
  15. package/dist/database/database.query.js +369 -0
  16. package/dist/database/database.query.js.map +1 -0
  17. package/dist/database/database.service.d.ts +18 -0
  18. package/dist/database/database.service.js +110 -0
  19. package/dist/database/database.service.js.map +1 -0
  20. package/dist/database/example-usage.d.ts +0 -0
  21. package/dist/database/example-usage.js +1 -0
  22. package/dist/database/example-usage.js.map +1 -0
  23. package/dist/decorators/public.decorator.d.ts +2 -0
  24. package/dist/decorators/public.decorator.js +8 -0
  25. package/dist/decorators/public.decorator.js.map +1 -0
  26. package/dist/decorators/roles.decorator.d.ts +2 -0
  27. package/dist/decorators/roles.decorator.js +8 -0
  28. package/dist/decorators/roles.decorator.js.map +1 -0
  29. package/dist/decorators/user.decorator.d.ts +7 -0
  30. package/dist/decorators/user.decorator.js +10 -0
  31. package/dist/decorators/user.decorator.js.map +1 -0
  32. package/dist/filters/exception.filter.d.ts +36 -0
  33. package/dist/filters/exception.filter.js +201 -0
  34. package/dist/filters/exception.filter.js.map +1 -0
  35. package/dist/guards/jwt-auth.guard.d.ts +14 -0
  36. package/dist/guards/jwt-auth.guard.js +103 -0
  37. package/dist/guards/jwt-auth.guard.js.map +1 -0
  38. package/dist/guards/roles.guard.d.ts +7 -0
  39. package/dist/guards/roles.guard.js +47 -0
  40. package/dist/guards/roles.guard.js.map +1 -0
  41. package/dist/index.d.ts +29 -0
  42. package/dist/index.js +91 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/interceptors/database-check.interceptor.d.ts +12 -0
  45. package/dist/interceptors/database-check.interceptor.js +60 -0
  46. package/dist/interceptors/database-check.interceptor.js.map +1 -0
  47. package/dist/interceptors/error-handling.interceptor.d.ts +8 -0
  48. package/dist/interceptors/error-handling.interceptor.js +33 -0
  49. package/dist/interceptors/error-handling.interceptor.js.map +1 -0
  50. package/dist/interceptors/logging.interceptor.d.ts +21 -0
  51. package/dist/interceptors/logging.interceptor.js +167 -0
  52. package/dist/interceptors/logging.interceptor.js.map +1 -0
  53. package/dist/interceptors/response-transform.interceptor.d.ts +5 -0
  54. package/dist/interceptors/response-transform.interceptor.js +30 -0
  55. package/dist/interceptors/response-transform.interceptor.js.map +1 -0
  56. package/dist/utils/auth.helpers.d.ts +19 -0
  57. package/dist/utils/auth.helpers.js +77 -0
  58. package/dist/utils/auth.helpers.js.map +1 -0
  59. package/dist/utils/config-loader.utils.d.ts +22 -0
  60. package/dist/utils/config-loader.utils.js +77 -0
  61. package/dist/utils/config-loader.utils.js.map +1 -0
  62. package/dist/utils/config.validator.d.ts +13 -0
  63. package/dist/utils/config.validator.js +82 -0
  64. package/dist/utils/config.validator.js.map +1 -0
  65. package/dist/utils/controller.helpers.d.ts +58 -0
  66. package/dist/utils/controller.helpers.js +104 -0
  67. package/dist/utils/controller.helpers.js.map +1 -0
  68. package/dist/utils/crypto.utils.d.ts +12 -0
  69. package/dist/utils/crypto.utils.js +53 -0
  70. package/dist/utils/crypto.utils.js.map +1 -0
  71. package/dist/utils/email-hash.utils.d.ts +7 -0
  72. package/dist/utils/email-hash.utils.js +42 -0
  73. package/dist/utils/email-hash.utils.js.map +1 -0
  74. package/dist/utils/env.utils.d.ts +8 -0
  75. package/dist/utils/env.utils.js +27 -0
  76. package/dist/utils/env.utils.js.map +1 -0
  77. package/dist/utils/error.utils.d.ts +6 -0
  78. package/dist/utils/error.utils.js +65 -0
  79. package/dist/utils/error.utils.js.map +1 -0
  80. package/dist/utils/hash-verification.utils.d.ts +35 -0
  81. package/dist/utils/hash-verification.utils.js +133 -0
  82. package/dist/utils/hash-verification.utils.js.map +1 -0
  83. package/dist/utils/logger.helpers.d.ts +71 -0
  84. package/dist/utils/logger.helpers.js +293 -0
  85. package/dist/utils/logger.helpers.js.map +1 -0
  86. package/dist/utils/logging.config.d.ts +6 -0
  87. package/dist/utils/logging.config.js +42 -0
  88. package/dist/utils/logging.config.js.map +1 -0
  89. package/dist/utils/service.helpers.d.ts +22 -0
  90. package/dist/utils/service.helpers.js +73 -0
  91. package/dist/utils/service.helpers.js.map +1 -0
  92. package/dist/utils/yaml-config.loader.d.ts +15 -0
  93. package/dist/utils/yaml-config.loader.js +219 -0
  94. package/dist/utils/yaml-config.loader.js.map +1 -0
  95. package/package.json +47 -0
  96. package/scripts/publish-to-gitlab.mjs +209 -0
@@ -0,0 +1,201 @@
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
+ var AllExceptionsFilter_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AllExceptionsFilter = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const error_utils_1 = require("../utils/error.utils");
16
+ let AllExceptionsFilter = AllExceptionsFilter_1 = class AllExceptionsFilter {
17
+ constructor(options = {}) {
18
+ this.logger = new common_1.Logger(AllExceptionsFilter_1.name);
19
+ this.errorUtils = new error_utils_1.ErrorUtils();
20
+ this.options = {
21
+ cors: {
22
+ enabled: options.cors?.enabled ?? true,
23
+ allowedOrigins: options.cors?.allowedOrigins || [
24
+ 'http://localhost:3001',
25
+ 'http://localhost:5173',
26
+ 'http://localhost:5174',
27
+ 'http://localhost:5175',
28
+ 'http://localhost:5176',
29
+ ...(process.env.FRONTEND_URL?.split(',') || []),
30
+ ],
31
+ allowAllOriginsInDev: options.cors?.allowAllOriginsInDev ?? true,
32
+ },
33
+ meta: {
34
+ enabled: options.meta?.enabled ?? false,
35
+ includeTimestamp: options.meta?.includeTimestamp ?? true,
36
+ includePath: options.meta?.includePath ?? true,
37
+ includeMethod: options.meta?.includeMethod ?? true,
38
+ },
39
+ logging: {
40
+ enabled: options.logging?.enabled ?? true,
41
+ level: options.logging?.level || 'warn',
42
+ includeStack: options.logging?.includeStack ?? true,
43
+ debug: options.logging?.debug ?? false,
44
+ },
45
+ responseFormat: {
46
+ includeDetails: options.responseFormat?.includeDetails ?? false,
47
+ },
48
+ filterStaticFiles: options.filterStaticFiles ?? true,
49
+ };
50
+ }
51
+ catch(exception, host) {
52
+ const ctx = host.switchToHttp();
53
+ const response = ctx.getResponse();
54
+ const request = ctx.getRequest();
55
+ if (this.options.logging.debug) {
56
+ this.logger.debug(`[AllExceptionsFilter] Caught exception for ${request.method} ${request.url}`, {
57
+ exceptionType: exception?.constructor?.name,
58
+ isHttpException: exception instanceof common_1.HttpException,
59
+ isError: exception instanceof Error,
60
+ });
61
+ }
62
+ if (this.options.cors.enabled && request.method === 'OPTIONS') {
63
+ return this.handleOptionsRequest(request, response);
64
+ }
65
+ const status = exception instanceof common_1.HttpException
66
+ ? exception.getStatus()
67
+ : common_1.HttpStatus.INTERNAL_SERVER_ERROR;
68
+ if (this.options.filterStaticFiles && this.isStaticFile404(request, status)) {
69
+ response.status(status).json(this.errorUtils.fromException(exception));
70
+ return;
71
+ }
72
+ const errorDto = this.errorUtils.fromException(exception);
73
+ if (this.options.meta.enabled) {
74
+ errorDto.meta = this.buildMeta(request);
75
+ }
76
+ if (this.options.responseFormat.includeDetails) {
77
+ const message = this.extractMessage(errorDto);
78
+ errorDto.error = {
79
+ message,
80
+ details: Array.isArray(message) ? message : [message],
81
+ };
82
+ }
83
+ if (this.options.logging.enabled) {
84
+ this.logError(exception, request, errorDto, status);
85
+ }
86
+ if (response.headersSent) {
87
+ this.logger.warn(`Response already sent for ${request.method} ${request.url}, cannot send error response`);
88
+ return;
89
+ }
90
+ try {
91
+ if (this.options.logging.debug) {
92
+ this.logger.debug(`[AllExceptionsFilter] Sending error response:`, {
93
+ status: errorDto.code,
94
+ message: this.extractMessage(errorDto),
95
+ path: request.url,
96
+ method: request.method,
97
+ });
98
+ }
99
+ response.status(errorDto.code).json(errorDto);
100
+ }
101
+ catch (error) {
102
+ this.logger.error(`Failed to send error response for ${request.method} ${request.url}:`, error);
103
+ }
104
+ }
105
+ handleOptionsRequest(request, response) {
106
+ const origin = request.headers.origin;
107
+ const allowedOrigin = this.options.cors.allowAllOriginsInDev && process.env.NODE_ENV !== 'production'
108
+ ? origin || '*'
109
+ : origin && this.options.cors.allowedOrigins.includes(origin)
110
+ ? origin
111
+ : this.options.cors.allowedOrigins[0] || '*';
112
+ response.status(common_1.HttpStatus.OK);
113
+ response.setHeader('Access-Control-Allow-Origin', allowedOrigin);
114
+ response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD');
115
+ response.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, Accept, Origin, Access-Control-Request-Method, Access-Control-Request-Headers');
116
+ response.setHeader('Access-Control-Allow-Credentials', 'true');
117
+ response.setHeader('Access-Control-Max-Age', '86400');
118
+ response.end();
119
+ }
120
+ isStaticFile404(request, status) {
121
+ if (status !== common_1.HttpStatus.NOT_FOUND) {
122
+ return false;
123
+ }
124
+ const url = request.url;
125
+ return (url === '/favicon.ico' ||
126
+ url.includes('.ico') ||
127
+ url.includes('.png') ||
128
+ url.includes('.jpg') ||
129
+ url.includes('.jpeg') ||
130
+ url.includes('.gif') ||
131
+ url.includes('.svg') ||
132
+ url.includes('.css') ||
133
+ url.includes('.js') ||
134
+ url.includes('.woff') ||
135
+ url.includes('.woff2') ||
136
+ url.includes('.ttf'));
137
+ }
138
+ buildMeta(request) {
139
+ const meta = {};
140
+ if (this.options.meta.includeTimestamp) {
141
+ meta.timestamp = new Date().toISOString();
142
+ }
143
+ if (this.options.meta.includePath) {
144
+ meta.path = request.url;
145
+ }
146
+ if (this.options.meta.includeMethod) {
147
+ meta.method = request.method;
148
+ }
149
+ return meta;
150
+ }
151
+ extractMessage(errorDto) {
152
+ if (!errorDto.error) {
153
+ return 'Internal server error';
154
+ }
155
+ const message = errorDto.error.message;
156
+ if (typeof message === 'string') {
157
+ return message;
158
+ }
159
+ else if (Array.isArray(message)) {
160
+ return message;
161
+ }
162
+ else if (typeof message === 'object') {
163
+ if ('message' in message && typeof message.message === 'string') {
164
+ return message.message;
165
+ }
166
+ return JSON.stringify(message);
167
+ }
168
+ return String(message);
169
+ }
170
+ logError(exception, request, errorDto, status) {
171
+ const errorLog = {
172
+ status: errorDto.code,
173
+ message: this.extractMessage(errorDto),
174
+ path: request.url,
175
+ method: request.method,
176
+ timestamp: new Date().toISOString(),
177
+ };
178
+ if (status >= common_1.HttpStatus.INTERNAL_SERVER_ERROR) {
179
+ const logData = { ...errorLog };
180
+ if (this.options.logging.includeStack && exception instanceof Error) {
181
+ logData.exception = exception.stack;
182
+ }
183
+ else {
184
+ logData.exception = exception;
185
+ }
186
+ this.logger.error(`[${request.method}] ${request.url}`, logData);
187
+ }
188
+ else if (status === common_1.HttpStatus.NOT_FOUND) {
189
+ this.logger.debug(`[${request.method}] ${request.url}`, errorLog);
190
+ }
191
+ else {
192
+ this.logger.warn(`[${request.method}] ${request.url}`, errorLog);
193
+ }
194
+ }
195
+ };
196
+ exports.AllExceptionsFilter = AllExceptionsFilter;
197
+ exports.AllExceptionsFilter = AllExceptionsFilter = AllExceptionsFilter_1 = __decorate([
198
+ (0, common_1.Catch)(),
199
+ __metadata("design:paramtypes", [Object])
200
+ ], AllExceptionsFilter);
201
+ //# sourceMappingURL=exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exception.filter.js","sourceRoot":"","sources":["../../src/filters/exception.filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ExecutionContext, CanActivate } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ export declare class JwtAuthGuard implements CanActivate {
4
+ private reflector;
5
+ private readonly logger;
6
+ private passportJwtStrategy;
7
+ constructor(reflector: Reflector);
8
+ private loadPassportJwtStrategy;
9
+ canActivate(context: ExecutionContext): boolean | Promise<boolean>;
10
+ private isHttpContext;
11
+ private validateHttpRequest;
12
+ private extractTokenFromHeader;
13
+ handleRequest(err: any, user: any, info: any): any;
14
+ }
@@ -0,0 +1,103 @@
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
+ var JwtAuthGuard_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.JwtAuthGuard = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const core_1 = require("@nestjs/core");
16
+ const public_decorator_1 = require("../decorators/public.decorator");
17
+ let JwtAuthGuard = JwtAuthGuard_1 = class JwtAuthGuard {
18
+ constructor(reflector) {
19
+ this.reflector = reflector;
20
+ this.logger = new common_1.Logger(JwtAuthGuard_1.name);
21
+ this.passportJwtStrategy = null;
22
+ this.loadPassportJwtStrategy();
23
+ }
24
+ loadPassportJwtStrategy() {
25
+ try {
26
+ const passportJwt = require('passport-jwt');
27
+ this.passportJwtStrategy = passportJwt.Strategy;
28
+ }
29
+ catch (e) {
30
+ this.logger.warn('passport-jwt not found. JWT authentication will be skipped. ' +
31
+ 'Install passport-jwt and @nestjs/passport to enable JWT authentication.');
32
+ }
33
+ }
34
+ canActivate(context) {
35
+ const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
36
+ context.getHandler(),
37
+ context.getClass(),
38
+ ]);
39
+ if (isPublic) {
40
+ return true;
41
+ }
42
+ if (!this.passportJwtStrategy) {
43
+ this.logger.warn('JWT authentication is not configured. Endpoint is accessible without authentication. ' +
44
+ 'This should not happen in production.');
45
+ return true;
46
+ }
47
+ if (this.isHttpContext(context)) {
48
+ return this.validateHttpRequest(context);
49
+ }
50
+ return true;
51
+ }
52
+ isHttpContext(context) {
53
+ return context.getType() === 'http';
54
+ }
55
+ async validateHttpRequest(context) {
56
+ const request = context.switchToHttp().getRequest();
57
+ const token = this.extractTokenFromHeader(request);
58
+ if (!token) {
59
+ throw new common_1.UnauthorizedException('No token provided');
60
+ }
61
+ try {
62
+ const jwtSecret = process.env.JWT_SECRET;
63
+ if (!jwtSecret) {
64
+ this.logger.warn('JWT_SECRET is not set. JWT validation will fail. ' +
65
+ 'Set JWT_SECRET environment variable to enable JWT authentication.');
66
+ return true;
67
+ }
68
+ const jwt = require('jsonwebtoken');
69
+ const decoded = jwt.verify(token, jwtSecret);
70
+ request.user = decoded;
71
+ return true;
72
+ }
73
+ catch (error) {
74
+ if (error.name === 'JsonWebTokenError') {
75
+ throw new common_1.UnauthorizedException('Invalid token');
76
+ }
77
+ if (error.name === 'TokenExpiredError') {
78
+ throw new common_1.UnauthorizedException('Token expired');
79
+ }
80
+ throw new common_1.UnauthorizedException('Token validation failed');
81
+ }
82
+ }
83
+ extractTokenFromHeader(request) {
84
+ const authHeader = request.headers?.authorization;
85
+ if (!authHeader) {
86
+ return null;
87
+ }
88
+ const [type, token] = authHeader.split(' ') ?? [];
89
+ return type === 'Bearer' ? token : null;
90
+ }
91
+ handleRequest(err, user, info) {
92
+ if (err || !user) {
93
+ throw err || new common_1.UnauthorizedException('Invalid or expired token');
94
+ }
95
+ return user;
96
+ }
97
+ };
98
+ exports.JwtAuthGuard = JwtAuthGuard;
99
+ exports.JwtAuthGuard = JwtAuthGuard = JwtAuthGuard_1 = __decorate([
100
+ (0, common_1.Injectable)(),
101
+ __metadata("design:paramtypes", [core_1.Reflector])
102
+ ], JwtAuthGuard);
103
+ //# sourceMappingURL=jwt-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAMwB;AACxB,uCAAyC;AACzC,qEAA+D;AAWxD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAIvB,YACU,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAJb,WAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;QAChD,wBAAmB,GAAQ,IAAI,CAAC;QAMtC,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAKO,uBAAuB;QAC7B,IAAI,CAAC;YAEH,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC5C,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,8DAA8D;gBAC9D,yEAAyE,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IAKD,WAAW,CAAC,OAAyB;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,uFAAuF;gBACvF,uCAAuC,CACxC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAGD,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,aAAa,CAAC,OAAyB;QAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;IACtC,CAAC;IAKO,KAAK,CAAC,mBAAmB,CAAC,OAAyB;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAAC,mBAAmB,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC;YAEH,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,mDAAmD;oBACnD,mEAAmE,CACpE,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YAID,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAG7C,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,IAAI,8BAAqB,CAAC,yBAAyB,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAKO,sBAAsB,CAAC,OAAY;QACzC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAKD,aAAa,CAAC,GAAQ,EAAE,IAAS,EAAE,IAAS;QAC1C,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,GAAG,IAAI,IAAI,8BAAqB,CAAC,0BAA0B,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAjIY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAMU,gBAAS;GALnB,YAAY,CAiIxB"}
@@ -0,0 +1,7 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ export declare class RolesGuard implements CanActivate {
4
+ private reflector;
5
+ constructor(reflector: Reflector);
6
+ canActivate(context: ExecutionContext): boolean;
7
+ }
@@ -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 __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.RolesGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const roles_decorator_1 = require("../decorators/roles.decorator");
16
+ const ROLE_KEY = 'role';
17
+ let RolesGuard = class RolesGuard {
18
+ constructor(reflector) {
19
+ this.reflector = reflector;
20
+ }
21
+ canActivate(context) {
22
+ const requiredRoles = this.reflector.getAllAndOverride(roles_decorator_1.ROLES_KEY, [
23
+ context.getHandler(),
24
+ context.getClass(),
25
+ ]);
26
+ if (!requiredRoles?.length) {
27
+ return true;
28
+ }
29
+ const request = context.switchToHttp().getRequest();
30
+ const user = request?.user;
31
+ const userRole = user?.[ROLE_KEY];
32
+ if (userRole == null) {
33
+ throw new common_1.ForbiddenException('User role not found');
34
+ }
35
+ const allowed = requiredRoles.some((r) => String(r) === String(userRole));
36
+ if (!allowed) {
37
+ throw new common_1.ForbiddenException(`Required role(s): ${requiredRoles.join(', ')}. Current: ${userRole}`);
38
+ }
39
+ return true;
40
+ }
41
+ };
42
+ exports.RolesGuard = RolesGuard;
43
+ exports.RolesGuard = RolesGuard = __decorate([
44
+ (0, common_1.Injectable)(),
45
+ __metadata("design:paramtypes", [core_1.Reflector])
46
+ ], RolesGuard);
47
+ //# sourceMappingURL=roles.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../src/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,uCAAyC;AACzC,mEAA0D;AAG1D,MAAM,QAAQ,GAAG,MAAM,CAAC;AAmBjB,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,WAAW,CAAC,OAAyB;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAW,2BAAS,EAAE;YAC1E,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,2BAAkB,CAAC,qBAAqB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,2BAAkB,CAC1B,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CACtE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA9BY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,UAAU,CA8BtB"}
@@ -0,0 +1,29 @@
1
+ export * from './core.module';
2
+ export * from './database/database.module';
3
+ export * from './database/database.service';
4
+ export * from './database/database.query';
5
+ export * from './utils/controller.helpers';
6
+ export { CommonResponseDto, CommonErrorDto, PaginationMeta, ResponseMeta } from './utils/controller.helpers';
7
+ export * from './utils/service.helpers';
8
+ export * from './utils/error.utils';
9
+ export * from './utils/auth.helpers';
10
+ export * from './utils/logger.helpers';
11
+ export { ILogWriter, ConsoleLogWriter, FileLogWriter, FileLogWriterOptions, LogLevelName, LOG_LEVEL_ORDER, isLevelEnabled, } from './utils/logger.helpers';
12
+ export * from './interceptors/logging.interceptor';
13
+ export { LoggingInterceptorOptions } from './interceptors/logging.interceptor';
14
+ export * from './interceptors/error-handling.interceptor';
15
+ export * from './interceptors/response-transform.interceptor';
16
+ export * from './interceptors/database-check.interceptor';
17
+ export * from './guards/jwt-auth.guard';
18
+ export * from './guards/roles.guard';
19
+ export { AllExceptionsFilter, ExceptionFilterOptions } from './filters/exception.filter';
20
+ export * from './decorators/public.decorator';
21
+ export { User, JwtUser } from './decorators/user.decorator';
22
+ export { Roles, ROLES_KEY } from './decorators/roles.decorator';
23
+ export * from './utils/config.validator';
24
+ export { getAppEnv, isDevelopment, isProduction, isStaging, currentAppEnv, isDev, isProd, type AppEnv, } from './utils/env.utils';
25
+ export { getLoggingConfigFromEnv } from './utils/logging.config';
26
+ export { loadApplicationYaml, loadApplicationYamlSync, LoadApplicationYamlOptions, DEFAULT_CONFIG_FILENAMES, ENV_CONFIG_FILENAME_PATTERN, CONFIG_SOURCE_ENV_KEY, type ConfigSource, } from './utils/yaml-config.loader';
27
+ export { resolveConfigRootDir, createConfigLoader, DEFAULT_CONFIG_ROOT_CANDIDATES, type ResolveConfigRootDirOptions, type CreateConfigLoaderOptions, type GetServiceConfigOverrides, } from './utils/config-loader.utils';
28
+ export { pbkdf2HashPassword, pbkdf2VerifyPassword, deriveKeySha256, PBKDF2_DEFAULT_ITERATIONS, PBKDF2_DEFAULT_KEYLEN, PBKDF2_DEFAULT_DIGEST, PBKDF2_SALT_BYTES, type Pbkdf2Options, } from './utils/crypto.utils';
29
+ export { hashValue, compareValue, hashEmail, compareEmail, emailNormalizer, digitsNormalizer, BUILT_IN_NORMALIZERS, getProfileConfig, hashByKey, compareByKey, lookupHash, compareLookupHash, HashVerificationConfig, HashVerificationConfigMap, type LookupHashOptions, } from './utils/hash-verification.utils';
package/dist/index.js ADDED
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.compareLookupHash = exports.lookupHash = exports.compareByKey = exports.hashByKey = exports.getProfileConfig = exports.BUILT_IN_NORMALIZERS = exports.digitsNormalizer = exports.emailNormalizer = exports.compareEmail = exports.hashEmail = exports.compareValue = exports.hashValue = exports.PBKDF2_SALT_BYTES = exports.PBKDF2_DEFAULT_DIGEST = exports.PBKDF2_DEFAULT_KEYLEN = exports.PBKDF2_DEFAULT_ITERATIONS = exports.deriveKeySha256 = exports.pbkdf2VerifyPassword = exports.pbkdf2HashPassword = exports.DEFAULT_CONFIG_ROOT_CANDIDATES = exports.createConfigLoader = exports.resolveConfigRootDir = exports.CONFIG_SOURCE_ENV_KEY = exports.ENV_CONFIG_FILENAME_PATTERN = exports.DEFAULT_CONFIG_FILENAMES = exports.loadApplicationYamlSync = exports.loadApplicationYaml = exports.getLoggingConfigFromEnv = exports.isProd = exports.isDev = exports.currentAppEnv = exports.isStaging = exports.isProduction = exports.isDevelopment = exports.getAppEnv = exports.ROLES_KEY = exports.Roles = exports.User = exports.AllExceptionsFilter = exports.isLevelEnabled = exports.LOG_LEVEL_ORDER = exports.FileLogWriter = exports.ConsoleLogWriter = exports.CommonErrorDto = exports.CommonResponseDto = void 0;
18
+ __exportStar(require("./core.module"), exports);
19
+ __exportStar(require("./database/database.module"), exports);
20
+ __exportStar(require("./database/database.service"), exports);
21
+ __exportStar(require("./database/database.query"), exports);
22
+ __exportStar(require("./utils/controller.helpers"), exports);
23
+ var controller_helpers_1 = require("./utils/controller.helpers");
24
+ Object.defineProperty(exports, "CommonResponseDto", { enumerable: true, get: function () { return controller_helpers_1.CommonResponseDto; } });
25
+ Object.defineProperty(exports, "CommonErrorDto", { enumerable: true, get: function () { return controller_helpers_1.CommonErrorDto; } });
26
+ __exportStar(require("./utils/service.helpers"), exports);
27
+ __exportStar(require("./utils/error.utils"), exports);
28
+ __exportStar(require("./utils/auth.helpers"), exports);
29
+ __exportStar(require("./utils/logger.helpers"), exports);
30
+ var logger_helpers_1 = require("./utils/logger.helpers");
31
+ Object.defineProperty(exports, "ConsoleLogWriter", { enumerable: true, get: function () { return logger_helpers_1.ConsoleLogWriter; } });
32
+ Object.defineProperty(exports, "FileLogWriter", { enumerable: true, get: function () { return logger_helpers_1.FileLogWriter; } });
33
+ Object.defineProperty(exports, "LOG_LEVEL_ORDER", { enumerable: true, get: function () { return logger_helpers_1.LOG_LEVEL_ORDER; } });
34
+ Object.defineProperty(exports, "isLevelEnabled", { enumerable: true, get: function () { return logger_helpers_1.isLevelEnabled; } });
35
+ __exportStar(require("./interceptors/logging.interceptor"), exports);
36
+ __exportStar(require("./interceptors/error-handling.interceptor"), exports);
37
+ __exportStar(require("./interceptors/response-transform.interceptor"), exports);
38
+ __exportStar(require("./interceptors/database-check.interceptor"), exports);
39
+ __exportStar(require("./guards/jwt-auth.guard"), exports);
40
+ __exportStar(require("./guards/roles.guard"), exports);
41
+ var exception_filter_1 = require("./filters/exception.filter");
42
+ Object.defineProperty(exports, "AllExceptionsFilter", { enumerable: true, get: function () { return exception_filter_1.AllExceptionsFilter; } });
43
+ __exportStar(require("./decorators/public.decorator"), exports);
44
+ var user_decorator_1 = require("./decorators/user.decorator");
45
+ Object.defineProperty(exports, "User", { enumerable: true, get: function () { return user_decorator_1.User; } });
46
+ var roles_decorator_1 = require("./decorators/roles.decorator");
47
+ Object.defineProperty(exports, "Roles", { enumerable: true, get: function () { return roles_decorator_1.Roles; } });
48
+ Object.defineProperty(exports, "ROLES_KEY", { enumerable: true, get: function () { return roles_decorator_1.ROLES_KEY; } });
49
+ __exportStar(require("./utils/config.validator"), exports);
50
+ var env_utils_1 = require("./utils/env.utils");
51
+ Object.defineProperty(exports, "getAppEnv", { enumerable: true, get: function () { return env_utils_1.getAppEnv; } });
52
+ Object.defineProperty(exports, "isDevelopment", { enumerable: true, get: function () { return env_utils_1.isDevelopment; } });
53
+ Object.defineProperty(exports, "isProduction", { enumerable: true, get: function () { return env_utils_1.isProduction; } });
54
+ Object.defineProperty(exports, "isStaging", { enumerable: true, get: function () { return env_utils_1.isStaging; } });
55
+ Object.defineProperty(exports, "currentAppEnv", { enumerable: true, get: function () { return env_utils_1.currentAppEnv; } });
56
+ Object.defineProperty(exports, "isDev", { enumerable: true, get: function () { return env_utils_1.isDev; } });
57
+ Object.defineProperty(exports, "isProd", { enumerable: true, get: function () { return env_utils_1.isProd; } });
58
+ var logging_config_1 = require("./utils/logging.config");
59
+ Object.defineProperty(exports, "getLoggingConfigFromEnv", { enumerable: true, get: function () { return logging_config_1.getLoggingConfigFromEnv; } });
60
+ var yaml_config_loader_1 = require("./utils/yaml-config.loader");
61
+ Object.defineProperty(exports, "loadApplicationYaml", { enumerable: true, get: function () { return yaml_config_loader_1.loadApplicationYaml; } });
62
+ Object.defineProperty(exports, "loadApplicationYamlSync", { enumerable: true, get: function () { return yaml_config_loader_1.loadApplicationYamlSync; } });
63
+ Object.defineProperty(exports, "DEFAULT_CONFIG_FILENAMES", { enumerable: true, get: function () { return yaml_config_loader_1.DEFAULT_CONFIG_FILENAMES; } });
64
+ Object.defineProperty(exports, "ENV_CONFIG_FILENAME_PATTERN", { enumerable: true, get: function () { return yaml_config_loader_1.ENV_CONFIG_FILENAME_PATTERN; } });
65
+ Object.defineProperty(exports, "CONFIG_SOURCE_ENV_KEY", { enumerable: true, get: function () { return yaml_config_loader_1.CONFIG_SOURCE_ENV_KEY; } });
66
+ var config_loader_utils_1 = require("./utils/config-loader.utils");
67
+ Object.defineProperty(exports, "resolveConfigRootDir", { enumerable: true, get: function () { return config_loader_utils_1.resolveConfigRootDir; } });
68
+ Object.defineProperty(exports, "createConfigLoader", { enumerable: true, get: function () { return config_loader_utils_1.createConfigLoader; } });
69
+ Object.defineProperty(exports, "DEFAULT_CONFIG_ROOT_CANDIDATES", { enumerable: true, get: function () { return config_loader_utils_1.DEFAULT_CONFIG_ROOT_CANDIDATES; } });
70
+ var crypto_utils_1 = require("./utils/crypto.utils");
71
+ Object.defineProperty(exports, "pbkdf2HashPassword", { enumerable: true, get: function () { return crypto_utils_1.pbkdf2HashPassword; } });
72
+ Object.defineProperty(exports, "pbkdf2VerifyPassword", { enumerable: true, get: function () { return crypto_utils_1.pbkdf2VerifyPassword; } });
73
+ Object.defineProperty(exports, "deriveKeySha256", { enumerable: true, get: function () { return crypto_utils_1.deriveKeySha256; } });
74
+ Object.defineProperty(exports, "PBKDF2_DEFAULT_ITERATIONS", { enumerable: true, get: function () { return crypto_utils_1.PBKDF2_DEFAULT_ITERATIONS; } });
75
+ Object.defineProperty(exports, "PBKDF2_DEFAULT_KEYLEN", { enumerable: true, get: function () { return crypto_utils_1.PBKDF2_DEFAULT_KEYLEN; } });
76
+ Object.defineProperty(exports, "PBKDF2_DEFAULT_DIGEST", { enumerable: true, get: function () { return crypto_utils_1.PBKDF2_DEFAULT_DIGEST; } });
77
+ Object.defineProperty(exports, "PBKDF2_SALT_BYTES", { enumerable: true, get: function () { return crypto_utils_1.PBKDF2_SALT_BYTES; } });
78
+ var hash_verification_utils_1 = require("./utils/hash-verification.utils");
79
+ Object.defineProperty(exports, "hashValue", { enumerable: true, get: function () { return hash_verification_utils_1.hashValue; } });
80
+ Object.defineProperty(exports, "compareValue", { enumerable: true, get: function () { return hash_verification_utils_1.compareValue; } });
81
+ Object.defineProperty(exports, "hashEmail", { enumerable: true, get: function () { return hash_verification_utils_1.hashEmail; } });
82
+ Object.defineProperty(exports, "compareEmail", { enumerable: true, get: function () { return hash_verification_utils_1.compareEmail; } });
83
+ Object.defineProperty(exports, "emailNormalizer", { enumerable: true, get: function () { return hash_verification_utils_1.emailNormalizer; } });
84
+ Object.defineProperty(exports, "digitsNormalizer", { enumerable: true, get: function () { return hash_verification_utils_1.digitsNormalizer; } });
85
+ Object.defineProperty(exports, "BUILT_IN_NORMALIZERS", { enumerable: true, get: function () { return hash_verification_utils_1.BUILT_IN_NORMALIZERS; } });
86
+ Object.defineProperty(exports, "getProfileConfig", { enumerable: true, get: function () { return hash_verification_utils_1.getProfileConfig; } });
87
+ Object.defineProperty(exports, "hashByKey", { enumerable: true, get: function () { return hash_verification_utils_1.hashByKey; } });
88
+ Object.defineProperty(exports, "compareByKey", { enumerable: true, get: function () { return hash_verification_utils_1.compareByKey; } });
89
+ Object.defineProperty(exports, "lookupHash", { enumerable: true, get: function () { return hash_verification_utils_1.lookupHash; } });
90
+ Object.defineProperty(exports, "compareLookupHash", { enumerable: true, get: function () { return hash_verification_utils_1.compareLookupHash; } });
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,gDAA8B;AAG9B,6DAA2C;AAC3C,8DAA4C;AAC5C,4DAA0C;AAG1C,6DAA2C;AAC3C,iEAKoC;AAJlC,uHAAA,iBAAiB,OAAA;AACjB,oHAAA,cAAc,OAAA;AAIhB,0DAAwC;AACxC,sDAAoC;AACpC,uDAAqC;AACrC,yDAAuC;AACvC,yDAQgC;AAN9B,kHAAA,gBAAgB,OAAA;AAChB,+GAAA,aAAa,OAAA;AAGb,iHAAA,eAAe,OAAA;AACf,gHAAA,cAAc,OAAA;AAIhB,qEAAmD;AAEnD,4EAA0D;AAC1D,gFAA8D;AAC9D,4EAA0D;AAG1D,0DAAwC;AACxC,uDAAqC;AAGrC,+DAAyF;AAAhF,uHAAA,mBAAmB,OAAA;AAG5B,gEAA8C;AAC9C,8DAA4D;AAAnD,sGAAA,IAAI,OAAA;AACb,gEAAgE;AAAvD,wGAAA,KAAK,OAAA;AAAE,4GAAA,SAAS,OAAA;AAGzB,2DAAyC;AAGzC,+CAS2B;AARzB,sGAAA,SAAS,OAAA;AACT,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,sGAAA,SAAS,OAAA;AACT,0GAAA,aAAa,OAAA;AACb,kGAAA,KAAK,OAAA;AACL,mGAAA,MAAM,OAAA;AAKR,yDAAiE;AAAxD,yHAAA,uBAAuB,OAAA;AAGhC,iEAQoC;AAPlC,yHAAA,mBAAmB,OAAA;AACnB,6HAAA,uBAAuB,OAAA;AAEvB,8HAAA,wBAAwB,OAAA;AACxB,iIAAA,2BAA2B,OAAA;AAC3B,2HAAA,qBAAqB,OAAA;AAKvB,mEAOqC;AANnC,2HAAA,oBAAoB,OAAA;AACpB,yHAAA,kBAAkB,OAAA;AAClB,qIAAA,8BAA8B,OAAA;AAOhC,qDAS8B;AAR5B,kHAAA,kBAAkB,OAAA;AAClB,oHAAA,oBAAoB,OAAA;AACpB,+GAAA,eAAe,OAAA;AACf,yHAAA,yBAAyB,OAAA;AACzB,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,iHAAA,iBAAiB,OAAA;AAKnB,2EAgByC;AAfvC,oHAAA,SAAS,OAAA;AACT,uHAAA,YAAY,OAAA;AACZ,oHAAA,SAAS,OAAA;AACT,uHAAA,YAAY,OAAA;AACZ,0HAAA,eAAe,OAAA;AACf,2HAAA,gBAAgB,OAAA;AAChB,+HAAA,oBAAoB,OAAA;AACpB,2HAAA,gBAAgB,OAAA;AAChB,oHAAA,SAAS,OAAA;AACT,uHAAA,YAAY,OAAA;AACZ,qHAAA,UAAU,OAAA;AACV,4HAAA,iBAAiB,OAAA"}
@@ -0,0 +1,12 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { Observable } from 'rxjs';
4
+ import { DatabaseService } from '../database/database.service';
5
+ export declare class DatabaseCheckInterceptor implements NestInterceptor {
6
+ private readonly databaseService?;
7
+ private readonly reflector;
8
+ constructor(databaseService?: DatabaseService, reflector?: Reflector);
9
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
10
+ private checkDatabase;
11
+ private isPublicEndpoint;
12
+ }
@@ -0,0 +1,60 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DatabaseCheckInterceptor = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const core_1 = require("@nestjs/core");
18
+ const database_service_1 = require("../database/database.service");
19
+ const public_decorator_1 = require("../decorators/public.decorator");
20
+ let DatabaseCheckInterceptor = class DatabaseCheckInterceptor {
21
+ constructor(databaseService, reflector = new core_1.Reflector()) {
22
+ this.databaseService = databaseService;
23
+ this.reflector = reflector;
24
+ }
25
+ intercept(context, next) {
26
+ const isPublic = this.isPublicEndpoint(context);
27
+ if (isPublic) {
28
+ return next.handle();
29
+ }
30
+ const contextType = context.getType();
31
+ if (contextType === 'rpc') {
32
+ return next.handle();
33
+ }
34
+ return this.checkDatabase(context, next);
35
+ }
36
+ checkDatabase(context, next) {
37
+ if (this.databaseService && !this.databaseService.isConnected()) {
38
+ throw new common_1.ServiceUnavailableException({
39
+ error: 'Database connection not available',
40
+ code: 'DB_NOT_CONNECTED',
41
+ message: 'The database service is currently unavailable. Please try again later.',
42
+ });
43
+ }
44
+ return next.handle();
45
+ }
46
+ isPublicEndpoint(context) {
47
+ return this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
48
+ context.getHandler(),
49
+ context.getClass(),
50
+ ]);
51
+ }
52
+ };
53
+ exports.DatabaseCheckInterceptor = DatabaseCheckInterceptor;
54
+ exports.DatabaseCheckInterceptor = DatabaseCheckInterceptor = __decorate([
55
+ (0, common_1.Injectable)(),
56
+ __param(0, (0, common_1.Optional)()),
57
+ __metadata("design:paramtypes", [database_service_1.DatabaseService,
58
+ core_1.Reflector])
59
+ ], DatabaseCheckInterceptor);
60
+ //# sourceMappingURL=database-check.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-check.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/database-check.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,uCAAyC;AAEzC,mEAA+D;AAC/D,qEAA+D;AAWxD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YAC+B,eAAiC,EAC7C,YAAuB,IAAI,gBAAS,EAAE;QAD1B,oBAAe,GAAf,eAAe,CAAkB;QAC7C,cAAS,GAAT,SAAS,CAA6B;IACtD,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAGD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAI1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAGD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAKO,aAAa,CACnB,OAAyB,EACzB,IAAiB;QAGjB,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;YAChE,MAAM,IAAI,oCAA2B,CAAC;gBACpC,KAAK,EAAE,mCAAmC;gBAC1C,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,wEAAwE;aAClF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAKO,gBAAgB,CAAC,OAAyB;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YAC9D,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAtDY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCAAoC,kCAAe;QAClC,gBAAS;GAH5B,wBAAwB,CAsDpC"}
@@ -0,0 +1,8 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { ErrorUtils } from '../utils/error.utils';
4
+ export declare class ErrorHandlingInterceptor implements NestInterceptor {
5
+ private readonly errorUtils;
6
+ constructor(errorUtils: ErrorUtils);
7
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
8
+ }