@sentry/node 7.104.0 → 8.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +114 -38
- package/cjs/cron/index.js +15 -0
- package/cjs/cron/index.js.map +1 -0
- package/cjs/index.js +79 -98
- package/cjs/index.js.map +1 -1
- package/cjs/integrations/anr/index.js +4 -30
- package/cjs/integrations/anr/index.js.map +1 -1
- package/cjs/integrations/anr/worker-script.js +2 -2
- package/cjs/integrations/console.js +2 -13
- package/cjs/integrations/console.js.map +1 -1
- package/cjs/integrations/context.js +2 -16
- package/cjs/integrations/context.js.map +1 -1
- package/cjs/integrations/contextlines.js +6 -23
- package/cjs/integrations/contextlines.js.map +1 -1
- package/cjs/integrations/http.js +103 -354
- package/cjs/integrations/http.js.map +1 -1
- package/cjs/integrations/local-variables/index.js +0 -10
- package/cjs/integrations/local-variables/index.js.map +1 -1
- package/cjs/integrations/local-variables/local-variables-sync.js +29 -24
- package/cjs/integrations/local-variables/local-variables-sync.js.map +1 -1
- package/cjs/integrations/modules.js +19 -30
- package/cjs/integrations/modules.js.map +1 -1
- package/cjs/integrations/node-fetch.js +82 -0
- package/cjs/integrations/node-fetch.js.map +1 -0
- package/cjs/integrations/onuncaughtexception.js +15 -30
- package/cjs/integrations/onuncaughtexception.js.map +1 -1
- package/cjs/integrations/onunhandledrejection.js +3 -17
- package/cjs/integrations/onunhandledrejection.js.map +1 -1
- package/cjs/integrations/spotlight.js +4 -22
- package/cjs/integrations/spotlight.js.map +1 -1
- package/cjs/integrations/tracing/express.js +103 -0
- package/cjs/integrations/tracing/express.js.map +1 -0
- package/cjs/integrations/tracing/fastify.js +33 -0
- package/cjs/integrations/tracing/fastify.js.map +1 -0
- package/cjs/integrations/tracing/graphql.js +34 -0
- package/cjs/integrations/tracing/graphql.js.map +1 -0
- package/cjs/integrations/tracing/hapi/index.js +81 -0
- package/cjs/integrations/tracing/hapi/index.js.map +1 -0
- package/cjs/integrations/tracing/index.js +37 -0
- package/cjs/integrations/tracing/index.js.map +1 -0
- package/cjs/integrations/tracing/koa.js +21 -0
- package/cjs/integrations/tracing/koa.js.map +1 -0
- package/cjs/integrations/tracing/mongo.js +33 -0
- package/cjs/integrations/tracing/mongo.js.map +1 -0
- package/cjs/integrations/tracing/mongoose.js +33 -0
- package/cjs/integrations/tracing/mongoose.js.map +1 -0
- package/cjs/integrations/tracing/mysql.js +26 -0
- package/cjs/integrations/tracing/mysql.js.map +1 -0
- package/cjs/integrations/tracing/mysql2.js +33 -0
- package/cjs/integrations/tracing/mysql2.js.map +1 -0
- package/cjs/integrations/tracing/nest.js +26 -0
- package/cjs/integrations/tracing/nest.js.map +1 -0
- package/cjs/integrations/tracing/postgres.js +34 -0
- package/cjs/integrations/tracing/postgres.js.map +1 -0
- package/cjs/integrations/tracing/prisma.js +33 -0
- package/cjs/integrations/tracing/prisma.js.map +1 -0
- package/cjs/nodeVersion.js +5 -1
- package/cjs/nodeVersion.js.map +1 -1
- package/cjs/otel/contextManager.js +16 -0
- package/cjs/otel/contextManager.js.map +1 -0
- package/cjs/proxy/index.js +1 -2
- package/cjs/proxy/index.js.map +1 -1
- package/cjs/sdk/api.js +74 -0
- package/cjs/sdk/api.js.map +1 -0
- package/cjs/sdk/client.js +57 -0
- package/cjs/sdk/client.js.map +1 -0
- package/cjs/sdk/hub.js +104 -0
- package/cjs/sdk/hub.js.map +1 -0
- package/cjs/sdk/init.js +224 -0
- package/cjs/sdk/init.js.map +1 -0
- package/cjs/sdk/initOtel.js +70 -0
- package/cjs/sdk/initOtel.js.map +1 -0
- package/cjs/sdk/scope.js +18 -0
- package/cjs/sdk/scope.js.map +1 -0
- package/cjs/transports/http.js +2 -3
- package/cjs/transports/http.js.map +1 -1
- package/cjs/utils/addOriginToSpan.js +11 -0
- package/cjs/utils/addOriginToSpan.js.map +1 -0
- package/cjs/{integrations/utils → utils}/errorhandling.js +2 -1
- package/cjs/utils/errorhandling.js.map +1 -0
- package/cjs/utils/getRequestUrl.js +18 -0
- package/cjs/utils/getRequestUrl.js.map +1 -0
- package/cjs/utils/module.js.map +1 -0
- package/esm/cron/index.js +13 -0
- package/esm/cron/index.js.map +1 -0
- package/esm/index.js +28 -48
- package/esm/index.js.map +1 -1
- package/esm/integrations/anr/index.js +7 -32
- package/esm/integrations/anr/index.js.map +1 -1
- package/esm/integrations/anr/worker-script.js +2 -2
- package/esm/integrations/console.js +4 -14
- package/esm/integrations/console.js.map +1 -1
- package/esm/integrations/context.js +4 -17
- package/esm/integrations/context.js.map +1 -1
- package/esm/integrations/contextlines.js +8 -25
- package/esm/integrations/contextlines.js.map +1 -1
- package/esm/integrations/http.js +105 -353
- package/esm/integrations/http.js.map +1 -1
- package/esm/integrations/local-variables/index.js +2 -11
- package/esm/integrations/local-variables/index.js.map +1 -1
- package/esm/integrations/local-variables/local-variables-sync.js +31 -25
- package/esm/integrations/local-variables/local-variables-sync.js.map +1 -1
- package/esm/integrations/modules.js +21 -31
- package/esm/integrations/modules.js.map +1 -1
- package/esm/integrations/node-fetch.js +80 -0
- package/esm/integrations/node-fetch.js.map +1 -0
- package/esm/integrations/onuncaughtexception.js +17 -31
- package/esm/integrations/onuncaughtexception.js.map +1 -1
- package/esm/integrations/onunhandledrejection.js +5 -18
- package/esm/integrations/onunhandledrejection.js.map +1 -1
- package/esm/integrations/spotlight.js +3 -20
- package/esm/integrations/spotlight.js.map +1 -1
- package/esm/integrations/tracing/express.js +96 -0
- package/esm/integrations/tracing/express.js.map +1 -0
- package/esm/integrations/tracing/fastify.js +31 -0
- package/esm/integrations/tracing/fastify.js.map +1 -0
- package/esm/integrations/tracing/graphql.js +32 -0
- package/esm/integrations/tracing/graphql.js.map +1 -0
- package/esm/integrations/tracing/hapi/index.js +77 -0
- package/esm/integrations/tracing/hapi/index.js.map +1 -0
- package/esm/integrations/tracing/index.js +35 -0
- package/esm/integrations/tracing/index.js.map +1 -0
- package/esm/integrations/tracing/koa.js +19 -0
- package/esm/integrations/tracing/koa.js.map +1 -0
- package/esm/integrations/tracing/mongo.js +31 -0
- package/esm/integrations/tracing/mongo.js.map +1 -0
- package/esm/integrations/tracing/mongoose.js +31 -0
- package/esm/integrations/tracing/mongoose.js.map +1 -0
- package/esm/integrations/tracing/mysql.js +24 -0
- package/esm/integrations/tracing/mysql.js.map +1 -0
- package/esm/integrations/tracing/mysql2.js +31 -0
- package/esm/integrations/tracing/mysql2.js.map +1 -0
- package/esm/integrations/tracing/nest.js +24 -0
- package/esm/integrations/tracing/nest.js.map +1 -0
- package/esm/integrations/tracing/postgres.js +32 -0
- package/esm/integrations/tracing/postgres.js.map +1 -0
- package/esm/integrations/tracing/prisma.js +31 -0
- package/esm/integrations/tracing/prisma.js.map +1 -0
- package/esm/nodeVersion.js +5 -2
- package/esm/nodeVersion.js.map +1 -1
- package/esm/otel/contextManager.js +14 -0
- package/esm/otel/contextManager.js.map +1 -0
- package/esm/proxy/index.js +0 -1
- package/esm/proxy/index.js.map +1 -1
- package/esm/sdk/api.js +69 -0
- package/esm/sdk/api.js.map +1 -0
- package/esm/sdk/client.js +52 -0
- package/esm/sdk/client.js.map +1 -0
- package/esm/sdk/hub.js +102 -0
- package/esm/sdk/hub.js.map +1 -0
- package/esm/sdk/init.js +221 -0
- package/esm/sdk/init.js.map +1 -0
- package/esm/sdk/initOtel.js +67 -0
- package/esm/sdk/initOtel.js.map +1 -0
- package/esm/sdk/scope.js +16 -0
- package/esm/sdk/scope.js.map +1 -0
- package/esm/transports/http.js +0 -1
- package/esm/transports/http.js.map +1 -1
- package/esm/utils/addOriginToSpan.js +9 -0
- package/esm/utils/addOriginToSpan.js.map +1 -0
- package/esm/{integrations/utils → utils}/errorhandling.js +2 -1
- package/esm/utils/errorhandling.js.map +1 -0
- package/esm/utils/getRequestUrl.js +16 -0
- package/esm/utils/getRequestUrl.js.map +1 -0
- package/esm/utils/module.js.map +1 -0
- package/package.json +31 -23
- package/types/cron/index.d.ts +10 -0
- package/types/cron/index.d.ts.map +1 -0
- package/types/index.d.ts +30 -142
- package/types/index.d.ts.map +1 -1
- package/types/integrations/anr/index.d.ts +0 -15
- package/types/integrations/anr/index.d.ts.map +1 -1
- package/types/integrations/console.d.ts +2 -8
- package/types/integrations/console.d.ts.map +1 -1
- package/types/integrations/context.d.ts +3 -18
- package/types/integrations/context.d.ts.map +1 -1
- package/types/integrations/contextlines.d.ts +8 -10
- package/types/integrations/contextlines.d.ts.map +1 -1
- package/types/integrations/http.d.ts +8 -89
- package/types/integrations/http.d.ts.map +1 -1
- package/types/integrations/local-variables/index.d.ts +0 -11
- package/types/integrations/local-variables/index.d.ts.map +1 -1
- package/types/integrations/local-variables/local-variables-async.d.ts +1 -1
- package/types/integrations/local-variables/local-variables-async.d.ts.map +1 -1
- package/types/integrations/local-variables/local-variables-sync.d.ts +1 -1
- package/types/integrations/local-variables/local-variables-sync.d.ts.map +1 -1
- package/types/integrations/modules.d.ts +1 -7
- package/types/integrations/modules.d.ts.map +1 -1
- package/types/integrations/node-fetch.d.ts +15 -0
- package/types/integrations/node-fetch.d.ts.map +1 -0
- package/types/integrations/onuncaughtexception.d.ts +3 -12
- package/types/integrations/onuncaughtexception.d.ts.map +1 -1
- package/types/integrations/onunhandledrejection.d.ts +3 -10
- package/types/integrations/onunhandledrejection.d.ts.map +1 -1
- package/types/integrations/spotlight.d.ts +1 -10
- package/types/integrations/spotlight.d.ts.map +1 -1
- package/types/integrations/tracing/express.d.ts +37 -0
- package/types/integrations/tracing/express.d.ts.map +1 -0
- package/types/integrations/tracing/fastify.d.ts +7 -0
- package/types/integrations/tracing/fastify.d.ts.map +1 -0
- package/types/integrations/tracing/graphql.d.ts +7 -0
- package/types/integrations/tracing/graphql.d.ts.map +1 -0
- package/types/integrations/tracing/hapi/index.d.ts +18 -0
- package/types/integrations/tracing/hapi/index.d.ts.map +1 -0
- package/types/integrations/{hapi → tracing/hapi}/types.d.ts +1 -2
- package/types/integrations/tracing/hapi/types.d.ts.map +1 -0
- package/types/integrations/tracing/index.d.ts +6 -0
- package/types/integrations/tracing/index.d.ts.map +1 -0
- package/types/integrations/tracing/koa.d.ts +2 -0
- package/types/integrations/tracing/koa.d.ts.map +1 -0
- package/types/integrations/tracing/mongo.d.ts +7 -0
- package/types/integrations/tracing/mongo.d.ts.map +1 -0
- package/types/integrations/tracing/mongoose.d.ts +7 -0
- package/types/integrations/tracing/mongoose.d.ts.map +1 -0
- package/types/integrations/tracing/mysql.d.ts +7 -0
- package/types/integrations/tracing/mysql.d.ts.map +1 -0
- package/types/integrations/tracing/mysql2.d.ts +7 -0
- package/types/integrations/tracing/mysql2.d.ts.map +1 -0
- package/types/integrations/tracing/nest.d.ts +7 -0
- package/types/integrations/tracing/nest.d.ts.map +1 -0
- package/types/integrations/tracing/postgres.d.ts +7 -0
- package/types/integrations/tracing/postgres.d.ts.map +1 -0
- package/types/integrations/tracing/prisma.d.ts +11 -0
- package/types/integrations/tracing/prisma.d.ts.map +1 -0
- package/types/nodeVersion.d.ts +3 -3
- package/types/nodeVersion.d.ts.map +1 -1
- package/types/otel/contextManager.d.ts +10 -0
- package/types/otel/contextManager.d.ts.map +1 -0
- package/types/proxy/helpers.d.ts +0 -1
- package/types/proxy/helpers.d.ts.map +1 -1
- package/types/proxy/index.d.ts +0 -1
- package/types/proxy/index.d.ts.map +1 -1
- package/types/sdk/api.d.ts +18 -0
- package/types/sdk/api.d.ts.map +1 -0
- package/types/sdk/client.d.ts +17 -0
- package/types/sdk/client.d.ts.map +1 -0
- package/types/sdk/globals.d.ts +6 -0
- package/types/sdk/globals.d.ts.map +1 -0
- package/types/sdk/hub.d.ts +7 -0
- package/types/sdk/hub.d.ts.map +1 -0
- package/types/sdk/init.d.ts +9 -0
- package/types/sdk/init.d.ts.map +1 -0
- package/types/sdk/initOtel.d.ts +9 -0
- package/types/sdk/initOtel.d.ts.map +1 -0
- package/types/sdk/scope.d.ts +7 -0
- package/types/sdk/scope.d.ts.map +1 -0
- package/types/transports/http-module.d.ts +2 -5
- package/types/transports/http-module.d.ts.map +1 -1
- package/types/transports/http.d.ts.map +1 -1
- package/types/types.d.ts +18 -25
- package/types/types.d.ts.map +1 -1
- package/types/utils/addOriginToSpan.d.ts +5 -0
- package/types/utils/addOriginToSpan.d.ts.map +1 -0
- package/types/utils/errorhandling.d.ts.map +1 -0
- package/types/utils/getRequestUrl.d.ts +5 -0
- package/types/utils/getRequestUrl.d.ts.map +1 -0
- package/types/utils/module.d.ts.map +1 -0
- package/types/utils/prepareEvent.d.ts +17 -0
- package/types/utils/prepareEvent.d.ts.map +1 -0
- package/types-ts3.8/cron/index.d.ts +10 -0
- package/types-ts3.8/index.d.ts +30 -142
- package/types-ts3.8/integrations/anr/index.d.ts +0 -15
- package/types-ts3.8/integrations/console.d.ts +2 -8
- package/types-ts3.8/integrations/context.d.ts +3 -18
- package/types-ts3.8/integrations/contextlines.d.ts +8 -10
- package/types-ts3.8/integrations/http.d.ts +8 -89
- package/types-ts3.8/integrations/local-variables/index.d.ts +0 -11
- package/types-ts3.8/integrations/local-variables/local-variables-async.d.ts +1 -1
- package/types-ts3.8/integrations/local-variables/local-variables-sync.d.ts +1 -1
- package/types-ts3.8/integrations/modules.d.ts +1 -7
- package/types-ts3.8/integrations/node-fetch.d.ts +15 -0
- package/types-ts3.8/integrations/onuncaughtexception.d.ts +3 -12
- package/types-ts3.8/integrations/onunhandledrejection.d.ts +3 -10
- package/types-ts3.8/integrations/spotlight.d.ts +1 -10
- package/types-ts3.8/integrations/tracing/express.d.ts +37 -0
- package/types-ts3.8/integrations/tracing/fastify.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/graphql.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/hapi/index.d.ts +18 -0
- package/types-ts3.8/integrations/{hapi → tracing/hapi}/types.d.ts +1 -2
- package/types-ts3.8/integrations/tracing/index.d.ts +6 -0
- package/types-ts3.8/integrations/tracing/koa.d.ts +2 -0
- package/types-ts3.8/integrations/tracing/mongo.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/mongoose.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/mysql.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/mysql2.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/nest.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/postgres.d.ts +7 -0
- package/types-ts3.8/integrations/tracing/prisma.d.ts +11 -0
- package/types-ts3.8/nodeVersion.d.ts +3 -3
- package/types-ts3.8/otel/contextManager.d.ts +10 -0
- package/types-ts3.8/proxy/helpers.d.ts +0 -1
- package/types-ts3.8/proxy/index.d.ts +0 -1
- package/types-ts3.8/sdk/api.d.ts +18 -0
- package/types-ts3.8/sdk/client.d.ts +17 -0
- package/types-ts3.8/sdk/globals.d.ts +6 -0
- package/types-ts3.8/sdk/hub.d.ts +7 -0
- package/types-ts3.8/sdk/init.d.ts +9 -0
- package/types-ts3.8/sdk/initOtel.d.ts +9 -0
- package/types-ts3.8/sdk/scope.d.ts +7 -0
- package/types-ts3.8/transports/http-module.d.ts +2 -4
- package/types-ts3.8/types.d.ts +18 -25
- package/types-ts3.8/utils/addOriginToSpan.d.ts +5 -0
- package/types-ts3.8/utils/getRequestUrl.d.ts +5 -0
- package/types-ts3.8/utils/prepareEvent.d.ts +17 -0
- package/cjs/async/domain.js +0 -61
- package/cjs/async/domain.js.map +0 -1
- package/cjs/async/hooks.js +0 -50
- package/cjs/async/hooks.js.map +0 -1
- package/cjs/async/index.js +0 -22
- package/cjs/async/index.js.map +0 -1
- package/cjs/client.js +0 -39
- package/cjs/client.js.map +0 -1
- package/cjs/handlers.js +0 -340
- package/cjs/handlers.js.map +0 -1
- package/cjs/integrations/anr/legacy.js +0 -29
- package/cjs/integrations/anr/legacy.js.map +0 -1
- package/cjs/integrations/hapi/index.js +0 -161
- package/cjs/integrations/hapi/index.js.map +0 -1
- package/cjs/integrations/index.js +0 -32
- package/cjs/integrations/index.js.map +0 -1
- package/cjs/integrations/undici/index.js +0 -307
- package/cjs/integrations/undici/index.js.map +0 -1
- package/cjs/integrations/utils/errorhandling.js.map +0 -1
- package/cjs/integrations/utils/http.js +0 -225
- package/cjs/integrations/utils/http.js.map +0 -1
- package/cjs/module.js.map +0 -1
- package/cjs/requestDataDeprecated.js +0 -45
- package/cjs/requestDataDeprecated.js.map +0 -1
- package/cjs/sdk.js +0 -284
- package/cjs/sdk.js.map +0 -1
- package/cjs/tracing/index.js +0 -29
- package/cjs/tracing/index.js.map +0 -1
- package/cjs/tracing/integrations.js +0 -14
- package/cjs/tracing/integrations.js.map +0 -1
- package/cjs/utils.js +0 -45
- package/cjs/utils.js.map +0 -1
- package/esm/async/domain.js +0 -56
- package/esm/async/domain.js.map +0 -1
- package/esm/async/hooks.js +0 -45
- package/esm/async/hooks.js.map +0 -1
- package/esm/async/index.js +0 -20
- package/esm/async/index.js.map +0 -1
- package/esm/client.js +0 -37
- package/esm/client.js.map +0 -1
- package/esm/handlers.js +0 -330
- package/esm/handlers.js.map +0 -1
- package/esm/integrations/anr/legacy.js +0 -27
- package/esm/integrations/anr/legacy.js.map +0 -1
- package/esm/integrations/hapi/index.js +0 -156
- package/esm/integrations/hapi/index.js.map +0 -1
- package/esm/integrations/index.js +0 -16
- package/esm/integrations/index.js.map +0 -1
- package/esm/integrations/undici/index.js +0 -301
- package/esm/integrations/undici/index.js.map +0 -1
- package/esm/integrations/utils/errorhandling.js.map +0 -1
- package/esm/integrations/utils/http.js +0 -216
- package/esm/integrations/utils/http.js.map +0 -1
- package/esm/module.js.map +0 -1
- package/esm/requestDataDeprecated.js +0 -42
- package/esm/requestDataDeprecated.js.map +0 -1
- package/esm/sdk.js +0 -274
- package/esm/sdk.js.map +0 -1
- package/esm/tracing/index.js +0 -27
- package/esm/tracing/index.js.map +0 -1
- package/esm/tracing/integrations.js +0 -2
- package/esm/tracing/integrations.js.map +0 -1
- package/esm/utils.js +0 -43
- package/esm/utils.js.map +0 -1
- package/types/async/domain.d.ts +0 -5
- package/types/async/domain.d.ts.map +0 -1
- package/types/async/hooks.d.ts +0 -5
- package/types/async/hooks.d.ts.map +0 -1
- package/types/async/index.d.ts +0 -8
- package/types/async/index.d.ts.map +0 -1
- package/types/client.d.ts +0 -16
- package/types/client.d.ts.map +0 -1
- package/types/handlers.d.ts +0 -57
- package/types/handlers.d.ts.map +0 -1
- package/types/integrations/anr/legacy.d.ts +0 -22
- package/types/integrations/anr/legacy.d.ts.map +0 -1
- package/types/integrations/hapi/index.d.ts +0 -22
- package/types/integrations/hapi/index.d.ts.map +0 -1
- package/types/integrations/hapi/types.d.ts.map +0 -1
- package/types/integrations/index.d.ts +0 -14
- package/types/integrations/index.d.ts.map +0 -1
- package/types/integrations/undici/index.d.ts +0 -58
- package/types/integrations/undici/index.d.ts.map +0 -1
- package/types/integrations/undici/types.d.ts +0 -224
- package/types/integrations/undici/types.d.ts.map +0 -1
- package/types/integrations/utils/errorhandling.d.ts.map +0 -1
- package/types/integrations/utils/http.d.ts +0 -70
- package/types/integrations/utils/http.d.ts.map +0 -1
- package/types/module.d.ts.map +0 -1
- package/types/requestDataDeprecated.d.ts +0 -45
- package/types/requestDataDeprecated.d.ts.map +0 -1
- package/types/sdk.d.ts +0 -74
- package/types/sdk.d.ts.map +0 -1
- package/types/tracing/index.d.ts +0 -6
- package/types/tracing/index.d.ts.map +0 -1
- package/types/tracing/integrations.d.ts +0 -2
- package/types/tracing/integrations.d.ts.map +0 -1
- package/types/utils.d.ts +0 -10
- package/types/utils.d.ts.map +0 -1
- package/types-ts3.8/async/domain.d.ts +0 -5
- package/types-ts3.8/async/hooks.d.ts +0 -5
- package/types-ts3.8/async/index.d.ts +0 -8
- package/types-ts3.8/client.d.ts +0 -16
- package/types-ts3.8/handlers.d.ts +0 -57
- package/types-ts3.8/integrations/anr/legacy.d.ts +0 -22
- package/types-ts3.8/integrations/hapi/index.d.ts +0 -22
- package/types-ts3.8/integrations/index.d.ts +0 -14
- package/types-ts3.8/integrations/undici/index.d.ts +0 -58
- package/types-ts3.8/integrations/undici/types.d.ts +0 -223
- package/types-ts3.8/integrations/utils/http.d.ts +0 -80
- package/types-ts3.8/requestDataDeprecated.d.ts +0 -45
- package/types-ts3.8/sdk.d.ts +0 -74
- package/types-ts3.8/tracing/index.d.ts +0 -6
- package/types-ts3.8/tracing/integrations.d.ts +0 -2
- package/types-ts3.8/utils.d.ts +0 -10
- /package/cjs/{module.js → utils/module.js} +0 -0
- /package/esm/{module.js → utils/module.js} +0 -0
- /package/types/{integrations/utils → utils}/errorhandling.d.ts +0 -0
- /package/types/{module.d.ts → utils/module.d.ts} +0 -0
- /package/types-ts3.8/{integrations/utils → utils}/errorhandling.d.ts +0 -0
- /package/types-ts3.8/{module.d.ts → utils/module.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextlines.js","sources":["../../../src/integrations/contextlines.ts"],"sourcesContent":["import { readFile } from 'fs';\nimport { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { LRUMap, addContextToFrame } from '@sentry/utils';\n\nconst FILE_CONTENT_CACHE = new LRUMap<string, string[] | null>(100);\nconst DEFAULT_LINES_OF_CONTEXT = 7;\nconst INTEGRATION_NAME = 'ContextLines';\n\n// TODO: Replace with promisify when minimum supported node >= v8\nfunction readTextFileAsync(path: string): Promise<string> {\n return new Promise((resolve, reject) => {\n readFile(path, 'utf8', (err, data) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n}\n\n/**\n * Resets the file cache. Exists for testing purposes.\n * @hidden\n */\nexport function resetFileContentCache(): void {\n FILE_CONTENT_CACHE.clear();\n}\n\ninterface ContextLinesOptions {\n /**\n * Sets the number of context lines for each frame when loading a file.\n * Defaults to 7.\n *\n * Set to 0 to disable loading and inclusion of source files.\n **/\n frameContextLines?: number;\n}\n\nconst _contextLinesIntegration = ((options: ContextLinesOptions = {}) => {\n const contextLines = options.frameContextLines !== undefined ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n return {\n name: INTEGRATION_NAME,\n // TODO v8: Remove this\n setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n processEvent(event) {\n return addSourceContext(event, contextLines);\n },\n };\n}) satisfies IntegrationFn;\n\nexport const contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n\n/**\n * Add node modules / packages to the event.\n * @deprecated Use `contextLinesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const ContextLines = convertIntegrationFnToClass(INTEGRATION_NAME, contextLinesIntegration) as IntegrationClass<\n Integration & { processEvent: (event: Event) => Promise<Event> }\n> & { new (options?: { frameContextLines?: number }): Integration };\n\nasync function addSourceContext(event: Event, contextLines: number): Promise<Event> {\n // keep a lookup map of which files we've already enqueued to read,\n // so we don't enqueue the same file multiple times which would cause multiple i/o reads\n const enqueuedReadSourceFileTasks: Record<string, number> = {};\n const readSourceFileTasks: Promise<string[] | null>[] = [];\n\n if (contextLines > 0 && event.exception?.values) {\n for (const exception of event.exception.values) {\n if (!exception.stacktrace?.frames) {\n continue;\n }\n\n // We want to iterate in reverse order as calling cache.get will bump the file in our LRU cache.\n // This ends up prioritizes source context for frames at the top of the stack instead of the bottom.\n for (let i = exception.stacktrace.frames.length - 1; i >= 0; i--) {\n const frame = exception.stacktrace.frames[i];\n // Call cache.get to bump the file to the top of the cache and ensure we have not already\n // enqueued a read operation for this filename\n if (frame.filename && !enqueuedReadSourceFileTasks[frame.filename] && !FILE_CONTENT_CACHE.get(frame.filename)) {\n readSourceFileTasks.push(_readSourceFile(frame.filename));\n enqueuedReadSourceFileTasks[frame.filename] = 1;\n }\n }\n }\n }\n\n // check if files to read > 0, if so, await all of them to be read before adding source contexts.\n // Normally, Promise.all here could be short circuited if one of the promises rejects, but we\n // are guarding from that by wrapping the i/o read operation in a try/catch.\n if (readSourceFileTasks.length > 0) {\n await Promise.all(readSourceFileTasks);\n }\n\n // Perform the same loop as above, but this time we can assume all files are in the cache\n // and attempt to add source context to frames.\n if (contextLines > 0 && event.exception?.values) {\n for (const exception of event.exception.values) {\n if (exception.stacktrace && exception.stacktrace.frames) {\n await addSourceContextToFrames(exception.stacktrace.frames, contextLines);\n }\n }\n }\n\n return event;\n}\n\n/** Adds context lines to frames */\nfunction addSourceContextToFrames(frames: StackFrame[], contextLines: number): void {\n for (const frame of frames) {\n // Only add context if we have a filename and it hasn't already been added\n if (frame.filename && frame.context_line === undefined) {\n const sourceFileLines = FILE_CONTENT_CACHE.get(frame.filename);\n\n if (sourceFileLines) {\n try {\n addContextToFrame(sourceFileLines, frame, contextLines);\n } catch (e) {\n // anomaly, being defensive in case\n // unlikely to ever happen in practice but can definitely happen in theory\n }\n }\n }\n }\n}\n\n// eslint-disable-next-line deprecation/deprecation\nexport type ContextLines = typeof ContextLines;\n\n/**\n * Reads file contents and caches them in a global LRU cache.\n * If reading fails, mark the file as null in the cache so we don't try again.\n *\n * @param filename filepath to read content from.\n */\nasync function _readSourceFile(filename: string): Promise<string[] | null> {\n const cachedFile = FILE_CONTENT_CACHE.get(filename);\n\n // We have already attempted to read this file and failed, do not try again\n if (cachedFile === null) {\n return null;\n }\n\n // We have a cache hit, return it\n if (cachedFile !== undefined) {\n return cachedFile;\n }\n\n // Guard from throwing if readFile fails, this enables us to use Promise.all and\n // not have it short circuiting if one of the promises rejects + since context lines are added\n // on a best effort basis, we want to throw here anyways.\n\n // If we made it to here, it means that our file is not cache nor marked as failed, so attempt to read it\n let content: string[] | null = null;\n try {\n const rawFileContents = await readTextFileAsync(filename);\n content = rawFileContents.split('\\n');\n } catch (_) {\n // if we fail, we will mark the file as null in the cache and short circuit next time we try to read it\n }\n\n FILE_CONTENT_CACHE.set(filename, content);\n return content;\n}\n"],"names":[],"mappings":"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AEA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA;CACA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACA;CACA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;CACA,CAAA;AACA,CAAe,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAoC;EACzE,CAAA,CAAA,CAAA,CAAA,EAAM,WAAa,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAG,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC;;EAErD,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;EACE,CAAI,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAI,EAAE;IACvB,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,IAAI;EACb;;EAEF,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;EACE,CAAI,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE;IAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,UAAU;EACnB;;EAEF,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;EACA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;EACA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;EAEA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA;EACE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAA2B,EAAA,CAAA,CAAA,CAAA,CAAI;EACnC,CAAI,CAAA,EAAA;IACF,CAAA,CAAA,CAAA,CAAA,EAAM,gBAAkB,EAAA,CAAA,CAAA,CAAA,CAAA,EAAM,iBAAiB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC;IACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAU,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC;EACrC,EAAA,CAAO,CAAA,CAAA,CAAA,EAAA,CAAA,CAAC,EAAE;IACd,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA;EACE;;EAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAG,CAAA,CAAA,CAAC,QAAQ,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC;EACzC,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,OAAO;AAChB;;"}
|
|
1
|
+
{"version":3,"file":"contextlines.js","sources":["../../../src/integrations/contextlines.ts"],"sourcesContent":["import { promises } from 'fs';\nimport { defineIntegration } from '@sentry/core';\nimport type { Event, IntegrationFn, StackFrame } from '@sentry/types';\nimport { LRUMap, addContextToFrame } from '@sentry/utils';\n\nconst FILE_CONTENT_CACHE = new LRUMap<string, string[] | null>(100);\nconst DEFAULT_LINES_OF_CONTEXT = 7;\nconst INTEGRATION_NAME = 'ContextLines';\n\nconst readFileAsync = promises.readFile;\n\n/**\n * Resets the file cache. Exists for testing purposes.\n * @hidden\n */\nexport function resetFileContentCache(): void {\n FILE_CONTENT_CACHE.clear();\n}\n\ninterface ContextLinesOptions {\n /**\n * Sets the number of context lines for each frame when loading a file.\n * Defaults to 7.\n *\n * Set to 0 to disable loading and inclusion of source files.\n **/\n frameContextLines?: number;\n}\n\n/** Exported only for tests, as a type-safe variant. */\nexport const _contextLinesIntegration = ((options: ContextLinesOptions = {}) => {\n const contextLines = options.frameContextLines !== undefined ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(event) {\n return addSourceContext(event, contextLines);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Capture the lines before and after the frame's context.\n */\nexport const contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n\nasync function addSourceContext(event: Event, contextLines: number): Promise<Event> {\n // keep a lookup map of which files we've already enqueued to read,\n // so we don't enqueue the same file multiple times which would cause multiple i/o reads\n const enqueuedReadSourceFileTasks: Record<string, number> = {};\n const readSourceFileTasks: Promise<string[] | null>[] = [];\n\n if (contextLines > 0 && event.exception?.values) {\n for (const exception of event.exception.values) {\n if (!exception.stacktrace?.frames) {\n continue;\n }\n\n // We want to iterate in reverse order as calling cache.get will bump the file in our LRU cache.\n // This ends up prioritizes source context for frames at the top of the stack instead of the bottom.\n for (let i = exception.stacktrace.frames.length - 1; i >= 0; i--) {\n const frame = exception.stacktrace.frames[i];\n // Call cache.get to bump the file to the top of the cache and ensure we have not already\n // enqueued a read operation for this filename\n if (frame.filename && !enqueuedReadSourceFileTasks[frame.filename] && !FILE_CONTENT_CACHE.get(frame.filename)) {\n readSourceFileTasks.push(_readSourceFile(frame.filename));\n enqueuedReadSourceFileTasks[frame.filename] = 1;\n }\n }\n }\n }\n\n // check if files to read > 0, if so, await all of them to be read before adding source contexts.\n // Normally, Promise.all here could be short circuited if one of the promises rejects, but we\n // are guarding from that by wrapping the i/o read operation in a try/catch.\n if (readSourceFileTasks.length > 0) {\n await Promise.all(readSourceFileTasks);\n }\n\n // Perform the same loop as above, but this time we can assume all files are in the cache\n // and attempt to add source context to frames.\n if (contextLines > 0 && event.exception?.values) {\n for (const exception of event.exception.values) {\n if (exception.stacktrace && exception.stacktrace.frames) {\n await addSourceContextToFrames(exception.stacktrace.frames, contextLines);\n }\n }\n }\n\n return event;\n}\n\n/** Adds context lines to frames */\nfunction addSourceContextToFrames(frames: StackFrame[], contextLines: number): void {\n for (const frame of frames) {\n // Only add context if we have a filename and it hasn't already been added\n if (frame.filename && frame.context_line === undefined) {\n const sourceFileLines = FILE_CONTENT_CACHE.get(frame.filename);\n\n if (sourceFileLines) {\n try {\n addContextToFrame(sourceFileLines, frame, contextLines);\n } catch (e) {\n // anomaly, being defensive in case\n // unlikely to ever happen in practice but can definitely happen in theory\n }\n }\n }\n }\n}\n\n/**\n * Reads file contents and caches them in a global LRU cache.\n * If reading fails, mark the file as null in the cache so we don't try again.\n *\n * @param filename filepath to read content from.\n */\nasync function _readSourceFile(filename: string): Promise<string[] | null> {\n const cachedFile = FILE_CONTENT_CACHE.get(filename);\n\n // We have already attempted to read this file and failed, do not try again\n if (cachedFile === null) {\n return null;\n }\n\n // We have a cache hit, return it\n if (cachedFile !== undefined) {\n return cachedFile;\n }\n\n // Guard from throwing if readFile fails, this enables us to use Promise.all and\n // not have it short circuiting if one of the promises rejects + since context lines are added\n // on a best effort basis, we want to throw here anyways.\n\n // If we made it to here, it means that our file is not cache nor marked as failed, so attempt to read it\n let content: string[] | null = null;\n try {\n const rawFileContents = await readFileAsync(filename, 'utf-8');\n content = rawFileContents.split('\\n');\n } catch (_) {\n // if we fail, we will mark the file as null in the cache and short circuit next time we try to read it\n }\n\n FILE_CONTENT_CACHE.set(filename, content);\n return content;\n}\n"],"names":[],"mappings":"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"}
|
package/esm/integrations/http.js
CHANGED
|
@@ -1,380 +1,132 @@
|
|
|
1
1
|
import { _optionalChain } from '@sentry/utils';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { SpanKind } from '@opentelemetry/api';
|
|
3
|
+
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
|
4
|
+
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
|
|
5
|
+
import { defineIntegration, isSentryRequestUrl, getIsolationScope, addBreadcrumb } from '@sentry/core';
|
|
6
|
+
import { getClient, getSpanKind, setSpanMetadata, _INTERNAL } from '@sentry/opentelemetry';
|
|
7
|
+
import { setIsolationScope } from '../sdk/scope.js';
|
|
8
|
+
import { addOriginToSpan } from '../utils/addOriginToSpan.js';
|
|
9
|
+
import { getRequestUrl } from '../utils/getRequestUrl.js';
|
|
7
10
|
|
|
8
11
|
const _httpIntegration = ((options = {}) => {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return new Http(convertedOptions) ;
|
|
25
|
-
}) ;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* The http module integration instruments Node's internal http module. It creates breadcrumbs, spans for outgoing
|
|
29
|
-
* http requests, and attaches trace data when tracing is enabled via its `tracing` option.
|
|
30
|
-
*
|
|
31
|
-
* By default, this will always create breadcrumbs, and will create spans if tracing is enabled.
|
|
32
|
-
*/
|
|
33
|
-
const httpIntegration = defineIntegration(_httpIntegration);
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* The http module integration instruments Node's internal http module. It creates breadcrumbs, transactions for outgoing
|
|
37
|
-
* http requests and attaches trace data when tracing is enabled via its `tracing` option.
|
|
38
|
-
*
|
|
39
|
-
* @deprecated Use `httpIntegration()` instead.
|
|
40
|
-
*/
|
|
41
|
-
class Http {
|
|
42
|
-
/**
|
|
43
|
-
* @inheritDoc
|
|
44
|
-
*/
|
|
45
|
-
static __initStatic() {this.id = 'Http';}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @inheritDoc
|
|
49
|
-
*/
|
|
50
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
51
|
-
__init() {this.name = Http.id;}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @inheritDoc
|
|
55
|
-
*/
|
|
56
|
-
constructor(options = {}) {Http.prototype.__init.call(this);
|
|
57
|
-
this._breadcrumbs = typeof options.breadcrumbs === 'undefined' ? true : options.breadcrumbs;
|
|
58
|
-
this._tracing = !options.tracing ? undefined : options.tracing === true ? {} : options.tracing;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* @inheritDoc
|
|
63
|
-
*/
|
|
64
|
-
setupOnce(
|
|
65
|
-
_addGlobalEventProcessor,
|
|
66
|
-
setupOnceGetCurrentHub,
|
|
67
|
-
) {
|
|
68
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
69
|
-
const clientOptions = _optionalChain([setupOnceGetCurrentHub, 'call', _ => _(), 'access', _2 => _2.getClient, 'call', _3 => _3(), 'optionalAccess', _4 => _4.getOptions, 'call', _5 => _5()]);
|
|
70
|
-
|
|
71
|
-
// If `tracing` is not explicitly set, we default this based on whether or not tracing is enabled.
|
|
72
|
-
// But for compatibility, we only do that if `enableIfHasTracingEnabled` is set.
|
|
73
|
-
const shouldCreateSpans = _shouldCreateSpans(this._tracing, clientOptions);
|
|
74
|
-
|
|
75
|
-
// No need to instrument if we don't want to track anything
|
|
76
|
-
if (!this._breadcrumbs && !shouldCreateSpans) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Do not auto-instrument for other instrumenter
|
|
81
|
-
if (clientOptions && clientOptions.instrumenter !== 'sentry') {
|
|
82
|
-
DEBUG_BUILD && logger.log('HTTP Integration is skipped because of instrumenter configuration.');
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const shouldCreateSpanForRequest = _getShouldCreateSpanForRequest(shouldCreateSpans, this._tracing, clientOptions);
|
|
87
|
-
|
|
88
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
89
|
-
const tracePropagationTargets = _optionalChain([clientOptions, 'optionalAccess', _6 => _6.tracePropagationTargets]) || _optionalChain([this, 'access', _7 => _7._tracing, 'optionalAccess', _8 => _8.tracePropagationTargets]);
|
|
90
|
-
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
92
|
-
const httpModule = require('http');
|
|
93
|
-
const wrappedHttpHandlerMaker = _createWrappedRequestMethodFactory(
|
|
94
|
-
httpModule,
|
|
95
|
-
this._breadcrumbs,
|
|
96
|
-
shouldCreateSpanForRequest,
|
|
97
|
-
tracePropagationTargets,
|
|
98
|
-
);
|
|
99
|
-
fill(httpModule, 'get', wrappedHttpHandlerMaker);
|
|
100
|
-
fill(httpModule, 'request', wrappedHttpHandlerMaker);
|
|
101
|
-
|
|
102
|
-
// NOTE: Prior to Node 9, `https` used internals of `http` module, thus we don't patch it.
|
|
103
|
-
// If we do, we'd get double breadcrumbs and double spans for `https` calls.
|
|
104
|
-
// It has been changed in Node 9, so for all versions equal and above, we patch `https` separately.
|
|
105
|
-
if (NODE_VERSION.major > 8) {
|
|
106
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
107
|
-
const httpsModule = require('https');
|
|
108
|
-
const wrappedHttpsHandlerMaker = _createWrappedRequestMethodFactory(
|
|
109
|
-
httpsModule,
|
|
110
|
-
this._breadcrumbs,
|
|
111
|
-
shouldCreateSpanForRequest,
|
|
112
|
-
tracePropagationTargets,
|
|
113
|
-
);
|
|
114
|
-
fill(httpsModule, 'get', wrappedHttpsHandlerMaker);
|
|
115
|
-
fill(httpsModule, 'request', wrappedHttpsHandlerMaker);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}Http.__initStatic();
|
|
119
|
-
|
|
120
|
-
// for ease of reading below
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Function which creates a function which creates wrapped versions of internal `request` and `get` calls within `http`
|
|
124
|
-
* and `https` modules. (NB: Not a typo - this is a creator^2!)
|
|
125
|
-
*
|
|
126
|
-
* @param breadcrumbsEnabled Whether or not to record outgoing requests as breadcrumbs
|
|
127
|
-
* @param tracingEnabled Whether or not to record outgoing requests as tracing spans
|
|
128
|
-
*
|
|
129
|
-
* @returns A function which accepts the exiting handler and returns a wrapped handler
|
|
130
|
-
*/
|
|
131
|
-
function _createWrappedRequestMethodFactory(
|
|
132
|
-
httpModule,
|
|
133
|
-
breadcrumbsEnabled,
|
|
134
|
-
shouldCreateSpanForRequest,
|
|
135
|
-
tracePropagationTargets,
|
|
136
|
-
) {
|
|
137
|
-
// We're caching results so we don't have to recompute regexp every time we create a request.
|
|
138
|
-
const createSpanUrlMap = new LRUMap(100);
|
|
139
|
-
const headersUrlMap = new LRUMap(100);
|
|
140
|
-
|
|
141
|
-
const shouldCreateSpan = (url) => {
|
|
142
|
-
if (shouldCreateSpanForRequest === undefined) {
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const cachedDecision = createSpanUrlMap.get(url);
|
|
147
|
-
if (cachedDecision !== undefined) {
|
|
148
|
-
return cachedDecision;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const decision = shouldCreateSpanForRequest(url);
|
|
152
|
-
createSpanUrlMap.set(url, decision);
|
|
153
|
-
return decision;
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
const shouldAttachTraceData = (url) => {
|
|
157
|
-
if (tracePropagationTargets === undefined) {
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
const cachedDecision = headersUrlMap.get(url);
|
|
162
|
-
if (cachedDecision !== undefined) {
|
|
163
|
-
return cachedDecision;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const decision = stringMatchesSomePattern(url, tracePropagationTargets);
|
|
167
|
-
headersUrlMap.set(url, decision);
|
|
168
|
-
return decision;
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Captures Breadcrumb based on provided request/response pair
|
|
173
|
-
*/
|
|
174
|
-
function addRequestBreadcrumb(
|
|
175
|
-
event,
|
|
176
|
-
requestSpanData,
|
|
177
|
-
req,
|
|
178
|
-
res,
|
|
179
|
-
) {
|
|
180
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
181
|
-
if (!getCurrentHub().getIntegration(Http)) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
addBreadcrumb(
|
|
186
|
-
{
|
|
187
|
-
category: 'http',
|
|
188
|
-
data: {
|
|
189
|
-
status_code: res && res.statusCode,
|
|
190
|
-
...requestSpanData,
|
|
191
|
-
},
|
|
192
|
-
type: 'http',
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
event,
|
|
196
|
-
request: req,
|
|
197
|
-
response: res,
|
|
198
|
-
},
|
|
199
|
-
);
|
|
200
|
-
}
|
|
12
|
+
const _breadcrumbs = typeof options.breadcrumbs === 'undefined' ? true : options.breadcrumbs;
|
|
13
|
+
const _ignoreOutgoingRequests = options.ignoreOutgoingRequests;
|
|
14
|
+
const _ignoreIncomingRequests = options.ignoreIncomingRequests;
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
name: 'Http',
|
|
18
|
+
setupOnce() {
|
|
19
|
+
const instrumentations = [
|
|
20
|
+
new HttpInstrumentation({
|
|
21
|
+
ignoreOutgoingRequestHook: request => {
|
|
22
|
+
const url = getRequestUrl(request);
|
|
23
|
+
|
|
24
|
+
if (!url) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
201
27
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const requestOptions = requestArgs[0];
|
|
206
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
207
|
-
const rawRequestUrl = extractRawUrl(requestOptions);
|
|
208
|
-
const requestUrl = extractUrl(requestOptions);
|
|
209
|
-
const client = getClient();
|
|
28
|
+
if (isSentryRequestUrl(url, getClient())) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
210
31
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
32
|
+
if (_ignoreOutgoingRequests && _ignoreOutgoingRequests(url)) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
215
35
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const parentSpan = getActiveSpan();
|
|
36
|
+
return false;
|
|
37
|
+
},
|
|
219
38
|
|
|
220
|
-
|
|
39
|
+
ignoreIncomingRequestHook: request => {
|
|
40
|
+
const url = getRequestUrl(request);
|
|
221
41
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
description: `${data['http.method']} ${data.url}`,
|
|
228
|
-
data,
|
|
229
|
-
})])
|
|
230
|
-
: undefined;
|
|
42
|
+
const method = _optionalChain([request, 'access', _ => _.method, 'optionalAccess', _2 => _2.toUpperCase, 'call', _3 => _3()]);
|
|
43
|
+
// We do not capture OPTIONS/HEAD requests as transactions
|
|
44
|
+
if (method === 'OPTIONS' || method === 'HEAD') {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
231
47
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
...scope.getPropagationContext(),
|
|
236
|
-
};
|
|
48
|
+
if (_ignoreIncomingRequests && _ignoreIncomingRequests(url)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
237
51
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
: generateSentryTraceHeader(traceId, spanId, sampled);
|
|
52
|
+
return false;
|
|
53
|
+
},
|
|
241
54
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
: getDynamicSamplingContextFromClient(traceId, client, scope)),
|
|
247
|
-
);
|
|
55
|
+
requireParentforOutgoingSpans: true,
|
|
56
|
+
requireParentforIncomingSpans: false,
|
|
57
|
+
requestHook: (span, req) => {
|
|
58
|
+
_updateSpan(span, req);
|
|
248
59
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
`[Tracing] Not adding sentry-trace header to outgoing request (${requestUrl}) due to mismatching tracePropagationTargets option.`,
|
|
254
|
-
);
|
|
255
|
-
}
|
|
60
|
+
// Update the isolation scope, isolate this request
|
|
61
|
+
if (getSpanKind(span) === SpanKind.SERVER) {
|
|
62
|
+
const isolationScope = getIsolationScope().clone();
|
|
63
|
+
isolationScope.setSDKProcessingMetadata({ request: req });
|
|
256
64
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (res.statusCode) {
|
|
268
|
-
setHttpStatus(requestSpan, res.statusCode);
|
|
65
|
+
const client = getClient();
|
|
66
|
+
if (client && client.getOptions().autoSessionTracking) {
|
|
67
|
+
isolationScope.setRequestSession({ status: 'ok' });
|
|
68
|
+
}
|
|
69
|
+
setIsolationScope(isolationScope);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
responseHook: (span, res) => {
|
|
73
|
+
if (_breadcrumbs) {
|
|
74
|
+
_addRequestBreadcrumb(span, res);
|
|
269
75
|
}
|
|
270
|
-
requestSpan.updateName(
|
|
271
|
-
cleanSpanDescription(spanToJSON(requestSpan).description || '', requestOptions, req) || '',
|
|
272
|
-
);
|
|
273
|
-
requestSpan.end();
|
|
274
|
-
}
|
|
275
|
-
})
|
|
276
|
-
.once('error', function () {
|
|
277
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
278
|
-
const req = this;
|
|
279
76
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
77
|
+
const client = getClient();
|
|
78
|
+
if (client && client.getOptions().autoSessionTracking) {
|
|
79
|
+
setImmediate(() => {
|
|
80
|
+
client['_captureRequestSession']();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
}),
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
registerInstrumentations({
|
|
88
|
+
instrumentations,
|
|
89
|
+
});
|
|
90
|
+
},
|
|
292
91
|
};
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
function addHeadersToRequestOptions(
|
|
296
|
-
requestOptions,
|
|
297
|
-
requestUrl,
|
|
298
|
-
sentryTraceHeader,
|
|
299
|
-
sentryBaggageHeader,
|
|
300
|
-
) {
|
|
301
|
-
// Don't overwrite sentry-trace and baggage header if it's already set.
|
|
302
|
-
const headers = requestOptions.headers || {};
|
|
303
|
-
if (headers['sentry-trace']) {
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
92
|
+
}) ;
|
|
306
93
|
|
|
307
|
-
|
|
308
|
-
logger.log(`[Tracing] Adding sentry-trace header ${sentryTraceHeader} to outgoing request to "${requestUrl}": `);
|
|
94
|
+
const httpIntegration = defineIntegration(_httpIntegration);
|
|
309
95
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
// Setting a header to `undefined` will crash in node so we only set the baggage header when it's defined
|
|
314
|
-
...(sentryBaggageHeader &&
|
|
315
|
-
sentryBaggageHeader.length > 0 && { baggage: normalizeBaggageHeader(requestOptions, sentryBaggageHeader) }),
|
|
316
|
-
};
|
|
317
|
-
}
|
|
96
|
+
/** Update the span with data we need. */
|
|
97
|
+
function _updateSpan(span, request) {
|
|
98
|
+
addOriginToSpan(span, 'auto.http.otel.http');
|
|
318
99
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
const data = {
|
|
322
|
-
url: requestUrl,
|
|
323
|
-
'http.method': method,
|
|
324
|
-
};
|
|
325
|
-
if (requestOptions.hash) {
|
|
326
|
-
// strip leading "#"
|
|
327
|
-
data['http.fragment'] = requestOptions.hash.substring(1);
|
|
100
|
+
if (getSpanKind(span) === SpanKind.SERVER) {
|
|
101
|
+
setSpanMetadata(span, { request: request });
|
|
328
102
|
}
|
|
329
|
-
if (requestOptions.search) {
|
|
330
|
-
// strip leading "?"
|
|
331
|
-
data['http.query'] = requestOptions.search.substring(1);
|
|
332
|
-
}
|
|
333
|
-
return data;
|
|
334
103
|
}
|
|
335
104
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
if (!requestOptions.headers || !requestOptions.headers.baggage) {
|
|
341
|
-
return sentryBaggageHeader;
|
|
342
|
-
} else if (!sentryBaggageHeader) {
|
|
343
|
-
return requestOptions.headers.baggage ;
|
|
344
|
-
} else if (Array.isArray(requestOptions.headers.baggage)) {
|
|
345
|
-
return [...requestOptions.headers.baggage, sentryBaggageHeader];
|
|
105
|
+
/** Add a breadcrumb for outgoing requests. */
|
|
106
|
+
function _addRequestBreadcrumb(span, response) {
|
|
107
|
+
if (getSpanKind(span) !== SpanKind.CLIENT) {
|
|
108
|
+
return;
|
|
346
109
|
}
|
|
347
|
-
// Type-cast explanation:
|
|
348
|
-
// Technically this the following could be of type `(number | string)[]` but for the sake of simplicity
|
|
349
|
-
// we say this is undefined behaviour, since it would not be baggage spec conform if the user did this.
|
|
350
|
-
return [requestOptions.headers.baggage, sentryBaggageHeader] ;
|
|
351
|
-
}
|
|
352
110
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
)
|
|
371
|
-
const handler = shouldCreateSpans
|
|
372
|
-
? // eslint-disable-next-line deprecation/deprecation
|
|
373
|
-
_optionalChain([tracingOptions, 'optionalAccess', _11 => _11.shouldCreateSpanForRequest]) || _optionalChain([clientOptions, 'optionalAccess', _12 => _12.shouldCreateSpanForRequest])
|
|
374
|
-
: () => false;
|
|
375
|
-
|
|
376
|
-
return handler;
|
|
111
|
+
const data = _INTERNAL.getRequestSpanData(span);
|
|
112
|
+
addBreadcrumb(
|
|
113
|
+
{
|
|
114
|
+
category: 'http',
|
|
115
|
+
data: {
|
|
116
|
+
status_code: response.statusCode,
|
|
117
|
+
...data,
|
|
118
|
+
},
|
|
119
|
+
type: 'http',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
event: 'response',
|
|
123
|
+
// TODO FN: Do we need access to `request` here?
|
|
124
|
+
// If we do, we'll have to use the `applyCustomAttributesOnSpan` hook instead,
|
|
125
|
+
// but this has worse context semantics than request/responseHook.
|
|
126
|
+
response,
|
|
127
|
+
},
|
|
128
|
+
);
|
|
377
129
|
}
|
|
378
130
|
|
|
379
|
-
export {
|
|
131
|
+
export { httpIntegration };
|
|
380
132
|
//# sourceMappingURL=http.js.map
|