nest-encrypt-cycle 1.1.2 → 1.1.4

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.
@@ -0,0 +1,10 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { EncryptService } from './encrypt.service';
4
+ export declare class EncryptInterceptor implements NestInterceptor {
5
+ private readonly encryptService;
6
+ constructor(encryptService: EncryptService);
7
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
8
+ private processRequest;
9
+ private processResponse;
10
+ }
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EncryptInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const rxjs_1 = require("rxjs");
15
+ const encrypt_service_1 = require("./encrypt.service");
16
+ let EncryptInterceptor = class EncryptInterceptor {
17
+ constructor(encryptService) {
18
+ this.encryptService = encryptService;
19
+ }
20
+ intercept(context, next) {
21
+ const req = context.switchToHttp().getRequest();
22
+ const url = req.url;
23
+ const method = req.method;
24
+ const isEncrypted = req.headers['is-encrypted'] === 'Y';
25
+ this.processRequest(req, url, method, isEncrypted);
26
+ return next.handle().pipe((0, rxjs_1.map)((data) => {
27
+ if (data && data.encrypted === true && data.data) {
28
+ return data;
29
+ }
30
+ return this.processResponse(data, url, method, isEncrypted);
31
+ }));
32
+ }
33
+ processRequest(req, url, method, isEncrypted) {
34
+ if (!isEncrypted || !req.body || !req.body.data ||
35
+ (typeof req.body.data === 'string' && req.body.data.trim() === '')) {
36
+ return;
37
+ }
38
+ try {
39
+ const decrypted = this.encryptService.decrypt(req.body.data, url, method);
40
+ if (decrypted && decrypted.trim() !== '') {
41
+ req.body = JSON.parse(decrypted);
42
+ }
43
+ }
44
+ catch (err) {
45
+ console.error('Request decryption failed:', err);
46
+ }
47
+ }
48
+ processResponse(data, url, method, isEncrypted) {
49
+ if (isEncrypted) {
50
+ return this.encryptService.encrypt(JSON.stringify(data), url, method);
51
+ }
52
+ return data;
53
+ }
54
+ };
55
+ exports.EncryptInterceptor = EncryptInterceptor;
56
+ exports.EncryptInterceptor = EncryptInterceptor = __decorate([
57
+ (0, common_1.Injectable)(),
58
+ __metadata("design:paramtypes", [encrypt_service_1.EncryptService])
59
+ ], EncryptInterceptor);
60
+ //# sourceMappingURL=encrypt.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.interceptor.js","sourceRoot":"","sources":["../../src/encrypt.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,+BAAuC;AACvC,uDAAmD;AAG5C,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAE/D,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC;QAGxD,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAGnD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,CAAC,IAAI,EAAE,EAAE;YAEX,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAGO,cAAc,CACpB,GAAQ,EACR,GAAW,EACX,MAAc,EACd,WAAoB;QAGpB,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;YAC3C,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,EACb,GAAG,EACH,MAAM,CACP,CAAC;YAGF,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACzC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAGO,eAAe,CACrB,IAAS,EACT,GAAW,EACX,MAAc,EACd,WAAoB;QAEpB,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAnEY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;qCAEkC,gCAAc;GADhD,kBAAkB,CAmE9B"}
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { EncryptOptions } from './types';
3
+ export declare class EncryptModule {
4
+ static register(options: EncryptOptions): DynamicModule;
5
+ }
@@ -0,0 +1,38 @@
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 EncryptModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.EncryptModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const encrypt_service_1 = require("./encrypt.service");
13
+ const encrypt_interceptor_1 = require("./encrypt.interceptor");
14
+ const core_1 = require("@nestjs/core");
15
+ let EncryptModule = EncryptModule_1 = class EncryptModule {
16
+ static register(options) {
17
+ const encryptService = new encrypt_service_1.EncryptService(options);
18
+ return {
19
+ module: EncryptModule_1,
20
+ providers: [
21
+ {
22
+ provide: encrypt_service_1.EncryptService,
23
+ useValue: encryptService,
24
+ },
25
+ {
26
+ provide: core_1.APP_INTERCEPTOR,
27
+ useClass: encrypt_interceptor_1.EncryptInterceptor,
28
+ },
29
+ ],
30
+ exports: [encrypt_service_1.EncryptService],
31
+ };
32
+ }
33
+ };
34
+ exports.EncryptModule = EncryptModule;
35
+ exports.EncryptModule = EncryptModule = EncryptModule_1 = __decorate([
36
+ (0, common_1.Module)({})
37
+ ], EncryptModule);
38
+ //# sourceMappingURL=encrypt.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.module.js","sourceRoot":"","sources":["../../src/encrypt.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,uDAAmD;AAEnD,+DAA2D;AAC3D,uCAA+C;AAGxC,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,OAAuB;QACrC,MAAM,cAAc,GAAG,IAAI,gCAAc,CAAC,OAAO,CAAC,CAAC;QAEnD,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,gCAAc;oBACvB,QAAQ,EAAE,cAAc;iBACzB;gBACD;oBACE,OAAO,EAAE,sBAAe;oBACxB,QAAQ,EAAE,wCAAkB;iBAC7B;aACF;YACD,OAAO,EAAE,CAAC,gCAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;CACF,CAAA;AAnBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAmBzB"}
@@ -0,0 +1,7 @@
1
+ import { EncryptOptions } from './types';
2
+ export declare class EncryptService {
3
+ private readonly options;
4
+ constructor(options: EncryptOptions);
5
+ encrypt(data: string, pathname: string, method: string): string;
6
+ decrypt(data: string, pathname: string, method: string): string;
7
+ }
@@ -0,0 +1,66 @@
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.EncryptService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const crypto = require("crypto-js");
15
+ let EncryptService = class EncryptService {
16
+ constructor(options) {
17
+ this.options = options;
18
+ }
19
+ encrypt(data, pathname, method) {
20
+ if (this.options.whiteList.some((i) => i.pathname === pathname && i.method === method)) {
21
+ return data;
22
+ }
23
+ if (!data || typeof data !== 'string')
24
+ return '';
25
+ return crypto.AES.encrypt(data, crypto.enc.Utf8.parse(this.options.key), {
26
+ iv: crypto.enc.Utf8.parse(this.options.key),
27
+ padding: crypto.pad.Pkcs7,
28
+ mode: crypto.mode.CBC,
29
+ }).toString();
30
+ }
31
+ decrypt(data, pathname, method) {
32
+ if (this.options.whiteList.some((i) => i.pathname === pathname && i.method === method)) {
33
+ return data;
34
+ }
35
+ if (data === undefined || data === null) {
36
+ return '';
37
+ }
38
+ if (typeof data !== 'string') {
39
+ return '';
40
+ }
41
+ if (data.trim() === '') {
42
+ return '';
43
+ }
44
+ try {
45
+ if (!data.includes('/') && !data.includes('+') && !data.includes('=')) {
46
+ return data;
47
+ }
48
+ const decipher = crypto.AES.decrypt(data, crypto.enc.Utf8.parse(this.options.key), {
49
+ iv: crypto.enc.Utf8.parse(this.options.key),
50
+ padding: crypto.pad.Pkcs7,
51
+ mode: crypto.mode.CBC,
52
+ });
53
+ return decipher.toString(crypto.enc.Utf8);
54
+ }
55
+ catch (error) {
56
+ console.error('Decryption failed:', error);
57
+ return '';
58
+ }
59
+ }
60
+ };
61
+ exports.EncryptService = EncryptService;
62
+ exports.EncryptService = EncryptService = __decorate([
63
+ (0, common_1.Injectable)(),
64
+ __metadata("design:paramtypes", [Object])
65
+ ], EncryptService);
66
+ //# sourceMappingURL=encrypt.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.service.js","sourceRoot":"","sources":["../../src/encrypt.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oCAAoC;AAI7B,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD,OAAO,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc;QACpD,IACE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CACtD,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEjD,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;SACtB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc;QAEpD,IACE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CACtD,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAGD,IAAI,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CACjC,IAAI,EACJ,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EACvC;gBACE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;aACtB,CACF,CAAC;YAEF,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAA;AAlEY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;;GACA,cAAc,CAkE1B"}
@@ -0,0 +1,7 @@
1
+ export interface EncryptOptions {
2
+ key: string;
3
+ whiteList: {
4
+ method: string;
5
+ pathname: string;
6
+ }[];
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nest-encrypt-cycle",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "A NestJS interceptor that encrypts/decrypts request and response bodies",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",