{"version":3,"file":"mongoose.js","sourceRoot":"","sources":["../../src/mongoose.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { context, Span, trace, Attributes, SpanKind } from '@opentelemetry/api';\nimport { suppressTracing } from '@opentelemetry/core';\nimport type * as mongoose from 'mongoose';\nimport { MongooseInstrumentationConfig, SerializerPayload } from './types';\nimport {\n handleCallbackResponse,\n handlePromiseResponse,\n getAttributesFromCollection,\n} from './utils';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\n/** @knipignore */\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\nimport {\n ATTR_DB_OPERATION,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n DB_SYSTEM_NAME_VALUE_MONGODB,\n} from './semconv';\nimport {\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n} from '@opentelemetry/semantic-conventions';\n\nconst contextCaptureFunctionsCommon = [\n 'deleteOne',\n 'deleteMany',\n 'find',\n 'findOne',\n 'estimatedDocumentCount',\n 'countDocuments',\n 'distinct',\n 'where',\n '$where',\n 'findOneAndUpdate',\n 'findOneAndDelete',\n 'findOneAndReplace',\n];\n\nconst contextCaptureFunctions6 = [\n 'remove',\n 'count',\n 'findOneAndRemove',\n ...contextCaptureFunctionsCommon,\n];\nconst contextCaptureFunctions7 = [\n 'count',\n 'findOneAndRemove',\n ...contextCaptureFunctionsCommon,\n];\nconst contextCaptureFunctions8 = [...contextCaptureFunctionsCommon];\n\nfunction getContextCaptureFunctions(\n moduleVersion: string | undefined\n): string[] {\n /* istanbul ignore next */\n if (!moduleVersion) {\n return contextCaptureFunctionsCommon;\n } else if (moduleVersion.startsWith('6.') || moduleVersion.startsWith('5.')) {\n return contextCaptureFunctions6;\n } else if (moduleVersion.startsWith('7.')) {\n return contextCaptureFunctions7;\n } else {\n return contextCaptureFunctions8;\n }\n}\n\nfunction instrumentRemove(moduleVersion: string | undefined): boolean {\n return (\n (moduleVersion &&\n (moduleVersion.startsWith('5.') || moduleVersion.startsWith('6.'))) ||\n false\n );\n}\n\n/**\n * 8.21.0 changed Document.updateOne/deleteOne so that the Query is not fully built when Query.exec() is called.\n * @param moduleVersion\n */\nfunction needsDocumentMethodPatch(moduleVersion: string | undefined): boolean {\n if (!moduleVersion || !moduleVersion.startsWith('8.')) {\n return false;\n }\n\n const minor = parseInt(moduleVersion.split('.')[1], 10);\n return minor >= 21;\n}\n\n// when mongoose functions are called, we store the original call context\n// and then set it as the parent for the spans created by Query/Aggregate exec()\n// calls. this bypass the unlinked spans issue on thenables await operations.\nexport const _STORED_PARENT_SPAN: unique symbol = Symbol('stored-parent-span');\n\n// Prevents double-instrumentation when doc.updateOne/deleteOne (Mongoose 8.21.0+)\n// creates a span and returns a Query that also calls exec()\nexport const _ALREADY_INSTRUMENTED: unique symbol = Symbol(\n 'already-instrumented'\n);\n\nexport class MongooseInstrumentation extends InstrumentationBase {\n private _netSemconvStability!: SemconvStability;\n private _dbSemconvStability!: SemconvStability;\n\n constructor(config: MongooseInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._setSemconvStabilityFromEnv();\n }\n\n // Used for testing.\n private _setSemconvStabilityFromEnv() {\n this._netSemconvStability = semconvStabilityFromStr(\n 'http',\n process.env.OTEL_SEMCONV_STABILITY_OPT_IN\n );\n this._dbSemconvStability = semconvStabilityFromStr(\n 'database',\n process.env.OTEL_SEMCONV_STABILITY_OPT_IN\n );\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n 'mongoose',\n ['>=5.9.7 <9'],\n this.patch.bind(this),\n this.unpatch.bind(this)\n );\n return module;\n }\n\n private patch(module: any, moduleVersion: string | undefined) {\n const moduleExports: typeof mongoose =\n module[Symbol.toStringTag] === 'Module'\n ? module.default // ESM\n : module; // CommonJS\n\n this._wrap(\n moduleExports.Model.prototype,\n 'save',\n this.patchOnModelMethods('save', moduleVersion)\n );\n // mongoose applies this code on module require:\n // Model.prototype.$save = Model.prototype.save;\n // which captures the save function before it is patched.\n // so we need to apply the same logic after instrumenting the save function.\n moduleExports.Model.prototype.$save = moduleExports.Model.prototype.save;\n\n if (instrumentRemove(moduleVersion)) {\n this._wrap(\n moduleExports.Model.prototype,\n 'remove',\n this.patchOnModelMethods('remove', moduleVersion)\n );\n }\n\n // Mongoose 8.21.0+ changed Document.updateOne()/deleteOne() so that the Query is not fully built when Query.exec() is called.\n //\n // See https://github.com/Automattic/mongoose/blob/7dbda12dca1bd7adb9e270d7de8ac5229606ce72/lib/document.js#L861.\n // - `this` is a Query object\n // - the update happens in a pre-hook that gets called when Query.exec() is already running.\n // - when we instrument Query.exec(), we don't have access to the options yet as they get set during Query.exec() only.\n //\n // Unfortunately, after Query.exec() is finished, the options are left modified by the library, so just delaying\n // attaching the attributes after the span is done is not an option. Therefore, we patch Model methods\n // and grab the data directly where the user provides it.\n //\n // ref: https://github.com/Automattic/mongoose/pull/15908 (introduced this behavior)\n if (needsDocumentMethodPatch(moduleVersion)) {\n this._wrap(\n moduleExports.Model.prototype,\n 'updateOne',\n this._patchDocumentUpdateMethods('updateOne', moduleVersion)\n );\n this._wrap(\n moduleExports.Model.prototype,\n 'deleteOne',\n this._patchDocumentUpdateMethods('deleteOne', moduleVersion)\n );\n }\n\n this._wrap(\n moduleExports.Query.prototype,\n 'exec',\n this.patchQueryExec(moduleVersion)\n );\n this._wrap(\n moduleExports.Aggregate.prototype,\n 'exec',\n this.patchAggregateExec(moduleVersion)\n );\n\n const contextCaptureFunctions = getContextCaptureFunctions(moduleVersion);\n\n contextCaptureFunctions.forEach((funcName: string) => {\n this._wrap(\n moduleExports.Query.prototype,\n funcName as any,\n this.patchAndCaptureSpanContext(funcName)\n );\n });\n this._wrap(moduleExports.Model, 'aggregate', this.patchModelAggregate());\n\n this._wrap(\n moduleExports.Model,\n 'insertMany',\n this.patchModelStatic('insertMany', moduleVersion)\n );\n this._wrap(\n moduleExports.Model,\n 'bulkWrite',\n this.patchModelStatic('bulkWrite', moduleVersion)\n );\n\n return moduleExports;\n }\n\n private unpatch(module: any, moduleVersion: string | undefined): void {\n const moduleExports: typeof mongoose =\n module[Symbol.toStringTag] === 'Module'\n ? module.default // ESM\n : module; // CommonJS\n\n const contextCaptureFunctions = getContextCaptureFunctions(moduleVersion);\n\n this._unwrap(moduleExports.Model.prototype, 'save');\n // revert the patch for $save which we applied by aliasing it to patched `save`\n moduleExports.Model.prototype.$save = moduleExports.Model.prototype.save;\n\n if (instrumentRemove(moduleVersion)) {\n this._unwrap(moduleExports.Model.prototype, 'remove');\n }\n\n if (needsDocumentMethodPatch(moduleVersion)) {\n this._unwrap(moduleExports.Model.prototype, 'updateOne');\n this._unwrap(moduleExports.Model.prototype, 'deleteOne');\n }\n\n this._unwrap(moduleExports.Query.prototype, 'exec');\n this._unwrap(moduleExports.Aggregate.prototype, 'exec');\n\n contextCaptureFunctions.forEach((funcName: string) => {\n this._unwrap(moduleExports.Query.prototype, funcName as any);\n });\n this._unwrap(moduleExports.Model, 'aggregate');\n\n this._unwrap(moduleExports.Model, 'insertMany');\n this._unwrap(moduleExports.Model, 'bulkWrite');\n }\n\n private patchAggregateExec(moduleVersion: string | undefined) {\n const self = this;\n return (originalAggregate: Function) => {\n return function exec(this: any, callback?: Function) {\n if (\n self.getConfig().requireParentSpan &&\n trace.getSpan(context.active()) === undefined\n ) {\n return originalAggregate.apply(this, arguments);\n }\n\n const parentSpan = this[_STORED_PARENT_SPAN];\n const attributes: Attributes = {};\n const { dbStatementSerializer } = self.getConfig();\n if (dbStatementSerializer) {\n const statement = dbStatementSerializer('aggregate', {\n options: this.options,\n aggregatePipeline: this._pipeline,\n });\n if (self._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = statement;\n }\n if (self._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = statement;\n }\n }\n\n const span = self._startSpan(\n this._model.collection,\n this._model?.modelName,\n 'aggregate',\n attributes,\n parentSpan\n );\n\n return self._handleResponse(\n span,\n originalAggregate,\n this,\n arguments,\n callback,\n moduleVersion\n );\n };\n };\n }\n\n private patchQueryExec(moduleVersion: string | undefined) {\n const self = this;\n return (originalExec: Function) => {\n return function exec(this: any, callback?: Function) {\n // Skip if already instrumented by document instance method patch\n if (this[_ALREADY_INSTRUMENTED]) {\n return originalExec.apply(this, arguments);\n }\n\n if (\n self.getConfig().requireParentSpan &&\n trace.getSpan(context.active()) === undefined\n ) {\n return originalExec.apply(this, arguments);\n }\n\n const parentSpan = this[_STORED_PARENT_SPAN];\n const attributes: Attributes = {};\n const { dbStatementSerializer } = self.getConfig();\n if (dbStatementSerializer) {\n const statement = dbStatementSerializer(this.op, {\n // Use public API methods (getFilter/getOptions) for better compatibility\n condition: this.getFilter?.() ?? this._conditions,\n updates: this._update,\n options: this.getOptions?.() ?? this.options,\n fields: this._fields,\n });\n if (self._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = statement;\n }\n if (self._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = statement;\n }\n }\n const span = self._startSpan(\n this.mongooseCollection,\n this.model.modelName,\n this.op,\n attributes,\n parentSpan\n );\n\n return self._handleResponse(\n span,\n originalExec,\n this,\n arguments,\n callback,\n moduleVersion\n );\n };\n };\n }\n\n private patchOnModelMethods(op: string, moduleVersion: string | undefined) {\n const self = this;\n return (originalOnModelFunction: Function) => {\n return function method(this: any, options?: any, callback?: Function) {\n if (\n self.getConfig().requireParentSpan &&\n trace.getSpan(context.active()) === undefined\n ) {\n return originalOnModelFunction.apply(this, arguments);\n }\n\n const serializePayload: SerializerPayload = { document: this };\n if (options && !(options instanceof Function)) {\n serializePayload.options = options;\n }\n const attributes: Attributes = {};\n const { dbStatementSerializer } = self.getConfig();\n if (dbStatementSerializer) {\n const statement = dbStatementSerializer(op, serializePayload);\n if (self._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = statement;\n }\n if (self._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = statement;\n }\n }\n const span = self._startSpan(\n this.constructor.collection,\n this.constructor.modelName,\n op,\n attributes\n );\n\n if (options instanceof Function) {\n callback = options;\n options = undefined;\n }\n\n return self._handleResponse(\n span,\n originalOnModelFunction,\n this,\n arguments,\n callback,\n moduleVersion\n );\n };\n };\n }\n\n // Patch document instance methods (doc.updateOne/deleteOne) for Mongoose 8.21.0+.\n private _patchDocumentUpdateMethods(\n op: string,\n moduleVersion: string | undefined\n ) {\n const self = this;\n return (originalMethod: Function) => {\n return function method(\n this: any,\n update?: any,\n options?: any,\n callback?: Function\n ) {\n if (\n self.getConfig().requireParentSpan &&\n trace.getSpan(context.active()) === undefined\n ) {\n return originalMethod.apply(this, arguments);\n }\n\n // determine actual callback since different argument patterns are allowed\n let actualCallback: Function | undefined = callback;\n let actualUpdate = update;\n let actualOptions = options;\n\n if (typeof update === 'function') {\n actualCallback = update;\n actualUpdate = undefined;\n actualOptions = undefined;\n } else if (typeof options === 'function') {\n actualCallback = options;\n actualOptions = undefined;\n }\n\n const attributes: Attributes = {};\n const dbStatementSerializer = self.getConfig().dbStatementSerializer;\n if (dbStatementSerializer) {\n const statement = dbStatementSerializer(op, {\n // Document instance methods automatically use the document's _id as filter\n condition: { _id: this._id },\n updates: actualUpdate,\n options: actualOptions,\n });\n if (self._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = statement;\n }\n if (self._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = statement;\n }\n }\n\n const span = self._startSpan(\n this.constructor.collection,\n this.constructor.modelName,\n op,\n attributes\n );\n\n const result = self._handleResponse(\n span,\n originalMethod,\n this,\n arguments,\n actualCallback,\n moduleVersion\n );\n\n // Mark returned Query to prevent double-instrumentation when exec() is eventually called\n if (result && typeof result === 'object') {\n result[_ALREADY_INSTRUMENTED] = true;\n }\n\n return result;\n };\n };\n }\n\n private patchModelStatic(op: string, moduleVersion: string | undefined) {\n const self = this;\n return (original: Function) => {\n return function patchedStatic(\n this: any,\n docsOrOps: any,\n options?: any,\n callback?: Function\n ) {\n if (\n self.getConfig().requireParentSpan &&\n trace.getSpan(context.active()) === undefined\n ) {\n return original.apply(this, arguments);\n }\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n const serializePayload: SerializerPayload = {};\n switch (op) {\n case 'insertMany':\n serializePayload.documents = docsOrOps;\n break;\n case 'bulkWrite':\n serializePayload.operations = docsOrOps;\n break;\n default:\n serializePayload.document = docsOrOps;\n break;\n }\n if (options !== undefined) {\n serializePayload.options = options;\n }\n\n const attributes: Attributes = {};\n const { dbStatementSerializer } = self.getConfig();\n if (dbStatementSerializer) {\n const statement = dbStatementSerializer(op, serializePayload);\n if (self._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = statement;\n }\n if (self._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = statement;\n }\n }\n\n const span = self._startSpan(\n this.collection,\n this.modelName,\n op,\n attributes\n );\n\n return self._handleResponse(\n span,\n original,\n this,\n arguments,\n callback,\n moduleVersion\n );\n };\n };\n }\n\n // we want to capture the otel span on the object which is calling exec.\n // in the special case of aggregate, we need have no function to path\n // on the Aggregate object to capture the context on, so we patch\n // the aggregate of Model, and set the context on the Aggregate object\n private patchModelAggregate() {\n const self = this;\n return (original: Function) => {\n return function captureSpanContext(this: any) {\n const currentSpan = trace.getSpan(context.active());\n const aggregate = self._callOriginalFunction(() =>\n original.apply(this, arguments)\n );\n if (aggregate) aggregate[_STORED_PARENT_SPAN] = currentSpan;\n return aggregate;\n };\n };\n }\n\n private patchAndCaptureSpanContext(funcName: string) {\n const self = this;\n return (original: Function) => {\n return function captureSpanContext(this: any) {\n this[_STORED_PARENT_SPAN] = trace.getSpan(context.active());\n return self._callOriginalFunction(() =>\n original.apply(this, arguments)\n );\n };\n };\n }\n\n private _startSpan(\n collection: mongoose.Collection,\n modelName: string,\n operation: string,\n attributes: Attributes,\n parentSpan?: Span\n ): Span {\n const finalAttributes: Attributes = {\n ...attributes,\n ...getAttributesFromCollection(\n collection,\n this._dbSemconvStability,\n this._netSemconvStability\n ),\n };\n\n if (this._dbSemconvStability & SemconvStability.OLD) {\n finalAttributes[ATTR_DB_OPERATION] = operation;\n finalAttributes[ATTR_DB_SYSTEM] = 'mongoose'; // keep for backwards compatibility\n }\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n finalAttributes[ATTR_DB_OPERATION_NAME] = operation;\n finalAttributes[ATTR_DB_SYSTEM_NAME] = DB_SYSTEM_NAME_VALUE_MONGODB; // actual db system name\n }\n\n const spanName =\n this._dbSemconvStability & SemconvStability.STABLE\n ? `${operation} ${collection.name}`\n : `mongoose.${modelName}.${operation}`;\n\n return this.tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: finalAttributes,\n },\n parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined\n );\n }\n\n private _handleResponse(\n span: Span,\n exec: Function,\n originalThis: any,\n args: IArguments,\n callback?: Function,\n moduleVersion: string | undefined = undefined\n ) {\n const self = this;\n if (callback instanceof Function) {\n return self._callOriginalFunction(() =>\n handleCallbackResponse(\n callback,\n exec,\n originalThis,\n span,\n args,\n self.getConfig().responseHook,\n moduleVersion\n )\n );\n } else {\n const response = self._callOriginalFunction(() =>\n exec.apply(originalThis, args)\n );\n return handlePromiseResponse(\n response,\n span,\n self.getConfig().responseHook,\n moduleVersion\n );\n }\n }\n\n private _callOriginalFunction(originalFunction: (...args: any[]) => T): T {\n if (this.getConfig().suppressInternalInstrumentation) {\n return context.with(suppressTracing(context.active()), originalFunction);\n } else {\n return originalFunction();\n }\n }\n}\n"]}