Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@sentry/aws-serverless

Package Overview
Dependencies
Maintainers
1
Versions
230
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sentry/aws-serverless - npm Package Compare versions

Comparing version
10.28.0
to
10.29.0
+0
-3
build/npm/cjs/inte...mentation-aws-lambda/instrumentation.js

@@ -245,3 +245,2 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

// The event can be a user type, it truly is any.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
event,

@@ -362,3 +361,2 @@ context,

// eslint-disable-next-line @typescript-eslint/no-explicit-any
let currentProvider = tracerProvider;

@@ -391,3 +389,2 @@

// eslint-disable-next-line @typescript-eslint/no-explicit-any
const currentProvider = meterProvider;

@@ -394,0 +391,0 @@

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"instrumentation.js","sources":["../../../../../src/integration/instrumentation-aws-lambda/instrumentation.ts"],"sourcesContent":["// Vendored and modified from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/cc7eff47e2e7bad7678241b766753d5bd6dbc85f/packages/instrumentation-aws-lambda/src/instrumentation.ts\n// Modifications:\n// - Added Sentry `wrapHandler` around the OTel patch handler.\n// - Cancel init when handler string is invalid (TS)\n// - Hardcoded package version and name\n// - Added support for streaming handlers\n/* eslint-disable */\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Attributes,\n Context as OtelContext,\n MeterProvider,\n Span,\n TextMapGetter,\n TracerProvider,\n} from '@opentelemetry/api';\nimport {\n context as otelContext,\n diag,\n propagation,\n ROOT_CONTEXT,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_URL_FULL,\n SEMATTRS_FAAS_EXECUTION,\n SEMRESATTRS_CLOUD_ACCOUNT_ID,\n SEMRESATTRS_FAAS_ID,\n} from '@opentelemetry/semantic-conventions';\nimport type { APIGatewayProxyEventHeaders, Callback, Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { LambdaModule } from './internal-types';\nimport { ATTR_FAAS_COLDSTART } from './semconv';\nimport type { AwsLambdaInstrumentationConfig, EventContextExtractor } from './types';\nimport { wrapHandler } from '../../sdk';\nimport { SDK_VERSION } from '@sentry/core';\n\n// OpenTelemetry package version was 0.54.0 at time of vendoring.\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-aws-lambda';\n\nconst headerGetter: TextMapGetter<APIGatewayProxyEventHeaders> = {\n keys(carrier): string[] {\n return Object.keys(carrier);\n },\n get(carrier, key: string) {\n return carrier[key];\n },\n};\n\nexport const lambdaMaxInitInMilliseconds = 10_000;\nconst AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nconst AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nconst AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\n/**\n *\n */\nexport class AwsLambdaInstrumentation extends InstrumentationBase<AwsLambdaInstrumentationConfig> {\n declare private _traceForceFlusher?: () => Promise<void>;\n declare private _metricForceFlusher?: () => Promise<void>;\n\n constructor(config: AwsLambdaInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n /**\n *\n */\n init() {\n const taskRoot = process.env.LAMBDA_TASK_ROOT;\n const handlerDef = this.getConfig().lambdaHandler ?? process.env._HANDLER;\n\n // _HANDLER and LAMBDA_TASK_ROOT are always defined in Lambda but guard bail out if in the future this changes.\n if (!taskRoot || !handlerDef) {\n this._diag.debug('Skipping lambda instrumentation: no _HANDLER/lambdaHandler or LAMBDA_TASK_ROOT.', {\n taskRoot,\n handlerDef,\n });\n return [];\n }\n\n // Provide a temporary awslambda polyfill for CommonJS modules during loading\n // This prevents ReferenceError when modules use awslambda.streamifyResponse at load time\n // taken from https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/main/src/UserFunction.js#L205C7-L211C9\n if (typeof globalThis.awslambda === 'undefined') {\n (globalThis as any).awslambda = {\n streamifyResponse: (handler: any, options: any) => {\n handler[AWS_HANDLER_STREAMING_SYMBOL] = AWS_HANDLER_STREAMING_RESPONSE;\n if (typeof options?.highWaterMark === 'number') {\n handler[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = parseInt(options.highWaterMark);\n }\n return handler;\n },\n };\n }\n\n const handler = path.basename(handlerDef);\n const moduleRoot = handlerDef.substring(0, handlerDef.length - handler.length);\n\n const [module, functionName] = handler.split('.', 2);\n\n if (!module || !functionName) {\n this._diag.warn('Invalid handler definition', {\n handler,\n moduleRoot,\n module,\n });\n return [];\n }\n\n // Lambda loads user function using an absolute path.\n let filename = path.resolve(taskRoot, moduleRoot, module);\n if (!filename.endsWith('.js')) {\n // It's impossible to know in advance if the user has a js, mjs or cjs file.\n // Check that the .js file exists otherwise fallback to the next known possibilities (.mjs, .cjs).\n try {\n fs.statSync(`${filename}.js`);\n filename += '.js';\n } catch (e) {\n try {\n fs.statSync(`${filename}.mjs`);\n // fallback to .mjs (ESM)\n filename += '.mjs';\n } catch (e2) {\n try {\n fs.statSync(`${filename}.cjs`);\n // fallback to .cjs (CommonJS)\n filename += '.cjs';\n } catch (e3) {\n this._diag.warn(\n 'No handler file was able to resolved with one of the known extensions for the file',\n filename,\n );\n }\n }\n }\n }\n\n diag.debug('Instrumenting lambda handler', {\n taskRoot,\n handlerDef,\n handler,\n moduleRoot,\n module,\n filename,\n functionName,\n });\n\n const lambdaStartTime = this.getConfig().lambdaStartTime || Date.now() - Math.floor(1000 * process.uptime());\n\n return [\n new InstrumentationNodeModuleDefinition(\n // NB: The patching infrastructure seems to match names backwards, this must be the filename, while\n // InstrumentationNodeModuleFile must be the module name.\n filename,\n ['*'],\n undefined,\n undefined,\n [\n new InstrumentationNodeModuleFile(\n module,\n ['*'],\n (moduleExports: LambdaModule) => {\n if (isWrapped(moduleExports[functionName])) {\n this._unwrap(moduleExports, functionName);\n }\n this._wrap(moduleExports, functionName, this._getHandler(lambdaStartTime));\n return moduleExports;\n },\n (moduleExports?: LambdaModule) => {\n if (moduleExports == null) return;\n this._unwrap(moduleExports, functionName);\n },\n ),\n ],\n ),\n ];\n }\n\n /**\n *\n */\n private _getHandler<T extends Handler | StreamifyHandler>(handlerLoadStartTime: number) {\n return (original: T): T => {\n if (this._isStreamingHandler(original)) {\n const patchedHandler = this._getPatchHandler(original, handlerLoadStartTime);\n\n // Streaming handlers have special symbols that we need to copy over to the patched handler.\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_STREAMING_SYMBOL];\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrapHandler(patchedHandler) as T;\n }\n\n return wrapHandler(this._getPatchHandler(original, handlerLoadStartTime)) as T;\n };\n }\n\n private _getPatchHandler(original: Handler, lambdaStartTime: number): Handler;\n private _getPatchHandler(original: StreamifyHandler, lambdaStartTime: number): StreamifyHandler;\n\n /**\n *\n */\n private _getPatchHandler(original: Handler | StreamifyHandler, lambdaStartTime: number): Handler | StreamifyHandler {\n diag.debug('patch handler function');\n const plugin = this;\n\n let requestHandledBefore = false;\n let requestIsColdStart = true;\n\n /**\n *\n */\n function _onRequest(): void {\n if (requestHandledBefore) {\n // Non-first requests cannot be coldstart.\n requestIsColdStart = false;\n } else {\n if (process.env.AWS_LAMBDA_INITIALIZATION_TYPE === 'provisioned-concurrency') {\n // If sandbox environment is initialized with provisioned concurrency,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = false;\n } else {\n // Check whether it is proactive initialization or not:\n // https://aaronstuyvenberg.com/posts/understanding-proactive-initialization\n const passedTimeSinceHandlerLoad: number = Date.now() - lambdaStartTime;\n const proactiveInitialization: boolean = passedTimeSinceHandlerLoad > lambdaMaxInitInMilliseconds;\n\n // If sandbox has been initialized proactively before the actual request,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = !proactiveInitialization;\n }\n requestHandledBefore = true;\n }\n }\n\n if (this._isStreamingHandler(original)) {\n return function patchedStreamingHandler(\n this: never,\n // The event can be a user type, it truly is any.\n event: any,\n responseStream: Parameters<StreamifyHandler>[1],\n context: Context,\n ) {\n _onRequest();\n const parent = plugin._determineParent(event, context);\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, responseStream, context]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n return function patchedHandler(\n this: never,\n // The event can be a user type, it truly is any.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n event: any,\n context: Context,\n callback: Callback,\n ) {\n _onRequest();\n\n const parent = plugin._determineParent(event, context);\n\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n // Lambda seems to pass a callback even if handler is of Promise form, so we wrap all the time before calling\n // the handler and see if the result is a Promise or not. In such a case, the callback is usually ignored. If\n // the handler happened to both call the callback and complete a returned Promise, whichever happens first will\n // win and the latter will be ignored.\n const wrappedCallback = plugin._wrapCallback(callback, span);\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, context, wrappedCallback]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving callback / promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n private _createSpanForRequest(event: any, context: Context, requestIsColdStart: boolean, parent: OtelContext): Span {\n const name = context.functionName;\n return this.tracer.startSpan(\n name,\n {\n kind: SpanKind.SERVER,\n attributes: {\n [SEMATTRS_FAAS_EXECUTION]: context.awsRequestId,\n [SEMRESATTRS_FAAS_ID]: context.invokedFunctionArn,\n [SEMRESATTRS_CLOUD_ACCOUNT_ID]: AwsLambdaInstrumentation._extractAccountId(context.invokedFunctionArn),\n [ATTR_FAAS_COLDSTART]: requestIsColdStart,\n ...AwsLambdaInstrumentation._extractOtherEventFields(event),\n },\n },\n parent,\n );\n }\n\n private _applyRequestHook(span: Span, event: any, context: Context): void {\n const { requestHook } = this.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { event, context }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: requestHook error', e);\n },\n true,\n );\n }\n }\n\n private _handlePromiseResult(span: Span, maybePromise: Promise<{}> | undefined): Promise<{}> | undefined {\n if (typeof maybePromise?.then === 'function') {\n return maybePromise.then(\n value => {\n this._applyResponseHook(span, null, value);\n return new Promise(resolve => this._endSpan(span, undefined, () => resolve(value)));\n },\n (err: Error | string) => {\n this._applyResponseHook(span, err);\n return new Promise((resolve, reject) => this._endSpan(span, err, () => reject(err)));\n },\n );\n }\n\n // Handle synchronous return values by ending the span and applying response hook\n this._applyResponseHook(span, null, maybePromise);\n this._endSpan(span, undefined, () => {});\n return maybePromise;\n }\n\n private _determineParent(event: any, context: Context): OtelContext {\n const config = this.getConfig();\n return AwsLambdaInstrumentation._determineParent(\n event,\n context,\n config.eventContextExtractor || AwsLambdaInstrumentation._defaultEventContextExtractor,\n );\n }\n\n private _isStreamingHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n ): handler is StreamifyHandler<TEvent, TResult> {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n }\n\n /**\n *\n */\n override setTracerProvider(tracerProvider: TracerProvider) {\n super.setTracerProvider(tracerProvider);\n this._traceForceFlusher = this._traceForceFlush(tracerProvider);\n }\n\n /**\n *\n */\n private _traceForceFlush(tracerProvider: TracerProvider) {\n if (!tracerProvider) return undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let currentProvider: any = tracerProvider;\n\n if (typeof currentProvider.getDelegate === 'function') {\n currentProvider = currentProvider.getDelegate();\n }\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n override setMeterProvider(meterProvider: MeterProvider) {\n super.setMeterProvider(meterProvider);\n this._metricForceFlusher = this._metricForceFlush(meterProvider);\n }\n\n /**\n *\n */\n private _metricForceFlush(meterProvider: MeterProvider) {\n if (!meterProvider) return undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const currentProvider: any = meterProvider;\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n private _wrapCallback(original: Callback, span: Span): Callback {\n const plugin = this;\n return function wrappedCallback(this: never, err, res) {\n diag.debug('executing wrapped lookup callback function');\n plugin._applyResponseHook(span, err, res);\n\n plugin._endSpan(span, err, () => {\n diag.debug('executing original lookup callback function');\n return original.apply(this, [err, res]);\n });\n };\n }\n\n /**\n *\n */\n private _endSpan(span: Span, err: string | Error | null | undefined, callback: () => void) {\n if (err) {\n span.recordException(err);\n }\n\n let errMessage;\n if (typeof err === 'string') {\n errMessage = err;\n } else if (err) {\n errMessage = err.message;\n }\n if (errMessage) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errMessage,\n });\n }\n\n span.end();\n\n const flushers = [];\n if (this._traceForceFlusher) {\n flushers.push(this._traceForceFlusher());\n } else {\n diag.debug(\n 'Spans may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n if (this._metricForceFlusher) {\n flushers.push(this._metricForceFlusher());\n } else {\n diag.debug(\n 'Metrics may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n\n Promise.all(flushers).then(callback, callback);\n }\n\n /**\n *\n */\n private _applyResponseHook(span: Span, err?: Error | string | null, res?: any) {\n const { responseHook } = this.getConfig();\n if (responseHook) {\n safeExecuteInTheMiddle(\n () => responseHook(span, { err, res }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: responseHook error', e);\n },\n true,\n );\n }\n }\n\n /**\n *\n */\n private static _extractAccountId(arn: string): string | undefined {\n const parts = arn.split(':');\n if (parts.length >= 5) {\n return parts[4];\n }\n return undefined;\n }\n\n /**\n *\n */\n private static _defaultEventContextExtractor(event: any): OtelContext {\n // The default extractor tries to get sampled trace header from HTTP headers.\n const httpHeaders = event.headers || {};\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n }\n\n /**\n *\n */\n private static _extractOtherEventFields(event: any): Attributes {\n const answer: Attributes = {};\n const fullUrl = this._extractFullUrl(event);\n if (fullUrl) {\n answer[ATTR_URL_FULL] = fullUrl;\n }\n return answer;\n }\n\n /**\n *\n */\n private static _extractFullUrl(event: any): string | undefined {\n // API gateway encodes a lot of url information in various places to recompute this\n if (!event.headers) {\n return undefined;\n }\n // Helper function to deal with case variations (instead of making a tolower() copy of the headers)\n /**\n *\n */\n function findAny(event: any, key1: string, key2: string): string | undefined {\n return event.headers[key1] ?? event.headers[key2];\n }\n const host = findAny(event, 'host', 'Host');\n const proto = findAny(event, 'x-forwarded-proto', 'X-Forwarded-Proto');\n const port = findAny(event, 'x-forwarded-port', 'X-Forwarded-Port');\n if (!(proto && host && (event.path || event.rawPath))) {\n return undefined;\n }\n let answer = `${proto}://${host}`;\n if (port) {\n answer += `:${port}`;\n }\n answer += event.path ?? event.rawPath;\n if (event.queryStringParameters) {\n let first = true;\n for (const key in event.queryStringParameters) {\n answer += first ? '?' : '&';\n answer += encodeURIComponent(key);\n answer += '=';\n answer += encodeURIComponent(event.queryStringParameters[key]);\n first = false;\n }\n }\n return answer;\n }\n\n /**\n *\n */\n private static _determineParent(\n event: any,\n context: Context,\n eventContextExtractor: EventContextExtractor,\n ): OtelContext {\n const extractedContext = safeExecuteInTheMiddle(\n () => eventContextExtractor(event, context),\n e => {\n if (e) diag.error('aws-lambda instrumentation: eventContextExtractor error', e);\n },\n true,\n );\n if (trace.getSpan(extractedContext)?.spanContext()) {\n return extractedContext;\n }\n return ROOT_CONTEXT;\n }\n}\n"],"names":["SDK_VERSION","InstrumentationBase","diag","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","wrapHandler","otelContext","trace","safeExecuteInTheMiddle","SpanKind","SEMATTRS_FAAS_EXECUTION","SEMRESATTRS_FAAS_ID","SEMRESATTRS_CLOUD_ACCOUNT_ID","ATTR_FAAS_COLDSTART","SpanStatusCode","propagation","ATTR_URL_FULL","ROOT_CONTEXT"],"mappings":"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"}
{"version":3,"file":"instrumentation.js","sources":["../../../../../src/integration/instrumentation-aws-lambda/instrumentation.ts"],"sourcesContent":["// Vendored and modified from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/cc7eff47e2e7bad7678241b766753d5bd6dbc85f/packages/instrumentation-aws-lambda/src/instrumentation.ts\n// Modifications:\n// - Added Sentry `wrapHandler` around the OTel patch handler.\n// - Cancel init when handler string is invalid (TS)\n// - Hardcoded package version and name\n// - Added support for streaming handlers\n/* eslint-disable */\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Attributes,\n Context as OtelContext,\n MeterProvider,\n Span,\n TextMapGetter,\n TracerProvider,\n} from '@opentelemetry/api';\nimport {\n context as otelContext,\n diag,\n propagation,\n ROOT_CONTEXT,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_URL_FULL,\n SEMATTRS_FAAS_EXECUTION,\n SEMRESATTRS_CLOUD_ACCOUNT_ID,\n SEMRESATTRS_FAAS_ID,\n} from '@opentelemetry/semantic-conventions';\nimport type { APIGatewayProxyEventHeaders, Callback, Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { LambdaModule } from './internal-types';\nimport { ATTR_FAAS_COLDSTART } from './semconv';\nimport type { AwsLambdaInstrumentationConfig, EventContextExtractor } from './types';\nimport { wrapHandler } from '../../sdk';\nimport { SDK_VERSION } from '@sentry/core';\n\n// OpenTelemetry package version was 0.54.0 at time of vendoring.\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-aws-lambda';\n\nconst headerGetter: TextMapGetter<APIGatewayProxyEventHeaders> = {\n keys(carrier): string[] {\n return Object.keys(carrier);\n },\n get(carrier, key: string) {\n return carrier[key];\n },\n};\n\nexport const lambdaMaxInitInMilliseconds = 10_000;\nconst AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nconst AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nconst AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\n/**\n *\n */\nexport class AwsLambdaInstrumentation extends InstrumentationBase<AwsLambdaInstrumentationConfig> {\n declare private _traceForceFlusher?: () => Promise<void>;\n declare private _metricForceFlusher?: () => Promise<void>;\n\n constructor(config: AwsLambdaInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n /**\n *\n */\n init() {\n const taskRoot = process.env.LAMBDA_TASK_ROOT;\n const handlerDef = this.getConfig().lambdaHandler ?? process.env._HANDLER;\n\n // _HANDLER and LAMBDA_TASK_ROOT are always defined in Lambda but guard bail out if in the future this changes.\n if (!taskRoot || !handlerDef) {\n this._diag.debug('Skipping lambda instrumentation: no _HANDLER/lambdaHandler or LAMBDA_TASK_ROOT.', {\n taskRoot,\n handlerDef,\n });\n return [];\n }\n\n // Provide a temporary awslambda polyfill for CommonJS modules during loading\n // This prevents ReferenceError when modules use awslambda.streamifyResponse at load time\n // taken from https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/main/src/UserFunction.js#L205C7-L211C9\n if (typeof globalThis.awslambda === 'undefined') {\n (globalThis as any).awslambda = {\n streamifyResponse: (handler: any, options: any) => {\n handler[AWS_HANDLER_STREAMING_SYMBOL] = AWS_HANDLER_STREAMING_RESPONSE;\n if (typeof options?.highWaterMark === 'number') {\n handler[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = parseInt(options.highWaterMark);\n }\n return handler;\n },\n };\n }\n\n const handler = path.basename(handlerDef);\n const moduleRoot = handlerDef.substring(0, handlerDef.length - handler.length);\n\n const [module, functionName] = handler.split('.', 2);\n\n if (!module || !functionName) {\n this._diag.warn('Invalid handler definition', {\n handler,\n moduleRoot,\n module,\n });\n return [];\n }\n\n // Lambda loads user function using an absolute path.\n let filename = path.resolve(taskRoot, moduleRoot, module);\n if (!filename.endsWith('.js')) {\n // It's impossible to know in advance if the user has a js, mjs or cjs file.\n // Check that the .js file exists otherwise fallback to the next known possibilities (.mjs, .cjs).\n try {\n fs.statSync(`${filename}.js`);\n filename += '.js';\n } catch (e) {\n try {\n fs.statSync(`${filename}.mjs`);\n // fallback to .mjs (ESM)\n filename += '.mjs';\n } catch (e2) {\n try {\n fs.statSync(`${filename}.cjs`);\n // fallback to .cjs (CommonJS)\n filename += '.cjs';\n } catch (e3) {\n this._diag.warn(\n 'No handler file was able to resolved with one of the known extensions for the file',\n filename,\n );\n }\n }\n }\n }\n\n diag.debug('Instrumenting lambda handler', {\n taskRoot,\n handlerDef,\n handler,\n moduleRoot,\n module,\n filename,\n functionName,\n });\n\n const lambdaStartTime = this.getConfig().lambdaStartTime || Date.now() - Math.floor(1000 * process.uptime());\n\n return [\n new InstrumentationNodeModuleDefinition(\n // NB: The patching infrastructure seems to match names backwards, this must be the filename, while\n // InstrumentationNodeModuleFile must be the module name.\n filename,\n ['*'],\n undefined,\n undefined,\n [\n new InstrumentationNodeModuleFile(\n module,\n ['*'],\n (moduleExports: LambdaModule) => {\n if (isWrapped(moduleExports[functionName])) {\n this._unwrap(moduleExports, functionName);\n }\n this._wrap(moduleExports, functionName, this._getHandler(lambdaStartTime));\n return moduleExports;\n },\n (moduleExports?: LambdaModule) => {\n if (moduleExports == null) return;\n this._unwrap(moduleExports, functionName);\n },\n ),\n ],\n ),\n ];\n }\n\n /**\n *\n */\n private _getHandler<T extends Handler | StreamifyHandler>(handlerLoadStartTime: number) {\n return (original: T): T => {\n if (this._isStreamingHandler(original)) {\n const patchedHandler = this._getPatchHandler(original, handlerLoadStartTime);\n\n // Streaming handlers have special symbols that we need to copy over to the patched handler.\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_STREAMING_SYMBOL];\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrapHandler(patchedHandler) as T;\n }\n\n return wrapHandler(this._getPatchHandler(original, handlerLoadStartTime)) as T;\n };\n }\n\n private _getPatchHandler(original: Handler, lambdaStartTime: number): Handler;\n private _getPatchHandler(original: StreamifyHandler, lambdaStartTime: number): StreamifyHandler;\n\n /**\n *\n */\n private _getPatchHandler(original: Handler | StreamifyHandler, lambdaStartTime: number): Handler | StreamifyHandler {\n diag.debug('patch handler function');\n const plugin = this;\n\n let requestHandledBefore = false;\n let requestIsColdStart = true;\n\n /**\n *\n */\n function _onRequest(): void {\n if (requestHandledBefore) {\n // Non-first requests cannot be coldstart.\n requestIsColdStart = false;\n } else {\n if (process.env.AWS_LAMBDA_INITIALIZATION_TYPE === 'provisioned-concurrency') {\n // If sandbox environment is initialized with provisioned concurrency,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = false;\n } else {\n // Check whether it is proactive initialization or not:\n // https://aaronstuyvenberg.com/posts/understanding-proactive-initialization\n const passedTimeSinceHandlerLoad: number = Date.now() - lambdaStartTime;\n const proactiveInitialization: boolean = passedTimeSinceHandlerLoad > lambdaMaxInitInMilliseconds;\n\n // If sandbox has been initialized proactively before the actual request,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = !proactiveInitialization;\n }\n requestHandledBefore = true;\n }\n }\n\n if (this._isStreamingHandler(original)) {\n return function patchedStreamingHandler(\n this: never,\n // The event can be a user type, it truly is any.\n event: any,\n responseStream: Parameters<StreamifyHandler>[1],\n context: Context,\n ) {\n _onRequest();\n const parent = plugin._determineParent(event, context);\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, responseStream, context]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n return function patchedHandler(\n this: never,\n // The event can be a user type, it truly is any.\n event: any,\n context: Context,\n callback: Callback,\n ) {\n _onRequest();\n\n const parent = plugin._determineParent(event, context);\n\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n // Lambda seems to pass a callback even if handler is of Promise form, so we wrap all the time before calling\n // the handler and see if the result is a Promise or not. In such a case, the callback is usually ignored. If\n // the handler happened to both call the callback and complete a returned Promise, whichever happens first will\n // win and the latter will be ignored.\n const wrappedCallback = plugin._wrapCallback(callback, span);\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, context, wrappedCallback]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving callback / promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n private _createSpanForRequest(event: any, context: Context, requestIsColdStart: boolean, parent: OtelContext): Span {\n const name = context.functionName;\n return this.tracer.startSpan(\n name,\n {\n kind: SpanKind.SERVER,\n attributes: {\n [SEMATTRS_FAAS_EXECUTION]: context.awsRequestId,\n [SEMRESATTRS_FAAS_ID]: context.invokedFunctionArn,\n [SEMRESATTRS_CLOUD_ACCOUNT_ID]: AwsLambdaInstrumentation._extractAccountId(context.invokedFunctionArn),\n [ATTR_FAAS_COLDSTART]: requestIsColdStart,\n ...AwsLambdaInstrumentation._extractOtherEventFields(event),\n },\n },\n parent,\n );\n }\n\n private _applyRequestHook(span: Span, event: any, context: Context): void {\n const { requestHook } = this.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { event, context }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: requestHook error', e);\n },\n true,\n );\n }\n }\n\n private _handlePromiseResult(span: Span, maybePromise: Promise<{}> | undefined): Promise<{}> | undefined {\n if (typeof maybePromise?.then === 'function') {\n return maybePromise.then(\n value => {\n this._applyResponseHook(span, null, value);\n return new Promise(resolve => this._endSpan(span, undefined, () => resolve(value)));\n },\n (err: Error | string) => {\n this._applyResponseHook(span, err);\n return new Promise((resolve, reject) => this._endSpan(span, err, () => reject(err)));\n },\n );\n }\n\n // Handle synchronous return values by ending the span and applying response hook\n this._applyResponseHook(span, null, maybePromise);\n this._endSpan(span, undefined, () => {});\n return maybePromise;\n }\n\n private _determineParent(event: any, context: Context): OtelContext {\n const config = this.getConfig();\n return AwsLambdaInstrumentation._determineParent(\n event,\n context,\n config.eventContextExtractor || AwsLambdaInstrumentation._defaultEventContextExtractor,\n );\n }\n\n private _isStreamingHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n ): handler is StreamifyHandler<TEvent, TResult> {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n }\n\n /**\n *\n */\n override setTracerProvider(tracerProvider: TracerProvider) {\n super.setTracerProvider(tracerProvider);\n this._traceForceFlusher = this._traceForceFlush(tracerProvider);\n }\n\n /**\n *\n */\n private _traceForceFlush(tracerProvider: TracerProvider) {\n if (!tracerProvider) return undefined;\n\n let currentProvider: any = tracerProvider;\n\n if (typeof currentProvider.getDelegate === 'function') {\n currentProvider = currentProvider.getDelegate();\n }\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n override setMeterProvider(meterProvider: MeterProvider) {\n super.setMeterProvider(meterProvider);\n this._metricForceFlusher = this._metricForceFlush(meterProvider);\n }\n\n /**\n *\n */\n private _metricForceFlush(meterProvider: MeterProvider) {\n if (!meterProvider) return undefined;\n\n const currentProvider: any = meterProvider;\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n private _wrapCallback(original: Callback, span: Span): Callback {\n const plugin = this;\n return function wrappedCallback(this: never, err, res) {\n diag.debug('executing wrapped lookup callback function');\n plugin._applyResponseHook(span, err, res);\n\n plugin._endSpan(span, err, () => {\n diag.debug('executing original lookup callback function');\n return original.apply(this, [err, res]);\n });\n };\n }\n\n /**\n *\n */\n private _endSpan(span: Span, err: string | Error | null | undefined, callback: () => void) {\n if (err) {\n span.recordException(err);\n }\n\n let errMessage;\n if (typeof err === 'string') {\n errMessage = err;\n } else if (err) {\n errMessage = err.message;\n }\n if (errMessage) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errMessage,\n });\n }\n\n span.end();\n\n const flushers = [];\n if (this._traceForceFlusher) {\n flushers.push(this._traceForceFlusher());\n } else {\n diag.debug(\n 'Spans may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n if (this._metricForceFlusher) {\n flushers.push(this._metricForceFlusher());\n } else {\n diag.debug(\n 'Metrics may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n\n Promise.all(flushers).then(callback, callback);\n }\n\n /**\n *\n */\n private _applyResponseHook(span: Span, err?: Error | string | null, res?: any) {\n const { responseHook } = this.getConfig();\n if (responseHook) {\n safeExecuteInTheMiddle(\n () => responseHook(span, { err, res }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: responseHook error', e);\n },\n true,\n );\n }\n }\n\n /**\n *\n */\n private static _extractAccountId(arn: string): string | undefined {\n const parts = arn.split(':');\n if (parts.length >= 5) {\n return parts[4];\n }\n return undefined;\n }\n\n /**\n *\n */\n private static _defaultEventContextExtractor(event: any): OtelContext {\n // The default extractor tries to get sampled trace header from HTTP headers.\n const httpHeaders = event.headers || {};\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n }\n\n /**\n *\n */\n private static _extractOtherEventFields(event: any): Attributes {\n const answer: Attributes = {};\n const fullUrl = this._extractFullUrl(event);\n if (fullUrl) {\n answer[ATTR_URL_FULL] = fullUrl;\n }\n return answer;\n }\n\n /**\n *\n */\n private static _extractFullUrl(event: any): string | undefined {\n // API gateway encodes a lot of url information in various places to recompute this\n if (!event.headers) {\n return undefined;\n }\n // Helper function to deal with case variations (instead of making a tolower() copy of the headers)\n /**\n *\n */\n function findAny(event: any, key1: string, key2: string): string | undefined {\n return event.headers[key1] ?? event.headers[key2];\n }\n const host = findAny(event, 'host', 'Host');\n const proto = findAny(event, 'x-forwarded-proto', 'X-Forwarded-Proto');\n const port = findAny(event, 'x-forwarded-port', 'X-Forwarded-Port');\n if (!(proto && host && (event.path || event.rawPath))) {\n return undefined;\n }\n let answer = `${proto}://${host}`;\n if (port) {\n answer += `:${port}`;\n }\n answer += event.path ?? event.rawPath;\n if (event.queryStringParameters) {\n let first = true;\n for (const key in event.queryStringParameters) {\n answer += first ? '?' : '&';\n answer += encodeURIComponent(key);\n answer += '=';\n answer += encodeURIComponent(event.queryStringParameters[key]);\n first = false;\n }\n }\n return answer;\n }\n\n /**\n *\n */\n private static _determineParent(\n event: any,\n context: Context,\n eventContextExtractor: EventContextExtractor,\n ): OtelContext {\n const extractedContext = safeExecuteInTheMiddle(\n () => eventContextExtractor(event, context),\n e => {\n if (e) diag.error('aws-lambda instrumentation: eventContextExtractor error', e);\n },\n true,\n );\n if (trace.getSpan(extractedContext)?.spanContext()) {\n return extractedContext;\n }\n return ROOT_CONTEXT;\n }\n}\n"],"names":["SDK_VERSION","InstrumentationBase","diag","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","wrapHandler","otelContext","trace","safeExecuteInTheMiddle","SpanKind","SEMATTRS_FAAS_EXECUTION","SEMRESATTRS_FAAS_ID","SEMRESATTRS_CLOUD_ACCOUNT_ID","ATTR_FAAS_COLDSTART","SpanStatusCode","propagation","ATTR_URL_FULL","ROOT_CONTEXT"],"mappings":"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"}

