@rsdk/nats.transport 5.4.0-next.10
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/CHANGELOG.md +42 -0
- package/dist/events.deserializer.d.ts +23 -0
- package/dist/events.deserializer.js +94 -0
- package/dist/events.deserializer.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata.decorator.d.ts +3 -0
- package/dist/metadata.decorator.js +41 -0
- package/dist/metadata.decorator.js.map +1 -0
- package/dist/nats-jetstream-errors.formatter.d.ts +6 -0
- package/dist/nats-jetstream-errors.formatter.js +14 -0
- package/dist/nats-jetstream-errors.formatter.js.map +1 -0
- package/dist/nats-jetstream-transport.module.d.ts +2 -0
- package/dist/nats-jetstream-transport.module.js +17 -0
- package/dist/nats-jetstream-transport.module.js.map +1 -0
- package/dist/nats-jetstream.config.d.ts +5 -0
- package/dist/nats-jetstream.config.js +29 -0
- package/dist/nats-jetstream.config.js.map +1 -0
- package/dist/nats-jetstream.transport.d.ts +20 -0
- package/dist/nats-jetstream.transport.js +73 -0
- package/dist/nats-jetstream.transport.js.map +1 -0
- package/dist/nats.headers.d.ts +10 -0
- package/dist/nats.headers.js +28 -0
- package/dist/nats.headers.js.map +1 -0
- package/dist/payload.decorator.d.ts +8 -0
- package/dist/payload.decorator.js +9 -0
- package/dist/payload.decorator.js.map +1 -0
- package/dist/server.d.ts +136 -0
- package/dist/server.js +365 -0
- package/dist/server.js.map +1 -0
- package/dist/types/consume.options.d.ts +6 -0
- package/dist/types/consume.options.js +3 -0
- package/dist/types/consume.options.js.map +1 -0
- package/dist/types/consumer-info.type.d.ts +5 -0
- package/dist/types/consumer-info.type.js +3 -0
- package/dist/types/consumer-info.type.js.map +1 -0
- package/dist/types/consumers-map.type.d.ts +2 -0
- package/dist/types/consumers-map.type.js +3 -0
- package/dist/types/consumers-map.type.js.map +1 -0
- package/dist/types/event-type-with-options.type.d.ts +6 -0
- package/dist/types/event-type-with-options.type.js +3 -0
- package/dist/types/event-type-with-options.type.js.map +1 -0
- package/dist/types/mapping.type.d.ts +6 -0
- package/dist/types/mapping.type.js +3 -0
- package/dist/types/mapping.type.js.map +1 -0
- package/dist/types/nats-jetstream-transport-options.type.d.ts +2 -0
- package/dist/types/nats-jetstream-transport-options.type.js +3 -0
- package/dist/types/nats-jetstream-transport-options.type.js.map +1 -0
- package/jest.config.js +1 -0
- package/jest.config.unit.js +1 -0
- package/package.json +43 -0
- package/src/events.deserializer.ts +133 -0
- package/src/index.ts +5 -0
- package/src/metadata.decorator.ts +54 -0
- package/src/nats-jetstream-errors.formatter.ts +13 -0
- package/src/nats-jetstream-transport.module.ts +4 -0
- package/src/nats-jetstream.config.ts +14 -0
- package/src/nats-jetstream.transport.ts +94 -0
- package/src/nats.headers.ts +33 -0
- package/src/payload.decorator.ts +17 -0
- package/src/server.ts +492 -0
- package/src/types/consume.options.ts +6 -0
- package/src/types/consumer-info.type.ts +6 -0
- package/src/types/consumers-map.type.ts +3 -0
- package/src/types/event-type-with-options.type.ts +8 -0
- package/src/types/mapping.type.ts +8 -0
- package/src/types/nats-jetstream-transport-options.type.ts +3 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +7 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
## [5.4.0-next.10](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.9...v5.4.0-next.10) (2024-12-03)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
9
|
+
|
|
10
|
+
## [5.4.0-next.9](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.8...v5.4.0-next.9) (2024-12-02)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
13
|
+
|
|
14
|
+
## [5.4.0-next.8](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.7...v5.4.0-next.8) (2024-11-28)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
17
|
+
|
|
18
|
+
## [5.4.0-next.7](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.6...v5.4.0-next.7) (2024-11-28)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
21
|
+
|
|
22
|
+
## [5.4.0-next.6](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.5...v5.4.0-next.6) (2024-11-28)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
25
|
+
|
|
26
|
+
## [5.4.0-next.5](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.4...v5.4.0-next.5) (2024-11-28)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
29
|
+
|
|
30
|
+
## [5.4.0-next.4](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.3...v5.4.0-next.4) (2024-11-27)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
33
|
+
|
|
34
|
+
## [5.4.0-next.3](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.2...v5.4.0-next.3) (2024-11-25)
|
|
35
|
+
|
|
36
|
+
**Note:** Version bump only for package @rsdk/nats.transport
|
|
37
|
+
|
|
38
|
+
## [5.4.0-next.2](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.1...v5.4.0-next.2) (2024-11-25)
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* **nats:** nats transport/kv/os + examples + docs ([#306](https://github.com/R-Vision/rsdk/issues/306)) ([de67eed](https://github.com/R-Vision/rsdk/commit/de67eed8b4cb17ec9d359067eae1e0c35d6cc736))
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IncomingEvent, IncomingRequest } from '@nestjs/microservices';
|
|
2
|
+
import { IncomingRequestDeserializer } from '@nestjs/microservices/deserializers';
|
|
3
|
+
import type { JsMsg } from 'nats';
|
|
4
|
+
import type { EventTypeWithOptions } from './types/event-type-with-options.type';
|
|
5
|
+
/**
|
|
6
|
+
* This is a custom deserializer for a Nats request.
|
|
7
|
+
* From Nats comes a buffer, which can be either a proto-buffer or just a string.
|
|
8
|
+
* The string can be a JSON value.
|
|
9
|
+
* It is necessary to take into account all the options and parse the incoming data,
|
|
10
|
+
* or return everything to the user as it is without throwing an error
|
|
11
|
+
*/
|
|
12
|
+
export declare class EventsDeserializer extends IncomingRequestDeserializer {
|
|
13
|
+
static logger: import("@rsdk/logging").ILogger;
|
|
14
|
+
events: Map<string, EventTypeWithOptions>;
|
|
15
|
+
deserialize(value: any, options?: Record<string, any>): IncomingRequest | IncomingEvent;
|
|
16
|
+
mapToSchema(message: JsMsg, options?: Record<string, any>): IncomingRequest | IncomingEvent;
|
|
17
|
+
/**
|
|
18
|
+
* Try to parse the incoming value. If an error, return the value as is.
|
|
19
|
+
* @param message nats message
|
|
20
|
+
* @returns parsed or original value
|
|
21
|
+
*/
|
|
22
|
+
private tryParseValue;
|
|
23
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventsDeserializer = void 0;
|
|
4
|
+
const deserializers_1 = require("@nestjs/microservices/deserializers");
|
|
5
|
+
const core_1 = require("@rsdk/core");
|
|
6
|
+
const events_common_1 = require("@rsdk/events.common");
|
|
7
|
+
const logging_1 = require("@rsdk/logging");
|
|
8
|
+
/**
|
|
9
|
+
* This is a custom deserializer for a Nats request.
|
|
10
|
+
* From Nats comes a buffer, which can be either a proto-buffer or just a string.
|
|
11
|
+
* The string can be a JSON value.
|
|
12
|
+
* It is necessary to take into account all the options and parse the incoming data,
|
|
13
|
+
* or return everything to the user as it is without throwing an error
|
|
14
|
+
*/
|
|
15
|
+
class EventsDeserializer extends deserializers_1.IncomingRequestDeserializer {
|
|
16
|
+
static logger = logging_1.LoggerFactory.create(EventsDeserializer);
|
|
17
|
+
events = new Map();
|
|
18
|
+
deserialize(value, options) {
|
|
19
|
+
return this.mapToSchema(value, options);
|
|
20
|
+
}
|
|
21
|
+
mapToSchema(message, options) {
|
|
22
|
+
try {
|
|
23
|
+
return this.tryParseValue(message);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const value = message?.data ?? message;
|
|
27
|
+
// todo: если произойдет ошибка некая, то мы эту ошибку не получим на отправляющей стороне и в приложении кроме лога ничего не будет видно, эту ошибку никто не обрабатывает
|
|
28
|
+
// нужно потом найти способ чтобы ошибку эту можно было перехватить, на текущий момент просто возвращаем значение, иначе если выпасть с ошибкой эти евенты продолжат висеть в Nats
|
|
29
|
+
EventsDeserializer.logger.warn(`Error in "mapToSchema": ${error}, the original value was used: ${JSON.stringify(value)}, options: ${JSON.stringify(options)}`, {
|
|
30
|
+
error,
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
data: value,
|
|
34
|
+
pattern: undefined,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Try to parse the incoming value. If an error, return the value as is.
|
|
40
|
+
* @param message nats message
|
|
41
|
+
* @returns parsed or original value
|
|
42
|
+
*/
|
|
43
|
+
tryParseValue(message) {
|
|
44
|
+
const value = message.data ?? message;
|
|
45
|
+
if (!value) {
|
|
46
|
+
EventsDeserializer.logger.warn('Received empty value', {
|
|
47
|
+
data: message,
|
|
48
|
+
value,
|
|
49
|
+
});
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
const xFormatType = message.headers?.get(events_common_1.X_FORMAT_HEADER) || events_common_1.DEFAULT_PAYLOAD_FORMAT;
|
|
53
|
+
(0, events_common_1.assertIsPayloadFormat)(xFormatType);
|
|
54
|
+
const type = message.headers?.get(events_common_1.X_TYPE_HEADER);
|
|
55
|
+
const eventType = type && this.events.get(type);
|
|
56
|
+
if (type && !eventType) {
|
|
57
|
+
EventsDeserializer.logger.warn('headers.type was found, but eventType by value not found, used JSONCodec', {
|
|
58
|
+
headers: message.headers,
|
|
59
|
+
eventTypes: [...this.events.keys()],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const payloadIsJson = xFormatType === events_common_1.PayloadFormat.JSON;
|
|
63
|
+
if (!payloadIsJson && !eventType) {
|
|
64
|
+
throw new core_1.InputException('Event type by headers type value not found', {
|
|
65
|
+
details: {
|
|
66
|
+
data: message,
|
|
67
|
+
eventType,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const codec = payloadIsJson
|
|
72
|
+
? new events_common_1.JSONEventCodec()
|
|
73
|
+
: new events_common_1.ProtoEventCodec(eventType?.eventType);
|
|
74
|
+
try {
|
|
75
|
+
return {
|
|
76
|
+
data: codec.decode(value),
|
|
77
|
+
pattern: eventType?.eventType,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
EventsDeserializer.logger.warn(`Received data in the wrong format, return raw value`, {
|
|
82
|
+
data: message,
|
|
83
|
+
error,
|
|
84
|
+
eventType,
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
data: value,
|
|
88
|
+
pattern: eventType,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.EventsDeserializer = EventsDeserializer;
|
|
94
|
+
//# sourceMappingURL=events.deserializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.deserializer.js","sourceRoot":"","sources":["../src/events.deserializer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Payload = exports.NatsJetstreamTransport = exports.Consume = void 0;
|
|
4
|
+
var metadata_decorator_1 = require("./metadata.decorator");
|
|
5
|
+
Object.defineProperty(exports, "Consume", { enumerable: true, get: function () { return metadata_decorator_1.Consume; } });
|
|
6
|
+
var nats_jetstream_transport_1 = require("./nats-jetstream.transport");
|
|
7
|
+
Object.defineProperty(exports, "NatsJetstreamTransport", { enumerable: true, get: function () { return nats_jetstream_transport_1.NatsJetstreamTransport; } });
|
|
8
|
+
var payload_decorator_1 = require("./payload.decorator");
|
|
9
|
+
Object.defineProperty(exports, "Payload", { enumerable: true, get: function () { return payload_decorator_1.Payload; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAA+C;AAAtC,6GAAA,OAAO,OAAA;AAEhB,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAE/B,yDAA8C;AAArC,4GAAA,OAAO,OAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Consume = void 0;
|
|
7
|
+
const common_1 = require("@nestjs/common");
|
|
8
|
+
const microservices_1 = require("@nestjs/microservices");
|
|
9
|
+
const nestjs_nats_jetstream_transport_1 = require("@nestjs-plugins/nestjs-nats-jetstream-transport");
|
|
10
|
+
const core_1 = require("@rsdk/core");
|
|
11
|
+
const metadata_1 = require("@rsdk/metadata");
|
|
12
|
+
const nats_common_1 = require("@rsdk/nats.common");
|
|
13
|
+
const omit_1 = __importDefault(require("lodash/omit"));
|
|
14
|
+
const ConsumeMetadata = (eventType) => (target) => {
|
|
15
|
+
const rsdkMetadata = new metadata_1.RsdkMetadata(target.constructor, nats_common_1.NATS_TOPIC_RSDK_METADATA_SCOPE);
|
|
16
|
+
const alias = 'NATS_STREAM_' +
|
|
17
|
+
(eventType.$group ?? eventType)
|
|
18
|
+
.replaceAll('.', '-')
|
|
19
|
+
.toUpperCase() +
|
|
20
|
+
'_IS_MIRROR';
|
|
21
|
+
core_1.ConfigMetadataRegistry.registerProperty(target, alias, {
|
|
22
|
+
description: '',
|
|
23
|
+
expectedInEnv: true,
|
|
24
|
+
key: alias,
|
|
25
|
+
parser: new core_1.BoolParser(),
|
|
26
|
+
});
|
|
27
|
+
if (typeof eventType === 'string') {
|
|
28
|
+
rsdkMetadata.add({
|
|
29
|
+
topicName: eventType,
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
rsdkMetadata.add({
|
|
34
|
+
eventType: (0, omit_1.default)(eventType, 'toJSON', 'encode', 'decode'),
|
|
35
|
+
group: eventType.$group,
|
|
36
|
+
partitionKeyField: eventType.$partitionKeyField,
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const Consume = (eventType, options) => (0, common_1.applyDecorators)((0, microservices_1.EventPattern)({ eventType, options }, nestjs_nats_jetstream_transport_1.NATS_JETSTREAM_TRANSPORT), ConsumeMetadata(eventType));
|
|
40
|
+
exports.Consume = Consume;
|
|
41
|
+
//# sourceMappingURL=metadata.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.decorator.js","sourceRoot":"","sources":["../src/metadata.decorator.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAiD;AACjD,yDAAqD;AACrD,qGAA2F;AAC3F,qCAAgE;AAEhE,6CAA8C;AAC9C,mDAAmE;AACnE,uDAA+B;AAI/B,MAAM,eAAe,GACnB,CAAI,SAAgC,EAAmB,EAAE,CACzD,CAAC,MAAM,EAAE,EAAE;IACT,MAAM,YAAY,GAAG,IAAI,uBAAY,CACnC,MAAM,CAAC,WAAW,EAClB,4CAA8B,CAC/B,CAAC;IAEF,MAAM,KAAK,GACT,cAAc;QACd,CAAE,SAAuB,CAAC,MAAM,IAAI,SAAS,CAAC;aAC3C,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;aACpB,WAAW,EAAE;QAChB,YAAY,CAAC;IAEf,6BAAsB,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE;QACrD,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,IAAI;QACnB,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,IAAI,iBAAU,EAAE;KACzB,CAAC,CAAC;IAEH,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,YAAY,CAAC,GAAG,CAAC;YACf,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,YAAY,CAAC,GAAG,CAAC;QACf,SAAS,EAAE,IAAA,cAAI,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACxD,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,iBAAiB,EAAE,SAAS,CAAC,kBAAkB;KAChD,CAAC,CAAC;AACL,CAAC,CAAC;AAEG,MAAM,OAAO,GAAG,CACrB,SAAgC,EAChC,OAAwB,EACP,EAAE,CACnB,IAAA,wBAAe,EACb,IAAA,4BAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,0DAAwB,CAAC,EAC9D,eAAe,CAAC,SAAS,CAAC,CAC3B,CAAC;AAPS,QAAA,OAAO,WAOhB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NatsJetstreamErrorsFormatter = void 0;
|
|
4
|
+
class NatsJetstreamErrorsFormatter {
|
|
5
|
+
protocol = 'nats-jetstream';
|
|
6
|
+
match() {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
format(ex) {
|
|
10
|
+
return ex;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.NatsJetstreamErrorsFormatter = NatsJetstreamErrorsFormatter;
|
|
14
|
+
//# sourceMappingURL=nats-jetstream-errors.formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jetstream-errors.formatter.js","sourceRoot":"","sources":["../src/nats-jetstream-errors.formatter.ts"],"names":[],"mappings":";;;AAEA,MAAa,4BAA4B;IACvC,QAAQ,GAAG,gBAAgB,CAAC;IAE5B,KAAK;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,EAAW;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAVD,oEAUC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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.NatsJetstreamTransportModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let NatsJetstreamTransportModule = class NatsJetstreamTransportModule {
|
|
12
|
+
};
|
|
13
|
+
exports.NatsJetstreamTransportModule = NatsJetstreamTransportModule;
|
|
14
|
+
exports.NatsJetstreamTransportModule = NatsJetstreamTransportModule = __decorate([
|
|
15
|
+
(0, common_1.Module)({})
|
|
16
|
+
], NatsJetstreamTransportModule);
|
|
17
|
+
//# sourceMappingURL=nats-jetstream-transport.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jetstream-transport.module.js","sourceRoot":"","sources":["../src/nats-jetstream-transport.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAGjC,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;CAAG,CAAA;AAA/B,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,4BAA4B,CAAG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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.NatsJetstreamConfig = exports.NatsJetstreamConfigInstance = void 0;
|
|
13
|
+
const core_1 = require("@rsdk/core");
|
|
14
|
+
exports.NatsJetstreamConfigInstance = Symbol('NatsJetstreamConfigInstance');
|
|
15
|
+
let NatsJetstreamConfig = class NatsJetstreamConfig extends core_1.Config {
|
|
16
|
+
name;
|
|
17
|
+
};
|
|
18
|
+
exports.NatsJetstreamConfig = NatsJetstreamConfig;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, core_1.Property)('NATS_JETSTREAM_NAME', new core_1.StringParser(), {
|
|
21
|
+
defaultValue: 'default',
|
|
22
|
+
description: 'NATS connection name',
|
|
23
|
+
}),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], NatsJetstreamConfig.prototype, "name", void 0);
|
|
26
|
+
exports.NatsJetstreamConfig = NatsJetstreamConfig = __decorate([
|
|
27
|
+
(0, core_1.ConfigSection)()
|
|
28
|
+
], NatsJetstreamConfig);
|
|
29
|
+
//# sourceMappingURL=nats-jetstream.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jetstream.config.js","sourceRoot":"","sources":["../src/nats-jetstream.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA2E;AAE9D,QAAA,2BAA2B,GAAG,MAAM,CAC/C,6BAA6B,CAC9B,CAAC;AAGK,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,aAAM;IAK7C,IAAI,CAAU;CACf,CAAA;AANY,kDAAmB;AAK9B;IAJC,IAAA,eAAQ,EAAC,qBAAqB,EAAE,IAAI,mBAAY,EAAE,EAAE;QACnD,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,sBAAsB;KACpC,CAAC;;iDACY;8BALH,mBAAmB;IAD/B,IAAA,oBAAa,GAAE;GACH,mBAAmB,CAM/B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ArgumentsHost, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import type { CustomStrategy } from '@nestjs/microservices';
|
|
3
|
+
import { type ConfigContext, type GenericHeaders, type IErrorsFormatter, type IErrorsTransformer, type IMicroserviceTransport, type NestModuleDefinitions } from '@rsdk/core';
|
|
4
|
+
import type { NatsJetstreamTransportOptions } from './types/nats-jetstream-transport-options.type';
|
|
5
|
+
export declare class NatsJetstreamTransport implements IMicroserviceTransport {
|
|
6
|
+
private readonly options?;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private servers;
|
|
9
|
+
private name;
|
|
10
|
+
constructor(options?: NatsJetstreamTransportOptions | undefined);
|
|
11
|
+
extractHeaders(ctx: ExecutionContext): GenericHeaders;
|
|
12
|
+
getProtocol(): string;
|
|
13
|
+
matchByContext(ctx: ArgumentsHost): boolean;
|
|
14
|
+
getErrorsFormatter(): IErrorsFormatter;
|
|
15
|
+
getErrorTransformers(): IErrorsTransformer[];
|
|
16
|
+
modules(): NestModuleDefinitions;
|
|
17
|
+
createMicroserviceOptions(): CustomStrategy;
|
|
18
|
+
init(configContext: ConfigContext): void;
|
|
19
|
+
onStart(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NatsJetstreamTransport = void 0;
|
|
4
|
+
const core_1 = require("@rsdk/core");
|
|
5
|
+
const logging_1 = require("@rsdk/logging");
|
|
6
|
+
const nats_common_1 = require("@rsdk/nats.common");
|
|
7
|
+
const nats_headers_1 = require("./nats.headers");
|
|
8
|
+
const nats_jetstream_config_1 = require("./nats-jetstream.config");
|
|
9
|
+
const nats_jetstream_errors_formatter_1 = require("./nats-jetstream-errors.formatter");
|
|
10
|
+
const nats_jetstream_transport_module_1 = require("./nats-jetstream-transport.module");
|
|
11
|
+
const server_1 = require("./server");
|
|
12
|
+
class NatsJetstreamTransport {
|
|
13
|
+
options;
|
|
14
|
+
logger = logging_1.LoggerFactory.create(NatsJetstreamTransport);
|
|
15
|
+
servers = [];
|
|
16
|
+
name = 'nats-jetstream-unknown';
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
extractHeaders(ctx) {
|
|
21
|
+
return new nats_headers_1.NatsHeaders(ctx);
|
|
22
|
+
}
|
|
23
|
+
getProtocol() {
|
|
24
|
+
return 'nats-jetstream';
|
|
25
|
+
}
|
|
26
|
+
matchByContext(ctx) {
|
|
27
|
+
const natsCtx = ctx.getArgByIndex(1);
|
|
28
|
+
return server_1.NatsJetStreamServer.isNatsContext(natsCtx);
|
|
29
|
+
}
|
|
30
|
+
getErrorsFormatter() {
|
|
31
|
+
return new nats_jetstream_errors_formatter_1.NatsJetstreamErrorsFormatter();
|
|
32
|
+
}
|
|
33
|
+
getErrorTransformers() {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
modules() {
|
|
37
|
+
return [nats_jetstream_transport_module_1.NatsJetstreamTransportModule];
|
|
38
|
+
}
|
|
39
|
+
createMicroserviceOptions() {
|
|
40
|
+
const options = {
|
|
41
|
+
...this.options,
|
|
42
|
+
connectionOptions: {
|
|
43
|
+
...this.options?.connectionOptions,
|
|
44
|
+
name: this.name,
|
|
45
|
+
servers: this.servers,
|
|
46
|
+
},
|
|
47
|
+
consumerOptions: {
|
|
48
|
+
...this.options?.consumerOptions,
|
|
49
|
+
},
|
|
50
|
+
streamConfig: [],
|
|
51
|
+
};
|
|
52
|
+
this.logger.trace('createMicroserviceOptions', { options });
|
|
53
|
+
const { name } = core_1.Manifest.getData();
|
|
54
|
+
const server = new server_1.NatsJetStreamServer(options, {
|
|
55
|
+
appName: name,
|
|
56
|
+
autoUpdateConsumers: true,
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
strategy: server,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
init(configContext) {
|
|
63
|
+
const natsConfig = configContext.resolve(nats_common_1.DefaultNatsConfig);
|
|
64
|
+
const natsJetstreamConfig = configContext.resolve(nats_jetstream_config_1.NatsJetstreamConfig);
|
|
65
|
+
this.name = natsJetstreamConfig.name;
|
|
66
|
+
this.servers = natsConfig.servers;
|
|
67
|
+
}
|
|
68
|
+
onStart() {
|
|
69
|
+
this.logger.info(`Nats servers: ${this.servers.join(',')}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.NatsJetstreamTransport = NatsJetstreamTransport;
|
|
73
|
+
//# sourceMappingURL=nats-jetstream.transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jetstream.transport.js","sourceRoot":"","sources":["../src/nats-jetstream.transport.ts"],"names":[],"mappings":";;;AAGA,qCAQoB;AACpB,2CAA8C;AAC9C,mDAAsD;AAGtD,iDAA6C;AAC7C,mEAA8D;AAC9D,uFAAiF;AACjF,uFAAiF;AACjF,qCAA+C;AAE/C,MAAa,sBAAsB;IAKJ;IAJZ,MAAM,GAAG,uBAAa,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC/D,OAAO,GAAa,EAAE,CAAC;IACvB,IAAI,GAAG,wBAAwB,CAAC;IAExC,YAA6B,OAAuC;QAAvC,YAAO,GAAP,OAAO,CAAgC;IAAG,CAAC;IAExE,cAAc,CAAC,GAAqB;QAClC,OAAO,IAAI,0BAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW;QACT,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,cAAc,CAAC,GAAkB;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAErC,OAAO,4BAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,8DAA4B,EAAE,CAAC;IAC5C,CAAC;IAED,oBAAoB;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,OAAO,CAAC,8DAA4B,CAAC,CAAC;IACxC,CAAC;IAED,yBAAyB;QACvB,MAAM,OAAO,GAA+B;YAC1C,GAAG,IAAI,CAAC,OAAO;YACf,iBAAiB,EAAE;gBACjB,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB;gBAClC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;YACD,eAAe,EAAE;gBACf,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe;aACjC;YACD,YAAY,EAAE,EAAE;SACjB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5D,MAAM,EAAE,IAAI,EAAE,GAAG,eAAQ,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,4BAAmB,CAAC,OAAO,EAAE;YAC9C,OAAO,EAAE,IAAI;YACb,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,aAA4B;QAC/B,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,+BAAiB,CAAC,CAAC;QAC5D,MAAM,mBAAmB,GAAG,aAAa,CAAC,OAAO,CAAC,2CAAmB,CAAC,CAAC;QAEvE,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAvED,wDAuEC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import type { GenericHeaders } from '@rsdk/core';
|
|
3
|
+
/**
|
|
4
|
+
* @description хелпер для нормализованного извлечения заголовков из nats
|
|
5
|
+
*/
|
|
6
|
+
export declare class NatsHeaders implements GenericHeaders {
|
|
7
|
+
private readonly normalizedHeaders;
|
|
8
|
+
constructor(ctx: ExecutionContext);
|
|
9
|
+
get(key: string): string | undefined;
|
|
10
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NatsHeaders = void 0;
|
|
4
|
+
const core_1 = require("@rsdk/core");
|
|
5
|
+
const server_1 = require("./server");
|
|
6
|
+
/**
|
|
7
|
+
* @description хелпер для нормализованного извлечения заголовков из nats
|
|
8
|
+
*/
|
|
9
|
+
class NatsHeaders {
|
|
10
|
+
normalizedHeaders;
|
|
11
|
+
constructor(ctx) {
|
|
12
|
+
const natsCtx = ctx.getArgByIndex(1);
|
|
13
|
+
if (!server_1.NatsJetStreamServer.isNatsContext(natsCtx)) {
|
|
14
|
+
throw new core_1.InputException('Unexpected call with non Nats ArgumentHost');
|
|
15
|
+
}
|
|
16
|
+
this.normalizedHeaders = Object.fromEntries(Object.entries(natsCtx.message.headers || {}).map(([k, v]) => [
|
|
17
|
+
Array.isArray(k)
|
|
18
|
+
? k[0].toString().toLowerCase()
|
|
19
|
+
: k.toString().toLowerCase(),
|
|
20
|
+
v,
|
|
21
|
+
]));
|
|
22
|
+
}
|
|
23
|
+
get(key) {
|
|
24
|
+
return this.normalizedHeaders[key.toLowerCase()];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.NatsHeaders = NatsHeaders;
|
|
28
|
+
//# sourceMappingURL=nats.headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats.headers.js","sourceRoot":"","sources":["../src/nats.headers.ts"],"names":[],"mappings":";;;AAEA,qCAA4C;AAE5C,qCAA+C;AAE/C;;GAEG;AACH,MAAa,WAAW;IACL,iBAAiB,CAAyB;IAE3D,YAAY,GAAqB;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAErC,IAAI,CAAC,4BAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,qBAAc,CAAC,4CAA4C,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,WAAW,CACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5D,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;gBAC/B,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;YAC9B,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;CACF;AAvBD,kCAuBC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Contract<T> = {
|
|
2
|
+
decode: (bytes: Uint8Array) => T;
|
|
3
|
+
encode: (data: T) => {
|
|
4
|
+
finish: () => Uint8Array;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
export declare const Payload: <T>(...dataOrPipes: (Contract<T> | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Payload = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
exports.Payload = (0, common_1.createParamDecorator)((contract, ctx) => {
|
|
6
|
+
const natsContext = ctx.getArgByIndex(1);
|
|
7
|
+
return contract.decode(natsContext.message.data);
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=payload.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.decorator.js","sourceRoot":"","sources":["../src/payload.decorator.ts"],"names":[],"mappings":";;;AACA,2CAAsD;AASzC,QAAA,OAAO,GAAG,IAAA,6BAAoB,EACzC,CAAI,QAAqB,EAAE,GAAqB,EAAK,EAAE;IACrD,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAEzC,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC,CACF,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { CustomTransportStrategy, MessageHandler } from '@nestjs/microservices';
|
|
2
|
+
import { Server } from '@nestjs/microservices';
|
|
3
|
+
import type { NatsJetStreamServerOptions } from '@nestjs-plugins/nestjs-nats-jetstream-transport';
|
|
4
|
+
import { NatsJetStreamContext } from '@nestjs-plugins/nestjs-nats-jetstream-transport';
|
|
5
|
+
import { EventsDeserializer } from './events.deserializer';
|
|
6
|
+
/**
|
|
7
|
+
* Класс, реализующий сервер NATS JetStream.
|
|
8
|
+
*/
|
|
9
|
+
export declare class NatsJetStreamServer extends Server implements CustomTransportStrategy {
|
|
10
|
+
private readonly options;
|
|
11
|
+
private readonly config;
|
|
12
|
+
readonly transportId: symbol;
|
|
13
|
+
logger: import("@rsdk/logging").ILogger;
|
|
14
|
+
readonly deserializer: EventsDeserializer;
|
|
15
|
+
private nc?;
|
|
16
|
+
private jsm?;
|
|
17
|
+
private readonly streams;
|
|
18
|
+
private readonly normalizedApplicationName;
|
|
19
|
+
private readonly autoUpdateConsumers;
|
|
20
|
+
/**
|
|
21
|
+
* Конструктор класса NatsJetStreamServer.
|
|
22
|
+
* @param options - Опции для подключения к NATS JetStream.
|
|
23
|
+
* @param config - Конфигурация приложения.
|
|
24
|
+
*/
|
|
25
|
+
constructor(options: NatsJetStreamServerOptions, config: {
|
|
26
|
+
appName: string;
|
|
27
|
+
autoUpdateConsumers?: boolean;
|
|
28
|
+
});
|
|
29
|
+
static isNatsContext(maybeNatsContext: unknown): maybeNatsContext is NatsJetStreamContext;
|
|
30
|
+
/**
|
|
31
|
+
* Запускает сервер и устанавливает соединение.
|
|
32
|
+
* @param callback - Функция обратного вызова для выполнения после подключения.
|
|
33
|
+
*/
|
|
34
|
+
listen(callback: () => void): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Закрывает соединение с сервером.
|
|
37
|
+
*/
|
|
38
|
+
close(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Добавляет обработчик сообщения.
|
|
41
|
+
* @param pattern Шаблон для сообщения.
|
|
42
|
+
* @param callback Функция-обработчик сообщения.
|
|
43
|
+
* @param isEventHandler Указывает, является ли обработчик обработчиком событий.
|
|
44
|
+
* @param extras Дополнительные параметры.
|
|
45
|
+
*/
|
|
46
|
+
addHandler(pattern: any, callback: MessageHandler, isEventHandler?: boolean, extras?: Record<string, any>): void;
|
|
47
|
+
/**
|
|
48
|
+
* Получает тип события из шаблона.
|
|
49
|
+
* @param pattern - Шаблон для получения типа события.
|
|
50
|
+
* @returns Тип события.
|
|
51
|
+
*/
|
|
52
|
+
private getEventType;
|
|
53
|
+
/**
|
|
54
|
+
* Связывает обработчики событий.
|
|
55
|
+
*/
|
|
56
|
+
private bindEventHandlers;
|
|
57
|
+
/**
|
|
58
|
+
* Группирует обработчики по типу порядка (зависимые и независимые от порядка).
|
|
59
|
+
*
|
|
60
|
+
* @param {Array<[string, MessageHandler<any, any, any>]>} eventHandlers - Список обработчиков событий,
|
|
61
|
+
* где каждый элемент представляет собой кортеж из метаданных и обработчика.
|
|
62
|
+
*
|
|
63
|
+
* @returns {{
|
|
64
|
+
* orderedConsumers: ConsumersMap,
|
|
65
|
+
* unorderedConsumers: ConsumersMap
|
|
66
|
+
* }}
|
|
67
|
+
* Объект, содержащий две карты:
|
|
68
|
+
* - orderedConsumers: карта с зависимыми от порядка consumer'ами.
|
|
69
|
+
* - unorderedConsumers: карта с независимыми от порядка consumer'ами.
|
|
70
|
+
*/
|
|
71
|
+
private groupHandlersByOrderType;
|
|
72
|
+
/**
|
|
73
|
+
* Получает информацию о консьюмере.
|
|
74
|
+
* @param js - Клиент JetStream.
|
|
75
|
+
* @param streamName - Имя потока.
|
|
76
|
+
* @param consumerName - Имя консьюмера.
|
|
77
|
+
* @returns Информация о консьюмере.
|
|
78
|
+
*/
|
|
79
|
+
private getConsumer;
|
|
80
|
+
/**
|
|
81
|
+
* Создаёт консьюмера для заданного потока.
|
|
82
|
+
* @param js - Клиент JetStream.
|
|
83
|
+
* @param consumerName - Имя консьюмера.
|
|
84
|
+
* @param consumer - Информация о консьюмере.
|
|
85
|
+
* @param options - Дополнительные параметры конфигурации консьюмера.
|
|
86
|
+
*/
|
|
87
|
+
private createConsumer;
|
|
88
|
+
/**
|
|
89
|
+
* Обрабатывает сообщения из консьюмера.
|
|
90
|
+
* @param consumer - Консьюмер для обработки сообщений.
|
|
91
|
+
* @param mapping - Соответствия между типами сообщений и обработчиками.
|
|
92
|
+
* @param consumerName - Имя консьюмера.
|
|
93
|
+
*/
|
|
94
|
+
private handleMessages;
|
|
95
|
+
/**
|
|
96
|
+
* Проверяет корректность подписки консьюмера.
|
|
97
|
+
* @param jsm - Менеджер JetStream.
|
|
98
|
+
* @param streamName - Имя потока.
|
|
99
|
+
* @param consumerName - Имя консьюмера.
|
|
100
|
+
* @param expectedSubjects - Ожидаемые темы.
|
|
101
|
+
* @param receivedSubjects - Полученные темы.
|
|
102
|
+
*/
|
|
103
|
+
private handleCorrectness;
|
|
104
|
+
/**
|
|
105
|
+
* Связывает обработчики сообщений.
|
|
106
|
+
*/
|
|
107
|
+
private bindMessageHandlers;
|
|
108
|
+
/**
|
|
109
|
+
* Настраивает поток для сервера.
|
|
110
|
+
*/
|
|
111
|
+
private setupStream;
|
|
112
|
+
/**
|
|
113
|
+
* Получает имя потока для десериализатора.
|
|
114
|
+
* @param contract - Десериализатор событий.
|
|
115
|
+
* @returns Имя потока.
|
|
116
|
+
*/
|
|
117
|
+
private getStreamName;
|
|
118
|
+
/**
|
|
119
|
+
* Получает имя консьюмера по десериализатору.
|
|
120
|
+
* @param contract - Десериализатор событий.
|
|
121
|
+
* @returns Имя консьюмера.
|
|
122
|
+
*/
|
|
123
|
+
private getConsumerName;
|
|
124
|
+
/**
|
|
125
|
+
* Получает темы событий для десериализатора.
|
|
126
|
+
* @param contract - Десериализатор событий.
|
|
127
|
+
* @returns Темы событий.
|
|
128
|
+
*/
|
|
129
|
+
private getEventSubjects;
|
|
130
|
+
/**
|
|
131
|
+
* Получает часть типа события.
|
|
132
|
+
* @param eventType - Тип события.
|
|
133
|
+
* @returns Часть типа.
|
|
134
|
+
*/
|
|
135
|
+
private getTypePart;
|
|
136
|
+
}
|