@haku-sci/utils 1.4.10 → 1.6.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.
package/README.md CHANGED
@@ -29,11 +29,30 @@ the start_services.bat method allows to run all required services from docker:
29
29
 
30
30
  if the service uses a database PostgreSQL, and this database doesn't exist in the system, it will be created automatically (require the librarie pg)
31
31
 
32
+ ## RabbitMQ
33
+
34
+ Using RabbitMQService, lets implement dispatch of messages with an option to wait that all messages have been processed. A watchdog of 10 seconds raise an error Gateway timeout
35
+ If the option is activated, a queue ack_queue_\<name of the microservice\> is created
36
+
37
+ The decorator HakuSciSubscriber allows to listen for a specific keyword.
38
+ Each microservice which register with this decorator will have automatically a queue created, with its name.
39
+ The exchanger is amq.topic
40
+
32
41
  ## launch.json
33
42
 
34
- The launch.json file allows to run all services (the project libs must be in the same directory as "services", which contains all services)
43
+ The launch.json file allows to run all services (the microservice libs must be in the same directory as "services", which contains all services)
44
+
45
+ ## utils
35
46
 
36
- ## other
47
+ ### executeFunction
37
48
 
38
- Finally, the method executeFunction into the utils library lets call dynamically the function of an object, with parameters
49
+ lets call dynamically the function of an object, with parameters
39
50
  (Format: object as class, function name as string, parameters as dictionary)
51
+
52
+ ### getSortedParameters
53
+
54
+ for a function, get available parameters as dictionary, and return a list of parameters in correct order, to be run for this function (...args)
55
+
56
+ ### withWatchdog
57
+
58
+ Add a watchdog to a promise
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from './microservice/microservice.module';
2
1
  export * from './microservice/microservice.service';
2
+ export * from './rabbit-mq/rabbit-mq.service';
3
3
  export * from './utils';
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ 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("./microservice/microservice.module"), exports);
18
17
  __exportStar(require("./microservice/microservice.service"), exports);
18
+ __exportStar(require("./rabbit-mq/rabbit-mq.service"), exports);
19
19
  __exportStar(require("./utils"), exports);
20
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qEAAmD;AACnD,sEAAoD;AACpD,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sEAAoD;AACpD,gEAA8C;AAC9C,0CAAwB"}
@@ -1,14 +1,11 @@
1
1
  import { INestMicroservice } from '@nestjs/common';
2
2
  export declare class MicroserviceService {
3
3
  private static serviceAddress;
4
- private static msName;
5
4
  private static getServiceURI;
6
5
  private static registerService;
7
6
  private static getServerAddress;
8
7
  private static startMainMicroService;
9
8
  private static startRabbitMQMicroService;
10
- static bootstrapMicroservice(appModule: any, routingKeys?: ("post" | "delete" | "patch" | "put")[]): Promise<INestMicroservice>;
9
+ static bootstrapMicroservice(appModule: any): Promise<INestMicroservice>;
11
10
  static sendTCPMessage(service: any, messagePattern: any, payload?: any): Promise<any>;
12
- static emitTCPEvent(messagePattern: ("post" | "delete" | "patch" | "put")[], userId: string, entityId: string, queue?: string, payload?: any): Promise<void>;
13
- static projectName(): Promise<string>;
14
11
  }
@@ -1,24 +1,14 @@
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 MicroserviceService_1;
9
2
  Object.defineProperty(exports, "__esModule", { value: true });
10
3
  exports.MicroserviceService = void 0;
11
4
  const common_1 = require("@nestjs/common");
12
- const promises_1 = require("fs/promises");
13
- const path = require("path");
14
5
  const core_1 = require("@nestjs/core");
15
6
  const microservices_1 = require("@nestjs/microservices");
16
7
  const net = require("net");
17
8
  const axios_1 = require("axios");
18
9
  const rxjs_1 = require("rxjs");