@@ -243,3 +243,2 @@ import { diag, context, trace, SpanKind, SpanStatusCode, propagation, ROOT_CONTEXT } from '@opentelemetry/api';

// The event can be a user type, it truly is any.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
event,

@@ -360,3 +359,2 @@ context$1,

// eslint-disable-next-line @typescript-eslint/no-explicit-any
let currentProvider = tracerProvider;

@@ -389,3 +387,2 @@

// eslint-disable-next-line @typescript-eslint/no-explicit-any
const currentProvider = meterProvider;

@@ -392,0 +389,0 @@

@@ -1,1 +0,1 @@

{"version":3,"file":"instrumentation.js","sources":["../../../../../src/integration/instrumentation-aws-lambda/instrumentation.ts"],"sourcesContent":["// Vendored and modified from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/cc7eff47e2e7bad7678241b766753d5bd6dbc85f/packages/instrumentation-aws-lambda/src/instrumentation.ts\n// Modifications:\n// - Added Sentry `wrapHandler` around the OTel patch handler.\n// - Cancel init when handler string is invalid (TS)\n// - Hardcoded package version and name\n// - Added support for streaming handlers\n/* eslint-disable */\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Attributes,\n Context as OtelContext,\n MeterProvider,\n Span,\n TextMapGetter,\n TracerProvider,\n} from '@opentelemetry/api';\nimport {\n context as otelContext,\n diag,\n propagation,\n ROOT_CONTEXT,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_URL_FULL,\n SEMATTRS_FAAS_EXECUTION,\n SEMRESATTRS_CLOUD_ACCOUNT_ID,\n SEMRESATTRS_FAAS_ID,\n} from '@opentelemetry/semantic-conventions';\nimport type { APIGatewayProxyEventHeaders, Callback, Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { LambdaModule } from './internal-types';\nimport { ATTR_FAAS_COLDSTART } from './semconv';\nimport type { AwsLambdaInstrumentationConfig, EventContextExtractor } from './types';\nimport { wrapHandler } from '../../sdk';\nimport { SDK_VERSION } from '@sentry/core';\n\n// OpenTelemetry package version was 0.54.0 at time of vendoring.\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-aws-lambda';\n\nconst headerGetter: TextMapGetter<APIGatewayProxyEventHeaders> = {\n keys(carrier): string[] {\n return Object.keys(carrier);\n },\n get(carrier, key: string) {\n return carrier[key];\n },\n};\n\nexport const lambdaMaxInitInMilliseconds = 10_000;\nconst AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nconst AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nconst AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\n/**\n *\n */\nexport class AwsLambdaInstrumentation extends InstrumentationBase<AwsLambdaInstrumentationConfig> {\n declare private _traceForceFlusher?: () => Promise<void>;\n declare private _metricForceFlusher?: () => Promise<void>;\n\n constructor(config: AwsLambdaInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n /**\n *\n */\n init() {\n const taskRoot = process.env.LAMBDA_TASK_ROOT;\n const handlerDef = this.getConfig().lambdaHandler ?? process.env._HANDLER;\n\n // _HANDLER and LAMBDA_TASK_ROOT are always defined in Lambda but guard bail out if in the future this changes.\n if (!taskRoot || !handlerDef) {\n this._diag.debug('Skipping lambda instrumentation: no _HANDLER/lambdaHandler or LAMBDA_TASK_ROOT.', {\n taskRoot,\n handlerDef,\n });\n return [];\n }\n\n // Provide a temporary awslambda polyfill for CommonJS modules during loading\n // This prevents ReferenceError when modules use awslambda.streamifyResponse at load time\n // taken from https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/main/src/UserFunction.js#L205C7-L211C9\n if (typeof globalThis.awslambda === 'undefined') {\n (globalThis as any).awslambda = {\n streamifyResponse: (handler: any, options: any) => {\n handler[AWS_HANDLER_STREAMING_SYMBOL] = AWS_HANDLER_STREAMING_RESPONSE;\n if (typeof options?.highWaterMark === 'number') {\n handler[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = parseInt(options.highWaterMark);\n }\n return handler;\n },\n };\n }\n\n const handler = path.basename(handlerDef);\n const moduleRoot = handlerDef.substring(0, handlerDef.length - handler.length);\n\n const [module, functionName] = handler.split('.', 2);\n\n if (!module || !functionName) {\n this._diag.warn('Invalid handler definition', {\n handler,\n moduleRoot,\n module,\n });\n return [];\n }\n\n // Lambda loads user function using an absolute path.\n let filename = path.resolve(taskRoot, moduleRoot, module);\n if (!filename.endsWith('.js')) {\n // It's impossible to know in advance if the user has a js, mjs or cjs file.\n // Check that the .js file exists otherwise fallback to the next known possibilities (.mjs, .cjs).\n try {\n fs.statSync(`${filename}.js`);\n filename += '.js';\n } catch (e) {\n try {\n fs.statSync(`${filename}.mjs`);\n // fallback to .mjs (ESM)\n filename += '.mjs';\n } catch (e2) {\n try {\n fs.statSync(`${filename}.cjs`);\n // fallback to .cjs (CommonJS)\n filename += '.cjs';\n } catch (e3) {\n this._diag.warn(\n 'No handler file was able to resolved with one of the known extensions for the file',\n filename,\n );\n }\n }\n }\n }\n\n diag.debug('Instrumenting lambda handler', {\n taskRoot,\n handlerDef,\n handler,\n moduleRoot,\n module,\n filename,\n functionName,\n });\n\n const lambdaStartTime = this.getConfig().lambdaStartTime || Date.now() - Math.floor(1000 * process.uptime());\n\n return [\n new InstrumentationNodeModuleDefinition(\n // NB: The patching infrastructure seems to match names backwards, this must be the filename, while\n // InstrumentationNodeModuleFile must be the module name.\n filename,\n ['*'],\n undefined,\n undefined,\n [\n new InstrumentationNodeModuleFile(\n module,\n ['*'],\n (moduleExports: LambdaModule) => {\n if (isWrapped(moduleExports[functionName])) {\n this._unwrap(moduleExports, functionName);\n }\n this._wrap(moduleExports, functionName, this._getHandler(lambdaStartTime));\n return moduleExports;\n },\n (moduleExports?: LambdaModule) => {\n if (moduleExports == null) return;\n this._unwrap(moduleExports, functionName);\n },\n ),\n ],\n ),\n ];\n }\n\n /**\n *\n */\n private _getHandler<T extends Handler | StreamifyHandler>(handlerLoadStartTime: number) {\n return (original: T): T => {\n if (this._isStreamingHandler(original)) {\n const patchedHandler = this._getPatchHandler(original, handlerLoadStartTime);\n\n // Streaming handlers have special symbols that we need to copy over to the patched handler.\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_STREAMING_SYMBOL];\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrapHandler(patchedHandler) as T;\n }\n\n return wrapHandler(this._getPatchHandler(original, handlerLoadStartTime)) as T;\n };\n }\n\n private _getPatchHandler(original: Handler, lambdaStartTime: number): Handler;\n private _getPatchHandler(original: StreamifyHandler, lambdaStartTime: number): StreamifyHandler;\n\n /**\n *\n */\n private _getPatchHandler(original: Handler | StreamifyHandler, lambdaStartTime: number): Handler | StreamifyHandler {\n diag.debug('patch handler function');\n const plugin = this;\n\n let requestHandledBefore = false;\n let requestIsColdStart = true;\n\n /**\n *\n */\n function _onRequest(): void {\n if (requestHandledBefore) {\n // Non-first requests cannot be coldstart.\n requestIsColdStart = false;\n } else {\n if (process.env.AWS_LAMBDA_INITIALIZATION_TYPE === 'provisioned-concurrency') {\n // If sandbox environment is initialized with provisioned concurrency,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = false;\n } else {\n // Check whether it is proactive initialization or not:\n // https://aaronstuyvenberg.com/posts/understanding-proactive-initialization\n const passedTimeSinceHandlerLoad: number = Date.now() - lambdaStartTime;\n const proactiveInitialization: boolean = passedTimeSinceHandlerLoad > lambdaMaxInitInMilliseconds;\n\n // If sandbox has been initialized proactively before the actual request,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = !proactiveInitialization;\n }\n requestHandledBefore = true;\n }\n }\n\n if (this._isStreamingHandler(original)) {\n return function patchedStreamingHandler(\n this: never,\n // The event can be a user type, it truly is any.\n event: any,\n responseStream: Parameters<StreamifyHandler>[1],\n context: Context,\n ) {\n _onRequest();\n const parent = plugin._determineParent(event, context);\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, responseStream, context]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n return function patchedHandler(\n this: never,\n // The event can be a user type, it truly is any.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n event: any,\n context: Context,\n callback: Callback,\n ) {\n _onRequest();\n\n const parent = plugin._determineParent(event, context);\n\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n // Lambda seems to pass a callback even if handler is of Promise form, so we wrap all the time before calling\n // the handler and see if the result is a Promise or not. In such a case, the callback is usually ignored. If\n // the handler happened to both call the callback and complete a returned Promise, whichever happens first will\n // win and the latter will be ignored.\n const wrappedCallback = plugin._wrapCallback(callback, span);\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, context, wrappedCallback]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving callback / promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n private _createSpanForRequest(event: any, context: Context, requestIsColdStart: boolean, parent: OtelContext): Span {\n const name = context.functionName;\n return this.tracer.startSpan(\n name,\n {\n kind: SpanKind.SERVER,\n attributes: {\n [SEMATTRS_FAAS_EXECUTION]: context.awsRequestId,\n [SEMRESATTRS_FAAS_ID]: context.invokedFunctionArn,\n [SEMRESATTRS_CLOUD_ACCOUNT_ID]: AwsLambdaInstrumentation._extractAccountId(context.invokedFunctionArn),\n [ATTR_FAAS_COLDSTART]: requestIsColdStart,\n ...AwsLambdaInstrumentation._extractOtherEventFields(event),\n },\n },\n parent,\n );\n }\n\n private _applyRequestHook(span: Span, event: any, context: Context): void {\n const { requestHook } = this.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { event, context }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: requestHook error', e);\n },\n true,\n );\n }\n }\n\n private _handlePromiseResult(span: Span, maybePromise: Promise<{}> | undefined): Promise<{}> | undefined {\n if (typeof maybePromise?.then === 'function') {\n return maybePromise.then(\n value => {\n this._applyResponseHook(span, null, value);\n return new Promise(resolve => this._endSpan(span, undefined, () => resolve(value)));\n },\n (err: Error | string) => {\n this._applyResponseHook(span, err);\n return new Promise((resolve, reject) => this._endSpan(span, err, () => reject(err)));\n },\n );\n }\n\n // Handle synchronous return values by ending the span and applying response hook\n this._applyResponseHook(span, null, maybePromise);\n this._endSpan(span, undefined, () => {});\n return maybePromise;\n }\n\n private _determineParent(event: any, context: Context): OtelContext {\n const config = this.getConfig();\n return AwsLambdaInstrumentation._determineParent(\n event,\n context,\n config.eventContextExtractor || AwsLambdaInstrumentation._defaultEventContextExtractor,\n );\n }\n\n private _isStreamingHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n ): handler is StreamifyHandler<TEvent, TResult> {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n }\n\n /**\n *\n */\n override setTracerProvider(tracerProvider: TracerProvider) {\n super.setTracerProvider(tracerProvider);\n this._traceForceFlusher = this._traceForceFlush(tracerProvider);\n }\n\n /**\n *\n */\n private _traceForceFlush(tracerProvider: TracerProvider) {\n if (!tracerProvider) return undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let currentProvider: any = tracerProvider;\n\n if (typeof currentProvider.getDelegate === 'function') {\n currentProvider = currentProvider.getDelegate();\n }\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n override setMeterProvider(meterProvider: MeterProvider) {\n super.setMeterProvider(meterProvider);\n this._metricForceFlusher = this._metricForceFlush(meterProvider);\n }\n\n /**\n *\n */\n private _metricForceFlush(meterProvider: MeterProvider) {\n if (!meterProvider) return undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const currentProvider: any = meterProvider;\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n private _wrapCallback(original: Callback, span: Span): Callback {\n const plugin = this;\n return function wrappedCallback(this: never, err, res) {\n diag.debug('executing wrapped lookup callback function');\n plugin._applyResponseHook(span, err, res);\n\n plugin._endSpan(span, err, () => {\n diag.debug('executing original lookup callback function');\n return original.apply(this, [err, res]);\n });\n };\n }\n\n /**\n *\n */\n private _endSpan(span: Span, err: string | Error | null | undefined, callback: () => void) {\n if (err) {\n span.recordException(err);\n }\n\n let errMessage;\n if (typeof err === 'string') {\n errMessage = err;\n } else if (err) {\n errMessage = err.message;\n }\n if (errMessage) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errMessage,\n });\n }\n\n span.end();\n\n const flushers = [];\n if (this._traceForceFlusher) {\n flushers.push(this._traceForceFlusher());\n } else {\n diag.debug(\n 'Spans may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n if (this._metricForceFlusher) {\n flushers.push(this._metricForceFlusher());\n } else {\n diag.debug(\n 'Metrics may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n\n Promise.all(flushers).then(callback, callback);\n }\n\n /**\n *\n */\n private _applyResponseHook(span: Span, err?: Error | string | null, res?: any) {\n const { responseHook } = this.getConfig();\n if (responseHook) {\n safeExecuteInTheMiddle(\n () => responseHook(span, { err, res }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: responseHook error', e);\n },\n true,\n );\n }\n }\n\n /**\n *\n */\n private static _extractAccountId(arn: string): string | undefined {\n const parts = arn.split(':');\n if (parts.length >= 5) {\n return parts[4];\n }\n return undefined;\n }\n\n /**\n *\n */\n private static _defaultEventContextExtractor(event: any): OtelContext {\n // The default extractor tries to get sampled trace header from HTTP headers.\n const httpHeaders = event.headers || {};\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n }\n\n /**\n *\n */\n private static _extractOtherEventFields(event: any): Attributes {\n const answer: Attributes = {};\n const fullUrl = this._extractFullUrl(event);\n if (fullUrl) {\n answer[ATTR_URL_FULL] = fullUrl;\n }\n return answer;\n }\n\n /**\n *\n */\n private static _extractFullUrl(event: any): string | undefined {\n // API gateway encodes a lot of url information in various places to recompute this\n if (!event.headers) {\n return undefined;\n }\n // Helper function to deal with case variations (instead of making a tolower() copy of the headers)\n /**\n *\n */\n function findAny(event: any, key1: string, key2: string): string | undefined {\n return event.headers[key1] ?? event.headers[key2];\n }\n const host = findAny(event, 'host', 'Host');\n const proto = findAny(event, 'x-forwarded-proto', 'X-Forwarded-Proto');\n const port = findAny(event, 'x-forwarded-port', 'X-Forwarded-Port');\n if (!(proto && host && (event.path || event.rawPath))) {\n return undefined;\n }\n let answer = `${proto}://${host}`;\n if (port) {\n answer += `:${port}`;\n }\n answer += event.path ?? event.rawPath;\n if (event.queryStringParameters) {\n let first = true;\n for (const key in event.queryStringParameters) {\n answer += first ? '?' : '&';\n answer += encodeURIComponent(key);\n answer += '=';\n answer += encodeURIComponent(event.queryStringParameters[key]);\n first = false;\n }\n }\n return answer;\n }\n\n /**\n *\n */\n private static _determineParent(\n event: any,\n context: Context,\n eventContextExtractor: EventContextExtractor,\n ): OtelContext {\n const extractedContext = safeExecuteInTheMiddle(\n () => eventContextExtractor(event, context),\n e => {\n if (e) diag.error('aws-lambda instrumentation: eventContextExtractor error', e);\n },\n true,\n );\n if (trace.getSpan(extractedContext)?.spanContext()) {\n return extractedContext;\n }\n return ROOT_CONTEXT;\n }\n}\n"],"names":["context","otelContext"],"mappings":"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"}
{"version":3,"file":"instrumentation.js","sources":["../../../../../src/integration/instrumentation-aws-lambda/instrumentation.ts"],"sourcesContent":["// Vendored and modified from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/cc7eff47e2e7bad7678241b766753d5bd6dbc85f/packages/instrumentation-aws-lambda/src/instrumentation.ts\n// Modifications:\n// - Added Sentry `wrapHandler` around the OTel patch handler.\n// - Cancel init when handler string is invalid (TS)\n// - Hardcoded package version and name\n// - Added support for streaming handlers\n/* eslint-disable */\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Attributes,\n Context as OtelContext,\n MeterProvider,\n Span,\n TextMapGetter,\n TracerProvider,\n} from '@opentelemetry/api';\nimport {\n context as otelContext,\n diag,\n propagation,\n ROOT_CONTEXT,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_URL_FULL,\n SEMATTRS_FAAS_EXECUTION,\n SEMRESATTRS_CLOUD_ACCOUNT_ID,\n SEMRESATTRS_FAAS_ID,\n} from '@opentelemetry/semantic-conventions';\nimport type { APIGatewayProxyEventHeaders, Callback, Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { LambdaModule } from './internal-types';\nimport { ATTR_FAAS_COLDSTART } from './semconv';\nimport type { AwsLambdaInstrumentationConfig, EventContextExtractor } from './types';\nimport { wrapHandler } from '../../sdk';\nimport { SDK_VERSION } from '@sentry/core';\n\n// OpenTelemetry package version was 0.54.0 at time of vendoring.\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-aws-lambda';\n\nconst headerGetter: TextMapGetter<APIGatewayProxyEventHeaders> = {\n keys(carrier): string[] {\n return Object.keys(carrier);\n },\n get(carrier, key: string) {\n return carrier[key];\n },\n};\n\nexport const lambdaMaxInitInMilliseconds = 10_000;\nconst AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nconst AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nconst AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\n/**\n *\n */\nexport class AwsLambdaInstrumentation extends InstrumentationBase<AwsLambdaInstrumentationConfig> {\n declare private _traceForceFlusher?: () => Promise<void>;\n declare private _metricForceFlusher?: () => Promise<void>;\n\n constructor(config: AwsLambdaInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n /**\n *\n */\n init() {\n const taskRoot = process.env.LAMBDA_TASK_ROOT;\n const handlerDef = this.getConfig().lambdaHandler ?? process.env._HANDLER;\n\n // _HANDLER and LAMBDA_TASK_ROOT are always defined in Lambda but guard bail out if in the future this changes.\n if (!taskRoot || !handlerDef) {\n this._diag.debug('Skipping lambda instrumentation: no _HANDLER/lambdaHandler or LAMBDA_TASK_ROOT.', {\n taskRoot,\n handlerDef,\n });\n return [];\n }\n\n // Provide a temporary awslambda polyfill for CommonJS modules during loading\n // This prevents ReferenceError when modules use awslambda.streamifyResponse at load time\n // taken from https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/main/src/UserFunction.js#L205C7-L211C9\n if (typeof globalThis.awslambda === 'undefined') {\n (globalThis as any).awslambda = {\n streamifyResponse: (handler: any, options: any) => {\n handler[AWS_HANDLER_STREAMING_SYMBOL] = AWS_HANDLER_STREAMING_RESPONSE;\n if (typeof options?.highWaterMark === 'number') {\n handler[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = parseInt(options.highWaterMark);\n }\n return handler;\n },\n };\n }\n\n const handler = path.basename(handlerDef);\n const moduleRoot = handlerDef.substring(0, handlerDef.length - handler.length);\n\n const [module, functionName] = handler.split('.', 2);\n\n if (!module || !functionName) {\n this._diag.warn('Invalid handler definition', {\n handler,\n moduleRoot,\n module,\n });\n return [];\n }\n\n // Lambda loads user function using an absolute path.\n let filename = path.resolve(taskRoot, moduleRoot, module);\n if (!filename.endsWith('.js')) {\n // It's impossible to know in advance if the user has a js, mjs or cjs file.\n // Check that the .js file exists otherwise fallback to the next known possibilities (.mjs, .cjs).\n try {\n fs.statSync(`${filename}.js`);\n filename += '.js';\n } catch (e) {\n try {\n fs.statSync(`${filename}.mjs`);\n // fallback to .mjs (ESM)\n filename += '.mjs';\n } catch (e2) {\n try {\n fs.statSync(`${filename}.cjs`);\n // fallback to .cjs (CommonJS)\n filename += '.cjs';\n } catch (e3) {\n this._diag.warn(\n 'No handler file was able to resolved with one of the known extensions for the file',\n filename,\n );\n }\n }\n }\n }\n\n diag.debug('Instrumenting lambda handler', {\n taskRoot,\n handlerDef,\n handler,\n moduleRoot,\n module,\n filename,\n functionName,\n });\n\n const lambdaStartTime = this.getConfig().lambdaStartTime || Date.now() - Math.floor(1000 * process.uptime());\n\n return [\n new InstrumentationNodeModuleDefinition(\n // NB: The patching infrastructure seems to match names backwards, this must be the filename, while\n // InstrumentationNodeModuleFile must be the module name.\n filename,\n ['*'],\n undefined,\n undefined,\n [\n new InstrumentationNodeModuleFile(\n module,\n ['*'],\n (moduleExports: LambdaModule) => {\n if (isWrapped(moduleExports[functionName])) {\n this._unwrap(moduleExports, functionName);\n }\n this._wrap(moduleExports, functionName, this._getHandler(lambdaStartTime));\n return moduleExports;\n },\n (moduleExports?: LambdaModule) => {\n if (moduleExports == null) return;\n this._unwrap(moduleExports, functionName);\n },\n ),\n ],\n ),\n ];\n }\n\n /**\n *\n */\n private _getHandler<T extends Handler | StreamifyHandler>(handlerLoadStartTime: number) {\n return (original: T): T => {\n if (this._isStreamingHandler(original)) {\n const patchedHandler = this._getPatchHandler(original, handlerLoadStartTime);\n\n // Streaming handlers have special symbols that we need to copy over to the patched handler.\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_STREAMING_SYMBOL];\n (patchedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] = (\n original as unknown as Record<symbol, unknown>\n )[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrapHandler(patchedHandler) as T;\n }\n\n return wrapHandler(this._getPatchHandler(original, handlerLoadStartTime)) as T;\n };\n }\n\n private _getPatchHandler(original: Handler, lambdaStartTime: number): Handler;\n private _getPatchHandler(original: StreamifyHandler, lambdaStartTime: number): StreamifyHandler;\n\n /**\n *\n */\n private _getPatchHandler(original: Handler | StreamifyHandler, lambdaStartTime: number): Handler | StreamifyHandler {\n diag.debug('patch handler function');\n const plugin = this;\n\n let requestHandledBefore = false;\n let requestIsColdStart = true;\n\n /**\n *\n */\n function _onRequest(): void {\n if (requestHandledBefore) {\n // Non-first requests cannot be coldstart.\n requestIsColdStart = false;\n } else {\n if (process.env.AWS_LAMBDA_INITIALIZATION_TYPE === 'provisioned-concurrency') {\n // If sandbox environment is initialized with provisioned concurrency,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = false;\n } else {\n // Check whether it is proactive initialization or not:\n // https://aaronstuyvenberg.com/posts/understanding-proactive-initialization\n const passedTimeSinceHandlerLoad: number = Date.now() - lambdaStartTime;\n const proactiveInitialization: boolean = passedTimeSinceHandlerLoad > lambdaMaxInitInMilliseconds;\n\n // If sandbox has been initialized proactively before the actual request,\n // even the first requests should not be considered as coldstart.\n requestIsColdStart = !proactiveInitialization;\n }\n requestHandledBefore = true;\n }\n }\n\n if (this._isStreamingHandler(original)) {\n return function patchedStreamingHandler(\n this: never,\n // The event can be a user type, it truly is any.\n event: any,\n responseStream: Parameters<StreamifyHandler>[1],\n context: Context,\n ) {\n _onRequest();\n const parent = plugin._determineParent(event, context);\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, responseStream, context]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n return function patchedHandler(\n this: never,\n // The event can be a user type, it truly is any.\n event: any,\n context: Context,\n callback: Callback,\n ) {\n _onRequest();\n\n const parent = plugin._determineParent(event, context);\n\n const span = plugin._createSpanForRequest(event, context, requestIsColdStart, parent);\n plugin._applyRequestHook(span, event, context);\n\n return otelContext.with(trace.setSpan(parent, span), () => {\n // Lambda seems to pass a callback even if handler is of Promise form, so we wrap all the time before calling\n // the handler and see if the result is a Promise or not. In such a case, the callback is usually ignored. If\n // the handler happened to both call the callback and complete a returned Promise, whichever happens first will\n // win and the latter will be ignored.\n const wrappedCallback = plugin._wrapCallback(callback, span);\n const maybePromise = safeExecuteInTheMiddle(\n () => original.apply(this, [event, context, wrappedCallback]),\n error => {\n if (error != null) {\n // Exception thrown synchronously before resolving callback / promise.\n plugin._applyResponseHook(span, error);\n plugin._endSpan(span, error, () => {});\n }\n },\n ) as Promise<{}> | undefined;\n\n return plugin._handlePromiseResult(span, maybePromise);\n });\n };\n }\n\n private _createSpanForRequest(event: any, context: Context, requestIsColdStart: boolean, parent: OtelContext): Span {\n const name = context.functionName;\n return this.tracer.startSpan(\n name,\n {\n kind: SpanKind.SERVER,\n attributes: {\n [SEMATTRS_FAAS_EXECUTION]: context.awsRequestId,\n [SEMRESATTRS_FAAS_ID]: context.invokedFunctionArn,\n [SEMRESATTRS_CLOUD_ACCOUNT_ID]: AwsLambdaInstrumentation._extractAccountId(context.invokedFunctionArn),\n [ATTR_FAAS_COLDSTART]: requestIsColdStart,\n ...AwsLambdaInstrumentation._extractOtherEventFields(event),\n },\n },\n parent,\n );\n }\n\n private _applyRequestHook(span: Span, event: any, context: Context): void {\n const { requestHook } = this.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { event, context }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: requestHook error', e);\n },\n true,\n );\n }\n }\n\n private _handlePromiseResult(span: Span, maybePromise: Promise<{}> | undefined): Promise<{}> | undefined {\n if (typeof maybePromise?.then === 'function') {\n return maybePromise.then(\n value => {\n this._applyResponseHook(span, null, value);\n return new Promise(resolve => this._endSpan(span, undefined, () => resolve(value)));\n },\n (err: Error | string) => {\n this._applyResponseHook(span, err);\n return new Promise((resolve, reject) => this._endSpan(span, err, () => reject(err)));\n },\n );\n }\n\n // Handle synchronous return values by ending the span and applying response hook\n this._applyResponseHook(span, null, maybePromise);\n this._endSpan(span, undefined, () => {});\n return maybePromise;\n }\n\n private _determineParent(event: any, context: Context): OtelContext {\n const config = this.getConfig();\n return AwsLambdaInstrumentation._determineParent(\n event,\n context,\n config.eventContextExtractor || AwsLambdaInstrumentation._defaultEventContextExtractor,\n );\n }\n\n private _isStreamingHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n ): handler is StreamifyHandler<TEvent, TResult> {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n }\n\n /**\n *\n */\n override setTracerProvider(tracerProvider: TracerProvider) {\n super.setTracerProvider(tracerProvider);\n this._traceForceFlusher = this._traceForceFlush(tracerProvider);\n }\n\n /**\n *\n */\n private _traceForceFlush(tracerProvider: TracerProvider) {\n if (!tracerProvider) return undefined;\n\n let currentProvider: any = tracerProvider;\n\n if (typeof currentProvider.getDelegate === 'function') {\n currentProvider = currentProvider.getDelegate();\n }\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n override setMeterProvider(meterProvider: MeterProvider) {\n super.setMeterProvider(meterProvider);\n this._metricForceFlusher = this._metricForceFlush(meterProvider);\n }\n\n /**\n *\n */\n private _metricForceFlush(meterProvider: MeterProvider) {\n if (!meterProvider) return undefined;\n\n const currentProvider: any = meterProvider;\n\n if (typeof currentProvider.forceFlush === 'function') {\n return currentProvider.forceFlush.bind(currentProvider);\n }\n\n return undefined;\n }\n\n /**\n *\n */\n private _wrapCallback(original: Callback, span: Span): Callback {\n const plugin = this;\n return function wrappedCallback(this: never, err, res) {\n diag.debug('executing wrapped lookup callback function');\n plugin._applyResponseHook(span, err, res);\n\n plugin._endSpan(span, err, () => {\n diag.debug('executing original lookup callback function');\n return original.apply(this, [err, res]);\n });\n };\n }\n\n /**\n *\n */\n private _endSpan(span: Span, err: string | Error | null | undefined, callback: () => void) {\n if (err) {\n span.recordException(err);\n }\n\n let errMessage;\n if (typeof err === 'string') {\n errMessage = err;\n } else if (err) {\n errMessage = err.message;\n }\n if (errMessage) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errMessage,\n });\n }\n\n span.end();\n\n const flushers = [];\n if (this._traceForceFlusher) {\n flushers.push(this._traceForceFlusher());\n } else {\n diag.debug(\n 'Spans may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n if (this._metricForceFlusher) {\n flushers.push(this._metricForceFlusher());\n } else {\n diag.debug(\n 'Metrics may not be exported for the lambda function because we are not force flushing before callback.',\n );\n }\n\n Promise.all(flushers).then(callback, callback);\n }\n\n /**\n *\n */\n private _applyResponseHook(span: Span, err?: Error | string | null, res?: any) {\n const { responseHook } = this.getConfig();\n if (responseHook) {\n safeExecuteInTheMiddle(\n () => responseHook(span, { err, res }),\n e => {\n if (e) diag.error('aws-lambda instrumentation: responseHook error', e);\n },\n true,\n );\n }\n }\n\n /**\n *\n */\n private static _extractAccountId(arn: string): string | undefined {\n const parts = arn.split(':');\n if (parts.length >= 5) {\n return parts[4];\n }\n return undefined;\n }\n\n /**\n *\n */\n private static _defaultEventContextExtractor(event: any): OtelContext {\n // The default extractor tries to get sampled trace header from HTTP headers.\n const httpHeaders = event.headers || {};\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n }\n\n /**\n *\n */\n private static _extractOtherEventFields(event: any): Attributes {\n const answer: Attributes = {};\n const fullUrl = this._extractFullUrl(event);\n if (fullUrl) {\n answer[ATTR_URL_FULL] = fullUrl;\n }\n return answer;\n }\n\n /**\n *\n */\n private static _extractFullUrl(event: any): string | undefined {\n // API gateway encodes a lot of url information in various places to recompute this\n if (!event.headers) {\n return undefined;\n }\n // Helper function to deal with case variations (instead of making a tolower() copy of the headers)\n /**\n *\n */\n function findAny(event: any, key1: string, key2: string): string | undefined {\n return event.headers[key1] ?? event.headers[key2];\n }\n const host = findAny(event, 'host', 'Host');\n const proto = findAny(event, 'x-forwarded-proto', 'X-Forwarded-Proto');\n const port = findAny(event, 'x-forwarded-port', 'X-Forwarded-Port');\n if (!(proto && host && (event.path || event.rawPath))) {\n return undefined;\n }\n let answer = `${proto}://${host}`;\n if (port) {\n answer += `:${port}`;\n }\n answer += event.path ?? event.rawPath;\n if (event.queryStringParameters) {\n let first = true;\n for (const key in event.queryStringParameters) {\n answer += first ? '?' : '&';\n answer += encodeURIComponent(key);\n answer += '=';\n answer += encodeURIComponent(event.queryStringParameters[key]);\n first = false;\n }\n }\n return answer;\n }\n\n /**\n *\n */\n private static _determineParent(\n event: any,\n context: Context,\n eventContextExtractor: EventContextExtractor,\n ): OtelContext {\n const extractedContext = safeExecuteInTheMiddle(\n () => eventContextExtractor(event, context),\n e => {\n if (e) diag.error('aws-lambda instrumentation: eventContextExtractor error', e);\n },\n true,\n );\n if (trace.getSpan(extractedContext)?.spanContext()) {\n return extractedContext;\n }\n return ROOT_CONTEXT;\n }\n}\n"],"names":["context","otelContext"],"mappings":"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"}

