@sentry/node 10.54.0 → 10.56.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/build/cjs/integrations/node-fetch/vendored/undici.js +2 -3
- package/build/cjs/integrations/node-fetch/vendored/undici.js.map +1 -1
- package/build/cjs/integrations/tracing/InstrumentationNodeModuleFile.js +15 -0
- package/build/cjs/integrations/tracing/InstrumentationNodeModuleFile.js.map +1 -0
- package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js +9 -9
- package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/anthropic-ai/index.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js +3 -5
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/express.js +3 -5
- package/build/cjs/integrations/tracing/express.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +10 -11
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js +3 -4
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js +2 -1
- package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
- package/build/cjs/integrations/tracing/firebase/otel/patches/functions.js +2 -1
- package/build/cjs/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
- package/build/cjs/integrations/tracing/google-genai/instrumentation.js +2 -1
- package/build/cjs/integrations/tracing/google-genai/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js +4 -3
- package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js +2 -5
- package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/hono/index.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +3 -2
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +3 -4
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/langchain/instrumentation.js +3 -2
- package/build/cjs/integrations/tracing/langchain/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/langgraph/index.js.map +1 -1
- package/build/cjs/integrations/tracing/langgraph/instrumentation.js +7 -5
- package/build/cjs/integrations/tracing/langgraph/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js +7 -6
- package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +3 -2
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/openai/index.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js +5 -5
- package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/postgresjs.js +2 -1
- package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/index.js +3 -2
- package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +4 -3
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/vercelai/instrumentation.js +6 -5
- package/build/cjs/integrations/tracing/vercelai/instrumentation.js.map +1 -1
- package/build/cjs/utils/setHttpServerSpanRouteAttribute.js +21 -0
- package/build/cjs/utils/setHttpServerSpanRouteAttribute.js.map +1 -0
- package/build/esm/integrations/node-fetch/vendored/undici.js +3 -4
- package/build/esm/integrations/node-fetch/vendored/undici.js.map +1 -1
- package/build/esm/integrations/tracing/InstrumentationNodeModuleFile.js +13 -0
- package/build/esm/integrations/tracing/InstrumentationNodeModuleFile.js.map +1 -0
- package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js +7 -7
- package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/anthropic-ai/index.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +3 -5
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/express.js +3 -5
- package/build/esm/integrations/tracing/express.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +3 -4
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js +3 -4
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +2 -1
- package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
- package/build/esm/integrations/tracing/firebase/otel/patches/functions.js +2 -1
- package/build/esm/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
- package/build/esm/integrations/tracing/google-genai/instrumentation.js +2 -1
- package/build/esm/integrations/tracing/google-genai/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js +2 -1
- package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js +2 -5
- package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/hono/index.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +2 -1
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +3 -4
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/langchain/instrumentation.js +2 -1
- package/build/esm/integrations/tracing/langchain/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/langgraph/index.js.map +1 -1
- package/build/esm/integrations/tracing/langgraph/instrumentation.js +5 -3
- package/build/esm/integrations/tracing/langgraph/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js +2 -1
- package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +2 -1
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/openai/index.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js +5 -5
- package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/postgresjs.js +2 -1
- package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
- package/build/esm/integrations/tracing/redis/index.js +3 -2
- package/build/esm/integrations/tracing/redis/index.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +1 -1
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +2 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/vercelai/instrumentation.js +6 -5
- package/build/esm/integrations/tracing/vercelai/instrumentation.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/utils/setHttpServerSpanRouteAttribute.js +19 -0
- package/build/esm/utils/setHttpServerSpanRouteAttribute.js.map +1 -0
- package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +1 -1
- package/build/types/integrations/tracing/InstrumentationNodeModuleFile.d.ts +9 -0
- package/build/types/integrations/tracing/InstrumentationNodeModuleFile.d.ts.map +1 -0
- package/build/types/integrations/tracing/amqplib/vendored/amqplib.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts +2 -2
- package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/anthropic-ai/index.d.ts +7 -7
- package/build/types/integrations/tracing/connect/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/express.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/v3/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/firebase/otel/patches/firestore.d.ts.map +1 -1
- package/build/types/integrations/tracing/firebase/otel/patches/functions.d.ts.map +1 -1
- package/build/types/integrations/tracing/google-genai/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/hono/index.d.ts +6 -0
- package/build/types/integrations/tracing/hono/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/langchain/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/langgraph/index.d.ts +7 -7
- package/build/types/integrations/tracing/langgraph/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/openai/index.d.ts +7 -7
- package/build/types/integrations/tracing/postgres/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/index.d.ts +4 -1
- package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/redis-instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/vercelai/instrumentation.d.ts +2 -2
- package/build/types/integrations/tracing/vercelai/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/vercelai/types.d.ts +6 -4
- package/build/types/integrations/tracing/vercelai/types.d.ts.map +1 -1
- package/build/types/utils/setHttpServerSpanRouteAttribute.d.ts +9 -0
- package/build/types/utils/setHttpServerSpanRouteAttribute.d.ts.map +1 -0
- package/build/types-ts3.8/integrations/tracing/InstrumentationNodeModuleFile.d.ts +9 -0
- package/build/types-ts3.8/integrations/tracing/amqplib/vendored/utils.d.ts +2 -2
- package/build/types-ts3.8/integrations/tracing/anthropic-ai/index.d.ts +7 -7
- package/build/types-ts3.8/integrations/tracing/hono/index.d.ts +6 -0
- package/build/types-ts3.8/integrations/tracing/langgraph/index.d.ts +7 -7
- package/build/types-ts3.8/integrations/tracing/openai/index.d.ts +7 -7
- package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +4 -1
- package/build/types-ts3.8/integrations/tracing/vercelai/instrumentation.d.ts +2 -2
- package/build/types-ts3.8/integrations/tracing/vercelai/types.d.ts +6 -4
- package/build/types-ts3.8/utils/setHttpServerSpanRouteAttribute.d.ts +9 -0
- package/package.json +5 -4
- package/build/cjs/integrations/tracing/redis/redis-dc-subscriber.js +0 -151
- package/build/cjs/integrations/tracing/redis/redis-dc-subscriber.js.map +0 -1
- package/build/esm/integrations/tracing/redis/redis-dc-subscriber.js +0 -149
- package/build/esm/integrations/tracing/redis/redis-dc-subscriber.js.map +0 -1
- package/build/types/integrations/tracing/redis/redis-dc-subscriber.d.ts +0 -17
- package/build/types/integrations/tracing/redis/redis-dc-subscriber.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/tracing/redis/redis-dc-subscriber.d.ts +0 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-instrumentation.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/redis-instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n */\n/* eslint-disable -- vendored @opentelemetry/instrumentation-redis */\n\nimport { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { DiagLogger, Span, TracerProvider } from '@opentelemetry/api';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\n\nimport { defaultDbStatementSerializer } from './redis-common';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_NAME_VALUE_REDIS,\n DB_SYSTEM_VALUE_REDIS,\n} from './semconv';\nimport type { RedisInstrumentationConfig } from './types';\n\nconst PACKAGE_NAME = '@opentelemetry/instrumentation-redis';\nconst PACKAGE_VERSION = '0.62.0';\n\n// ---- Internal types ----\n\ninterface RedisPluginClientTypes {\n connection_options?: {\n port?: string | number;\n host?: string;\n };\n address?: string;\n}\n\ninterface RedisCommand {\n command: string;\n args: string[];\n buffer_args: boolean;\n callback: (err: Error | null, reply: unknown) => void;\n call_on_write: boolean;\n}\n\ninterface MultiErrorReply extends Error {\n replies: unknown[];\n errorIndexes: Array<number>;\n}\n\ninterface OpenSpanInfo {\n span: Span;\n commandName: string;\n commandArgs: Array<string | Buffer>;\n}\n\nconst OTEL_OPEN_SPANS = Symbol('opentelemetry.instrumentation.redis.open_spans');\nconst MULTI_COMMAND_OPTIONS = Symbol('opentelemetry.instrumentation.redis.multi_command_options');\n\n// ---- v4-v5 utils ----\n\nfunction removeCredentialsFromDBConnectionStringAttribute(\n diagLogger: DiagLogger,\n url: string | undefined,\n): string | undefined {\n if (typeof url !== 'string' || !url) {\n return undefined;\n }\n try {\n const u = new URL(url);\n u.searchParams.delete('user_pwd');\n u.username = '';\n u.password = '';\n return u.href;\n } catch (err) {\n diagLogger.error('failed to sanitize redis connection url', err);\n }\n return undefined;\n}\n\nfunction getClientAttributes(\n diagLogger: DiagLogger,\n options: any,\n semconvStability: SemconvStability,\n): Record<string, any> {\n const attributes: Record<string, any> = {};\n if (semconvStability & SemconvStability.OLD) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_NET_PEER_NAME]: options?.socket?.host,\n [ATTR_NET_PEER_PORT]: options?.socket?.port,\n [ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(diagLogger, options?.url),\n });\n }\n if (semconvStability & SemconvStability.STABLE) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n [ATTR_SERVER_ADDRESS]: options?.socket?.host,\n [ATTR_SERVER_PORT]: options?.socket?.port,\n });\n }\n return attributes;\n}\n\n// ---- v2-v3 utils ----\n\nfunction endSpanV2(span: Span, err: Error | null | undefined): void {\n if (err) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n }\n span.end();\n}\n\nfunction getTracedCreateClient(original: Function): Function {\n return function createClientTrace(this: any) {\n const client = original.apply(this, arguments);\n return context.bind(context.active(), client);\n };\n}\n\nfunction getTracedCreateStreamTrace(original: Function): Function {\n return function create_stream_trace(this: any) {\n if (!Object.prototype.hasOwnProperty.call(this, 'stream')) {\n Object.defineProperty(this, 'stream', {\n get() {\n return this._patched_redis_stream;\n },\n set(val: any) {\n context.bind(context.active(), val);\n this._patched_redis_stream = val;\n },\n });\n }\n return original.apply(this, arguments);\n };\n}\n\n// ---- RedisInstrumentationV2_V3 ----\n\nclass RedisInstrumentationV2_V3 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n _semconvStability: SemconvStability;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n super.setConfig(config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n init() {\n return [\n new InstrumentationNodeModuleDefinition(\n 'redis',\n ['>=2.6.0 <4'],\n (moduleExports: any) => {\n if (isWrapped(moduleExports.RedisClient.prototype['internal_send_command'])) {\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n }\n this._wrap(moduleExports.RedisClient.prototype, 'internal_send_command', this._getPatchInternalSendCommand());\n if (isWrapped(moduleExports.RedisClient.prototype['create_stream'])) {\n this._unwrap(moduleExports.RedisClient.prototype, 'create_stream');\n }\n this._wrap(moduleExports.RedisClient.prototype, 'create_stream', this._getPatchCreateStream());\n if (isWrapped(moduleExports.createClient)) {\n this._unwrap(moduleExports, 'createClient');\n }\n this._wrap(moduleExports, 'createClient', this._getPatchCreateClient());\n return moduleExports;\n },\n (moduleExports: any) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n this._unwrap(moduleExports.RedisClient.prototype, 'create_stream');\n this._unwrap(moduleExports, 'createClient');\n },\n ),\n ];\n }\n\n private _getPatchInternalSendCommand() {\n const instrumentation = this;\n return function internal_send_command(original: Function) {\n return function internal_send_command_trace(this: RedisPluginClientTypes, cmd: RedisCommand) {\n if (arguments.length !== 1 || typeof cmd !== 'object') {\n return original.apply(this, arguments);\n }\n const config = instrumentation.getConfig();\n const hasNoParentSpan = trace.getSpan(context.active()) === undefined;\n if (config.requireParentSpan === true && hasNoParentSpan) {\n return original.apply(this, arguments);\n }\n const dbStatementSerializer = config?.dbStatementSerializer || defaultDbStatementSerializer;\n const attributes: Record<string, any> = {};\n if (instrumentation._semconvStability & SemconvStability.OLD) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_DB_STATEMENT]: dbStatementSerializer(cmd.command, cmd.args),\n });\n }\n if (instrumentation._semconvStability & SemconvStability.STABLE) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n [ATTR_DB_OPERATION_NAME]: cmd.command,\n [ATTR_DB_QUERY_TEXT]: dbStatementSerializer(cmd.command, cmd.args),\n });\n }\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.db.otel.redis';\n const span = instrumentation.tracer.startSpan(`${RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n if (this.connection_options) {\n const connectionAttributes: Record<string, any> = {};\n if (instrumentation._semconvStability & SemconvStability.OLD) {\n Object.assign(connectionAttributes, {\n [ATTR_NET_PEER_NAME]: this.connection_options.host,\n [ATTR_NET_PEER_PORT]: this.connection_options.port,\n });\n }\n if (instrumentation._semconvStability & SemconvStability.STABLE) {\n Object.assign(connectionAttributes, {\n [ATTR_SERVER_ADDRESS]: this.connection_options.host,\n [ATTR_SERVER_PORT]: this.connection_options.port,\n });\n }\n span.setAttributes(connectionAttributes);\n }\n if (this.address && instrumentation._semconvStability & SemconvStability.OLD) {\n span.setAttribute(ATTR_DB_CONNECTION_STRING, `redis://${this.address}`);\n }\n const originalCallback = arguments[0].callback;\n if (originalCallback) {\n const originalContext = context.active();\n arguments[0].callback = function callback(this: any, err: Error | null, reply: unknown) {\n if (config?.responseHook) {\n const responseHook = config.responseHook;\n safeExecuteInTheMiddle(\n () => {\n responseHook(span, cmd.command, cmd.args, reply);\n },\n (e: Error | undefined) => {\n if (e) {\n instrumentation._diag.error('Error executing responseHook', e);\n }\n },\n true,\n );\n }\n endSpanV2(span, err);\n return context.with(originalContext, originalCallback, this, ...arguments);\n };\n }\n try {\n return original.apply(this, arguments);\n } catch (rethrow) {\n endSpanV2(span, rethrow as Error);\n throw rethrow;\n }\n };\n };\n }\n\n private _getPatchCreateClient() {\n return function createClient(original: Function) {\n return getTracedCreateClient(original);\n };\n }\n\n private _getPatchCreateStream() {\n return function createReadStream(original: Function) {\n return getTracedCreateStreamTrace(original);\n };\n }\n}\n\n// ---- RedisInstrumentationV4_V5 ----\n\nclass RedisInstrumentationV4_V5 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n _semconvStability: SemconvStability;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n super.setConfig(config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n init() {\n return [\n this._getInstrumentationNodeModuleDefinition('@redis/client'),\n this._getInstrumentationNodeModuleDefinition('@node-redis/client'),\n ];\n }\n\n private _getInstrumentationNodeModuleDefinition(basePackageName: string) {\n const commanderModuleFile = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/commander.js`,\n ['^1.0.0'],\n (moduleExports: any, moduleVersion?: string) => {\n const transformCommandArguments = moduleExports.transformCommandArguments;\n if (!transformCommandArguments) {\n this._diag.error('internal instrumentation error, missing transformCommandArguments function');\n return moduleExports;\n }\n const functionToPatch = moduleVersion?.startsWith('1.0.') ? 'extendWithCommands' : 'attachCommands';\n if (isWrapped(moduleExports?.[functionToPatch])) {\n this._unwrap(moduleExports, functionToPatch);\n }\n this._wrap(moduleExports, functionToPatch, this._getPatchExtendWithCommands(transformCommandArguments));\n return moduleExports;\n },\n (moduleExports: any) => {\n if (isWrapped(moduleExports?.extendWithCommands)) {\n this._unwrap(moduleExports, 'extendWithCommands');\n }\n if (isWrapped(moduleExports?.attachCommands)) {\n this._unwrap(moduleExports, 'attachCommands');\n }\n },\n );\n\n const multiCommanderModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/multi-command.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n this._wrap(redisClientMultiCommandPrototype, 'exec', this._getPatchMultiCommandsExec(false));\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n this._wrap(redisClientMultiCommandPrototype, 'execAsPipeline', this._getPatchMultiCommandsExec(true));\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n this._wrap(redisClientMultiCommandPrototype, 'addCommand', this._getPatchMultiCommandsAddCommand());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n },\n );\n\n const clientIndexModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/index.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (redisClientPrototype?.multi) {\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n this._wrap(redisClientPrototype, 'multi', this._getPatchRedisClientMulti());\n }\n if (redisClientPrototype?.MULTI) {\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n this._wrap(redisClientPrototype, 'MULTI', this._getPatchRedisClientMulti());\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n this._wrap(redisClientPrototype, 'sendCommand', this._getPatchRedisClientSendCommand());\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n this._wrap(redisClientPrototype, 'connect', this._getPatchedClientConnect());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n },\n );\n\n return new InstrumentationNodeModuleDefinition(\n basePackageName,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => moduleExports,\n () => {},\n [commanderModuleFile, multiCommanderModule, clientIndexModule],\n );\n }\n\n private _getPatchExtendWithCommands(transformCommandArguments: Function) {\n const plugin = this;\n return function extendWithCommandsPatchWrapper(original: Function) {\n return function extendWithCommandsPatch(this: any, config: any) {\n if (config?.BaseClass?.name !== 'RedisClient') {\n return original.apply(this, arguments);\n }\n const origExecutor = config.executor;\n config.executor = function (this: any, command: any, args: any) {\n const redisCommandArguments = transformCommandArguments(command, args).args;\n return plugin._traceClientCommand(origExecutor, this, arguments, redisCommandArguments);\n };\n return original.apply(this, arguments);\n };\n };\n }\n\n private _getPatchMultiCommandsExec(isPipeline: boolean) {\n const plugin = this;\n return function execPatchWrapper(original: Function) {\n return function execPatch(this: any) {\n const execRes = original.apply(this, arguments);\n if (typeof execRes?.then !== 'function') {\n plugin._diag.error('non-promise result when patching exec/execAsPipeline');\n return execRes;\n }\n return execRes\n .then((redisRes: unknown[]) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n plugin._endSpansWithRedisReplies(openSpans, redisRes, isPipeline);\n return redisRes;\n })\n .catch((err: any) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n if (!openSpans) {\n plugin._diag.error('cannot find open spans to end for multi/pipeline');\n } else {\n const replies =\n err.constructor.name === 'MultiErrorReply'\n ? (err as MultiErrorReply).replies\n : new Array(openSpans.length).fill(err);\n plugin._endSpansWithRedisReplies(openSpans, replies, isPipeline);\n }\n return Promise.reject(err);\n });\n };\n };\n }\n\n private _getPatchMultiCommandsAddCommand() {\n const plugin = this;\n return function addCommandWrapper(original: Function) {\n return function addCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchRedisClientMulti() {\n return function multiPatchWrapper(original: Function) {\n return function multiPatch(this: any) {\n const multiRes: any = original.apply(this, arguments);\n multiRes[MULTI_COMMAND_OPTIONS] = this.options;\n return multiRes;\n };\n };\n }\n\n private _getPatchRedisClientSendCommand() {\n const plugin = this;\n return function sendCommandWrapper(original: Function) {\n return function sendCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchedClientConnect() {\n const plugin = this;\n return function connectWrapper(original: Function) {\n return function patchedConnect(this: any) {\n const options = this.options;\n const attributes = getClientAttributes(plugin._diag, options, plugin._semconvStability);\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.db.otel.redis';\n const span = plugin.tracer.startSpan(`${RedisInstrumentationV4_V5.COMPONENT}-connect`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n const res = context.with(trace.setSpan(context.active(), span), () => {\n return original.apply(this);\n });\n return res\n .then((result: any) => {\n span.end();\n return result;\n })\n .catch((error: Error) => {\n span.recordException(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n span.end();\n return Promise.reject(error);\n });\n };\n };\n }\n\n _traceClientCommand(\n origFunction: Function,\n origThis: any,\n origArguments: IArguments,\n redisCommandArguments: Array<string | Buffer>,\n ): any {\n const hasNoParentSpan = trace.getSpan(context.active()) === undefined;\n if (hasNoParentSpan && this.getConfig().requireParentSpan) {\n return origFunction.apply(origThis, origArguments);\n }\n const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS];\n const commandName = redisCommandArguments[0] as string;\n const commandArgs = redisCommandArguments.slice(1);\n const dbStatementSerializer = this.getConfig().dbStatementSerializer || defaultDbStatementSerializer;\n const attributes = getClientAttributes(this._diag, clientOptions, this._semconvStability);\n if (this._semconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_OPERATION_NAME] = commandName;\n }\n try {\n const dbStatement = dbStatementSerializer(commandName, commandArgs);\n if (dbStatement != null) {\n if (this._semconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = dbStatement;\n }\n if (this._semconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = dbStatement;\n }\n }\n } catch (e) {\n this._diag.error('dbStatementSerializer throw an exception', e, { commandName });\n }\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.db.otel.redis';\n const span = this.tracer.startSpan(`${RedisInstrumentationV4_V5.COMPONENT}-${commandName}`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n const res = context.with(trace.setSpan(context.active(), span), () => {\n return origFunction.apply(origThis, origArguments);\n });\n if (typeof res?.then === 'function') {\n res.then(\n (redisRes: unknown) => {\n this._endSpanWithResponse(span, commandName, commandArgs, redisRes, undefined);\n },\n (err: Error) => {\n this._endSpanWithResponse(span, commandName, commandArgs, null, err);\n },\n );\n } else {\n const redisClientMultiCommand: any = res;\n redisClientMultiCommand[OTEL_OPEN_SPANS] = redisClientMultiCommand[OTEL_OPEN_SPANS] || [];\n redisClientMultiCommand[OTEL_OPEN_SPANS].push({\n span,\n commandName,\n commandArgs,\n });\n }\n return res;\n }\n\n _endSpansWithRedisReplies(openSpans: OpenSpanInfo[] | undefined, replies: unknown[], isPipeline = false): void {\n if (!openSpans) {\n return this._diag.error('cannot find open spans to end for redis multi/pipeline');\n }\n if (replies.length !== openSpans.length) {\n return this._diag.error('number of multi command spans does not match response from redis');\n }\n const allCommands = openSpans.map(s => s.commandName);\n const allSameCommand = allCommands.every(cmd => cmd === allCommands[0]);\n const operationName = allSameCommand\n ? (isPipeline ? 'PIPELINE ' : 'MULTI ') + allCommands[0]\n : isPipeline\n ? 'PIPELINE'\n : 'MULTI';\n for (let i = 0; i < openSpans.length; i++) {\n const { span, commandArgs } = openSpans[i]!;\n const currCommandRes = replies[i];\n const [res, err] = currCommandRes instanceof Error ? [null, currCommandRes] : [currCommandRes, undefined];\n if (this._semconvStability & SemconvStability.STABLE) {\n span.setAttribute(ATTR_DB_OPERATION_NAME, operationName);\n }\n this._endSpanWithResponse(span, allCommands[i]!, commandArgs, res, err);\n }\n }\n\n _endSpanWithResponse(\n span: Span,\n commandName: string,\n commandArgs: Array<string | Buffer>,\n response: unknown,\n error: Error | null | undefined,\n ): void {\n const { responseHook } = this.getConfig();\n if (!error && responseHook) {\n try {\n responseHook(span, commandName, commandArgs, response);\n } catch (err) {\n this._diag.error('responseHook throw an exception', err);\n }\n }\n if (error) {\n span.recordException(error);\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message });\n }\n span.end();\n }\n}\n\n// ---- RedisInstrumentation (wrapper) ----\n\nconst DEFAULT_CONFIG: RedisInstrumentationConfig = {\n requireParentSpan: false,\n};\n\nexport class RedisInstrumentation extends InstrumentationBase<RedisInstrumentationConfig> {\n private instrumentationV2_V3: RedisInstrumentationV2_V3;\n private instrumentationV4_V5: RedisInstrumentationV4_V5;\n private initialized = false;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n const resolvedConfig = { ...DEFAULT_CONFIG, ...config };\n super(PACKAGE_NAME, PACKAGE_VERSION, resolvedConfig);\n this.instrumentationV2_V3 = new RedisInstrumentationV2_V3(this.getConfig());\n this.instrumentationV4_V5 = new RedisInstrumentationV4_V5(this.getConfig());\n this.initialized = true;\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n const newConfig = { ...DEFAULT_CONFIG, ...config };\n super.setConfig(newConfig);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setConfig(newConfig);\n this.instrumentationV4_V5.setConfig(newConfig);\n }\n\n init() {}\n\n override getModuleDefinitions() {\n return [...this.instrumentationV2_V3.getModuleDefinitions(), ...this.instrumentationV4_V5.getModuleDefinitions()];\n }\n\n override setTracerProvider(tracerProvider: TracerProvider): void {\n super.setTracerProvider(tracerProvider);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setTracerProvider(tracerProvider);\n this.instrumentationV4_V5.setTracerProvider(tracerProvider);\n }\n\n override enable(): void {\n super.enable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.enable();\n this.instrumentationV4_V5.enable();\n }\n\n override disable(): void {\n super.disable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.disable();\n this.instrumentationV4_V5.disable();\n }\n}\n"],"names":[],"mappings":";;;;;;;AAsDA,MAAM,YAAA,GAAe,sCAAA;AACrB,MAAM,eAAA,GAAkB,QAAA;AA+BxB,MAAM,eAAA,0BAAyB,gDAAgD,CAAA;AAC/E,MAAM,qBAAA,0BAA+B,2DAA2D,CAAA;AAIhG,SAAS,gDAAA,CACP,YACA,GAAA,EACoB;AACpB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,GAAA,EAAK;AACnC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,GAAG,CAAA;AACrB,IAAA,CAAA,CAAE,YAAA,CAAa,OAAO,UAAU,CAAA;AAChC,IAAA,CAAA,CAAE,QAAA,GAAW,EAAA;AACb,IAAA,CAAA,CAAE,QAAA,GAAW,EAAA;AACb,IAAA,OAAO,CAAA,CAAE,IAAA;AAAA,EACX,SAAS,GAAA,EAAK;AACZ,IAAA,UAAA,CAAW,KAAA,CAAM,2CAA2C,GAAG,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAA,CACP,UAAA,EACA,OAAA,EACA,gBAAA,EACqB;AACrB,EAAA,MAAM,aAAkC,EAAC;AACzC,EAAA,IAAI,gBAAA,GAAmB,iBAAiB,GAAA,EAAK;AAC3C,IAAA,MAAA,CAAO,OAAO,UAAA,EAAY;AAAA,MACxB,CAAC,cAAc,GAAG,qBAAA;AAAA,MAClB,CAAC,kBAAkB,GAAG,OAAA,EAAS,MAAA,EAAQ,IAAA;AAAA,MACvC,CAAC,kBAAkB,GAAG,OAAA,EAAS,MAAA,EAAQ,IAAA;AAAA,MACvC,CAAC,yBAAyB,GAAG,gDAAA,CAAiD,UAAA,EAAY,SAAS,GAAG;AAAA,KACvG,CAAA;AAAA,EACH;AACA,EAAA,IAAI,gBAAA,GAAmB,iBAAiB,MAAA,EAAQ;AAC9C,IAAA,MAAA,CAAO,OAAO,UAAA,EAAY;AAAA,MACxB,CAAC,mBAAmB,GAAG,0BAAA;AAAA,MACvB,CAAC,mBAAmB,GAAG,OAAA,EAAS,MAAA,EAAQ,IAAA;AAAA,MACxC,CAAC,gBAAgB,GAAG,OAAA,EAAS,MAAA,EAAQ;AAAA,KACtC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AAIA,SAAS,SAAA,CAAU,MAAY,GAAA,EAAqC;AAClE,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAA,CAAK,SAAA,CAAU;AAAA,MACb,MAAM,cAAA,CAAe,KAAA;AAAA,MACrB,SAAS,GAAA,CAAI;AAAA,KACd,CAAA;AAAA,EACH;AACA,EAAA,IAAA,CAAK,GAAA,EAAI;AACX;AAEA,SAAS,sBAAsB,QAAA,EAA8B;AAC3D,EAAA,OAAO,SAAS,iBAAA,GAA6B;AAC3C,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAC7C,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,IAAU,MAAM,CAAA;AAAA,EAC9C,CAAA;AACF;AAEA,SAAS,2BAA2B,QAAA,EAA8B;AAChE,EAAA,OAAO,SAAS,mBAAA,GAA+B;AAC7C,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,eAAe,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,EAAG;AACzD,MAAA,MAAA,CAAO,cAAA,CAAe,MAAM,QAAA,EAAU;AAAA,QACpC,GAAA,GAAM;AACJ,UAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,QACd,CAAA;AAAA,QACA,IAAI,GAAA,EAAU;AACZ,UAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,EAAG,GAAG,CAAA;AAClC,UAAA,IAAA,CAAK,qBAAA,GAAwB,GAAA;AAAA,QAC/B;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,EACvC,CAAA;AACF;AAIA,MAAM,0BAAA,GAAN,MAAM,0BAAA,SAAkC,mBAAA,CAAgD;AAAA,EAItF,WAAA,CAAY,MAAA,GAAqC,EAAC,EAAG;AACnD,IAAA,KAAA,CAAM,YAAA,EAAc,iBAAiB,MAAM,CAAA;AAC3C,IAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA,CAAO,gBAAA,GAC5B,MAAA,CAAO,gBAAA,GACP,wBAAwB,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,+BAA+B,CAAC,CAAA;AAAA,EACtF;AAAA,EAES,SAAA,CAAU,MAAA,GAAqC,EAAC,EAAS;AAChE,IAAA,KAAA,CAAM,UAAU,MAAM,CAAA;AACtB,IAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA,CAAO,gBAAA,GAC5B,MAAA,CAAO,gBAAA,GACP,wBAAwB,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,+BAA+B,CAAC,CAAA;AAAA,EACtF;AAAA,EAEA,IAAA,GAAO;AACL,IAAA,OAAO;AAAA,MACL,IAAI,mCAAA;AAAA,QACF,OAAA;AAAA,QACA,CAAC,YAAY,CAAA;AAAA,QACb,CAAC,aAAA,KAAuB;AACtB,UAAA,IAAI,UAAU,aAAA,CAAc,WAAA,CAAY,SAAA,CAAU,uBAAuB,CAAC,CAAA,EAAG;AAC3E,YAAA,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,WAAA,CAAY,SAAA,EAAW,uBAAuB,CAAA;AAAA,UAC3E;AACA,UAAA,IAAA,CAAK,MAAM,aAAA,CAAc,WAAA,CAAY,WAAW,uBAAA,EAAyB,IAAA,CAAK,8BAA8B,CAAA;AAC5G,UAAA,IAAI,UAAU,aAAA,CAAc,WAAA,CAAY,SAAA,CAAU,eAAe,CAAC,CAAA,EAAG;AACnE,YAAA,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,WAAA,CAAY,SAAA,EAAW,eAAe,CAAA;AAAA,UACnE;AACA,UAAA,IAAA,CAAK,MAAM,aAAA,CAAc,WAAA,CAAY,WAAW,eAAA,EAAiB,IAAA,CAAK,uBAAuB,CAAA;AAC7F,UAAA,IAAI,SAAA,CAAU,aAAA,CAAc,YAAY,CAAA,EAAG;AACzC,YAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,cAAc,CAAA;AAAA,UAC5C;AACA,UAAA,IAAA,CAAK,KAAA,CAAM,aAAA,EAAe,cAAA,EAAgB,IAAA,CAAK,uBAAuB,CAAA;AACtE,UAAA,OAAO,aAAA;AAAA,QACT,CAAA;AAAA,QACA,CAAC,aAAA,KAAuB;AACtB,UAAA,IAAI,kBAAkB,MAAA,EAAW;AACjC,UAAA,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,WAAA,CAAY,SAAA,EAAW,uBAAuB,CAAA;AACzE,UAAA,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,WAAA,CAAY,SAAA,EAAW,eAAe,CAAA;AACjE,UAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,cAAc,CAAA;AAAA,QAC5C;AAAA;AACF,KACF;AAAA,EACF;AAAA,EAEQ,4BAAA,GAA+B;AACrC,IAAA,MAAM,eAAA,GAAkB,IAAA;AACxB,IAAA,OAAO,SAAS,sBAAsB,QAAA,EAAoB;AACxD,MAAA,OAAO,SAAS,4BAA0D,GAAA,EAAmB;AAC3F,QAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,OAAO,QAAQ,QAAA,EAAU;AACrD,UAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,QACvC;AACA,QAAA,MAAM,MAAA,GAAS,gBAAgB,SAAA,EAAU;AACzC,QAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA,KAAM,MAAA;AAC5D,QAAA,IAAI,MAAA,CAAO,iBAAA,KAAsB,IAAA,IAAQ,eAAA,EAAiB;AACxD,UAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,QACvC;AACA,QAAA,MAAM,qBAAA,GAAwB,QAAQ,qBAAA,IAAyB,4BAAA;AAC/D,QAAA,MAAM,aAAkC,EAAC;AACzC,QAAA,IAAI,eAAA,CAAgB,iBAAA,GAAoB,gBAAA,CAAiB,GAAA,EAAK;AAC5D,UAAA,MAAA,CAAO,OAAO,UAAA,EAAY;AAAA,YACxB,CAAC,cAAc,GAAG,qBAAA;AAAA,YAClB,CAAC,iBAAiB,GAAG,sBAAsB,GAAA,CAAI,OAAA,EAAS,IAAI,IAAI;AAAA,WACjE,CAAA;AAAA,QACH;AACA,QAAA,IAAI,eAAA,CAAgB,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,EAAQ;AAC/D,UAAA,MAAA,CAAO,OAAO,UAAA,EAAY;AAAA,YACxB,CAAC,mBAAmB,GAAG,0BAAA;AAAA,YACvB,CAAC,sBAAsB,GAAG,GAAA,CAAI,OAAA;AAAA,YAC9B,CAAC,kBAAkB,GAAG,sBAAsB,GAAA,CAAI,OAAA,EAAS,IAAI,IAAI;AAAA,WAClE,CAAA;AAAA,QACH;AACA,QAAA,UAAA,CAAW,gCAAgC,CAAA,GAAI,oBAAA;AAC/C,QAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAA,CAAO,SAAA,CAAU,CAAA,EAAG,2BAA0B,SAAS,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI;AAAA,UACrG,MAAM,QAAA,CAAS,MAAA;AAAA,UACf;AAAA,SACD,CAAA;AACD,QAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,UAAA,MAAM,uBAA4C,EAAC;AACnD,UAAA,IAAI,eAAA,CAAgB,iBAAA,GAAoB,gBAAA,CAAiB,GAAA,EAAK;AAC5D,YAAA,MAAA,CAAO,OAAO,oBAAA,EAAsB;AAAA,cAClC,CAAC,kBAAkB,GAAG,IAAA,CAAK,kBAAA,CAAmB,IAAA;AAAA,cAC9C,CAAC,kBAAkB,GAAG,IAAA,CAAK,kBAAA,CAAmB;AAAA,aAC/C,CAAA;AAAA,UACH;AACA,UAAA,IAAI,eAAA,CAAgB,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,EAAQ;AAC/D,YAAA,MAAA,CAAO,OAAO,oBAAA,EAAsB;AAAA,cAClC,CAAC,mBAAmB,GAAG,IAAA,CAAK,kBAAA,CAAmB,IAAA;AAAA,cAC/C,CAAC,gBAAgB,GAAG,IAAA,CAAK,kBAAA,CAAmB;AAAA,aAC7C,CAAA;AAAA,UACH;AACA,UAAA,IAAA,CAAK,cAAc,oBAAoB,CAAA;AAAA,QACzC;AACA,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,eAAA,CAAgB,iBAAA,GAAoB,iBAAiB,GAAA,EAAK;AAC5E,UAAA,IAAA,CAAK,YAAA,CAAa,yBAAA,EAA2B,CAAA,QAAA,EAAW,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,QACxE;AACA,QAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,CAAC,CAAA,CAAE,QAAA;AACtC,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAA,MAAM,eAAA,GAAkB,QAAQ,MAAA,EAAO;AACvC,UAAA,SAAA,CAAU,CAAC,CAAA,CAAE,QAAA,GAAW,SAAS,QAAA,CAAoB,KAAmB,KAAA,EAAgB;AACtF,YAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,cAAA,MAAM,eAAe,MAAA,CAAO,YAAA;AAC5B,cAAA,sBAAA;AAAA,gBACE,MAAM;AACJ,kBAAA,YAAA,CAAa,IAAA,EAAM,GAAA,CAAI,OAAA,EAAS,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,gBACjD,CAAA;AAAA,gBACA,CAAC,CAAA,KAAyB;AACxB,kBAAA,IAAI,CAAA,EAAG;AACL,oBAAA,eAAA,CAAgB,KAAA,CAAM,KAAA,CAAM,8BAAA,EAAgC,CAAC,CAAA;AAAA,kBAC/D;AAAA,gBACF,CAAA;AAAA,gBACA;AAAA,eACF;AAAA,YACF;AACA,YAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AACnB,YAAA,OAAO,QAAQ,IAAA,CAAK,eAAA,EAAiB,gBAAA,EAAkB,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,UAC3E,CAAA;AAAA,QACF;AACA,QAAA,IAAI;AACF,UAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,QACvC,SAAS,OAAA,EAAS;AAChB,UAAA,SAAA,CAAU,MAAM,OAAgB,CAAA;AAChC,UAAA,MAAM,OAAA;AAAA,QACR;AAAA,MACF,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEQ,qBAAA,GAAwB;AAC9B,IAAA,OAAO,SAAS,aAAa,QAAA,EAAoB;AAC/C,MAAA,OAAO,sBAAsB,QAAQ,CAAA;AAAA,IACvC,CAAA;AAAA,EACF;AAAA,EAEQ,qBAAA,GAAwB;AAC9B,IAAA,OAAO,SAAS,iBAAiB,QAAA,EAAoB;AACnD,MAAA,OAAO,2BAA2B,QAAQ,CAAA;AAAA,IAC5C,CAAA;AAAA,EACF;AACF,CAAA;AA9IM,0BAAA,CACG,SAAA,GAAY,OAAA;AADrB,IAAM,yBAAA,GAAN,0BAAA;AAkJA,MAAM,0BAAA,GAAN,MAAM,0BAAA,SAAkC,mBAAA,CAAgD;AAAA,EAItF,WAAA,CAAY,MAAA,GAAqC,EAAC,EAAG;AACnD,IAAA,KAAA,CAAM,YAAA,EAAc,iBAAiB,MAAM,CAAA;AAC3C,IAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA,CAAO,gBAAA,GAC5B,MAAA,CAAO,gBAAA,GACP,wBAAwB,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,+BAA+B,CAAC,CAAA;AAAA,EACtF;AAAA,EAES,SAAA,CAAU,MAAA,GAAqC,EAAC,EAAS;AAChE,IAAA,KAAA,CAAM,UAAU,MAAM,CAAA;AACtB,IAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA,CAAO,gBAAA,GAC5B,MAAA,CAAO,gBAAA,GACP,wBAAwB,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,+BAA+B,CAAC,CAAA;AAAA,EACtF;AAAA,EAEA,IAAA,GAAO;AACL,IAAA,OAAO;AAAA,MACL,IAAA,CAAK,wCAAwC,eAAe,CAAA;AAAA,MAC5D,IAAA,CAAK,wCAAwC,oBAAoB;AAAA,KACnE;AAAA,EACF;AAAA,EAEQ,wCAAwC,eAAA,EAAyB;AACvE,IAAA,MAAM,sBAAsB,IAAI,6BAAA;AAAA,MAC9B,GAAG,eAAe,CAAA,sBAAA,CAAA;AAAA,MAClB,CAAC,QAAQ,CAAA;AAAA,MACT,CAAC,eAAoB,aAAA,KAA2B;AAC9C,QAAA,MAAM,4BAA4B,aAAA,CAAc,yBAAA;AAChD,QAAA,IAAI,CAAC,yBAAA,EAA2B;AAC9B,UAAA,IAAA,CAAK,KAAA,CAAM,MAAM,4EAA4E,CAAA;AAC7F,UAAA,OAAO,aAAA;AAAA,QACT;AACA,QAAA,MAAM,eAAA,GAAkB,aAAA,EAAe,UAAA,CAAW,MAAM,IAAI,oBAAA,GAAuB,gBAAA;AACnF,QAAA,IAAI,SAAA,CAAU,aAAA,GAAgB,eAAe,CAAC,CAAA,EAAG;AAC/C,UAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,eAAe,CAAA;AAAA,QAC7C;AACA,QAAA,IAAA,CAAK,MAAM,aAAA,EAAe,eAAA,EAAiB,IAAA,CAAK,2BAAA,CAA4B,yBAAyB,CAAC,CAAA;AACtG,QAAA,OAAO,aAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,aAAA,KAAuB;AACtB,QAAA,IAAI,SAAA,CAAU,aAAA,EAAe,kBAAkB,CAAA,EAAG;AAChD,UAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,oBAAoB,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,SAAA,CAAU,aAAA,EAAe,cAAc,CAAA,EAAG;AAC5C,UAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,gBAAgB,CAAA;AAAA,QAC9C;AAAA,MACF;AAAA,KACF;AAEA,IAAA,MAAM,uBAAuB,IAAI,6BAAA;AAAA,MAC/B,GAAG,eAAe,CAAA,iCAAA,CAAA;AAAA,MAClB,CAAC,UAAU,iBAAiB,CAAA;AAAA,MAC5B,CAAC,aAAA,KAAuB;AACtB,QAAA,MAAM,gCAAA,GAAmC,eAAe,OAAA,EAAS,SAAA;AACjE,QAAA,IAAI,SAAA,CAAU,gCAAA,EAAkC,IAAI,CAAA,EAAG;AACrD,UAAA,IAAA,CAAK,OAAA,CAAQ,kCAAkC,MAAM,CAAA;AAAA,QACvD;AACA,QAAA,IAAA,CAAK,MAAM,gCAAA,EAAkC,MAAA,EAAQ,IAAA,CAAK,0BAAA,CAA2B,KAAK,CAAC,CAAA;AAC3F,QAAA,IAAI,SAAA,CAAU,gCAAA,EAAkC,cAAc,CAAA,EAAG;AAC/D,UAAA,IAAA,CAAK,OAAA,CAAQ,kCAAkC,gBAAgB,CAAA;AAAA,QACjE;AACA,QAAA,IAAA,CAAK,MAAM,gCAAA,EAAkC,gBAAA,EAAkB,IAAA,CAAK,0BAAA,CAA2B,IAAI,CAAC,CAAA;AACpG,QAAA,IAAI,SAAA,CAAU,gCAAA,EAAkC,UAAU,CAAA,EAAG;AAC3D,UAAA,IAAA,CAAK,OAAA,CAAQ,kCAAkC,YAAY,CAAA;AAAA,QAC7D;AACA,QAAA,IAAA,CAAK,KAAA,CAAM,gCAAA,EAAkC,YAAA,EAAc,IAAA,CAAK,kCAAkC,CAAA;AAClG,QAAA,OAAO,aAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,aAAA,KAAuB;AACtB,QAAA,MAAM,gCAAA,GAAmC,eAAe,OAAA,EAAS,SAAA;AACjE,QAAA,IAAI,SAAA,CAAU,gCAAA,EAAkC,IAAI,CAAA,EAAG;AACrD,UAAA,IAAA,CAAK,OAAA,CAAQ,kCAAkC,MAAM,CAAA;AAAA,QACvD;AACA,QAAA,IAAI,SAAA,CAAU,gCAAA,EAAkC,cAAc,CAAA,EAAG;AAC/D,UAAA,IAAA,CAAK,OAAA,CAAQ,kCAAkC,gBAAgB,CAAA;AAAA,QACjE;AACA,QAAA,IAAI,SAAA,CAAU,gCAAA,EAAkC,UAAU,CAAA,EAAG;AAC3D,UAAA,IAAA,CAAK,OAAA,CAAQ,kCAAkC,YAAY,CAAA;AAAA,QAC7D;AAAA,MACF;AAAA,KACF;AAEA,IAAA,MAAM,oBAAoB,IAAI,6BAAA;AAAA,MAC5B,GAAG,eAAe,CAAA,yBAAA,CAAA;AAAA,MAClB,CAAC,UAAU,iBAAiB,CAAA;AAAA,MAC5B,CAAC,aAAA,KAAuB;AACtB,QAAA,MAAM,oBAAA,GAAuB,eAAe,OAAA,EAAS,SAAA;AACrD,QAAA,IAAI,sBAAsB,KAAA,EAAO;AAC/B,UAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,KAAK,CAAA,EAAG;AAC1C,YAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,OAAO,CAAA;AAAA,UAC5C;AACA,UAAA,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAsB,OAAA,EAAS,IAAA,CAAK,2BAA2B,CAAA;AAAA,QAC5E;AACA,QAAA,IAAI,sBAAsB,KAAA,EAAO;AAC/B,UAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,KAAK,CAAA,EAAG;AAC1C,YAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,OAAO,CAAA;AAAA,UAC5C;AACA,UAAA,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAsB,OAAA,EAAS,IAAA,CAAK,2BAA2B,CAAA;AAAA,QAC5E;AACA,QAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,WAAW,CAAA,EAAG;AAChD,UAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,aAAa,CAAA;AAAA,QAClD;AACA,QAAA,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAsB,aAAA,EAAe,IAAA,CAAK,iCAAiC,CAAA;AACtF,QAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,OAAO,CAAA,EAAG;AAC5C,UAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,SAAS,CAAA;AAAA,QAC9C;AACA,QAAA,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAsB,SAAA,EAAW,IAAA,CAAK,0BAA0B,CAAA;AAC3E,QAAA,OAAO,aAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,aAAA,KAAuB;AACtB,QAAA,MAAM,oBAAA,GAAuB,eAAe,OAAA,EAAS,SAAA;AACrD,QAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,KAAK,CAAA,EAAG;AAC1C,UAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,OAAO,CAAA;AAAA,QAC5C;AACA,QAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,KAAK,CAAA,EAAG;AAC1C,UAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,OAAO,CAAA;AAAA,QAC5C;AACA,QAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,WAAW,CAAA,EAAG;AAChD,UAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,aAAa,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,SAAA,CAAU,oBAAA,EAAsB,OAAO,CAAA,EAAG;AAC5C,UAAA,IAAA,CAAK,OAAA,CAAQ,sBAAsB,SAAS,CAAA;AAAA,QAC9C;AAAA,MACF;AAAA,KACF;AAEA,IAAA,OAAO,IAAI,mCAAA;AAAA,MACT,eAAA;AAAA,MACA,CAAC,UAAU,iBAAiB,CAAA;AAAA,MAC5B,CAAC,aAAA,KAAuB,aAAA;AAAA,MACxB,MAAM;AAAA,MAAC,CAAA;AAAA,MACP,CAAC,mBAAA,EAAqB,oBAAA,EAAsB,iBAAiB;AAAA,KAC/D;AAAA,EACF;AAAA,EAEQ,4BAA4B,yBAAA,EAAqC;AACvE,IAAA,MAAM,MAAA,GAAS,IAAA;AACf,IAAA,OAAO,SAAS,+BAA+B,QAAA,EAAoB;AACjE,MAAA,OAAO,SAAS,wBAAmC,MAAA,EAAa;AAC9D,QAAA,IAAI,MAAA,EAAQ,SAAA,EAAW,IAAA,KAAS,aAAA,EAAe;AAC7C,UAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,QACvC;AACA,QAAA,MAAM,eAAe,MAAA,CAAO,QAAA;AAC5B,QAAA,MAAA,CAAO,QAAA,GAAW,SAAqB,OAAA,EAAc,IAAA,EAAW;AAC9D,UAAA,MAAM,qBAAA,GAAwB,yBAAA,CAA0B,OAAA,EAAS,IAAI,CAAA,CAAE,IAAA;AACvE,UAAA,OAAO,MAAA,CAAO,mBAAA,CAAoB,YAAA,EAAc,IAAA,EAAM,WAAW,qBAAqB,CAAA;AAAA,QACxF,CAAA;AACA,QAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACvC,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEQ,2BAA2B,UAAA,EAAqB;AACtD,IAAA,MAAM,MAAA,GAAS,IAAA;AACf,IAAA,OAAO,SAAS,iBAAiB,QAAA,EAAoB;AACnD,MAAA,OAAO,SAAS,SAAA,GAAqB;AACnC,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAC9C,QAAA,IAAI,OAAO,OAAA,EAAS,IAAA,KAAS,UAAA,EAAY;AACvC,UAAA,MAAA,CAAO,KAAA,CAAM,MAAM,sDAAsD,CAAA;AACzE,UAAA,OAAO,OAAA;AAAA,QACT;AACA,QAAA,OAAO,OAAA,CACJ,IAAA,CAAK,CAAC,QAAA,KAAwB;AAC7B,UAAA,MAAM,SAAA,GAA4B,KAAK,eAAe,CAAA;AACtD,UAAA,MAAA,CAAO,yBAAA,CAA0B,SAAA,EAAW,QAAA,EAAU,UAAU,CAAA;AAChE,UAAA,OAAO,QAAA;AAAA,QACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAa;AACnB,UAAA,MAAM,SAAA,GAA4B,KAAK,eAAe,CAAA;AACtD,UAAA,IAAI,CAAC,SAAA,EAAW;AACd,YAAA,MAAA,CAAO,KAAA,CAAM,MAAM,kDAAkD,CAAA;AAAA,UACvE,CAAA,MAAO;AACL,YAAA,MAAM,OAAA,GACJ,GAAA,CAAI,WAAA,CAAY,IAAA,KAAS,iBAAA,GACpB,GAAA,CAAwB,OAAA,GACzB,IAAI,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA,CAAE,KAAK,GAAG,CAAA;AAC1C,YAAA,MAAA,CAAO,yBAAA,CAA0B,SAAA,EAAW,OAAA,EAAS,UAAU,CAAA;AAAA,UACjE;AACA,UAAA,OAAO,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,QAC3B,CAAC,CAAA;AAAA,MACL,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEQ,gCAAA,GAAmC;AACzC,IAAA,MAAM,MAAA,GAAS,IAAA;AACf,IAAA,OAAO,SAAS,kBAAkB,QAAA,EAAoB;AACpD,MAAA,OAAO,SAAS,gBAA2B,IAAA,EAAW;AACpD,QAAA,OAAO,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,IAAA,EAAM,WAAW,IAAI,CAAA;AAAA,MACnE,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEQ,yBAAA,GAA4B;AAClC,IAAA,OAAO,SAAS,kBAAkB,QAAA,EAAoB;AACpD,MAAA,OAAO,SAAS,UAAA,GAAsB;AACpC,QAAA,MAAM,QAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AACpD,QAAA,QAAA,CAAS,qBAAqB,IAAI,IAAA,CAAK,OAAA;AACvC,QAAA,OAAO,QAAA;AAAA,MACT,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEQ,+BAAA,GAAkC;AACxC,IAAA,MAAM,MAAA,GAAS,IAAA;AACf,IAAA,OAAO,SAAS,mBAAmB,QAAA,EAAoB;AACrD,MAAA,OAAO,SAAS,iBAA4B,IAAA,EAAW;AACrD,QAAA,OAAO,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,IAAA,EAAM,WAAW,IAAI,CAAA;AAAA,MACnE,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEQ,wBAAA,GAA2B;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA;AACf,IAAA,OAAO,SAAS,eAAe,QAAA,EAAoB;AACjD,MAAA,OAAO,SAAS,cAAA,GAA0B;AACxC,QAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,QAAA,MAAM,aAAa,mBAAA,CAAoB,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,OAAO,iBAAiB,CAAA;AACtF,QAAA,UAAA,CAAW,gCAAgC,CAAA,GAAI,oBAAA;AAC/C,QAAA,MAAM,OAAO,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,EAAG,0BAAA,CAA0B,SAAS,CAAA,QAAA,CAAA,EAAY;AAAA,UACrF,MAAM,QAAA,CAAS,MAAA;AAAA,UACf;AAAA,SACD,CAAA;AACD,QAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,QAAQ,MAAA,EAAO,EAAG,IAAI,CAAA,EAAG,MAAM;AACpE,UAAA,OAAO,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,QAC5B,CAAC,CAAA;AACD,QAAA,OAAO,GAAA,CACJ,IAAA,CAAK,CAAC,MAAA,KAAgB;AACrB,UAAA,IAAA,CAAK,GAAA,EAAI;AACT,UAAA,OAAO,MAAA;AAAA,QACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAiB;AACvB,UAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,UAAA,IAAA,CAAK,SAAA,CAAU;AAAA,YACb,MAAM,cAAA,CAAe,KAAA;AAAA,YACrB,SAAS,KAAA,CAAM;AAAA,WAChB,CAAA;AACD,UAAA,IAAA,CAAK,GAAA,EAAI;AACT,UAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,QAC7B,CAAC,CAAA;AAAA,MACL,CAAA;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEA,mBAAA,CACE,YAAA,EACA,QAAA,EACA,aAAA,EACA,qBAAA,EACK;AACL,IAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA,KAAM,MAAA;AAC5D,IAAA,IAAI,eAAA,IAAmB,IAAA,CAAK,SAAA,EAAU,CAAE,iBAAA,EAAmB;AACzD,MAAA,OAAO,YAAA,CAAa,KAAA,CAAM,QAAA,EAAU,aAAa,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,qBAAqB,CAAA;AACxE,IAAA,MAAM,WAAA,GAAc,sBAAsB,CAAC,CAAA;AAC3C,IAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,KAAA,CAAM,CAAC,CAAA;AACjD,IAAA,MAAM,qBAAA,GAAwB,IAAA,CAAK,SAAA,EAAU,CAAE,qBAAA,IAAyB,4BAAA;AACxE,IAAA,MAAM,aAAa,mBAAA,CAAoB,IAAA,CAAK,KAAA,EAAO,aAAA,EAAe,KAAK,iBAAiB,CAAA;AACxF,IAAA,IAAI,IAAA,CAAK,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,EAAQ;AACpD,MAAA,UAAA,CAAW,sBAAsB,CAAA,GAAI,WAAA;AAAA,IACvC;AACA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,WAAA,EAAa,WAAW,CAAA;AAClE,MAAA,IAAI,eAAe,IAAA,EAAM;AACvB,QAAA,IAAI,IAAA,CAAK,iBAAA,GAAoB,gBAAA,CAAiB,GAAA,EAAK;AACjD,UAAA,UAAA,CAAW,iBAAiB,CAAA,GAAI,WAAA;AAAA,QAClC;AACA,QAAA,IAAI,IAAA,CAAK,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,EAAQ;AACpD,UAAA,UAAA,CAAW,kBAAkB,CAAA,GAAI,WAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,IAAA,CAAK,MAAM,KAAA,CAAM,0CAAA,EAA4C,CAAA,EAAG,EAAE,aAAa,CAAA;AAAA,IACjF;AACA,IAAA,UAAA,CAAW,gCAAgC,CAAA,GAAI,oBAAA;AAC/C,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,0BAAA,CAA0B,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI;AAAA,MAC1F,MAAM,QAAA,CAAS,MAAA;AAAA,MACf;AAAA,KACD,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,QAAQ,MAAA,EAAO,EAAG,IAAI,CAAA,EAAG,MAAM;AACpE,MAAA,OAAO,YAAA,CAAa,KAAA,CAAM,QAAA,EAAU,aAAa,CAAA;AAAA,IACnD,CAAC,CAAA;AACD,IAAA,IAAI,OAAO,GAAA,EAAK,IAAA,KAAS,UAAA,EAAY;AACnC,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,CAAC,QAAA,KAAsB;AACrB,UAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,WAAA,EAAa,WAAA,EAAa,UAAU,MAAS,CAAA;AAAA,QAC/E,CAAA;AAAA,QACA,CAAC,GAAA,KAAe;AACd,UAAA,IAAA,CAAK,oBAAA,CAAqB,IAAA,EAAM,WAAA,EAAa,WAAA,EAAa,MAAM,GAAG,CAAA;AAAA,QACrE;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,uBAAA,GAA+B,GAAA;AACrC,MAAA,uBAAA,CAAwB,eAAe,CAAA,GAAI,uBAAA,CAAwB,eAAe,KAAK,EAAC;AACxF,MAAA,uBAAA,CAAwB,eAAe,EAAE,IAAA,CAAK;AAAA,QAC5C,IAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,yBAAA,CAA0B,SAAA,EAAuC,OAAA,EAAoB,UAAA,GAAa,KAAA,EAAa;AAC7G,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,wDAAwD,CAAA;AAAA,IAClF;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AACvC,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,kEAAkE,CAAA;AAAA,IAC5F;AACA,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,WAAW,CAAA;AACpD,IAAA,MAAM,iBAAiB,WAAA,CAAY,KAAA,CAAM,SAAO,GAAA,KAAQ,WAAA,CAAY,CAAC,CAAC,CAAA;AACtE,IAAA,MAAM,aAAA,GAAgB,kBACjB,UAAA,GAAa,WAAA,GAAc,YAAY,WAAA,CAAY,CAAC,CAAA,GACrD,UAAA,GACE,UAAA,GACA,OAAA;AACN,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,UAAU,CAAC,CAAA;AACzC,MAAA,MAAM,cAAA,GAAiB,QAAQ,CAAC,CAAA;AAChC,MAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,cAAA,YAA0B,KAAA,GAAQ,CAAC,IAAA,EAAM,cAAc,CAAA,GAAI,CAAC,cAAA,EAAgB,MAAS,CAAA;AACxG,MAAA,IAAI,IAAA,CAAK,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,EAAQ;AACpD,QAAA,IAAA,CAAK,YAAA,CAAa,wBAAwB,aAAa,CAAA;AAAA,MACzD;AACA,MAAA,IAAA,CAAK,qBAAqB,IAAA,EAAM,WAAA,CAAY,CAAC,CAAA,EAAI,WAAA,EAAa,KAAK,GAAG,CAAA;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,oBAAA,CACE,IAAA,EACA,WAAA,EACA,WAAA,EACA,UACA,KAAA,EACM;AACN,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,IAAA,CAAK,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,SAAS,YAAA,EAAc;AAC1B,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,IAAA,EAAM,WAAA,EAAa,WAAA,EAAa,QAAQ,CAAA;AAAA,MACvD,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,iCAAA,EAAmC,GAAG,CAAA;AAAA,MACzD;AAAA,IACF;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,MAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,OAAO,OAAA,EAAS,KAAA,EAAO,SAAS,CAAA;AAAA,IACxE;AACA,IAAA,IAAA,CAAK,GAAA,EAAI;AAAA,EACX;AACF,CAAA;AAjWM,0BAAA,CACG,SAAA,GAAY,OAAA;AADrB,IAAM,yBAAA,GAAN,0BAAA;AAqWA,MAAM,cAAA,GAA6C;AAAA,EACjD,iBAAA,EAAmB;AACrB,CAAA;AAEO,MAAM,6BAA6B,mBAAA,CAAgD;AAAA,EAKxF,WAAA,CAAY,MAAA,GAAqC,EAAC,EAAG;AACnD,IAAA,MAAM,cAAA,GAAiB,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AACtD,IAAA,KAAA,CAAM,YAAA,EAAc,iBAAiB,cAAc,CAAA;AAJrD,IAAA,IAAA,CAAQ,WAAA,GAAc,KAAA;AAKpB,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAI,yBAAA,CAA0B,IAAA,CAAK,WAAW,CAAA;AAC1E,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAI,yBAAA,CAA0B,IAAA,CAAK,WAAW,CAAA;AAC1E,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA,EAES,SAAA,CAAU,MAAA,GAAqC,EAAC,EAAS;AAChE,IAAA,MAAM,SAAA,GAAY,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AACjD,IAAA,KAAA,CAAM,UAAU,SAAS,CAAA;AACzB,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,oBAAA,CAAqB,UAAU,SAAS,CAAA;AAC7C,IAAA,IAAA,CAAK,oBAAA,CAAqB,UAAU,SAAS,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAA,GAAO;AAAA,EAAC;AAAA,EAEC,oBAAA,GAAuB;AAC9B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,oBAAA,CAAqB,oBAAA,IAAwB,GAAG,IAAA,CAAK,oBAAA,CAAqB,oBAAA,EAAsB,CAAA;AAAA,EAClH;AAAA,EAES,kBAAkB,cAAA,EAAsC;AAC/D,IAAA,KAAA,CAAM,kBAAkB,cAAc,CAAA;AACtC,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,oBAAA,CAAqB,kBAAkB,cAAc,CAAA;AAC1D,IAAA,IAAA,CAAK,oBAAA,CAAqB,kBAAkB,cAAc,CAAA;AAAA,EAC5D;AAAA,EAES,MAAA,GAAe;AACtB,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,qBAAqB,MAAA,EAAO;AACjC,IAAA,IAAA,CAAK,qBAAqB,MAAA,EAAO;AAAA,EACnC;AAAA,EAES,OAAA,GAAgB;AACvB,IAAA,KAAA,CAAM,OAAA,EAAQ;AACd,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,qBAAqB,OAAA,EAAQ;AAClC,IAAA,IAAA,CAAK,qBAAqB,OAAA,EAAQ;AAAA,EACpC;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"redis-instrumentation.js","sources":["../../../../../../src/integrations/tracing/redis/vendored/redis-instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n */\n/* eslint-disable -- vendored @opentelemetry/instrumentation-redis */\n\nimport { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { DiagLogger, Span, TracerProvider } from '@opentelemetry/api';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n isWrapped,\n safeExecuteInTheMiddle,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport {\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\n\nimport { defaultDbStatementSerializer } from './redis-common';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_NAME_VALUE_REDIS,\n DB_SYSTEM_VALUE_REDIS,\n} from './semconv';\nimport type { RedisInstrumentationConfig } from './types';\n\nconst PACKAGE_NAME = '@opentelemetry/instrumentation-redis';\nconst PACKAGE_VERSION = '0.62.0';\n\n// ---- Internal types ----\n\ninterface RedisPluginClientTypes {\n connection_options?: {\n port?: string | number;\n host?: string;\n };\n address?: string;\n}\n\ninterface RedisCommand {\n command: string;\n args: string[];\n buffer_args: boolean;\n callback: (err: Error | null, reply: unknown) => void;\n call_on_write: boolean;\n}\n\ninterface MultiErrorReply extends Error {\n replies: unknown[];\n errorIndexes: Array<number>;\n}\n\ninterface OpenSpanInfo {\n span: Span;\n commandName: string;\n commandArgs: Array<string | Buffer>;\n}\n\nconst OTEL_OPEN_SPANS = Symbol('opentelemetry.instrumentation.redis.open_spans');\nconst MULTI_COMMAND_OPTIONS = Symbol('opentelemetry.instrumentation.redis.multi_command_options');\n\n// ---- v4-v5 utils ----\n\nfunction removeCredentialsFromDBConnectionStringAttribute(\n diagLogger: DiagLogger,\n url: string | undefined,\n): string | undefined {\n if (typeof url !== 'string' || !url) {\n return undefined;\n }\n try {\n const u = new URL(url);\n u.searchParams.delete('user_pwd');\n u.username = '';\n u.password = '';\n return u.href;\n } catch (err) {\n diagLogger.error('failed to sanitize redis connection url', err);\n }\n return undefined;\n}\n\nfunction getClientAttributes(\n diagLogger: DiagLogger,\n options: any,\n semconvStability: SemconvStability,\n): Record<string, any> {\n const attributes: Record<string, any> = {};\n if (semconvStability & SemconvStability.OLD) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_NET_PEER_NAME]: options?.socket?.host,\n [ATTR_NET_PEER_PORT]: options?.socket?.port,\n [ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(diagLogger, options?.url),\n });\n }\n if (semconvStability & SemconvStability.STABLE) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n [ATTR_SERVER_ADDRESS]: options?.socket?.host,\n [ATTR_SERVER_PORT]: options?.socket?.port,\n });\n }\n return attributes;\n}\n\n// ---- v2-v3 utils ----\n\nfunction endSpanV2(span: Span, err: Error | null | undefined): void {\n if (err) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n }\n span.end();\n}\n\nfunction getTracedCreateClient(original: Function): Function {\n return function createClientTrace(this: any) {\n const client = original.apply(this, arguments);\n return context.bind(context.active(), client);\n };\n}\n\nfunction getTracedCreateStreamTrace(original: Function): Function {\n return function create_stream_trace(this: any) {\n if (!Object.prototype.hasOwnProperty.call(this, 'stream')) {\n Object.defineProperty(this, 'stream', {\n get() {\n return this._patched_redis_stream;\n },\n set(val: any) {\n context.bind(context.active(), val);\n this._patched_redis_stream = val;\n },\n });\n }\n return original.apply(this, arguments);\n };\n}\n\n// ---- RedisInstrumentationV2_V3 ----\n\nclass RedisInstrumentationV2_V3 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n _semconvStability: SemconvStability;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n super.setConfig(config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n init() {\n return [\n new InstrumentationNodeModuleDefinition(\n 'redis',\n ['>=2.6.0 <4'],\n (moduleExports: any) => {\n if (isWrapped(moduleExports.RedisClient.prototype['internal_send_command'])) {\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n }\n this._wrap(moduleExports.RedisClient.prototype, 'internal_send_command', this._getPatchInternalSendCommand());\n if (isWrapped(moduleExports.RedisClient.prototype['create_stream'])) {\n this._unwrap(moduleExports.RedisClient.prototype, 'create_stream');\n }\n this._wrap(moduleExports.RedisClient.prototype, 'create_stream', this._getPatchCreateStream());\n if (isWrapped(moduleExports.createClient)) {\n this._unwrap(moduleExports, 'createClient');\n }\n this._wrap(moduleExports, 'createClient', this._getPatchCreateClient());\n return moduleExports;\n },\n (moduleExports: any) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n this._unwrap(moduleExports.RedisClient.prototype, 'create_stream');\n this._unwrap(moduleExports, 'createClient');\n },\n ),\n ];\n }\n\n private _getPatchInternalSendCommand() {\n const instrumentation = this;\n return function internal_send_command(original: Function) {\n return function internal_send_command_trace(this: RedisPluginClientTypes, cmd: RedisCommand) {\n if (arguments.length !== 1 || typeof cmd !== 'object') {\n return original.apply(this, arguments);\n }\n const config = instrumentation.getConfig();\n const hasNoParentSpan = trace.getSpan(context.active()) === undefined;\n if (config.requireParentSpan === true && hasNoParentSpan) {\n return original.apply(this, arguments);\n }\n const dbStatementSerializer = config?.dbStatementSerializer || defaultDbStatementSerializer;\n const attributes: Record<string, any> = {};\n if (instrumentation._semconvStability & SemconvStability.OLD) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n [ATTR_DB_STATEMENT]: dbStatementSerializer(cmd.command, cmd.args),\n });\n }\n if (instrumentation._semconvStability & SemconvStability.STABLE) {\n Object.assign(attributes, {\n [ATTR_DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n [ATTR_DB_OPERATION_NAME]: cmd.command,\n [ATTR_DB_QUERY_TEXT]: dbStatementSerializer(cmd.command, cmd.args),\n });\n }\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.db.otel.redis';\n const span = instrumentation.tracer.startSpan(`${RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n if (this.connection_options) {\n const connectionAttributes: Record<string, any> = {};\n if (instrumentation._semconvStability & SemconvStability.OLD) {\n Object.assign(connectionAttributes, {\n [ATTR_NET_PEER_NAME]: this.connection_options.host,\n [ATTR_NET_PEER_PORT]: this.connection_options.port,\n });\n }\n if (instrumentation._semconvStability & SemconvStability.STABLE) {\n Object.assign(connectionAttributes, {\n [ATTR_SERVER_ADDRESS]: this.connection_options.host,\n [ATTR_SERVER_PORT]: this.connection_options.port,\n });\n }\n span.setAttributes(connectionAttributes);\n }\n if (this.address && instrumentation._semconvStability & SemconvStability.OLD) {\n span.setAttribute(ATTR_DB_CONNECTION_STRING, `redis://${this.address}`);\n }\n const originalCallback = arguments[0].callback;\n if (originalCallback) {\n const originalContext = context.active();\n arguments[0].callback = function callback(this: any, err: Error | null, reply: unknown) {\n if (config?.responseHook) {\n const responseHook = config.responseHook;\n safeExecuteInTheMiddle(\n () => {\n responseHook(span, cmd.command, cmd.args, reply);\n },\n (e: Error | undefined) => {\n if (e) {\n instrumentation._diag.error('Error executing responseHook', e);\n }\n },\n true,\n );\n }\n endSpanV2(span, err);\n return context.with(originalContext, originalCallback, this, ...arguments);\n };\n }\n try {\n return original.apply(this, arguments);\n } catch (rethrow) {\n endSpanV2(span, rethrow as Error);\n throw rethrow;\n }\n };\n };\n }\n\n private _getPatchCreateClient() {\n return function createClient(original: Function) {\n return getTracedCreateClient(original);\n };\n }\n\n private _getPatchCreateStream() {\n return function createReadStream(original: Function) {\n return getTracedCreateStreamTrace(original);\n };\n }\n}\n\n// ---- RedisInstrumentationV4_V5 ----\n\nclass RedisInstrumentationV4_V5 extends InstrumentationBase<RedisInstrumentationConfig> {\n static COMPONENT = 'redis';\n _semconvStability: SemconvStability;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n super.setConfig(config);\n this._semconvStability = config.semconvStability\n ? config.semconvStability\n : semconvStabilityFromStr('database', process.env['OTEL_SEMCONV_STABILITY_OPT_IN']);\n }\n\n init() {\n return [\n this._getInstrumentationNodeModuleDefinition('@redis/client'),\n this._getInstrumentationNodeModuleDefinition('@node-redis/client'),\n ];\n }\n\n private _getInstrumentationNodeModuleDefinition(basePackageName: string) {\n const commanderModuleFile = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/commander.js`,\n ['^1.0.0'],\n (moduleExports: any, moduleVersion?: string) => {\n const transformCommandArguments = moduleExports.transformCommandArguments;\n if (!transformCommandArguments) {\n this._diag.error('internal instrumentation error, missing transformCommandArguments function');\n return moduleExports;\n }\n const functionToPatch = moduleVersion?.startsWith('1.0.') ? 'extendWithCommands' : 'attachCommands';\n if (isWrapped(moduleExports?.[functionToPatch])) {\n this._unwrap(moduleExports, functionToPatch);\n }\n this._wrap(moduleExports, functionToPatch, this._getPatchExtendWithCommands(transformCommandArguments));\n return moduleExports;\n },\n (moduleExports: any) => {\n if (isWrapped(moduleExports?.extendWithCommands)) {\n this._unwrap(moduleExports, 'extendWithCommands');\n }\n if (isWrapped(moduleExports?.attachCommands)) {\n this._unwrap(moduleExports, 'attachCommands');\n }\n },\n );\n\n const multiCommanderModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/multi-command.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n this._wrap(redisClientMultiCommandPrototype, 'exec', this._getPatchMultiCommandsExec(false));\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n this._wrap(redisClientMultiCommandPrototype, 'execAsPipeline', this._getPatchMultiCommandsExec(true));\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n this._wrap(redisClientMultiCommandPrototype, 'addCommand', this._getPatchMultiCommandsAddCommand());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n this._unwrap(redisClientMultiCommandPrototype, 'exec');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n }\n if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n }\n },\n );\n\n const clientIndexModule = new InstrumentationNodeModuleFile(\n `${basePackageName}/dist/lib/client/index.js`,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (redisClientPrototype?.multi) {\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n this._wrap(redisClientPrototype, 'multi', this._getPatchRedisClientMulti());\n }\n if (redisClientPrototype?.MULTI) {\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n this._wrap(redisClientPrototype, 'MULTI', this._getPatchRedisClientMulti());\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n this._wrap(redisClientPrototype, 'sendCommand', this._getPatchRedisClientSendCommand());\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n this._wrap(redisClientPrototype, 'connect', this._getPatchedClientConnect());\n return moduleExports;\n },\n (moduleExports: any) => {\n const redisClientPrototype = moduleExports?.default?.prototype;\n if (isWrapped(redisClientPrototype?.multi)) {\n this._unwrap(redisClientPrototype, 'multi');\n }\n if (isWrapped(redisClientPrototype?.MULTI)) {\n this._unwrap(redisClientPrototype, 'MULTI');\n }\n if (isWrapped(redisClientPrototype?.sendCommand)) {\n this._unwrap(redisClientPrototype, 'sendCommand');\n }\n if (isWrapped(redisClientPrototype?.connect)) {\n this._unwrap(redisClientPrototype, 'connect');\n }\n },\n );\n\n return new InstrumentationNodeModuleDefinition(\n basePackageName,\n ['^1.0.0', '>=5.0.0 <5.12.0'],\n (moduleExports: any) => moduleExports,\n () => {},\n [commanderModuleFile, multiCommanderModule, clientIndexModule],\n );\n }\n\n private _getPatchExtendWithCommands(transformCommandArguments: Function) {\n const plugin = this;\n return function extendWithCommandsPatchWrapper(original: Function) {\n return function extendWithCommandsPatch(this: any, config: any) {\n if (config?.BaseClass?.name !== 'RedisClient') {\n return original.apply(this, arguments);\n }\n const origExecutor = config.executor;\n config.executor = function (this: any, command: any, args: any) {\n const redisCommandArguments = transformCommandArguments(command, args).args;\n return plugin._traceClientCommand(origExecutor, this, arguments, redisCommandArguments);\n };\n return original.apply(this, arguments);\n };\n };\n }\n\n private _getPatchMultiCommandsExec(isPipeline: boolean) {\n const plugin = this;\n return function execPatchWrapper(original: Function) {\n return function execPatch(this: any) {\n const execRes = original.apply(this, arguments);\n if (typeof execRes?.then !== 'function') {\n plugin._diag.error('non-promise result when patching exec/execAsPipeline');\n return execRes;\n }\n return execRes\n .then((redisRes: unknown[]) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n plugin._endSpansWithRedisReplies(openSpans, redisRes, isPipeline);\n return redisRes;\n })\n .catch((err: any) => {\n const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n if (!openSpans) {\n plugin._diag.error('cannot find open spans to end for multi/pipeline');\n } else {\n const replies =\n err.constructor.name === 'MultiErrorReply'\n ? (err as MultiErrorReply).replies\n : new Array(openSpans.length).fill(err);\n plugin._endSpansWithRedisReplies(openSpans, replies, isPipeline);\n }\n return Promise.reject(err);\n });\n };\n };\n }\n\n private _getPatchMultiCommandsAddCommand() {\n const plugin = this;\n return function addCommandWrapper(original: Function) {\n return function addCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchRedisClientMulti() {\n return function multiPatchWrapper(original: Function) {\n return function multiPatch(this: any) {\n const multiRes: any = original.apply(this, arguments);\n multiRes[MULTI_COMMAND_OPTIONS] = this.options;\n return multiRes;\n };\n };\n }\n\n private _getPatchRedisClientSendCommand() {\n const plugin = this;\n return function sendCommandWrapper(original: Function) {\n return function sendCommandPatch(this: any, args: any) {\n return plugin._traceClientCommand(original, this, arguments, args);\n };\n };\n }\n\n private _getPatchedClientConnect() {\n const plugin = this;\n return function connectWrapper(original: Function) {\n return function patchedConnect(this: any) {\n const options = this.options;\n const attributes = getClientAttributes(plugin._diag, options, plugin._semconvStability);\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.db.otel.redis';\n const span = plugin.tracer.startSpan(`${RedisInstrumentationV4_V5.COMPONENT}-connect`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n const res = context.with(trace.setSpan(context.active(), span), () => {\n return original.apply(this);\n });\n return res\n .then((result: any) => {\n span.end();\n return result;\n })\n .catch((error: Error) => {\n span.recordException(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n span.end();\n return Promise.reject(error);\n });\n };\n };\n }\n\n _traceClientCommand(\n origFunction: Function,\n origThis: any,\n origArguments: IArguments,\n redisCommandArguments: Array<string | Buffer>,\n ): any {\n const hasNoParentSpan = trace.getSpan(context.active()) === undefined;\n if (hasNoParentSpan && this.getConfig().requireParentSpan) {\n return origFunction.apply(origThis, origArguments);\n }\n const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS];\n const commandName = redisCommandArguments[0] as string;\n const commandArgs = redisCommandArguments.slice(1);\n const dbStatementSerializer = this.getConfig().dbStatementSerializer || defaultDbStatementSerializer;\n const attributes = getClientAttributes(this._diag, clientOptions, this._semconvStability);\n if (this._semconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_OPERATION_NAME] = commandName;\n }\n try {\n const dbStatement = dbStatementSerializer(commandName, commandArgs);\n if (dbStatement != null) {\n if (this._semconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = dbStatement;\n }\n if (this._semconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = dbStatement;\n }\n }\n } catch (e) {\n this._diag.error('dbStatementSerializer throw an exception', e, { commandName });\n }\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = 'auto.db.otel.redis';\n const span = this.tracer.startSpan(`${RedisInstrumentationV4_V5.COMPONENT}-${commandName}`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n const res = context.with(trace.setSpan(context.active(), span), () => {\n return origFunction.apply(origThis, origArguments);\n });\n if (typeof res?.then === 'function') {\n res.then(\n (redisRes: unknown) => {\n this._endSpanWithResponse(span, commandName, commandArgs, redisRes, undefined);\n },\n (err: Error) => {\n this._endSpanWithResponse(span, commandName, commandArgs, null, err);\n },\n );\n } else {\n const redisClientMultiCommand: any = res;\n redisClientMultiCommand[OTEL_OPEN_SPANS] = redisClientMultiCommand[OTEL_OPEN_SPANS] || [];\n redisClientMultiCommand[OTEL_OPEN_SPANS].push({\n span,\n commandName,\n commandArgs,\n });\n }\n return res;\n }\n\n _endSpansWithRedisReplies(openSpans: OpenSpanInfo[] | undefined, replies: unknown[], isPipeline = false): void {\n if (!openSpans) {\n return this._diag.error('cannot find open spans to end for redis multi/pipeline');\n }\n if (replies.length !== openSpans.length) {\n return this._diag.error('number of multi command spans does not match response from redis');\n }\n const allCommands = openSpans.map(s => s.commandName);\n const allSameCommand = allCommands.every(cmd => cmd === allCommands[0]);\n const operationName = allSameCommand\n ? (isPipeline ? 'PIPELINE ' : 'MULTI ') + allCommands[0]\n : isPipeline\n ? 'PIPELINE'\n : 'MULTI';\n for (let i = 0; i < openSpans.length; i++) {\n const { span, commandArgs } = openSpans[i]!;\n const currCommandRes = replies[i];\n const [res, err] = currCommandRes instanceof Error ? [null, currCommandRes] : [currCommandRes, undefined];\n if (this._semconvStability & SemconvStability.STABLE) {\n span.setAttribute(ATTR_DB_OPERATION_NAME, operationName);\n }\n this._endSpanWithResponse(span, allCommands[i]!, commandArgs, res, err);\n }\n }\n\n _endSpanWithResponse(\n span: Span,\n commandName: string,\n commandArgs: Array<string | Buffer>,\n response: unknown,\n error: Error | null | undefined,\n ): void {\n const { responseHook } = this.getConfig();\n if (!error && responseHook) {\n try {\n responseHook(span, commandName, commandArgs, response);\n } catch (err) {\n this._diag.error('responseHook throw an exception', err);\n }\n }\n if (error) {\n span.recordException(error);\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message });\n }\n span.end();\n }\n}\n\n// ---- RedisInstrumentation (wrapper) ----\n\nconst DEFAULT_CONFIG: RedisInstrumentationConfig = {\n requireParentSpan: false,\n};\n\nexport class RedisInstrumentation extends InstrumentationBase<RedisInstrumentationConfig> {\n private instrumentationV2_V3: RedisInstrumentationV2_V3;\n private instrumentationV4_V5: RedisInstrumentationV4_V5;\n private initialized = false;\n\n constructor(config: RedisInstrumentationConfig = {}) {\n const resolvedConfig = { ...DEFAULT_CONFIG, ...config };\n super(PACKAGE_NAME, PACKAGE_VERSION, resolvedConfig);\n this.instrumentationV2_V3 = new RedisInstrumentationV2_V3(this.getConfig());\n this.instrumentationV4_V5 = new RedisInstrumentationV4_V5(this.getConfig());\n this.initialized = true;\n }\n\n override setConfig(config: RedisInstrumentationConfig = {}): void {\n const newConfig = { ...DEFAULT_CONFIG, ...config };\n super.setConfig(newConfig);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setConfig(newConfig);\n this.instrumentationV4_V5.setConfig(newConfig);\n }\n\n init() {}\n\n override getModuleDefinitions() {\n return [...this.instrumentationV2_V3.getModuleDefinitions(), ...this.instrumentationV4_V5.getModuleDefinitions()];\n }\n\n override setTracerProvider(tracerProvider: TracerProvider): void {\n super.setTracerProvider(tracerProvider);\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.setTracerProvider(tracerProvider);\n this.instrumentationV4_V5.setTracerProvider(tracerProvider);\n }\n\n override enable(): void {\n super.enable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.enable();\n this.instrumentationV4_V5.enable();\n }\n\n override disable(): void {\n super.disable();\n if (!this.initialized) {\n return;\n }\n this.instrumentationV2_V3.disable();\n this.instrumentationV4_V5.disable();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -74,9 +74,9 @@ function cleanupToolCallSpanContexts(content) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
function determineRecordingSettings(integrationRecordingOptions, methodTelemetryOptions, telemetryExplicitlyEnabled,
|
|
78
|
-
const recordInputs = integrationRecordingOptions?.recordInputs !== void 0 ? integrationRecordingOptions.recordInputs : methodTelemetryOptions.recordInputs !== void 0 ? methodTelemetryOptions.recordInputs : telemetryExplicitlyEnabled === true ? true :
|
|
79
|
-
const recordOutputs = integrationRecordingOptions?.recordOutputs !== void 0 ? integrationRecordingOptions.recordOutputs : methodTelemetryOptions.recordOutputs !== void 0 ? methodTelemetryOptions.recordOutputs : telemetryExplicitlyEnabled === true ? true :
|
|
77
|
+
function determineRecordingSettings(integrationRecordingOptions, methodTelemetryOptions, telemetryExplicitlyEnabled, defaultInputsEnabled, defaultOutputsEnabled) {
|
|
78
|
+
const recordInputs = integrationRecordingOptions?.recordInputs !== void 0 ? integrationRecordingOptions.recordInputs : methodTelemetryOptions.recordInputs !== void 0 ? methodTelemetryOptions.recordInputs : telemetryExplicitlyEnabled === true ? true : defaultInputsEnabled;
|
|
79
|
+
const recordOutputs = integrationRecordingOptions?.recordOutputs !== void 0 ? integrationRecordingOptions.recordOutputs : methodTelemetryOptions.recordOutputs !== void 0 ? methodTelemetryOptions.recordOutputs : telemetryExplicitlyEnabled === true ? true : defaultOutputsEnabled;
|
|
80
80
|
return { recordInputs, recordOutputs };
|
|
81
81
|
}
|
|
82
82
|
class SentryVercelAiInstrumentation extends InstrumentationBase {
|
|
@@ -118,12 +118,13 @@ class SentryVercelAiInstrumentation extends InstrumentationBase {
|
|
|
118
118
|
const client = getClient();
|
|
119
119
|
const integration = client?.getIntegrationByName(INTEGRATION_NAME);
|
|
120
120
|
const integrationOptions = integration?.options;
|
|
121
|
-
const
|
|
121
|
+
const genAI = integration ? client?.getDataCollectionOptions().genAI : void 0;
|
|
122
122
|
const { recordInputs, recordOutputs } = determineRecordingSettings(
|
|
123
123
|
integrationOptions,
|
|
124
124
|
existingExperimentalTelemetry,
|
|
125
125
|
isEnabled,
|
|
126
|
-
|
|
126
|
+
Boolean(genAI?.inputs),
|
|
127
|
+
Boolean(genAI?.outputs)
|
|
127
128
|
);
|
|
128
129
|
args[0].experimental_telemetry = {
|
|
129
130
|
...existingExperimentalTelemetry,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/vercelai/instrumentation.ts"],"sourcesContent":["import type { InstrumentationConfig, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport {\n _INTERNAL_cleanupToolCallSpanContext,\n _INTERNAL_getSpanContextForToolCallId,\n addNonEnumerableProperty,\n captureException,\n getActiveSpan,\n getClient,\n handleCallbackErrors,\n SDK_VERSION,\n withScope,\n} from '@sentry/core';\nimport { INTEGRATION_NAME } from './constants';\nimport type { TelemetrySettings, VercelAiIntegration } from './types';\n\nconst SUPPORTED_VERSIONS = ['>=3.0.0 <7'];\n\n// List of patched methods\n// From: https://sdk.vercel.ai/docs/ai-sdk-core/telemetry#collected-data\nconst INSTRUMENTED_METHODS = [\n 'generateText',\n 'streamText',\n 'generateObject',\n 'streamObject',\n 'embed',\n 'embedMany',\n 'rerank',\n] as const;\n\ninterface MethodFirstArg extends Record<string, unknown> {\n experimental_telemetry?: TelemetrySettings;\n}\n\ntype MethodArgs = [MethodFirstArg, ...unknown[]];\n\ntype PatchedModuleExports = Record<(typeof INSTRUMENTED_METHODS)[number], (...args: MethodArgs) => unknown> &\n Record<string, unknown>;\n\ninterface RecordingOptions {\n recordInputs?: boolean;\n recordOutputs?: boolean;\n}\n\ninterface ToolError {\n type: 'tool-error' | 'tool-result' | 'tool-call';\n toolCallId: string;\n toolName: string;\n input?: {\n [key: string]: unknown;\n };\n error: Error;\n dynamic?: boolean;\n}\n\nfunction isToolError(obj: unknown): obj is ToolError {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const candidate = obj as Record<string, unknown>;\n return (\n 'type' in candidate &&\n 'error' in candidate &&\n 'toolName' in candidate &&\n 'toolCallId' in candidate &&\n candidate.type === 'tool-error' &&\n candidate.error instanceof Error\n );\n}\n\n/**\n * Process tool call results: capture tool errors and clean up span context mappings.\n *\n * Error checking runs first (needs span context for linking), then cleanup removes all entries.\n * Tool errors are not rejected in Vercel AI V5 — they appear as metadata in the result content.\n */\nexport function processToolCallResults(result: unknown): void {\n if (typeof result !== 'object' || result === null || !('content' in result)) {\n return;\n }\n\n const resultObj = result as { content: Array<object> };\n if (!Array.isArray(resultObj.content)) {\n return;\n }\n\n captureToolErrors(resultObj.content);\n cleanupToolCallSpanContexts(resultObj.content);\n}\n\nfunction captureToolErrors(content: Array<object>): void {\n for (const item of content) {\n if (!isToolError(item)) {\n continue;\n }\n\n // Try to get the span context associated with this tool call ID\n const spanContext = _INTERNAL_getSpanContextForToolCallId(item.toolCallId);\n\n if (spanContext) {\n // We have the span context, so link the error using span and trace IDs\n withScope(scope => {\n scope.setContext('trace', {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n });\n\n scope.setTag('vercel.ai.tool.name', item.toolName);\n scope.setTag('vercel.ai.tool.callId', item.toolCallId);\n scope.setLevel('error');\n\n captureException(item.error, {\n mechanism: {\n type: 'auto.vercelai.otel',\n handled: false,\n },\n });\n });\n } else {\n // Fallback: capture without span linking\n withScope(scope => {\n scope.setTag('vercel.ai.tool.name', item.toolName);\n scope.setTag('vercel.ai.tool.callId', item.toolCallId);\n scope.setLevel('error');\n\n captureException(item.error, {\n mechanism: {\n type: 'auto.vercelai.otel',\n handled: false,\n },\n });\n });\n }\n }\n}\n\n/**\n * Remove span context entries for all completed tool calls in the content array.\n */\nexport function cleanupToolCallSpanContexts(content: Array<object>): void {\n for (const item of content) {\n if (\n typeof item === 'object' &&\n item !== null &&\n 'toolCallId' in item &&\n typeof (item as Record<string, unknown>).toolCallId === 'string'\n ) {\n _INTERNAL_cleanupToolCallSpanContext((item as Record<string, unknown>).toolCallId as string);\n }\n }\n}\n\n/**\n * Determines whether to record inputs and outputs for Vercel AI telemetry based on the configuration hierarchy.\n *\n * The order of precedence is:\n * 1. The vercel ai integration options\n * 2. The experimental_telemetry options in the vercel ai method calls\n * 3. When telemetry is explicitly enabled (isEnabled: true), default to recording\n * 4. Otherwise, use the sendDefaultPii option from client options\n */\nexport function determineRecordingSettings(\n integrationRecordingOptions: RecordingOptions | undefined,\n methodTelemetryOptions: RecordingOptions,\n telemetryExplicitlyEnabled: boolean | undefined,\n defaultRecordingEnabled: boolean,\n): { recordInputs: boolean; recordOutputs: boolean } {\n const recordInputs =\n integrationRecordingOptions?.recordInputs !== undefined\n ? integrationRecordingOptions.recordInputs\n : methodTelemetryOptions.recordInputs !== undefined\n ? methodTelemetryOptions.recordInputs\n : telemetryExplicitlyEnabled === true\n ? true // When telemetry is explicitly enabled, default to recording inputs\n : defaultRecordingEnabled;\n\n const recordOutputs =\n integrationRecordingOptions?.recordOutputs !== undefined\n ? integrationRecordingOptions.recordOutputs\n : methodTelemetryOptions.recordOutputs !== undefined\n ? methodTelemetryOptions.recordOutputs\n : telemetryExplicitlyEnabled === true\n ? true // When telemetry is explicitly enabled, default to recording inputs\n : defaultRecordingEnabled;\n\n return { recordInputs, recordOutputs };\n}\n\n/**\n * This detects is added by the Sentry Vercel AI Integration to detect if the integration should\n * be enabled.\n *\n * It also patches the `ai` module to enable Vercel AI telemetry automatically for all methods.\n */\nexport class SentryVercelAiInstrumentation extends InstrumentationBase {\n private _isPatched = false;\n private _callbacks: (() => void)[] = [];\n\n public constructor(config: InstrumentationConfig = {}) {\n super('@sentry/instrumentation-vercel-ai', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition('ai', SUPPORTED_VERSIONS, this._patch.bind(this));\n return module;\n }\n\n /**\n * Call the provided callback when the module is patched.\n * If it has already been patched, the callback will be called immediately.\n */\n public callWhenPatched(callback: () => void): void {\n if (this._isPatched) {\n callback();\n } else {\n this._callbacks.push(callback);\n }\n }\n\n /**\n * Patches module exports to enable Vercel AI telemetry.\n */\n private _patch(moduleExports: PatchedModuleExports): unknown {\n this._isPatched = true;\n\n this._callbacks.forEach(callback => callback());\n this._callbacks = [];\n\n const generatePatch = <T extends (...args: MethodArgs) => unknown>(originalMethod: T): T => {\n return new Proxy(originalMethod, {\n apply: (target, thisArg, args: MethodArgs) => {\n const existingExperimentalTelemetry = args[0].experimental_telemetry || {};\n const isEnabled = existingExperimentalTelemetry.isEnabled;\n\n const client = getClient();\n const integration = client?.getIntegrationByName<VercelAiIntegration>(INTEGRATION_NAME);\n const integrationOptions = integration?.options;\n const shouldRecordInputsAndOutputs = integration ? Boolean(client?.getOptions().sendDefaultPii) : false;\n\n const { recordInputs, recordOutputs } = determineRecordingSettings(\n integrationOptions,\n existingExperimentalTelemetry,\n isEnabled,\n shouldRecordInputsAndOutputs,\n );\n\n args[0].experimental_telemetry = {\n ...existingExperimentalTelemetry,\n isEnabled: isEnabled !== undefined ? isEnabled : true,\n recordInputs,\n recordOutputs,\n };\n\n return handleCallbackErrors(\n () => Reflect.apply(target, thisArg, args),\n error => {\n // This error bubbles up to unhandledrejection handler (if not handled before),\n // where we do not know the active span anymore\n // So to circumvent this, we set the active span on the error object\n // which is picked up by the unhandledrejection handler\n if (error && typeof error === 'object') {\n addNonEnumerableProperty(error, '_sentry_active_span', getActiveSpan());\n }\n },\n () => {},\n result => {\n processToolCallResults(result);\n },\n );\n },\n });\n };\n\n // Is this an ESM module?\n // https://tc39.es/ecma262/#sec-module-namespace-objects\n if (Object.prototype.toString.call(moduleExports) === '[object Module]') {\n // In ESM we take the usual route and just replace the exports we want to instrument\n for (const method of INSTRUMENTED_METHODS) {\n // Skip methods that don't exist in this version of the AI SDK (e.g., rerank was added in v6)\n if (moduleExports[method] != null) {\n moduleExports[method] = generatePatch(moduleExports[method]);\n }\n }\n\n return moduleExports;\n } else {\n // In CJS we can't replace the exports in the original module because they\n // don't have setters, so we create a new object with the same properties\n const patchedModuleExports = INSTRUMENTED_METHODS.reduce((acc, curr) => {\n // Skip methods that don't exist in this version of the AI SDK (e.g., rerank was added in v6)\n if (moduleExports[curr] != null) {\n acc[curr] = generatePatch(moduleExports[curr]);\n }\n return acc;\n }, {} as PatchedModuleExports);\n\n return { ...moduleExports, ...patchedModuleExports };\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/vercelai/instrumentation.ts"],"sourcesContent":["import type { InstrumentationConfig, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport {\n _INTERNAL_cleanupToolCallSpanContext,\n _INTERNAL_getSpanContextForToolCallId,\n addNonEnumerableProperty,\n captureException,\n getActiveSpan,\n getClient,\n handleCallbackErrors,\n SDK_VERSION,\n withScope,\n} from '@sentry/core';\nimport { INTEGRATION_NAME } from './constants';\nimport type { TelemetrySettings, VercelAiIntegration } from './types';\n\nconst SUPPORTED_VERSIONS = ['>=3.0.0 <7'];\n\n// List of patched methods\n// From: https://sdk.vercel.ai/docs/ai-sdk-core/telemetry#collected-data\nconst INSTRUMENTED_METHODS = [\n 'generateText',\n 'streamText',\n 'generateObject',\n 'streamObject',\n 'embed',\n 'embedMany',\n 'rerank',\n] as const;\n\ninterface MethodFirstArg extends Record<string, unknown> {\n experimental_telemetry?: TelemetrySettings;\n}\n\ntype MethodArgs = [MethodFirstArg, ...unknown[]];\n\ntype PatchedModuleExports = Record<(typeof INSTRUMENTED_METHODS)[number], (...args: MethodArgs) => unknown> &\n Record<string, unknown>;\n\ninterface RecordingOptions {\n recordInputs?: boolean;\n recordOutputs?: boolean;\n}\n\ninterface ToolError {\n type: 'tool-error' | 'tool-result' | 'tool-call';\n toolCallId: string;\n toolName: string;\n input?: {\n [key: string]: unknown;\n };\n error: Error;\n dynamic?: boolean;\n}\n\nfunction isToolError(obj: unknown): obj is ToolError {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const candidate = obj as Record<string, unknown>;\n return (\n 'type' in candidate &&\n 'error' in candidate &&\n 'toolName' in candidate &&\n 'toolCallId' in candidate &&\n candidate.type === 'tool-error' &&\n candidate.error instanceof Error\n );\n}\n\n/**\n * Process tool call results: capture tool errors and clean up span context mappings.\n *\n * Error checking runs first (needs span context for linking), then cleanup removes all entries.\n * Tool errors are not rejected in Vercel AI V5 — they appear as metadata in the result content.\n */\nexport function processToolCallResults(result: unknown): void {\n if (typeof result !== 'object' || result === null || !('content' in result)) {\n return;\n }\n\n const resultObj = result as { content: Array<object> };\n if (!Array.isArray(resultObj.content)) {\n return;\n }\n\n captureToolErrors(resultObj.content);\n cleanupToolCallSpanContexts(resultObj.content);\n}\n\nfunction captureToolErrors(content: Array<object>): void {\n for (const item of content) {\n if (!isToolError(item)) {\n continue;\n }\n\n // Try to get the span context associated with this tool call ID\n const spanContext = _INTERNAL_getSpanContextForToolCallId(item.toolCallId);\n\n if (spanContext) {\n // We have the span context, so link the error using span and trace IDs\n withScope(scope => {\n scope.setContext('trace', {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n });\n\n scope.setTag('vercel.ai.tool.name', item.toolName);\n scope.setTag('vercel.ai.tool.callId', item.toolCallId);\n scope.setLevel('error');\n\n captureException(item.error, {\n mechanism: {\n type: 'auto.vercelai.otel',\n handled: false,\n },\n });\n });\n } else {\n // Fallback: capture without span linking\n withScope(scope => {\n scope.setTag('vercel.ai.tool.name', item.toolName);\n scope.setTag('vercel.ai.tool.callId', item.toolCallId);\n scope.setLevel('error');\n\n captureException(item.error, {\n mechanism: {\n type: 'auto.vercelai.otel',\n handled: false,\n },\n });\n });\n }\n }\n}\n\n/**\n * Remove span context entries for all completed tool calls in the content array.\n */\nexport function cleanupToolCallSpanContexts(content: Array<object>): void {\n for (const item of content) {\n if (\n typeof item === 'object' &&\n item !== null &&\n 'toolCallId' in item &&\n typeof (item as Record<string, unknown>).toolCallId === 'string'\n ) {\n _INTERNAL_cleanupToolCallSpanContext((item as Record<string, unknown>).toolCallId as string);\n }\n }\n}\n\n/**\n * Determines whether to record inputs and outputs for Vercel AI telemetry based on the configuration hierarchy.\n *\n * The order of precedence is:\n * 1. The vercel ai integration options\n * 2. The experimental_telemetry options in the vercel ai method calls\n * 3. When telemetry is explicitly enabled (isEnabled: true), default to recording\n * 4. Otherwise, use the dataCollection.genAI settings from client options\n */\nexport function determineRecordingSettings(\n integrationRecordingOptions: RecordingOptions | undefined,\n methodTelemetryOptions: RecordingOptions,\n telemetryExplicitlyEnabled: boolean | undefined,\n defaultInputsEnabled: boolean,\n defaultOutputsEnabled: boolean,\n): { recordInputs: boolean; recordOutputs: boolean } {\n const recordInputs =\n integrationRecordingOptions?.recordInputs !== undefined\n ? integrationRecordingOptions.recordInputs\n : methodTelemetryOptions.recordInputs !== undefined\n ? methodTelemetryOptions.recordInputs\n : telemetryExplicitlyEnabled === true\n ? true // When telemetry is explicitly enabled, default to recording inputs\n : defaultInputsEnabled;\n\n const recordOutputs =\n integrationRecordingOptions?.recordOutputs !== undefined\n ? integrationRecordingOptions.recordOutputs\n : methodTelemetryOptions.recordOutputs !== undefined\n ? methodTelemetryOptions.recordOutputs\n : telemetryExplicitlyEnabled === true\n ? true // When telemetry is explicitly enabled, default to recording outputs\n : defaultOutputsEnabled;\n\n return { recordInputs, recordOutputs };\n}\n\n/**\n * This detects is added by the Sentry Vercel AI Integration to detect if the integration should\n * be enabled.\n *\n * It also patches the `ai` module to enable Vercel AI telemetry automatically for all methods.\n */\nexport class SentryVercelAiInstrumentation extends InstrumentationBase {\n private _isPatched = false;\n private _callbacks: (() => void)[] = [];\n\n public constructor(config: InstrumentationConfig = {}) {\n super('@sentry/instrumentation-vercel-ai', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition('ai', SUPPORTED_VERSIONS, this._patch.bind(this));\n return module;\n }\n\n /**\n * Call the provided callback when the module is patched.\n * If it has already been patched, the callback will be called immediately.\n */\n public callWhenPatched(callback: () => void): void {\n if (this._isPatched) {\n callback();\n } else {\n this._callbacks.push(callback);\n }\n }\n\n /**\n * Patches module exports to enable Vercel AI telemetry.\n */\n private _patch(moduleExports: PatchedModuleExports): unknown {\n this._isPatched = true;\n\n this._callbacks.forEach(callback => callback());\n this._callbacks = [];\n\n const generatePatch = <T extends (...args: MethodArgs) => unknown>(originalMethod: T): T => {\n return new Proxy(originalMethod, {\n apply: (target, thisArg, args: MethodArgs) => {\n const existingExperimentalTelemetry = args[0].experimental_telemetry || {};\n const isEnabled = existingExperimentalTelemetry.isEnabled;\n\n const client = getClient();\n const integration = client?.getIntegrationByName<VercelAiIntegration>(INTEGRATION_NAME);\n const integrationOptions = integration?.options;\n const genAI = integration ? client?.getDataCollectionOptions().genAI : undefined;\n\n const { recordInputs, recordOutputs } = determineRecordingSettings(\n integrationOptions,\n existingExperimentalTelemetry,\n isEnabled,\n Boolean(genAI?.inputs),\n Boolean(genAI?.outputs),\n );\n\n args[0].experimental_telemetry = {\n ...existingExperimentalTelemetry,\n isEnabled: isEnabled !== undefined ? isEnabled : true,\n recordInputs,\n recordOutputs,\n };\n\n return handleCallbackErrors(\n () => Reflect.apply(target, thisArg, args),\n error => {\n // This error bubbles up to unhandledrejection handler (if not handled before),\n // where we do not know the active span anymore\n // So to circumvent this, we set the active span on the error object\n // which is picked up by the unhandledrejection handler\n if (error && typeof error === 'object') {\n addNonEnumerableProperty(error, '_sentry_active_span', getActiveSpan());\n }\n },\n () => {},\n result => {\n processToolCallResults(result);\n },\n );\n },\n });\n };\n\n // Is this an ESM module?\n // https://tc39.es/ecma262/#sec-module-namespace-objects\n if (Object.prototype.toString.call(moduleExports) === '[object Module]') {\n // In ESM we take the usual route and just replace the exports we want to instrument\n for (const method of INSTRUMENTED_METHODS) {\n // Skip methods that don't exist in this version of the AI SDK (e.g., rerank was added in v6)\n if (moduleExports[method] != null) {\n moduleExports[method] = generatePatch(moduleExports[method]);\n }\n }\n\n return moduleExports;\n } else {\n // In CJS we can't replace the exports in the original module because they\n // don't have setters, so we create a new object with the same properties\n const patchedModuleExports = INSTRUMENTED_METHODS.reduce((acc, curr) => {\n // Skip methods that don't exist in this version of the AI SDK (e.g., rerank was added in v6)\n if (moduleExports[curr] != null) {\n acc[curr] = generatePatch(moduleExports[curr]);\n }\n return acc;\n }, {} as PatchedModuleExports);\n\n return { ...moduleExports, ...patchedModuleExports };\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
package/build/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"10.
|
|
1
|
+
{"type":"module","version":"10.56.0","sideEffects":false}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getActiveSpan, getRootSpan, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core';
|
|
2
|
+
|
|
3
|
+
function setHttpServerSpanRouteAttribute(route) {
|
|
4
|
+
const activeSpan = getActiveSpan();
|
|
5
|
+
if (!activeSpan) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const rootSpan = getRootSpan(activeSpan);
|
|
9
|
+
if (!rootSpan) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (spanToJSON(rootSpan).data[SEMANTIC_ATTRIBUTE_SENTRY_OP] !== "http.server") {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
rootSpan.setAttribute("http.route", route);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { setHttpServerSpanRouteAttribute };
|
|
19
|
+
//# sourceMappingURL=setHttpServerSpanRouteAttribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setHttpServerSpanRouteAttribute.js","sources":["../../../src/utils/setHttpServerSpanRouteAttribute.ts"],"sourcesContent":["import { getActiveSpan, getRootSpan, SEMANTIC_ATTRIBUTE_SENTRY_OP, spanToJSON } from '@sentry/core';\n\n/**\n * Set the `http.route` attribute on the root HTTP server span for the current trace.\n *\n * No-op when there is no active span, no root span, or the root span is not an\n * `http.server` span — so framework instrumentations can call this unconditionally\n * without risking attribute pollution on non-HTTP root spans.\n */\nexport function setHttpServerSpanRouteAttribute(route: string): void {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n const rootSpan = getRootSpan(activeSpan);\n if (!rootSpan) {\n return;\n }\n if (spanToJSON(rootSpan).data[SEMANTIC_ATTRIBUTE_SENTRY_OP] !== 'http.server') {\n return;\n }\n rootSpan.setAttribute('http.route', route);\n}\n"],"names":[],"mappings":";;AASO,SAAS,gCAAgC,KAAA,EAAqB;AACnE,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAAW,YAAY,UAAU,CAAA;AACvC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA;AAAA,EACF;AACA,EAAA,IAAI,WAAW,QAAQ,CAAA,CAAE,IAAA,CAAK,4BAA4B,MAAM,aAAA,EAAe;AAC7E,IAAA;AAAA,EACF;AACA,EAAA,QAAA,CAAS,YAAA,CAAa,cAAc,KAAK,CAAA;AAC3C;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undici.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/node-fetch/vendored/undici.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,mBAAmB,EAA0B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"undici.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/node-fetch/vendored/undici.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,mBAAmB,EAA0B,MAAM,gCAAgC,CAAC;AAmC7F,OAAO,KAAK,EAAE,2BAA2B,EAAiB,MAAM,SAAS,CAAC;AAc1E,qBAAa,qBAAsB,SAAQ,mBAAmB,CAAC,2BAA2B,CAAC;IAGzF,QAAgB,YAAY,CAAwB;IACpD,OAAO,CAAC,cAAc,CAAuD;IAE7E,QAAgB,4BAA4B,CAAY;gBAE5C,MAAM,GAAE,2BAAgC;cAKjC,IAAI;IAId,OAAO,IAAI,IAAI;IAMf,MAAM,IAAI,IAAI;cA4BJ,wBAAwB;IAW3C,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,gBAAgB;IAgIxB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,MAAM;IAuBd,OAAO,CAAC,OAAO;IA4Bf,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,gBAAgB;CAqBzB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InstrumentationModuleFile } from '@opentelemetry/instrumentation';
|
|
2
|
+
export declare class InstrumentationNodeModuleFile implements InstrumentationModuleFile {
|
|
3
|
+
name: string;
|
|
4
|
+
supportedVersions: string[];
|
|
5
|
+
patch: (moduleExports: any, moduleVersion?: string) => any;
|
|
6
|
+
unpatch: (moduleExports?: any, moduleVersion?: string) => void;
|
|
7
|
+
constructor(name: string, supportedVersions: string[], patch: (moduleExports: any, moduleVersion?: string) => any, unpatch: (moduleExports?: any, moduleVersion?: string) => void);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=InstrumentationNodeModuleFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstrumentationNodeModuleFile.d.ts","sourceRoot":"","sources":["../../../../src/integrations/tracing/InstrumentationNodeModuleFile.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,qBAAa,6BAA8B,YAAW,yBAAyB;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IAC3D,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;gBAGpE,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,EAAE,EAC3B,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,GAAG,EAC1D,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI;CAOjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amqplib.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/amqplib/vendored/amqplib.ts"],"names":[],"mappings":"AAkCA,OAAO,EACL,mBAAmB,EACnB,mCAAmC,
|
|
1
|
+
{"version":3,"file":"amqplib.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/amqplib/vendored/amqplib.ts"],"names":[],"mappings":"AAkCA,OAAO,EACL,mBAAmB,EACnB,mCAAmC,EAKpC,MAAM,gCAAgC,CAAC;AAaxC,OAAO,EAAE,4BAA4B,EAAmE,MAAM,SAAS,CAAC;AAwBxH,qBAAa,sBAAuB,SAAQ,mBAAmB,CAAC,4BAA4B,CAAC;IAC3F,OAAO,CAAC,oBAAoB,CAAoB;gBAEpC,MAAM,GAAE,4BAAiC;IAMrD,OAAO,CAAC,2BAA2B;IAI1B,SAAS,CAAC,MAAM,GAAE,4BAAiC;IAI5D,SAAS,CAAC,IAAI;IA8Bd,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,eAAe;IAoGvB,OAAO,CAAC,wBAAwB;IAmFhC,OAAO,CAAC,eAAe;IAgDvB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,4BAA4B;CAerC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Context,
|
|
1
|
+
import { Context, Span, Attributes } from '@opentelemetry/api';
|
|
2
2
|
import { SemconvStability } from '@opentelemetry/instrumentation';
|
|
3
3
|
import type { Connection, Channel, ConfirmChannel, Options } from './amqplib-types';
|
|
4
4
|
import type { ConsumeMessage, Message } from './types';
|
|
@@ -16,7 +16,7 @@ export type InstrumentationConsumeChannel = Channel & {
|
|
|
16
16
|
connection: InstrumentationConnection;
|
|
17
17
|
[CHANNEL_SPANS_NOT_ENDED]?: {
|
|
18
18
|
msg: ConsumeMessage;
|
|
19
|
-
timeOfConsume:
|
|
19
|
+
timeOfConsume: number;
|
|
20
20
|
}[];
|
|
21
21
|
[CHANNEL_CONSUME_TIMEOUT_TIMER]?: NodeJS.Timeout;
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/amqplib/vendored/utils.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAA0B,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/amqplib/vendored/utils.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAA0B,IAAI,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIlE,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvD,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAA4D,CAAC;AACtG,eAAO,MAAM,uBAAuB,EAAE,OAAO,MAAgE,CAAC;AAC9G,eAAO,MAAM,6BAA6B,EAAE,OAAO,MAElD,CAAC;AACF,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAA8D,CAAC;AAE1G,MAAM,MAAM,yBAAyB,GAAG,UAAU,GAAG;IACnD,CAAC,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC;CACtC,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG;IACvE,UAAU,EAAE,yBAAyB,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG;IACpD,UAAU,EAAE,yBAAyB,CAAC;IACtC,CAAC,uBAAuB,CAAC,CAAC,EAAE;QAC1B,GAAG,EAAE,cAAc,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;IACJ,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;CAClD,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG;IAC7C,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,cAAc,GAAG;IAC3D,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC;CAC9B,CAAC;AAIF,eAAO,MAAM,iBAAiB,GAAI,cAAc,MAAM,WAAuD,CAAC;AA4C9G,eAAO,MAAM,iCAAiC,GAAI,MAAM,UAAU,KAAG,UASpE,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,KAAK,MAAM,GAAG,OAAO,CAAC,OAAO,EAC7B,qBAAqB,gBAAgB,KACpC,UAuEF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,SAAS,OAAO,YAEzD,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,OAAO,YAE3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,SAAS,OAAO,YAEvD,CAAC"}
|
|
@@ -21,18 +21,18 @@ export declare const instrumentAnthropicAi: ((options?: AnthropicAiOptions | und
|
|
|
21
21
|
*
|
|
22
22
|
* ## Options
|
|
23
23
|
*
|
|
24
|
-
* - `recordInputs`: Whether to record prompt messages (default:
|
|
25
|
-
* - `recordOutputs`: Whether to record response text (default:
|
|
24
|
+
* - `recordInputs`: Whether to record prompt messages (default: follows `sendDefaultPii` or `dataCollection.genAI.inputs`)
|
|
25
|
+
* - `recordOutputs`: Whether to record response text (default: follows `sendDefaultPii` or `dataCollection.genAI.outputs`)
|
|
26
26
|
*
|
|
27
27
|
* ### Default Behavior
|
|
28
28
|
*
|
|
29
29
|
* By default, the integration will:
|
|
30
|
-
* - Record inputs and outputs
|
|
31
|
-
* -
|
|
30
|
+
* - Record inputs and outputs based on `sendDefaultPii` or `dataCollection.genAI` in your Sentry client options
|
|
31
|
+
* - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
34
34
|
* ```javascript
|
|
35
|
-
* //
|
|
35
|
+
* // Always record inputs and outputs regardless of global dataCollection config
|
|
36
36
|
* Sentry.init({
|
|
37
37
|
* integrations: [
|
|
38
38
|
* Sentry.anthropicAIIntegration({
|
|
@@ -42,9 +42,9 @@ export declare const instrumentAnthropicAi: ((options?: AnthropicAiOptions | und
|
|
|
42
42
|
* ],
|
|
43
43
|
* });
|
|
44
44
|
*
|
|
45
|
-
* // Never record inputs/outputs regardless of
|
|
45
|
+
* // Never record inputs/outputs regardless of global dataCollection config
|
|
46
46
|
* Sentry.init({
|
|
47
|
-
*
|
|
47
|
+
* dataCollection: { genAI: { inputs: true, outputs: true } },
|
|
48
48
|
* integrations: [
|
|
49
49
|
* Sentry.anthropicAIIntegration({
|
|
50
50
|
* recordInputs: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/connect/vendored/instrumentation.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAW,IAAI,EAAe,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/connect/vendored/instrumentation.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAW,IAAI,EAAe,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAkB,GAAG,EAAqB,MAAM,kBAAkB,CAAC;AAGhH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mCAAmC,EAEpC,MAAM,gCAAgC,CAAC;AAMxC,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,gDAAgD;AAChD,qBAAa,sBAAuB,SAAQ,mBAAmB;gBACjD,MAAM,GAAE,qBAA0B;IAI9C,IAAI;IAQJ,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,iBAAiB;IASlB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,GAAG,YAAY;IAQpE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI;IAyB/D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,cAAc;IAuD/E,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;IAYvC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAgB1D,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,GAAG,YAAY;CAM7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../../src/integrations/tracing/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../../src/integrations/tracing/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AAG1G,OAAO,EACL,KAAK,yBAAyB,EAO9B,KAAK,qBAAqB,EAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOnD,wBAAgB,wBAAwB,CAEtC,GAAG,EAAE;IAAE,GAAG,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,CAAA;CAAE,EAC1C,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAGN;AAED,MAAM,MAAM,4BAA4B,GAAG,qBAAqB,GAC9D,IAAI,CAAC,yBAAyB,EAAE,SAAS,GAAG,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;CAG7B,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,mBAAmB,CAAC,4BAA4B,CAAC;gBACxE,MAAM,GAAE,4BAAiC;IAGrD,IAAI,IAAI,mCAAmC;CAwBnD;AAUD,eAAO,MAAM,kBAAkB,4FAAyC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/fastify/v3/instrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/fastify/v3/instrumentation.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,mBAAmB,EACnB,mCAAmC,EAEpC,MAAM,gCAAgC,CAAC;AAqBxC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAyB5D;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,mBAAmB,CAAC,4BAA4B,CAAC;gBAC1E,MAAM,GAAE,4BAAiC;IAIrD,IAAI,IAAI,mCAAmC,EAAE;IAQpD,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,YAAY;IAwDpB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,eAAe;CA+CxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/fastify/vendored/instrumentation.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAqD,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/fastify/vendored/instrumentation.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAqD,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAOlG,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAoCjG,QAAA,MAAM,iBAAiB,eAA2C,CAAC;AAEnE,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;IAC3E,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,0BAA2B,SAAQ,mBAAmB,CAAC,8BAA8B,CAAC;IACjG,WAAW,EAAE,GAAG,CAAQ;IACxB,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACjE,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAChE,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAa;IAExE,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAQ;gBAExB,MAAM,GAAE,8BAAmC;IAoBvD,MAAM,IAAI,GAAG;IAgBb,OAAO,IAAI,GAAG;IAQd,IAAI;IAIJ,MAAM,IAAI,GAAG;CA2Wd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.d.ts","sourceRoot":"","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/firestore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,
|
|
1
|
+
{"version":3,"file":"firestore.d.ts","sourceRoot":"","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/firestore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,mCAAmC,EAAqC,MAAM,gCAAgC,CAAC;AAYxH,OAAO,KAAK,EAOV,6BAA6B,EAE7B,iBAAiB,EAQlB,MAAM,UAAU,CAAC;AAKlB,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,IAAI,CAAC;AAEzF,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,0BAA0B,EAAE,MAAM,EAAE,EACpC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,6BAA6B,GACpC,mCAAmC,CA8CrC;AA0JD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAwCA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,mCAAmC,EAAqC,MAAM,gCAAgC,CAAC;AAIxH,OAAO,KAAK,EAEV,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EAGrB,MAAM,UAAU,CAAC;AAElB;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,0BAA0B,EAAE,MAAM,EAAE,EACpC,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAClC,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACtC,MAAM,EAAE,6BAA6B,GACpC,mCAAmC,CAgErC;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAC9E,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,6BAA6B,CAAC,WAAW,CAAC,EAC3D,WAAW,EAAE,MAAM,GAClB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAqEtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/tracing/google-genai/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAC7G,OAAO,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/tracing/google-genai/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAC7G,OAAO,EAAE,mBAAmB,EAAuC,MAAM,gCAAgC,CAAC;AAE1G,OAAO,KAAK,EAAqB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmB1E,KAAK,iCAAiC,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAEpF;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,mBAAmB,CAAC,iCAAiC,CAAC;gBACvF,MAAM,GAAE,iCAAsC;IAIjE;;OAEG;IACI,IAAI,IAAI,+BAA+B;IAsB9C;;OAEG;IACH,OAAO,CAAC,MAAM;CAqCf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/graphql/vendored/instrumentation.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,mBAAmB,EACnB,mCAAmC,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/graphql/vendored/instrumentation.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,mBAAmB,EACnB,mCAAmC,EAEpC,MAAM,gCAAgC,CAAC;AA6CxC,OAAO,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,MAAM,SAAS,CAAC;AAa3F,qBAAa,sBAAuB,SAAQ,mBAAmB,CAAC,kCAAkC,CAAC;gBACrF,MAAM,GAAE,4BAAiC;IAI5C,SAAS,CAAC,MAAM,GAAE,4BAAiC;IAI5D,SAAS,CAAC,IAAI;IASd,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,aAAa;IA6DrB,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,kBAAkB;IAwC1B,OAAO,CAAC,gBAAgB;CAuDzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/hapi/vendored/instrumentation.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mCAAmC,EAIpC,MAAM,gCAAgC,CAAC;AA4BxC,6CAA6C;AAC7C,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,OAAO,CAAC,iBAAiB,CAAmB;gBAEhC,MAAM,GAAE,qBAA0B;IAK9C,SAAS,CAAC,IAAI;IAsBd;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAwBvB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IA8CvB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/hapi/vendored/instrumentation.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,mCAAmC,EAIpC,MAAM,gCAAgC,CAAC;AA4BxC,6CAA6C;AAC7C,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,OAAO,CAAC,iBAAiB,CAAmB;gBAEhC,MAAM,GAAE,qBAA0B;IAK9C,SAAS,CAAC,IAAI;IAsBd;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAwBvB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IA8CvB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAgD1B"}
|
|
@@ -10,6 +10,9 @@ export declare const instrumentHono: ((options?: unknown) => HonoInstrumentation
|
|
|
10
10
|
*
|
|
11
11
|
* For more information, see the [hono documentation](https://docs.sentry.io/platforms/javascript/guides/hono/).
|
|
12
12
|
*
|
|
13
|
+
* @deprecated Use the `@sentry/hono` package instead. The `sentry()` middleware from `@sentry/hono/node` handles
|
|
14
|
+
* tracing and error capturing automatically without needing this integration or `setupHonoErrorHandler`.
|
|
15
|
+
*
|
|
13
16
|
* @example
|
|
14
17
|
* ```javascript
|
|
15
18
|
* const Sentry = require('@sentry/node');
|
|
@@ -33,6 +36,9 @@ interface HonoHandlerOptions {
|
|
|
33
36
|
* @param app The Hono instances
|
|
34
37
|
* @param options Configuration options for the handler
|
|
35
38
|
*
|
|
39
|
+
* @deprecated Use the `@sentry/hono` package instead. The `sentry()` middleware from `@sentry/hono/node` handles
|
|
40
|
+
* error capturing automatically without needing this function or `honoIntegration`.
|
|
41
|
+
*
|
|
36
42
|
* @example
|
|
37
43
|
* ```javascript
|
|
38
44
|
* const Sentry = require('@sentry/node');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/tracing/hono/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAqB,0BAA0B,EAAQ,MAAM,SAAS,CAAC;AAiC5F,eAAO,MAAM,cAAc;;CAQ1B,CAAC;AAWF
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/tracing/hono/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAqB,0BAA0B,EAAQ,MAAM,SAAS,CAAC;AAiC5F,eAAO,MAAM,cAAc;;CAQ1B,CAAC;AAWF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,0CAAsC,CAAC;AAEnE,UAAU,kBAAkB;IAC1B;;;OAGG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;CAClD;AA+BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE;IAAE,GAAG,EAAE,0BAA0B,CAAA;CAAE,EACxC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACpC,IAAI,CAIN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/knex/vendored/instrumentation.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,mBAAmB,EACnB,mCAAmC,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/knex/vendored/instrumentation.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,mBAAmB,EACnB,mCAAmC,EAIpC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AA8BpD,qBAAa,mBAAoB,SAAQ,mBAAmB,CAAC,yBAAyB,CAAC;IACrF,OAAO,CAAC,iBAAiB,CAAmB;gBAEhC,MAAM,GAAE,yBAA8B;IAMzC,SAAS,CAAC,MAAM,GAAE,yBAA8B;IAIzD,IAAI;IAcJ,OAAO,CAAC,sCAAsC;IAe9C,OAAO,CAAC,sCAAsC;IAmB9C,OAAO,CAAC,kBAAkB;IA0F1B,OAAO,CAAC,YAAY;IAUpB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG;CAM5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/koa/vendored/instrumentation.ts"],"names":[],"mappings":"AAuBA,OAAO,EAEL,mBAAmB,EACnB,mCAAmC,EAEpC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAgB,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAQjE,4CAA4C;AAC5C,qBAAa,kBAAmB,SAAQ,mBAAmB,CAAC,wBAAwB,CAAC;gBACvE,MAAM,GAAE,wBAA6B;IAIjD,SAAS,CAAC,IAAI;IA8Bd;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAavB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/tracing/koa/vendored/instrumentation.ts"],"names":[],"mappings":"AAuBA,OAAO,EAEL,mBAAmB,EACnB,mCAAmC,EAEpC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAgB,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAQjE,4CAA4C;AAC5C,qBAAa,kBAAmB,SAAQ,mBAAmB,CAAC,wBAAwB,CAAC;gBACvE,MAAM,GAAE,wBAA6B;IAIjD,SAAS,CAAC,IAAI;IA8Bd;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAavB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;CAiEpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/tracing/langchain/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/tracing/langchain/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,EAErC,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAcrD,KAAK,+BAA+B,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AA4ChF;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,mBAAmB,CAAC,+BAA+B,CAAC;gBACnF,MAAM,GAAE,+BAAoC;IAI/D;;;;;;OAMG;IACI,IAAI,IAAI,+BAA+B,GAAG,+BAA+B,EAAE;IA0DlF;;;OAGG;IACH,OAAO,CAAC,MAAM;IAyBd;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA+C7B;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;CAmBhC"}
|