@rsdk/core 4.3.1-next.1 → 4.3.2-next.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 CHANGED
@@ -3,6 +3,14 @@
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.2-next.0](https://github.com/R-Vision/rsdk/compare/v4.3.1...v4.3.2-next.0) (2024-03-26)
7
+
8
+ **Note:** Version bump only for package @rsdk/core
9
+
10
+ ## [4.3.1](https://github.com/R-Vision/rsdk/compare/v4.3.1-next.0...v4.3.1) (2024-03-25)
11
+
12
+ **Note:** Version bump only for package @rsdk/core
13
+
6
14
  ## [4.3.1-next.1](https://github.com/R-Vision/rsdk/compare/v4.3.1-next.0...v4.3.1-next.1) (2024-03-25)
7
15
 
8
16
  **Note:** Version bump only for package @rsdk/core
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { APP_SCOPE } from './app-metadata/app-metadata.const';
3
3
  export { Manifest } from './manifest/manifest';
4
4
  export { ProtocolDetector } from './transport/protocol.detector';
5
5
  export { X_REQUEST_ID } from './tracing/constants';
6
- export { TracingModule, saveAsyncHooksContext, createSpan, Span, } from './tracing';
6
+ export { TracingModule, createSpan, Span } from './tracing';
7
7
  export { FileSystemCheckOptions, FileSystemIndicator, PingCheckOptions, PingIndicator, } from './health/indicators.abstract';
8
8
  export { HealthChecksService } from './health/health.service';
9
9
  export { CheckSummary } from './health/types';
@@ -23,4 +23,3 @@ export * from './types';
23
23
  export * from './app-metadata/decorators';
24
24
  export * from './app-metadata/app-metadata.const';
25
25
  export { getTransportId } from './transport/get-transport-id';
26
- export { X_B3_PARENT_SPAN_ID, X_B3_SPAN_ID, X_B3_TRACE_ID, } from '@opentelemetry/propagator-b3';
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.X_B3_TRACE_ID = exports.X_B3_SPAN_ID = exports.X_B3_PARENT_SPAN_ID = exports.getTransportId = exports.PlatformApp = exports.register = exports.Summary = exports.MetricsModule = exports.Metric = exports.Histogram = exports.Gauge = exports.Counter = exports.InjectLogger = exports.PlatformContext = exports.ConfigTag = exports.CheckResult = exports.Indicator = exports.getLoggerToken = exports.HealthChecksService = exports.PingIndicator = exports.FileSystemIndicator = exports.Span = exports.createSpan = exports.saveAsyncHooksContext = exports.TracingModule = exports.X_REQUEST_ID = exports.ProtocolDetector = exports.Manifest = exports.APP_SCOPE = void 0;
17
+ exports.getTransportId = exports.PlatformApp = exports.register = exports.Summary = exports.MetricsModule = exports.Metric = exports.Histogram = exports.Gauge = exports.Counter = exports.InjectLogger = exports.PlatformContext = exports.ConfigTag = exports.CheckResult = exports.Indicator = exports.getLoggerToken = exports.HealthChecksService = exports.PingIndicator = exports.FileSystemIndicator = exports.Span = exports.createSpan = exports.TracingModule = exports.X_REQUEST_ID = exports.ProtocolDetector = exports.Manifest = exports.APP_SCOPE = void 0;
18
18
  require("./unhandled-rejection.handler");
19
19
  var app_metadata_const_1 = require("./app-metadata/app-metadata.const");
20
20
  Object.defineProperty(exports, "APP_SCOPE", { enumerable: true, get: function () { return app_metadata_const_1.APP_SCOPE; } });
@@ -26,7 +26,6 @@ var constants_1 = require("./tracing/constants");
26
26
  Object.defineProperty(exports, "X_REQUEST_ID", { enumerable: true, get: function () { return constants_1.X_REQUEST_ID; } });
27
27
  var tracing_1 = require("./tracing");
28
28
  Object.defineProperty(exports, "TracingModule", { enumerable: true, get: function () { return tracing_1.TracingModule; } });
29
- Object.defineProperty(exports, "saveAsyncHooksContext", { enumerable: true, get: function () { return tracing_1.saveAsyncHooksContext; } });
30
29
  Object.defineProperty(exports, "createSpan", { enumerable: true, get: function () { return tracing_1.createSpan; } });
31
30
  Object.defineProperty(exports, "Span", { enumerable: true, get: function () { return tracing_1.Span; } });
32
31
  var indicators_abstract_1 = require("./health/indicators.abstract");
@@ -64,8 +63,4 @@ __exportStar(require("./app-metadata/decorators"), exports);
64
63
  __exportStar(require("./app-metadata/app-metadata.const"), exports);
65
64
  var get_transport_id_1 = require("./transport/get-transport-id");
66
65
  Object.defineProperty(exports, "getTransportId", { enumerable: true, get: function () { return get_transport_id_1.getTransportId; } });
67
- var propagator_b3_1 = require("@opentelemetry/propagator-b3");
68
- Object.defineProperty(exports, "X_B3_PARENT_SPAN_ID", { enumerable: true, get: function () { return propagator_b3_1.X_B3_PARENT_SPAN_ID; } });
69
- Object.defineProperty(exports, "X_B3_SPAN_ID", { enumerable: true, get: function () { return propagator_b3_1.X_B3_SPAN_ID; } });
70
- Object.defineProperty(exports, "X_B3_TRACE_ID", { enumerable: true, get: function () { return propagator_b3_1.X_B3_TRACE_ID; } });
71
66
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAuC;AAEvC,wEAA8D;AAArD,+GAAA,SAAS,OAAA;AAElB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AAEjB,mEAAiE;AAAxD,qHAAA,gBAAgB,OAAA;AAEzB,iDAAmD;AAA1C,yGAAA,YAAY,OAAA;AACrB,qCAKmB;AAJjB,wGAAA,aAAa,OAAA;AACb,gHAAA,qBAAqB,OAAA;AACrB,qGAAA,UAAU,OAAA;AACV,+FAAA,IAAI,OAAA;AAGN,oEAKsC;AAHpC,0HAAA,mBAAmB,OAAA;AAEnB,oHAAA,aAAa,OAAA;AAGf,0DAA8D;AAArD,qHAAA,mBAAmB,OAAA;AAI5B,6CAAmD;AAA1C,yGAAA,cAAc,OAAA;AAEvB,6EAAkE;AAAzD,gHAAA,SAAS,OAAA;AAIlB,4CAA+C;AAAtC,sGAAA,WAAW,OAAA;AAEpB,sDAAkD;AAAzC,yGAAA,SAAS,OAAA;AAElB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAExB,2CAAyB;AAEzB,+CAA6B;AAE7B,wDAAsC;AAEtC,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AAErB,qCASmB;AAPjB,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,oGAAA,SAAS,OAAA;AACT,iGAAA,MAAM,OAAA;AACN,wGAAA,aAAa,OAAA;AACb,kGAAA,OAAO,OAAA;AACP,mGAAA,QAAQ,OAAA;AAGV,mDAAiD;AAAxC,2GAAA,WAAW,OAAA;AAEpB,0CAAwB;AAExB,4DAA0C;AAE1C,oEAAkD;AAClD,iEAA8D;AAArD,kHAAA,cAAc,OAAA;AAEvB,8DAIsC;AAHpC,oHAAA,mBAAmB,OAAA;AACnB,6GAAA,YAAY,OAAA;AACZ,8GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAuC;AAEvC,wEAA8D;AAArD,+GAAA,SAAS,OAAA;AAElB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AAEjB,mEAAiE;AAAxD,qHAAA,gBAAgB,OAAA;AAEzB,iDAAmD;AAA1C,yGAAA,YAAY,OAAA;AACrB,qCAA4D;AAAnD,wGAAA,aAAa,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,+FAAA,IAAI,OAAA;AAExC,oEAKsC;AAHpC,0HAAA,mBAAmB,OAAA;AAEnB,oHAAA,aAAa,OAAA;AAGf,0DAA8D;AAArD,qHAAA,mBAAmB,OAAA;AAI5B,6CAAmD;AAA1C,yGAAA,cAAc,OAAA;AAEvB,6EAAkE;AAAzD,gHAAA,SAAS,OAAA;AAIlB,4CAA+C;AAAtC,sGAAA,WAAW,OAAA;AAEpB,sDAAkD;AAAzC,yGAAA,SAAS,OAAA;AAElB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAExB,2CAAyB;AAEzB,+CAA6B;AAE7B,wDAAsC;AAEtC,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AAErB,qCASmB;AAPjB,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,oGAAA,SAAS,OAAA;AACT,iGAAA,MAAM,OAAA;AACN,wGAAA,aAAa,OAAA;AACb,kGAAA,OAAO,OAAA;AACP,mGAAA,QAAQ,OAAA;AAGV,mDAAiD;AAAxC,2GAAA,WAAW,OAAA;AAEpB,0CAAwB;AAExB,4DAA0C;AAE1C,oEAAkD;AAClD,iEAA8D;AAArD,kHAAA,cAAc,OAAA"}
@@ -1,5 +1,4 @@
1
1
  export * from './request-metadata.module';
2
2
  export * from './tracing.module';
3
3
  export * from './utils/create-span';
4
- export * from './utils/save-async-hooks-context';
5
4
  export * from './decorators';
@@ -17,6 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./request-metadata.module"), exports);
18
18
  __exportStar(require("./tracing.module"), exports);
19
19
  __exportStar(require("./utils/create-span"), exports);
20
- __exportStar(require("./utils/save-async-hooks-context"), exports);
21
20
  __exportStar(require("./decorators"), exports);
22
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,mDAAiC;AACjC,sDAAoC;AACpC,mEAAiD;AACjD,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,mDAAiC;AACjC,sDAAoC;AACpC,+CAA6B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/core",
3
- "version": "4.3.1-next.1",
3
+ "version": "4.3.2-next.0",
4
4
  "description": "Nestjs based microservice chassis",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -24,59 +24,17 @@
24
24
  "@nestjs/core": "^10.0.0",
25
25
  "@nestjs/microservices": "^10.0.0",
26
26
  "@opentelemetry/api": "1.7.0",
27
- "@opentelemetry/auto-instrumentations-node": "0.40.2",
28
- "@opentelemetry/context-async-hooks": "1.18.1",
29
- "@opentelemetry/core": "1.18.1",
30
- "@opentelemetry/exporter-trace-otlp-http": "0.45.1",
31
- "@opentelemetry/propagator-b3": "1.18.1",
32
- "@opentelemetry/resources": "1.18.1",
33
- "@opentelemetry/sdk-node": "0.45.1",
34
- "@opentelemetry/sdk-trace-base": "1.18.1",
35
- "@opentelemetry/semantic-conventions": "1.18.1",
36
- "@rsdk/actx": "^4.3.1-next.1",
37
- "@rsdk/autodoc.protocol": "^4.3.1-next.1",
38
- "@rsdk/common": "^4.3.1-next.1",
39
- "@rsdk/common.nestjs": "^4.3.1-next.1",
40
- "@rsdk/common.node": "^4.3.1-next.1",
41
- "@rsdk/decorators": "^4.3.1-next.1",
42
- "@rsdk/logging": "^4.3.1-next.1",
43
- "@rsdk/metadata": "^4.3.1-next.1",
44
- "@rsdk/nest-tools": "^4.3.1-next.1",
45
- "@rsdk/tracing": "^4.3.1-next.1",
27
+ "@rsdk/autodoc.protocol": "^4.3.2-next.0",
28
+ "@rsdk/common": "^4.3.2-next.0",
29
+ "@rsdk/common.nestjs": "^4.3.2-next.0",
30
+ "@rsdk/common.node": "^4.3.2-next.0",
31
+ "@rsdk/decorators": "^4.3.2-next.0",
32
+ "@rsdk/logging": "^4.3.2-next.0",
33
+ "@rsdk/metadata": "^4.3.2-next.0",
34
+ "@rsdk/nest-tools": "^4.3.2-next.0",
35
+ "@rsdk/tracing": "^4.3.2-next.0",
46
36
  "reflect-metadata": "^0.1.12 || ^0.2.0",
47
37
  "rxjs": "^7.0.0"
48
38
  },
