@imaginamossas/farmabien-common 1.0.16 → 1.0.17

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.
@@ -1,4 +1 @@
1
- export * from './customer.entity';
2
- export * from './customers.providers.entity';
3
- export * from './email-verification-token.entity';
4
- export * from './providers.code.entity';
1
+ export * from './base.entity';
@@ -14,8 +14,5 @@ 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("./customer.entity"), exports);
18
- __exportStar(require("./customers.providers.entity"), exports);
19
- __exportStar(require("./email-verification-token.entity"), exports);
20
- __exportStar(require("./providers.code.entity"), exports);
17
+ __exportStar(require("./base.entity"), exports);
21
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,+DAA6C;AAC7C,oEAAkD;AAClD,0DAAwC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AASA,gDAA8B"}
@@ -1 +1,2 @@
1
1
  export * from './logging.interceptor';
2
+ export * from './tenant.interceptor';
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./logging.interceptor"), exports);
18
+ __exportStar(require("./tenant.interceptor"), exports);
18
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,uDAAqC"}
@@ -0,0 +1,19 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { Reflector } from '@nestjs/core';
4
+ import { I18nService } from 'nestjs-i18n';
5
+ import { Observable } from 'rxjs';
6
+ import { DataSource } from 'typeorm';
7
+ export declare class TenantInterceptor implements NestInterceptor {
8
+ private readonly dataSource;
9
+ private readonly reflector;
10
+ private readonly configService;
11
+ private readonly i18n;
12
+ private readonly logger;
13
+ private readonly allowedTenants;
14
+ constructor(dataSource: DataSource, reflector: Reflector, configService: ConfigService, i18n: I18nService);
15
+ intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<unknown>>;
16
+ private cleanupConnection;
17
+ private extractTenantId;
18
+ private validateTenant;
19
+ }
@@ -0,0 +1,124 @@
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 TenantInterceptor_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.TenantInterceptor = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ const core_1 = require("@nestjs/core");
17
+ const nestjs_i18n_1 = require("nestjs-i18n");
18
+ const operators_1 = require("rxjs/operators");
19
+ const typeorm_1 = require("typeorm");
20
+ const public_decorator_1 = require("../decorators/public.decorator");
21
+ let TenantInterceptor = TenantInterceptor_1 = class TenantInterceptor {
22
+ dataSource;
23
+ reflector;
24
+ configService;
25
+ i18n;
26
+ logger = new common_1.Logger(TenantInterceptor_1.name);
27
+ allowedTenants;
28
+ constructor(dataSource, reflector, configService, i18n) {
29
+ this.dataSource = dataSource;
30
+ this.reflector = reflector;
31
+ this.configService = configService;
32
+ this.i18n = i18n;
33
+ const allowedTenantsConfig = this.configService.get('ALLOWED_TENANTS') || 'CO,VE';
34
+ this.allowedTenants = allowedTenantsConfig.split(',').map((t) => t.trim().toUpperCase());
35
+ this.logger.log(`TenantInterceptor initialized. Allowed tenants: ${this.allowedTenants.join(', ')}`);
36
+ }
37
+ async intercept(context, next) {
38
+ const http = context.switchToHttp();
39
+ const request = http.getRequest();
40
+ const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
41
+ context.getHandler(),
42
+ context.getClass(),
43
+ ]);
44
+ if (isPublic) {
45
+ return next.handle();
46
+ }
47
+ const tenantId = this.extractTenantId(request);
48
+ const queryRunner = this.dataSource.createQueryRunner();
49
+ await queryRunner.connect();
50
+ await queryRunner.startTransaction();
51
+ await queryRunner.query(`SELECT set_config('app.current_tenant', $1, false)`, [tenantId]);
52
+ request.queryRunner = queryRunner;
53
+ request.entityManager = queryRunner.manager;
54
+ return next.handle().pipe((0, operators_1.finalize)(() => {
55
+ void this.cleanupConnection(queryRunner, tenantId);
56
+ }));
57
+ }
58
+ async cleanupConnection(queryRunner, tenantId) {
59
+ try {
60
+ await queryRunner.query('RESET app.current_tenant');
61
+ this.logger.debug(`Tenant context reset for tenant: ${tenantId}`);
62
+ }
63
+ catch (resetError) {
64
+ this.logger.error(`Failed to reset tenant context: ${resetError.message}`);
65
+ }
66
+ finally {
67
+ try {
68
+ if (queryRunner.isTransactionActive) {
69
+ await queryRunner.rollbackTransaction();
70
+ this.logger.warn(`Transaction rolled back for tenant: ${tenantId}`);
71
+ }
72
+ }
73
+ catch (rollbackError) {
74
+ this.logger.error(`Failed to rollback transaction: ${rollbackError.message}`);
75
+ }
76
+ finally {
77
+ await queryRunner.release();
78
+ }
79
+ }
80
+ }
81
+ extractTenantId(request) {
82
+ if (request.user?.tenantId) {
83
+ const tenantFromToken = request.user.tenantId.trim().toUpperCase();
84
+ return this.validateTenant(tenantFromToken);
85
+ }
86
+ let tenantFromRequest = request.query?.tenant;
87
+ if (!tenantFromRequest) {
88
+ const headerVal = request.header('x-tenant-id');
89
+ tenantFromRequest = typeof headerVal === 'string' ? headerVal.split(',')[0] : headerVal;
90
+ }
91
+ if (typeof tenantFromRequest !== 'string') {
92
+ throw new common_1.BadRequestException('tenantId is required');
93
+ }
94
+ return this.validateTenant(tenantFromRequest.trim().toUpperCase());
95
+ }
96
+ validateTenant(tenantId) {
97
+ const lang = nestjs_i18n_1.I18nContext.current()?.lang;
98
+ if (!tenantId || tenantId.length === 0) {
99
+ throw new common_1.BadRequestException(this.i18n.t('error.customer.TenantIdInvalid', { lang }) || 'Invalid tenant ID');
100
+ }
101
+ if (!/^[A-Z0-9]{2,10}$/.test(tenantId)) {
102
+ throw new common_1.BadRequestException(this.i18n.t('error.customer.TenantIdInvalid', { lang }) || 'Invalid tenant ID format');
103
+ }
104
+ if (!this.allowedTenants.includes(tenantId)) {
105
+ throw new common_1.BadRequestException(this.i18n.t('error.customer.TenantIdNotAllowed', {
106
+ lang,
107
+ args: {
108
+ tenantId: tenantId,
109
+ allowedTenants: this.allowedTenants.join(', '),
110
+ },
111
+ }) || `Tenant ${tenantId} is not allowed`);
112
+ }
113
+ return tenantId;
114
+ }
115
+ };
116
+ exports.TenantInterceptor = TenantInterceptor;
117
+ exports.TenantInterceptor = TenantInterceptor = TenantInterceptor_1 = __decorate([
118
+ (0, common_1.Injectable)(),
119
+ __metadata("design:paramtypes", [typeorm_1.DataSource,
120
+ core_1.Reflector,
121
+ config_1.ConfigService,
122
+ nestjs_i18n_1.I18nService])
123
+ ], TenantInterceptor);
124
+ //# sourceMappingURL=tenant.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/tenant.interceptor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './sns-publisher.module';
2
2
  export * from './sns-publisher.service';
3
3
  export * from './sns.interfaces';
4
+ export * from './sns.catalog';
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./sns-publisher.module"), exports);
18
18
  __exportStar(require("./sns-publisher.service"), exports);
19
19
  __exportStar(require("./sns.interfaces"), exports);
20
+ __exportStar(require("./sns.catalog"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/queues/sns-publisher/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,yDAAuC;AACvC,0DAAwC;AACxC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/queues/sns-publisher/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,yDAAuC;AACvC,0DAAwC;AACxC,mDAAiC;AACjC,gDAA8B"}