@haku-sci/utils 2.0.0 → 2.2.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.
@@ -0,0 +1,2 @@
1
+ export declare const RESTRICT_SENDER_KEY = "restrict_sender";
2
+ export declare function RestrictSender(allowedSenders: string[] | string): <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RESTRICT_SENDER_KEY = void 0;
4
+ exports.RestrictSender = RestrictSender;
5
+ const common_1 = require("@nestjs/common");
6
+ const restrict_sender_interceptor_1 = require("./restrict-sender.interceptor");
7
+ exports.RESTRICT_SENDER_KEY = 'restrict_sender';
8
+ function RestrictSender(allowedSenders) {
9
+ return (0, common_1.applyDecorators)((0, common_1.SetMetadata)(exports.RESTRICT_SENDER_KEY, allowedSenders), (0, common_1.UseInterceptors)(restrict_sender_interceptor_1.RestrictSenderInterceptor));
10
+ }
11
+ //# sourceMappingURL=restrict-sender.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restrict-sender.decorator.js","sourceRoot":"","sources":["../../src/TCP/restrict-sender.decorator.ts"],"names":[],"mappings":";;;AAKA,wCAKC;AAVD,2CAA+E;AAC/E,+EAA0E;AAE7D,QAAA,mBAAmB,GAAG,iBAAiB,CAAC;AAErD,SAAgB,cAAc,CAAC,cAAiC;IAC9D,OAAO,IAAA,wBAAe,EACpB,IAAA,oBAAW,EAAC,2BAAmB,EAAE,cAAc,CAAC,EAChD,IAAA,wBAAe,EAAC,uDAAyB,CAAC,CAC3C,CAAC;AACJ,CAAC"}
@@ -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 RestrictSenderInterceptor implements NestInterceptor {
5
+ private reflector;
6
+ constructor(reflector: Reflector);
7
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
8
+ }
@@ -0,0 +1,46 @@
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.RestrictSenderInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const restrict_sender_decorator_1 = require("./restrict-sender.decorator");
16
+ let RestrictSenderInterceptor = class RestrictSenderInterceptor {
17
+ constructor(reflector) {
18
+ this.reflector = reflector;
19
+ }
20
+ intercept(context, next) {
21
+ const ctx = context.switchToRpc();
22
+ const data = ctx.getData();
23
+ const sender = data?.sender;
24
+ const handler = context.getHandler();
25
+ const target = context.getClass();
26
+ const methodRestriction = this.reflector.get(restrict_sender_decorator_1.RESTRICT_SENDER_KEY, handler);
27
+ const classRestriction = this.reflector.get(restrict_sender_decorator_1.RESTRICT_SENDER_KEY, target);
28
+ if (methodRestriction === '*') {
29
+ return next.handle();
30
+ }
31
+ const allowedSenders = methodRestriction ?? classRestriction ?? [];
32
+ if (allowedSenders === '*') {
33
+ return next.handle();
34
+ }
35
+ if (allowedSenders !== sender && !allowedSenders.includes(sender)) {
36
+ throw new common_1.ForbiddenException(`Sender '${sender}' is not authorized`);
37
+ }
38
+ return next.handle();
39
+ }
40
+ };
41
+ exports.RestrictSenderInterceptor = RestrictSenderInterceptor;
42
+ exports.RestrictSenderInterceptor = RestrictSenderInterceptor = __decorate([
43
+ (0, common_1.Injectable)(),
44
+ __metadata("design:paramtypes", [core_1.Reflector])
45
+ ], RestrictSenderInterceptor);
46
+ //# sourceMappingURL=restrict-sender.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restrict-sender.interceptor.js","sourceRoot":"","sources":["../../src/TCP/restrict-sender.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAMwB;AAExB,uCAAyC;AACzC,2EAAkE;AAG3D,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAElC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAC1C,+CAAmB,EACnB,OAAO,CACR,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACzC,+CAAmB,EACnB,MAAM,CACP,CAAC;QAGF,IAAI,iBAAiB,KAAK,GAAG,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAGD,MAAM,cAAc,GAAqB,iBAAiB,IAAI,gBAAgB,IAAI,EAAE,CAAC;QAErF,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,cAAc,KAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,2BAAkB,CAAC,WAAW,MAAM,qBAAqB,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAvCY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,yBAAyB,CAuCrC"}
@@ -0,0 +1,2 @@
1
+ export declare class TcpModule {
2
+ }
@@ -0,0 +1,23 @@
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.TcpModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const tcp_service_1 = require("./tcp.service");
12
+ const core_1 = require("@nestjs/core");
13
+ const restrict_sender_interceptor_1 = require("./restrict-sender.interceptor");
14
+ let TcpModule = class TcpModule {
15
+ };
16
+ exports.TcpModule = TcpModule;
17
+ exports.TcpModule = TcpModule = __decorate([
18
+ (0, common_1.Module)({
19
+ providers: [tcp_service_1.TCPService, core_1.Reflector, restrict_sender_interceptor_1.RestrictSenderInterceptor],
20
+ exports: [tcp_service_1.TCPService]
21
+ })
22
+ ], TcpModule);
23
+ //# sourceMappingURL=tcp.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.module.js","sourceRoot":"","sources":["../../src/TCP/tcp.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAC3C,uCAAyC;AACzC,+EAA0E;AAMnE,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAJrB,IAAA,eAAM,EAAC;QACJ,SAAS,EAAC,CAAC,wBAAU,EAAC,gBAAS,EAAE,uDAAyB,CAAC;QAC3D,OAAO,EAAC,CAAC,wBAAU,CAAC;KACvB,CAAC;GACW,SAAS,CAAG"}
@@ -0,0 +1,3 @@
1
+ export declare class TCPService {
2
+ static sendMessage(service: any, action: string, resource?: string, payload?: any): Promise<any>;
3
+ }
@@ -0,0 +1,50 @@
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.TCPService = void 0;
10
+ const microservices_1 = require("@nestjs/microservices");
11
+ const rxjs_1 = require("rxjs");
12
+ const utils = require("../utils");
13
+ const consul_1 = require("../microservice/consul");
14
+ const common_1 = require("@nestjs/common");
15
+ let TCPService = class TCPService {
16
+ static async sendMessage(service, action, resource, payload) {
17
+ const client = await microservices_1.ClientProxyFactory.create({
18
+ transport: microservices_1.Transport.TCP,
19
+ options: await consul_1.Consul.getServiceURI(service),
20
+ });
21
+ try {
22
+ payload.sender = await utils.microServiceName();
23
+ let response$ = await client.send([resource, action].join("/"), payload).pipe((0, rxjs_1.catchError)(err => {
24
+ const errorPayload = typeof err === 'object' ? err : { message: String(err) };
25
+ return (0, rxjs_1.throwError)(() => new Error(`[${service}] ${errorPayload.message}`));
26
+ }));
27
+ const watchdogTimeout = parseInt(process.env.WATCHDOG);
28
+ if (!isNaN(watchdogTimeout) && watchdogTimeout > 0)
29
+ response$ = response$.pipe((0, rxjs_1.timeout)({ first: watchdogTimeout }));
30
+ response$ = response$.pipe((0, rxjs_1.defaultIfEmpty)(null));
31
+ const result = await (0, rxjs_1.lastValueFrom)(response$);
32
+ if (result?.error)
33
+ throw new Error(`[${service}] ${result.message}`);
34
+ return result;
35
+ }
36
+ finally {
37
+ try {
38
+ await client.close();
39
+ }
40
+ catch (closeError) {
41
+ console.error("Error closing client:", closeError.message);
42
+ }
43
+ }
44
+ }
45
+ };
46
+ exports.TCPService = TCPService;
47
+ exports.TCPService = TCPService = __decorate([
48
+ (0, common_1.Injectable)()
49
+ ], TCPService);
50
+ //# sourceMappingURL=tcp.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.service.js","sourceRoot":"","sources":["../../src/TCP/tcp.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yDAAmF;AACnF,+BAAsF;AACtF,kCAAiC;AACjC,mDAAgD;AAEhD,2CAA2C;AAGpC,IAAM,UAAU,GAAhB,MAAM,UAAU;IACnB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAa,EAAC,QAAgB,EAAE,OAAQ;QACtE,MAAM,MAAM,GAAgB,MAAM,kCAAkB,CAAC,MAAM,CAAC;YACxD,SAAS,EAAE,yBAAS,CAAC,GAAG;YACxB,OAAO,EAAE,MAAM,eAAM,CAAC,aAAa,CAAC,OAAO,CAAC;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC;YACD,OAAO,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAA;YAC/C,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACxE,IAAA,iBAAU,EAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjG,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAAA,CAAC,CAAC,CAChF,CAAC;YACF,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC;gBAC9C,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;YACpE,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAA,qBAAc,EAAC,IAAI,CAAC,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE,KAAK;gBACb,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC;QAClB,CAAC;gBAYO,CAAC;YACL,IAAI,CAAC;gBACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC;QACL,CAAC;IACL,CAAC;CACJ,CAAA;AAxCY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;GACA,UAAU,CAwCtB"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  export * from './microservice/microservice.service';
2
- export * from './microservice/tcp.service';
2
+ export * from './TCP/tcp.service';
3
+ export * from './TCP/tcp.module';
4
+ export * from './TCP/restrict-sender.decorator';
5
+ export * from './TCP/restrict-sender.interceptor';
3
6
  export * from './rabbit-mq/rabbit-mq.module';