@@ -1,1 +0,1 @@

{"type":"module","version":"10.28.0","sideEffects":false}
{"type":"module","version":"10.29.0","sideEffects":false}

@@ -1,1 +0,1 @@

{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../src/integration/instrumentation-aws-lambda/instrumentation.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAGV,aAAa,EAGb,cAAc,EACf,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EACL,mBAAmB,EACnB,mCAAmC,EAIpC,MAAM,gCAAgC,CAAC;AAYxC,OAAO,KAAK,EAAE,8BAA8B,EAAyB,MAAM,SAAS,CAAC;AAiBrF,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAKlD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,mBAAmB,CAAC,8BAA8B,CAAC;IAC/F,QAAgB,kBAAkB,CAAC,CAAsB;IACzD,QAAgB,mBAAmB,CAAC,CAAsB;gBAE9C,MAAM,GAAE,8BAAmC;IAIvD;;OAEG;IACH,IAAI;IA+GJ;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,gBAAgB;IA0GxB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACM,iBAAiB,CAAC,cAAc,EAAE,cAAc;IAKzD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACM,gBAAgB,CAAC,aAAa,EAAE,aAAa;IAKtD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAuChB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAQhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAM5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IASvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAoC9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAiBhC"}
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../../../src/integration/instrumentation-aws-lambda/instrumentation.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAGV,aAAa,EAGb,cAAc,EACf,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EACL,mBAAmB,EACnB,mCAAmC,EAIpC,MAAM,gCAAgC,CAAC;AAYxC,OAAO,KAAK,EAAE,8BAA8B,EAAyB,MAAM,SAAS,CAAC;AAiBrF,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAKlD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,mBAAmB,CAAC,8BAA8B,CAAC;IAC/F,QAAgB,kBAAkB,CAAC,CAAsB;IACzD,QAAgB,mBAAmB,CAAC,CAAsB;gBAE9C,MAAM,GAAE,8BAAmC;IAIvD;;OAEG;IACH,IAAI;IA+GJ;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,gBAAgB;IAyGxB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACM,iBAAiB,CAAC,cAAc,EAAE,cAAc;IAKzD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACM,gBAAgB,CAAC,aAAa,EAAE,aAAa;IAKtD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAuChB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAQhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAM5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IASvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAoC9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAiBhC"}
{
"name": "@sentry/aws-serverless",
"version": "10.28.0",
"version": "10.29.0",
"description": "Official Sentry SDK for AWS Lambda and AWS Serverless Environments",

@@ -72,5 +72,5 @@ "repository": "git://github.com/getsentry/sentry-javascript.git",

"@opentelemetry/semantic-conventions": "^1.37.0",
"@sentry/core": "10.28.0",
"@sentry/node": "10.28.0",
"@sentry/node-core": "10.28.0",
"@sentry/core": "10.29.0",
"@sentry/node": "10.29.0",
"@sentry/node-core": "10.29.0",
"@types/aws-lambda": "^8.10.62"

@@ -77,0 +77,0 @@ },