From d2545c2de68e38f6f761b251107a267d6bfbf545 Mon Sep 17 00:00:00 2001 From: devlikepro Date: Wed, 19 Aug 2026 16:50:13 +0700 Subject: [PATCH] feat: use traceparent from opentelemetry fix #2176 closes #2179 --- package.json | 5 + src/core/app.module.core.ts | 3 +- src/main.ts | 4 +- src/tracing.ts | 61 +++++ yarn.lock | 497 ++++++++++++++++++++++++++++++++++++ 5 files changed, 567 insertions(+), 3 deletions(-) create mode 100644 src/tracing.ts diff --git a/package.json b/package.json index d93f5013..02e14e93 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,11 @@ "@nestjs/swagger": "^7.1.11", "@nestjs/terminus": "^10.2.3", "@nestjs/websockets": "^11.0.0", + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/instrumentation-http": "^0.221.0", + "@opentelemetry/instrumentation-pino": "^0.67.0", + "@opentelemetry/sdk-node": "^0.221.0", + "@opentelemetry/sdk-trace": "^2.10.0", "@types/better-sqlite3": "^7.6.10", "@types/lodash": "^4.14.194", "@types/mustache": "^4.2.5", diff --git a/src/core/app.module.core.ts b/src/core/app.module.core.ts index b6896654..7e6114ff 100644 --- a/src/core/app.module.core.ts +++ b/src/core/app.module.core.ts @@ -83,7 +83,6 @@ export const IMPORTS_CORE = [ LoggerModule.forRoot({ renameContext: 'name', pinoHttp: { - quietReqLogger: true, level: getPinoLogLevel(), useLevel: getPinoHttpUseLevel(), transport: getPinoTransport(), @@ -102,9 +101,9 @@ export const IMPORTS_CORE = [ paths: ['req.query["x-api-key"]'], censor: '[REDACTED]', }, + customAttributeKeys: { req: 'req', res: 'res' }, serializers: { req: (req) => ({ - id: req.id, method: req.method, url: redactUrlParams('x-api-key', req.url, req.query), query: req.query, diff --git a/src/main.ts b/src/main.ts index 1acb49cd..cde209e8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,3 +1,4 @@ +import { injectTraceContext } from './tracing'; // MUST be line 1, before @nestjs/* and before pino import { NestFactory } from '@nestjs/core'; import { WsAdapter } from '@nestjs/platform-ws'; import { WAHA_WEBHOOKS } from '@waha/structures/webhooks'; @@ -84,7 +85,8 @@ async function bootstrap() { app.useGlobalInterceptors(new LoggerErrorInterceptor()); app.useGlobalFilters(new AllExceptionsFilter()); - app.enableCors(); + app.enableCors({ exposedHeaders: ['traceparent', 'tracestate'] }); + app.use(injectTraceContext); // Ideally, we should apply it globally. // but for now we added it ValidationPipe on Controller or endpoint level // app.useGlobalPipes(new ValidationPipe({ transform: true })); diff --git a/src/tracing.ts b/src/tracing.ts new file mode 100644 index 00000000..8845a1e1 --- /dev/null +++ b/src/tracing.ts @@ -0,0 +1,61 @@ +import { context, propagation } from '@opentelemetry/api'; +import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'; +import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino'; +import { NodeSDK, NodeSDKConfiguration } from '@opentelemetry/sdk-node'; +import { NoopSpanProcessor } from '@opentelemetry/sdk-trace'; +import { VERSION } from '@waha/version'; +import { NextFunction, Request, Response } from 'express'; + +process.env.OTEL_SERVICE_NAME = process.env.OTEL_SERVICE_NAME || 'waha'; +process.env.OTEL_METRICS_EXPORTER = process.env.OTEL_METRICS_EXPORTER || 'none'; +process.env.OTEL_LOGS_EXPORTER = process.env.OTEL_LOGS_EXPORTER || 'none'; +process.env.OTEL_TRACES_EXPORTER = process.env.OTEL_TRACES_EXPORTER || 'none'; +process.env.OTEL_RESOURCE_ATTRIBUTES = getResourceAttributes(); + +function getResourceAttributes(): string { + const attributes = []; + if (process.env.OTEL_RESOURCE_ATTRIBUTES) { + attributes.push(process.env.OTEL_RESOURCE_ATTRIBUTES); + } + attributes.push(`service.version=${VERSION.version}`); + attributes.push(`service.engine=${VERSION.engine}`); + attributes.push(`service.platform=${VERSION.platform}`); + if (VERSION.browser) { + attributes.push(`service.browser=${VERSION.browser}`); + } + if (VERSION.worker.id) { + attributes.push(`worker.id=${VERSION.worker.id}`); + } + return attributes.join(','); +} + +const OTelConfiguration: Partial = { + instrumentations: [ + new HttpInstrumentation({ + ignoreOutgoingRequestHook: () => true, + }), + new PinoInstrumentation({ disableLogSending: true }), + ], +}; + +if (process.env.OTEL_TRACES_EXPORTER === 'none') { + OTelConfiguration.spanProcessors = [new NoopSpanProcessor()]; +} + +new NodeSDK(OTelConfiguration).start(); + +/** + * Injects trace context (traceparent header) to the client on every response + */ +export function injectTraceContext( + req: Request, + res: Response, + next: NextFunction, +) { + propagation.inject(context.active(), res, { + set: function setHeader(response: Response, key: string, value: string) { + response.setHeader(key, value); + }, + }); + next(); +} diff --git a/yarn.lock b/yarn.lock index bb116826..0cd9dff7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1337,6 +1337,16 @@ __metadata: languageName: node linkType: hard +"@grpc/grpc-js@npm:^1.14.3": + version: 1.14.4 + resolution: "@grpc/grpc-js@npm:1.14.4" + dependencies: + "@grpc/proto-loader": "npm:^0.8.0" + "@js-sdsl/ordered-map": "npm:^4.4.2" + checksum: 10/f9cdbd81e7388dc784c57274fcf6f4f4484da8968dd0975b97a14708d3fb117ae4a7bc2848e1bd1cc8b8ed9ee7a80ff131bfe728c85260da90a4e0b170e31ca9 + languageName: node + linkType: hard + "@grpc/proto-loader@npm:^0.8.0": version: 0.8.0 resolution: "@grpc/proto-loader@npm:0.8.0" @@ -3186,6 +3196,430 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.221.0, @opentelemetry/api-logs@npm:^0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/api-logs@npm:0.221.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10/8f2f98c8ce62d2c8bbe1955700eb7ee97795bbf43395da835b6f3eacca775b44b8057b67145e6bed3854625334f2f39428bc34164b9794eb730f4383d71cdbaf + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/api@npm:1.9.1" + checksum: 10/b26032739d3c54ca99b5a2920844a1fbd4c3ee383cacbb0915e8c706a2626fe91e96feaa6e893397abe0545dc8d0a765b220aa18a31b1773176eeaf3a225e10e + languageName: node + linkType: hard + +"@opentelemetry/configuration@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/configuration@npm:0.221.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + yaml: "npm:^2.8.3" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + checksum: 10/f0b6f891f5b15f6e267f510da14a1ae7f5b46c621545d382cb9faf01c146d75ebd45688162e5e1057c872341d729e5070b33b69b5af4175cac74e3a224cef9c9 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/context-async-hooks@npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/cdb4a3b8e9274571235ba0d5b9ae6ebd343e7c222ab921a7c80ca1788efdc242d2ddb30cda9a3363e8a77f1986c97f3dde5208f14f1d78d8df5b2535ccb1b3ff + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.10.0, @opentelemetry/core@npm:^2.9.0": + version: 2.10.0 + resolution: "@opentelemetry/core@npm:2.10.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/b95d912461d878a23e092317a98eb593b2316e0e63bb0618f351aba8fcb92253553ba8d4ceac3f575b4152325a85da2cf39f4e68123088ef47429f7328c971e5 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-grpc@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.221.0" + dependencies: + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/sdk-logs": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/25330f7d7ab7b5645c3afb794e64576a5404a78d7de80e9d7059e2dfafc22e763c344be13b3a085349f1317489b2d387e5b6ddd338b8e65ff0f8e579d55ca5d0 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-http@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.221.0" + dependencies: + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/sdk-logs": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/0f3c5e481b40d852546b742277717e4bbb047d96aac49debf756b65ec381c25faa49d0c71f95e1dba75f5e8ce6e36a447c8a003675baa294e486f724770ba0a9 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-proto@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.221.0" + dependencies: + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/sdk-logs": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/328fd995593958f47a30188c5511b7563beb3fba7d21f3a336000388399592de5d878d7ff18f46ea6d41aa5b5f83a0d4a416d156561defa8efda338821130259 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-grpc@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-metrics-otlp-grpc@npm:0.221.0" + dependencies: + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.221.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/76da614f19befad35611360edebfb8de17dba30b92671fd000d92294b3bc32868e576ec0ffa793b2175b232beb2f6ce1226fdb939d123f90c83afe1beb2a43a4 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-http@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.221.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/sdk-metrics": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/b7f111dedc7dfa539f4a860c4fc44334055e37ef6282f1f67b01b7bb3678921f6c928c2649addca75191c4d71f81a730e6bdc66b652ae4c9e5bbc0242122c66f + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-proto@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-metrics-otlp-proto@npm:0.221.0" + dependencies: + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.221.0" + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/ee4e82b88079feb5f657a098d4817a8d18bffa50e42815bb9073fcd1e258dfa3156f6aface96b0d1854e99dc6060055f8fe7c0dd9052587483138975cd2109f6 + languageName: node + linkType: hard + +"@opentelemetry/exporter-prometheus@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-prometheus@npm:0.221.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/sdk-metrics": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/9bcd3a8426e8f5b023400e9aef04f793f7ea0bde261efbc37afd9cb5dcc2be5633dd9d6d90248ac063e9f0b89a9a3ff967b506694a9037f7397c0fb5eecb7d08 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.221.0" + dependencies: + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/b5becee53650f117567832a15ffaa157004c64b7a45bad90578c7a9908342ebd2485f55acbd1a5f626b77ca2f8322b84f13665b5e41525da7e3a59e7a421cc30 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.221.0" + dependencies: + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/cb4215c164954216da09cf1031d43660c5e4bb395ee10fca45a6b50ebf014ee39fc4ec562c87ea80e267eac15bf0e5b6d63817eafad71179d4e54353bb10d50f + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.221.0" + dependencies: + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/9696b4eeb9cd8a9e1ecd325fe393d8d4310afa5a396aa98391dc3aede395a3c35adf9f8e4183e141add46482adb69acdccb1ce0b71afbe07d38bcef58584f57c + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/exporter-zipkin@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10/8494dc54c15d8e8559f6527285e72f9d9e5a1f908b29802b1e2c85e01aecc65e30afea21367378bd718d394363fa6a2d9eb4b83f97516f36bce9ecb57a04e74d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:^0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/instrumentation-http@npm:0.221.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/instrumentation": "npm:0.221.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + forwarded-parse: "npm:2.1.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/756848fedb5941cdaac0869388c10128107ec31362001c27be39b11ca55793b0ae46e2c8eff01f13d1b6f5c45dd0ae836feb958e5f2e601e7e7044f61d7d987e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pino@npm:^0.67.0": + version: 0.67.0 + resolution: "@opentelemetry/instrumentation-pino@npm:0.67.0" + dependencies: + "@opentelemetry/api-logs": "npm:^0.221.0" + "@opentelemetry/core": "npm:^2.9.0" + "@opentelemetry/instrumentation": "npm:^0.221.0" + "@opentelemetry/semantic-conventions": "npm:^1.41.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/9892eaa62b2d2146cd40b889770da1ae2a3ca1589fdaad6c91b87dcb62b02c4a40acfd274741e41c09612c452ef9e2dfc9cf4adcb69436217c7e353d3a854226 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.221.0, @opentelemetry/instrumentation@npm:^0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/instrumentation@npm:0.221.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.221.0" + import-in-the-middle: "npm:^3.0.0" + require-in-the-middle: "npm:^8.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/b7012dd7b56344decf78a3a62786559975f89d6c55602819089268cc6b6109b4cc617795f00b926bf46dfc15334579ae298e78fa865e6c46b0400bfae91971c2 + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.221.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/06d2f58bfe8e6269c9fc4a26dffbcac08fa52bbe39488a25f57a5cfff6b466ce4487a0f18a3830a88f7a13931a75d0c326f17bed73c54fb20c017a186bde45f8 + languageName: node + linkType: hard + +"@opentelemetry/otlp-grpc-exporter-base@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.221.0" + dependencies: + "@grpc/grpc-js": "npm:^1.14.3" + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-transformer": "npm:0.221.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/c496d8bc87d2d213e1cd946949665d72cb154c279c765d0bc88276109e418604322117c67aa68004daa661bd0f447fa01be5c775cf79216f66fa56cd602c7849 + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/otlp-transformer@npm:0.221.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.221.0" + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/sdk-logs": "npm:0.221.0" + "@opentelemetry/sdk-metrics": "npm:2.10.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/42dfa2c7cceeacd70da07795ab920dea5c1fb443bf8fad2610e091c0cc770e4b46671d26307056d00f27a3b6d9534358bfdda4a38c177cb45955849e8c4415d1 + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/propagator-b3@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/0ad5b50012804462d8c7da16c6bb3f1e4c5cca4234c5769aa856eb126f948fcb2b41629d7aeeea02549c1453aec49dbba2a1b064e2e1c18378cf63190e88612e + languageName: node + linkType: hard + +"@opentelemetry/propagator-jaeger@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/propagator-jaeger@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/858dea9f1c91cb93b79880e62c870ea1a821d70d34be4c63e30837634f8e8fa51ea101e94a6d55660b1dde6f3d4f348a6cbc9fdce59ccd1c6e8905bd836e4d2f + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/resources@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/514248ae27380231a3f1f3ecbea5f2bd2cab4f8fed37b265c07501e542bd5ac84be500fee44a018ae7af3c465c59984e0878ba8571a2c7e65976477ad5e70b7a + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/sdk-logs@npm:0.221.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.221.0" + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.10.0" + checksum: 10/68ecc97d3a4fabbb2ad046f159de228f71407bd284a6fb42aab9e1a04a794f08f98ad8153aaeb053dca53b46da0695c07eb40fa7c3c28dcc1d9f23d3dfb63c5d + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/sdk-metrics@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ">=1.9.0 <1.10.0" + checksum: 10/aebff94cc886e4873818a15c777685691ed3aeffde9e1782407a57cb551647933428a44cafa7050296a8bc09c4da761e2467625eb8b0503dab7e6097363ee84f + languageName: node + linkType: hard + +"@opentelemetry/sdk-node@npm:^0.221.0": + version: 0.221.0 + resolution: "@opentelemetry/sdk-node@npm:0.221.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.221.0" + "@opentelemetry/configuration": "npm:0.221.0" + "@opentelemetry/context-async-hooks": "npm:2.10.0" + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/exporter-logs-otlp-grpc": "npm:0.221.0" + "@opentelemetry/exporter-logs-otlp-http": "npm:0.221.0" + "@opentelemetry/exporter-logs-otlp-proto": "npm:0.221.0" + "@opentelemetry/exporter-metrics-otlp-grpc": "npm:0.221.0" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.221.0" + "@opentelemetry/exporter-metrics-otlp-proto": "npm:0.221.0" + "@opentelemetry/exporter-prometheus": "npm:0.221.0" + "@opentelemetry/exporter-trace-otlp-grpc": "npm:0.221.0" + "@opentelemetry/exporter-trace-otlp-http": "npm:0.221.0" + "@opentelemetry/exporter-trace-otlp-proto": "npm:0.221.0" + "@opentelemetry/exporter-zipkin": "npm:2.10.0" + "@opentelemetry/instrumentation": "npm:0.221.0" + "@opentelemetry/otlp-exporter-base": "npm:0.221.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.221.0" + "@opentelemetry/propagator-b3": "npm:2.10.0" + "@opentelemetry/propagator-jaeger": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/sdk-logs": "npm:0.221.0" + "@opentelemetry/sdk-metrics": "npm:2.10.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + "@opentelemetry/sdk-trace-base": "npm:2.10.0" + "@opentelemetry/sdk-trace-node": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/a46476ebd3b8af38ebd23e3af98f9d269ed055f69cc3d8126ff46515ac1f263099512d3c84180ca30baa612c2d9623ae8641e0b910401354b99a333ab9aba3b9 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/sdk-trace-base@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/sdk-trace": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/c1b6076fa50a2a40e79f1b754092704fce23b01d336f564fc03b33abf66ee2b2493614cb48b32ab71581823c9515045a5c17f1509abd1690cf5c5233cbfce20c + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-node@npm:2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/sdk-trace-node@npm:2.10.0" + dependencies: + "@opentelemetry/context-async-hooks": "npm:2.10.0" + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/sdk-trace-base": "npm:2.10.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/2ed124299943164d5148ce76c192f3f0c12a361f4928f0c57b453ff8bdd3779d3598dcdcc299f4b328fdbbca88cfb37fd0aa53b381e4e0d3e5435260b0793f80 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace@npm:2.10.0, @opentelemetry/sdk-trace@npm:^2.10.0": + version: 2.10.0 + resolution: "@opentelemetry/sdk-trace@npm:2.10.0" + dependencies: + "@opentelemetry/core": "npm:2.10.0" + "@opentelemetry/resources": "npm:2.10.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/1d818c23918c88fc726b59658a1fb3efab4466f18b5ee65ce44ab57aa65a593570f282546e09fb312ea65d3ca9e1c911841a9a8d64dc6411353d0a8f3ecdab3b + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.41.1": + version: 1.43.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.43.0" + checksum: 10/44c0e667cbfbecd98911cd6a90dc5f873de262da82d6684f467a87d529098b04fb2b9705bbd3524ecdedf13c62914d9ccf0ddcc4104dbba5062faf68f361aef4 + languageName: node + linkType: hard + "@oxlint/darwin-arm64@npm:1.13.0": version: 1.13.0 resolution: "@oxlint/darwin-arm64@npm:1.13.0" @@ -6180,6 +6614,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^2.2.0": + version: 2.2.1 + resolution: "cjs-module-lexer@npm:2.2.1" + checksum: 10/16601d6fc3a9bb6a5aba4fcc1fd4c194317f94c2bc869a0dfb0f64d01b6ff0c9011b3ba6c89805b3d4de246be371a102d95d0dad5e944a4a23ca87f5381fbd03 + languageName: node + linkType: hard + "class-transformer@npm:^0.5.1": version: 0.5.1 resolution: "class-transformer@npm:0.5.1" @@ -7212,6 +7653,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^2.2.0": + version: 2.3.2 + resolution: "es-module-lexer@npm:2.3.2" + checksum: 10/065246d6e2b2dfea3287650b5800a30326771e0d9d238570e81371d7ae8d53db239bccb2166e272926bba44917da7c66dd7407a5214d17b0af5269005b1fec52 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -7903,6 +8351,13 @@ __metadata: languageName: node linkType: hard +"forwarded-parse@npm:2.1.2": + version: 2.1.2 + resolution: "forwarded-parse@npm:2.1.2" + checksum: 10/fca4df8898248d123d9d29a9fdf48005dd757366c2c17c1e195e8311a9aa89caf9f5e592f58f7d3d635087675ff39e85c32c6205838510f6f1fa4109de519930 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -8544,6 +8999,17 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^3.0.0": + version: 3.3.3 + resolution: "import-in-the-middle@npm:3.3.3" + dependencies: + cjs-module-lexer: "npm:^2.2.0" + es-module-lexer: "npm:^2.2.0" + module-details-from-path: "npm:^1.0.4" + checksum: 10/d8bb529b3320c12e82285187032597cb4f3f00076e8c9b0c61b0bb72e727db83dfaa4fe439da13b03fd64f4ad594ddda8acc0c10e874812dce5b49939cc0be8b + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.2.0 resolution: "import-local@npm:3.2.0" @@ -10401,6 +10867,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3, module-details-from-path@npm:^1.0.4": + version: 1.0.4 + resolution: "module-details-from-path@npm:1.0.4" + checksum: 10/2ebfada5358492f6ab496b70f70a1042f2ee7a4c79d29467f59ed6704f741fb4461d7cecb5082144ed39a05fec4d19e9ff38b731c76228151be97227240a05b2 + languageName: node + linkType: hard + "mongodb-connection-string-url@npm:^3.0.0": version: 3.0.2 resolution: "mongodb-connection-string-url@npm:3.0.2" @@ -12270,6 +12743,16 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^8.0.0": + version: 8.0.1 + resolution: "require-in-the-middle@npm:8.0.1" + dependencies: + debug: "npm:^4.3.5" + module-details-from-path: "npm:^1.0.3" + checksum: 10/4ce98c681489d383a0ffccb79b06df7a1dffbb31c13f3b713ae2c5a1967597a259e67612507ef69748d83d531bba7c9bb0477211771fe78c685e1d52b1a44b64 + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -14154,6 +14637,11 @@ __metadata: "@nestjs/terminus": "npm:^10.2.3" "@nestjs/testing": "npm:^11.0.0" "@nestjs/websockets": "npm:^11.0.0" + "@opentelemetry/api": "npm:^1.9.1" + "@opentelemetry/instrumentation-http": "npm:^0.221.0" + "@opentelemetry/instrumentation-pino": "npm:^0.67.0" + "@opentelemetry/sdk-node": "npm:^0.221.0" + "@opentelemetry/sdk-trace": "npm:^2.10.0" "@types/better-sqlite3": "npm:^7.6.10" "@types/express": "npm:^4.17.3" "@types/jest": "npm:26.0.10" @@ -14602,6 +15090,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.8.3": + version: 2.9.0 + resolution: "yaml@npm:2.9.0" + bin: + yaml: bin.mjs + checksum: 10/9a95e8e08651c3d292ab6a5befeb5f57b76801caa097c75bb45c9a70ce19c1b11f57e87a6ef84a579ea070ed2c2c8ac541c88c0ae684d544d5f42c7e77d11b7b + languageName: node + linkType: hard + "yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1"