@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.
Files changed (151) hide show
  1. package/dist/events.deserializer.d.ts +4 -3
  2. package/dist/events.deserializer.js +2 -2
  3. package/dist/events.deserializer.js.map +1 -1
  4. package/dist/index.d.ts +2 -4
  5. package/dist/index.js +11 -7
  6. package/dist/index.js.map +1 -1
  7. package/dist/jetstream/constants.d.ts +5 -0
  8. package/dist/jetstream/constants.js +9 -0
  9. package/dist/jetstream/constants.js.map +1 -0
  10. package/dist/{metadata.decorator.d.ts → jetstream/consume.decorator.d.ts} +1 -1
  11. package/dist/{metadata.decorator.js → jetstream/consume.decorator.js} +2 -2
  12. package/dist/jetstream/consume.decorator.js.map +1 -0
  13. package/dist/jetstream/index.d.ts +7 -0
  14. package/dist/jetstream/index.js +24 -0
  15. package/dist/jetstream/index.js.map +1 -0
  16. package/dist/{nats-jetstream-errors.formatter.d.ts → jetstream/nats-jetstream-errors.formatter.d.ts} +1 -1
  17. package/dist/{nats-jetstream-errors.formatter.js → jetstream/nats-jetstream-errors.formatter.js} +2 -1
  18. package/dist/jetstream/nats-jetstream-errors.formatter.js.map +1 -0
  19. package/dist/jetstream/nats-jetstream-transport.module.js.map +1 -0
  20. package/dist/{nats-jetstream.config.d.ts → jetstream/nats-jetstream.config.d.ts} +1 -1
  21. package/dist/jetstream/nats-jetstream.config.js.map +1 -0
  22. package/dist/jetstream/nats-jetstream.headers.d.ts +10 -0
  23. package/dist/{nats.headers.js → jetstream/nats-jetstream.headers.js} +4 -4
  24. package/dist/jetstream/nats-jetstream.headers.js.map +1 -0
  25. package/dist/{nats-jetstream.transport.d.ts → jetstream/nats-jetstream.transport.d.ts} +1 -1
  26. package/dist/{nats-jetstream.transport.js → jetstream/nats-jetstream.transport.js} +5 -4
  27. package/dist/jetstream/nats-jetstream.transport.js.map +1 -0
  28. package/dist/jetstream/payload.decorator.js.map +1 -0
  29. package/dist/{server.d.ts → jetstream/server.d.ts} +12 -17
  30. package/dist/{server.js → jetstream/server.js} +38 -77
  31. package/dist/jetstream/server.js.map +1 -0
  32. package/dist/jetstream/types/consume.options.js.map +1 -0
  33. package/dist/jetstream/types/consumer-info.type.js.map +1 -0
  34. package/dist/jetstream/types/consumers-map.type.js.map +1 -0
  35. package/dist/{types → jetstream/types}/event-type-with-options.type.d.ts +1 -1
  36. package/dist/jetstream/types/event-type-with-options.type.js.map +1 -0
  37. package/dist/jetstream/types/index.d.ts +6 -0
  38. package/dist/jetstream/types/index.js +23 -0
  39. package/dist/jetstream/types/index.js.map +1 -0
  40. package/dist/jetstream/types/mapping.type.js.map +1 -0
  41. package/dist/jetstream/types/nats-jetstream-transport-options.type.js.map +1 -0
  42. package/dist/request/constants.d.ts +1 -0
  43. package/dist/request/constants.js +5 -0
  44. package/dist/request/constants.js.map +1 -0
  45. package/dist/request/consume-request.decorator.d.ts +3 -0
  46. package/dist/request/consume-request.decorator.js +10 -0
  47. package/dist/request/consume-request.decorator.js.map +1 -0
  48. package/dist/request/index.d.ts +4 -0
  49. package/dist/request/index.js +21 -0
  50. package/dist/request/index.js.map +1 -0
  51. package/dist/request/nats-request-errors.formatter.d.ts +7 -0
  52. package/dist/request/nats-request-errors.formatter.js +41 -0
  53. package/dist/request/nats-request-errors.formatter.js.map +1 -0
  54. package/dist/request/nats-request-errors.sender.d.ts +8 -0
  55. package/dist/request/nats-request-errors.sender.js +28 -0
  56. package/dist/request/nats-request-errors.sender.js.map +1 -0
  57. package/dist/request/nats-request-logger.interceptor.d.ts +13 -0
  58. package/dist/request/nats-request-logger.interceptor.js +89 -0
  59. package/dist/request/nats-request-logger.interceptor.js.map +1 -0
  60. package/dist/request/nats-request-transport.module.d.ts +2 -0
  61. package/dist/request/nats-request-transport.module.js +17 -0
  62. package/dist/request/nats-request-transport.module.js.map +1 -0
  63. package/dist/request/nats-request.config.d.ts +8 -0
  64. package/dist/request/nats-request.config.js +46 -0
  65. package/dist/request/nats-request.config.js.map +1 -0
  66. package/dist/{nats.headers.d.ts → request/nats-request.headers.d.ts} +1 -1
  67. package/dist/request/nats-request.headers.js +28 -0
  68. package/dist/request/nats-request.headers.js.map +1 -0
  69. package/dist/request/nats-request.transport.d.ts +22 -0
  70. package/dist/request/nats-request.transport.js +83 -0
  71. package/dist/request/nats-request.transport.js.map +1 -0
  72. package/dist/request/server.d.ts +59 -0
  73. package/dist/request/server.js +174 -0
  74. package/dist/request/server.js.map +1 -0
  75. package/dist/request/types/consume-request-options.type.d.ts +4 -0
  76. package/dist/request/types/consume-request-options.type.js +3 -0
  77. package/dist/request/types/consume-request-options.type.js.map +1 -0
  78. package/dist/request/types/formatted-nats-error.type.d.ts +8 -0
  79. package/dist/request/types/formatted-nats-error.type.js +3 -0
  80. package/dist/request/types/formatted-nats-error.type.js.map +1 -0
  81. package/dist/request/types/index.d.ts +3 -0
  82. package/dist/request/types/index.js +20 -0
  83. package/dist/request/types/index.js.map +1 -0
  84. package/dist/request/types/request-type-with-options.type.d.ts +6 -0
  85. package/dist/request/types/request-type-with-options.type.js +3 -0
  86. package/dist/request/types/request-type-with-options.type.js.map +1 -0
  87. package/package.json +6 -6
  88. package/src/events.deserializer.ts +8 -7
  89. package/src/index.ts +13 -5
  90. package/src/jetstream/constants.ts +6 -0
  91. package/src/{metadata.decorator.ts → jetstream/consume.decorator.ts} +2 -2
  92. package/src/jetstream/index.ts +7 -0
  93. package/src/{nats-jetstream-errors.formatter.ts → jetstream/nats-jetstream-errors.formatter.ts} +4 -2
  94. package/src/{nats-jetstream.config.ts → jetstream/nats-jetstream.config.ts} +1 -1
  95. package/src/{nats.headers.ts → jetstream/nats-jetstream.headers.ts} +1 -1
  96. package/src/{nats-jetstream.transport.ts → jetstream/nats-jetstream.transport.ts} +6 -5
  97. package/src/{server.ts → jetstream/server.ts} +65 -103
  98. package/src/{types → jetstream/types}/event-type-with-options.type.ts +1 -1
  99. package/src/jetstream/types/index.ts +6 -0
  100. package/src/{types → jetstream/types}/mapping.type.ts +4 -1
  101. package/src/request/constants.ts +1 -0
  102. package/src/request/consume-request.decorator.ts +18 -0
  103. package/src/request/index.ts +4 -0
  104. package/src/request/nats-request-errors.formatter.ts +49 -0
  105. package/src/request/nats-request-errors.sender.ts +39 -0
  106. package/src/request/nats-request-logger.interceptor.ts +89 -0
  107. package/src/request/nats-request-transport.module.ts +4 -0
  108. package/src/request/nats-request.config.ts +36 -0
  109. package/src/request/nats-request.headers.ts +33 -0
  110. package/src/request/nats-request.transport.ts +107 -0
  111. package/src/request/server.ts +260 -0
  112. package/src/request/types/consume-request-options.type.ts +5 -0
  113. package/src/request/types/formatted-nats-error.type.ts +9 -0
  114. package/src/request/types/index.ts +3 -0
  115. package/src/request/types/request-type-with-options.type.ts +8 -0
  116. package/dist/metadata.decorator.js.map +0 -1
  117. package/dist/nats-jetstream-errors.formatter.js.map +0 -1
  118. package/dist/nats-jetstream-transport.module.js.map +0 -1
  119. package/dist/nats-jetstream.config.js.map +0 -1
  120. package/dist/nats-jetstream.transport.js.map +0 -1
  121. package/dist/nats.headers.js.map +0 -1
  122. package/dist/payload.decorator.js.map +0 -1
  123. package/dist/server.js.map +0 -1
  124. package/dist/types/consume.options.js.map +0 -1
  125. package/dist/types/consumer-info.type.js.map +0 -1
  126. package/dist/types/consumers-map.type.js.map +0 -1
  127. package/dist/types/event-type-with-options.type.js.map +0 -1
  128. package/dist/types/mapping.type.js.map +0 -1
  129. package/dist/types/nats-jetstream-transport-options.type.js.map +0 -1
  130. /package/dist/{nats-jetstream-transport.module.d.ts → jetstream/nats-jetstream-transport.module.d.ts} +0 -0
  131. /package/dist/{nats-jetstream-transport.module.js → jetstream/nats-jetstream-transport.module.js} +0 -0
  132. /package/dist/{nats-jetstream.config.js → jetstream/nats-jetstream.config.js} +0 -0
  133. /package/dist/{payload.decorator.d.ts → jetstream/payload.decorator.d.ts} +0 -0
  134. /package/dist/{payload.decorator.js → jetstream/payload.decorator.js} +0 -0
  135. /package/dist/{types → jetstream/types}/consume.options.d.ts +0 -0
  136. /package/dist/{types → jetstream/types}/consume.options.js +0 -0
  137. /package/dist/{types → jetstream/types}/consumer-info.type.d.ts +0 -0
  138. /package/dist/{types → jetstream/types}/consumer-info.type.js +0 -0
  139. /package/dist/{types → jetstream/types}/consumers-map.type.d.ts +0 -0
  140. /package/dist/{types → jetstream/types}/consumers-map.type.js +0 -0
  141. /package/dist/{types → jetstream/types}/event-type-with-options.type.js +0 -0
  142. /package/dist/{types → jetstream/types}/mapping.type.d.ts +0 -0
  143. /package/dist/{types → jetstream/types}/mapping.type.js +0 -0
  144. /package/dist/{types → jetstream/types}/nats-jetstream-transport-options.type.d.ts +0 -0
  145. /package/dist/{types → jetstream/types}/nats-jetstream-transport-options.type.js +0 -0
  146. /package/src/{nats-jetstream-transport.module.ts → jetstream/nats-jetstream-transport.module.ts} +0 -0
  147. /package/src/{payload.decorator.ts → jetstream/payload.decorator.ts} +0 -0
  148. /package/src/{types → jetstream/types}/consume.options.ts +0 -0
  149. /package/src/{types → jetstream/types}/consumer-info.type.ts +0 -0
  150. /package/src/{types → jetstream/types}/consumers-map.type.ts +0 -0
  151. /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,4 @@