19
- const amqp = require("amqplib");
20
- const HAKU_SCI_EXCHANGE = 'Haku-SciExchange';
21
- let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
10
+ const utils = require("../utils");
11
+ class MicroserviceService {
22
12
  static async getServiceURI(serviceName) {
23
13
  const response = await axios_1.default.get(`${process.env["CONSUL_URL"]}/v1/catalog/service/${serviceName}`);
24
14
  const serviceInfo = response.data;
@@ -36,7 +26,7 @@ let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
36
26
  }
37
27
  }
38
28
  static async registerService() {
39
- const projectName = await this.projectName();
29
+ const projectName = await utils.projectName();
40
30
  const serviceData = {
41
31
  ID: projectName,
42
32
  Name: projectName,
@@ -55,13 +45,15 @@ let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
55
45
  static async getServerAddress() {
56
46
  if (process.env.AWS_REGION)
57
47
  return {
58
- address: `haku-sci-${await this.projectName()}-${process.env.BRANCH}.${process.env.AWS_REGION}.elasticbeanstalk.com`,
48
+ address: `haku-sci-${await utils.projectName()}-${process.env.BRANCH}.${process.env.AWS_REGION}.elasticbeanstalk.com`,
59
49
  port: 3000
60
50
  };
61
51
  const server = net.createServer();
62
52
  server.listen(0);
63
53
  await new Promise((resolve) => server.once('listening', resolve));
64
54
  const address = server.address();
55
+ address.address = 'localhost';
56
+ address.family = 'IPv4';
65
57
  server.close();
66
58
  return address;
67
59
  }
@@ -73,42 +65,25 @@ let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
73
65
  }
74
66
  });
75
67
  await app.listen();
76
- const tcpServer = app.server.server;
77
- this.serviceAddress = tcpServer.address();
78
68
  return app;
79
69
  }