49
- "peerDependenciesMeta": {
50
- "@opentelemetry/api": {
51
- "optional": true
52
- },
53
- "@opentelemetry/auto-instrumentations-node": {
54
- "optional": true
55
- },
56
- "@opentelemetry/context-async-hooks": {
57
- "optional": true
58
- },
59
- "@opentelemetry/core": {
60
- "optional": true
61
- },
62
- "@opentelemetry/exporter-trace-otlp-http": {
63
- "optional": true
64
- },
65
- "@opentelemetry/propagator-b3": {
66
- "optional": true
67
- },
68
- "@opentelemetry/resources": {
69
- "optional": true
70
- },
71
- "@opentelemetry/sdk-node": {
72
- "optional": true
73
- },
74
- "@opentelemetry/sdk-trace-base": {
75
- "optional": true
76
- },
77
- "@opentelemetry/semantic-conventions": {
78
- "optional": true
79
- }
80
- },
81
- "gitHead": "79ad5e9c5f25719390d866add5ef49c5f513485c"
39
+ "gitHead": "0e20ee52d21a698fd9177b33f13ca297042ae244"
82
40
  }
package/src/index.ts CHANGED
@@ -7,12 +7,7 @@ export { Manifest } from './manifest/manifest';
7
7
  export { ProtocolDetector } from './transport/protocol.detector';