4
7
  export * from './rabbit-mq/rabbit-mq.service';
5
8
  export * from './utils';
package/dist/index.js CHANGED
@@ -15,7 +15,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./microservice/microservice.service"), exports);
18
- __exportStar(require("./microservice/tcp.service"), exports);
18
+ __exportStar(require("./TCP/tcp.service"), exports);
19
+ __exportStar(require("./TCP/tcp.module"), exports);
20
+ __exportStar(require("./TCP/restrict-sender.decorator"), exports);
21
+ __exportStar(require("./TCP/restrict-sender.interceptor"), exports);
19
22
  __exportStar(require("./rabbit-mq/rabbit-mq.module"), exports);
20
23
  __exportStar(require("./rabbit-mq/rabbit-mq.service"), exports);
21
24
  __exportStar(require("./utils"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sEAAoD;AACpD,6DAA2C;AAC3C,+DAA6C;AAC7C,gEAA8C;AAC9C,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sEAAoD;AACpD,oDAAkC;AAClC,mDAAiC;AACjC,kEAAgD;AAChD,oEAAkD;AAClD,+DAA6C;AAC7C,gEAA8C;AAC9C,0CAAwB"}
@@ -6,4 +6,5 @@ export declare class Microservice {
6
6
  private static isPortFree;
7
7
  private static setServerAddress;
8
8
  private static startMainMicroService;
9
+ static get host(): string;
9
10
  }
@@ -45,21 +45,28 @@ class Microservice {
45
45
  }
46
46
  static isPortFree(port) {
47
47
  return new Promise((resolve) => {
48
- const server = net.createServer()
49
- .once('error', () => resolve(false))
50
- .once('listening', () => {
48
+ const server = net.createServer();
49
+ server.once('error', (err) => {
50
+ if (err.code === 'EADDRINUSE' || err.code === 'EACCES') {
51
+ resolve(false);
52
+ }
53
+ else {
54
+ resolve(false);
55
+ }
56
+ });
57
+ server.once('listening', () => {
51
58
  server.close(() => resolve(true));
52
- })
53
- .listen(port);
59
+ });
60
+ server.listen(port, this.serverAddress.address);
54
61
  });
55
62
  }
56
63
  static async setServerAddress() {
57
- while (!this.isPortFree(this.serverAddress.port))
58
- this.serverAddress.port++;
59
- this.serverAddress.address = Object.values(os.networkInterfaces())
64
+ this.serverAddress.address = process.env.DEBUG ? "127.0.0.1" : Object.values(os.networkInterfaces())
60
65
  .flatMap((iface) => iface ?? [])
61
66
  .find((addr) => addr.family === 'IPv4' && !addr.internal)
62
67
  .address;
68
+ while (!await this.isPortFree(this.serverAddress.port))
69
+ this.serverAddress.port++;
63
70
  }
64
71
  static async startMainMicroService(appModule) {
65
72
  const app = await core_1.NestFactory.createMicroservice(appModule, {
@@ -72,6 +79,9 @@ class Microservice {
72
79
  await app.listen();
73
80
  return app;
74
81
  }
82
+ static get host() {
83
+ return `${this.serverAddress.address}:${this.serverAddress.port}`;
84
+ }
75
85
  }
76
86
  exports.Microservice = Microservice;
77
87
  Microservice.serverAddress = { family: 'IPv4', port: 3000, address: null };
@@ -1 +1 @@
1
- {"version":3,"file":"microservice.service.js","sourceRoot":"","sources":["../../src/microservice/microservice.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"microservice.service.js","sourceRoot":"","sources":["../../src/microservice/microservice.service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1 @@
1
- export declare class TCPService {
2
- static sendMessage(service: any, action: string, resource?: string, payload?: any): Promise<any>;
3
- }
1
+ export declare function RestrictSender(allowedSenders: string[]): <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -1,40 +1,43 @@
1
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
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TCPService = void 0;
4
- const microservices_1 = require("@nestjs/microservices");
5
- const rxjs_1 = require("rxjs");
6
- const utils = require("../utils");
7
- const consul_1 = require("./consul");
8
- class TCPService {
9
- static async sendMessage(service, action, resource, payload) {
10
- const client = await microservices_1.ClientProxyFactory.create({
11
- transport: microservices_1.Transport.TCP,
12
- options: await consul_1.Consul.getServiceURI(service),
13
- });
14
- try {
15
- payload.sender = await utils.microServiceName();
16
- let response$ = await client.send([resource, action].join("/"), payload).pipe((0, rxjs_1.catchError)(err => {
17
- const errorPayload = typeof err === 'object' ? err : { message: String(err) };
18
- return (0, rxjs_1.throwError)(() => new Error(`[${service}] ${errorPayload.message}`));
19
- }));
20
- const watchdogTimeout = parseInt(process.env.WATCHDOG);
21
- if (!isNaN(watchdogTimeout) && watchdogTimeout > 0)
22
- response$ = response$.pipe((0, rxjs_1.timeout)({ first: watchdogTimeout }));
23
- response$ = response$.pipe((0, rxjs_1.defaultIfEmpty)(null));
24
- const result = await (0, rxjs_1.lastValueFrom)(response$);
25
- if (result?.error)
26
- throw new Error(`[${service}] ${result.message}`);
27
- return result;
28
- }
29
- finally {
30
- try {
31
- await client.close();
32
- }
33
- catch (closeError) {
34
- console.error("Error closing client:", closeError.message);
35
- }
12
+ exports.RestrictSender = RestrictSender;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const RESTRICT_SENDER_KEY = 'restrict_sender';
16
+ function RestrictSender(allowedSenders) {
17
+ return (0, common_1.applyDecorators)((0, common_1.SetMetadata)(RESTRICT_SENDER_KEY, allowedSenders), (0, common_1.UseInterceptors)(RestrictSenderInterceptor));
18
+ }
19
+ let RestrictSenderInterceptor = class RestrictSenderInterceptor {
20
+ constructor(reflector) {
21
+ this.reflector = reflector;
22
+ }
23
+ intercept(context, next) {
24
+ const ctx = context.switchToRpc();
25
+ const data = ctx.getData();
26
+ const handler = context.getHandler();
27
+ const target = context.getClass();
28
+ const allowedSenders = this.reflector.getAllAndOverride(RESTRICT_SENDER_KEY, [
29
+ context.getHandler(),
30
+ context.getClass(),
31
+ ]) || [];
32
+ const sender = data?.sender;
33
+ if (!allowedSenders.includes(sender)) {
34
+ throw new common_1.ForbiddenException(`Sender '${sender}' is not authorized`);
36
35
  }
36
+ return next.handle();
37
37
  }
38
- }
39
- exports.TCPService = TCPService;
38
+ };
39
+ RestrictSenderInterceptor = __decorate([
40
+ (0, common_1.Injectable)(),
41
+ __metadata("design:paramtypes", [core_1.Reflector])
42
+ ], RestrictSenderInterceptor);
40
43
  //# sourceMappingURL=tcp.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcp.service.js","sourceRoot":"","sources":["../../src/microservice/tcp.service.ts"],"names":[],"mappings":";;;AAAA,yDAAmF;AACnF,+BAAsF;AACtF,kCAAiC;AACjC,qCAAkC;AAElC,MAAa,UAAU;IACnB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAa,EAAC,QAAgB,EAAE,OAAQ;QACtE,MAAM,MAAM,GAAgB,MAAM,kCAAkB,CAAC,MAAM,CAAC;YACxD,SAAS,EAAE,yBAAS,CAAC,GAAG;YACxB,OAAO,EAAE,MAAM,eAAM,CAAC,aAAa,CAAC,OAAO,CAAC;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC;YACD,OAAO,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAA;YAC/C,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACxE,IAAA,iBAAU,EAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjG,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAAA,CAAC,CAAC,CAChF,CAAC;YACF,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC;gBAC9C,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;YACpE,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAA,qBAAc,EAAC,IAAI,CAAC,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAa,EAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE,KAAK;gBACb,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC;QAClB,CAAC;gBAYO,CAAC;YACL,IAAI,CAAC;gBACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AAxCD,gCAwCC"}
1
+ {"version":3,"file":"tcp.service.js","sourceRoot":"","sources":["../../src/microservice/tcp.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAeA,wCAKC;AApBD,2CASwB;AACxB,uCAAyC;AAGzC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAE9C,SAAgB,cAAc,CAAC,cAAwB;IACrD,OAAO,IAAA,wBAAe,EACpB,IAAA,oBAAW,EAAC,mBAAmB,EAAE,cAAc,CAAC,EAChD,IAAA,wBAAe,EAAC,yBAAyB,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED,IACM,yBAAyB,GAD/B,MACM,yBAAyB;IAC7B,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAE3B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAGlC,MAAM,cAAc,GAClB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAW,mBAAmB,EAAE;YAC9D,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,IAAI,EAAE,CAAC;QAEX,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,2BAAkB,CAAC,WAAW,MAAM,qBAAqB,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAxBK,yBAAyB;IAD9B,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GADpC,yBAAyB,CAwB9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haku-sci/utils",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "utils from haku-sci. Library only",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",