80
- static async startRabbitMQMicroService(appModule, routingKeys) {
81
- const queue = await this.projectName();
70
+ static async startRabbitMQMicroService(appModule) {
71
+ const queue = await utils.projectName();
82
72
  const app = await core_1.NestFactory.createMicroservice(appModule, {
83
73
  transport: microservices_1.Transport.RMQ,
84
74
  options: {
85
75
  urls: [process.env.RABBITMQ_URL],
86
76
  queue: queue,
87
77
  queueOptions: {
88
- durable: false,
78
+ durable: true,
89
79
  },
90
80
  noAck: false,
91
81
  },
92
82
  });
93
83
  await app.listen();
94
- if (!routingKeys)
95
- return app;
96
- const connection = await amqp.connect(process.env.RABBITMQ_URL);
97
- const channel = await connection.createChannel();
98
- await channel.assertExchange(HAKU_SCI_EXCHANGE, 'direct', { durable: true });
99
- await channel.assertQueue(queue, { durable: false });
100
- const bindingPromises = routingKeys.map(async (routingKey) => {
101
- await channel.bindQueue(queue, HAKU_SCI_EXCHANGE, routingKey);
102
- });
103
- await Promise.all([
104
- channel.assertQueue(queue, { durable: false }),
105
- ...bindingPromises,
106
- ]);
107
- await channel.close();
108
- await connection.close();
109
84
  return app;
110
85
  }
111
- static async bootstrapMicroservice(appModule, routingKeys) {
86
+ static async bootstrapMicroservice(appModule) {
112
87
  this.serviceAddress = await this.getServerAddress();
113
88
  if (process.env["RDS_DBNAME"]) {
114
89
  const postGresService = require('./postgres.service');
@@ -116,7 +91,7 @@ let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
116
91
  }
117
92
  const app = await this.startMainMicroService(appModule);
118
93
  if (process.env.RABBITMQ_URL)
119
- await this.startRabbitMQMicroService(appModule, routingKeys);
94
+ await this.startRabbitMQMicroService(appModule);
120
95
  if (process.env["CONSUL_URL"])
121
96
  this.registerService();
122
97
  return app;
@@ -124,7 +99,7 @@ let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
124
99
  static async sendTCPMessage(service, messagePattern, payload) {
125
100
  const client = microservices_1.ClientProxyFactory.create({
126
101
  transport: microservices_1.Transport.TCP,
127
- options: await MicroserviceService_1.getServiceURI(service),
102
+ options: await MicroserviceService.getServiceURI(service),
128
103
  });
129
104
  try {
130
105
  const result = await (0, rxjs_1.lastValueFrom)(await client.send(messagePattern, payload));
@@ -134,43 +109,6 @@ let MicroserviceService = MicroserviceService_1 = class MicroserviceService {
134
109
  client.close();
135
110
  }
136
111
  }
137
- static async emitTCPEvent(messagePattern, userId, entityId, queue, payload) {
138
- const client = microservices_1.ClientProxyFactory.create({
139
- options: {
140
- urls: [process.env.RABBITMQ_URL],
141
- queue: queue,
142
- queueOptions: {
143
- durable: false,
144
- },
145
- headers: {
146
- entityId: entityId
147
- },
148
- properties: {
149
- headers: {
150
- userId: userId
151
- },
152
- },
153
- exchange: HAKU_SCI_EXCHANGE,
154
- },
155
- });
156
- try {
157
- await client.emit(messagePattern, payload);
158
- }
159
- finally {
160
- client.close();
161
- }
162
- }
163
- static async projectName() {
164
- if (!this.msName) {
165
- var data = await (0, promises_1.readFile)(path.join(process.cwd(), 'package.json'));
166
- const { name } = JSON.parse(data.toString());
167
- this.msName = name;
168
- }
169
- return this.msName;
170
- }
171
- };
112
+ }
172
113
  exports.MicroserviceService = MicroserviceService;
173
- exports.MicroserviceService = MicroserviceService = MicroserviceService_1 = __decorate([
174
- (0, common_1.Injectable)()
175
- ], MicroserviceService);
176
114
  //# sourceMappingURL=microservice.service.js.map
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export declare const HAKU_SCI_EXCHANGE = "amq.topic";
2
+ export declare const ACK_QUEUE = "ack_queue";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ACK_QUEUE = exports.HAKU_SCI_EXCHANGE = void 0;
4
+ exports.HAKU_SCI_EXCHANGE = 'amq.topic';
5
+ exports.ACK_QUEUE = 'ack_queue';
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/rabbit-mq/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAChC,QAAA,SAAS,GAAG,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare class RabbitMqModule {
2
+ }
@@ -0,0 +1,34 @@
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.RabbitMqModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const rabbit_mq_service_1 = require("./rabbit-mq.service");
12
+ const nestjs_rabbitmq_1 = require("@golevelup/nestjs-rabbitmq");
13
+ const utils = require("./constants");
14
+ let RabbitMqModule = class RabbitMqModule {
15
+ };
16
+ exports.RabbitMqModule = RabbitMqModule;
17
+ exports.RabbitMqModule = RabbitMqModule = __decorate([
18
+ (0, common_1.Module)({
19
+ imports: [
20
+ nestjs_rabbitmq_1.RabbitMQModule.forRoot({
21
+ exchanges: [
22
+ {
23
+ name: utils.HAKU_SCI_EXCHANGE,
24
+ type: 'topic',
25
+ },
26
+ ],
27
+ uri: process.env.RABBITMQ_URL,
28
+ }),
29
+ ],
30
+ providers: [rabbit_mq_service_1.RabbitMqService],
31
+ exports: [rabbit_mq_service_1.RabbitMqService]
32
+ })
33
+ ], RabbitMqModule);
34
+ //# sourceMappingURL=rabbit-mq.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbit-mq.module.js","sourceRoot":"","sources":["../../src/rabbit-mq/rabbit-mq.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAsD;AACtD,gEAA4D;AAC5D,qCAAqC;AAiB9B,IAAM,cAAc,GAApB,MAAM,cAAc;CAE1B,CAAA;AAFY,wCAAc;yBAAd,cAAc;IAf1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,gCAAc,CAAC,OAAO,CAAC;gBACrB,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,KAAK,CAAC,iBAAiB;wBAC7B,IAAI,EAAE,OAAO;qBACd;iBACF;gBACD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;aAC9B,CAAC;SACH;QACD,SAAS,EAAE,CAAC,mCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,mCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAE1B"}
@@ -0,0 +1,22 @@
1
+ import { AmqpConnection } from '@golevelup/nestjs-rabbitmq';
2
+ export declare class RabbitMqService {
3
+ static instance: RabbitMqService;
4
+ waitAckownledge: Record<string, {
5
+ count: number;
6
+ resolve: () => void;
7
+ reject: () => void;
8
+ }>;
9
+ amqpConnection: AmqpConnection;
10
+ projectName: string;
11
+ ackAttached: boolean;
12
+ static get(): Promise<RabbitMqService>;
13
+ private constructor();
14
+ private init;
15
+ private get ackQueueName();
16
+ dispatchMessage(messagePattern: string, userId: string, id: string, payload?: Record<string, any>, requireAck?: boolean): Promise<void>;
17
+ sendAck(message: any): void;
18
+ updateAck(correlationId: string): void;
19
+ }
20
+ export declare function HakuSubscribe(options: {
21
+ routingKey: string;
22
+ }): MethodDecorator;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RabbitMqService = void 0;
4
+ exports.HakuSubscribe = HakuSubscribe;
5
+ const nestjs_rabbitmq_1 = require("@golevelup/nestjs-rabbitmq");
6
+ const rabbitMQutils = require("./constants");
7
+ const utils = require("../utils");
8
+ const axios_1 = require("axios");
9
+ const rabbitMqApiAuth = {
10
+ username: process.env.RABBITMQ_USERNAME,
11
+ password: process.env.RABBITMQ_PASSWORD,
12
+ };
13
+ class RabbitMqService {
14
+ static async get() {
15
+ if (!this.instance) {
16
+ this.instance = new RabbitMqService();
17
+ await this.instance.init();
18
+ }
19
+ return this.instance;
20
+ }
21
+ constructor() {
22
+ this.waitAckownledge = {};
23
+ this.ackAttached = false;
24
+ }
25
+ async init() {
26
+ this.projectName = await utils.projectName();
27
+ this.amqpConnection = new nestjs_rabbitmq_1.AmqpConnection({
28
+ exchanges: [
29
+ {
30
+ name: rabbitMQutils.HAKU_SCI_EXCHANGE,
31
+ type: 'topic',
32
+ }
33
+ ],
34
+ uri: process.env.RABBITMQ_URL,
35
+ });
36
+ await this.amqpConnection.init();
37
+ }
38
+ get ackQueueName() {
39
+ return `${this.projectName}_${rabbitMQutils.ACK_QUEUE}`;
40
+ }
41
+ async dispatchMessage(messagePattern, userId, id, payload = {}, requireAck = false) {
42
+ const options = { headers: { userId: userId, id: id }, correlationId: null };
43
+ let p;
44
+ if (requireAck) {
45
+ if (!this.ackAttached) {
46
+ this.ackAttached = true;
47
+ await this.amqpConnection.channel.assertQueue(this.ackQueueName, { durable: true });
48
+ this.amqpConnection.channel.consume(this.ackQueueName, async (message) => {
49
+ const ackMessage = JSON.parse(message.content.toString());
50
+ this.updateAck(ackMessage.properties.correlationId);
51
+ this.amqpConnection.channel.ack(message);
52
+ });
53
+ }
54
+ options.headers["replyTo"] = this.ackQueueName;
55
+ options.correlationId = Date.now().toString();
56
+ ;
57
+ const response = await axios_1.default.get(`${process.env.RABBITMQ_API_URL}/bindings`, { auth: rabbitMqApiAuth });
58
+ let countExpectedAcknowledged = response.data.filter((binding) => binding.source === rabbitMQutils.HAKU_SCI_EXCHANGE && binding.routing_key === messagePattern).length;
59
+ p = new Promise((resolve, reject) => {
60
+ this.waitAckownledge[options.correlationId] = { count: countExpectedAcknowledged, resolve: resolve, reject: reject };
61
+ });
62
+ p = utils.withWatchdog(p, 10000);
63
+ }
64
+ ;
65
+ await this.amqpConnection.publish(rabbitMQutils.HAKU_SCI_EXCHANGE, messagePattern, payload, options);
66
+ return p;
67
+ }
68
+ sendAck(message) {
69
+ this.amqpConnection.publish('', message.properties.headers.replyTo, message);
70
+ }
71
+ updateAck(correlationId) {
72
+ if (this.waitAckownledge[correlationId]) {
73
+ this.waitAckownledge[correlationId].count--;
74
+ if (this.waitAckownledge[correlationId].count == 0) {
75
+ this.waitAckownledge[correlationId].resolve();
76
+ delete this.waitAckownledge[correlationId];
77
+ }
78
+ }
79
+ }
80
+ }
81
+ exports.RabbitMqService = RabbitMqService;
82
+ function HakuSubscribe(options) {
83
+ return function (target, key, descriptor) {
84
+ const originalMethod = descriptor.value;
85
+ descriptor.value = async function (...args) {
86
+ const message = args[1];
87
+ try {
88
+ await originalMethod.apply(this, args);
89
+ }
90
+ catch (error) {
91
+ message.properties.headers["error"] = error;
92
+ }
93
+ finally {
94
+ if (message.properties.headers.replyTo) {
95
+ try {
96
+ await RabbitMqService.get().then((rabbitMqService) => {
97
+ rabbitMqService.sendAck(message);
98
+ });
99
+ }
100
+ catch (e) {
101
+ console.log(e);
102
+ }
103
+ }
104
+ ;
105
+ }
106
+ };
107
+ utils.projectName().then((projectName) => {
108
+ (0, nestjs_rabbitmq_1.RabbitSubscribe)({
109
+ routingKey: options.routingKey,
110
+ exchange: rabbitMQutils.HAKU_SCI_EXCHANGE,
111
+ queue: projectName,
112
+ })(target, key, descriptor);
113
+ });
114
+ };
115
+ }
116
+ //# sourceMappingURL=rabbit-mq.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbit-mq.service.js","sourceRoot":"","sources":["../../src/rabbit-mq/rabbit-mq.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testing_1 = require("@nestjs/testing");
4
+ const rabbit_mq_service_1 = require("./rabbit-mq.service");
5
+ describe('RabbitMqService', () => {
6
+ let service;
7
+ beforeEach(async () => {
8
+ const module = await testing_1.Test.createTestingModule({
9
+ providers: [rabbit_mq_service_1.RabbitMqService],
10
+ }).compile();
11
+ service = module.get(rabbit_mq_service_1.RabbitMqService);
12
+ });
13
+ it('should be defined', () => {
14
+ expect(service).toBeDefined();
15
+ });
16
+ });
17
+ //# sourceMappingURL=rabbit-mq.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbit-mq.service.spec.js","sourceRoot":"","sources":["../../src/rabbit-mq/rabbit-mq.service.spec.ts"],"names":[],"mappings":";;AAAA,6CAAsD;AACtD,2DAAsD;AAEtD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,OAAwB,CAAC;IAE7B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,MAAM,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC3D,SAAS,EAAE,CAAC,mCAAe,CAAC;SAC7B,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,OAAO,GAAG,MAAM,CAAC,GAAG,CAAkB,mCAAe,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const HAKU_SCI_EXCHANGE = "amq.topic";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HAKU_SCI_EXCHANGE = void 0;
4
+ exports.HAKU_SCI_EXCHANGE = 'amq.topic';
5
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/rabbit-mq/utils.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,WAAW,CAAC"}
package/dist/utils.d.ts CHANGED
@@ -1 +1,3 @@
1
1
  export declare function executeFunction<F extends (...args: any[]) => any>(parent: any, funcName: string, params: Record<string, any>): ReturnType<F>;
2
+ export declare function projectName(): Promise<string>;
3
+ export declare function withWatchdog<T>(promise: Promise<T>, timeoutMs: number): Promise<T>;
package/dist/utils.js CHANGED
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.executeFunction = executeFunction;
4
+ exports.projectName = projectName;
5
+ exports.withWatchdog = withWatchdog;
6
+ const promises_1 = require("fs/promises");
7
+ const path = require("path");
8
+ const common_1 = require("@nestjs/common");
4
9
  function executeFunction(parent, funcName, params) {
5
10
  const func = parent[funcName];
6
11
  const boundFunc = func.bind(parent);
@@ -19,4 +24,28 @@ function getFunctionParameterNames(func) {
19
24
  .map(param => param.trim())
20
25
  .filter(param => param);
21
26
  }
27
+ async function projectName() {
28
+ if (!this.msName) {
29
+ var data = await (0, promises_1.readFile)(path.join(process.cwd(), 'package.json'));
30
+ const { name } = JSON.parse(data.toString());
31
+ this.msName = name;
32
+ }
33
+ return this.msName;
34
+ }
35
+ function withWatchdog(promise, timeoutMs) {
36
+ return new Promise((resolve, reject) => {
37
+ const timer = setTimeout(() => {
38
+ reject(new common_1.HttpException(`Gateway Timeout`, common_1.HttpStatus.GATEWAY_TIMEOUT));
39
+ }, timeoutMs);
40
+ promise
41
+ .then((result) => {
42
+ clearTimeout(timer);
43
+ resolve(result);
44
+ })
45
+ .catch((err) => {
46
+ clearTimeout(timer);
47
+ reject(err);
48
+ });
49
+ });
50
+ }
22
51
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAAA,0CAgBC;AAhBD,SAAgB,eAAe,CAC7B,MAAW,EACX,QAAgB,EAChB,MAA2B;IAE3B,MAAM,IAAI,GAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAGpC,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAGnD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAGlD,OAAO,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5B,CAAC;AAGD,SAAS,yBAAyB,CAAC,IAAc;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAIA,0CAgBC;AAeD,kCAYC;AAED,oCAgBC;AAjED,0CAAuC;AACvC,6BAA6B;AAC7B,2CAA2D;AAE3D,SAAgB,eAAe,CAC7B,MAAW,EACX,QAAgB,EAChB,MAA2B;IAE3B,MAAM,IAAI,GAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAGpC,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAGnD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAGlD,OAAO,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAc;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,IAAI,GAAG,MAAM,IAAA,mBAAQ,EACvB,IAAI,CAAC,IAAI,CACP,OAAO,CAAC,GAAG,EAAE,EACb,cAAc,CACf,CACF,CAAA;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,SAAgB,YAAY,CAAI,OAAmB,EAAE,SAAiB;IACpE,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,IAAI,sBAAa,CAAC,iBAAiB,EAAC,mBAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1E,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,OAAO;aACJ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haku-sci/utils",
3
- "version": "1.4.10",
3
+ "version": "1.6.0",
4
4
  "description": "utils from haku-sci. Library only",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,9 +13,12 @@
13
13
  "pg": "^8.13.1"
14
14
  },
15
15
  "dependencies": {
16
- "axios": "^1.7.9",
16
+ "@golevelup/nestjs-rabbitmq": "^5.7.0",
17
17
  "amqp-connection-manager": "^4.1.14",
18
- "amqplib": "^0.10.5"
18
+ "amqplib": "^0.10.5",
19
+ "axios": "^1.7.9",
20
+ "pg": "^8.13.1",
21
+ "uuid": "^11.0.5"
19
22
  },
20
23
  "devDependencies": {
21
24
  "@nestjs/testing": "^10.4.1",