@rsdk/grpc.server 4.2.5-next.0 → 4.3.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/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
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
+ ## [4.3.0-next.1](https://github.com/R-Vision/rsdk/compare/v4.3.0-next.0...v4.3.0-next.1) (2024-03-21)
7
+
8
+ **Note:** Version bump only for package @rsdk/grpc.server
9
+
10
+ ## [4.3.0-next.0](https://github.com/R-Vision/rsdk/compare/v4.2.5-next.0...v4.3.0-next.0) (2024-03-19)
11
+
12
+ ### Features
13
+
14
+ * reworked cli system ([745ebf5](https://github.com/R-Vision/rsdk/commit/745ebf53635de135a4a9083f47ce833efe2d4411))
15
+
6
16
  ## [4.2.5-next.0](https://github.com/R-Vision/rsdk/compare/v4.2.4...v4.2.5-next.0) (2024-03-04)
7
17
 
8
18
  **Note:** Version bump only for package @rsdk/grpc.server
@@ -0,0 +1,13 @@
1
+ import type { Metadata } from '@grpc/grpc-js';
2
+ import type { MaybeReadonlyArray } from '@rsdk/common.node';
3
+ import { TracingHeaders } from '@rsdk/core/dist/tracing/types';
4
+ /**
5
+ * @description хелпер для нормализованного извлечения заголовков из grpc запроса
6
+ */
7
+ export declare class GrpcHeaders {
8
+ private metadata;
9
+ constructor(metadata: Metadata);
10
+ get<K extends string>(key: MaybeReadonlyArray<K>): Record<K, string | undefined>;
11
+ get(key: string): string | undefined;
12
+ getTracingHeaders(): TracingHeaders;
13
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GrpcHeaders = void 0;
4
+ const types_1 = require("@rsdk/core/dist/tracing/types");
5
+ /**
6
+ * @description хелпер для нормализованного извлечения заголовков из grpc запроса
7
+ */
8
+ class GrpcHeaders {
9
+ metadata;
10
+ constructor(metadata) {
11
+ this.metadata = metadata;
12
+ }
13
+ get(key) {
14
+ if (Array.isArray(key)) {
15
+ return Object.fromEntries(key.map((k) => [k, this.get(k)]));
16
+ }
17
+ const requestIdMetadata = this.metadata.get(key);
18
+ if (requestIdMetadata.length > 0) {
19
+ return requestIdMetadata[0].toString();
20
+ }
21
+ return undefined;
22
+ }
23
+ getTracingHeaders() {
24
+ const h = this.get(types_1.tracingHeaders);
25
+ return new types_1.TracingHeaders({
26
+ ...h,
27
+ });
28
+ }
29
+ }
30
+ exports.GrpcHeaders = GrpcHeaders;
31
+ //# sourceMappingURL=grpc.headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc.headers.js","sourceRoot":"","sources":["../src/grpc.headers.ts"],"names":[],"mappings":";;;AAEA,yDAIuC;AAEvC;;GAEG;AACH,MAAa,WAAW;IACF;IAApB,YAAoB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAM1C,GAAG,CACD,GAAwC;QAExC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAGzD,CAAC;QACJ,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;QAC3D,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAc,CAAqB,CAAC;QAEvD,OAAO,IAAI,sBAAc,CAAC;YACxB,GAAG,CAAC;SACL,CAAC,CAAC;IACL,CAAC;CACF;AA9BD,kCA8BC"}
@@ -0,0 +1,6 @@
1
+ import type { ExecutionContext } from '@nestjs/common/interfaces';
2
+ import type { ProtocolTracingHeadersExtractor } from '@rsdk/core';
3
+ import type { TracingHeaders } from '@rsdk/core/dist/tracing/types';
4
+ export declare class GrpcTracingExtractor implements ProtocolTracingHeadersExtractor {
5
+ extract(ctx: ExecutionContext): TracingHeaders;
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GrpcTracingExtractor = void 0;
4
+ const grpc_headers_1 = require("./grpc.headers");
5
+ class GrpcTracingExtractor {
6
+ extract(ctx) {
7
+ const metadata = ctx.switchToRpc().getContext();
8
+ return new grpc_headers_1.GrpcHeaders(metadata).getTracingHeaders();
9
+ }
10
+ }
11
+ exports.GrpcTracingExtractor = GrpcTracingExtractor;
12
+ //# sourceMappingURL=grpc.tracing-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc.tracing-extractor.js","sourceRoot":"","sources":["../src/grpc.tracing-extractor.ts"],"names":[],"mappings":";;;AAIA,iDAA6C;AAE7C,MAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAqB;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,CAAC;QAEhD,OAAO,IAAI,0BAAW,CAAC,QAAQ,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACvD,CAAC;CACF;AAND,oDAMC"}
@@ -1,11 +1,12 @@
1
1
  import type { Controller, ExecutionContext } from '@nestjs/common/interfaces';
2
2
  import type { MicroserviceOptions } from '@nestjs/microservices';
3
3
  import type { Constructor } from '@rsdk/common';
4
- import type { ConfigContext, IErrorsFormatter, IErrorsSender, IErrorsTransformer, IMicroserviceTransport, NestModuleDefinitions } from '@rsdk/core';
4
+ import type { ConfigContext, IErrorsFormatter, IErrorsSender, IErrorsTransformer, IMicroserviceTransport, NestModuleDefinitions, ProtocolTracingHeadersExtractor } from '@rsdk/core';
5
5
  import type { Package } from '@rsdk/grpc.loader';
6
6
  export declare class GrpcTransport implements IMicroserviceTransport {
7
7
  private readonly logger;
8
8
  private readonly packages;
9
+ getHeaderExtractor(): ProtocolTracingHeadersExtractor;
9
10
  private address?;
10
11
  private maxRecv?;
11
12
  private maxSend?;
@@ -9,6 +9,7 @@ const logging_1 = require("@rsdk/logging");
9
9
  const constants_1 = require("./constants");
10
10
  const controllers_1 = require("./controllers");
11
11
  const grpc_config_1 = require("./grpc.config");
12
+ const grpc_tracing_extractor_1 = require("./grpc.tracing-extractor");
12
13
  const grpc_utils_1 = require("./grpc.utils");
13
14
  const grpc_errors_formatter_1 = require("./grpc-errors.formatter");
14
15
  const grpc_errors_sender_1 = require("./grpc-errors.sender");
@@ -17,6 +18,9 @@ const reflection_module_1 = require("./reflection.module");
17
18
  class GrpcTransport {
18
19
  logger = logging_1.LoggerFactory.create(GrpcTransport);
19
20
  packages;
21
+ getHeaderExtractor() {
22
+ return new grpc_tracing_extractor_1.GrpcTracingExtractor();
23
+ }
20
24
  address;
21
25
  maxRecv;
22
26
  maxSend;
@@ -30,6 +34,7 @@ class GrpcTransport {
30
34
  server_call_1.ServerUnaryCallImpl,
31
35
  server_call_1.ServerDuplexStreamImpl,
32
36
  server_call_1.ServerWritableStreamImpl,
37
+ server_call_1.ServerReadableStreamImpl,
33
38
  ].some((impl) => call instanceof impl);
34
39
  return isGrpc;
35
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grpc.transport.js","sourceRoot":"","sources":["../src/grpc.transport.ts"],"names":[],"mappings":";;;AAAA,qEAI6C;AAE7C,uCAA+C;AAW/C,qCAA+C;AAE/C,mDAAsD;AACtD,2CAA8C;AAE9C,2CAA4D;AAC5D,+CAAoE;AACpE,+CAA2C;AAC3C,6CAAoD;AACpD,mEAA8D;AAC9D,6DAAwD;AACxD,uEAAkE;AAClE,2DAAuD;AAEvD,MAAa,aAAa;IACP,MAAM,GAAG,uBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAQ,CAAY;IAE7B,OAAO,CAAU;IACjB,OAAO,CAAU;IACjB,OAAO,CAAU;IAEjB,aAAa,GAAG,KAAK,CAAC;IAE9B,YAAY,GAAG,QAAmB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,cAAc,CAAC,GAAqB;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG;YACb,iCAAmB;YACnB,oCAAsB;YACtB,sCAAwB;SACzB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC;QAEvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;QACT,OAAO,yBAAa,CAAC;IACvB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,2CAAmB,EAAE,CAAC;IACnC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,qCAAgB,EAAE,CAAC;IAChC,CAAC;IAED,oBAAoB;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oBAAoB;QAClB,OAAO,+BAAiB,CAAC;IAC3B,CAAC;IAED,mBAAmB;QACjB,OAAO,8BAAgB,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO;YACL,oCAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvC;gBACE,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,sBAAe;wBACxB,QAAQ,EAAE,+CAAqB;qBAChC;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,aAA4B;QAC/B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAExE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,yBAAyB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,IAAA,+BAAiB,EAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,wBAAiB,CAAC,sCAAsC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,eAAe,CAAI,KAAQ;QACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,iBAAiB;QACvB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,0BAAc,EAAE,CAAC;YACjC,IAAI,IAAA,iCAAoB,EAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAxID,sCAwIC"}
1
+ {"version":3,"file":"grpc.transport.js","sourceRoot":"","sources":["../src/grpc.transport.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
+ // Reverse engineered from @grpc/grpc-js source code
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,oDAAoD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/grpc.server",
3
- "version": "4.2.5-next.0",
3
+ "version": "4.3.0-next.1",
4
4
  "description": "Grpc transport for platform, clients and common grpc stuff",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -15,18 +15,19 @@
15
15
  "@nestjs/common": "^10.0.0",
16
16
  "@nestjs/core": "^10.0.0",
17
17
  "@nestjs/microservices": "^10.0.0",
18
- "@rsdk/builtin-contract": "^4.2.5-next.0",
19
- "@rsdk/common": "^4.2.5-next.0",
20
- "@rsdk/core": "^4.2.5-next.0",
21
- "@rsdk/grpc.common": "^4.2.5-next.0",
22
- "@rsdk/grpc.loader": "^4.2.5-next.0",
23
- "@rsdk/logging": "^4.2.5-next.0",
18
+ "@opentelemetry/semantic-conventions": "1.18.1",
19
+ "@rsdk/builtin-contract": "^4.3.0-next.1",
20
+ "@rsdk/common": "^4.3.0-next.1",
21
+ "@rsdk/core": "^4.3.0-next.1",
22
+ "@rsdk/grpc.common": "^4.3.0-next.1",
23
+ "@rsdk/grpc.loader": "^4.3.0-next.1",
24
+ "@rsdk/logging": "^4.3.0-next.1",
24
25
  "nice-grpc": "^2.1.4",
25
- "reflect-metadata": "^0.1.13",
26
+ "reflect-metadata": "^0.1.12 || ^0.2.0",
26
27
  "rxjs": "^7.8.1"
27
28
  },
28
29
  "dependencies": {
29
30
  "@bufbuild/protobuf": "^1.4.2"
30
31
  },
31
- "gitHead": "3fd1ccaa4a982d914736c13b87dc9bfe03cd229d"
32
+ "gitHead": "da58041323f3145aa436e02774d36d44606c1217"
32
33
  }
@@ -0,0 +1,42 @@
1
+ import type { Metadata } from '@grpc/grpc-js';
2
+ import type { MaybeReadonlyArray } from '@rsdk/common.node';
3
+ import {
4
+ type Headers,
5
+ TracingHeaders,
6
+ tracingHeaders,
7
+ } from '@rsdk/core/dist/tracing/types';
8
+
9
+ /**
10
+ * @description хелпер для нормализованного извлечения заголовков из grpc запроса
11
+ */
12
+ export class GrpcHeaders {
13
+ constructor(private metadata: Metadata) {}
14
+
15
+ get<K extends string>(
16
+ key: MaybeReadonlyArray<K>,
17
+ ): Record<K, string | undefined>;
18
+ get(key: string): string | undefined;
19
+ get(
20
+ key: string | MaybeReadonlyArray<string>,
21
+ ): Record<string, string | undefined> | string | undefined {
22
+ if (Array.isArray(key)) {
23
+ return Object.fromEntries(key.map((k) => [k, this.get(k)])) as Record<
24
+ string,
25
+ any
26
+ >;
27
+ }
28
+ const requestIdMetadata = this.metadata.get(key as string);
29
+ if (requestIdMetadata.length > 0) {
30
+ return requestIdMetadata[0].toString();
31
+ }
32
+ return undefined;
33
+ }
34
+
35
+ getTracingHeaders(): TracingHeaders {
36
+ const h = this.get(tracingHeaders) as Partial<Headers>;
37
+
38
+ return new TracingHeaders({
39
+ ...h,
40
+ });
41
+ }
42
+ }
@@ -0,0 +1,13 @@
1
+ import type { ExecutionContext } from '@nestjs/common/interfaces';
2
+ import type { ProtocolTracingHeadersExtractor } from '@rsdk/core';
3
+ import type { TracingHeaders } from '@rsdk/core/dist/tracing/types';
4
+
5
+ import { GrpcHeaders } from './grpc.headers';
6
+
7
+ export class GrpcTracingExtractor implements ProtocolTracingHeadersExtractor {
8
+ extract(ctx: ExecutionContext): TracingHeaders {
9
+ const metadata = ctx.switchToRpc().getContext();
10
+
11
+ return new GrpcHeaders(metadata).getTracingHeaders();
12
+ }
13
+ }
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  ServerDuplexStreamImpl,
3
+ ServerReadableStreamImpl,
3
4
  ServerUnaryCallImpl,
4
5
  ServerWritableStreamImpl,
5
6
  } from '@grpc/grpc-js/build/src/server-call';
@@ -14,6 +15,7 @@ import type {
14
15
  IErrorsTransformer,
15
16
  IMicroserviceTransport,
16
17
  NestModuleDefinitions,
18
+ ProtocolTracingHeadersExtractor,
17
19
  } from '@rsdk/core';
18
20
  import { SequenceException } from '@rsdk/core';
19
21
  import type { Package } from '@rsdk/grpc.loader';
@@ -23,6 +25,7 @@ import { LoggerFactory } from '@rsdk/logging';
23
25
  import { GRPC_PROTOCOL, systemPackages } from './constants';
24
26
  import { HealthController, MetricsController } from './controllers';
25
27
  import { GRPCConfig } from './grpc.config';
28
+ import { GrpcTracingExtractor } from './grpc.tracing-extractor';
26
29
  import { isPackageNotIncluded } from './grpc.utils';
27
30
  import { GrpcErrorsFormatter } from './grpc-errors.formatter';
28
31
  import { GrpcErrorsSender } from './grpc-errors.sender';
@@ -33,6 +36,10 @@ export class GrpcTransport implements IMicroserviceTransport {
33
36
  private readonly logger = LoggerFactory.create(GrpcTransport);
34
37
  private readonly packages: Package[];
35
38
 
39
+ getHeaderExtractor(): ProtocolTracingHeadersExtractor {
40
+ return new GrpcTracingExtractor();
41
+ }
42
+
36
43
  private address?: string;
37
44
  private maxRecv?: number;
38
45
  private maxSend?: number;
@@ -50,6 +57,7 @@ export class GrpcTransport implements IMicroserviceTransport {
50
57
  ServerUnaryCallImpl,
51
58
  ServerDuplexStreamImpl,
52
59
  ServerWritableStreamImpl,
60
+ ServerReadableStreamImpl,
53
61
  ].some((impl) => call instanceof impl);
54
62
 
55
63
  return isGrpc;
@@ -10,7 +10,7 @@ describe('ReflectionService', () => {
10
10
  let reflectionService: ReflectionService;
11
11
 
12
12
  beforeAll(async () => {
13
- const platformTesting = await PlatformTest.create({});
13
+ const platformTesting = PlatformTest.create({});
14
14
 
15
15
  testingModule = await platformTesting
16
16
  .createTestingModule({
package/src/types.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  // Reverse engineered from @grpc/grpc-js source code
2
+
2
3
  import type { ExceptionKind } from '@rsdk/core';
3
4
 
4
5
  export interface FormattedGrpcError {