@open-rlb/nestjs-amqp 1.0.4 → 1.0.6
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/modules/broker/services/metadata-scanner.service.js +3 -3
- package/modules/broker/services/metadata-scanner.service.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/modules/broker/services/reflect.service.d.ts +0 -22
- package/modules/broker/services/reflect.service.js +0 -195
- package/modules/broker/services/reflect.service.js.map +0 -1
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import { ModuleRef, ModulesContainer } from '@nestjs/core';
|
|
3
|
-
import 'reflect-metadata';
|
|
4
|
-
import { AmqpConnection } from '../../../amqp-lib';
|
|
5
|
-
import { BrokerConfig } from '../config/broker.config';
|
|
6
|
-
import { BrokerTopic } from '../config/topics.config';
|
|
7
|
-
import { AppConfig, UtilsService } from './utils.service';
|
|
8
|
-
export declare class MetadataScannerService implements OnModuleInit {
|
|
9
|
-
private readonly moduleRef;
|
|
10
|
-
private readonly modulesContainer;
|
|
11
|
-
private readonly amqpConnection;
|
|
12
|
-
private readonly utils;
|
|
13
|
-
private readonly brokerConfig;
|
|
14
|
-
private readonly topicConfigurations;
|
|
15
|
-
private readonly appConfig;
|
|
16
|
-
private readonly logger;
|
|
17
|
-
constructor(moduleRef: ModuleRef, modulesContainer: ModulesContainer, amqpConnection: AmqpConnection, utils: UtilsService, brokerConfig: BrokerConfig, topicConfigurations: BrokerTopic[], appConfig: AppConfig);
|
|
18
|
-
private readonly metadata;
|
|
19
|
-
onModuleInit(): Promise<void>;
|
|
20
|
-
private executeFunction;
|
|
21
|
-
removeDefaultsFromParams(params: string[]): string[];
|
|
22
|
-
}
|
|
@@ -1,195 +0,0 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
|
-
var MetadataScannerService_1;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.MetadataScannerService = void 0;
|
|
17
|
-
const common_1 = require("@nestjs/common");
|
|
18
|
-
const core_1 = require("@nestjs/core");
|
|
19
|
-
require("reflect-metadata");
|
|
20
|
-
const rxjs_1 = require("rxjs");
|
|
21
|
-
const util_1 = require("util");
|
|
22
|
-
const amqp_lib_1 = require("../../../amqp-lib");
|
|
23
|
-
const const_1 = require("../const");
|
|
24
|
-
const utils_service_1 = require("./utils.service");
|
|
25
|
-
let MetadataScannerService = MetadataScannerService_1 = class MetadataScannerService {
|
|
26
|
-
constructor(moduleRef, modulesContainer, amqpConnection, utils, brokerConfig, topicConfigurations, appConfig) {
|
|
27
|
-
this.moduleRef = moduleRef;
|
|
28
|
-
this.modulesContainer = modulesContainer;
|
|
29
|
-
this.amqpConnection = amqpConnection;
|
|
30
|
-
this.utils = utils;
|
|
31
|
-
this.brokerConfig = brokerConfig;
|
|
32
|
-
this.topicConfigurations = topicConfigurations;
|
|
33
|
-
this.appConfig = appConfig;
|
|
34
|
-
this.logger = new common_1.Logger(MetadataScannerService_1.name);
|
|
35
|
-
this.metadata = {};
|
|
36
|
-
}
|
|
37
|
-
async onModuleInit() {
|
|
38
|
-
for (const [_, module] of this.modulesContainer.entries()) {
|
|
39
|
-
for (const [providerKey, provider] of module.providers) {
|
|
40
|
-
try {
|
|
41
|
-
let instance;
|
|
42
|
-
if (!provider || !provider.metatype) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
const isScoped = provider.scope === common_1.Scope.REQUEST || provider.scope === common_1.Scope.TRANSIENT;
|
|
46
|
-
if (isScoped) {
|
|
47
|
-
instance = await this.moduleRef.resolve(providerKey);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
instance = this.moduleRef.get(providerKey, { strict: false });
|
|
51
|
-
}
|
|
52
|
-
if (instance) {
|
|
53
|
-
const metadata = Reflect.getMetadata(const_1.RLB_BROKER_METHOD_METADATA_KEY, instance.constructor) || [];
|
|
54
|
-
if (metadata.length) {
|
|
55
|
-
for (const method of metadata) {
|
|
56
|
-
const topic = this.metadata[method.topic];
|
|
57
|
-
if (!topic) {
|
|
58
|
-
this.metadata[method.topic] = {};
|
|
59
|
-
}
|
|
60
|
-
const action = this.metadata[method.topic][method.action];
|
|
61
|
-
if (!action) {
|
|
62
|
-
this.metadata[method.topic][method.action] = {};
|
|
63
|
-
}
|
|
64
|
-
const paramMetadata = Reflect.getMetadata(const_1.RLB_BROKER_PARAM_METADATA_KEY, instance, method.methodName) || [];
|
|
65
|
-
this.metadata[method.topic][method.action] = {
|
|
66
|
-
service: instance,
|
|
67
|
-
method: instance[method.methodName],
|
|
68
|
-
params: this.removeDefaultsFromParams(method.params || []).reduce((acc, param, index) => {
|
|
69
|
-
const meta = Object.assign({}, paramMetadata.find((p) => p.index === index) || { source: 'body' });
|
|
70
|
-
delete meta.index;
|
|
71
|
-
acc[param] = meta;
|
|
72
|
-
return acc;
|
|
73
|
-
}, {})
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (error) { }
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
for (const [topic, actions] of Object.entries(this.metadata)) {
|
|
83
|
-
const cfgTopic = this.topicConfigurations.find(t => t.name === topic);
|
|
84
|
-
const queue = this.brokerConfig.queues.find(q => q.name === cfgTopic.queue);
|
|
85
|
-
const exchange = this.brokerConfig.exchanges.find(e => e.name === queue.exchange);
|
|
86
|
-
if (!topic)
|
|
87
|
-
throw new Error(`Topic ${cfgTopic} not found in configuration`);
|
|
88
|
-
if (!queue)
|
|
89
|
-
throw new Error(`Queue ${cfgTopic.queue} not found in configuration for topic ${cfgTopic}`);
|
|
90
|
-
if (!exchange)
|
|
91
|
-
throw new Error(`Exchange ${queue.exchange} not found in configuration for queue ${queue.name}`);
|
|
92
|
-
if (exchange.type === 'topic') {
|
|
93
|
-
if (!queue.routingKey)
|
|
94
|
-
throw new Error(`Queue ${queue.name} has no routing key`);
|
|
95
|
-
}
|
|
96
|
-
for (const [action, { method, service }] of Object.entries(actions)) {
|
|
97
|
-
this.logger.log(`Binded function \`${service.constructor.name}.${method.name}\` to action \`${action}\`. Queue \`${queue.name}/${topic}\``);
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
await this.amqpConnection.createRpc(async (msg, rawMessage, headers) => {
|
|
101
|
-
const payload = msg.payload || {};
|
|
102
|
-
const method = actions[msg.action];
|
|
103
|
-
const args = [];
|
|
104
|
-
if (!method) {
|
|
105
|
-
this.logger.error(`Action ${msg.action} not managed by any service`);
|
|
106
|
-
return new amqp_lib_1.Nack(false);
|
|
107
|
-
}
|
|
108
|
-
for (const [param, meta] of Object.entries(method.params)) {
|
|
109
|
-
if (meta.source === 'header') {
|
|
110
|
-
args.push(headers[meta.name || param]);
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
if (meta.source === 'body-full') {
|
|
114
|
-
args.push(payload);
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
if (meta.source === 'body') {
|
|
118
|
-
args.push(payload[meta.name || param]);
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
if (meta.source === 'tag') {
|
|
122
|
-
args.push(rawMessage.fields.consumerTag);
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
try {
|
|
127
|
-
const result = await this.executeFunction(method.service, method.method, args);
|
|
128
|
-
return result;
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
this.logger.error(`An error occurred while processing message for topic ${cfgTopic.name}: ${err.message}`);
|
|
132
|
-
return new amqp_lib_1.Nack(true);
|
|
133
|
-
}
|
|
134
|
-
}, {
|
|
135
|
-
queue: queue.name,
|
|
136
|
-
exchange: queue.exchange,
|
|
137
|
-
routingKey: queue.routingKey,
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
this.logger.error(`Error subscribing to ${topic}::${queue.name}::${queue.routingKey}`);
|
|
142
|
-
this.logger.error((0, util_1.inspect)(error));
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
async executeFunction(context, fn, params) {
|
|
147
|
-
try {
|
|
148
|
-
let ret;
|
|
149
|
-
if (typeof fn === 'function') {
|
|
150
|
-
const _ret = await fn.apply(context, params);
|
|
151
|
-
if ((0, rxjs_1.isObservable)(_ret)) {
|
|
152
|
-
ret = (0, rxjs_1.lastValueFrom)(_ret);
|
|
153
|
-
}
|
|
154
|
-
else if (_ret instanceof Promise && typeof _ret.then === 'function') {
|
|
155
|
-
ret = _ret;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
ret = new Promise((r) => { r(_ret); });
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
ret = new Promise(r => r(undefined));
|
|
163
|
-
}
|
|
164
|
-
const _ret = await ret;
|
|
165
|
-
return { success: true, payload: _ret };
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
return { success: false, error: this.utils.error2Object(error, this.appConfig.environment !== 'production') };
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
removeDefaultsFromParams(params) {
|
|
172
|
-
const cleaned = [];
|
|
173
|
-
for (let i = 0; i < params.length; i++) {
|
|
174
|
-
if (params[i] === '=') {
|
|
175
|
-
i++;
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
cleaned.push(params[i]);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return cleaned;
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
exports.MetadataScannerService = MetadataScannerService;
|
|
185
|
-
exports.MetadataScannerService = MetadataScannerService = MetadataScannerService_1 = __decorate([
|
|
186
|
-
(0, common_1.Injectable)(),
|
|
187
|
-
__param(4, (0, common_1.Inject)(const_1.RLB_AMQP_BROKER_OPTIONS)),
|
|
188
|
-
__param(5, (0, common_1.Inject)(const_1.RLB_AMQP_TOPIC_CONNECTION)),
|
|
189
|
-
__param(6, (0, common_1.Inject)(const_1.RLB_AMQP_APP_OPTIONS)),
|
|
190
|
-
__metadata("design:paramtypes", [core_1.ModuleRef,
|
|
191
|
-
core_1.ModulesContainer,
|
|
192
|
-
amqp_lib_1.AmqpConnection,
|
|
193
|
-
utils_service_1.UtilsService, Object, Array, Object])
|
|
194
|
-
], MetadataScannerService);
|
|
195
|
-
//# sourceMappingURL=reflect.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reflect.service.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/broker/services/reflect.service.ts"],"names":[],"mappings":"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"}
|