8
8
 
9
9
  export { X_REQUEST_ID } from './tracing/constants';
10
- export {
11
- TracingModule,
12
- saveAsyncHooksContext,
13
- createSpan,
14
- Span,
15
- } from './tracing';
10
+ export { TracingModule, createSpan, Span } from './tracing';
16
11
 
17
12
  export {
18
13
  FileSystemCheckOptions,
@@ -64,9 +59,3 @@ export * from './app-metadata/decorators';
64
59
 
65
60
  export * from './app-metadata/app-metadata.const';
66
61
  export { getTransportId } from './transport/get-transport-id';
67
-
68
- export {
69
- X_B3_PARENT_SPAN_ID,
70
- X_B3_SPAN_ID,
71
- X_B3_TRACE_ID,
72
- } from '@opentelemetry/propagator-b3';
@@ -1,5 +1,4 @@
1
1
  export * from './request-metadata.module';
2
2
  export * from './tracing.module';
3
3
  export * from './utils/create-span';
4
- export * from './utils/save-async-hooks-context';
5
4
  export * from './decorators';
@@ -1,19 +0,0 @@
1
- /**
2
- * Проблема: при передаче управления в rxjs теряется контекст асинк локал стораджа
3
- *
4
- * Решение: Утилита для проброса инфы из асинк локал стораджа в тело пайпа rxjs
5
- * поиском "observableToAsyncIterable" можно найти тесты в которых есть пример использования
6
- *
7
- * Тут есть часть логик трейсер декоратора, суть простая:
8
- * мы - находясь в контексте с актуальным асинк Metadata запускаем создание боди для пайпа rx и тем самым мы передаем контекст работы туда
9
- * ```
10
- * return this.booksStream.pipe(
11
- * concatMap(
12
- * saveAsyncHooksContext(async (book) => {
13
- * return { book: { ...book, pages: request.limit } };
14
- * }),
15
- * ),
16
- * );
17
- * ```
18
- */
19
- export declare function saveAsyncHooksContext<T>(fn: (...args: any[]) => Promise<T>): (...args: any[]) => Promise<T>;
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.saveAsyncHooksContext = void 0;
4
- const api_1 = require("@opentelemetry/api");
5
- const sdk_node_1 = require("@opentelemetry/sdk-node");
6
- const services_1 = require("../services");
7
- /**
8
- * Проблема: при передаче управления в rxjs теряется контекст асинк локал стораджа
9
- *
10
- * Решение: Утилита для проброса инфы из асинк локал стораджа в тело пайпа rxjs
11
- * поиском "observableToAsyncIterable" можно найти тесты в которых есть пример использования
12
- *
13
- * Тут есть часть логик трейсер декоратора, суть простая:
14
- * мы - находясь в контексте с актуальным асинк Metadata запускаем создание боди для пайпа rx и тем самым мы передаем контекст работы туда
15
- * ```
16
- * return this.booksStream.pipe(
17
- * concatMap(
18
- * saveAsyncHooksContext(async (book) => {
19
- * return { book: { ...book, pages: request.limit } };
20
- * }),
21
- * ),
22
- * );
23
- * ```
24
- */
25
- function saveAsyncHooksContext(fn) {
26
- const span = sdk_node_1.api.trace.getActiveSpan();
27
- return async function (...args) {
28
- const activeSpan = sdk_node_1.api.trace.getActiveSpan();
29
- if (activeSpan) {
30
- Object.assign(activeSpan.spanContext(), span?.spanContext());
31
- return fn(...args);
32
- }
33
- if (!span) {
34
- return fn(...args);
35
- }
36
- const spanContext = sdk_node_1.api.trace.setSpan(sdk_node_1.api.context.active(), span);
37
- return sdk_node_1.api.context.with(spanContext, async () => fn(...args)
38
- .then(async (result) => {
39
- span.setAttribute('response', services_1.TraceInjector.toAttribute(result));
40
- span.setStatus({ code: api_1.SpanStatusCode.OK });
41
- span.end();
42
- return result;
43
- })
44
- .catch(async (error) => {
45
- span.recordException(error);
46
- span.setStatus({
47
- code: api_1.SpanStatusCode.ERROR,
48
- message: error.message,
49
- });
50
- span.end();
51
- throw error;
52
- }));
53
- };
54
- }
55
- exports.saveAsyncHooksContext = saveAsyncHooksContext;
56
- //# sourceMappingURL=save-async-hooks-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"save-async-hooks-context.js","sourceRoot":"","sources":["../../../src/tracing/utils/save-async-hooks-context.ts"],"names":[],"mappings":";;;AAAA,4CAAoD;AACpD,sDAA8C;AAG9C,0CAA4C;AAE5C;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,qBAAqB,CACnC,EAAkC;IAElC,MAAM,IAAI,GAAG,cAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAEvC,OAAO,KAAK,WAAW,GAAG,IAAI;QAC5B,MAAM,UAAU,GAAG,cAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,WAAW,GAAG,cAAG,CAAC,KAAK,CAAC,OAAO,CAAC,cAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAElE,OAAO,cAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAC9C,EAAE,CAAC,GAAG,IAAI,CAAC;aACR,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,wBAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,eAAe,CAAC,KAAkB,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,oBAAc,CAAC,KAAK;gBAC1B,OAAO,EAAG,KAAmB,CAAC,OAAO;aACtC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAnCD,sDAmCC"}
@@ -1,60 +0,0 @@
1
- import { SpanStatusCode } from '@opentelemetry/api';
2
- import { api } from '@opentelemetry/sdk-node';
3
- import type { ErrorLike } from '@rsdk/common';
4
-
5
- import { TraceInjector } from '../services';
6
-
7
- /**
8
- * Проблема: при передаче управления в rxjs теряется контекст асинк локал стораджа
9
- *
10
- * Решение: Утилита для проброса инфы из асинк локал стораджа в тело пайпа rxjs
11
- * поиском "observableToAsyncIterable" можно найти тесты в которых есть пример использования
12
- *
13
- * Тут есть часть логик трейсер декоратора, суть простая:
14
- * мы - находясь в контексте с актуальным асинк Metadata запускаем создание боди для пайпа rx и тем самым мы передаем контекст работы туда
15
- * ```
16
- * return this.booksStream.pipe(
17
- * concatMap(
18
- * saveAsyncHooksContext(async (book) => {
19
- * return { book: { ...book, pages: request.limit } };
20
- * }),
21
- * ),
22
- * );
23
- * ```
24
- */
25
- export function saveAsyncHooksContext<T>(
26
- fn: (...args: any[]) => Promise<T>,
27
- ): (...args: any[]) => Promise<T> {
28
- const span = api.trace.getActiveSpan();
29
-
30
- return async function (...args): Promise<T> {
31
- const activeSpan = api.trace.getActiveSpan();
32
- if (activeSpan) {
33
- Object.assign(activeSpan.spanContext(), span?.spanContext());
34
- return fn(...args);
35
- }
36
- if (!span) {
37
- return fn(...args);
38
- }
39
- const spanContext = api.trace.setSpan(api.context.active(), span);
40
-
41
- return api.context.with(spanContext, async () =>
42
- fn(...args)
43
- .then(async (result) => {
44
- span.setAttribute('response', TraceInjector.toAttribute(result));
45
- span.setStatus({ code: SpanStatusCode.OK });
46
- span.end();
47
- return result;
48
- })
49
- .catch(async (error) => {
50
- span.recordException(error as ErrorLike);
51
- span.setStatus({
52
- code: SpanStatusCode.ERROR,
53
- message: (error as ErrorLike).message,
54
- });
55
- span.end();
56
- throw error;
57
- }),
58
- );
59
- };
60
- }