@rsdk/nats.producer.request 5.15.0-next.9 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/repository/clients.repository.d.ts +3 -1
- package/dist/repository/clients.repository.js +9 -4
- package/dist/repository/clients.repository.js.map +1 -1
- package/dist/request-producer.factory.d.ts +1 -0
- package/dist/request-producer.factory.js +5 -2
- package/dist/request-producer.factory.js.map +1 -1
- package/dist/request.options.d.ts +2 -0
- package/package.json +2 -2
- package/src/repository/clients.repository.ts +3 -0
- package/src/request-producer.factory.ts +19 -5
- package/src/request.options.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [5.15.0](https://github.com/R-Vision/rsdk/compare/v5.15.0-next.14...v5.15.0) (2026-10-30)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @rsdk/nats.producer.request
|
|
9
|
+
|
|
6
10
|
## [5.14.1](https://github.com/R-Vision/rsdk/compare/v5.14.1-next.0...v5.14.1) (2026-09-16)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @rsdk/nats.producer.request
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ConfigContext, PropertyToken } from '@rsdk/core';
|
|
2
|
+
import { NatsMetricsConfig } from '@rsdk/nats.common';
|
|
2
3
|
import { NatsConnection } from 'nats';
|
|
3
4
|
import { NatsRequestClientsOptions } from '../options/types';
|
|
4
5
|
import { NatsRequestClientFactory } from '../request-client.factory';
|
|
@@ -12,8 +13,9 @@ import { NatsRequestClient, ServiceDefinition } from '../servers/types';
|
|
|
12
13
|
export declare class ClientsRepository {
|
|
13
14
|
private readonly factory;
|
|
14
15
|
private readonly configContext;
|
|
16
|
+
private readonly metricsConfig;
|
|
15
17
|
private readonly clients;
|
|
16
|
-
constructor(factory: NatsRequestClientFactory, configContext: ConfigContext, options?: NatsRequestClientsOptions);
|
|
18
|
+
constructor(factory: NatsRequestClientFactory, configContext: ConfigContext, metricsConfig: NatsMetricsConfig, options?: NatsRequestClientsOptions);
|
|
17
19
|
resolveClient(definition: ServiceDefinition, nc: NatsConnection, clientToken: string, { payloadFormatKey, responsePayloadFormatKey, }: {
|
|
18
20
|
payloadFormatKey: PropertyToken;
|
|
19
21
|
responsePayloadFormatKey: PropertyToken;
|
|
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.ClientsRepository = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const core_1 = require("@rsdk/core");
|
|
18
|
+
const nats_common_1 = require("@rsdk/nats.common");
|
|
18
19
|
const exception_mapper_middleware_1 = require("../middleware/exception-mapper.middleware");
|
|
19
20
|
const opentelemetry_middleware_1 = require("../middleware/opentelemetry.middleware");
|
|
20
21
|
const tracing_middleware_1 = require("../middleware/tracing.middleware");
|
|
@@ -29,10 +30,12 @@ const request_client_factory_1 = require("../request-client.factory");
|
|
|
29
30
|
let ClientsRepository = class ClientsRepository {
|
|
30
31
|
factory;
|
|
31
32
|
configContext;
|
|
33
|
+
metricsConfig;
|
|
32
34
|
clients = new Map();
|
|
33
|
-
constructor(factory, configContext, options) {
|
|
35
|
+
constructor(factory, configContext, metricsConfig, options) {
|
|
34
36
|
this.factory = factory;
|
|
35
37
|
this.configContext = configContext;
|
|
38
|
+
this.metricsConfig = metricsConfig;
|
|
36
39
|
this.factory.use((0, exception_mapper_middleware_1.exceptionMapperMiddleware)());
|
|
37
40
|
this.factory.use((0, tracing_middleware_1.tracingMiddleware)());
|
|
38
41
|
// Подключается последним, поэтому оборачивает остальные встроенные middleware
|
|
@@ -54,6 +57,7 @@ let ClientsRepository = class ClientsRepository {
|
|
|
54
57
|
const client = this.factory.create(definition, nc, {
|
|
55
58
|
payloadFormat,
|
|
56
59
|
responsePayloadFormat,
|
|
60
|
+
metrics: this.metricsConfig.toOptions(),
|
|
57
61
|
});
|
|
58
62
|
this.clients.set(clientToken, client);
|
|
59
63
|
return client;
|
|
@@ -62,9 +66,10 @@ let ClientsRepository = class ClientsRepository {
|
|
|
62
66
|
exports.ClientsRepository = ClientsRepository;
|
|
63
67
|
exports.ClientsRepository = ClientsRepository = __decorate([
|
|
64
68
|
(0, common_1.Injectable)(),
|
|
65
|
-
__param(
|
|
66
|
-
__param(
|
|
69
|
+
__param(3, (0, common_1.Optional)()),
|
|
70
|
+
__param(3, (0, common_1.Inject)(di_1.NATS_REQUEST_CLIENTS_OPTIONS)),
|
|
67
71
|
__metadata("design:paramtypes", [request_client_factory_1.NatsRequestClientFactory,
|
|
68
|
-
core_1.ConfigContext,
|
|
72
|
+
core_1.ConfigContext,
|
|
73
|
+
nats_common_1.NatsMetricsConfig, Object])
|
|
69
74
|
], ClientsRepository);
|
|
70
75
|
//# sourceMappingURL=clients.repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.repository.js","sourceRoot":"","sources":["../../src/repository/clients.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8D;AAC9D,qCAA0D;
|
|
1
|
+
{"version":3,"file":"clients.repository.js","sourceRoot":"","sources":["../../src/repository/clients.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8D;AAC9D,qCAA0D;AAC1D,mDAAsD;AAGtD,2FAAsF;AACtF,qFAAiF;AACjF,yEAAqE;AACrE,sCAA6D;AAE7D,sEAAqE;AAGrE;;;;;GAKG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAOT;IACA;IACA;IARF,OAAO,GAAG,IAAI,GAAG,EAG/B,CAAC;IAEJ,YACmB,OAAiC,EACjC,aAA4B,EAC5B,aAAgC,EAGjD,OAAmC;QALlB,YAAO,GAAP,OAAO,CAA0B;QACjC,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAmB;QAKjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,uDAAyB,GAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,sCAAiB,GAAE,CAAC,CAAC;QAEtC,8EAA8E;QAC9E,yCAAyC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,kDAAuB,GAAE,CAAC,CAAC;QAE5C,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QAErC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CACX,UAA6B,EAC7B,EAAkB,EAClB,WAAmB,EACnB,EACE,gBAAgB,EAChB,wBAAwB,GAIzB;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,WAAW,CAC4B,CAAC;QAC5C,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC3E,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAC9D,wBAAwB,CACzB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE;YACjD,aAAa;YACb,qBAAqB;YACrB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEtC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AA/DY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAWR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,iCAA4B,CAAC,CAAA;qCAJX,iDAAwB;QAClB,oBAAa;QACb,+BAAiB;GATxC,iBAAiB,CA+D7B"}
|
|
@@ -7,6 +7,7 @@ export declare class RequestProducerFactory<T extends MessageType, R extends Mes
|
|
|
7
7
|
private readonly requestType;
|
|
8
8
|
private readonly responseType;
|
|
9
9
|
private readonly factory;
|
|
10
|
+
private readonly metrics;
|
|
10
11
|
constructor(client: NatsConnection, requestType: T, responseType: R, config: RequestProducerOptions);
|
|
11
12
|
createRequestMethod<R>(middleware?: NatsMiddleware): (payload: MessagePayload<T>, options?: CallOptions) => Promise<R>;
|
|
12
13
|
private getResponseDecoder;
|
|
@@ -10,6 +10,7 @@ class RequestProducerFactory {
|
|
|
10
10
|
requestType;
|
|
11
11
|
responseType;
|
|
12
12
|
factory;
|
|
13
|
+
metrics;
|
|
13
14
|
constructor(client, requestType, responseType, config) {
|
|
14
15
|
this.client = client;
|
|
15
16
|
this.requestType = requestType;
|
|
@@ -17,18 +18,20 @@ class RequestProducerFactory {
|
|
|
17
18
|
this.client = client;
|
|
18
19
|
this.requestType = requestType;
|
|
19
20
|
this.factory = new request_message_factory_1.EventsFactoryRequest(requestType, config);
|
|
21
|
+
this.metrics = new nats_common_1.NatsPublishMetrics(nats_common_1.NatsClientNames.get(client), nats_common_1.NatsMetricsRegistry.from(config.metrics));
|
|
20
22
|
}
|
|
21
23
|
createRequestMethod(middleware) {
|
|
22
24
|
const factory = this.factory;
|
|
23
25
|
const client = this.client;
|
|
26
|
+
const metrics = this.metrics;
|
|
24
27
|
const getResponseDecoder = this.getResponseDecoder.bind(this);
|
|
25
28
|
const subject = this.requestType.$type;
|
|
26
29
|
const unaryMethod = async function* (request, options) {
|
|
27
30
|
const message = factory.create(request, options?.metadata);
|
|
28
|
-
const res = await client.request(subject, message.payload, {
|
|
31
|
+
const res = await metrics.observe('core', message.payload, () => client.request(subject, message.payload, {
|
|
29
32
|
headers: message.headers,
|
|
30
33
|
timeout: options?.timeout ?? 10000,
|
|
31
|
-
});
|
|
34
|
+
}));
|
|
32
35
|
if (options.onTrailer && res.headers) {
|
|
33
36
|
options.onTrailer(res.headers);
|
|
34
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-producer.factory.js","sourceRoot":"","sources":["../src/request-producer.factory.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAC/C,uDAI6B;AAM7B,
|
|
1
|
+
{"version":3,"file":"request-producer.factory.js","sourceRoot":"","sources":["../src/request-producer.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { PayloadFormat } from '@rsdk/events.common';
|
|
2
|
+
import type { NatsMetricsSelection } from '@rsdk/nats.common';
|
|
2
3
|
import type { EventMetadata } from '@rsdk/nats.producer';
|
|
3
4
|
export type RequestProducerOptions = {
|
|
4
5
|
payloadFormat: PayloadFormat;
|
|
5
6
|
responsePayloadFormat: PayloadFormat;
|
|
7
|
+
metrics?: NatsMetricsSelection;
|
|
6
8
|
};
|
|
7
9
|
export type PublishOptions = {
|
|
8
10
|
metadata?: EventMetadata;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/nats.producer.request",
|
|
3
|
-
"version": "5.15.0
|
|
3
|
+
"version": "5.15.0",
|
|
4
4
|
"description": "Nats request/reply producer",
|
|
5
5
|
"license": "Apache License 2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"reflect-metadata": "^0.1.12 || ^0.2.0",
|
|
31
31
|
"rxjs": "^7.1.0"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "1b5584a7b75980e56ac9a2e0a92996aab80510fd"
|
|
34
34
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Inject, Injectable, Optional } from '@nestjs/common';
|
|
2
2
|
import { ConfigContext, PropertyToken } from '@rsdk/core';
|
|
3
|
+
import { NatsMetricsConfig } from '@rsdk/nats.common';
|
|
3
4
|
import { NatsConnection } from 'nats';
|
|
4
5
|
|
|
5
6
|
import { exceptionMapperMiddleware } from '../middleware/exception-mapper.middleware';
|
|
@@ -26,6 +27,7 @@ export class ClientsRepository {
|
|
|
26
27
|
constructor(
|
|
27
28
|
private readonly factory: NatsRequestClientFactory,
|
|
28
29
|
private readonly configContext: ConfigContext,
|
|
30
|
+
private readonly metricsConfig: NatsMetricsConfig,
|
|
29
31
|
@Optional()
|
|
30
32
|
@Inject(NATS_REQUEST_CLIENTS_OPTIONS)
|
|
31
33
|
options?: NatsRequestClientsOptions,
|
|
@@ -72,6 +74,7 @@ export class ClientsRepository {
|
|
|
72
74
|
const client = this.factory.create(definition, nc, {
|
|
73
75
|
payloadFormat,
|
|
74
76
|
responsePayloadFormat,
|
|
77
|
+
metrics: this.metricsConfig.toOptions(),
|
|
75
78
|
});
|
|
76
79
|
|
|
77
80
|
this.clients.set(clientToken, client);
|
|
@@ -9,7 +9,13 @@ import type {
|
|
|
9
9
|
MessagePayload,
|
|
10
10
|
MessageType,
|
|
11
11
|
} from '@rsdk/nats.common';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
JSONMessageCodec,
|
|
14
|
+
NatsClientNames,
|
|
15
|
+
NatsMetricsRegistry,
|
|
16
|
+
NatsPublishMetrics,
|
|
17
|
+
ProtoMessageCodec,
|
|
18
|
+
} from '@rsdk/nats.common';
|
|
13
19
|
import { type NatsConnection } from 'nats';
|
|
14
20
|
|
|
15
21
|
import type { CallOptions, NatsMiddleware } from './middleware/types';
|
|
@@ -21,6 +27,7 @@ export class RequestProducerFactory<
|
|
|
21
27
|
R extends MessageType,
|
|
22
28
|
> {
|
|
23
29
|
private readonly factory: EventsFactoryRequest<T>;
|
|
30
|
+
private readonly metrics: NatsPublishMetrics;
|
|
24
31
|
|
|
25
32
|
constructor(
|
|
26
33
|
private readonly client: NatsConnection,
|
|
@@ -31,6 +38,10 @@ export class RequestProducerFactory<
|
|
|
31
38
|
this.client = client;
|
|
32
39
|
this.requestType = requestType;
|
|
33
40
|
this.factory = new EventsFactoryRequest(requestType, config);
|
|
41
|
+
this.metrics = new NatsPublishMetrics(
|
|
42
|
+
NatsClientNames.get(client),
|
|
43
|
+
NatsMetricsRegistry.from(config.metrics),
|
|
44
|
+
);
|
|
34
45
|
}
|
|
35
46
|
|
|
36
47
|
createRequestMethod<R>(
|
|
@@ -38,6 +49,7 @@ export class RequestProducerFactory<
|
|
|
38
49
|
): (payload: MessagePayload<T>, options?: CallOptions) => Promise<R> {
|
|
39
50
|
const factory = this.factory;
|
|
40
51
|
const client = this.client;
|
|
52
|
+
const metrics = this.metrics;
|
|
41
53
|
const getResponseDecoder = this.getResponseDecoder.bind(this);
|
|
42
54
|
const subject = this.requestType.$type;
|
|
43
55
|
|
|
@@ -47,10 +59,12 @@ export class RequestProducerFactory<
|
|
|
47
59
|
): AsyncGenerator<never, R, undefined> {
|
|
48
60
|
const message = factory.create(request, options?.metadata);
|
|
49
61
|
|
|
50
|
-
const res = await
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
62
|
+
const res = await metrics.observe('core', message.payload, () =>
|
|
63
|
+
client.request(subject, message.payload, {
|
|
64
|
+
headers: message.headers,
|
|
65
|
+
timeout: options?.timeout ?? 10000,
|
|
66
|
+
}),
|
|
67
|
+
);
|
|
54
68
|
|
|
55
69
|
if (options.onTrailer && res.headers) {
|
|
56
70
|
options.onTrailer(res.headers);
|
package/src/request.options.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { PayloadFormat } from '@rsdk/events.common';
|
|
2
|
+
import type { NatsMetricsSelection } from '@rsdk/nats.common';
|
|
2
3
|
import type { EventMetadata } from '@rsdk/nats.producer';
|
|
3
4
|
|
|
4
5
|
export type RequestProducerOptions = {
|
|
5
6
|
payloadFormat: PayloadFormat;
|
|
6
7
|
responsePayloadFormat: PayloadFormat;
|
|
8
|
+
metrics?: NatsMetricsSelection;
|
|
7
9
|
};
|
|
8
10
|
|
|
9
11
|
export type PublishOptions = {
|