@rsdk/nats.transport 5.7.0 → 5.8.0-next.1
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/events.deserializer.d.ts +4 -3
- package/dist/events.deserializer.js +2 -2
- package/dist/events.deserializer.js.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/jetstream/constants.d.ts +5 -0
- package/dist/jetstream/constants.js +9 -0
- package/dist/jetstream/constants.js.map +1 -0
- package/dist/{metadata.decorator.d.ts → jetstream/consume.decorator.d.ts} +1 -1
- package/dist/{metadata.decorator.js → jetstream/consume.decorator.js} +2 -2
- package/dist/jetstream/consume.decorator.js.map +1 -0
- package/dist/jetstream/index.d.ts +7 -0
- package/dist/jetstream/index.js +24 -0
- package/dist/jetstream/index.js.map +1 -0
- package/dist/{nats-jetstream-errors.formatter.d.ts → jetstream/nats-jetstream-errors.formatter.d.ts} +1 -1
- package/dist/{nats-jetstream-errors.formatter.js → jetstream/nats-jetstream-errors.formatter.js} +2 -1
- package/dist/jetstream/nats-jetstream-errors.formatter.js.map +1 -0
- package/dist/jetstream/nats-jetstream-transport.module.js.map +1 -0
- package/dist/{nats-jetstream.config.d.ts → jetstream/nats-jetstream.config.d.ts} +1 -1
- package/dist/jetstream/nats-jetstream.config.js.map +1 -0
- package/dist/jetstream/nats-jetstream.headers.d.ts +10 -0
- package/dist/{nats.headers.js → jetstream/nats-jetstream.headers.js} +4 -4
- package/dist/jetstream/nats-jetstream.headers.js.map +1 -0
- package/dist/{nats-jetstream.transport.d.ts → jetstream/nats-jetstream.transport.d.ts} +1 -1
- package/dist/{nats-jetstream.transport.js → jetstream/nats-jetstream.transport.js} +5 -4
- package/dist/jetstream/nats-jetstream.transport.js.map +1 -0
- package/dist/jetstream/payload.decorator.js.map +1 -0
- package/dist/{server.d.ts → jetstream/server.d.ts} +12 -17
- package/dist/{server.js → jetstream/server.js} +38 -77
- package/dist/jetstream/server.js.map +1 -0
- package/dist/jetstream/types/consume.options.js.map +1 -0
- package/dist/jetstream/types/consumer-info.type.js.map +1 -0
- package/dist/jetstream/types/consumers-map.type.js.map +1 -0
- package/dist/{types → jetstream/types}/event-type-with-options.type.d.ts +1 -1
- package/dist/jetstream/types/event-type-with-options.type.js.map +1 -0
- package/dist/jetstream/types/index.d.ts +6 -0
- package/dist/jetstream/types/index.js +23 -0
- package/dist/jetstream/types/index.js.map +1 -0
- package/dist/jetstream/types/mapping.type.js.map +1 -0
- package/dist/jetstream/types/nats-jetstream-transport-options.type.js.map +1 -0
- package/dist/request/constants.d.ts +1 -0
- package/dist/request/constants.js +5 -0
- package/dist/request/constants.js.map +1 -0
- package/dist/request/consume-request.decorator.d.ts +3 -0
- package/dist/request/consume-request.decorator.js +10 -0
- package/dist/request/consume-request.decorator.js.map +1 -0
- package/dist/request/index.d.ts +4 -0
- package/dist/request/index.js +21 -0
- package/dist/request/index.js.map +1 -0
- package/dist/request/nats-request-errors.formatter.d.ts +7 -0
- package/dist/request/nats-request-errors.formatter.js +41 -0
- package/dist/request/nats-request-errors.formatter.js.map +1 -0
- package/dist/request/nats-request-errors.sender.d.ts +8 -0
- package/dist/request/nats-request-errors.sender.js +28 -0
- package/dist/request/nats-request-errors.sender.js.map +1 -0
- package/dist/request/nats-request-logger.interceptor.d.ts +13 -0
- package/dist/request/nats-request-logger.interceptor.js +89 -0
- package/dist/request/nats-request-logger.interceptor.js.map +1 -0
- package/dist/request/nats-request-transport.module.d.ts +2 -0
- package/dist/request/nats-request-transport.module.js +17 -0
- package/dist/request/nats-request-transport.module.js.map +1 -0
- package/dist/request/nats-request.config.d.ts +8 -0
- package/dist/request/nats-request.config.js +46 -0
- package/dist/request/nats-request.config.js.map +1 -0
- package/dist/{nats.headers.d.ts → request/nats-request.headers.d.ts} +1 -1
- package/dist/request/nats-request.headers.js +28 -0
- package/dist/request/nats-request.headers.js.map +1 -0
- package/dist/request/nats-request.transport.d.ts +22 -0
- package/dist/request/nats-request.transport.js +83 -0
- package/dist/request/nats-request.transport.js.map +1 -0
- package/dist/request/server.d.ts +59 -0
- package/dist/request/server.js +174 -0
- package/dist/request/server.js.map +1 -0
- package/dist/request/types/consume-request-options.type.d.ts +4 -0
- package/dist/request/types/consume-request-options.type.js +3 -0
- package/dist/request/types/consume-request-options.type.js.map +1 -0
- package/dist/request/types/formatted-nats-error.type.d.ts +8 -0
- package/dist/request/types/formatted-nats-error.type.js +3 -0
- package/dist/request/types/formatted-nats-error.type.js.map +1 -0
- package/dist/request/types/index.d.ts +3 -0
- package/dist/request/types/index.js +20 -0
- package/dist/request/types/index.js.map +1 -0
- package/dist/request/types/request-type-with-options.type.d.ts +6 -0
- package/dist/request/types/request-type-with-options.type.js +3 -0
- package/dist/request/types/request-type-with-options.type.js.map +1 -0
- package/package.json +6 -6
- package/src/events.deserializer.ts +8 -7
- package/src/index.ts +13 -5
- package/src/jetstream/constants.ts +6 -0
- package/src/{metadata.decorator.ts → jetstream/consume.decorator.ts} +2 -2
- package/src/jetstream/index.ts +7 -0
- package/src/{nats-jetstream-errors.formatter.ts → jetstream/nats-jetstream-errors.formatter.ts} +4 -2
- package/src/{nats-jetstream.config.ts → jetstream/nats-jetstream.config.ts} +1 -1
- package/src/{nats.headers.ts → jetstream/nats-jetstream.headers.ts} +1 -1
- package/src/{nats-jetstream.transport.ts → jetstream/nats-jetstream.transport.ts} +6 -5
- package/src/{server.ts → jetstream/server.ts} +65 -103
- package/src/{types → jetstream/types}/event-type-with-options.type.ts +1 -1
- package/src/jetstream/types/index.ts +6 -0
- package/src/{types → jetstream/types}/mapping.type.ts +4 -1
- package/src/request/constants.ts +1 -0
- package/src/request/consume-request.decorator.ts +18 -0
- package/src/request/index.ts +4 -0
- package/src/request/nats-request-errors.formatter.ts +49 -0
- package/src/request/nats-request-errors.sender.ts +39 -0
- package/src/request/nats-request-logger.interceptor.ts +89 -0
- package/src/request/nats-request-transport.module.ts +4 -0
- package/src/request/nats-request.config.ts +36 -0
- package/src/request/nats-request.headers.ts +33 -0
- package/src/request/nats-request.transport.ts +107 -0
- package/src/request/server.ts +260 -0
- package/src/request/types/consume-request-options.type.ts +5 -0
- package/src/request/types/formatted-nats-error.type.ts +9 -0
- package/src/request/types/index.ts +3 -0
- package/src/request/types/request-type-with-options.type.ts +8 -0
- package/dist/metadata.decorator.js.map +0 -1
- package/dist/nats-jetstream-errors.formatter.js.map +0 -1
- package/dist/nats-jetstream-transport.module.js.map +0 -1
- package/dist/nats-jetstream.config.js.map +0 -1
- package/dist/nats-jetstream.transport.js.map +0 -1
- package/dist/nats.headers.js.map +0 -1
- package/dist/payload.decorator.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/types/consume.options.js.map +0 -1
- package/dist/types/consumer-info.type.js.map +0 -1
- package/dist/types/consumers-map.type.js.map +0 -1
- package/dist/types/event-type-with-options.type.js.map +0 -1
- package/dist/types/mapping.type.js.map +0 -1
- package/dist/types/nats-jetstream-transport-options.type.js.map +0 -1
- /package/dist/{nats-jetstream-transport.module.d.ts → jetstream/nats-jetstream-transport.module.d.ts} +0 -0
- /package/dist/{nats-jetstream-transport.module.js → jetstream/nats-jetstream-transport.module.js} +0 -0
- /package/dist/{nats-jetstream.config.js → jetstream/nats-jetstream.config.js} +0 -0
- /package/dist/{payload.decorator.d.ts → jetstream/payload.decorator.d.ts} +0 -0
- /package/dist/{payload.decorator.js → jetstream/payload.decorator.js} +0 -0
- /package/dist/{types → jetstream/types}/consume.options.d.ts +0 -0
- /package/dist/{types → jetstream/types}/consume.options.js +0 -0
- /package/dist/{types → jetstream/types}/consumer-info.type.d.ts +0 -0
- /package/dist/{types → jetstream/types}/consumer-info.type.js +0 -0
- /package/dist/{types → jetstream/types}/consumers-map.type.d.ts +0 -0
- /package/dist/{types → jetstream/types}/consumers-map.type.js +0 -0
- /package/dist/{types → jetstream/types}/event-type-with-options.type.js +0 -0
- /package/dist/{types → jetstream/types}/mapping.type.d.ts +0 -0
- /package/dist/{types → jetstream/types}/mapping.type.js +0 -0
- /package/dist/{types → jetstream/types}/nats-jetstream-transport-options.type.d.ts +0 -0
- /package/dist/{types → jetstream/types}/nats-jetstream-transport-options.type.js +0 -0
- /package/src/{nats-jetstream-transport.module.ts → jetstream/nats-jetstream-transport.module.ts} +0 -0
- /package/src/{payload.decorator.ts → jetstream/payload.decorator.ts} +0 -0
- /package/src/{types → jetstream/types}/consume.options.ts +0 -0
- /package/src/{types → jetstream/types}/consumer-info.type.ts +0 -0
- /package/src/{types → jetstream/types}/consumers-map.type.ts +0 -0
- /package/src/{types → jetstream/types}/nats-jetstream-transport-options.type.ts +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NatsRequestServer = void 0;
|
|
4
|
+
const microservices_1 = require("@nestjs/microservices");
|
|
5
|
+
const core_1 = require("@rsdk/core");
|
|
6
|
+
const events_common_1 = require("@rsdk/events.common");
|
|
7
|
+
const logging_1 = require("@rsdk/logging");
|
|
8
|
+
const nats_common_1 = require("@rsdk/nats.common");
|
|
9
|
+
const nats_1 = require("nats");
|
|
10
|
+
const events_deserializer_1 = require("../events.deserializer");
|
|
11
|
+
/**
|
|
12
|
+
* Класс, реализующий сервер NATS Request.
|
|
13
|
+
*/
|
|
14
|
+
class NatsRequestServer extends microservices_1.Server {
|
|
15
|
+
options;
|
|
16
|
+
config;
|
|
17
|
+
transportId = microservices_1.Transport.NATS;
|
|
18
|
+
logger = logging_1.LoggerFactory.create(NatsRequestServer.name);
|
|
19
|
+
deserializer = new events_deserializer_1.EventsDeserializer();
|
|
20
|
+
nc;
|
|
21
|
+
/**
|
|
22
|
+
* Конструктор класса NatsRequestServer.
|
|
23
|
+
* @param options - Опции для подключения к NATS.
|
|
24
|
+
* @param config - Конфигурация приложения.
|
|
25
|
+
*/
|
|
26
|
+
constructor(options, config) {
|
|
27
|
+
super();
|
|
28
|
+
this.options = options;
|
|
29
|
+
this.config = config;
|
|
30
|
+
}
|
|
31
|
+
static isNatsContext(maybeNatsContext) {
|
|
32
|
+
return maybeNatsContext instanceof microservices_1.NatsContext;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Запускает сервер и устанавливает соединение.
|
|
36
|
+
* @param callback - Функция обратного вызова для выполнения после подключения.
|
|
37
|
+
*/
|
|
38
|
+
async listen(callback) {
|
|
39
|
+
if (!this.nc) {
|
|
40
|
+
this.nc = await (0, nats_1.connect)(this.options);
|
|
41
|
+
}
|
|
42
|
+
this.bindRequestHandlers();
|
|
43
|
+
callback();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Закрывает соединение с сервером.
|
|
47
|
+
*/
|
|
48
|
+
async close() {
|
|
49
|
+
await this.nc?.drain();
|
|
50
|
+
delete this.nc;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Добавляет обработчик сообщения.
|
|
54
|
+
* @param pattern Шаблон для сообщения.
|
|
55
|
+
* @param callback Функция-обработчик сообщения.
|
|
56
|
+
* @param isEventHandler Указывает, является ли обработчик обработчиком событий.
|
|
57
|
+
* @param extras Дополнительные параметры.
|
|
58
|
+
*/
|
|
59
|
+
addHandler(pattern, callback, isEventHandler = false, extras = {}) {
|
|
60
|
+
if (isEventHandler) {
|
|
61
|
+
throw new core_1.InternalException('Event handlers are not supported for this transport');
|
|
62
|
+
}
|
|
63
|
+
this.addRequestHandler(pattern, callback, extras);
|
|
64
|
+
}
|
|
65
|
+
addRequestHandler(pattern, callback, extras = {}) {
|
|
66
|
+
const requestPattern = this.getRequestPattern(pattern);
|
|
67
|
+
const type = this.getMessageType(requestPattern);
|
|
68
|
+
const requestFormattedPattern = this.getFormattedPattern(type);
|
|
69
|
+
this.deserializer.events.set(requestFormattedPattern, pattern);
|
|
70
|
+
super.addHandler(requestFormattedPattern, callback, false, extras);
|
|
71
|
+
}
|
|
72
|
+
getRequestPattern(pattern) {
|
|
73
|
+
if (typeof pattern !== 'object' ||
|
|
74
|
+
!Object.hasOwn(pattern, 'type') ||
|
|
75
|
+
!Object.hasOwn(pattern, 'options') ||
|
|
76
|
+
typeof pattern.options !== 'object' ||
|
|
77
|
+
!Object.hasOwn(pattern.options, 'response')) {
|
|
78
|
+
throw new core_1.InternalException('Invalid pattern type for request/response', {
|
|
79
|
+
details: { pattern },
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return pattern;
|
|
83
|
+
}
|
|
84
|
+
getFormattedPattern(eventType) {
|
|
85
|
+
if ((0, nats_common_1.isMessageType)(eventType)) {
|
|
86
|
+
return eventType.$type;
|
|
87
|
+
}
|
|
88
|
+
else if (typeof eventType === 'string') {
|
|
89
|
+
/**
|
|
90
|
+
* NOTE: сейчас если указывается строка, то мы исключаем decode формата protobuf.
|
|
91
|
+
* Наверное стоит разделить subject и декодеры на разные поля.
|
|
92
|
+
*/
|
|
93
|
+
return eventType;
|
|
94
|
+
}
|
|
95
|
+
throw new core_1.InternalException('Invalid pattern type: expected event type or string');
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Получает тип сообщения из шаблона.
|
|
99
|
+
* @param pattern - Шаблон для получения типа сообщения.
|
|
100
|
+
* @returns Тип сообщения.
|
|
101
|
+
*/
|
|
102
|
+
getMessageType(pattern) {
|
|
103
|
+
return typeof pattern === 'object' && 'type' in pattern
|
|
104
|
+
? pattern.type
|
|
105
|
+
: pattern;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Связывает обработчики сообщений.
|
|
109
|
+
*/
|
|
110
|
+
bindRequestHandlers() {
|
|
111
|
+
const messageHandlers = [...this.messageHandlers.entries()].filter(([, handler]) => !handler.isEventHandler);
|
|
112
|
+
for (const [subject, messageHandler] of messageHandlers) {
|
|
113
|
+
const subscriptionOptions = {
|
|
114
|
+
callback: async (err, msg) => {
|
|
115
|
+
try {
|
|
116
|
+
if (err) {
|
|
117
|
+
this.logger.error(err.message, err);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const { data } = this.deserializer.deserialize(msg);
|
|
121
|
+
const context = new microservices_1.NatsContext([msg.subject, msg.headers]);
|
|
122
|
+
const response$ = this.transformToObservable(messageHandler(data, context));
|
|
123
|
+
const payloadFormat = this.getResponsePayloadFormat(msg);
|
|
124
|
+
const responseEncoder = this.getResponseEncoder(subject, payloadFormat);
|
|
125
|
+
this.send(response$, (response) => {
|
|
126
|
+
if (response.err) {
|
|
127
|
+
return msg.respond('', { headers: response.err.metadata });
|
|
128
|
+
}
|
|
129
|
+
const headers = new nats_1.MsgHdrsImpl();
|
|
130
|
+
headers.set(events_common_1.X_FORMAT_HEADER, payloadFormat);
|
|
131
|
+
return msg.respond(responseEncoder.encode(response.response ?? {}), { headers });
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
this.logger.error('Error while handling Nats request', { error });
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
this.nc?.subscribe(subject, subscriptionOptions);
|
|
140
|
+
this.logger.debug(`Subscribed to ${subject} request messages`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
getResponseEncoder(subject, format) {
|
|
144
|
+
const deserializer = this.deserializer.events.get(subject);
|
|
145
|
+
let responseEncoder;
|
|
146
|
+
switch (format) {
|
|
147
|
+
case events_common_1.PayloadFormat.JSON:
|
|
148
|
+
responseEncoder = new nats_common_1.JSONMessageCodec();
|
|
149
|
+
break;
|
|
150
|
+
case events_common_1.PayloadFormat.PROTOBUF:
|
|
151
|
+
const codec = deserializer.options.response;
|
|
152
|
+
responseEncoder = codec && new nats_common_1.ProtoMessageCodec(codec);
|
|
153
|
+
break;
|
|
154
|
+
default:
|
|
155
|
+
throw new core_1.InternalException('Unknown format', {
|
|
156
|
+
details: {
|
|
157
|
+
format,
|
|
158
|
+
subject,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return responseEncoder;
|
|
163
|
+
}
|
|
164
|
+
getResponsePayloadFormat(msg) {
|
|
165
|
+
const expectedResponseFormat = msg.headers?.get(nats_common_1.X_RESPONSE_FORMAT_HEADER);
|
|
166
|
+
const responseFormat = expectedResponseFormat &&
|
|
167
|
+
Object.values(events_common_1.PayloadFormat).includes(expectedResponseFormat)
|
|
168
|
+
? expectedResponseFormat
|
|
169
|
+
: this.config.responsePayloadType;
|
|
170
|
+
return responseFormat;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.NatsRequestServer = NatsRequestServer;
|
|
174
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/request/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consume-request-options.type.js","sourceRoot":"","sources":["../../../src/request/types/consume-request-options.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatted-nats-error.type.js","sourceRoot":"","sources":["../../../src/request/types/formatted-nats-error.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
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("./consume-request-options.type"), exports);
|
|
18
|
+
__exportStar(require("./request-type-with-options.type"), exports);
|
|
19
|
+
__exportStar(require("./formatted-nats-error.type"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/request/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA+C;AAC/C,mEAAiD;AACjD,8DAA4C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-type-with-options.type.js","sourceRoot":"","sources":["../../../src/request/types/request-type-with-options.type.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/nats.transport",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.0-next.1",
|
|
4
4
|
"description": "Nats NestJS Transport",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"license": "Apache License 2.0",
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@nestjs-plugins/nestjs-nats-jetstream-transport": "^2.2.6",
|
|
15
15
|
"lodash": "^4.17.21",
|
|
16
|
-
"nats": "~2.28.2"
|
|
17
|
-
"typescript": "5.5.4"
|
|
16
|
+
"nats": "~2.28.2"
|
|
18
17
|
},
|
|
19
18
|
"peerDependencies": {
|
|
20
19
|
"@nestjs/common": "^10.0.0",
|
|
21
20
|
"@nestjs/core": "^10.0.0",
|
|
22
21
|
"@nestjs/microservices": "^10.0.0",
|
|
23
|
-
"@opentelemetry/api": "1.9.0",
|
|
22
|
+
"@opentelemetry/api": "^1.9.0",
|
|
24
23
|
"@rsdk/actx": "*",
|
|
25
24
|
"@rsdk/autodoc.protocol": "*",
|
|
25
|
+
"@rsdk/builtin-contract": "*",
|
|
26
26
|
"@rsdk/common": "*",
|
|
27
27
|
"@rsdk/common.nestjs": "*",
|
|
28
28
|
"@rsdk/common.node": "*",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"@rsdk/nats.common": "*",
|
|
35
35
|
"@rsdk/nest-tools": "*",
|
|
36
36
|
"reflect-metadata": "^0.1.12 || ^0.2.0",
|
|
37
|
-
"rxjs": "^7.
|
|
37
|
+
"rxjs": "^7.1.0"
|
|
38
38
|
},
|
|
39
39
|
"nx": {},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "466ee102dcc2bce0b90df8f561c3e73d889c8468"
|
|
41
41
|
}
|
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
import { LoggerFactory } from '@rsdk/logging';
|
|
14
14
|
import type { JsMsg } from 'nats';
|
|
15
15
|
|
|
16
|
-
import type { EventTypeWithOptions } from './
|
|
16
|
+
import type { EventTypeWithOptions } from './jetstream';
|
|
17
|
+
import type { RequestTypeWithOptions } from './request';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* This is a custom deserializer for a Nats request.
|
|
@@ -22,10 +23,12 @@ import type { EventTypeWithOptions } from './types/event-type-with-options.type'
|
|
|
22
23
|
* It is necessary to take into account all the options and parse the incoming data,
|
|
23
24
|
* or return everything to the user as it is without throwing an error
|
|
24
25
|
*/
|
|
25
|
-
export class EventsDeserializer
|
|
26
|
+
export class EventsDeserializer<
|
|
27
|
+
T extends EventTypeWithOptions | RequestTypeWithOptions,
|
|
28
|
+
> extends IncomingRequestDeserializer {
|
|
26
29
|
static logger = LoggerFactory.create(EventsDeserializer);
|
|
27
30
|
|
|
28
|
-
events: Map<string,
|
|
31
|
+
events: Map<string, T> = new Map();
|
|
29
32
|
|
|
30
33
|
override deserialize(
|
|
31
34
|
value: any,
|
|
@@ -106,14 +109,12 @@ export class EventsDeserializer extends IncomingRequestDeserializer {
|
|
|
106
109
|
|
|
107
110
|
const codec = payloadIsJson
|
|
108
111
|
? new JSONEventCodec<any>()
|
|
109
|
-
: new ProtoEventCodec(
|
|
110
|
-
(eventType as EventTypeWithOptions | undefined)?.eventType as any,
|
|
111
|
-
);
|
|
112
|
+
: new ProtoEventCodec((eventType as T | undefined)?.type as any);
|
|
112
113
|
|
|
113
114
|
try {
|
|
114
115
|
return {
|
|
115
116
|
data: codec.decode(value as Buffer),
|
|
116
|
-
pattern: (eventType as
|
|
117
|
+
pattern: (eventType as T | undefined)?.type,
|
|
117
118
|
};
|
|
118
119
|
} catch (error) {
|
|
119
120
|
EventsDeserializer.logger.warn(
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export {
|
|
2
|
+
NatsJetstreamTransport,
|
|
3
|
+
NatsJetstreamTransportOptions,
|
|
4
|
+
Payload,
|
|
5
|
+
NATS_PROTOCOL,
|
|
6
|
+
NATS_JETSTREAM_PROTOCOL,
|
|
7
|
+
Consume,
|
|
8
|
+
} from './jetstream';
|
|
9
|
+
export {
|
|
10
|
+
NatsRequestTransport,
|
|
11
|
+
NATS_REQUEST_PROTOCOL,
|
|
12
|
+
ConsumeRequest,
|
|
13
|
+
} from './request';
|
|
@@ -7,7 +7,7 @@ import { RsdkMetadata } from '@rsdk/metadata';
|
|
|
7
7
|
import { NATS_TOPIC_RSDK_METADATA_SCOPE } from '@rsdk/nats.common';
|
|
8
8
|
import omit from 'lodash/omit';
|
|
9
9
|
|
|
10
|
-
import type { ConsumeOptions } from './types
|
|
10
|
+
import type { ConsumeOptions } from './types';
|
|
11
11
|
|
|
12
12
|
const ConsumeMetadata =
|
|
13
13
|
<T>(eventType: EventType<T> | string): MethodDecorator =>
|
|
@@ -49,6 +49,6 @@ export const Consume = <T>(
|
|
|
49
49
|
options?: ConsumeOptions,
|
|
50
50
|
): MethodDecorator =>
|
|
51
51
|
applyDecorators(
|
|
52
|
-
EventPattern({ eventType, options }, NATS_JETSTREAM_TRANSPORT),
|
|
52
|
+
EventPattern({ type: eventType, options }, NATS_JETSTREAM_TRANSPORT),
|
|
53
53
|
ConsumeMetadata(eventType),
|
|
54
54
|
);
|
package/src/{nats-jetstream-errors.formatter.ts → jetstream/nats-jetstream-errors.formatter.ts}
RENAMED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type IErrorsFormatter } from '@rsdk/core';
|
|
2
|
+
|
|
3
|
+
import { NATS_JETSTREAM_PROTOCOL } from './constants';
|
|
2
4
|
|
|
3
5
|
export class NatsJetstreamErrorsFormatter implements IErrorsFormatter {
|
|
4
|
-
protocol =
|
|
6
|
+
protocol = NATS_JETSTREAM_PROTOCOL;
|
|
5
7
|
|
|
6
8
|
match(): boolean {
|
|
7
9
|
return false;
|
|
@@ -7,7 +7,7 @@ import { NatsJetStreamServer } from './server';
|
|
|
7
7
|
/**
|
|
8
8
|
* @description хелпер для нормализованного извлечения заголовков из nats
|
|
9
9
|
*/
|
|
10
|
-
export class
|
|
10
|
+
export class NatsJetstreamHeaders implements GenericHeaders {
|
|
11
11
|
private readonly normalizedHeaders: Record<string, string>;
|
|
12
12
|
|
|
13
13
|
constructor(ctx: ExecutionContext) {
|
|
@@ -13,12 +13,13 @@ import {
|
|
|
13
13
|
import { LoggerFactory } from '@rsdk/logging';
|
|
14
14
|
import { DefaultNatsConfig } from '@rsdk/nats.common';
|
|
15
15
|
|
|
16
|
-
import
|
|
17
|
-
import { NatsHeaders } from './nats.headers';
|
|
16
|
+
import { NATS_JETSTREAM_PROTOCOL } from './constants';
|
|
18
17
|
import { NatsJetstreamConfig } from './nats-jetstream.config';
|
|
18
|
+
import { NatsJetstreamHeaders } from './nats-jetstream.headers';
|
|
19
19
|
import { NatsJetstreamErrorsFormatter } from './nats-jetstream-errors.formatter';
|
|
20
20
|
import { NatsJetstreamTransportModule } from './nats-jetstream-transport.module';
|
|
21
21
|
import { NatsJetStreamServer } from './server';
|
|
22
|
+
import type { NatsJetstreamTransportOptions } from './types';
|
|
22
23
|
|
|
23
24
|
export class NatsJetstreamTransport implements IMicroserviceTransport {
|
|
24
25
|
private readonly logger = LoggerFactory.create(NatsJetstreamTransport);
|
|
@@ -28,11 +29,11 @@ export class NatsJetstreamTransport implements IMicroserviceTransport {
|
|
|
28
29
|
constructor(private readonly options?: NatsJetstreamTransportOptions) {}
|
|
29
30
|
|
|
30
31
|
extractHeaders(ctx: ExecutionContext): GenericHeaders {
|
|
31
|
-
return new
|
|
32
|
+
return new NatsJetstreamHeaders(ctx);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
getProtocol(): string {
|
|
35
|
-
return
|
|
36
|
+
return NATS_JETSTREAM_PROTOCOL;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
matchByContext(ctx: ArgumentsHost): boolean {
|
|
@@ -86,8 +87,8 @@ export class NatsJetstreamTransport implements IMicroserviceTransport {
|
|
|
86
87
|
const natsConfig = configContext.resolve(DefaultNatsConfig);
|
|
87
88
|
const natsJetstreamConfig = configContext.resolve(NatsJetstreamConfig);
|
|
88
89
|
|
|
89
|
-
this.name = natsJetstreamConfig.name;
|
|
90
90
|
this.config = natsConfig;
|
|
91
|
+
this.name = natsJetstreamConfig.name;
|
|
91
92
|
}
|
|
92
93
|
|
|
93
94
|
onStart(): void {
|