1
+ import type { MessageType } from '@rsdk/nats.common';
2
+ export type ConsumeRequestOptions = {
3
+ response: MessageType;
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=consume-request-options.type.js.map
@@ -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,8 @@
1
+ import type { ExceptionKind } from '@rsdk/core';
2
+ export type FormattedNatsError = {
3
+ code: number;
4
+ message: string;
5
+ details: any;
6
+ kind: ExceptionKind;
7
+ exceptionCode: string;
8
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=formatted-nats-error.type.js.map
@@ -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,3 @@
1
+ export * from './consume-request-options.type';
2
+ export * from './request-type-with-options.type';
3
+ export * from './formatted-nats-error.type';
@@ -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,6 @@
1
+ import type { MessageType } from '@rsdk/nats.common';
2
+ import type { ConsumeRequestOptions } from './consume-request-options.type';
3
+ export type RequestTypeWithOptions = {
4
+ type: MessageType;
5
+ options: ConsumeRequestOptions;
6
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=request-type-with-options.type.js.map
@@ -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.7.0",
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.8.1"
37
+ "rxjs": "^7.1.0"
38
38
  },
39
39
  "nx": {},
40
- "gitHead": "db0b45653ce1e362bae1a482092b932380fb230c"
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 './types/event-type-with-options.type';
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 extends IncomingRequestDeserializer {
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, EventTypeWithOptions> = new Map();
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 EventTypeWithOptions | undefined)?.eventType,
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 { Consume } from './metadata.decorator';
2
-
3
- export { NatsJetstreamTransport } from './nats-jetstream.transport';
4
- export { NatsJetstreamTransportOptions } from './types/nats-jetstream-transport-options.type';
5
- export { Payload } from './payload.decorator';
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';
@@ -0,0 +1,6 @@
1
+ export const NATS_JETSTREAM_PROTOCOL = 'nats-jetstream';
2
+
3
+ /**
4
+ * @deprecated use NATS_JETSTREAM_PROTOCOL instead
5
+ */
6
+ export const NATS_PROTOCOL = NATS_JETSTREAM_PROTOCOL;
@@ -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/consume.options';
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
  );
@@ -0,0 +1,7 @@
1
+ export * from './nats-jetstream.headers';
2
+ export * from './payload.decorator';
3
+ export * from './server';
4
+ export * from './types';
5
+ export * from './nats-jetstream.transport';
6
+ export * from './constants';
7
+ export * from './consume.decorator';
@@ -1,7 +1,9 @@
1
- import type { IErrorsFormatter } from '@rsdk/core';
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 = 'nats-jetstream';
6
+ protocol = NATS_JETSTREAM_PROTOCOL;
5
7
 
6
8
  match(): boolean {
7
9
  return false;
@@ -10,5 +10,5 @@ export class NatsJetstreamConfig extends Config {
10
10
  defaultValue: 'default',
11
11
  description: 'NATS connection name',
12
12
  })
13
- name!: string;
13
+ readonly name!: string;
14
14
  }
@@ -7,7 +7,7 @@ import { NatsJetStreamServer } from './server';
7
7
  /**
8
8
  * @description хелпер для нормализованного извлечения заголовков из nats
9
9
  */
10
- export class NatsHeaders implements GenericHeaders {
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 type { NatsJetstreamTransportOptions } from './types/nats-jetstream-transport-options.type';
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 NatsHeaders(ctx);
32
+ return new NatsJetstreamHeaders(ctx);
32
33
  }
33
34
 
34
35
  getProtocol(): string {
35
- return 'nats-jetstream';
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 {