@sentry/node 10.62.0 → 10.64.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/index.js +15 -14
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/launchDarkly.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/openFeature.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/statsig.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/unleash.js.map +1 -1
- package/build/cjs/integrations/fs/index.js.map +1 -1
- package/build/cjs/integrations/http.js.map +1 -1
- package/build/cjs/integrations/node-fetch.js +24 -0
- package/build/cjs/integrations/node-fetch.js.map +1 -0
- package/build/cjs/integrations/tracing/amqplib/index.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js +0 -6
- package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/utils.js +11 -10
- package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/index.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js +2 -2
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/cjs/integrations/tracing/express.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/index.js +7 -103
- package/build/cjs/integrations/tracing/fastify/index.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +4 -5
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/firebase/firebase.js.map +1 -1
- package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js +9 -9
- package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
- package/build/cjs/integrations/tracing/genericPool/index.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/index.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/index.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/utils.js +8 -9
- package/build/cjs/integrations/tracing/hapi/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/hono/index.js +7 -7
- package/build/cjs/integrations/tracing/hono/index.js.map +1 -1
- package/build/cjs/integrations/tracing/index.js +0 -1
- package/build/cjs/integrations/tracing/index.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/index.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js +2 -1
- package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/utils.js +12 -11
- package/build/cjs/integrations/tracing/kafka/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/index.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +11 -10
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/semconv.js +0 -16
- package/build/cjs/integrations/tracing/knex/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/index.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +2 -2
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js +2 -2
- package/build/cjs/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/lrumemoizer/index.js.map +1 -1
- package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js +4 -2
- package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js +12 -11
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/index.js +3 -2
- package/build/cjs/integrations/tracing/mongoose/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js +11 -8
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js +9 -9
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js +36 -129
- package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/semconv.js +0 -14
- package/build/cjs/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/utils.js +2 -27
- package/build/cjs/integrations/tracing/mysql/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +7 -4
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/utils.js +7 -4
- package/build/cjs/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/index.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/postgres/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/utils.js +12 -11
- package/build/cjs/integrations/tracing/postgres/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/postgresjs.js +8 -7
- package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/index.js +48 -62
- package/build/cjs/integrations/tracing/prisma/index.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js +83 -57
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/constants.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/global.js +2 -2
- package/build/cjs/integrations/tracing/prisma/vendored/global.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js +1 -6
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/cache.js +41 -0
- package/build/cjs/integrations/tracing/redis/cache.js.map +1 -0
- package/build/cjs/integrations/tracing/redis/index.js +16 -38
- package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +22 -13
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +21 -15
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/semconv.js +0 -8
- package/build/cjs/integrations/tracing/redis/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/index.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js +9 -8
- package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/vercelai/constants.js.map +1 -1
- package/build/cjs/integrations/tracing/vercelai/index.js +2 -4
- package/build/cjs/integrations/tracing/vercelai/index.js.map +1 -1
- package/build/cjs/sdk/diagnosticsChannelInjection.js.map +1 -1
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +18 -6
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/cjs/sdk/index.js +2 -2
- package/build/cjs/sdk/index.js.map +1 -1
- package/build/cjs/sdk/initOtel.js +36 -0
- package/build/cjs/sdk/initOtel.js.map +1 -1
- package/build/esm/index.js +2 -2
- package/build/esm/integrations/featureFlagShims/launchDarkly.js.map +1 -1
- package/build/esm/integrations/featureFlagShims/openFeature.js.map +1 -1
- package/build/esm/integrations/featureFlagShims/statsig.js.map +1 -1
- package/build/esm/integrations/featureFlagShims/unleash.js.map +1 -1
- package/build/esm/integrations/fs/index.js.map +1 -1
- package/build/esm/integrations/http.js.map +1 -1
- package/build/esm/integrations/node-fetch.js +22 -0
- package/build/esm/integrations/node-fetch.js.map +1 -0
- package/build/esm/integrations/tracing/amqplib/index.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/semconv.js +1 -4
- package/build/esm/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/utils.js +7 -6
- package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/connect/index.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +2 -2
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/esm/integrations/tracing/express.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/index.js +8 -103
- package/build/esm/integrations/tracing/fastify/index.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +5 -6
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/firebase/firebase.js.map +1 -1
- package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +7 -7
- package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
- package/build/esm/integrations/tracing/genericPool/index.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/index.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/index.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/utils.js +3 -4
- package/build/esm/integrations/tracing/hapi/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/hono/index.js +3 -3
- package/build/esm/integrations/tracing/hono/index.js.map +1 -1
- package/build/esm/integrations/tracing/index.js +1 -2
- package/build/esm/integrations/tracing/index.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/index.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js +3 -2
- package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/utils.js +11 -10
- package/build/esm/integrations/tracing/kafka/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/knex/index.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +10 -9
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/semconv.js +1 -9
- package/build/esm/integrations/tracing/knex/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/koa/index.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +2 -2
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/utils.js +2 -2
- package/build/esm/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/lrumemoizer/index.js.map +1 -1
- package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js +5 -3
- package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/index.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/utils.js +9 -8
- package/build/esm/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/index.js +4 -3
- package/build/esm/integrations/tracing/mongoose/index.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js +9 -6
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js +10 -10
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/index.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js +38 -131
- package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/semconv.js +1 -8
- package/build/esm/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/utils.js +3 -25
- package/build/esm/integrations/tracing/mysql/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/index.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +6 -3
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/utils.js +8 -5
- package/build/esm/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/index.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/postgres/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/utils.js +13 -12
- package/build/esm/integrations/tracing/postgres/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/postgresjs.js +7 -6
- package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/index.js +49 -63
- package/build/esm/integrations/tracing/prisma/index.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js +83 -57
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/constants.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/global.js +2 -2
- package/build/esm/integrations/tracing/prisma/vendored/global.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js +1 -6
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/cache.js +38 -0
- package/build/esm/integrations/tracing/redis/cache.js.map +1 -0
- package/build/esm/integrations/tracing/redis/index.js +12 -37
- package/build/esm/integrations/tracing/redis/index.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +19 -10
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +16 -10
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/semconv.js +1 -5
- package/build/esm/integrations/tracing/redis/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/index.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js +8 -7
- package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/vercelai/constants.js.map +1 -1
- package/build/esm/integrations/tracing/vercelai/index.js +3 -5
- package/build/esm/integrations/tracing/vercelai/index.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/sdk/diagnosticsChannelInjection.js.map +1 -1
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +19 -8
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/esm/sdk/index.js +1 -1
- package/build/esm/sdk/initOtel.js +38 -2
- package/build/esm/sdk/initOtel.js.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/launchDarkly.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/launchDarkly.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/openFeature.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/openFeature.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/statsig.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/statsig.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/unleash.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/unleash.d.ts.map +1 -1
- package/build/types/integrations/fs/index.d.ts +3 -1
- package/build/types/integrations/fs/index.d.ts.map +1 -1
- package/build/types/integrations/http.d.ts +3 -1
- package/build/types/integrations/http.d.ts.map +1 -1
- package/build/types/integrations/node-fetch.d.ts +9 -0
- package/build/types/integrations/node-fetch.d.ts.map +1 -0
- package/build/types/integrations/tracing/amqplib/index.d.ts +3 -1
- package/build/types/integrations/tracing/amqplib/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts +0 -6
- package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/anthropic-ai/index.d.ts +3 -1
- package/build/types/integrations/tracing/anthropic-ai/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/index.d.ts +3 -1
- package/build/types/integrations/tracing/connect/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/dataloader/index.d.ts +3 -1
- package/build/types/integrations/tracing/dataloader/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/express.d.ts +3 -1
- package/build/types/integrations/tracing/express.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/index.d.ts +6 -6
- package/build/types/integrations/tracing/fastify/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/v3/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/firebase/firebase.d.ts +3 -1
- package/build/types/integrations/tracing/firebase/firebase.d.ts.map +1 -1
- package/build/types/integrations/tracing/genericPool/index.d.ts +3 -1
- package/build/types/integrations/tracing/genericPool/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/google-genai/index.d.ts +3 -1
- package/build/types/integrations/tracing/google-genai/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/index.d.ts +3 -1
- package/build/types/integrations/tracing/graphql/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/index.d.ts +3 -1
- package/build/types/integrations/tracing/hapi/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/hono/index.d.ts +3 -1
- package/build/types/integrations/tracing/hono/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/index.d.ts +3 -1
- package/build/types/integrations/tracing/kafka/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts +5 -63
- package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/index.d.ts +3 -1
- package/build/types/integrations/tracing/knex/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/vendored/semconv.d.ts +0 -32
- package/build/types/integrations/tracing/knex/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/index.d.ts +3 -1
- package/build/types/integrations/tracing/koa/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/langchain/index.d.ts +3 -1
- package/build/types/integrations/tracing/langchain/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/langgraph/index.d.ts +3 -1
- package/build/types/integrations/tracing/langgraph/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/lrumemoizer/index.d.ts +3 -1
- package/build/types/integrations/tracing/lrumemoizer/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/lrumemoizer/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/index.d.ts +3 -1
- package/build/types/integrations/tracing/mongo/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts +1 -37
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/index.d.ts +3 -1
- package/build/types/integrations/tracing/mongoose/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -48
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/index.d.ts +3 -1
- package/build/types/integrations/tracing/mysql/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts +3 -17
- package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts +16 -16
- package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts +1 -70
- package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/utils.d.ts +6 -9
- package/build/types/integrations/tracing/mysql/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/index.d.ts +3 -1
- package/build/types/integrations/tracing/mysql2/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts +0 -6
- package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/openai/index.d.ts +3 -1
- package/build/types/integrations/tracing/openai/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/index.d.ts +3 -1
- package/build/types/integrations/tracing/postgres/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts +1 -50
- package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgresjs.d.ts +3 -1
- package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/index.d.ts +5 -21
- package/build/types/integrations/tracing/prisma/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +5 -7
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/constants.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/global.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts +2 -4
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts +5 -23
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/cache.d.ts +22 -0
- package/build/types/integrations/tracing/redis/cache.d.ts.map +1 -0
- package/build/types/integrations/tracing/redis/index.d.ts +6 -22
- package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/ioredis-instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/redis-instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/semconv.d.ts +0 -4
- package/build/types/integrations/tracing/redis/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/index.d.ts +3 -1
- package/build/types/integrations/tracing/tedious/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts +1 -62
- package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/vercelai/constants.d.ts +1 -1
- package/build/types/integrations/tracing/vercelai/constants.d.ts.map +1 -1
- package/build/types/integrations/tracing/vercelai/index.d.ts +3 -1
- package/build/types/integrations/tracing/vercelai/index.d.ts.map +1 -1
- package/build/types/sdk/diagnosticsChannelInjection.d.ts +1 -1
- package/build/types/sdk/diagnosticsChannelInjection.d.ts.map +1 -1
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -0
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -1
- package/build/types/sdk/initOtel.d.ts +2 -3
- package/build/types/sdk/initOtel.d.ts.map +1 -1
- package/build/types-ts3.8/index.d.ts +1 -1
- package/build/types-ts3.8/integrations/featureFlagShims/launchDarkly.d.ts +3 -1
- package/build/types-ts3.8/integrations/featureFlagShims/openFeature.d.ts +3 -1
- package/build/types-ts3.8/integrations/featureFlagShims/statsig.d.ts +3 -1
- package/build/types-ts3.8/integrations/featureFlagShims/unleash.d.ts +3 -1
- package/build/types-ts3.8/integrations/fs/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/http.d.ts +3 -1
- package/build/types-ts3.8/integrations/node-fetch.d.ts +9 -0
- package/build/types-ts3.8/integrations/tracing/amqplib/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/amqplib/vendored/semconv.d.ts +0 -6
- package/build/types-ts3.8/integrations/tracing/anthropic-ai/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/connect/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/dataloader/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/express.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/fastify/index.d.ts +6 -6
- package/build/types-ts3.8/integrations/tracing/firebase/firebase.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/genericPool/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/google-genai/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/graphql/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/hapi/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/hono/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/kafka/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/kafka/vendored/semconv.d.ts +5 -63
- package/build/types-ts3.8/integrations/tracing/knex/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/knex/vendored/semconv.d.ts +0 -32
- package/build/types-ts3.8/integrations/tracing/koa/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/langchain/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/langgraph/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/lrumemoizer/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mongo/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/semconv.d.ts +1 -37
- package/build/types-ts3.8/integrations/tracing/mongoose/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -48
- package/build/types-ts3.8/integrations/tracing/mysql/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/instrumentation.d.ts +3 -17
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/mysql-types.d.ts +16 -16
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/semconv.d.ts +1 -70
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/utils.d.ts +6 -9
- package/build/types-ts3.8/integrations/tracing/mysql2/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mysql2/vendored/semconv.d.ts +0 -6
- package/build/types-ts3.8/integrations/tracing/openai/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/postgres/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/semconv.d.ts +1 -50
- package/build/types-ts3.8/integrations/tracing/postgresjs.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/prisma/index.d.ts +5 -21
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +5 -7
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/instrumentation.d.ts +2 -4
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/types.d.ts +5 -23
- package/build/types-ts3.8/integrations/tracing/redis/cache.d.ts +22 -0
- package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +6 -22
- package/build/types-ts3.8/integrations/tracing/redis/vendored/semconv.d.ts +0 -4
- package/build/types-ts3.8/integrations/tracing/tedious/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/tedious/vendored/semconv.d.ts +1 -62
- package/build/types-ts3.8/integrations/tracing/vercelai/constants.d.ts +1 -1
- package/build/types-ts3.8/integrations/tracing/vercelai/index.d.ts +3 -1
- package/build/types-ts3.8/sdk/diagnosticsChannelInjection.d.ts +1 -1
- package/build/types-ts3.8/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -0
- package/build/types-ts3.8/sdk/initOtel.d.ts +3 -4
- package/package.json +8 -8
- package/build/cjs/integrations/node-fetch/index.js +0 -80
- package/build/cjs/integrations/node-fetch/index.js.map +0 -1
- package/build/cjs/integrations/node-fetch/vendored/semconv.js +0 -28
- package/build/cjs/integrations/node-fetch/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/node-fetch/vendored/undici.js +0 -302
- package/build/cjs/integrations/node-fetch/vendored/undici.js.map +0 -1
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js +0 -387
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js.map +0 -1
- package/build/cjs/integrations/tracing/hapi/vendored/semconv.js +0 -6
- package/build/cjs/integrations/tracing/hapi/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js +0 -9
- package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js.map +0 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-common.js +0 -34
- package/build/cjs/integrations/tracing/redis/vendored/redis-common.js.map +0 -1
- package/build/esm/integrations/node-fetch/index.js +0 -77
- package/build/esm/integrations/node-fetch/index.js.map +0 -1
- package/build/esm/integrations/node-fetch/vendored/semconv.js +0 -15
- package/build/esm/integrations/node-fetch/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/node-fetch/vendored/undici.js +0 -300
- package/build/esm/integrations/node-fetch/vendored/undici.js.map +0 -1
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js +0 -385
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +0 -1
- package/build/esm/integrations/tracing/hapi/vendored/semconv.js +0 -4
- package/build/esm/integrations/tracing/hapi/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js +0 -7
- package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js.map +0 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-common.js +0 -32
- package/build/esm/integrations/tracing/redis/vendored/redis-common.js.map +0 -1
- package/build/types/integrations/node-fetch/index.d.ts +0 -36
- package/build/types/integrations/node-fetch/index.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/internal-types.d.ts +0 -25
- package/build/types/integrations/node-fetch/vendored/internal-types.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/semconv.d.ts +0 -13
- package/build/types/integrations/node-fetch/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/types.d.ts +0 -60
- package/build/types/integrations/node-fetch/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/undici.d.ts +0 -21
- package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +0 -1
- package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts +0 -27
- package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +0 -1
- package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts +0 -13
- package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts +0 -4
- package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts.map +0 -1
- package/build/types/integrations/tracing/mysql/vendored/types.d.ts +0 -9
- package/build/types/integrations/tracing/mysql/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/redis/vendored/redis-common.d.ts +0 -6
- package/build/types/integrations/tracing/redis/vendored/redis-common.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/node-fetch/index.d.ts +0 -36
- package/build/types-ts3.8/integrations/node-fetch/vendored/internal-types.d.ts +0 -25
- package/build/types-ts3.8/integrations/node-fetch/vendored/semconv.d.ts +0 -13
- package/build/types-ts3.8/integrations/node-fetch/vendored/types.d.ts +0 -60
- package/build/types-ts3.8/integrations/node-fetch/vendored/undici.d.ts +0 -21
- package/build/types-ts3.8/integrations/tracing/fastify/vendored/instrumentation.d.ts +0 -27
- package/build/types-ts3.8/integrations/tracing/hapi/vendored/semconv.d.ts +0 -13
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/AttributeNames.d.ts +0 -4
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/types.d.ts +0 -9
- package/build/types-ts3.8/integrations/tracing/redis/vendored/redis-common.d.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/hono/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/hono/index.ts"],"sourcesContent":["import { HTTP_REQUEST_METHOD, HTTP_ROUTE } from '@sentry/conventions/attributes';\nimport type { IntegrationFn, Span } from '@sentry/core';\nimport {\n captureException,\n debug,\n defineIntegration,\n getDefaultIsolationScope,\n getIsolationScope,\n httpRequestToRequestData,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n spanToJSON,\n} from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport { AttributeNames } from './constants';\nimport { HonoInstrumentation } from './instrumentation';\nimport type { Context, MiddlewareHandler, MiddlewareHandlerInterface, Next } from './types';\n\nconst INTEGRATION_NAME = 'Hono' as const;\n\nfunction addHonoSpanAttributes(span: Span): void {\n const attributes = spanToJSON(span).data;\n const type = attributes[AttributeNames.HONO_TYPE];\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n return;\n }\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.hono',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.hono`,\n });\n\n const name = attributes[AttributeNames.HONO_NAME];\n if (typeof name === 'string') {\n span.updateName(name);\n }\n\n if (getIsolationScope() === getDefaultIsolationScope()) {\n DEBUG_BUILD && debug.warn('Isolation scope is default isolation scope - skipping setting transactionName');\n return;\n }\n\n const route = attributes[HTTP_ROUTE];\n const method = attributes[HTTP_REQUEST_METHOD];\n if (typeof route === 'string' && typeof method === 'string') {\n getIsolationScope().setTransactionName(`${method} ${route}`);\n }\n}\n\nexport const instrumentHono = generateInstrumentOnce(\n INTEGRATION_NAME,\n () =>\n new HonoInstrumentation({\n responseHook: span => {\n addHonoSpanAttributes(span);\n },\n }),\n);\n\nconst _honoIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentHono();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Hono](https://hono.dev/).\n *\n * If you also want to capture errors, you need to call `setupHonoErrorHandler(app)` after you set up your Hono server.\n *\n * For more information, see the [hono documentation](https://docs.sentry.io/platforms/javascript/guides/hono/).\n *\n * @deprecated Use the `@sentry/hono` package instead. The `sentry()` middleware from `@sentry/hono/node` handles\n * tracing and error capturing automatically without needing this integration or `setupHonoErrorHandler`.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.honoIntegration()],\n * })\n * ```\n */\nexport const honoIntegration = defineIntegration(_honoIntegration);\n\ninterface HonoHandlerOptions {\n /**\n * Callback method deciding whether error should be captured and sent to Sentry\n * @param error Captured Hono error\n */\n shouldHandleError: (context: Context) => boolean;\n}\n\nfunction honoRequestHandler(): MiddlewareHandler {\n return async function sentryRequestMiddleware(context: Context, next: Next): Promise<void> {\n const normalizedRequest = httpRequestToRequestData(context.req);\n getIsolationScope().setSDKProcessingMetadata({ normalizedRequest });\n await next();\n };\n}\n\nfunction defaultShouldHandleError(context: Context): boolean {\n const statusCode = context.res.status;\n return statusCode >= 500;\n}\n\nfunction honoErrorHandler(options?: Partial<HonoHandlerOptions>): MiddlewareHandler {\n return async function sentryErrorMiddleware(context: Context, next: Next): Promise<void> {\n await next();\n\n const shouldHandleError = options?.shouldHandleError || defaultShouldHandleError;\n if (shouldHandleError(context)) {\n (context.res as { sentry?: string }).sentry = captureException(context.error, {\n mechanism: {\n type: 'auto.middleware.hono',\n handled: false,\n },\n });\n }\n };\n}\n\n/**\n * Add a Hono error handler to capture errors to Sentry.\n *\n * @param app The Hono instances\n * @param options Configuration options for the handler\n *\n * @deprecated Use the `@sentry/hono` package instead. The `sentry()` middleware from `@sentry/hono/node` handles\n * error capturing automatically without needing this function or `honoIntegration`.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const { Hono } = require(\"hono\");\n *\n * const app = new Hono();\n *\n * Sentry.setupHonoErrorHandler(app);\n *\n * // Add your routes, etc.\n * ```\n */\nexport function setupHonoErrorHandler(\n app: { use: MiddlewareHandlerInterface },\n options?: Partial<HonoHandlerOptions>,\n): void {\n app.use(honoRequestHandler());\n app.use(honoErrorHandler(options));\n ensureIsWrapped(app.use, 'hono');\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { instrumentAmqplib, amqplibIntegration } from './amqplib/index.js';
|
|
|
3
3
|
import { instrumentAnthropicAi, anthropicAIIntegration } from './anthropic-ai/index.js';
|
|
4
4
|
import { instrumentConnect, connectIntegration } from './connect/index.js';
|
|
5
5
|
import { instrumentExpress, expressIntegration } from './express.js';
|
|
6
|
-
import {
|
|
6
|
+
import { instrumentFastifyV3, fastifyIntegration } from './fastify/index.js';
|
|
7
7
|
import { instrumentFirebase, firebaseIntegration } from './firebase/firebase.js';
|
|
8
8
|
import { instrumentGenericPool, genericPoolIntegration } from './genericPool/index.js';
|
|
9
9
|
import { instrumentGoogleGenAI, googleGenAIIntegration } from './google-genai/index.js';
|
|
@@ -66,7 +66,6 @@ function getOpenTelemetryInstrumentationToPreload() {
|
|
|
66
66
|
instrumentSentryHttp,
|
|
67
67
|
instrumentExpress,
|
|
68
68
|
instrumentConnect,
|
|
69
|
-
instrumentFastify,
|
|
70
69
|
instrumentFastifyV3,
|
|
71
70
|
instrumentHapi,
|
|
72
71
|
instrumentHono,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/integrations/tracing/index.ts"],"sourcesContent":["import type { Integration } from '@sentry/core';\nimport { instrumentSentryHttp } from '../http';\nimport { amqplibIntegration, instrumentAmqplib } from './amqplib';\nimport { anthropicAIIntegration, instrumentAnthropicAi } from './anthropic-ai';\nimport { connectIntegration, instrumentConnect } from './connect';\nimport { expressIntegration, instrumentExpress } from './express';\nimport { fastifyIntegration,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/integrations/tracing/index.ts"],"sourcesContent":["import type { Integration } from '@sentry/core';\nimport { instrumentSentryHttp } from '../http';\nimport { amqplibIntegration, instrumentAmqplib } from './amqplib';\nimport { anthropicAIIntegration, instrumentAnthropicAi } from './anthropic-ai';\nimport { connectIntegration, instrumentConnect } from './connect';\nimport { expressIntegration, instrumentExpress } from './express';\nimport { fastifyIntegration, instrumentFastifyV3 } from './fastify';\nimport { firebaseIntegration, instrumentFirebase } from './firebase';\nimport { genericPoolIntegration, instrumentGenericPool } from './genericPool';\nimport { googleGenAIIntegration, instrumentGoogleGenAI } from './google-genai';\nimport { graphqlIntegration, instrumentGraphql } from './graphql';\nimport { hapiIntegration, instrumentHapi } from './hapi';\nimport { honoIntegration, instrumentHono } from './hono';\nimport { instrumentKafka, kafkaIntegration } from './kafka';\nimport { instrumentKoa, koaIntegration } from './koa';\nimport { instrumentLangChain, langChainIntegration } from './langchain';\nimport { instrumentLangGraph, langGraphIntegration } from './langgraph';\nimport { instrumentLruMemoizer, lruMemoizerIntegration } from './lrumemoizer';\nimport { instrumentMongo, mongoIntegration } from './mongo';\nimport { instrumentMongoose, mongooseIntegration } from './mongoose';\nimport { instrumentMysql, mysqlIntegration } from './mysql';\nimport { instrumentMysql2, mysql2Integration } from './mysql2';\nimport { instrumentOpenAi, openAIIntegration } from './openai';\nimport { instrumentPostgres, postgresIntegration } from './postgres';\nimport { instrumentPostgresJs, postgresJsIntegration } from './postgresjs';\nimport { prismaIntegration } from './prisma';\nimport { instrumentRedis, redisIntegration } from './redis';\nimport { instrumentTedious, tediousIntegration } from './tedious';\nimport { instrumentVercelAi, vercelAIIntegration } from './vercelai';\n\n/**\n * With OTEL, all performance integrations will be added, as OTEL only initializes them when the patched package is actually required.\n */\nexport function getAutoPerformanceIntegrations(): Integration[] {\n return [\n expressIntegration(),\n fastifyIntegration(),\n graphqlIntegration(),\n // eslint-disable-next-line typescript/no-deprecated\n honoIntegration(),\n mongoIntegration(),\n mongooseIntegration(),\n mysqlIntegration(),\n mysql2Integration(),\n redisIntegration(),\n postgresIntegration(),\n prismaIntegration(),\n hapiIntegration(),\n koaIntegration(),\n connectIntegration(),\n tediousIntegration(),\n genericPoolIntegration(),\n kafkaIntegration(),\n amqplibIntegration(),\n lruMemoizerIntegration(),\n // AI providers\n // LangChain must come first to disable AI provider integrations before they instrument\n langChainIntegration(),\n langGraphIntegration(),\n vercelAIIntegration(),\n openAIIntegration(),\n anthropicAIIntegration(),\n googleGenAIIntegration(),\n postgresJsIntegration(),\n firebaseIntegration(),\n ];\n}\n\n/**\n * Get a list of methods to instrument OTEL, when preload instrumentation.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getOpenTelemetryInstrumentationToPreload(): (((options?: any) => void) & { id: string })[] {\n return [\n instrumentSentryHttp,\n instrumentExpress,\n instrumentConnect,\n instrumentFastifyV3,\n instrumentHapi,\n instrumentHono,\n instrumentKafka,\n instrumentKoa,\n instrumentLruMemoizer,\n instrumentMongo,\n instrumentMongoose,\n instrumentMysql,\n instrumentMysql2,\n instrumentPostgres,\n instrumentHapi,\n instrumentGraphql,\n instrumentRedis,\n instrumentTedious,\n instrumentGenericPool,\n instrumentAmqplib,\n instrumentLangChain,\n instrumentVercelAi,\n instrumentOpenAi,\n instrumentPostgresJs,\n instrumentFirebase,\n instrumentAnthropicAi,\n instrumentGoogleGenAI,\n instrumentLangGraph,\n ];\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCO,SAAS,8BAAA,GAAgD;AAC9D,EAAA,OAAO;AAAA,IACL,kBAAA,EAAmB;AAAA,IACnB,kBAAA,EAAmB;AAAA,IACnB,kBAAA,EAAmB;AAAA;AAAA,IAEnB,eAAA,EAAgB;AAAA,IAChB,gBAAA,EAAiB;AAAA,IACjB,mBAAA,EAAoB;AAAA,IACpB,gBAAA,EAAiB;AAAA,IACjB,iBAAA,EAAkB;AAAA,IAClB,gBAAA,EAAiB;AAAA,IACjB,mBAAA,EAAoB;AAAA,IACpB,iBAAA,EAAkB;AAAA,IAClB,eAAA,EAAgB;AAAA,IAChB,cAAA,EAAe;AAAA,IACf,kBAAA,EAAmB;AAAA,IACnB,kBAAA,EAAmB;AAAA,IACnB,sBAAA,EAAuB;AAAA,IACvB,gBAAA,EAAiB;AAAA,IACjB,kBAAA,EAAmB;AAAA,IACnB,sBAAA,EAAuB;AAAA;AAAA;AAAA,IAGvB,oBAAA,EAAqB;AAAA,IACrB,oBAAA,EAAqB;AAAA,IACrB,mBAAA,EAAoB;AAAA,IACpB,iBAAA,EAAkB;AAAA,IAClB,sBAAA,EAAuB;AAAA,IACvB,sBAAA,EAAuB;AAAA,IACvB,qBAAA,EAAsB;AAAA,IACtB,mBAAA;AAAoB,GACtB;AACF;AAMO,SAAS,wCAAA,GAA2F;AACzG,EAAA,OAAO;AAAA,IACL,oBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/kafka/index.ts"],"sourcesContent":["import { KafkaJsInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Kafka';\n\nexport const instrumentKafka = generateInstrumentOnce(INTEGRATION_NAME, () => new KafkaJsInstrumentation());\n\nconst _kafkaIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKafka();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [kafkajs](https://www.npmjs.com/package/kafkajs) library.\n *\n * For more information, see the [`kafkaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/kafka/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.kafkaIntegration()],\n * });\n */\nexport const kafkaIntegration = defineIntegration(_kafkaIntegration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,OAAA;AAElB,MAAM,kBAAkB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,wBAAwB;AAE1G,MAAM,qBAAqB,MAAM;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,GACF;AACF,CAAA,CAAA;AAeO,MAAM,gBAAA,GAAmB,kBAAkB,iBAAiB;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/kafka/index.ts"],"sourcesContent":["import { KafkaJsInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Kafka' as const;\n\nexport const instrumentKafka = generateInstrumentOnce(INTEGRATION_NAME, () => new KafkaJsInstrumentation());\n\nconst _kafkaIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKafka();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [kafkajs](https://www.npmjs.com/package/kafkajs) library.\n *\n * For more information, see the [`kafkaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/kafka/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.kafkaIntegration()],\n * });\n */\nexport const kafkaIntegration = defineIntegration(_kafkaIntegration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,OAAA;AAElB,MAAM,kBAAkB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,wBAAwB;AAE1G,MAAM,qBAAqB,MAAM;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,GACF;AACF,CAAA,CAAA;AAeO,MAAM,gBAAA,GAAmB,kBAAkB,iBAAiB;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
|
|
2
|
+
import { MESSAGING_BATCH_MESSAGE_COUNT } from '@sentry/conventions/attributes';
|
|
2
3
|
import { SDK_VERSION, continueTrace, withActiveSpan, startNewTrace, startInactiveSpan, SPAN_STATUS_ERROR, SPAN_STATUS_OK } from '@sentry/core';
|
|
3
|
-
import { ATTR_MESSAGING_DESTINATION_PARTITION_ID,
|
|
4
|
+
import { ATTR_MESSAGING_DESTINATION_PARTITION_ID, MESSAGING_OPERATION_TYPE_VALUE_PROCESS, MESSAGING_OPERATION_TYPE_VALUE_RECEIVE } from './semconv.js';
|
|
4
5
|
import { getHeaderAsString, startConsumerSpan, endSpansOnPromise, getLinksFromHeaders, startProducerSpan } from './utils.js';
|
|
5
6
|
|
|
6
7
|
const PACKAGE_NAME = "@sentry/instrumentation-kafkajs";
|
|
@@ -118,7 +119,7 @@ class KafkaJsInstrumentation extends InstrumentationBase {
|
|
|
118
119
|
message: void 0,
|
|
119
120
|
operationType: MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,
|
|
120
121
|
attributes: {
|
|
121
|
-
[
|
|
122
|
+
[MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,
|
|
122
123
|
[ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition)
|
|
123
124
|
}
|
|
124
125
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Some types vendored from kafkajs with simplifications\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Cross-broker trace propagation uses Sentry's `getTraceData`/`continueTrace` instead of the OTel\n * propagator, so the vendored `bufferTextMapGetter` propagator is gone\n * - Dropped the OTel metrics (no MeterProvider is wired up) and, with them, the `network.request`\n * event listeners they relied on; origin is folded into span creation instead of `index.ts` hooks\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span } from '@sentry/core';\nimport {\n continueTrace,\n SDK_VERSION,\n SPAN_STATUS_ERROR,\n SPAN_STATUS_OK,\n startInactiveSpan,\n startNewTrace,\n withActiveSpan,\n} from '@sentry/core';\nimport type {\n Consumer,\n ConsumerRunConfig,\n EachBatchHandler,\n EachMessageHandler,\n Kafka,\n KafkaMessage,\n Producer,\n RecordMetadata,\n Transaction,\n} from './kafkajs-types';\nimport {\n ATTR_MESSAGING_BATCH_MESSAGE_COUNT,\n ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n} from './semconv';\nimport {\n endSpansOnPromise,\n getHeaderAsString,\n getLinksFromHeaders,\n startConsumerSpan,\n startProducerSpan,\n} from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-kafkajs';\n\nexport class KafkaJsInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition {\n const unpatch = (moduleExports: any): void => {\n if (isWrapped(moduleExports?.Kafka?.prototype.producer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'producer');\n }\n if (isWrapped(moduleExports?.Kafka?.prototype.consumer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'consumer');\n }\n };\n\n const module = new InstrumentationNodeModuleDefinition(\n 'kafkajs',\n ['>=0.3.0 <3'],\n (moduleExports: any) => {\n unpatch(moduleExports);\n this._wrap(moduleExports?.Kafka?.prototype, 'producer', this._getProducerPatch());\n this._wrap(moduleExports?.Kafka?.prototype, 'consumer', this._getConsumerPatch());\n\n return moduleExports;\n },\n unpatch,\n );\n return module;\n }\n\n private _getConsumerPatch() {\n const instrumentation = this;\n return (original: Kafka['consumer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['consumer']>) {\n const newConsumer: Consumer = original.apply(this, args);\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newConsumer.run)) {\n instrumentation._unwrap(newConsumer, 'run');\n }\n\n instrumentation._wrap(newConsumer, 'run', instrumentation._getConsumerRunPatch());\n\n return newConsumer;\n };\n };\n }\n\n private _getProducerPatch() {\n const instrumentation = this;\n return (original: Kafka['producer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['producer']>) {\n const newProducer: Producer = original.apply(this, args);\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.sendBatch)) {\n instrumentation._unwrap(newProducer, 'sendBatch');\n }\n instrumentation._wrap(newProducer, 'sendBatch', instrumentation._getSendBatchPatch());\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.send)) {\n instrumentation._unwrap(newProducer, 'send');\n }\n instrumentation._wrap(newProducer, 'send', instrumentation._getSendPatch());\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.transaction)) {\n instrumentation._unwrap(newProducer, 'transaction');\n }\n instrumentation._wrap(newProducer, 'transaction', instrumentation._getProducerTransactionPatch());\n\n return newProducer;\n };\n };\n }\n\n private _getConsumerRunPatch() {\n const instrumentation = this;\n return (original: Consumer['run']) => {\n return function run(this: Consumer, ...args: Parameters<Consumer['run']>): ReturnType<Consumer['run']> {\n const config = args[0];\n if (config?.eachMessage) {\n if (isWrapped(config.eachMessage)) {\n instrumentation._unwrap(config, 'eachMessage');\n }\n instrumentation._wrap(config, 'eachMessage', instrumentation._getConsumerEachMessagePatch());\n }\n if (config?.eachBatch) {\n if (isWrapped(config.eachBatch)) {\n instrumentation._unwrap(config, 'eachBatch');\n }\n instrumentation._wrap(config, 'eachBatch', instrumentation._getConsumerEachBatchPatch());\n }\n return original.call(this, config);\n };\n };\n }\n\n private _getConsumerEachMessagePatch() {\n return (original: ConsumerRunConfig['eachMessage']) => {\n return function eachMessage(this: unknown, ...args: Parameters<EachMessageHandler>): Promise<void> {\n const payload = args[0];\n const sentryTrace = getHeaderAsString(payload.message.headers, 'sentry-trace');\n const baggage = getHeaderAsString(payload.message.headers, 'baggage');\n\n // Continue the producer's trace so the consumer span is parented to the message's producer.\n return continueTrace({ sentryTrace, baggage }, () => {\n const span = startConsumerSpan({\n topic: payload.topic,\n message: payload.message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n },\n });\n\n const eachMessagePromise = withActiveSpan(span, () => {\n return original!.apply(this, args);\n });\n return endSpansOnPromise([span], eachMessagePromise);\n });\n };\n };\n }\n\n private _getConsumerEachBatchPatch() {\n return (original: ConsumerRunConfig['eachBatch']) => {\n return function eachBatch(this: unknown, ...args: Parameters<EachBatchHandler>): Promise<void> {\n const payload = args[0];\n // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#topic-with-multiple-consumers\n // A batch pull aggregates messages from many producers, so the receiving span is a fresh root\n // trace and each processed message links back to its own producer span.\n const receivingSpan = startNewTrace(() =>\n startConsumerSpan({\n topic: payload.batch.topic,\n message: undefined,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n attributes: {\n [ATTR_MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n\n return withActiveSpan(receivingSpan, () => {\n const spans: Span[] = [receivingSpan];\n payload.batch.messages.forEach((message: KafkaMessage) => {\n spans.push(\n startConsumerSpan({\n topic: payload.batch.topic,\n message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n links: getLinksFromHeaders(message.headers),\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n });\n const batchMessagePromise: Promise<void> = original!.apply(this, args);\n return endSpansOnPromise(spans, batchMessagePromise);\n });\n };\n };\n }\n\n private _getProducerTransactionPatch() {\n const instrumentation = this;\n return (original: Producer['transaction']) => {\n return function transaction(\n this: Producer,\n ...args: Parameters<Producer['transaction']>\n ): ReturnType<Producer['transaction']> {\n const transactionSpan = startInactiveSpan({ name: 'transaction' });\n\n const transactionPromise = original.apply(this, args);\n\n transactionPromise\n .then((transaction: Transaction) => {\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalSend = transaction.send;\n transaction.send = function send(this: Transaction, ...args) {\n return withActiveSpan(transactionSpan, () => {\n const patched = instrumentation._getSendPatch()(originalSend);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n throw err;\n });\n });\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalSendBatch = transaction.sendBatch;\n transaction.sendBatch = function sendBatch(this: Transaction, ...args) {\n return withActiveSpan(transactionSpan, () => {\n const patched = instrumentation._getSendBatchPatch()(originalSendBatch);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n throw err;\n });\n });\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalCommit = transaction.commit;\n transaction.commit = function commit(this: Transaction, ...args) {\n const originCommitPromise = originalCommit.apply(this, args).then(() => {\n transactionSpan.setStatus({ code: SPAN_STATUS_OK });\n });\n return endSpansOnPromise([transactionSpan], originCommitPromise);\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalAbort = transaction.abort;\n transaction.abort = function abort(this: Transaction, ...args) {\n const originAbortPromise = originalAbort.apply(this, args);\n return endSpansOnPromise([transactionSpan], originAbortPromise);\n };\n })\n .catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n transactionSpan.end();\n });\n\n return transactionPromise;\n };\n };\n }\n\n private _getSendBatchPatch() {\n return (original: Producer['sendBatch'] | Transaction['sendBatch']) => {\n return function sendBatch(\n this: Producer | Transaction,\n ...args: Parameters<Producer['sendBatch']>\n ): ReturnType<Producer['sendBatch']> {\n const batch = args[0];\n const messages = batch.topicMessages || [];\n\n const spans: Span[] = [];\n\n messages.forEach((topicMessage: any) => {\n topicMessage.messages.forEach((message: any) => {\n spans.push(startProducerSpan(topicMessage.topic, message));\n });\n });\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return endSpansOnPromise(spans, origSendResult);\n };\n };\n }\n\n private _getSendPatch() {\n return (original: Producer['send'] | Transaction['send']) => {\n return function send(\n this: Producer | Transaction,\n ...args: Parameters<Producer['send']>\n ): ReturnType<Producer['send']> {\n const record = args[0];\n const spans: Span[] = record.messages.map((message: any) => {\n return startProducerSpan(record.topic, message);\n });\n\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return endSpansOnPromise(spans, origSendResult);\n };\n };\n }\n}\n"],"names":["transaction","args"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Some types vendored from kafkajs with simplifications\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Cross-broker trace propagation uses Sentry's `getTraceData`/`continueTrace` instead of the OTel\n * propagator, so the vendored `bufferTextMapGetter` propagator is gone\n * - Dropped the OTel metrics (no MeterProvider is wired up) and, with them, the `network.request`\n * event listeners they relied on; origin is folded into span creation instead of `index.ts` hooks\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { MESSAGING_BATCH_MESSAGE_COUNT } from '@sentry/conventions/attributes';\nimport type { Span } from '@sentry/core';\nimport {\n continueTrace,\n SDK_VERSION,\n SPAN_STATUS_ERROR,\n SPAN_STATUS_OK,\n startInactiveSpan,\n startNewTrace,\n withActiveSpan,\n} from '@sentry/core';\nimport type {\n Consumer,\n ConsumerRunConfig,\n EachBatchHandler,\n EachMessageHandler,\n Kafka,\n KafkaMessage,\n Producer,\n RecordMetadata,\n Transaction,\n} from './kafkajs-types';\nimport {\n ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n} from './semconv';\nimport {\n endSpansOnPromise,\n getHeaderAsString,\n getLinksFromHeaders,\n startConsumerSpan,\n startProducerSpan,\n} from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-kafkajs';\n\nexport class KafkaJsInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition {\n const unpatch = (moduleExports: any): void => {\n if (isWrapped(moduleExports?.Kafka?.prototype.producer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'producer');\n }\n if (isWrapped(moduleExports?.Kafka?.prototype.consumer)) {\n this._unwrap(moduleExports.Kafka.prototype, 'consumer');\n }\n };\n\n const module = new InstrumentationNodeModuleDefinition(\n 'kafkajs',\n ['>=0.3.0 <3'],\n (moduleExports: any) => {\n unpatch(moduleExports);\n this._wrap(moduleExports?.Kafka?.prototype, 'producer', this._getProducerPatch());\n this._wrap(moduleExports?.Kafka?.prototype, 'consumer', this._getConsumerPatch());\n\n return moduleExports;\n },\n unpatch,\n );\n return module;\n }\n\n private _getConsumerPatch() {\n const instrumentation = this;\n return (original: Kafka['consumer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['consumer']>) {\n const newConsumer: Consumer = original.apply(this, args);\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newConsumer.run)) {\n instrumentation._unwrap(newConsumer, 'run');\n }\n\n instrumentation._wrap(newConsumer, 'run', instrumentation._getConsumerRunPatch());\n\n return newConsumer;\n };\n };\n }\n\n private _getProducerPatch() {\n const instrumentation = this;\n return (original: Kafka['producer']) => {\n return function consumer(this: Kafka, ...args: Parameters<Kafka['producer']>) {\n const newProducer: Producer = original.apply(this, args);\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.sendBatch)) {\n instrumentation._unwrap(newProducer, 'sendBatch');\n }\n instrumentation._wrap(newProducer, 'sendBatch', instrumentation._getSendBatchPatch());\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.send)) {\n instrumentation._unwrap(newProducer, 'send');\n }\n instrumentation._wrap(newProducer, 'send', instrumentation._getSendPatch());\n\n // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n if (isWrapped(newProducer.transaction)) {\n instrumentation._unwrap(newProducer, 'transaction');\n }\n instrumentation._wrap(newProducer, 'transaction', instrumentation._getProducerTransactionPatch());\n\n return newProducer;\n };\n };\n }\n\n private _getConsumerRunPatch() {\n const instrumentation = this;\n return (original: Consumer['run']) => {\n return function run(this: Consumer, ...args: Parameters<Consumer['run']>): ReturnType<Consumer['run']> {\n const config = args[0];\n if (config?.eachMessage) {\n if (isWrapped(config.eachMessage)) {\n instrumentation._unwrap(config, 'eachMessage');\n }\n instrumentation._wrap(config, 'eachMessage', instrumentation._getConsumerEachMessagePatch());\n }\n if (config?.eachBatch) {\n if (isWrapped(config.eachBatch)) {\n instrumentation._unwrap(config, 'eachBatch');\n }\n instrumentation._wrap(config, 'eachBatch', instrumentation._getConsumerEachBatchPatch());\n }\n return original.call(this, config);\n };\n };\n }\n\n private _getConsumerEachMessagePatch() {\n return (original: ConsumerRunConfig['eachMessage']) => {\n return function eachMessage(this: unknown, ...args: Parameters<EachMessageHandler>): Promise<void> {\n const payload = args[0];\n const sentryTrace = getHeaderAsString(payload.message.headers, 'sentry-trace');\n const baggage = getHeaderAsString(payload.message.headers, 'baggage');\n\n // Continue the producer's trace so the consumer span is parented to the message's producer.\n return continueTrace({ sentryTrace, baggage }, () => {\n const span = startConsumerSpan({\n topic: payload.topic,\n message: payload.message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n },\n });\n\n const eachMessagePromise = withActiveSpan(span, () => {\n return original!.apply(this, args);\n });\n return endSpansOnPromise([span], eachMessagePromise);\n });\n };\n };\n }\n\n private _getConsumerEachBatchPatch() {\n return (original: ConsumerRunConfig['eachBatch']) => {\n return function eachBatch(this: unknown, ...args: Parameters<EachBatchHandler>): Promise<void> {\n const payload = args[0];\n // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#topic-with-multiple-consumers\n // A batch pull aggregates messages from many producers, so the receiving span is a fresh root\n // trace and each processed message links back to its own producer span.\n const receivingSpan = startNewTrace(() =>\n startConsumerSpan({\n topic: payload.batch.topic,\n message: undefined,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n attributes: {\n [MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n\n return withActiveSpan(receivingSpan, () => {\n const spans: Span[] = [receivingSpan];\n payload.batch.messages.forEach((message: KafkaMessage) => {\n spans.push(\n startConsumerSpan({\n topic: payload.batch.topic,\n message,\n operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n links: getLinksFromHeaders(message.headers),\n attributes: {\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n },\n }),\n );\n });\n const batchMessagePromise: Promise<void> = original!.apply(this, args);\n return endSpansOnPromise(spans, batchMessagePromise);\n });\n };\n };\n }\n\n private _getProducerTransactionPatch() {\n const instrumentation = this;\n return (original: Producer['transaction']) => {\n return function transaction(\n this: Producer,\n ...args: Parameters<Producer['transaction']>\n ): ReturnType<Producer['transaction']> {\n const transactionSpan = startInactiveSpan({ name: 'transaction' });\n\n const transactionPromise = original.apply(this, args);\n\n transactionPromise\n .then((transaction: Transaction) => {\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalSend = transaction.send;\n transaction.send = function send(this: Transaction, ...args) {\n return withActiveSpan(transactionSpan, () => {\n const patched = instrumentation._getSendPatch()(originalSend);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n throw err;\n });\n });\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalSendBatch = transaction.sendBatch;\n transaction.sendBatch = function sendBatch(this: Transaction, ...args) {\n return withActiveSpan(transactionSpan, () => {\n const patched = instrumentation._getSendBatchPatch()(originalSendBatch);\n return patched.apply(this, args).catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n throw err;\n });\n });\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalCommit = transaction.commit;\n transaction.commit = function commit(this: Transaction, ...args) {\n const originCommitPromise = originalCommit.apply(this, args).then(() => {\n transactionSpan.setStatus({ code: SPAN_STATUS_OK });\n });\n return endSpansOnPromise([transactionSpan], originCommitPromise);\n };\n\n // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n const originalAbort = transaction.abort;\n transaction.abort = function abort(this: Transaction, ...args) {\n const originAbortPromise = originalAbort.apply(this, args);\n return endSpansOnPromise([transactionSpan], originAbortPromise);\n };\n })\n .catch((err: any) => {\n transactionSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err?.message,\n });\n transactionSpan.end();\n });\n\n return transactionPromise;\n };\n };\n }\n\n private _getSendBatchPatch() {\n return (original: Producer['sendBatch'] | Transaction['sendBatch']) => {\n return function sendBatch(\n this: Producer | Transaction,\n ...args: Parameters<Producer['sendBatch']>\n ): ReturnType<Producer['sendBatch']> {\n const batch = args[0];\n const messages = batch.topicMessages || [];\n\n const spans: Span[] = [];\n\n messages.forEach((topicMessage: any) => {\n topicMessage.messages.forEach((message: any) => {\n spans.push(startProducerSpan(topicMessage.topic, message));\n });\n });\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return endSpansOnPromise(spans, origSendResult);\n };\n };\n }\n\n private _getSendPatch() {\n return (original: Producer['send'] | Transaction['send']) => {\n return function send(\n this: Producer | Transaction,\n ...args: Parameters<Producer['send']>\n ): ReturnType<Producer['send']> {\n const record = args[0];\n const spans: Span[] = record.messages.map((message: any) => {\n return startProducerSpan(record.topic, message);\n });\n\n const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n return endSpansOnPromise(spans, origSendResult);\n };\n };\n }\n}\n"],"names":["transaction","args"],"mappings":"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"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
const ATTR_MESSAGING_BATCH_MESSAGE_COUNT = "messaging.batch.message_count";
|
|
2
|
-
const ATTR_MESSAGING_DESTINATION_NAME = "messaging.destination.name";
|
|
3
1
|
const ATTR_MESSAGING_DESTINATION_PARTITION_ID = "messaging.destination.partition.id";
|
|
4
2
|
const ATTR_MESSAGING_KAFKA_MESSAGE_KEY = "messaging.kafka.message.key";
|
|
5
3
|
const ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE = "messaging.kafka.message.tombstone";
|
|
6
4
|
const ATTR_MESSAGING_KAFKA_OFFSET = "messaging.kafka.offset";
|
|
7
|
-
const ATTR_MESSAGING_OPERATION_NAME = "messaging.operation.name";
|
|
8
|
-
const ATTR_MESSAGING_OPERATION_TYPE = "messaging.operation.type";
|
|
9
|
-
const ATTR_MESSAGING_SYSTEM = "messaging.system";
|
|
10
5
|
const MESSAGING_OPERATION_TYPE_VALUE_PROCESS = "process";
|
|
11
6
|
const MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = "receive";
|
|
12
7
|
const MESSAGING_OPERATION_TYPE_VALUE_SEND = "send";
|
|
13
8
|
const MESSAGING_SYSTEM_VALUE_KAFKA = "kafka";
|
|
14
|
-
const ATTR_ERROR_TYPE = "error.type";
|
|
15
9
|
const ERROR_TYPE_VALUE_OTHER = "_OTHER";
|
|
16
10
|
|
|
17
|
-
export {
|
|
11
|
+
export { ATTR_MESSAGING_DESTINATION_PARTITION_ID, ATTR_MESSAGING_KAFKA_MESSAGE_KEY, ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE, ATTR_MESSAGING_KAFKA_OFFSET, ERROR_TYPE_VALUE_OTHER, MESSAGING_OPERATION_TYPE_VALUE_PROCESS, MESSAGING_OPERATION_TYPE_VALUE_RECEIVE, MESSAGING_OPERATION_TYPE_VALUE_SEND, MESSAGING_SYSTEM_VALUE_KAFKA };
|
|
18
12
|
//# sourceMappingURL=semconv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Metric semantic conventions dropped; `error.type` inlined from `@opentelemetry/semantic-conventions`\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * The
|
|
1
|
+
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Metric semantic conventions dropped; `error.type` inlined from `@opentelemetry/semantic-conventions`\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n *\n * @example \"1\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_DESTINATION_PARTITION_ID = 'messaging.destination.partition.id' as const;\n\n/**\n * Message keys in Kafka are used for grouping alike messages to ensure they're processed on the same partition. They differ from `messaging.message.id` in that they're not unique. If the key is `null`, the attribute **MUST NOT** be set.\n *\n * @example \"myKey\"\n *\n * @note If the key type is not string, it's string representation has to be supplied for the attribute. If the key has no unambiguous, canonical string form, don't include its value.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_KAFKA_MESSAGE_KEY = 'messaging.kafka.message.key' as const;\n\n/**\n * A boolean that is true if the message is a tombstone.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE = 'messaging.kafka.message.tombstone' as const;\n\n/**\n * The offset of a record in the corresponding Kafka partition.\n *\n * @example 42\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_KAFKA_OFFSET = 'messaging.kafka.offset' as const;\n\n/**\n * Enum value \"process\" for attribute `messaging.operation.type`.\n */\nexport const MESSAGING_OPERATION_TYPE_VALUE_PROCESS = 'process' as const;\n\n/**\n * Enum value \"receive\" for attribute `messaging.operation.type`.\n */\nexport const MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = 'receive' as const;\n\n/**\n * Enum value \"send\" for attribute `messaging.operation.type`.\n */\nexport const MESSAGING_OPERATION_TYPE_VALUE_SEND = 'send' as const;\n\n/**\n * Enum value \"kafka\" for attribute `messaging.system`.\n */\nexport const MESSAGING_SYSTEM_VALUE_KAFKA = 'kafka' as const;\n\n/**\n * Enum value \"_OTHER\" for attribute `error.type`. A fallback error value to be used when\n * the instrumentation doesn't define a custom value.\n */\nexport const ERROR_TYPE_VALUE_OTHER = '_OTHER' as const;\n"],"names":[],"mappings":"AAuBO,MAAM,uCAAA,GAA0C;AAWhD,MAAM,gCAAA,GAAmC;AAOzC,MAAM,sCAAA,GAAyC;AAS/C,MAAM,2BAAA,GAA8B;AAKpC,MAAM,sCAAA,GAAyC;AAK/C,MAAM,sCAAA,GAAyC;AAK/C,MAAM,mCAAA,GAAsC;AAK5C,MAAM,4BAAA,GAA+B;AAMrC,MAAM,sBAAA,GAAyB;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TraceFlags } from '@opentelemetry/api';
|
|
2
|
+
import { MESSAGING_OPERATION_NAME, MESSAGING_OPERATION_TYPE, MESSAGING_DESTINATION_NAME, MESSAGING_SYSTEM, ERROR_TYPE } from '@sentry/conventions/attributes';
|
|
2
3
|
import { startInactiveSpan, SPAN_KIND, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, propagationContextFromHeaders, getTraceData } from '@sentry/core';
|
|
3
|
-
import { MESSAGING_SYSTEM_VALUE_KAFKA, ATTR_MESSAGING_KAFKA_OFFSET, ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE, ATTR_MESSAGING_KAFKA_MESSAGE_KEY,
|
|
4
|
+
import { MESSAGING_SYSTEM_VALUE_KAFKA, ATTR_MESSAGING_KAFKA_OFFSET, ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE, ATTR_MESSAGING_KAFKA_MESSAGE_KEY, MESSAGING_OPERATION_TYPE_VALUE_RECEIVE, ERROR_TYPE_VALUE_OTHER, MESSAGING_OPERATION_TYPE_VALUE_SEND, ATTR_MESSAGING_DESTINATION_PARTITION_ID } from './semconv.js';
|
|
4
5
|
|
|
5
6
|
const PRODUCER_ORIGIN = "auto.kafkajs.otel.producer";
|
|
6
7
|
const CONSUMER_ORIGIN = "auto.kafkajs.otel.consumer";
|
|
@@ -42,10 +43,10 @@ function startConsumerSpan({ topic, message, operationType, links, attributes })
|
|
|
42
43
|
links,
|
|
43
44
|
attributes: {
|
|
44
45
|
...attributes,
|
|
45
|
-
[
|
|
46
|
-
[
|
|
47
|
-
[
|
|
48
|
-
[
|
|
46
|
+
[MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,
|
|
47
|
+
[MESSAGING_DESTINATION_NAME]: topic,
|
|
48
|
+
[MESSAGING_OPERATION_TYPE]: operationType,
|
|
49
|
+
[MESSAGING_OPERATION_NAME]: operationName,
|
|
49
50
|
[ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : void 0,
|
|
50
51
|
[ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : void 0,
|
|
51
52
|
[ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset,
|
|
@@ -60,13 +61,13 @@ function startProducerSpan(topic, message) {
|
|
|
60
61
|
name: `send ${topic}`,
|
|
61
62
|
kind: SPAN_KIND.PRODUCER,
|
|
62
63
|
attributes: {
|
|
63
|
-
[
|
|
64
|
-
[
|
|
64
|
+
[MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,
|
|
65
|
+
[MESSAGING_DESTINATION_NAME]: topic,
|
|
65
66
|
[ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : void 0,
|
|
66
67
|
[ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : void 0,
|
|
67
68
|
[ATTR_MESSAGING_DESTINATION_PARTITION_ID]: message.partition !== void 0 ? String(message.partition) : void 0,
|
|
68
|
-
[
|
|
69
|
-
[
|
|
69
|
+
[MESSAGING_OPERATION_NAME]: "send",
|
|
70
|
+
[MESSAGING_OPERATION_TYPE]: MESSAGING_OPERATION_TYPE_VALUE_SEND,
|
|
70
71
|
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRODUCER_ORIGIN
|
|
71
72
|
}
|
|
72
73
|
});
|
|
@@ -91,7 +92,7 @@ function endSpansOnPromise(spans, sendPromise) {
|
|
|
91
92
|
errorType = reason.constructor.name;
|
|
92
93
|
}
|
|
93
94
|
spans.forEach((span) => {
|
|
94
|
-
span.setAttribute(
|
|
95
|
+
span.setAttribute(ERROR_TYPE, errorType);
|
|
95
96
|
span.setStatus({
|
|
96
97
|
code: SPAN_STATUS_ERROR,
|
|
97
98
|
message: errorMessage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Span creation extracted here and migrated to the @sentry/core API; origin folded into span creation\n */\n\nimport { TraceFlags } from '@opentelemetry/api';\nimport type { Span, SpanAttributes, SpanLink } from '@sentry/core';\nimport {\n getTraceData,\n propagationContextFromHeaders,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport type { KafkaMessage, Message } from './kafkajs-types';\nimport {\n ATTR_ERROR_TYPE,\n ATTR_MESSAGING_DESTINATION_NAME,\n ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n ATTR_MESSAGING_KAFKA_MESSAGE_KEY,\n ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE,\n ATTR_MESSAGING_KAFKA_OFFSET,\n ATTR_MESSAGING_OPERATION_NAME,\n ATTR_MESSAGING_OPERATION_TYPE,\n ATTR_MESSAGING_SYSTEM,\n ERROR_TYPE_VALUE_OTHER,\n MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n MESSAGING_OPERATION_TYPE_VALUE_SEND,\n MESSAGING_SYSTEM_VALUE_KAFKA,\n} from './semconv';\n\nconst PRODUCER_ORIGIN = 'auto.kafkajs.otel.producer';\nconst CONSUMER_ORIGIN = 'auto.kafkajs.otel.consumer';\n\nexport interface ConsumerSpanOptions {\n topic: string;\n message: KafkaMessage | undefined;\n operationType: string;\n attributes: SpanAttributes;\n links?: SpanLink[];\n}\n\n/**\n * Reads a header value off a kafkajs message as a string. kafkajs delivers headers as `Buffer`s (or\n * arrays of them), so we normalize to a string before handing them to Sentry's trace helpers.\n */\nexport function getHeaderAsString(headers: KafkaMessage['headers'], key: string): string | undefined {\n const value = headers?.[key];\n if (value == null) {\n return undefined;\n }\n return Array.isArray(value) ? value[0]?.toString() : value.toString();\n}\n\n/**\n * Builds a span link to the producer span carried in the message headers, mirroring the upstream\n * behavior of linking each batch-processed message to its originating producer span.\n */\nexport function getLinksFromHeaders(headers: KafkaMessage['headers']): SpanLink[] | undefined {\n const sentryTrace = getHeaderAsString(headers, 'sentry-trace');\n if (!sentryTrace) {\n return undefined;\n }\n\n const { traceId, parentSpanId, sampled } = propagationContextFromHeaders(\n sentryTrace,\n getHeaderAsString(headers, 'baggage'),\n );\n if (!parentSpanId) {\n return undefined;\n }\n\n return [\n {\n context: {\n traceId,\n spanId: parentSpanId,\n isRemote: true,\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n },\n },\n ];\n}\n\n/** Starts an inactive consumer (process/receive) span carrying the kafkajs messaging attributes. */\nexport function startConsumerSpan({ topic, message, operationType, links, attributes }: ConsumerSpanOptions): Span {\n const operationName =\n operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE\n ? 'poll' // for batch processing spans\n : operationType; // for individual message processing spans\n\n return startInactiveSpan({\n name: `${operationName} ${topic}`,\n kind: operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? SPAN_KIND.CLIENT : SPAN_KIND.CONSUMER,\n links,\n attributes: {\n ...attributes,\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_DESTINATION_NAME]: topic,\n [ATTR_MESSAGING_OPERATION_TYPE]: operationType,\n [ATTR_MESSAGING_OPERATION_NAME]: operationName,\n [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : undefined,\n [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : undefined,\n [ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset,\n // Mirror the upstream behavior of only tagging per-message processing spans (not the batch\n // receiving span, which carries no message) with the auto origin.\n ...(message ? { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: CONSUMER_ORIGIN } : {}),\n },\n });\n}\n\n/** Starts an inactive producer span and propagates its trace into the message headers. */\nexport function startProducerSpan(topic: string, message: Message): Span {\n const span = startInactiveSpan({\n name: `send ${topic}`,\n kind: SPAN_KIND.PRODUCER,\n attributes: {\n [ATTR_MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [ATTR_MESSAGING_DESTINATION_NAME]: topic,\n [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : undefined,\n [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : undefined,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]:\n message.partition !== undefined ? String(message.partition) : undefined,\n [ATTR_MESSAGING_OPERATION_NAME]: 'send',\n [ATTR_MESSAGING_OPERATION_TYPE]: MESSAGING_OPERATION_TYPE_VALUE_SEND,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRODUCER_ORIGIN,\n },\n });\n\n // Propagate the producer span's trace to consumers via the message headers.\n message.headers = message.headers ?? {};\n const traceData = getTraceData({ span });\n if (traceData['sentry-trace']) {\n message.headers['sentry-trace'] = traceData['sentry-trace'];\n }\n if (traceData.baggage) {\n message.headers['baggage'] = traceData.baggage;\n }\n\n return span;\n}\n\n/**\n * Resolves once `sendPromise` settles, ending all `spans` and, on failure, marking them with the\n * error status and `error.type` before re-throwing.\n */\nexport function endSpansOnPromise<T>(spans: Span[], sendPromise: Promise<T>): Promise<T> {\n return Promise.resolve(sendPromise)\n .catch(reason => {\n let errorMessage: string | undefined;\n let errorType: string = ERROR_TYPE_VALUE_OTHER;\n if (typeof reason === 'string' || reason === undefined) {\n errorMessage = reason;\n } else if (typeof reason === 'object' && Object.prototype.hasOwnProperty.call(reason, 'message')) {\n errorMessage = reason.message;\n errorType = reason.constructor.name;\n }\n\n spans.forEach(span => {\n span.setAttribute(ATTR_ERROR_TYPE, errorType);\n span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: errorMessage,\n });\n });\n\n throw reason;\n })\n .finally(() => {\n spans.forEach(span => span.end());\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/kafka/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Span creation extracted here and migrated to the @sentry/core API; origin folded into span creation\n */\n\nimport { TraceFlags } from '@opentelemetry/api';\nimport {\n ERROR_TYPE,\n MESSAGING_DESTINATION_NAME,\n MESSAGING_OPERATION_NAME,\n MESSAGING_OPERATION_TYPE,\n MESSAGING_SYSTEM,\n} from '@sentry/conventions/attributes';\nimport type { Span, SpanAttributes, SpanLink } from '@sentry/core';\nimport {\n getTraceData,\n propagationContextFromHeaders,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport type { KafkaMessage, Message } from './kafkajs-types';\nimport {\n ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n ATTR_MESSAGING_KAFKA_MESSAGE_KEY,\n ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE,\n ATTR_MESSAGING_KAFKA_OFFSET,\n ERROR_TYPE_VALUE_OTHER,\n MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n MESSAGING_OPERATION_TYPE_VALUE_SEND,\n MESSAGING_SYSTEM_VALUE_KAFKA,\n} from './semconv';\n\nconst PRODUCER_ORIGIN = 'auto.kafkajs.otel.producer';\nconst CONSUMER_ORIGIN = 'auto.kafkajs.otel.consumer';\n\nexport interface ConsumerSpanOptions {\n topic: string;\n message: KafkaMessage | undefined;\n operationType: string;\n attributes: SpanAttributes;\n links?: SpanLink[];\n}\n\n/**\n * Reads a header value off a kafkajs message as a string. kafkajs delivers headers as `Buffer`s (or\n * arrays of them), so we normalize to a string before handing them to Sentry's trace helpers.\n */\nexport function getHeaderAsString(headers: KafkaMessage['headers'], key: string): string | undefined {\n const value = headers?.[key];\n if (value == null) {\n return undefined;\n }\n return Array.isArray(value) ? value[0]?.toString() : value.toString();\n}\n\n/**\n * Builds a span link to the producer span carried in the message headers, mirroring the upstream\n * behavior of linking each batch-processed message to its originating producer span.\n */\nexport function getLinksFromHeaders(headers: KafkaMessage['headers']): SpanLink[] | undefined {\n const sentryTrace = getHeaderAsString(headers, 'sentry-trace');\n if (!sentryTrace) {\n return undefined;\n }\n\n const { traceId, parentSpanId, sampled } = propagationContextFromHeaders(\n sentryTrace,\n getHeaderAsString(headers, 'baggage'),\n );\n if (!parentSpanId) {\n return undefined;\n }\n\n return [\n {\n context: {\n traceId,\n spanId: parentSpanId,\n isRemote: true,\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n },\n },\n ];\n}\n\n/** Starts an inactive consumer (process/receive) span carrying the kafkajs messaging attributes. */\nexport function startConsumerSpan({ topic, message, operationType, links, attributes }: ConsumerSpanOptions): Span {\n const operationName =\n operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE\n ? 'poll' // for batch processing spans\n : operationType; // for individual message processing spans\n\n return startInactiveSpan({\n name: `${operationName} ${topic}`,\n kind: operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? SPAN_KIND.CLIENT : SPAN_KIND.CONSUMER,\n links,\n attributes: {\n ...attributes,\n [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [MESSAGING_DESTINATION_NAME]: topic,\n [MESSAGING_OPERATION_TYPE]: operationType,\n [MESSAGING_OPERATION_NAME]: operationName,\n [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : undefined,\n [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : undefined,\n [ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset,\n // Mirror the upstream behavior of only tagging per-message processing spans (not the batch\n // receiving span, which carries no message) with the auto origin.\n ...(message ? { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: CONSUMER_ORIGIN } : {}),\n },\n });\n}\n\n/** Starts an inactive producer span and propagates its trace into the message headers. */\nexport function startProducerSpan(topic: string, message: Message): Span {\n const span = startInactiveSpan({\n name: `send ${topic}`,\n kind: SPAN_KIND.PRODUCER,\n attributes: {\n [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n [MESSAGING_DESTINATION_NAME]: topic,\n [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : undefined,\n [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : undefined,\n [ATTR_MESSAGING_DESTINATION_PARTITION_ID]:\n message.partition !== undefined ? String(message.partition) : undefined,\n [MESSAGING_OPERATION_NAME]: 'send',\n [MESSAGING_OPERATION_TYPE]: MESSAGING_OPERATION_TYPE_VALUE_SEND,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRODUCER_ORIGIN,\n },\n });\n\n // Propagate the producer span's trace to consumers via the message headers.\n message.headers = message.headers ?? {};\n const traceData = getTraceData({ span });\n if (traceData['sentry-trace']) {\n message.headers['sentry-trace'] = traceData['sentry-trace'];\n }\n if (traceData.baggage) {\n message.headers['baggage'] = traceData.baggage;\n }\n\n return span;\n}\n\n/**\n * Resolves once `sendPromise` settles, ending all `spans` and, on failure, marking them with the\n * error status and `error.type` before re-throwing.\n */\nexport function endSpansOnPromise<T>(spans: Span[], sendPromise: Promise<T>): Promise<T> {\n return Promise.resolve(sendPromise)\n .catch(reason => {\n let errorMessage: string | undefined;\n let errorType: string = ERROR_TYPE_VALUE_OTHER;\n if (typeof reason === 'string' || reason === undefined) {\n errorMessage = reason;\n } else if (typeof reason === 'object' && Object.prototype.hasOwnProperty.call(reason, 'message')) {\n errorMessage = reason.message;\n errorType = reason.constructor.name;\n }\n\n spans.forEach(span => {\n span.setAttribute(ERROR_TYPE, errorType);\n span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: errorMessage,\n });\n });\n\n throw reason;\n })\n .finally(() => {\n spans.forEach(span => span.end());\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/knex/index.ts"],"sourcesContent":["import { KnexInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Knex';\n\nexport const instrumentKnex = generateInstrumentOnce(INTEGRATION_NAME, () => new KnexInstrumentation());\n\nconst _knexIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKnex();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Knex integration\n *\n * Capture tracing data for [Knex](https://knexjs.org/).\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n * integrations: [Sentry.knexIntegration()],\n * });\n * ```\n */\nexport const knexIntegration = defineIntegration(_knexIntegration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,MAAA;AAElB,MAAM,iBAAiB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,qBAAqB;AAEtG,MAAM,oBAAoB,MAAM;AAC9B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,cAAA,EAAe;AAAA,IACjB;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,eAAA,GAAkB,kBAAkB,gBAAgB;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/knex/index.ts"],"sourcesContent":["import { KnexInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Knex' as const;\n\nexport const instrumentKnex = generateInstrumentOnce(INTEGRATION_NAME, () => new KnexInstrumentation());\n\nconst _knexIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKnex();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Knex integration\n *\n * Capture tracing data for [Knex](https://knexjs.org/).\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n * integrations: [Sentry.knexIntegration()],\n * });\n * ```\n */\nexport const knexIntegration = defineIntegration(_knexIntegration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,MAAA;AAElB,MAAM,iBAAiB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,qBAAqB;AAEtG,MAAM,oBAAoB,MAAM;AAC9B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,cAAA,EAAe;AAAA,IACjB;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,eAAA,GAAkB,kBAAkB,gBAAgB;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
|
|
2
2
|
import { SDK_VERSION, getActiveSpan, startSpan, SPAN_KIND, SPAN_STATUS_ERROR, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
|
|
3
|
+
import { DB_STATEMENT, NET_TRANSPORT, NET_PEER_PORT, NET_PEER_NAME, DB_USER, DB_SYSTEM, DB_NAME, DB_OPERATION } from '@sentry/conventions/attributes';
|
|
3
4
|
import { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile.js';
|
|
4
|
-
import {
|
|
5
|
+
import { ATTR_DB_SQL_TABLE } from './semconv.js';
|
|
5
6
|
import { extractTableName, extractDatabaseFromConnectionString, limitLength, extractPortFromConnectionString, extractHostFromConnectionString, mapSystem, getName, getFormatter } from './utils.js';
|
|
6
7
|
|
|
7
8
|
const PACKAGE_NAME = "@sentry/instrumentation-knex";
|
|
@@ -76,15 +77,15 @@ class KnexInstrumentation extends InstrumentationBase {
|
|
|
76
77
|
const attributes = {
|
|
77
78
|
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,
|
|
78
79
|
"knex.version": moduleVersion,
|
|
79
|
-
[
|
|
80
|
+
[DB_SYSTEM]: mapSystem(this.client.driverName),
|
|
80
81
|
[ATTR_DB_SQL_TABLE]: table,
|
|
81
|
-
[
|
|
82
|
-
[
|
|
83
|
-
[
|
|
84
|
-
[
|
|
85
|
-
[
|
|
86
|
-
[
|
|
87
|
-
[
|
|
82
|
+
[DB_OPERATION]: operation,
|
|
83
|
+
[DB_USER]: config?.connection?.user,
|
|
84
|
+
[DB_NAME]: name,
|
|
85
|
+
[NET_PEER_NAME]: config?.connection?.host ?? extractHostFromConnectionString(connectionString),
|
|
86
|
+
[NET_PEER_PORT]: config?.connection?.port ?? extractPortFromConnectionString(connectionString),
|
|
87
|
+
[NET_TRANSPORT]: config?.connection?.filename === ":memory:" ? "inproc" : void 0,
|
|
88
|
+
[DB_STATEMENT]: limitLength(query?.sql, MAX_QUERY_LENGTH)
|
|
88
89
|
};
|
|
89
90
|
const parentSpan = this.builder[parentSpanSymbol] || getActiveSpan();
|
|
90
91
|
const args = arguments;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/knex/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-knex\n * - Upstream version: @opentelemetry/instrumentation-knex@0.62.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\n/* oxlint-disable typescript/no-deprecated */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n getActiveSpan,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startSpan,\n} from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport {\n ATTR_DB_NAME,\n ATTR_DB_OPERATION,\n ATTR_DB_SQL_TABLE,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_DB_USER,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n ATTR_NET_TRANSPORT,\n} from './semconv';\nimport * as utils from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-knex';\nconst ORIGIN = 'auto.db.otel.knex';\n\nconst MODULE_NAME = 'knex';\nconst SUPPORTED_VERSIONS = [\n // use \"lib/execution\" for runner.js, \"lib\" for client.js as basepath, latest tested 0.95.6\n '>=0.22.0 <4',\n // use \"lib\" as basepath\n '>=0.10.0 <0.18.0',\n '>=0.19.0 <0.22.0',\n // use \"src\" as basepath\n '>=0.18.0 <0.19.0',\n];\n\n// Max length of the query text captured in the `db.statement` attribute; \"..\" is appended when truncated.\nconst MAX_QUERY_LENGTH = 1022;\n\nconst parentSpanSymbol = Symbol('sentry.instrumentation-knex.parent-span');\n\nexport class KnexInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(MODULE_NAME, SUPPORTED_VERSIONS);\n\n module.files.push(\n this._getClientNodeModuleFileInstrumentation('src'),\n this._getClientNodeModuleFileInstrumentation('lib'),\n this._getRunnerNodeModuleFileInstrumentation('src'),\n this._getRunnerNodeModuleFileInstrumentation('lib'),\n this._getRunnerNodeModuleFileInstrumentation('lib/execution'),\n );\n\n return module;\n }\n\n private _getRunnerNodeModuleFileInstrumentation(basePath: string): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n `knex/${basePath}/runner.js`,\n SUPPORTED_VERSIONS,\n (Runner: any, moduleVersion?: string) => {\n this._ensureWrapped(Runner.prototype, 'query', this._createQueryWrapper(moduleVersion));\n return Runner;\n },\n (Runner: any) => {\n this._unwrap(Runner.prototype, 'query');\n return Runner;\n },\n );\n }\n\n private _getClientNodeModuleFileInstrumentation(basePath: string): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n `knex/${basePath}/client.js`,\n SUPPORTED_VERSIONS,\n (Client: any) => {\n this._ensureWrapped(Client.prototype, 'queryBuilder', this._storeContext.bind(this));\n this._ensureWrapped(Client.prototype, 'schemaBuilder', this._storeContext.bind(this));\n this._ensureWrapped(Client.prototype, 'raw', this._storeContext.bind(this));\n return Client;\n },\n (Client: any) => {\n this._unwrap(Client.prototype, 'queryBuilder');\n this._unwrap(Client.prototype, 'schemaBuilder');\n this._unwrap(Client.prototype, 'raw');\n return Client;\n },\n );\n }\n\n private _createQueryWrapper(moduleVersion?: string) {\n return function wrapQuery(original: (...args: any[]) => any) {\n return function wrapped_logging_method(this: any, query: any) {\n const config = this.client.config;\n\n const table = utils.extractTableName(this.builder);\n const operation = query?.method;\n const connectionString = config?.connection?.connectionString;\n const name =\n config?.connection?.filename ||\n config?.connection?.database ||\n utils.extractDatabaseFromConnectionString(connectionString);\n\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n 'knex.version': moduleVersion,\n [ATTR_DB_SYSTEM]: utils.mapSystem(this.client.driverName),\n [ATTR_DB_SQL_TABLE]: table,\n [ATTR_DB_OPERATION]: operation,\n [ATTR_DB_USER]: config?.connection?.user,\n [ATTR_DB_NAME]: name,\n [ATTR_NET_PEER_NAME]: config?.connection?.host ?? utils.extractHostFromConnectionString(connectionString),\n [ATTR_NET_PEER_PORT]: config?.connection?.port ?? utils.extractPortFromConnectionString(connectionString),\n [ATTR_NET_TRANSPORT]: config?.connection?.filename === ':memory:' ? 'inproc' : undefined,\n [ATTR_DB_STATEMENT]: utils.limitLength(query?.sql, MAX_QUERY_LENGTH),\n };\n\n // The query builder captures the span active when it was created (see `_storeContext`).\n // `onlyIfParent` ensures we only instrument queries that run as part of an existing trace.\n const parentSpan: Span | undefined = this.builder[parentSpanSymbol] || getActiveSpan();\n\n const args = arguments;\n return startSpan(\n {\n name: utils.getName(name, operation, table),\n kind: SPAN_KIND.CLIENT,\n attributes,\n parentSpan,\n onlyIfParent: true,\n },\n span =>\n // `Runner.query` returns a real, already-executing Promise, so it is safe to let\n // `startSpan` await it and auto-end the span.\n original.apply(this, args).catch((err: any) => {\n const formatter = utils.getFormatter(this);\n const fullQuery = formatter(query.sql, query.bindings || []);\n const message = err.message.replace(`${fullQuery} - `, '');\n span.setStatus({ code: SPAN_STATUS_ERROR, message });\n throw err;\n }),\n );\n };\n };\n }\n\n private _storeContext(original: (...args: any[]) => any) {\n return function wrapped_logging_method(this: any) {\n const builder = original.apply(this, arguments);\n // Capture the span that is active when the query builder is created. The query often executes\n // in a different async context, so we reuse this span as the parent when the query runs.\n Object.defineProperty(builder, parentSpanSymbol, {\n value: getActiveSpan(),\n });\n return builder;\n };\n }\n\n private _ensureWrapped(obj: any, methodName: string, wrapper: (original: any) => any): void {\n if (isWrapped(obj[methodName])) {\n this._unwrap(obj, methodName);\n }\n this._wrap(obj, methodName, wrapper);\n }\n}\n"],"names":["utils.extractTableName","utils.extractDatabaseFromConnectionString","utils.mapSystem","utils.extractHostFromConnectionString","utils.extractPortFromConnectionString","utils.limitLength","utils.getName","utils.getFormatter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/knex/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-knex\n * - Upstream version: @opentelemetry/instrumentation-knex@0.62.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\n/* oxlint-disable typescript/no-deprecated */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n getActiveSpan,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startSpan,\n} from '@sentry/core';\nimport {\n DB_NAME,\n DB_OPERATION,\n DB_STATEMENT,\n DB_SYSTEM,\n DB_USER,\n NET_PEER_NAME,\n NET_PEER_PORT,\n NET_TRANSPORT,\n} from '@sentry/conventions/attributes';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport { ATTR_DB_SQL_TABLE } from './semconv';\nimport * as utils from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-knex';\nconst ORIGIN = 'auto.db.otel.knex';\n\nconst MODULE_NAME = 'knex';\nconst SUPPORTED_VERSIONS = [\n // use \"lib/execution\" for runner.js, \"lib\" for client.js as basepath, latest tested 0.95.6\n '>=0.22.0 <4',\n // use \"lib\" as basepath\n '>=0.10.0 <0.18.0',\n '>=0.19.0 <0.22.0',\n // use \"src\" as basepath\n '>=0.18.0 <0.19.0',\n];\n\n// Max length of the query text captured in the `db.statement` attribute; \"..\" is appended when truncated.\nconst MAX_QUERY_LENGTH = 1022;\n\nconst parentSpanSymbol = Symbol('sentry.instrumentation-knex.parent-span');\n\nexport class KnexInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(MODULE_NAME, SUPPORTED_VERSIONS);\n\n module.files.push(\n this._getClientNodeModuleFileInstrumentation('src'),\n this._getClientNodeModuleFileInstrumentation('lib'),\n this._getRunnerNodeModuleFileInstrumentation('src'),\n this._getRunnerNodeModuleFileInstrumentation('lib'),\n this._getRunnerNodeModuleFileInstrumentation('lib/execution'),\n );\n\n return module;\n }\n\n private _getRunnerNodeModuleFileInstrumentation(basePath: string): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n `knex/${basePath}/runner.js`,\n SUPPORTED_VERSIONS,\n (Runner: any, moduleVersion?: string) => {\n this._ensureWrapped(Runner.prototype, 'query', this._createQueryWrapper(moduleVersion));\n return Runner;\n },\n (Runner: any) => {\n this._unwrap(Runner.prototype, 'query');\n return Runner;\n },\n );\n }\n\n private _getClientNodeModuleFileInstrumentation(basePath: string): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n `knex/${basePath}/client.js`,\n SUPPORTED_VERSIONS,\n (Client: any) => {\n this._ensureWrapped(Client.prototype, 'queryBuilder', this._storeContext.bind(this));\n this._ensureWrapped(Client.prototype, 'schemaBuilder', this._storeContext.bind(this));\n this._ensureWrapped(Client.prototype, 'raw', this._storeContext.bind(this));\n return Client;\n },\n (Client: any) => {\n this._unwrap(Client.prototype, 'queryBuilder');\n this._unwrap(Client.prototype, 'schemaBuilder');\n this._unwrap(Client.prototype, 'raw');\n return Client;\n },\n );\n }\n\n private _createQueryWrapper(moduleVersion?: string) {\n return function wrapQuery(original: (...args: any[]) => any) {\n return function wrapped_logging_method(this: any, query: any) {\n const config = this.client.config;\n\n const table = utils.extractTableName(this.builder);\n const operation = query?.method;\n const connectionString = config?.connection?.connectionString;\n const name =\n config?.connection?.filename ||\n config?.connection?.database ||\n utils.extractDatabaseFromConnectionString(connectionString);\n\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n 'knex.version': moduleVersion,\n [DB_SYSTEM]: utils.mapSystem(this.client.driverName),\n [ATTR_DB_SQL_TABLE]: table,\n [DB_OPERATION]: operation,\n [DB_USER]: config?.connection?.user,\n [DB_NAME]: name,\n [NET_PEER_NAME]: config?.connection?.host ?? utils.extractHostFromConnectionString(connectionString),\n [NET_PEER_PORT]: config?.connection?.port ?? utils.extractPortFromConnectionString(connectionString),\n [NET_TRANSPORT]: config?.connection?.filename === ':memory:' ? 'inproc' : undefined,\n [DB_STATEMENT]: utils.limitLength(query?.sql, MAX_QUERY_LENGTH),\n };\n\n // The query builder captures the span active when it was created (see `_storeContext`).\n // `onlyIfParent` ensures we only instrument queries that run as part of an existing trace.\n const parentSpan: Span | undefined = this.builder[parentSpanSymbol] || getActiveSpan();\n\n const args = arguments;\n return startSpan(\n {\n name: utils.getName(name, operation, table),\n kind: SPAN_KIND.CLIENT,\n attributes,\n parentSpan,\n onlyIfParent: true,\n },\n span =>\n // `Runner.query` returns a real, already-executing Promise, so it is safe to let\n // `startSpan` await it and auto-end the span.\n original.apply(this, args).catch((err: any) => {\n const formatter = utils.getFormatter(this);\n const fullQuery = formatter(query.sql, query.bindings || []);\n const message = err.message.replace(`${fullQuery} - `, '');\n span.setStatus({ code: SPAN_STATUS_ERROR, message });\n throw err;\n }),\n );\n };\n };\n }\n\n private _storeContext(original: (...args: any[]) => any) {\n return function wrapped_logging_method(this: any) {\n const builder = original.apply(this, arguments);\n // Capture the span that is active when the query builder is created. The query often executes\n // in a different async context, so we reuse this span as the parent when the query runs.\n Object.defineProperty(builder, parentSpanSymbol, {\n value: getActiveSpan(),\n });\n return builder;\n };\n }\n\n private _ensureWrapped(obj: any, methodName: string, wrapper: (original: any) => any): void {\n if (isWrapped(obj[methodName])) {\n this._unwrap(obj, methodName);\n }\n this._wrap(obj, methodName, wrapper);\n }\n}\n"],"names":["utils.extractTableName","utils.extractDatabaseFromConnectionString","utils.mapSystem","utils.extractHostFromConnectionString","utils.extractPortFromConnectionString","utils.limitLength","utils.getName","utils.getFormatter"],"mappings":"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"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
const ATTR_DB_NAME = "db.name";
|
|
2
|
-
const ATTR_DB_OPERATION = "db.operation";
|
|
3
1
|
const ATTR_DB_SQL_TABLE = "db.sql.table";
|
|
4
|
-
const ATTR_DB_STATEMENT = "db.statement";
|
|
5
|
-
const ATTR_DB_SYSTEM = "db.system";
|
|
6
|
-
const ATTR_DB_USER = "db.user";
|
|
7
|
-
const ATTR_NET_PEER_NAME = "net.peer.name";
|
|
8
|
-
const ATTR_NET_PEER_PORT = "net.peer.port";
|
|
9
|
-
const ATTR_NET_TRANSPORT = "net.transport";
|
|
10
2
|
const DB_SYSTEM_NAME_VALUE_SQLITE = "sqlite";
|
|
11
3
|
const DB_SYSTEM_NAME_VALUE_POSTGRESQL = "postgresql";
|
|
12
4
|
|
|
13
|
-
export {
|
|
5
|
+
export { ATTR_DB_SQL_TABLE, DB_SYSTEM_NAME_VALUE_POSTGRESQL, DB_SYSTEM_NAME_VALUE_SQLITE };
|
|
14
6
|
//# sourceMappingURL=semconv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/knex/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-knex\n * - Upstream version: @opentelemetry/instrumentation-knex@0.62.0\n */\n\n/**\n * @deprecated Replaced by `db.
|
|
1
|
+
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/knex/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-knex\n * - Upstream version: @opentelemetry/instrumentation-knex@0.62.0\n */\n\n/**\n * @deprecated Replaced by `db.collection.name`.\n */\nexport const ATTR_DB_SQL_TABLE = 'db.sql.table' as const;\n\nexport const DB_SYSTEM_NAME_VALUE_SQLITE = 'sqlite' as const;\n\nexport const DB_SYSTEM_NAME_VALUE_POSTGRESQL = 'postgresql' as const;\n"],"names":[],"mappings":"AAYO,MAAM,iBAAA,GAAoB;AAE1B,MAAM,2BAAA,GAA8B;AAEpC,MAAM,+BAAA,GAAkC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/koa/index.ts"],"sourcesContent":["import type { KoaInstrumentationConfig, KoaLayerType } from './vendored/types';\nimport { KoaInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { captureException, defineIntegration } from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\n\ninterface KoaOptions {\n /**\n * Ignore layers of specified types\n */\n ignoreLayersType?: Array<'middleware' | 'router'>;\n}\n\nconst INTEGRATION_NAME = 'Koa';\n\nexport const instrumentKoa = generateInstrumentOnce(\n INTEGRATION_NAME,\n KoaInstrumentation,\n (options: KoaOptions = {}) => {\n return {\n ignoreLayersType: options.ignoreLayersType as KoaLayerType[],\n } satisfies KoaInstrumentationConfig;\n },\n);\n\nconst _koaIntegration = ((options: KoaOptions = {}) => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKoa(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Koa](https://koajs.com/).\n *\n * If you also want to capture errors, you need to call `setupKoaErrorHandler(app)` after you set up your Koa server.\n *\n * For more information, see the [koa documentation](https://docs.sentry.io/platforms/javascript/guides/koa/).\n *\n * @param {KoaOptions} options Configuration options for the Koa integration.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.koaIntegration()],\n * })\n * ```\n *\n * @example\n * ```javascript\n * // To ignore middleware spans\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [\n * Sentry.koaIntegration({\n * ignoreLayersType: ['middleware']\n * })\n * ],\n * })\n * ```\n */\nexport const koaIntegration = defineIntegration(_koaIntegration);\n\n/**\n * Add an Koa error handler to capture errors to Sentry.\n *\n * The error handler must be before any other middleware and after all controllers.\n *\n * @param app The Express instances\n * @param options {ExpressHandlerOptions} Configuration options for the handler\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const Koa = require(\"koa\");\n *\n * const app = new Koa();\n *\n * Sentry.setupKoaErrorHandler(app);\n *\n * // Add your routes, etc.\n *\n * app.listen(3000);\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setupKoaErrorHandler = (app: { use: (arg0: (ctx: any, next: any) => Promise<void>) => void }): void => {\n app.use(async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n captureException(error, {\n mechanism: {\n handled: false,\n type: 'auto.middleware.koa',\n },\n });\n throw error;\n }\n });\n\n ensureIsWrapped(app.use, 'koa');\n};\n"],"names":[],"mappings":";;;;AAaA,MAAM,gBAAA,GAAmB,KAAA;AAElB,MAAM,aAAA,GAAgB,sBAAA;AAAA,EAC3B,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,CAAC,OAAA,GAAsB,EAAC,KAAM;AAC5B,IAAA,OAAO;AAAA,MACL,kBAAkB,OAAA,CAAQ;AAAA,KAC5B;AAAA,EACF;AACF;AAEA,MAAM,eAAA,IAAmB,CAAC,OAAA,GAAsB,EAAC,KAAM;AACrD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,aAAA,CAAc,OAAO,CAAA;AAAA,IACvB;AAAA,GACF;AACF,CAAA,CAAA;AAkCO,MAAM,cAAA,GAAiB,kBAAkB,eAAe;AAyBxD,MAAM,oBAAA,GAAuB,CAAC,GAAA,KAA+E;AAClH,EAAA,GAAA,CAAI,GAAA,CAAI,OAAO,GAAA,EAAK,IAAA,KAAS;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,SAAS,KAAA,EAAO;AACd,MAAA,gBAAA,CAAiB,KAAA,EAAO;AAAA,QACtB,SAAA,EAAW;AAAA,UACT,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM;AAAA;AACR,OACD,CAAA;AACD,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAED,EAAA,eAAA,CAAgB,GAAA,CAAI,KAAK,KAAK,CAAA;AAChC;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/koa/index.ts"],"sourcesContent":["import type { KoaInstrumentationConfig, KoaLayerType } from './vendored/types';\nimport { KoaInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { captureException, defineIntegration } from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\n\ninterface KoaOptions {\n /**\n * Ignore layers of specified types\n */\n ignoreLayersType?: Array<'middleware' | 'router'>;\n}\n\nconst INTEGRATION_NAME = 'Koa' as const;\n\nexport const instrumentKoa = generateInstrumentOnce(\n INTEGRATION_NAME,\n KoaInstrumentation,\n (options: KoaOptions = {}) => {\n return {\n ignoreLayersType: options.ignoreLayersType as KoaLayerType[],\n } satisfies KoaInstrumentationConfig;\n },\n);\n\nconst _koaIntegration = ((options: KoaOptions = {}) => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentKoa(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Koa](https://koajs.com/).\n *\n * If you also want to capture errors, you need to call `setupKoaErrorHandler(app)` after you set up your Koa server.\n *\n * For more information, see the [koa documentation](https://docs.sentry.io/platforms/javascript/guides/koa/).\n *\n * @param {KoaOptions} options Configuration options for the Koa integration.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.koaIntegration()],\n * })\n * ```\n *\n * @example\n * ```javascript\n * // To ignore middleware spans\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [\n * Sentry.koaIntegration({\n * ignoreLayersType: ['middleware']\n * })\n * ],\n * })\n * ```\n */\nexport const koaIntegration = defineIntegration(_koaIntegration);\n\n/**\n * Add an Koa error handler to capture errors to Sentry.\n *\n * The error handler must be before any other middleware and after all controllers.\n *\n * @param app The Express instances\n * @param options {ExpressHandlerOptions} Configuration options for the handler\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const Koa = require(\"koa\");\n *\n * const app = new Koa();\n *\n * Sentry.setupKoaErrorHandler(app);\n *\n * // Add your routes, etc.\n *\n * app.listen(3000);\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setupKoaErrorHandler = (app: { use: (arg0: (ctx: any, next: any) => Promise<void>) => void }): void => {\n app.use(async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n captureException(error, {\n mechanism: {\n handled: false,\n type: 'auto.middleware.koa',\n },\n });\n throw error;\n }\n });\n\n ensureIsWrapped(app.use, 'koa');\n};\n"],"names":[],"mappings":";;;;AAaA,MAAM,gBAAA,GAAmB,KAAA;AAElB,MAAM,aAAA,GAAgB,sBAAA;AAAA,EAC3B,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,CAAC,OAAA,GAAsB,EAAC,KAAM;AAC5B,IAAA,OAAO;AAAA,MACL,kBAAkB,OAAA,CAAQ;AAAA,KAC5B;AAAA,EACF;AACF;AAEA,MAAM,eAAA,IAAmB,CAAC,OAAA,GAAsB,EAAC,KAAM;AACrD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,aAAA,CAAc,OAAO,CAAA;AAAA,IACvB;AAAA,GACF;AACF,CAAA,CAAA;AAkCO,MAAM,cAAA,GAAiB,kBAAkB,eAAe;AAyBxD,MAAM,oBAAA,GAAuB,CAAC,GAAA,KAA+E;AAClH,EAAA,GAAA,CAAI,GAAA,CAAI,OAAO,GAAA,EAAK,IAAA,KAAS;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,SAAS,KAAA,EAAO;AACd,MAAA,gBAAA,CAAiB,KAAA,EAAO;AAAA,QACtB,SAAA,EAAW;AAAA,UACT,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM;AAAA;AACR,OACD,CAAA;AACD,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAED,EAAA,eAAA,CAAgB,GAAA,CAAI,KAAK,KAAK,CAAA;AAChC;;;;"}
|
|
@@ -2,7 +2,7 @@ import * as api from '@opentelemetry/api';
|
|
|
2
2
|
import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
|
|
3
3
|
import { KoaLayerType } from './types.js';
|
|
4
4
|
import { SDK_VERSION, startSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getIsolationScope, getDefaultIsolationScope, debug } from '@sentry/core';
|
|
5
|
-
import {
|
|
5
|
+
import { HTTP_ROUTE } from '@sentry/conventions/attributes';
|
|
6
6
|
import { isLayerIgnored, getMiddlewareMetadata } from './utils.js';
|
|
7
7
|
import { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute.js';
|
|
8
8
|
import { DEBUG_BUILD } from '../../../../debug-build.js';
|
|
@@ -107,7 +107,7 @@ class KoaInstrumentation extends InstrumentationBase {
|
|
|
107
107
|
}
|
|
108
108
|
},
|
|
109
109
|
() => {
|
|
110
|
-
const route = metadata.attributes[
|
|
110
|
+
const route = metadata.attributes[HTTP_ROUTE];
|
|
111
111
|
if (getIsolationScope() === getDefaultIsolationScope()) {
|
|
112
112
|
DEBUG_BUILD && debug.warn("Isolation scope is default isolation scope - skipping setting transactionName");
|
|
113
113
|
} else if (route) {
|