@zola_do/interceptors 0.1.9
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.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/tenant-interceptor.d.ts +8 -0
- package/dist/tenant-interceptor.js +89 -0
- package/dist/tenant-interceptor.js.map +1 -0
- package/dist/transaction-interceptor.d.ts +8 -0
- package/dist/transaction-interceptor.js +45 -0
- package/dist/transaction-interceptor.js.map +1 -0
- package/package.json +37 -0
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
__exportStar(require("./tenant-interceptor"), exports);
|
|
18
|
+
__exportStar(require("./transaction-interceptor"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,4DAA0C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { Reflector } from '@nestjs/core';
|
|
4
|
+
export declare class TenantInterceptor implements NestInterceptor {
|
|
5
|
+
private readonly reflector;
|
|
6
|
+
constructor(reflector: Reflector);
|
|
7
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
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.TenantInterceptor = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const core_2 = require("@zola_do/core");
|
|
16
|
+
const collection_query_1 = require("@zola_do/collection-query");
|
|
17
|
+
let TenantInterceptor = class TenantInterceptor {
|
|
18
|
+
constructor(reflector) {
|
|
19
|
+
this.reflector = reflector;
|
|
20
|
+
}
|
|
21
|
+
intercept(context, next) {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const req = context.switchToHttp().getRequest();
|
|
24
|
+
const isTenantInterceptorIgnored = (_a = this.reflector) === null || _a === void 0 ? void 0 : _a.getAllAndOverride(core_2.IGNORE_TENANT_INTERCEPTOR_KEY, [context.getHandler(), context.getClass()]);
|
|
25
|
+
if (isTenantInterceptorIgnored) {
|
|
26
|
+
return next.handle();
|
|
27
|
+
}
|
|
28
|
+
const user = req.user;
|
|
29
|
+
if (!user) {
|
|
30
|
+
return next.handle();
|
|
31
|
+
}
|
|
32
|
+
const organizationId = (_b = user.organization) === null || _b === void 0 ? void 0 : _b.id;
|
|
33
|
+
const tenantId = user.tenantId + '';
|
|
34
|
+
if (!tenantId && !organizationId) {
|
|
35
|
+
return next.handle();
|
|
36
|
+
}
|
|
37
|
+
const queryEncoded = req.query.q;
|
|
38
|
+
let query = decodeURIComponent(queryEncoded);
|
|
39
|
+
if (query == undefined) {
|
|
40
|
+
query = '';
|
|
41
|
+
}
|
|
42
|
+
const whereExist = query.includes('w=');
|
|
43
|
+
const queryArr = query.split('&');
|
|
44
|
+
let whereQuery;
|
|
45
|
+
let whereIndex;
|
|
46
|
+
queryArr.map((q, i) => {
|
|
47
|
+
if (q.startsWith('w=')) {
|
|
48
|
+
whereQuery = q;
|
|
49
|
+
whereIndex = i;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
if (whereIndex == undefined)
|
|
53
|
+
whereIndex = queryArr.length;
|
|
54
|
+
if (whereQuery == undefined)
|
|
55
|
+
whereQuery = '';
|
|
56
|
+
if (!whereExist && whereQuery.length == 0) {
|
|
57
|
+
whereQuery = 'w=';
|
|
58
|
+
}
|
|
59
|
+
else if (!whereExist && whereQuery.length > 0) {
|
|
60
|
+
whereQuery = '&w=';
|
|
61
|
+
}
|
|
62
|
+
if (tenantId) {
|
|
63
|
+
if (whereQuery[whereQuery.length - 1] == '=') {
|
|
64
|
+
whereQuery += `tenantId${collection_query_1.FilterSeparators.WhereEqual}=${collection_query_1.FilterSeparators.WhereEqual}${tenantId}`;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
whereQuery += `${collection_query_1.FilterSeparators.WhereAND}tenantId${collection_query_1.FilterSeparators.WhereEqual}=${collection_query_1.FilterSeparators.WhereEqual}${tenantId}`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (organizationId) {
|
|
71
|
+
if (whereQuery[whereQuery.length - 1] == '=') {
|
|
72
|
+
whereQuery += `organizationId${collection_query_1.FilterSeparators.WhereEqual}=${collection_query_1.FilterSeparators.WhereEqual}${organizationId}`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
whereQuery += `${collection_query_1.FilterSeparators.WhereAND}organizationId${collection_query_1.FilterSeparators.WhereEqual}=${collection_query_1.FilterSeparators.WhereEqual}${organizationId}`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
queryArr[whereIndex] = whereQuery;
|
|
79
|
+
const finalWhereQuery = queryArr.join('&');
|
|
80
|
+
req.query.q = finalWhereQuery;
|
|
81
|
+
return next.handle();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
exports.TenantInterceptor = TenantInterceptor;
|
|
85
|
+
exports.TenantInterceptor = TenantInterceptor = __decorate([
|
|
86
|
+
(0, common_1.Injectable)(),
|
|
87
|
+
__metadata("design:paramtypes", [core_1.Reflector])
|
|
88
|
+
], TenantInterceptor);
|
|
89
|
+
//# sourceMappingURL=tenant-interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-interceptor.js","sourceRoot":"","sources":["../src/tenant-interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
|
|
2
|
+
import { DataSource } from 'typeorm';
|
|
3
|
+
export declare const ENTITY_MANAGER_KEY = "ENTITY_MANAGER";
|
|
4
|
+
export declare class TransactionInterceptor implements NestInterceptor {
|
|
5
|
+
private connection;
|
|
6
|
+
constructor(connection: DataSource);
|
|
7
|
+
intercept(context: ExecutionContext, next: CallHandler<any>): Promise<any>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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 _a;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TransactionInterceptor = exports.ENTITY_MANAGER_KEY = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const typeorm_1 = require("typeorm");
|
|
16
|
+
const rxjs_1 = require("rxjs");
|
|
17
|
+
exports.ENTITY_MANAGER_KEY = 'ENTITY_MANAGER';
|
|
18
|
+
let TransactionInterceptor = class TransactionInterceptor {
|
|
19
|
+
constructor(connection) {
|
|
20
|
+
this.connection = connection;
|
|
21
|
+
}
|
|
22
|
+
async intercept(context, next) {
|
|
23
|
+
const req = context.switchToHttp().getRequest();
|
|
24
|
+
common_1.Logger.log(req.path);
|
|
25
|
+
const queryRunner = this.connection.createQueryRunner();
|
|
26
|
+
await queryRunner.connect();
|
|
27
|
+
await queryRunner.startTransaction();
|
|
28
|
+
req[exports.ENTITY_MANAGER_KEY] = queryRunner.manager;
|
|
29
|
+
return next.handle().pipe((0, rxjs_1.concatMap)(async (data) => {
|
|
30
|
+
await queryRunner.commitTransaction();
|
|
31
|
+
return data;
|
|
32
|
+
}), (0, rxjs_1.catchError)(async (e) => {
|
|
33
|
+
await queryRunner.rollbackTransaction();
|
|
34
|
+
throw e;
|
|
35
|
+
}), (0, rxjs_1.finalize)(async () => {
|
|
36
|
+
await queryRunner.release();
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.TransactionInterceptor = TransactionInterceptor;
|
|
41
|
+
exports.TransactionInterceptor = TransactionInterceptor = __decorate([
|
|
42
|
+
(0, common_1.Injectable)(),
|
|
43
|
+
__metadata("design:paramtypes", [typeof (_a = typeof typeorm_1.DataSource !== "undefined" && typeorm_1.DataSource) === "function" ? _a : Object])
|
|
44
|
+
], TransactionInterceptor);
|
|
45
|
+
//# sourceMappingURL=transaction-interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-interceptor.js","sourceRoot":"","sources":["../src/transaction-interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAMwB;AAExB,qCAAqC;AACrC,+BAAuD;AAE1C,QAAA,kBAAkB,GAAG,gBAAgB,CAAC;AAG5C,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE9C,KAAK,CAAC,SAAS,CACb,OAAyB,EACzB,IAAsB;QAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAW,CAAC;QACzD,eAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACxD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAErC,GAAG,CAAC,0BAAkB,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;QAE9C,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,gBAAS,EAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EACF,IAAA,iBAAU,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;YACxC,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,EACF,IAAA,eAAQ,EAAC,KAAK,IAAI,EAAE;YAClB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AA9BY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;yDAEqB,oBAAU,oBAAV,oBAAU;GAD/B,sBAAsB,CA8BlC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zola_do/interceptors",
|
|
3
|
+
"version": "0.1.9",
|
|
4
|
+
"description": "Tenant and transaction interceptors for NestJS",
|
|
5
|
+
"author": "zolaDO",
|
|
6
|
+
"license": "ISC",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": ["dist", "README.md"],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "rimraf dist && tsc",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
25
|
+
"@nestjs/core": "^10.0.0 || ^11.0.0",
|
|
26
|
+
"rxjs": "^7.0.0 || ^8.0.0",
|
|
27
|
+
"typeorm": "^0.3.0"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@zola_do/core": "file:../core",
|
|
31
|
+
"@zola_do/collection-query": "file:../collection-query"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"rimraf": "^6.1.0",
|
|
35
|
+
"typescript": "^5.9.3"
|
|
36
|
+
}
|
|
37
|
+
}
|