@sentry/node 10.65.0 → 10.66.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 +10 -8
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/tracing/dataloader/index.js +7 -2
- package/build/cjs/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/utils.js +4 -2
- package/build/cjs/integrations/tracing/graphql/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/index.js +2 -2
- package/build/cjs/integrations/tracing/index.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/index.js +6 -1
- package/build/cjs/integrations/tracing/knex/index.js.map +1 -1
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +2 -2
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/cjs/sdk/index.js +10 -11
- package/build/cjs/sdk/index.js.map +1 -1
- package/build/esm/index.js +2 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/integrations/tracing/dataloader/index.js +7 -2
- package/build/esm/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/utils.js +5 -3
- package/build/esm/integrations/tracing/graphql/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/index.js +1 -1
- package/build/esm/integrations/tracing/index.js.map +1 -1
- package/build/esm/integrations/tracing/knex/index.js +6 -1
- package/build/esm/integrations/tracing/knex/index.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +2 -2
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/esm/sdk/index.js +10 -11
- package/build/esm/sdk/index.js.map +1 -1
- package/build/types/index.d.ts +2 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/dataloader/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/index.d.ts.map +1 -1
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -1
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -1
- package/build/types/sdk/index.d.ts.map +1 -1
- package/build/types-ts3.8/index.d.ts +2 -1
- package/build/types-ts3.8/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -1
- package/package.json +6 -6
- package/build/cjs/integrations/tracing/prisma/index.js +0 -109
- package/build/cjs/integrations/tracing/prisma/index.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js +0 -145
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/constants.js +0 -14
- package/build/cjs/integrations/tracing/prisma/vendored/constants.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/global.js +0 -28
- package/build/cjs/integrations/tracing/prisma/vendored/global.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js +0 -33
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/index.js +0 -106
- package/build/esm/integrations/tracing/prisma/index.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js +0 -143
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/constants.js +0 -9
- package/build/esm/integrations/tracing/prisma/vendored/constants.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/global.js +0 -24
- package/build/esm/integrations/tracing/prisma/vendored/global.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js +0 -31
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js.map +0 -1
- package/build/types/integrations/tracing/prisma/index.d.ts +0 -34
- package/build/types/integrations/tracing/prisma/index.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +0 -16
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/constants.d.ts +0 -5
- package/build/types/integrations/tracing/prisma/vendored/constants.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/global.d.ts +0 -5
- package/build/types/integrations/tracing/prisma/vendored/global.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts +0 -15
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts +0 -34
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/v5-tracing-helper.d.ts +0 -38
- package/build/types/integrations/tracing/prisma/vendored/v5-tracing-helper.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/v6-tracing-helper.d.ts +0 -31
- package/build/types/integrations/tracing/prisma/vendored/v6-tracing-helper.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/tracing/prisma/index.d.ts +0 -34
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +0 -16
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/constants.d.ts +0 -5
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/global.d.ts +0 -5
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/instrumentation.d.ts +0 -15
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/types.d.ts +0 -37
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/v5-tracing-helper.d.ts +0 -44
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/v6-tracing-helper.d.ts +0 -34
package/build/cjs/index.js
CHANGED
|
@@ -12,20 +12,20 @@ const index$j = require('./integrations/tracing/mongo/index.js');
|
|
|
12
12
|
const index$k = require('./integrations/tracing/mongoose/index.js');
|
|
13
13
|
const index$m = require('./integrations/tracing/mysql/index.js');
|
|
14
14
|
const index$l = require('./integrations/tracing/mysql2/index.js');
|
|
15
|
-
const index$
|
|
15
|
+
const index$p = require('./integrations/tracing/redis/index.js');
|
|
16
16
|
const index$o = require('./integrations/tracing/postgres/index.js');
|
|
17
17
|
const postgresjs = require('./integrations/tracing/postgresjs.js');
|
|
18
|
-
const
|
|
18
|
+
const serverUtils = require('@sentry/server-utils');
|
|
19
19
|
const index$b = require('./integrations/tracing/hapi/index.js');
|
|
20
20
|
const index$c = require('./integrations/tracing/hono/index.js');
|
|
21
21
|
const index$f = require('./integrations/tracing/koa/index.js');
|
|
22
22
|
const index$2 = require('./integrations/tracing/connect/index.js');
|
|
23
23
|
const index$e = require('./integrations/tracing/knex/index.js');
|
|
24
|
-
const index$
|
|
24
|
+
const index$q = require('./integrations/tracing/tedious/index.js');
|
|
25
25
|
const index$6 = require('./integrations/tracing/genericPool/index.js');
|
|
26
26
|
const index$3 = require('./integrations/tracing/dataloader/index.js');
|
|
27
27
|
const index = require('./integrations/tracing/amqplib/index.js');
|
|
28
|
-
const index$
|
|
28
|
+
const index$r = require('./integrations/tracing/vercelai/index.js');
|
|
29
29
|
const index$n = require('./integrations/tracing/openai/index.js');
|
|
30
30
|
const index$1 = require('./integrations/tracing/anthropic-ai/index.js');
|
|
31
31
|
const index$9 = require('./integrations/tracing/google-genai/index.js');
|
|
@@ -39,6 +39,7 @@ const growthbook = require('./integrations/featureFlagShims/growthbook.js');
|
|
|
39
39
|
const firebase = require('./integrations/tracing/firebase/firebase.js');
|
|
40
40
|
const index$8 = require('./sdk/index.js');
|
|
41
41
|
const experimentalUseDiagnosticsChannelInjection = require('./sdk/experimentalUseDiagnosticsChannelInjection.js');
|
|
42
|
+
const diagnosticsChannelInjection = require('./sdk/diagnosticsChannelInjection.js');
|
|
42
43
|
const initOtel = require('./sdk/initOtel.js');
|
|
43
44
|
const index$7 = require('./integrations/tracing/index.js');
|
|
44
45
|
const opentelemetry = require('@sentry/opentelemetry');
|
|
@@ -61,10 +62,10 @@ exports.mongoIntegration = index$j.mongoIntegration;
|
|
|
61
62
|
exports.mongooseIntegration = index$k.mongooseIntegration;
|
|
62
63
|
exports.mysqlIntegration = index$m.mysqlIntegration;
|
|
63
64
|
exports.mysql2Integration = index$l.mysql2Integration;
|
|
64
|
-
exports.redisIntegration = index$
|
|
65
|
+
exports.redisIntegration = index$p.redisIntegration;
|
|
65
66
|
exports.postgresIntegration = index$o.postgresIntegration;
|
|
66
67
|
exports.postgresJsIntegration = postgresjs.postgresJsIntegration;
|
|
67
|
-
exports.prismaIntegration =
|
|
68
|
+
exports.prismaIntegration = serverUtils.prismaIntegration;
|
|
68
69
|
exports.hapiIntegration = index$b.hapiIntegration;
|
|
69
70
|
exports.setupHapiErrorHandler = index$b.setupHapiErrorHandler;
|
|
70
71
|
exports.honoIntegration = index$c.honoIntegration;
|
|
@@ -74,11 +75,11 @@ exports.setupKoaErrorHandler = index$f.setupKoaErrorHandler;
|
|
|
74
75
|
exports.connectIntegration = index$2.connectIntegration;
|
|
75
76
|
exports.setupConnectErrorHandler = index$2.setupConnectErrorHandler;
|
|
76
77
|
exports.knexIntegration = index$e.knexIntegration;
|
|
77
|
-
exports.tediousIntegration = index$
|
|
78
|
+
exports.tediousIntegration = index$q.tediousIntegration;
|
|
78
79
|
exports.genericPoolIntegration = index$6.genericPoolIntegration;
|
|
79
80
|
exports.dataloaderIntegration = index$3.dataloaderIntegration;
|
|
80
81
|
exports.amqplibIntegration = index.amqplibIntegration;
|
|
81
|
-
exports.vercelAIIntegration = index$
|
|
82
|
+
exports.vercelAIIntegration = index$r.vercelAIIntegration;
|
|
82
83
|
exports.openAIIntegration = index$n.openAIIntegration;
|
|
83
84
|
exports.anthropicAIIntegration = index$1.anthropicAIIntegration;
|
|
84
85
|
exports.googleGenAIIntegration = index$9.googleGenAIIntegration;
|
|
@@ -98,6 +99,7 @@ exports.init = index$8.init;
|
|
|
98
99
|
exports.initWithoutDefaultIntegrations = index$8.initWithoutDefaultIntegrations;
|
|
99
100
|
exports.diagnosticsChannelInjectionIntegrations = experimentalUseDiagnosticsChannelInjection.diagnosticsChannelInjectionIntegrations;
|
|
100
101
|
exports.experimentalUseDiagnosticsChannelInjection = experimentalUseDiagnosticsChannelInjection.experimentalUseDiagnosticsChannelInjection;
|
|
102
|
+
exports.isDiagnosticsChannelInjectionEnabled = diagnosticsChannelInjection.isDiagnosticsChannelInjectionEnabled;
|
|
101
103
|
exports.initOpenTelemetry = initOtel.initOpenTelemetry;
|
|
102
104
|
exports.preloadOpenTelemetry = initOtel.preloadOpenTelemetry;
|
|
103
105
|
exports.getAutoPerformanceIntegrations = index$7.getAutoPerformanceIntegrations;
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const instrumentation = require('./vendored/instrumentation.js');
|
|
4
3
|
const core = require('@sentry/core');
|
|
5
4
|
const nodeCore = require('@sentry/node-core');
|
|
5
|
+
const orchestrion = require('@sentry/server-utils/orchestrion');
|
|
6
|
+
const instrumentation = require('./vendored/instrumentation.js');
|
|
6
7
|
|
|
7
8
|
const INTEGRATION_NAME = "Dataloader";
|
|
8
9
|
const instrumentDataloader = nodeCore.generateInstrumentOnce(INTEGRATION_NAME, () => new instrumentation.DataloaderInstrumentation());
|
|
@@ -10,7 +11,11 @@ const _dataloaderIntegration = (() => {
|
|
|
10
11
|
return {
|
|
11
12
|
name: INTEGRATION_NAME,
|
|
12
13
|
setupOnce() {
|
|
13
|
-
|
|
14
|
+
if (orchestrion.isOrchestrionInjected()) {
|
|
15
|
+
orchestrion.dataloaderChannelIntegration().setupOnce?.();
|
|
16
|
+
} else {
|
|
17
|
+
instrumentDataloader();
|
|
18
|
+
}
|
|
14
19
|
}
|
|
15
20
|
};
|
|
16
21
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/dataloader/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/dataloader/index.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { dataloaderChannelIntegration, isOrchestrionInjected } from '@sentry/server-utils/orchestrion';\nimport { DataloaderInstrumentation } from './vendored/instrumentation';\n\nconst INTEGRATION_NAME = 'Dataloader' as const;\n\nexport const instrumentDataloader = generateInstrumentOnce(INTEGRATION_NAME, () => new DataloaderInstrumentation());\n\nconst _dataloaderIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // Decide here, not in the factory: the runtime channel injection runs inside `Sentry.init()`,\n // after the integrations array has already been built, so `isOrchestrionInjected()` is only\n // reliable by `setupOnce`. When the diagnostics channels are injected (runtime hook or bundler\n // plugin), subscribe to them; otherwise fall back to the vendored OTel instrumentation.\n if (isOrchestrionInjected()) {\n dataloaderChannelIntegration().setupOnce?.();\n } else {\n instrumentDataloader();\n }\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [dataloader](https://www.npmjs.com/package/dataloader) library.\n *\n * For more information, see the [`dataloaderIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/dataloader/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.dataloaderIntegration()],\n * });\n * ```\n */\nexport const dataloaderIntegration = defineIntegration(_dataloaderIntegration);\n"],"names":["generateInstrumentOnce","DataloaderInstrumentation","isOrchestrionInjected","dataloaderChannelIntegration","defineIntegration"],"mappings":";;;;;;;AAMA,MAAM,gBAAA,GAAmB,YAAA;AAElB,MAAM,uBAAuBA,+BAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAIC,2CAA2B;AAElH,MAAM,0BAA0B,MAAM;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AAKV,MAAA,IAAIC,mCAAsB,EAAG;AAC3B,QAAAC,wCAAA,GAA+B,SAAA,IAAY;AAAA,MAC7C,CAAA,MAAO;AACL,QAAA,oBAAA,EAAqB;AAAA,MACvB;AAAA,IACF;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,qBAAA,GAAwBC,uBAAkB,sBAAsB;;;;;"}
|
|
@@ -10,8 +10,10 @@ const isPromise = (value) => {
|
|
|
10
10
|
return typeof value?.then === "function";
|
|
11
11
|
};
|
|
12
12
|
function addSpanSource(span, loc, start, end) {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
if (core.getClient()?.getDataCollectionOptions().graphQL.document === true) {
|
|
14
|
+
const source = getSourceFromLocation(loc, start, end);
|
|
15
|
+
span.setAttribute(AttributeNames.AttributeNames.SOURCE, source);
|
|
16
|
+
}
|
|
15
17
|
}
|
|
16
18
|
function createFieldIfNotExists(contextValue, info, path) {
|
|
17
19
|
let field = getField(contextValue, path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/graphql/vendored/utils.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-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n * - Span lifecycle migrated from the OpenTelemetry tracer to the @sentry/core span API\n */\n\nimport type {\n DocumentNode,\n GraphQLFieldResolver,\n GraphQLObjectType,\n GraphQLOutputType,\n GraphQLResolveInfo,\n GraphQLType,\n GraphQLUnionType,\n Location,\n Maybe,\n Token,\n} from './graphql-types';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { isObjectLike, SPAN_STATUS_ERROR, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport { AllowedOperationTypes, SpanNames, TokenKind } from './enum';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { OTEL_GRAPHQL_DATA_SYMBOL, OTEL_PATCHED_SYMBOL } from './symbols';\nimport type { GraphQLField, GraphQLPath, ObjectWithGraphQLData, OtelPatched } from './internal-types';\nimport type { GraphQLInstrumentationParsedConfig } from './types';\n\nconst OPERATION_VALUES = Object.values(AllowedOperationTypes);\n\n// https://github.com/graphql/graphql-js/blob/main/src/jsutils/isPromise.ts\nexport const isPromise = (value: any): value is Promise<unknown> => {\n return typeof value?.then === 'function';\n};\n\nexport function addSpanSource(span: Span, loc?: Location, start?: number, end?: number): void {\n const source = getSourceFromLocation(loc, start, end);\n span.setAttribute(AttributeNames.SOURCE, source);\n}\n\nfunction createFieldIfNotExists(\n contextValue: any,\n info: GraphQLResolveInfo,\n path: string[],\n): {\n field: GraphQLField;\n spanAdded: boolean;\n} {\n let field = getField(contextValue, path);\n if (field) {\n return { field, spanAdded: false };\n }\n\n const parentSpan = getParentFieldSpan(contextValue, path);\n\n field = {\n span: createResolverSpan(contextValue, info, path, parentSpan),\n };\n\n addField(contextValue, path, field);\n\n return { field, spanAdded: true };\n}\n\nfunction createResolverSpan(contextValue: any, info: GraphQLResolveInfo, path: string[], parentSpan?: Span): Span {\n const attributes: SpanAttributes = {\n [AttributeNames.FIELD_NAME]: info.fieldName,\n [AttributeNames.FIELD_PATH]: path.join('.'),\n [AttributeNames.FIELD_TYPE]: info.returnType.toString(),\n [AttributeNames.PARENT_NAME]: info.parentType.name,\n };\n\n const span = startInactiveSpan({\n name: `${SpanNames.RESOLVE} ${attributes[AttributeNames.FIELD_PATH]}`,\n attributes,\n parentSpan,\n });\n\n const document = contextValue[OTEL_GRAPHQL_DATA_SYMBOL].source;\n const fieldNode = info.fieldNodes.find(fieldNode => fieldNode.kind === 'Field');\n\n if (fieldNode) {\n addSpanSource(span, document.loc, fieldNode.loc?.start, fieldNode.loc?.end);\n }\n\n return span;\n}\n\nexport function endSpan(span: Span, error?: Error): void {\n if (error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n }\n span.end();\n}\n\nexport function getOperation(document: DocumentNode, operationName?: Maybe<string>): DefinitionNodeLike | undefined {\n if (!document || !Array.isArray(document.definitions)) {\n return undefined;\n }\n\n if (operationName) {\n return document.definitions\n .filter(definition => OPERATION_VALUES.indexOf(definition?.operation) !== -1)\n .find(definition => operationName === definition?.name?.value);\n } else {\n return document.definitions.find(definition => OPERATION_VALUES.indexOf(definition?.operation) !== -1);\n }\n}\n\ntype DefinitionNodeLike = DocumentNode['definitions'][number];\n\nfunction addField(contextValue: any, path: string[], field: GraphQLField) {\n return (contextValue[OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join('.')] = field);\n}\n\nfunction getField(contextValue: any, path: string[]): GraphQLField {\n return contextValue[OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join('.')];\n}\n\nfunction getParentFieldSpan(contextValue: any, path: string[]): Span {\n for (let i = path.length - 1; i > 0; i--) {\n const field = getField(contextValue, path.slice(0, i));\n\n if (field) {\n return field.span;\n }\n }\n\n return getRootSpan(contextValue);\n}\n\nfunction getRootSpan(contextValue: any): Span {\n return contextValue[OTEL_GRAPHQL_DATA_SYMBOL].span;\n}\n\nfunction pathToArray(path: GraphQLPath): string[] {\n const flattened: string[] = [];\n let curr: GraphQLPath | undefined = path;\n while (curr) {\n flattened.push(String(curr.key));\n curr = curr.prev;\n }\n return flattened.reverse();\n}\n\nfunction repeatBreak(i: number): string {\n return repeatChar('\\n', i);\n}\n\nfunction repeatSpace(i: number): string {\n return repeatChar(' ', i);\n}\n\nfunction repeatChar(char: string, to: number): string {\n let text = '';\n for (let i = 0; i < to; i++) {\n text += char;\n }\n return text;\n}\n\nconst KindsToBeRemoved: string[] = [TokenKind.FLOAT, TokenKind.STRING, TokenKind.INT, TokenKind.BLOCK_STRING];\n\nexport function getSourceFromLocation(loc?: Location, inputStart?: number, inputEnd?: number): string {\n let source = '';\n\n if (loc?.startToken) {\n const start = typeof inputStart === 'number' ? inputStart : loc.start;\n const end = typeof inputEnd === 'number' ? inputEnd : loc.end;\n\n let next: Token | null = loc.startToken.next;\n let previousLine: number | undefined = 1;\n while (next) {\n if (next.start < start) {\n next = next.next;\n previousLine = next?.line;\n continue;\n }\n if (next.end > end) {\n next = next.next;\n previousLine = next?.line;\n continue;\n }\n let value = next.value || next.kind;\n let space = '';\n if (KindsToBeRemoved.indexOf(next.kind) >= 0) {\n value = '*';\n }\n if (next.kind === TokenKind.STRING) {\n value = `\"${value}\"`;\n }\n if (next.kind === TokenKind.EOF) {\n value = '';\n }\n if (next.line > previousLine!) {\n source += repeatBreak(next.line - previousLine!);\n previousLine = next.line;\n space = repeatSpace(next.column - 1);\n } else {\n if (next.line === next.prev?.line) {\n space = repeatSpace(next.start - (next.prev?.end || 0));\n }\n }\n source += space + value;\n if (next) {\n next = next.next!;\n }\n }\n }\n\n return source;\n}\n\nexport function wrapFields(\n type: Maybe<GraphQLObjectType & OtelPatched>,\n getConfig: () => GraphQLInstrumentationParsedConfig,\n): void {\n if (!type || (type as any)[OTEL_PATCHED_SYMBOL]) {\n return;\n }\n const fields = type.getFields();\n\n (type as any)[OTEL_PATCHED_SYMBOL] = true;\n\n Object.keys(fields).forEach(key => {\n const field = fields[key];\n\n if (!field) {\n return;\n }\n\n if (field.resolve) {\n // The shared structural types narrow the resolver context to `ObjectWithGraphQLData`; cast back\n // to the field's own resolver type (behavior is unchanged — this is a type-only adjustment).\n field.resolve = wrapFieldResolver(getConfig, field.resolve) as GraphQLFieldResolver;\n }\n\n if (field.type) {\n const unwrappedTypes = unwrapType(field.type);\n for (const unwrappedType of unwrappedTypes) {\n wrapFields(unwrappedType as any, getConfig);\n }\n }\n });\n}\n\nfunction unwrapType(type: GraphQLOutputType): readonly GraphQLObjectType[] {\n // unwrap wrapping types (non-nullable and list types)\n if ('ofType' in type) {\n // The structural index signature widens `ofType` to `unknown`, so narrow it back explicitly.\n return unwrapType(type.ofType as GraphQLOutputType);\n }\n\n // unwrap union types\n if (isGraphQLUnionType(type)) {\n return type.getTypes();\n }\n\n // return object types\n if (isGraphQLObjectType(type)) {\n return [type];\n }\n\n return [];\n}\n\nfunction isGraphQLUnionType(type: GraphQLType): type is GraphQLUnionType {\n return 'getTypes' in type && typeof type.getTypes === 'function';\n}\n\nfunction isGraphQLObjectType(type: GraphQLType): type is GraphQLObjectType {\n return 'getFields' in type && typeof type.getFields === 'function';\n}\n\nconst handleResolveSpanError = (resolveSpan: Span, err: any, shouldEndSpan: boolean) => {\n if (!shouldEndSpan) {\n return;\n }\n resolveSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err.message,\n });\n resolveSpan.end();\n};\n\nconst handleResolveSpanSuccess = (resolveSpan: Span, shouldEndSpan: boolean) => {\n if (!shouldEndSpan) {\n return;\n }\n resolveSpan.end();\n};\n\nexport function wrapFieldResolver<TSource = any, TContext = any, TArgs = any>(\n getConfig: () => GraphQLInstrumentationParsedConfig,\n fieldResolver: Maybe<GraphQLFieldResolver<TSource, TContext, TArgs> & OtelPatched>,\n isDefaultResolver = false,\n): GraphQLFieldResolver<TSource, TContext & ObjectWithGraphQLData, TArgs> & OtelPatched {\n if ((wrappedFieldResolver as OtelPatched)[OTEL_PATCHED_SYMBOL] || typeof fieldResolver !== 'function') {\n return fieldResolver!;\n }\n\n function wrappedFieldResolver(\n this: GraphQLFieldResolver<TSource, TContext, TArgs>,\n source: TSource,\n args: TArgs,\n contextValue: TContext & ObjectWithGraphQLData,\n info: GraphQLResolveInfo,\n ) {\n if (!fieldResolver) {\n return undefined;\n }\n const config = getConfig();\n\n // follows what graphql is doing to decide if this is a trivial resolver\n // for which we don't need to create a resolve span\n if (\n config.ignoreTrivialResolveSpans &&\n isDefaultResolver &&\n (isObjectLike(source) || typeof source === 'function')\n ) {\n const property = (source as any)[info.fieldName];\n // a function execution is not trivial and should be recorder.\n // property which is not a function is just a value and we don't want a \"resolve\" span for it\n if (typeof property !== 'function') {\n return fieldResolver.call(this, source, args, contextValue, info);\n }\n }\n\n if (!contextValue[OTEL_GRAPHQL_DATA_SYMBOL]) {\n return fieldResolver.call(this, source, args, contextValue, info);\n }\n const path = pathToArray(info?.path);\n\n const { field, spanAdded } = createFieldIfNotExists(contextValue, info, path);\n const span = field.span;\n const shouldEndSpan = spanAdded;\n\n return withActiveSpan(span, () => {\n try {\n const res = fieldResolver.call(this, source, args, contextValue, info);\n if (isPromise(res)) {\n return res.then(\n (r: any) => {\n handleResolveSpanSuccess(span, shouldEndSpan);\n return r;\n },\n (err: Error) => {\n handleResolveSpanError(span, err, shouldEndSpan);\n throw err;\n },\n );\n } else {\n handleResolveSpanSuccess(span, shouldEndSpan);\n return res;\n }\n } catch (err: any) {\n handleResolveSpanError(span, err, shouldEndSpan);\n throw err;\n }\n });\n }\n\n (wrappedFieldResolver as OtelPatched)[OTEL_PATCHED_SYMBOL] = true;\n\n return wrappedFieldResolver;\n}\n"],"names":["AllowedOperationTypes","AttributeNames","startInactiveSpan","SpanNames","OTEL_GRAPHQL_DATA_SYMBOL","fieldNode","SPAN_STATUS_ERROR","TokenKind","OTEL_PATCHED_SYMBOL","isObjectLike","withActiveSpan"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/graphql/vendored/utils.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-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n * - Span lifecycle migrated from the OpenTelemetry tracer to the @sentry/core span API\n */\n\nimport type {\n DocumentNode,\n GraphQLFieldResolver,\n GraphQLObjectType,\n GraphQLOutputType,\n GraphQLResolveInfo,\n GraphQLType,\n GraphQLUnionType,\n Location,\n Maybe,\n Token,\n} from './graphql-types';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { getClient, isObjectLike, SPAN_STATUS_ERROR, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport { AllowedOperationTypes, SpanNames, TokenKind } from './enum';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { OTEL_GRAPHQL_DATA_SYMBOL, OTEL_PATCHED_SYMBOL } from './symbols';\nimport type { GraphQLField, GraphQLPath, ObjectWithGraphQLData, OtelPatched } from './internal-types';\nimport type { GraphQLInstrumentationParsedConfig } from './types';\n\nconst OPERATION_VALUES = Object.values(AllowedOperationTypes);\n\n// https://github.com/graphql/graphql-js/blob/main/src/jsutils/isPromise.ts\nexport const isPromise = (value: any): value is Promise<unknown> => {\n return typeof value?.then === 'function';\n};\n\nexport function addSpanSource(span: Span, loc?: Location, start?: number, end?: number): void {\n if (getClient()?.getDataCollectionOptions().graphQL.document === true) {\n const source = getSourceFromLocation(loc, start, end);\n span.setAttribute(AttributeNames.SOURCE, source);\n }\n}\n\nfunction createFieldIfNotExists(\n contextValue: any,\n info: GraphQLResolveInfo,\n path: string[],\n): {\n field: GraphQLField;\n spanAdded: boolean;\n} {\n let field = getField(contextValue, path);\n if (field) {\n return { field, spanAdded: false };\n }\n\n const parentSpan = getParentFieldSpan(contextValue, path);\n\n field = {\n span: createResolverSpan(contextValue, info, path, parentSpan),\n };\n\n addField(contextValue, path, field);\n\n return { field, spanAdded: true };\n}\n\nfunction createResolverSpan(contextValue: any, info: GraphQLResolveInfo, path: string[], parentSpan?: Span): Span {\n const attributes: SpanAttributes = {\n [AttributeNames.FIELD_NAME]: info.fieldName,\n [AttributeNames.FIELD_PATH]: path.join('.'),\n [AttributeNames.FIELD_TYPE]: info.returnType.toString(),\n [AttributeNames.PARENT_NAME]: info.parentType.name,\n };\n\n const span = startInactiveSpan({\n name: `${SpanNames.RESOLVE} ${attributes[AttributeNames.FIELD_PATH]}`,\n attributes,\n parentSpan,\n });\n\n const document = contextValue[OTEL_GRAPHQL_DATA_SYMBOL].source;\n const fieldNode = info.fieldNodes.find(fieldNode => fieldNode.kind === 'Field');\n\n if (fieldNode) {\n addSpanSource(span, document.loc, fieldNode.loc?.start, fieldNode.loc?.end);\n }\n\n return span;\n}\n\nexport function endSpan(span: Span, error?: Error): void {\n if (error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n }\n span.end();\n}\n\nexport function getOperation(document: DocumentNode, operationName?: Maybe<string>): DefinitionNodeLike | undefined {\n if (!document || !Array.isArray(document.definitions)) {\n return undefined;\n }\n\n if (operationName) {\n return document.definitions\n .filter(definition => OPERATION_VALUES.indexOf(definition?.operation) !== -1)\n .find(definition => operationName === definition?.name?.value);\n } else {\n return document.definitions.find(definition => OPERATION_VALUES.indexOf(definition?.operation) !== -1);\n }\n}\n\ntype DefinitionNodeLike = DocumentNode['definitions'][number];\n\nfunction addField(contextValue: any, path: string[], field: GraphQLField) {\n return (contextValue[OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join('.')] = field);\n}\n\nfunction getField(contextValue: any, path: string[]): GraphQLField {\n return contextValue[OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join('.')];\n}\n\nfunction getParentFieldSpan(contextValue: any, path: string[]): Span {\n for (let i = path.length - 1; i > 0; i--) {\n const field = getField(contextValue, path.slice(0, i));\n\n if (field) {\n return field.span;\n }\n }\n\n return getRootSpan(contextValue);\n}\n\nfunction getRootSpan(contextValue: any): Span {\n return contextValue[OTEL_GRAPHQL_DATA_SYMBOL].span;\n}\n\nfunction pathToArray(path: GraphQLPath): string[] {\n const flattened: string[] = [];\n let curr: GraphQLPath | undefined = path;\n while (curr) {\n flattened.push(String(curr.key));\n curr = curr.prev;\n }\n return flattened.reverse();\n}\n\nfunction repeatBreak(i: number): string {\n return repeatChar('\\n', i);\n}\n\nfunction repeatSpace(i: number): string {\n return repeatChar(' ', i);\n}\n\nfunction repeatChar(char: string, to: number): string {\n let text = '';\n for (let i = 0; i < to; i++) {\n text += char;\n }\n return text;\n}\n\nconst KindsToBeRemoved: string[] = [TokenKind.FLOAT, TokenKind.STRING, TokenKind.INT, TokenKind.BLOCK_STRING];\n\nexport function getSourceFromLocation(loc?: Location, inputStart?: number, inputEnd?: number): string {\n let source = '';\n\n if (loc?.startToken) {\n const start = typeof inputStart === 'number' ? inputStart : loc.start;\n const end = typeof inputEnd === 'number' ? inputEnd : loc.end;\n\n let next: Token | null = loc.startToken.next;\n let previousLine: number | undefined = 1;\n while (next) {\n if (next.start < start) {\n next = next.next;\n previousLine = next?.line;\n continue;\n }\n if (next.end > end) {\n next = next.next;\n previousLine = next?.line;\n continue;\n }\n let value = next.value || next.kind;\n let space = '';\n if (KindsToBeRemoved.indexOf(next.kind) >= 0) {\n value = '*';\n }\n if (next.kind === TokenKind.STRING) {\n value = `\"${value}\"`;\n }\n if (next.kind === TokenKind.EOF) {\n value = '';\n }\n if (next.line > previousLine!) {\n source += repeatBreak(next.line - previousLine!);\n previousLine = next.line;\n space = repeatSpace(next.column - 1);\n } else {\n if (next.line === next.prev?.line) {\n space = repeatSpace(next.start - (next.prev?.end || 0));\n }\n }\n source += space + value;\n if (next) {\n next = next.next!;\n }\n }\n }\n\n return source;\n}\n\nexport function wrapFields(\n type: Maybe<GraphQLObjectType & OtelPatched>,\n getConfig: () => GraphQLInstrumentationParsedConfig,\n): void {\n if (!type || (type as any)[OTEL_PATCHED_SYMBOL]) {\n return;\n }\n const fields = type.getFields();\n\n (type as any)[OTEL_PATCHED_SYMBOL] = true;\n\n Object.keys(fields).forEach(key => {\n const field = fields[key];\n\n if (!field) {\n return;\n }\n\n if (field.resolve) {\n // The shared structural types narrow the resolver context to `ObjectWithGraphQLData`; cast back\n // to the field's own resolver type (behavior is unchanged — this is a type-only adjustment).\n field.resolve = wrapFieldResolver(getConfig, field.resolve) as GraphQLFieldResolver;\n }\n\n if (field.type) {\n const unwrappedTypes = unwrapType(field.type);\n for (const unwrappedType of unwrappedTypes) {\n wrapFields(unwrappedType as any, getConfig);\n }\n }\n });\n}\n\nfunction unwrapType(type: GraphQLOutputType): readonly GraphQLObjectType[] {\n // unwrap wrapping types (non-nullable and list types)\n if ('ofType' in type) {\n // The structural index signature widens `ofType` to `unknown`, so narrow it back explicitly.\n return unwrapType(type.ofType as GraphQLOutputType);\n }\n\n // unwrap union types\n if (isGraphQLUnionType(type)) {\n return type.getTypes();\n }\n\n // return object types\n if (isGraphQLObjectType(type)) {\n return [type];\n }\n\n return [];\n}\n\nfunction isGraphQLUnionType(type: GraphQLType): type is GraphQLUnionType {\n return 'getTypes' in type && typeof type.getTypes === 'function';\n}\n\nfunction isGraphQLObjectType(type: GraphQLType): type is GraphQLObjectType {\n return 'getFields' in type && typeof type.getFields === 'function';\n}\n\nconst handleResolveSpanError = (resolveSpan: Span, err: any, shouldEndSpan: boolean) => {\n if (!shouldEndSpan) {\n return;\n }\n resolveSpan.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err.message,\n });\n resolveSpan.end();\n};\n\nconst handleResolveSpanSuccess = (resolveSpan: Span, shouldEndSpan: boolean) => {\n if (!shouldEndSpan) {\n return;\n }\n resolveSpan.end();\n};\n\nexport function wrapFieldResolver<TSource = any, TContext = any, TArgs = any>(\n getConfig: () => GraphQLInstrumentationParsedConfig,\n fieldResolver: Maybe<GraphQLFieldResolver<TSource, TContext, TArgs> & OtelPatched>,\n isDefaultResolver = false,\n): GraphQLFieldResolver<TSource, TContext & ObjectWithGraphQLData, TArgs> & OtelPatched {\n if ((wrappedFieldResolver as OtelPatched)[OTEL_PATCHED_SYMBOL] || typeof fieldResolver !== 'function') {\n return fieldResolver!;\n }\n\n function wrappedFieldResolver(\n this: GraphQLFieldResolver<TSource, TContext, TArgs>,\n source: TSource,\n args: TArgs,\n contextValue: TContext & ObjectWithGraphQLData,\n info: GraphQLResolveInfo,\n ) {\n if (!fieldResolver) {\n return undefined;\n }\n const config = getConfig();\n\n // follows what graphql is doing to decide if this is a trivial resolver\n // for which we don't need to create a resolve span\n if (\n config.ignoreTrivialResolveSpans &&\n isDefaultResolver &&\n (isObjectLike(source) || typeof source === 'function')\n ) {\n const property = (source as any)[info.fieldName];\n // a function execution is not trivial and should be recorder.\n // property which is not a function is just a value and we don't want a \"resolve\" span for it\n if (typeof property !== 'function') {\n return fieldResolver.call(this, source, args, contextValue, info);\n }\n }\n\n if (!contextValue[OTEL_GRAPHQL_DATA_SYMBOL]) {\n return fieldResolver.call(this, source, args, contextValue, info);\n }\n const path = pathToArray(info?.path);\n\n const { field, spanAdded } = createFieldIfNotExists(contextValue, info, path);\n const span = field.span;\n const shouldEndSpan = spanAdded;\n\n return withActiveSpan(span, () => {\n try {\n const res = fieldResolver.call(this, source, args, contextValue, info);\n if (isPromise(res)) {\n return res.then(\n (r: any) => {\n handleResolveSpanSuccess(span, shouldEndSpan);\n return r;\n },\n (err: Error) => {\n handleResolveSpanError(span, err, shouldEndSpan);\n throw err;\n },\n );\n } else {\n handleResolveSpanSuccess(span, shouldEndSpan);\n return res;\n }\n } catch (err: any) {\n handleResolveSpanError(span, err, shouldEndSpan);\n throw err;\n }\n });\n }\n\n (wrappedFieldResolver as OtelPatched)[OTEL_PATCHED_SYMBOL] = true;\n\n return wrappedFieldResolver;\n}\n"],"names":["AllowedOperationTypes","getClient","AttributeNames","startInactiveSpan","SpanNames","OTEL_GRAPHQL_DATA_SYMBOL","fieldNode","SPAN_STATUS_ERROR","TokenKind","OTEL_PATCHED_SYMBOL","isObjectLike","withActiveSpan"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
+
const serverUtils = require('@sentry/server-utils');
|
|
3
4
|
const http = require('../http.js');
|
|
4
5
|
const index$g = require('./amqplib/index.js');
|
|
5
6
|
const index$k = require('./anthropic-ai/index.js');
|
|
@@ -24,7 +25,6 @@ const index$a = require('./mysql2/index.js');
|
|
|
24
25
|
const index$j = require('./openai/index.js');
|
|
25
26
|
const index$b = require('./postgres/index.js');
|
|
26
27
|
const postgresjs = require('./postgresjs.js');
|
|
27
|
-
const index$n = require('./prisma/index.js');
|
|
28
28
|
const index$d = require('./redis/index.js');
|
|
29
29
|
const index$e = require('./tedious/index.js');
|
|
30
30
|
const index$i = require('./vercelai/index.js');
|
|
@@ -42,7 +42,7 @@ function getAutoPerformanceIntegrations() {
|
|
|
42
42
|
index$a.mysql2Integration(),
|
|
43
43
|
index$d.redisIntegration(),
|
|
44
44
|
index$b.postgresIntegration(),
|
|
45
|
-
|
|
45
|
+
serverUtils.prismaIntegration(),
|
|
46
46
|
index$2.hapiIntegration(),
|
|
47
47
|
index$5.koaIntegration(),
|
|
48
48
|
index.connectIntegration(),
|
|
@@ -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, 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 {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/integrations/tracing/index.ts"],"sourcesContent":["import type { Integration } from '@sentry/core';\nimport { prismaIntegration } from '@sentry/server-utils';\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 { 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":["expressIntegration","fastifyIntegration","graphqlIntegration","honoIntegration","mongoIntegration","mongooseIntegration","mysqlIntegration","mysql2Integration","redisIntegration","postgresIntegration","prismaIntegration","hapiIntegration","koaIntegration","connectIntegration","tediousIntegration","genericPoolIntegration","kafkaIntegration","amqplibIntegration","lruMemoizerIntegration","langChainIntegration","langGraphIntegration","vercelAIIntegration","openAIIntegration","anthropicAIIntegration","googleGenAIIntegration","postgresJsIntegration","firebaseIntegration","instrumentSentryHttp","instrumentExpress","instrumentConnect","instrumentFastifyV3","instrumentHapi","instrumentHono","instrumentKafka","instrumentKoa","instrumentLruMemoizer","instrumentMongo","instrumentMongoose","instrumentMysql","instrumentMysql2","instrumentPostgres","instrumentGraphql","instrumentRedis","instrumentTedious","instrumentGenericPool","instrumentAmqplib","instrumentLangChain","instrumentVercelAi","instrumentOpenAi","instrumentPostgresJs","instrumentFirebase","instrumentAnthropicAi","instrumentGoogleGenAI","instrumentLangGraph"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCO,SAAS,8BAAA,GAAgD;AAC9D,EAAA,OAAO;AAAA,IACLA,0BAAA,EAAmB;AAAA,IACnBC,0BAAA,EAAmB;AAAA,IACnBC,0BAAA,EAAmB;AAAA;AAAA,IAEnBC,uBAAA,EAAgB;AAAA,IAChBC,wBAAA,EAAiB;AAAA,IACjBC,2BAAA,EAAoB;AAAA,IACpBC,wBAAA,EAAiB;AAAA,IACjBC,yBAAA,EAAkB;AAAA,IAClBC,wBAAA,EAAiB;AAAA,IACjBC,2BAAA,EAAoB;AAAA,IACpBC,6BAAA,EAAkB;AAAA,IAClBC,uBAAA,EAAgB;AAAA,IAChBC,sBAAA,EAAe;AAAA,IACfC,wBAAA,EAAmB;AAAA,IACnBC,0BAAA,EAAmB;AAAA,IACnBC,8BAAA,EAAuB;AAAA,IACvBC,wBAAA,EAAiB;AAAA,IACjBC,0BAAA,EAAmB;AAAA,IACnBC,8BAAA,EAAuB;AAAA;AAAA;AAAA,IAGvBC,4BAAA,EAAqB;AAAA,IACrBC,4BAAA,EAAqB;AAAA,IACrBC,2BAAA,EAAoB;AAAA,IACpBC,yBAAA,EAAkB;AAAA,IAClBC,8BAAA,EAAuB;AAAA,IACvBC,8BAAA,EAAuB;AAAA,IACvBC,gCAAA,EAAsB;AAAA,IACtBC,4BAAA;AAAoB,GACtB;AACF;AAMO,SAAS,wCAAA,GAA2F;AACzG,EAAA,OAAO;AAAA,IACLC,yBAAA;AAAA,IACAC,yBAAA;AAAA,IACAC,uBAAA;AAAA,IACAC,2BAAA;AAAA,IACAC,sBAAA;AAAA,IACAC,sBAAA;AAAA,IACAC,uBAAA;AAAA,IACAC,qBAAA;AAAA,IACAC,6BAAA;AAAA,IACAC,uBAAA;AAAA,IACAC,0BAAA;AAAA,IACAC,uBAAA;AAAA,IACAC,wBAAA;AAAA,IACAC,0BAAA;AAAA,IACAT,sBAAA;AAAA,IACAU,yBAAA;AAAA,IACAC,uBAAA;AAAA,IACAC,yBAAA;AAAA,IACAC,6BAAA;AAAA,IACAC,yBAAA;AAAA,IACAC,2BAAA;AAAA,IACAC,0BAAA;AAAA,IACAC,wBAAA;AAAA,IACAC,+BAAA;AAAA,IACAC,2BAAA;AAAA,IACAC,6BAAA;AAAA,IACAC,6BAAA;AAAA,IACAC;AAAA,GACF;AACF;;;;;"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
3
3
|
const instrumentation = require('./vendored/instrumentation.js');
|
|
4
4
|
const core = require('@sentry/core');
|
|
5
5
|
const nodeCore = require('@sentry/node-core');
|
|
6
|
+
const orchestrion = require('@sentry/server-utils/orchestrion');
|
|
6
7
|
|
|
7
8
|
const INTEGRATION_NAME = "Knex";
|
|
8
9
|
const instrumentKnex = nodeCore.generateInstrumentOnce(INTEGRATION_NAME, () => new instrumentation.KnexInstrumentation());
|
|
@@ -10,7 +11,11 @@ const _knexIntegration = (() => {
|
|
|
10
11
|
return {
|
|
11
12
|
name: INTEGRATION_NAME,
|
|
12
13
|
setupOnce() {
|
|
13
|
-
|
|
14
|
+
if (orchestrion.isOrchestrionInjected()) {
|
|
15
|
+
orchestrion.knexChannelIntegration().setupOnce?.();
|
|
16
|
+
} else {
|
|
17
|
+
instrumentKnex();
|
|
18
|
+
}
|
|
14
19
|
}
|
|
15
20
|
};
|
|
16
21
|
});
|
|
@@ -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' 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":["generateInstrumentOnce","KnexInstrumentation","defineIntegration"],"mappings":"
|
|
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';\nimport { isOrchestrionInjected, knexChannelIntegration } from '@sentry/server-utils/orchestrion';\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 // Prefer the diagnostics-channel subscriber when orchestrion injected its channels; otherwise\n // fall back to the vendored OTel instrumentation. `isOrchestrionInjected()` is only reliable by\n // `setupOnce` (the runtime injection runs during `Sentry.init()`, after integrations are built).\n if (isOrchestrionInjected()) {\n knexChannelIntegration().setupOnce?.();\n } else {\n instrumentKnex();\n }\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":["generateInstrumentOnce","KnexInstrumentation","isOrchestrionInjected","knexChannelIntegration","defineIntegration"],"mappings":";;;;;;;AAMA,MAAM,gBAAA,GAAmB,MAAA;AAElB,MAAM,iBAAiBA,+BAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAIC,qCAAqB;AAEtG,MAAM,oBAAoB,MAAM;AAC9B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AAIV,MAAA,IAAIC,mCAAsB,EAAG;AAC3B,QAAAC,kCAAA,GAAyB,SAAA,IAAY;AAAA,MACvC,CAAA,MAAO;AACL,QAAA,cAAA,EAAe;AAAA,MACjB;AAAA,IACF;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,eAAA,GAAkBC,uBAAkB,gBAAgB;;;;;"}
|
|
@@ -8,7 +8,7 @@ const diagnosticsChannelInjection = require('./diagnosticsChannelInjection.js');
|
|
|
8
8
|
function diagnosticsChannelInjectionIntegrations() {
|
|
9
9
|
return orchestrion.channelIntegrations;
|
|
10
10
|
}
|
|
11
|
-
function experimentalUseDiagnosticsChannelInjection() {
|
|
11
|
+
function experimentalUseDiagnosticsChannelInjection(options) {
|
|
12
12
|
diagnosticsChannelInjection.setDiagnosticsChannelInjectionLoader(() => {
|
|
13
13
|
const integrations = Object.values(orchestrion.channelIntegrations).map((createIntegration) => createIntegration());
|
|
14
14
|
const replacedOtelIntegrationNames = integrations.map((i) => i.name);
|
|
@@ -22,7 +22,7 @@ function experimentalUseDiagnosticsChannelInjection() {
|
|
|
22
22
|
orchestrion.redisChannelIntegration({ responseHook: cache.cacheResponseHook })
|
|
23
23
|
],
|
|
24
24
|
replacedOtelIntegrationNames,
|
|
25
|
-
register: register.registerDiagnosticsChannelInjection,
|
|
25
|
+
register: () => register.registerDiagnosticsChannelInjection(options),
|
|
26
26
|
detect: orchestrion.detectOrchestrionSetup
|
|
27
27
|
};
|
|
28
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experimentalUseDiagnosticsChannelInjection.js","sources":["../../../src/sdk/experimentalUseDiagnosticsChannelInjection.ts"],"sourcesContent":["import {\n channelIntegrations,\n ioredisChannelIntegration,\n redisChannelIntegration,\n detectOrchestrionSetup,\n} from '@sentry/server-utils/orchestrion';\nimport { registerDiagnosticsChannelInjection } from '@sentry/server-utils/orchestrion/register';\nimport { cacheResponseHook } from '../integrations/tracing/redis/cache';\nimport type { DiagnosticsChannelInjection } from './diagnosticsChannelInjection';\nimport { setDiagnosticsChannelInjectionLoader } from './diagnosticsChannelInjection';\n\nexport function diagnosticsChannelInjectionIntegrations(): typeof channelIntegrations {\n return channelIntegrations;\n}\n\n/**\n * EXPERIMENTAL: opt into diagnostics-channel-based auto-instrumentation.\n *\n * Call this BEFORE `Sentry.init()`:\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.experimentalUseDiagnosticsChannelInjection();\n * Sentry.init({\n * dsn: '__DSN__',\n * // other settings...\n * });\n * ```\n *\n * When this has been called AND span recording is enabled, `Sentry.init()`\n * uses the diagnostics-channel-injection-based integrations instead of the\n * OpenTelemetry ones, and installs the module hooks that inject the channels\n * (so libraries imported after `init()` publish the channel events).\n *\n * This is a standalone function rather than an `init()` option so that a\n * bundler drops all of it (and its transitive deps) when this function isn't\n * called. `init()` reads the loader registered below.\n *\n * An app that DOES call it gets the orchestrion code bundled as intended.\n *\n * In an unbundled (server-side runtime) app this eagerly loads only the small\n * subscriber/channel modules; the heavy code-transform dependencies stay lazy\n * inside `register()` and load only when injection actually runs.\n *\n * @experimental May change or be removed in any release.\n */\nexport function experimentalUseDiagnosticsChannelInjection(): void {\n setDiagnosticsChannelInjectionLoader((): DiagnosticsChannelInjection => {\n //
|
|
1
|
+
{"version":3,"file":"experimentalUseDiagnosticsChannelInjection.js","sources":["../../../src/sdk/experimentalUseDiagnosticsChannelInjection.ts"],"sourcesContent":["import {\n channelIntegrations,\n ioredisChannelIntegration,\n redisChannelIntegration,\n detectOrchestrionSetup,\n} from '@sentry/server-utils/orchestrion';\nimport type { RegisterDiagnosticsChannelInjectionOptions } from '@sentry/server-utils/orchestrion/register';\nimport { registerDiagnosticsChannelInjection } from '@sentry/server-utils/orchestrion/register';\nimport { cacheResponseHook } from '../integrations/tracing/redis/cache';\nimport type { DiagnosticsChannelInjection } from './diagnosticsChannelInjection';\nimport { setDiagnosticsChannelInjectionLoader } from './diagnosticsChannelInjection';\n\nexport function diagnosticsChannelInjectionIntegrations(): typeof channelIntegrations {\n return channelIntegrations;\n}\n\n/**\n * EXPERIMENTAL: opt into diagnostics-channel-based auto-instrumentation.\n *\n * Call this BEFORE `Sentry.init()`:\n *\n * ```ts\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.experimentalUseDiagnosticsChannelInjection();\n * Sentry.init({\n * dsn: '__DSN__',\n * // other settings...\n * });\n * ```\n *\n * When this has been called AND span recording is enabled, `Sentry.init()`\n * uses the diagnostics-channel-injection-based integrations instead of the\n * OpenTelemetry ones, and installs the module hooks that inject the channels\n * (so libraries imported after `init()` publish the channel events).\n *\n * This is a standalone function rather than an `init()` option so that a\n * bundler drops all of it (and its transitive deps) when this function isn't\n * called. `init()` reads the loader registered below.\n *\n * An app that DOES call it gets the orchestrion code bundled as intended.\n *\n * In an unbundled (server-side runtime) app this eagerly loads only the small\n * subscriber/channel modules; the heavy code-transform dependencies stay lazy\n * inside `register()` and load only when injection actually runs.\n *\n * @experimental May change or be removed in any release.\n */\nexport function experimentalUseDiagnosticsChannelInjection(\n // Forwarded to `registerDiagnosticsChannelInjection()`; framework SDKs whose bundlers compile\n // the SDK into the app (e.g. `@sentry/nextjs`) use it to point the runtime module hook at the\n // tracing-hooks package location resolved at build time. Plain Node apps don't need it.\n options?: RegisterDiagnosticsChannelInjectionOptions,\n): void {\n setDiagnosticsChannelInjectionLoader((): DiagnosticsChannelInjection => {\n // These channel integrations 1:1 replace the OTel integration of the\n // same name. Framework SDKs that own their own channel listener\n // (e.g. `@sentry/nestjs`'s `Nest`) are NOT here. They pick the\n // channel-vs-OTel path themselves at integration `setupOnce`, so\n // there's nothing for the central swap to do.\n const integrations = Object.values(channelIntegrations).map(createIntegration => createIntegration());\n const replacedOtelIntegrationNames = integrations.map(i => i.name);\n\n return {\n // ioredis and redis are wired separately (not in `channelIntegrations`): they need the node\n // redis cache `responseHook` and only partially replace the composite OTel `Redis` integration,\n // so they're kept OUT of `replacedOtelIntegrationNames` — `Redis` must stay (batch + >=5.11 native DC).\n integrations: [\n ...integrations,\n ioredisChannelIntegration({ responseHook: cacheResponseHook }),\n redisChannelIntegration({ responseHook: cacheResponseHook }),\n ],\n replacedOtelIntegrationNames,\n register: () => registerDiagnosticsChannelInjection(options),\n detect: detectOrchestrionSetup,\n };\n });\n}\n"],"names":["channelIntegrations","setDiagnosticsChannelInjectionLoader","ioredisChannelIntegration","cacheResponseHook","redisChannelIntegration","registerDiagnosticsChannelInjection","detectOrchestrionSetup"],"mappings":";;;;;;;AAYO,SAAS,uCAAA,GAAsE;AACpF,EAAA,OAAOA,+BAAA;AACT;AAkCO,SAAS,2CAId,OAAA,EACM;AACN,EAAAC,gEAAA,CAAqC,MAAmC;AAMtE,IAAA,MAAM,YAAA,GAAe,OAAO,MAAA,CAAOD,+BAAmB,EAAE,GAAA,CAAI,CAAA,iBAAA,KAAqB,mBAAmB,CAAA;AACpG,IAAA,MAAM,4BAAA,GAA+B,YAAA,CAAa,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAEjE,IAAA,OAAO;AAAA;AAAA;AAAA;AAAA,MAIL,YAAA,EAAc;AAAA,QACZ,GAAG,YAAA;AAAA,QACHE,qCAAA,CAA0B,EAAE,YAAA,EAAcC,uBAAA,EAAmB,CAAA;AAAA,QAC7DC,mCAAA,CAAwB,EAAE,YAAA,EAAcD,uBAAA,EAAmB;AAAA,OAC7D;AAAA,MACA,4BAAA;AAAA,MACA,QAAA,EAAU,MAAME,4CAAA,CAAoC,OAAO,CAAA;AAAA,MAC3D,MAAA,EAAQC;AAAA,KACV;AAAA,EACF,CAAC,CAAA;AACH;;;;;"}
|
package/build/cjs/sdk/index.js
CHANGED
|
@@ -13,7 +13,7 @@ function getDefaultIntegrationsWithoutPerformance() {
|
|
|
13
13
|
return nodeCoreIntegrations.filter((integration) => integration.name !== "Http" && integration.name !== "NodeFetch").concat(http.httpIntegration(), nodeFetch.nativeNodeFetchIntegration());
|
|
14
14
|
}
|
|
15
15
|
function getDefaultIntegrations(options) {
|
|
16
|
-
|
|
16
|
+
return [
|
|
17
17
|
...getDefaultIntegrationsWithoutPerformance(),
|
|
18
18
|
// We only add performance integrations if tracing is enabled
|
|
19
19
|
// Note that this means that without tracing enabled, e.g. `expressIntegration()` will not be added
|
|
@@ -21,14 +21,6 @@ function getDefaultIntegrations(options) {
|
|
|
21
21
|
// But `transactionName` will not be set automatically
|
|
22
22
|
...core.hasSpansEnabled(options) ? index.getAutoPerformanceIntegrations() : []
|
|
23
23
|
];
|
|
24
|
-
if (diagnosticsChannelInjection.isDiagnosticsChannelInjectionEnabled() && core.hasSpansEnabled(options)) {
|
|
25
|
-
const diagnosticsChannelInjection$1 = diagnosticsChannelInjection.resolveDiagnosticsChannelInjection();
|
|
26
|
-
if (diagnosticsChannelInjection$1) {
|
|
27
|
-
const replaced = new Set(diagnosticsChannelInjection$1.replacedOtelIntegrationNames);
|
|
28
|
-
return [...integrations.filter((i) => !replaced.has(i.name)), ...diagnosticsChannelInjection$1.integrations];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return integrations;
|
|
32
24
|
}
|
|
33
25
|
function init(options = {}) {
|
|
34
26
|
return _init(options, getDefaultIntegrations);
|
|
@@ -39,10 +31,17 @@ function _init(options = {}, getDefaultIntegrationsImpl) {
|
|
|
39
31
|
if (diagnosticsChannelInjection$1) {
|
|
40
32
|
diagnosticsChannelInjection$1.register();
|
|
41
33
|
}
|
|
34
|
+
let defaultIntegrations = options.defaultIntegrations ?? getDefaultIntegrationsImpl(options);
|
|
35
|
+
if (diagnosticsChannelInjection$1 && Array.isArray(defaultIntegrations) && defaultIntegrations.length > 0) {
|
|
36
|
+
const replaced = new Set(diagnosticsChannelInjection$1.replacedOtelIntegrationNames);
|
|
37
|
+
defaultIntegrations = [
|
|
38
|
+
...defaultIntegrations.filter((integration) => !replaced.has(integration.name)),
|
|
39
|
+
...diagnosticsChannelInjection$1.integrations
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
42
|
const client = nodeCore.init({
|
|
43
43
|
...options,
|
|
44
|
-
|
|
45
|
-
defaultIntegrations: options.defaultIntegrations ?? getDefaultIntegrationsImpl(options)
|
|
44
|
+
defaultIntegrations
|
|
46
45
|
});
|
|
47
46
|
if (client && !options.skipOpenTelemetrySetup) {
|
|
48
47
|
initOtel.initOpenTelemetry(client, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/sdk/index.ts"],"sourcesContent":["import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, hasSpansEnabled } from '@sentry/core';\nimport type { NodeClient } from '@sentry/node-core';\nimport {\n getDefaultIntegrations as getNodeCoreDefaultIntegrations,\n init as initNodeCore,\n validateOpenTelemetrySetup,\n} from '@sentry/node-core';\nimport { httpIntegration } from '../integrations/http';\nimport { nativeNodeFetchIntegration } from '../integrations/node-fetch';\nimport { getAutoPerformanceIntegrations } from '../integrations/tracing';\nimport type { NodeOptions } from '../types';\nimport {\n isDiagnosticsChannelInjectionEnabled,\n resolveDiagnosticsChannelInjection,\n} from './diagnosticsChannelInjection';\nimport { initOpenTelemetry } from './initOtel';\n\n/**\n * Get default integrations, excluding performance.\n */\nexport function getDefaultIntegrationsWithoutPerformance(): Integration[] {\n const nodeCoreIntegrations = getNodeCoreDefaultIntegrations();\n\n // Filter out the node-core HTTP and NodeFetch integrations and replace them with Node SDK's composite versions\n return nodeCoreIntegrations\n .filter(integration => integration.name !== 'Http' && integration.name !== 'NodeFetch')\n .concat(httpIntegration(), nativeNodeFetchIntegration());\n}\n\n/** Get the default integrations for the Node SDK. */\nexport function getDefaultIntegrations(options: Options): Integration[] {\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/sdk/index.ts"],"sourcesContent":["import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, hasSpansEnabled } from '@sentry/core';\nimport type { NodeClient } from '@sentry/node-core';\nimport {\n getDefaultIntegrations as getNodeCoreDefaultIntegrations,\n init as initNodeCore,\n validateOpenTelemetrySetup,\n} from '@sentry/node-core';\nimport { httpIntegration } from '../integrations/http';\nimport { nativeNodeFetchIntegration } from '../integrations/node-fetch';\nimport { getAutoPerformanceIntegrations } from '../integrations/tracing';\nimport type { NodeOptions } from '../types';\nimport {\n isDiagnosticsChannelInjectionEnabled,\n resolveDiagnosticsChannelInjection,\n} from './diagnosticsChannelInjection';\nimport { initOpenTelemetry } from './initOtel';\n\n/**\n * Get default integrations, excluding performance.\n */\nexport function getDefaultIntegrationsWithoutPerformance(): Integration[] {\n const nodeCoreIntegrations = getNodeCoreDefaultIntegrations();\n\n // Filter out the node-core HTTP and NodeFetch integrations and replace them with Node SDK's composite versions\n return nodeCoreIntegrations\n .filter(integration => integration.name !== 'Http' && integration.name !== 'NodeFetch')\n .concat(httpIntegration(), nativeNodeFetchIntegration());\n}\n\n/** Get the default integrations for the Node SDK. */\nexport function getDefaultIntegrations(options: Options): Integration[] {\n return [\n ...getDefaultIntegrationsWithoutPerformance(),\n // We only add performance integrations if tracing is enabled\n // Note that this means that without tracing enabled, e.g. `expressIntegration()` will not be added\n // This means that generally request isolation will work (because that is done by httpIntegration)\n // But `transactionName` will not be set automatically\n ...(hasSpansEnabled(options) ? getAutoPerformanceIntegrations() : []),\n ];\n}\n\n/**\n * Initialize Sentry for Node.\n */\nexport function init(options: NodeOptions | undefined = {}): NodeClient | undefined {\n return _init(options, getDefaultIntegrations);\n}\n\n/**\n * Internal initialization function.\n */\nfunction _init(\n options: NodeOptions | undefined = {},\n getDefaultIntegrationsImpl: (options: Options) => Integration[],\n): NodeClient | undefined {\n applySdkMetadata(options, 'node');\n\n // EXPERIMENTAL: diagnostics-channel injection, opted into via\n // `experimentalUseDiagnosticsChannelInjection()`. Gated on span recording to\n // match the OTel integrations it replaces. With tracing off there are no\n // channel subscribers, so injecting is pointless work.\n const diagnosticsChannelInjection =\n isDiagnosticsChannelInjectionEnabled() && hasSpansEnabled(options)\n ? resolveDiagnosticsChannelInjection()\n : undefined;\n\n // Install the channel-injection hooks as early as possible, before the app\n // imports its instrumented modules.\n if (diagnosticsChannelInjection) {\n diagnosticsChannelInjection.register();\n }\n\n // Only use Node SDK defaults if none provided.\n let defaultIntegrations = options.defaultIntegrations ?? getDefaultIntegrationsImpl(options);\n\n // When opted into diagnostics-channel injection, swap the channel-based\n // integrations in place of their OTel equivalents so the two don't both\n // instrument the same library. Done here (rather than in\n // `getDefaultIntegrations`) so it also covers framework SDKs (e.g.\n // `@sentry/nestjs`) that pass their own `defaultIntegrations` array.\n //\n // Only when there's a non-empty default set to swap:\n // `defaultIntegrations: false` (not an array) and `[]` /\n // `initWithoutDefaultIntegrations()` (explicitly no defaults) are left\n // untouched, as appending channel integrations there would resurrect\n // defaults the caller opted out of.\n if (diagnosticsChannelInjection && Array.isArray(defaultIntegrations) && defaultIntegrations.length > 0) {\n const replaced = new Set(diagnosticsChannelInjection.replacedOtelIntegrationNames);\n defaultIntegrations = [\n ...defaultIntegrations.filter(integration => !replaced.has(integration.name)),\n ...diagnosticsChannelInjection.integrations,\n ];\n }\n\n const client = initNodeCore({\n ...options,\n defaultIntegrations,\n });\n\n // Add Node SDK specific OpenTelemetry setup\n if (client && !options.skipOpenTelemetrySetup) {\n initOpenTelemetry(client, {\n spanProcessors: options.openTelemetrySpanProcessors,\n });\n validateOpenTelemetrySetup();\n }\n\n // Warn about missing or doubled channel injection. Runs after the client\n // is created so the debug logger is enabled and the warning is emitted.\n if (diagnosticsChannelInjection) {\n diagnosticsChannelInjection.detect();\n }\n\n return client;\n}\n\n/**\n * Initialize Sentry for Node, without any integrations added by default.\n */\nexport function initWithoutDefaultIntegrations(options: NodeOptions | undefined = {}): NodeClient | undefined {\n return _init(options, () => []);\n}\n"],"names":["getNodeCoreDefaultIntegrations","httpIntegration","nativeNodeFetchIntegration","hasSpansEnabled","getAutoPerformanceIntegrations","applySdkMetadata","diagnosticsChannelInjection","isDiagnosticsChannelInjectionEnabled","resolveDiagnosticsChannelInjection","initNodeCore","initOpenTelemetry","validateOpenTelemetrySetup"],"mappings":";;;;;;;;;;AAqBO,SAAS,wCAAA,GAA0D;AACxE,EAAA,MAAM,uBAAuBA,+BAAA,EAA+B;AAG5D,EAAA,OAAO,oBAAA,CACJ,MAAA,CAAO,CAAA,WAAA,KAAe,WAAA,CAAY,SAAS,MAAA,IAAU,WAAA,CAAY,IAAA,KAAS,WAAW,CAAA,CACrF,MAAA,CAAOC,oBAAA,EAAgB,EAAGC,sCAA4B,CAAA;AAC3D;AAGO,SAAS,uBAAuB,OAAA,EAAiC;AACtE,EAAA,OAAO;AAAA,IACL,GAAG,wCAAA,EAAyC;AAAA;AAAA;AAAA;AAAA;AAAA,IAK5C,GAAIC,oBAAA,CAAgB,OAAO,CAAA,GAAIC,oCAAA,KAAmC;AAAC,GACrE;AACF;AAKO,SAAS,IAAA,CAAK,OAAA,GAAmC,EAAC,EAA2B;AAClF,EAAA,OAAO,KAAA,CAAM,SAAS,sBAAsB,CAAA;AAC9C;AAKA,SAAS,KAAA,CACP,OAAA,GAAmC,EAAC,EACpC,0BAAA,EACwB;AACxB,EAAAC,qBAAA,CAAiB,SAAS,MAAM,CAAA;AAMhC,EAAA,MAAMC,gCACJC,gEAAA,EAAqC,IAAKJ,qBAAgB,OAAO,CAAA,GAC7DK,gEAAmC,GACnC,MAAA;AAIN,EAAA,IAAIF,6BAAA,EAA6B;AAC/B,IAAAA,6BAAA,CAA4B,QAAA,EAAS;AAAA,EACvC;AAGA,EAAA,IAAI,mBAAA,GAAsB,OAAA,CAAQ,mBAAA,IAAuB,0BAAA,CAA2B,OAAO,CAAA;AAa3F,EAAA,IAAIA,iCAA+B,KAAA,CAAM,OAAA,CAAQ,mBAAmB,CAAA,IAAK,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACvG,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAIA,6BAAA,CAA4B,4BAA4B,CAAA;AACjF,IAAA,mBAAA,GAAsB;AAAA,MACpB,GAAG,oBAAoB,MAAA,CAAO,CAAA,WAAA,KAAe,CAAC,QAAA,CAAS,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,MAC5E,GAAGA,6BAAA,CAA4B;AAAA,KACjC;AAAA,EACF;AAEA,EAAA,MAAM,SAASG,aAAA,CAAa;AAAA,IAC1B,GAAG,OAAA;AAAA,IACH;AAAA,GACD,CAAA;AAGD,EAAA,IAAI,MAAA,IAAU,CAAC,OAAA,CAAQ,sBAAA,EAAwB;AAC7C,IAAAC,0BAAA,CAAkB,MAAA,EAAQ;AAAA,MACxB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AACD,IAAAC,mCAAA,EAA2B;AAAA,EAC7B;AAIA,EAAA,IAAIL,6BAAA,EAA6B;AAC/B,IAAAA,6BAAA,CAA4B,MAAA,EAAO;AAAA,EACrC;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,8BAAA,CAA+B,OAAA,GAAmC,EAAC,EAA2B;AAC5G,EAAA,OAAO,KAAA,CAAM,OAAA,EAAS,MAAM,EAAE,CAAA;AAChC;;;;;;;"}
|
package/build/esm/index.js
CHANGED
|
@@ -13,7 +13,7 @@ export { mysql2Integration } from './integrations/tracing/mysql2/index.js';
|
|
|
13
13
|
export { redisIntegration } from './integrations/tracing/redis/index.js';
|
|
14
14
|
export { postgresIntegration } from './integrations/tracing/postgres/index.js';
|
|
15
15
|
export { postgresJsIntegration } from './integrations/tracing/postgresjs.js';
|
|
16
|
-
export { prismaIntegration } from '
|
|
16
|
+
export { prismaIntegration } from '@sentry/server-utils';
|
|
17
17
|
export { hapiIntegration, setupHapiErrorHandler } from './integrations/tracing/hapi/index.js';
|
|
18
18
|
export { honoIntegration, setupHonoErrorHandler } from './integrations/tracing/hono/index.js';
|
|
19
19
|
export { koaIntegration, setupKoaErrorHandler } from './integrations/tracing/koa/index.js';
|
|
@@ -37,6 +37,7 @@ export { growthbookIntegrationShim as growthbookIntegration } from './integratio
|
|
|
37
37
|
export { firebaseIntegration } from './integrations/tracing/firebase/firebase.js';
|
|
38
38
|
export { getDefaultIntegrations, getDefaultIntegrationsWithoutPerformance, init, initWithoutDefaultIntegrations } from './sdk/index.js';
|
|
39
39
|
export { diagnosticsChannelInjectionIntegrations, experimentalUseDiagnosticsChannelInjection } from './sdk/experimentalUseDiagnosticsChannelInjection.js';
|
|
40
|
+
export { isDiagnosticsChannelInjectionEnabled } from './sdk/diagnosticsChannelInjection.js';
|
|
40
41
|
export { initOpenTelemetry, preloadOpenTelemetry } from './sdk/initOtel.js';
|
|
41
42
|
export { getAutoPerformanceIntegrations } from './integrations/tracing/index.js';
|
|
42
43
|
export { setOpenTelemetryContextAsyncContextStrategy as setNodeAsyncContextStrategy } from '@sentry/opentelemetry';
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { DataloaderInstrumentation } from './vendored/instrumentation.js';
|
|
2
1
|
import { defineIntegration } from '@sentry/core';
|
|
3
2
|
import { generateInstrumentOnce } from '@sentry/node-core';
|
|
3
|
+
import { isOrchestrionInjected, dataloaderChannelIntegration } from '@sentry/server-utils/orchestrion';
|
|
4
|
+
import { DataloaderInstrumentation } from './vendored/instrumentation.js';
|
|
4
5
|
|
|
5
6
|
const INTEGRATION_NAME = "Dataloader";
|
|
6
7
|
const instrumentDataloader = generateInstrumentOnce(INTEGRATION_NAME, () => new DataloaderInstrumentation());
|
|
@@ -8,7 +9,11 @@ const _dataloaderIntegration = (() => {
|
|
|
8
9
|
return {
|
|
9
10
|
name: INTEGRATION_NAME,
|
|
10
11
|
setupOnce() {
|
|
11
|
-
|
|
12
|
+
if (isOrchestrionInjected()) {
|
|
13
|
+
dataloaderChannelIntegration().setupOnce?.();
|
|
14
|
+
} else {
|
|
15
|
+
instrumentDataloader();
|
|
16
|
+
}
|
|
12
17
|
}
|
|
13
18
|
};
|
|
14
19
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/dataloader/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/dataloader/index.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { dataloaderChannelIntegration, isOrchestrionInjected } from '@sentry/server-utils/orchestrion';\nimport { DataloaderInstrumentation } from './vendored/instrumentation';\n\nconst INTEGRATION_NAME = 'Dataloader' as const;\n\nexport const instrumentDataloader = generateInstrumentOnce(INTEGRATION_NAME, () => new DataloaderInstrumentation());\n\nconst _dataloaderIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // Decide here, not in the factory: the runtime channel injection runs inside `Sentry.init()`,\n // after the integrations array has already been built, so `isOrchestrionInjected()` is only\n // reliable by `setupOnce`. When the diagnostics channels are injected (runtime hook or bundler\n // plugin), subscribe to them; otherwise fall back to the vendored OTel instrumentation.\n if (isOrchestrionInjected()) {\n dataloaderChannelIntegration().setupOnce?.();\n } else {\n instrumentDataloader();\n }\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [dataloader](https://www.npmjs.com/package/dataloader) library.\n *\n * For more information, see the [`dataloaderIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/dataloader/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.dataloaderIntegration()],\n * });\n * ```\n */\nexport const dataloaderIntegration = defineIntegration(_dataloaderIntegration);\n"],"names":[],"mappings":";;;;;AAMA,MAAM,gBAAA,GAAmB,YAAA;AAElB,MAAM,uBAAuB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,2BAA2B;AAElH,MAAM,0BAA0B,MAAM;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AAKV,MAAA,IAAI,uBAAsB,EAAG;AAC3B,QAAA,4BAAA,GAA+B,SAAA,IAAY;AAAA,MAC7C,CAAA,MAAO;AACL,QAAA,oBAAA,EAAqB;AAAA,MACvB;AAAA,IACF;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,qBAAA,GAAwB,kBAAkB,sBAAsB;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SPAN_STATUS_ERROR, isObjectLike, withActiveSpan, startInactiveSpan } from '@sentry/core';
|
|
1
|
+
import { SPAN_STATUS_ERROR, getClient, isObjectLike, withActiveSpan, startInactiveSpan } from '@sentry/core';
|
|
2
2
|
import { AllowedOperationTypes, TokenKind, SpanNames } from './enum.js';
|
|
3
3
|
import { AttributeNames } from './enums/AttributeNames.js';
|
|
4
4
|
import { OTEL_PATCHED_SYMBOL, OTEL_GRAPHQL_DATA_SYMBOL } from './symbols.js';
|
|
@@ -8,8 +8,10 @@ const isPromise = (value) => {
|
|
|
8
8
|
return typeof value?.then === "function";
|
|
9
9
|
};
|
|
10
10
|
function addSpanSource(span, loc, start, end) {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
if (getClient()?.getDataCollectionOptions().graphQL.document === true) {
|
|
12
|
+
const source = getSourceFromLocation(loc, start, end);
|
|
13
|
+
span.setAttribute(AttributeNames.SOURCE, source);
|
|
14
|
+
}
|
|
13
15
|
}
|
|
14
16
|
function createFieldIfNotExists(contextValue, info, path) {
|
|
15
17
|
let field = getField(contextValue, path);
|