@sentry/aws-serverless
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"awslambda-auto.js","sources":["../../../src/awslambda-auto.ts"],"sourcesContent":["// Important: This file cannot import anything other than the index file below.\n// This is the entry point to the lambda layer, which only contains the entire SDK bundled into the index file\nimport * as Sentry from './index';\n\nconst lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT;\nif (lambdaTaskRoot) {\n const handlerString = process.env._HANDLER;\n if (!handlerString) {\n throw Error(`LAMBDA_TASK_ROOT is non-empty(${lambdaTaskRoot}) but _HANDLER is not set`);\n }\n\n Sentry.init({\n // We want to load the performance integrations here, if the tracesSampleRate is set for the layer in env vars\n // Sentry node's `getDefaultIntegrations` will load them if tracing is enabled,\n // which is the case if `tracesSampleRate` is set.\n // We can safely add all the node default integrations\n integrations: Sentry.getDefaultIntegrations(\n process.env.SENTRY_TRACES_SAMPLE_RATE\n ? {\n tracesSampleRate: parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE),\n }\n : {},\n ),\n });\n} else {\n throw Error('LAMBDA_TASK_ROOT environment variable is not set');\n}\n"],"names":["Sentry.init","Sentry.getDefaultIntegrations"],"mappings":";;AAAA;AACA;;AAGA,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,gBAAgB;AACnD,IAAI,cAAc,EAAE;AACpB,EAAE,MAAM,aAAA,GAAgB,OAAO,CAAC,GAAG,CAAC,QAAQ;AAC5C,EAAE,IAAI,CAAC,aAAa,EAAE;AACtB,IAAI,MAAM,KAAK,CAAC,CAAC,8BAA8B,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAC3F;;AAEA,EAAEA,SAAW,CAAC;AACd;AACA;AACA;AACA;AACA,IAAI,YAAY,EAAEC,2BAA6B;AAC/C,MAAM,OAAO,CAAC,GAAG,CAAC;AAClB,UAAU;AACV,YAAY,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AAC/E;AACA,UAAU,EAAE;AACZ,KAAK;AACL,GAAG,CAAC;AACJ,CAAA,MAAO;AACP,EAAE,MAAM,KAAK,CAAC,kDAAkD,CAAC;AACjE;;"} | ||
| {"version":3,"file":"awslambda-auto.js","sources":["../../../src/awslambda-auto.ts"],"sourcesContent":["// Important: This file cannot import anything other than the index file below.\n// This is the entry point to the lambda layer, which only contains the entire SDK bundled into the index file\nimport * as Sentry from './index';\n\nconst lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT;\nif (lambdaTaskRoot) {\n const handlerString = process.env._HANDLER;\n if (!handlerString) {\n throw Error(`LAMBDA_TASK_ROOT is non-empty(${lambdaTaskRoot}) but _HANDLER is not set`);\n }\n\n Sentry.init({\n // We want to load the performance integrations here, if the tracesSampleRate is set for the layer in env vars\n // Sentry node's `getDefaultIntegrations` will load them if tracing is enabled,\n // which is the case if `tracesSampleRate` is set.\n // We can safely add all the node default integrations\n integrations: Sentry.getDefaultIntegrations(\n process.env.SENTRY_TRACES_SAMPLE_RATE\n ? {\n tracesSampleRate: parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE),\n }\n : {},\n ),\n });\n} else {\n throw Error('LAMBDA_TASK_ROOT environment variable is not set');\n}\n"],"names":["Sentry.init","Sentry.getDefaultIntegrations"],"mappings":";;AAAA;AACA;;AAGA,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,gBAAgB;AACnD,IAAI,cAAc,EAAE;AACpB,EAAE,MAAM,aAAA,GAAgB,OAAO,CAAC,GAAG,CAAC,QAAQ;AAC5C,EAAE,IAAI,CAAC,aAAa,EAAE;AACtB,IAAI,MAAM,KAAK,CAAC,CAAC,8BAA8B,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAC3F,EAAE;;AAEF,EAAEA,SAAW,CAAC;AACd;AACA;AACA;AACA;AACA,IAAI,YAAY,EAAEC,2BAA6B;AAC/C,MAAM,OAAO,CAAC,GAAG,CAAC;AAClB,UAAU;AACV,YAAY,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AAC/E;AACA,UAAU,EAAE;AACZ,KAAK;AACL,GAAG,CAAC;AACJ,CAAA,MAAO;AACP,EAAE,MAAM,KAAK,CAAC,kDAAkD,CAAC;AACjE;;"} |
@@ -99,2 +99,3 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | ||
| exports.makeNodeTransport = node.makeNodeTransport; | ||
| exports.metrics = node.metrics; | ||
| exports.modulesIntegration = node.modulesIntegration; | ||
@@ -101,0 +102,0 @@ exports.mongoIntegration = node.mongoIntegration; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} | ||
| {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"init.js","sources":["../../../src/init.ts"],"sourcesContent":["import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, debug, getSDKSource } from '@sentry/core';\nimport type { NodeClient, NodeOptions } from '@sentry/node';\nimport { getDefaultIntegrationsWithoutPerformance, initWithoutDefaultIntegrations } from '@sentry/node';\nimport { envToBool } from '@sentry/node-core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { awsIntegration } from './integration/aws';\nimport { awsLambdaIntegration } from './integration/awslambda';\n\n/**\n * Checks if proxy environment variables would interfere with the layer extension.\n * The layer extension uses localhost:9000, so we need to check if proxy settings would prevent this.\n */\nfunction shouldDisableLayerExtensionForProxy(): boolean {\n const { http_proxy, no_proxy } = process.env;\n\n // If no http proxy is configured, no interference (https_proxy doesn't affect HTTP requests)\n if (!http_proxy) {\n return false;\n }\n\n // Check if localhost is exempted by no_proxy\n if (no_proxy) {\n const exemptions = no_proxy.split(',').map(exemption => exemption.trim().toLowerCase());\n\n // Handle common localhost exemption patterns explicitly\n // If localhost is exempted, requests to the layer extension will not be proxied\n const localhostExemptions = ['*', 'localhost', '127.0.0.1', '::1'];\n if (exemptions.some(exemption => localhostExemptions.includes(exemption))) {\n return false;\n }\n }\n\n // If http_proxy is set and no localhost exemption, it would interfere\n // The layer extension uses HTTP to localhost:9000, so only http_proxy matters\n if (http_proxy) {\n DEBUG_BUILD &&\n debug.log(\n 'Disabling useLayerExtension due to http_proxy environment variable. Consider adding localhost to no_proxy to re-enable.',\n );\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the default integrations for the AWSLambda SDK.\n */\n// NOTE: in awslambda-auto.ts, we also call the original `getDefaultIntegrations` from `@sentry/node` to load performance integrations.\n// If at some point we need to filter a node integration out for good, we need to make sure to also filter it out there.\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n return [...getDefaultIntegrationsWithoutPerformance(), awsIntegration(), awsLambdaIntegration()];\n}\n\nexport interface AwsServerlessOptions extends NodeOptions {\n /**\n * If Sentry events should be proxied through the Lambda extension when using the Lambda layer.\n * Defaults to `true` when using the Lambda layer.\n *\n * Can also be configured via the `SENTRY_LAYER_EXTENSION` environment variable.\n */\n useLayerExtension?: boolean;\n}\n\n/**\n * Initializes the Sentry AWS Lambda SDK.\n *\n * @param options Configuration options for the SDK, @see {@link AWSLambdaOptions}.\n */\nexport function init(options: AwsServerlessOptions = {}): NodeClient | undefined {\n const sdkSource = getSDKSource();\n const proxyWouldInterfere = shouldDisableLayerExtensionForProxy();\n\n // Determine useLayerExtension value with the following priority:\n // 1. Explicit option value (if provided)\n // 2. Environment variable SENTRY_LAYER_EXTENSION (if set)\n // 3. Default logic based on sdkSource, tunnel, and proxy settings\n const useLayerExtensionFromEnv = envToBool(process.env.SENTRY_LAYER_EXTENSION, { strict: true });\n const defaultUseLayerExtension = sdkSource === 'aws-lambda-layer' && !options.tunnel && !proxyWouldInterfere;\n const useLayerExtension = options.useLayerExtension ?? useLayerExtensionFromEnv ?? defaultUseLayerExtension;\n\n const opts = {\n defaultIntegrations: getDefaultIntegrations(options),\n useLayerExtension,\n ...options,\n };\n\n if (opts.useLayerExtension) {\n if (sdkSource !== 'aws-lambda-layer') {\n DEBUG_BUILD && debug.warn('The Sentry Lambda extension is only supported when using the AWS Lambda layer.');\n } else if (opts.tunnel || proxyWouldInterfere) {\n if (opts.tunnel) {\n DEBUG_BUILD &&\n debug.warn(\n `Using a custom tunnel with the Sentry Lambda extension is not supported. Events will be tunnelled to ${opts.tunnel} and not through the extension.`,\n );\n }\n\n if (proxyWouldInterfere) {\n DEBUG_BUILD &&\n debug.warn(\n 'Sentry Lambda extension is disabled due to proxy environment variables (http_proxy/https_proxy). Consider adding localhost to no_proxy to re-enable.',\n );\n }\n } else {\n DEBUG_BUILD && debug.log('Proxying Sentry events through the Sentry Lambda extension');\n opts.tunnel = 'http://localhost:9000/envelope';\n }\n }\n\n applySdkMetadata(opts, 'aws-serverless', ['aws-serverless'], sdkSource);\n\n return initWithoutDefaultIntegrations(opts);\n}\n"],"names":["DEBUG_BUILD","debug","getDefaultIntegrationsWithoutPerformance","awsIntegration","awsLambdaIntegration","getSDKSource","envToBool","applySdkMetadata","initWithoutDefaultIntegrations"],"mappings":"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"} | ||
| {"version":3,"file":"init.js","sources":["../../../src/init.ts"],"sourcesContent":["import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, debug, getSDKSource } from '@sentry/core';\nimport type { NodeClient, NodeOptions } from '@sentry/node';\nimport { getDefaultIntegrationsWithoutPerformance, initWithoutDefaultIntegrations } from '@sentry/node';\nimport { envToBool } from '@sentry/node-core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { awsIntegration } from './integration/aws';\nimport { awsLambdaIntegration } from './integration/awslambda';\n\n/**\n * Checks if proxy environment variables would interfere with the layer extension.\n * The layer extension uses localhost:9000, so we need to check if proxy settings would prevent this.\n */\nfunction shouldDisableLayerExtensionForProxy(): boolean {\n const { http_proxy, no_proxy } = process.env;\n\n // If no http proxy is configured, no interference (https_proxy doesn't affect HTTP requests)\n if (!http_proxy) {\n return false;\n }\n\n // Check if localhost is exempted by no_proxy\n if (no_proxy) {\n const exemptions = no_proxy.split(',').map(exemption => exemption.trim().toLowerCase());\n\n // Handle common localhost exemption patterns explicitly\n // If localhost is exempted, requests to the layer extension will not be proxied\n const localhostExemptions = ['*', 'localhost', '127.0.0.1', '::1'];\n if (exemptions.some(exemption => localhostExemptions.includes(exemption))) {\n return false;\n }\n }\n\n // If http_proxy is set and no localhost exemption, it would interfere\n // The layer extension uses HTTP to localhost:9000, so only http_proxy matters\n if (http_proxy) {\n DEBUG_BUILD &&\n debug.log(\n 'Disabling useLayerExtension due to http_proxy environment variable. Consider adding localhost to no_proxy to re-enable.',\n );\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the default integrations for the AWSLambda SDK.\n */\n// NOTE: in awslambda-auto.ts, we also call the original `getDefaultIntegrations` from `@sentry/node` to load performance integrations.\n// If at some point we need to filter a node integration out for good, we need to make sure to also filter it out there.\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n return [...getDefaultIntegrationsWithoutPerformance(), awsIntegration(), awsLambdaIntegration()];\n}\n\nexport interface AwsServerlessOptions extends NodeOptions {\n /**\n * If Sentry events should be proxied through the Lambda extension when using the Lambda layer.\n * Defaults to `true` when using the Lambda layer.\n *\n * Can also be configured via the `SENTRY_LAYER_EXTENSION` environment variable.\n */\n useLayerExtension?: boolean;\n}\n\n/**\n * Initializes the Sentry AWS Lambda SDK.\n *\n * @param options Configuration options for the SDK, @see {@link AWSLambdaOptions}.\n */\nexport function init(options: AwsServerlessOptions = {}): NodeClient | undefined {\n const sdkSource = getSDKSource();\n const proxyWouldInterfere = shouldDisableLayerExtensionForProxy();\n\n // Determine useLayerExtension value with the following priority:\n // 1. Explicit option value (if provided)\n // 2. Environment variable SENTRY_LAYER_EXTENSION (if set)\n // 3. Default logic based on sdkSource, tunnel, and proxy settings\n const useLayerExtensionFromEnv = envToBool(process.env.SENTRY_LAYER_EXTENSION, { strict: true });\n const defaultUseLayerExtension = sdkSource === 'aws-lambda-layer' && !options.tunnel && !proxyWouldInterfere;\n const useLayerExtension = options.useLayerExtension ?? useLayerExtensionFromEnv ?? defaultUseLayerExtension;\n\n const opts = {\n defaultIntegrations: getDefaultIntegrations(options),\n useLayerExtension,\n ...options,\n };\n\n if (opts.useLayerExtension) {\n if (sdkSource !== 'aws-lambda-layer') {\n DEBUG_BUILD && debug.warn('The Sentry Lambda extension is only supported when using the AWS Lambda layer.');\n } else if (opts.tunnel || proxyWouldInterfere) {\n if (opts.tunnel) {\n DEBUG_BUILD &&\n debug.warn(\n `Using a custom tunnel with the Sentry Lambda extension is not supported. Events will be tunnelled to ${opts.tunnel} and not through the extension.`,\n );\n }\n\n if (proxyWouldInterfere) {\n DEBUG_BUILD &&\n debug.warn(\n 'Sentry Lambda extension is disabled due to proxy environment variables (http_proxy/https_proxy). Consider adding localhost to no_proxy to re-enable.',\n );\n }\n } else {\n DEBUG_BUILD && debug.log('Proxying Sentry events through the Sentry Lambda extension');\n opts.tunnel = 'http://localhost:9000/envelope';\n }\n }\n\n applySdkMetadata(opts, 'aws-serverless', ['aws-serverless'], sdkSource);\n\n return initWithoutDefaultIntegrations(opts);\n}\n"],"names":["DEBUG_BUILD","debug","getDefaultIntegrationsWithoutPerformance","awsIntegration","awsLambdaIntegration","getSDKSource","envToBool","applySdkMetadata","initWithoutDefaultIntegrations"],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"aws.js","sources":["../../../../src/integration/aws.ts"],"sourcesContent":["import { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsIntegration = defineIntegration(() => {\n return {\n name: 'Aws',\n setupOnce() {\n registerInstrumentations({\n instrumentations: [\n new AwsInstrumentation({\n preRequestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws');\n },\n }),\n ],\n });\n },\n };\n});\n"],"names":["defineIntegration","registerInstrumentations","AwsInstrumentation","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":";;;;;;AAIA;AACA;AACA;MACa,cAAA,GAAiBA,sBAAiB,CAAC,MAAM;AACtD,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,SAAS,GAAG;AAChB,MAAMC,wCAAwB,CAAC;AAC/B,QAAQ,gBAAgB,EAAE;AAC1B,UAAU,IAAIC,wCAAkB,CAAC;AACjC,YAAY,cAAc,CAAC,IAAI,EAAE;AACjC,cAAc,IAAI,CAAC,YAAY,CAACC,qCAAgC,EAAE,eAAe,CAAC;AAClF,aAAa;AACb,WAAW,CAAC;AACZ,SAAS;AACT,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC;;;;"} | ||
| {"version":3,"file":"aws.js","sources":["../../../../src/integration/aws.ts"],"sourcesContent":["import { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsIntegration = defineIntegration(() => {\n return {\n name: 'Aws',\n setupOnce() {\n registerInstrumentations({\n instrumentations: [\n new AwsInstrumentation({\n preRequestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws');\n },\n }),\n ],\n });\n },\n };\n});\n"],"names":["defineIntegration","registerInstrumentations","AwsInstrumentation","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":";;;;;;AAIA;AACA;AACA;MACa,cAAA,GAAiBA,sBAAiB,CAAC,MAAM;AACtD,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,SAAS,GAAG;AAChB,MAAMC,wCAAwB,CAAC;AAC/B,QAAQ,gBAAgB,EAAE;AAC1B,UAAU,IAAIC,wCAAkB,CAAC;AACjC,YAAY,cAAc,CAAC,IAAI,EAAE;AACjC,cAAc,IAAI,CAAC,YAAY,CAACC,qCAAgC,EAAE,eAAe,CAAC;AAClF,YAAY,CAAC;AACb,WAAW,CAAC;AACZ,SAAS;AACT,OAAO,CAAC;AACR,IAAI,CAAC;AACL,GAAG;AACH,CAAC;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"awslambda.js","sources":["../../../../src/integration/awslambda.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { captureException, generateInstrumentOnce } from '@sentry/node';\nimport { eventContextExtractor, markEventUnhandled } from '../utils';\nimport { AwsLambdaInstrumentation } from './instrumentation-aws-lambda/instrumentation';\n\ninterface AwsLambdaOptions {\n /**\n * Disables the AWS context propagation and instead uses\n * Sentry's context. Defaults to `true`, in order for\n * Sentry trace propagation to take precedence, but can\n * be disabled if you want AWS propagation to take take\n * precedence.\n */\n disableAwsContextPropagation?: boolean;\n}\n\nexport const instrumentAwsLambda = generateInstrumentOnce(\n 'AwsLambda',\n AwsLambdaInstrumentation,\n (options: AwsLambdaOptions) => {\n return {\n disableAwsContextPropagation: true,\n ...options,\n eventContextExtractor,\n requestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws-lambda');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'function.aws.lambda');\n },\n responseHook(_span, { err }) {\n if (err) {\n captureException(err, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.otel'));\n }\n },\n };\n },\n);\n\nconst _awsLambdaIntegration = ((options: AwsLambdaOptions = {}) => {\n return {\n name: 'AwsLambda',\n setupOnce() {\n instrumentAwsLambda(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsLambdaIntegration = defineIntegration(_awsLambdaIntegration);\n"],"names":["generateInstrumentOnce","AwsLambdaInstrumentation","eventContextExtractor","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","captureException","markEventUnhandled","defineIntegration"],"mappings":";;;;;;;AAiBO,MAAM,mBAAA,GAAsBA,2BAAsB;AACzD,EAAE,WAAW;AACb,EAAEC,wCAAwB;AAC1B,EAAE,CAAC,OAAO,KAAuB;AACjC,IAAI,OAAO;AACX,MAAM,4BAA4B,EAAE,IAAI;AACxC,MAAM,GAAG,OAAO;AAChB,6BAAMC,2BAAqB;AAC3B,MAAM,WAAW,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,YAAY,CAACC,qCAAgC,EAAE,sBAAsB,CAAC;AACnF,QAAQ,IAAI,CAAC,YAAY,CAACC,iCAA4B,EAAE,qBAAqB,CAAC;AAC9E,OAAO;AACP,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,GAAA,EAAK,EAAE;AACnC,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAUC,qBAAgB,CAAC,GAAG,EAAE,KAAA,IAASC,wBAAkB,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACxG;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;;AAEA,MAAM,qBAAA,IAAyB,CAAC,OAAO,GAAqB,EAAE,KAAK;AACnE,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,WAAW;AACrB,IAAI,SAAS,GAAG;AAChB,MAAM,mBAAmB,CAAC,OAAO,CAAC;AAClC,KAAK;AACL,GAAG;AACH,CAAC,CAAA;;AAED;AACA;AACA;MACa,oBAAA,GAAuBC,sBAAiB,CAAC,qBAAqB;;;;;"} | ||
| {"version":3,"file":"awslambda.js","sources":["../../../../src/integration/awslambda.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { captureException, generateInstrumentOnce } from '@sentry/node';\nimport { eventContextExtractor, markEventUnhandled } from '../utils';\nimport { AwsLambdaInstrumentation } from './instrumentation-aws-lambda/instrumentation';\n\ninterface AwsLambdaOptions {\n /**\n * Disables the AWS context propagation and instead uses\n * Sentry's context. Defaults to `true`, in order for\n * Sentry trace propagation to take precedence, but can\n * be disabled if you want AWS propagation to take take\n * precedence.\n */\n disableAwsContextPropagation?: boolean;\n}\n\nexport const instrumentAwsLambda = generateInstrumentOnce(\n 'AwsLambda',\n AwsLambdaInstrumentation,\n (options: AwsLambdaOptions) => {\n return {\n disableAwsContextPropagation: true,\n ...options,\n eventContextExtractor,\n requestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws-lambda');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'function.aws.lambda');\n },\n responseHook(_span, { err }) {\n if (err) {\n captureException(err, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.otel'));\n }\n },\n };\n },\n);\n\nconst _awsLambdaIntegration = ((options: AwsLambdaOptions = {}) => {\n return {\n name: 'AwsLambda',\n setupOnce() {\n instrumentAwsLambda(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsLambdaIntegration = defineIntegration(_awsLambdaIntegration);\n"],"names":["generateInstrumentOnce","AwsLambdaInstrumentation","eventContextExtractor","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","captureException","markEventUnhandled","defineIntegration"],"mappings":";;;;;;;AAiBO,MAAM,mBAAA,GAAsBA,2BAAsB;AACzD,EAAE,WAAW;AACb,EAAEC,wCAAwB;AAC1B,EAAE,CAAC,OAAO,KAAuB;AACjC,IAAI,OAAO;AACX,MAAM,4BAA4B,EAAE,IAAI;AACxC,MAAM,GAAG,OAAO;AAChB,6BAAMC,2BAAqB;AAC3B,MAAM,WAAW,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,YAAY,CAACC,qCAAgC,EAAE,sBAAsB,CAAC;AACnF,QAAQ,IAAI,CAAC,YAAY,CAACC,iCAA4B,EAAE,qBAAqB,CAAC;AAC9E,MAAM,CAAC;AACP,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,GAAA,EAAK,EAAE;AACnC,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAUC,qBAAgB,CAAC,GAAG,EAAE,KAAA,IAASC,wBAAkB,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACxG,QAAQ;AACR,MAAM,CAAC;AACP,KAAK;AACL,EAAE,CAAC;AACH;;AAEA,MAAM,qBAAA,IAAyB,CAAC,OAAO,GAAqB,EAAE,KAAK;AACnE,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,WAAW;AACrB,IAAI,SAAS,GAAG;AAChB,MAAM,mBAAmB,CAAC,OAAO,CAAC;AAClC,IAAI,CAAC;AACL,GAAG;AACH,CAAC,CAAA;;AAED;AACA;AACA;MACa,oBAAA,GAAuBC,sBAAiB,CAAC,qBAAqB;;;;;"} |
@@ -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 // 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":";;;;;;;;;;;AA8DA;AACA,MAAM,eAAA,GAAkBA,gBAAW;AACnC,MAAM,YAAA,GAAe,oCAAoC;;AAEzD,MAAM,YAAY,GAA+C;AACjE,EAAE,IAAI,CAAC,OAAO,EAAY;AAC1B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,EAAE,CAAC;AACH,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAU;AAC5B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC;AACvB,EAAE,CAAC;AACH,CAAC;;AAEM,MAAM,2BAAA,GAA8B;AAC3C,MAAM,+BAA+B,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACvF,MAAM,mCAAmC,MAAM,CAAC,GAAG,CAAC,oDAAoD,CAAC;AACzG,MAAM,8BAAA,GAAiC,UAAU;;AAEjD;AACA;AACA;AACO,MAAM,wBAAA,SAAiCC,mCAAmB,CAAiC;;AAIlG,EAAE,WAAW,CAAC,MAAM,GAAmC,EAAE,EAAE;AAC3D,IAAI,KAAK,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC;AAChD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT,IAAI,MAAM,QAAA,GAAW,OAAO,CAAC,GAAG,CAAC,gBAAgB;AACjD,IAAI,MAAM,UAAA,GAAa,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,OAAO,CAAC,GAAG,CAAC,QAAQ;;AAE7E;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iFAAiF,EAAE;AAC1G,QAAQ,QAAQ;AAChB,QAAQ,UAAU;AAClB,OAAO,CAAC;AACR,MAAM,OAAO,EAAE;AACf,IAAI;;AAEJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,UAAU,CAAC,SAAA,KAAc,WAAW,EAAE;AACrD,MAAM,CAAC,UAAA,GAAmB,YAAY;AACtC,QAAQ,iBAAiB,EAAE,CAAC,OAAO,EAAO,OAAO,KAAU;AAC3D,UAAU,OAAO,CAAC,4BAA4B,CAAA,GAAI,8BAA8B;AAChF,UAAU,IAAI,OAAO,OAAO,EAAE,aAAA,KAAkB,QAAQ,EAAE;AAC1D,YAAY,OAAO,CAAC,gCAAgC,CAAA,GAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;AACvF,UAAU;AACV,UAAU,OAAO,OAAO;AACxB,QAAQ,CAAC;AACT,OAAO;AACP,IAAI;;AAEJ,IAAI,MAAM,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC7C,IAAI,MAAM,UAAA,GAAa,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,MAAA,GAAS,OAAO,CAAC,MAAM,CAAC;;AAElF,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE;AACpD,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,MAAM;AACd,OAAO,CAAC;AACR,MAAM,OAAO,EAAE;AACf,IAAI;;AAEJ;AACA,IAAI,IAAI,QAAA,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;AAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnC;AACA;AACA,MAAM,IAAI;AACV,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAA,QAAA,CAAA,GAAA,CAAA,CAAA;AACA,QAAA,QAAA,IAAA,KAAA;AACA,MAAA,CAAA,CAAA,OAAA,CAAA,EAAA;AACA,QAAA,IAAA;AACA,UAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AACA;AACA,UAAA,QAAA,IAAA,MAAA;AACA,QAAA,CAAA,CAAA,OAAA,EAAA,EAAA;AACA,UAAA,IAAA;AACA,YAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AACA;AACA,YAAA,QAAA,IAAA,MAAA;AACA,UAAA,CAAA,CAAA,OAAA,EAAA,EAAA;AACA,YAAA,IAAA,CAAA,KAAA,CAAA,IAAA;AACA,cAAA,oFAAA;AACA,cAAA,QAAA;AACA,aAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;;AAEA,IAAAC,QAAA,CAAA,KAAA,CAAA,8BAAA,EAAA;AACA,MAAA,QAAA;AACA,MAAA,UAAA;AACA,MAAA,OAAA;AACA,MAAA,UAAA;AACA,MAAA,MAAA;AACA,MAAA,QAAA;AACA,MAAA,YAAA;AACA,KAAA,CAAA;;AAEA,IAAA,MAAA,eAAA,GAAA,IAAA,CAAA,SAAA,EAAA,CAAA,eAAA,IAAA,IAAA,CAAA,GAAA,EAAA,GAAA,IAAA,CAAA,KAAA,CAAA,IAAA,GAAA,OAAA,CAAA,MAAA,EAAA,CAAA;;AAEA,IAAA,OAAA;AACA,MAAA,IAAAC,mDAAA;AACA;AACA;AACA,QAAA,QAAA;AACA,QAAA,CAAA,GAAA,CAAA;AACA,QAAA,SAAA;AACA,QAAA,SAAA;AACA,QAAA;AACA,UAAA,IAAAC,6CAAA;AACA,YAAA,MAAA;AACA,YAAA,CAAA,GAAA,CAAA;AACA,YAAA,CAAA,aAAA,KAAA;AACA,cAAA,IAAAC,yBAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,EAAA;AACA,gBAAA,IAAA,CAAA,OAAA,CAAA,aAAA,EAAA,YAAA,CAAA;AACA,cAAA;AACA,cAAA,IAAA,CAAA,KAAA,CAAA,aAAA,EAAA,YAAA,EAAA,IAAA,CAAA,WAAA,CAAA,eAAA,CAAA,CAAA;AACA,cAAA,OAAA,aAAA;AACA,YAAA,CAAA;AACA,YAAA,CAAA,aAAA,KAAA;AACA,cAAA,IAAA,aAAA,IAAA,IAAA,EAAA;AACA,cAAA,IAAA,CAAA,OAAA,CAAA,aAAA,EAAA,YAAA,CAAA;AACA,YAAA,CAAA;AACA,WAAA;AACA,SAAA;AACA,OAAA;AACA,KAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,WAAA,CAAA,oBAAA,EAAA;AACA,IAAA,OAAA,CAAA,QAAA,KAAA;AACA,MAAA,IAAA,IAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,EAAA;AACA,QAAA,MAAA,cAAA,GAAA,IAAA,CAAA,gBAAA,CAAA,QAAA,EAAA,oBAAA,CAAA;;AAEA;AACA,QAAA,CAAA,cAAA,GAAA,4BAAA,CAAA,GAAA;AACA,UAAA;AACA,UAAA,4BAAA,CAAA;AACA,QAAA,CAAA,cAAA,GAAA,gCAAA,CAAA,GAAA;AACA,UAAA;AACA,UAAA,gCAAA,CAAA;;AAEA,QAAA,OAAAC,eAAA,CAAA,cAAA,CAAA;AACA,MAAA;;AAEA,MAAA,OAAAA,eAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,QAAA,EAAA,oBAAA,CAAA,CAAA;AACA,IAAA,CAAA;AACA,EAAA;;AAKA;AACA;AACA;AACA,GAAA,gBAAA,CAAA,QAAA,EAAA,eAAA,EAAA;AACA,IAAAJ,QAAA,CAAA,KAAA,CAAA,wBAAA,CAAA;AACA,IAAA,MAAA,MAAA,GAAA,IAAA;;AAEA,IAAA,IAAA,oBAAA,GAAA,KAAA;AACA,IAAA,IAAA,kBAAA,GAAA,IAAA;;AAEA;AACA;AACA;AACA,IAAA,SAAA,UAAA,GAAA;AACA,MAAA,IAAA,oBAAA,EAAA;AACA;AACA,QAAA,kBAAA,GAAA,KAAA;AACA,MAAA,CAAA,MAAA;AACA,QAAA,IAAA,OAAA,CAAA,GAAA,CAAA,8BAAA,KAAA,yBAAA,EAAA;AACA;AACA;AACA,UAAA,kBAAA,GAAA,KAAA;AACA,QAAA,CAAA,MAAA;AACA;AACA;AACA,UAAA,MAAA,0BAAA,GAAA,IAAA,CAAA,GAAA,EAAA,GAAA,eAAA;AACA,UAAA,MAAA,uBAAA,GAAA,0BAAA,GAAA,2BAAA;;AAEA;AACA;AACA,UAAA,kBAAA,GAAA,CAAA,uBAAA;AACA,QAAA;AACA,QAAA,oBAAA,GAAA,IAAA;AACA,MAAA;AACA,IAAA;;AAEA,IAAA,IAAA,IAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,EAAA;AACA,MAAA,OAAA,SAAA,uBAAA;;AAEA;AACA,QAAA,KAAA;AACA,QAAA,cAAA;AACA,QAAA,OAAA;AACA,QAAA;AACA,QAAA,UAAA,EAAA;AACA,QAAA,MAAA,MAAA,GAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AACA,QAAA,MAAA,IAAA,GAAA,MAAA,CAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,MAAA,CAAA;AACA,QAAA,MAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,KAAA,EAAA,OAAA,CAAA;;AAEA,QAAA,OAAAK,WAAA,CAAA,IAAA,CAAAC,SAAA,CAAA,OAAA,CAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA;AACA,UAAA,MAAA,YAAA,GAAAC,sCAAA;AACA,YAAA,MAAA,QAAA,CAAA,KAAA,CAAA,IAAA,EAAA,CAAA,KAAA,EAAA,cAAA,EAAA,OAAA,CAAA,CAAA;AACA,YAAA,KAAA,IAAA;AACA,cAAA,IAAA,KAAA,IAAA,IAAA,EAAA;AACA;AACA,gBAAA,MAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,gBAAA,MAAA,CAAA,QAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AACA,cAAA;AACA,YAAA,CAAA;AACA,WAAA;;AAEA,UAAA,OAAA,MAAA,CAAA,oBAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,QAAA,CAAA,CAAA;AACA,MAAA,CAAA;AACA,IAAA;;AAEA,IAAA,OAAA,SAAA,cAAA;;AAEA;AACA;AACA,MAAA,KAAA;AACA,MAAA,OAAA;AACA,MAAA,QAAA;AACA,MAAA;AACA,MAAA,UAAA,EAAA;;AAEA,MAAA,MAAA,MAAA,GAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,EAAA,OAAA,CAAA;;AAEA,MAAA,MAAA,IAAA,GAAA,MAAA,CAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,MAAA,CAAA;AACA,MAAA,MAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,KAAA,EAAA,OAAA,CAAA;;AAEA,MAAA,OAAAF,WAAA,CAAA,IAAA,CAAAC,SAAA,CAAA,OAAA,CAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA;AACA;AACA;AACA;AACA;AACA,QAAA,MAAA,eAAA,GAAA,MAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,CAAA;AACA,QAAA,MAAA,YAAA,GAAAC,sCAAA;AACA,UAAA,MAAA,QAAA,CAAA,KAAA,CAAA,IAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,eAAA,CAAA,CAAA;AACA,UAAA,KAAA,IAAA;AACA,YAAA,IAAA,KAAA,IAAA,IAAA,EAAA;AACA;AACA,cAAA,MAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,cAAA,MAAA,CAAA,QAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AACA,YAAA;AACA,UAAA,CAAA;AACA,SAAA;;AAEA,QAAA,OAAA,MAAA,CAAA,oBAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,MAAA,CAAA,CAAA;AACA,IAAA,CAAA;AACA,EAAA;;AAEA,GAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,MAAA,EAAA;AACA,IAAA,MAAA,IAAA,GAAA,OAAA,CAAA,YAAA;AACA,IAAA,OAAA,IAAA,CAAA,MAAA,CAAA,SAAA;AACA,MAAA,IAAA;AACA,MAAA;AACA,QAAA,IAAA,EAAAC,YAAA,CAAA,MAAA;AACA,QAAA,UAAA,EAAA;AACA,UAAA,CAAAC,2CAAA,GAAA,OAAA,CAAA,YAAA;AACA,UAAA,CAAAC,uCAAA,GAAA,OAAA,CAAA,kBAAA;AACA,UAAA,CAAAC,gDAAA,GAAA,wBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,kBAAA,CAAA;AACA,UAAA,CAAAC,2BAAA,GAAA,kBAAA;AACA,UAAA,GAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,MAAA,MAAA;AACA,KAAA;AACA,EAAA;;AAEA,GAAA,iBAAA,CAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA;AACA,IAAA,MAAA,EAAA,WAAA,EAAA,GAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,IAAA,WAAA,EAAA;AACA,MAAAL,sCAAA;AACA,QAAA,MAAA,WAAA,CAAA,IAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,CAAA;AACA,QAAA,CAAA,IAAA;AACA,UAAA,IAAA,CAAA,EAAAP,QAAA,CAAA,KAAA,CAAA,+CAAA,EAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,QAAA,IAAA;AACA,OAAA;AACA,IAAA;AACA,EAAA;;AAEA,GAAA,oBAAA,CAAA,IAAA,EAAA,YAAA,EAAA;AACA,IAAA,IAAA,OAAA,YAAA,EAAA,IAAA,KAAA,UAAA,EAAA;AACA,MAAA,OAAA,YAAA,CAAA,IAAA;AACA,QAAA,KAAA,IAAA;AACA,UAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,CAAA;AACA,UAAA,OAAA,IAAA,OAAA,CAAA,OAAA,IAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,QAAA,CAAA,GAAA,KAAA;AACA,UAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,GAAA,CAAA;AACA,UAAA,OAAA,IAAA,OAAA,CAAA,CAAA,OAAA,EAAA,MAAA,KAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,GAAA,EAAA,MAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,OAAA;AACA,IAAA;;AAEA;AACA,IAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AACA,IAAA,OAAA,YAAA;AACA,EAAA;;AAEA,GAAA,gBAAA,CAAA,KAAA,EAAA,OAAA,EAAA;AACA,IAAA,MAAA,MAAA,GAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,OAAA,wBAAA,CAAA,gBAAA;AACA,MAAA,KAAA;AACA,MAAA,OAAA;AACA,MAAA,MAAA,CAAA,qBAAA,IAAA,wBAAA,CAAA,6BAAA;AACA,KAAA;AACA,EAAA;;AAEA,GAAA,mBAAA;AACA,IAAA,OAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA,CAAA,OAAA,GAAA,4BAAA,CAAA,KAAA;AACA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,iBAAA,CAAA,cAAA,EAAA;AACA,IAAA,KAAA,CAAA,iBAAA,CAAA,cAAA,CAAA;AACA,IAAA,IAAA,CAAA,kBAAA,GAAA,IAAA,CAAA,gBAAA,CAAA,cAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,gBAAA,CAAA,cAAA,EAAA;AACA,IAAA,IAAA,CAAA,cAAA,EAAA,OAAA,SAAA;;AAEA;AACA,IAAA,IAAA,eAAA,GAAA,cAAA;;AAEA,IAAA,IAAA,OAAA,eAAA,CAAA,WAAA,KAAA,UAAA,EAAA;AACA,MAAA,eAAA,GAAA,eAAA,CAAA,WAAA,EAAA;AACA,IAAA;;AAEA,IAAA,IAAA,OAAA,eAAA,CAAA,UAAA,KAAA,UAAA,EAAA;AACA,MAAA,OAAA,eAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,CAAA;AACA,IAAA;;AAEA,IAAA,OAAA,SAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,gBAAA,CAAA,aAAA,EAAA;AACA,IAAA,KAAA,CAAA,gBAAA,CAAA,aAAA,CAAA;AACA,IAAA,IAAA,CAAA,mBAAA,GAAA,IAAA,CAAA,iBAAA,CAAA,aAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,iBAAA,CAAA,aAAA,EAAA;AACA,IAAA,IAAA,CAAA,aAAA,EAAA,OAAA,SAAA;;AAEA;AACA,IAAA,MAAA,eAAA,GAAA,aAAA;;AAEA,IAAA,IAAA,OAAA,eAAA,CAAA,UAAA,KAAA,UAAA,EAAA;AACA,MAAA,OAAA,eAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,CAAA;AACA,IAAA;;AAEA,IAAA,OAAA,SAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA;AACA,IAAA,MAAA,MAAA,GAAA,IAAA;AACA,IAAA,OAAA,SAAA,eAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,MAAAA,QAAA,CAAA,KAAA,CAAA,4CAAA,CAAA;AACA,MAAA,MAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,GAAA,EAAA,GAAA,CAAA;;AAEA,MAAA,MAAA,CAAA,QAAA,CAAA,IAAA,EAAA,GAAA,EAAA,MAAA;AACA,QAAAA,QAAA,CAAA,KAAA,CAAA,6CAAA,CAAA;AACA,QAAA,OAAA,QAAA,CAAA,KAAA,CAAA,IAAA,EAAA,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA;AACA,MAAA,CAAA,CAAA;AACA,IAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,QAAA,CAAA,IAAA,EAAA,GAAA,EAAA,QAAA,EAAA;AACA,IAAA,IAAA,GAAA,EAAA;AACA,MAAA,IAAA,CAAA,eAAA,CAAA,GAAA,CAAA;AACA,IAAA;;AAEA,IAAA,IAAA,UAAA;AACA,IAAA,IAAA,OAAA,GAAA,KAAA,QAAA,EAAA;AACA,MAAA,UAAA,GAAA,GAAA;AACA,IAAA,CAAA,MAAA,IAAA,GAAA,EAAA;AACA,MAAA,UAAA,GAAA,GAAA,CAAA,OAAA;AACA,IAAA;AACA,IAAA,IAAA,UAAA,EAAA;AACA,MAAA,IAAA,CAAA,SAAA,CAAA;AACA,QAAA,IAAA,EAAAa,kBAAA,CAAA,KAAA;AACA,QAAA,OAAA,EAAA,UAAA;AACA,OAAA,CAAA;AACA,IAAA;;AAEA,IAAA,IAAA,CAAA,GAAA,EAAA;;AAEA,IAAA,MAAA,QAAA,GAAA,EAAA;AACA,IAAA,IAAA,IAAA,CAAA,kBAAA,EAAA;AACA,MAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,kBAAA,EAAA,CAAA;AACA,IAAA,CAAA,MAAA;AACA,MAAAb,QAAA,CAAA,KAAA;AACA,QAAA,sGAAA;AACA,OAAA;AACA,IAAA;AACA,IAAA,IAAA,IAAA,CAAA,mBAAA,EAAA;AACA,MAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,IAAA,CAAA,MAAA;AACA,MAAAA,QAAA,CAAA,KAAA;AACA,QAAA,wGAAA;AACA,OAAA;AACA,IAAA;;AAEA,IAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,QAAA,EAAA,QAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,kBAAA,CAAA,IAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,IAAA,MAAA,EAAA,YAAA,EAAA,GAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,IAAA,YAAA,EAAA;AACA,MAAAO,sCAAA;AACA,QAAA,MAAA,YAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAAA;AACA,QAAA,CAAA,IAAA;AACA,UAAA,IAAA,CAAA,EAAAP,QAAA,CAAA,KAAA,CAAA,gDAAA,EAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,QAAA,IAAA;AACA,OAAA;AACA,IAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,iBAAA,CAAA,GAAA,EAAA;AACA,IAAA,MAAA,KAAA,GAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA;AACA,IAAA,IAAA,KAAA,CAAA,MAAA,IAAA,CAAA,EAAA;AACA,MAAA,OAAA,KAAA,CAAA,CAAA,CAAA;AACA,IAAA;AACA,IAAA,OAAA,SAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,6BAAA,CAAA,KAAA,EAAA;AACA;AACA,IAAA,MAAA,WAAA,GAAA,KAAA,CAAA,OAAA,IAAA,EAAA;AACA,IAAA,OAAAc,eAAA,CAAA,OAAA,CAAAT,WAAA,CAAA,MAAA,EAAA,EAAA,WAAA,EAAA,YAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,wBAAA,CAAA,KAAA,EAAA;AACA,IAAA,MAAA,MAAA,GAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,IAAA,IAAA,OAAA,EAAA;AACA,MAAA,MAAA,CAAAU,iCAAA,CAAA,GAAA,OAAA;AACA,IAAA;AACA,IAAA,OAAA,MAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,eAAA,CAAA,KAAA,EAAA;AACA;AACA,IAAA,IAAA,CAAA,KAAA,CAAA,OAAA,EAAA;AACA,MAAA,OAAA,SAAA;AACA,IAAA;AACA;AACA;AACA;AACA;AACA,IAAA,SAAA,OAAA,CAAA,KAAA,EAAA,IAAA,EAAA,IAAA,EAAA;AACA,MAAA,OAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA;AACA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,OAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AACA,IAAA,MAAA,KAAA,GAAA,OAAA,CAAA,KAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA;AACA,IAAA,MAAA,IAAA,GAAA,OAAA,CAAA,KAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA;AACA,IAAA,IAAA,EAAA,KAAA,IAAA,IAAA,KAAA,KAAA,CAAA,IAAA,IAAA,KAAA,CAAA,OAAA,CAAA,CAAA,EAAA;AACA,MAAA,OAAA,SAAA;AACA,IAAA;AACA,IAAA,IAAA,MAAA,GAAA,CAAA,EAAA,KAAA,CAAA,GAAA,EAAA,IAAA,CAAA,CAAA;AACA,IAAA,IAAA,IAAA,EAAA;AACA,MAAA,MAAA,IAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACA,IAAA;AACA,IAAA,MAAA,IAAA,KAAA,CAAA,IAAA,IAAA,KAAA,CAAA,OAAA;AACA,IAAA,IAAA,KAAA,CAAA,qBAAA,EAAA;AACA,MAAA,IAAA,KAAA,GAAA,IAAA;AACA,MAAA,KAAA,MAAA,GAAA,IAAA,KAAA,CAAA,qBAAA,EAAA;AACA,QAAA,MAAA,IAAA,KAAA,GAAA,GAAA,GAAA,GAAA;AACA,QAAA,MAAA,IAAA,kBAAA,CAAA,GAAA,CAAA;AACA,QAAA,MAAA,IAAA,GAAA;AACA,QAAA,MAAA,IAAA,kBAAA,CAAA,KAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA;AACA,QAAA,KAAA,GAAA,KAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA,OAAA,MAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,gBAAA;AACA,IAAA,KAAA;AACA,IAAA,OAAA;AACA,IAAA,qBAAA;AACA,IAAA;AACA,IAAA,MAAA,gBAAA,GAAAR,sCAAA;AACA,MAAA,MAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AACA,MAAA,CAAA,IAAA;AACA,QAAA,IAAA,CAAA,EAAAP,QAAA,CAAA,KAAA,CAAA,yDAAA,EAAA,CAAA,CAAA;AACA,MAAA,CAAA;AACA,MAAA,IAAA;AACA,KAAA;AACA,IAAA,IAAAM,SAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,EAAA;AACA,MAAA,OAAA,gBAAA;AACA,IAAA;AACA,IAAA,OAAAU,gBAAA;AACA,EAAA;AACA;;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"sdk.js","sources":["../../../src/sdk.ts"],"sourcesContent":["import type { Scope } from '@sentry/core';\nimport { consoleSandbox, debug } from '@sentry/core';\nimport { captureException, captureMessage, flush, getCurrentScope, withScope } from '@sentry/node';\nimport type { Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport { performance } from 'perf_hooks';\nimport { types } from 'util';\nimport { DEBUG_BUILD } from './debug-build';\nimport { markEventUnhandled } from './utils';\n\nconst { isPromise } = types;\n\n// https://www.npmjs.com/package/aws-lambda-consumer\ntype SyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n callback: Parameters<T>[2],\n) => void;\n\nexport type AsyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n) => Promise<NonNullable<Parameters<Parameters<T>[2]>[1]>>;\n\nexport interface WrapperOptions {\n flushTimeout: number;\n callbackWaitsForEmptyEventLoop: boolean;\n captureTimeoutWarning: boolean;\n timeoutWarningLimit: number;\n /**\n * Capture all errors when `Promise.allSettled` is returned by the handler\n * The {@link wrapHandler} will not fail the lambda even if there are errors\n * @default false\n */\n captureAllSettledReasons: boolean;\n // TODO(v11): Remove this option since its no longer used.\n /**\n * @deprecated This option has no effect and will be removed in a future major version.\n * If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`, otherwise OpenTelemetry will automatically trace the handler.\n */\n startTrace: boolean;\n}\n\n/** */\nfunction isPromiseAllSettledResult<T>(result: T[]): boolean {\n return result.every(\n v =>\n Object.prototype.hasOwnProperty.call(v, 'status') &&\n (Object.prototype.hasOwnProperty.call(v, 'value') || Object.prototype.hasOwnProperty.call(v, 'reason')),\n );\n}\n\ntype PromiseSettledResult<T> = { status: 'rejected' | 'fulfilled'; reason?: T };\n\n/** */\nfunction getRejectedReasons<T>(results: PromiseSettledResult<T>[]): T[] {\n return results.reduce((rejected: T[], result) => {\n if (result.status === 'rejected' && result.reason) rejected.push(result.reason);\n return rejected;\n }, []);\n}\n\n/**\n * TODO(v11): Remove this function\n * @deprecated This function is no longer used and will be removed in a future major version.\n */\nexport function tryPatchHandler(_taskRoot: string, _handlerPath: string): void {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('The `tryPatchHandler` function is deprecated and will be removed in a future major version.');\n });\n}\n\n/**\n * Tries to invoke context.getRemainingTimeInMillis if not available returns 0\n * Some environments use AWS lambda but don't support this function\n * @param context\n */\nfunction tryGetRemainingTimeInMillis(context: Context): number {\n return typeof context.getRemainingTimeInMillis === 'function' ? context.getRemainingTimeInMillis() : 0;\n}\n\n/**\n * Adds additional information from the environment and AWS Context to the Sentry Scope.\n *\n * @param scope Scope that should be enhanced\n * @param context AWS Lambda context that will be used to extract some part of the data\n * @param startTime performance.now() when wrapHandler was invoked\n */\nfunction enhanceScopeWithEnvironmentData(scope: Scope, context: Context, startTime: number): void {\n scope.setContext('aws.lambda', {\n aws_request_id: context.awsRequestId,\n function_name: context.functionName,\n function_version: context.functionVersion,\n invoked_function_arn: context.invokedFunctionArn,\n execution_duration_in_millis: performance.now() - startTime,\n remaining_time_in_millis: tryGetRemainingTimeInMillis(context),\n 'sys.argv': process.argv,\n });\n\n scope.setContext('aws.cloudwatch.logs', {\n log_group: context.logGroupName,\n log_stream: context.logStreamName,\n url: `https://console.aws.amazon.com/cloudwatch/home?region=${\n process.env.AWS_REGION\n }#logsV2:log-groups/log-group/${encodeURIComponent(context.logGroupName)}/log-events/${encodeURIComponent(\n context.logStreamName,\n )}?filterPattern=\"${context.awsRequestId}\"`,\n });\n}\n\nfunction setupTimeoutWarning(context: Context, options: WrapperOptions): NodeJS.Timeout | undefined {\n // In seconds. You cannot go any more granular than this in AWS Lambda.\n const configuredTimeout = Math.ceil(tryGetRemainingTimeInMillis(context) / 1000);\n const configuredTimeoutMinutes = Math.floor(configuredTimeout / 60);\n const configuredTimeoutSeconds = configuredTimeout % 60;\n\n const humanReadableTimeout =\n configuredTimeoutMinutes > 0\n ? `${configuredTimeoutMinutes}m${configuredTimeoutSeconds}s`\n : `${configuredTimeoutSeconds}s`;\n\n if (options.captureTimeoutWarning) {\n const timeoutWarningDelay = tryGetRemainingTimeInMillis(context) - options.timeoutWarningLimit;\n\n return setTimeout(() => {\n withScope(scope => {\n scope.setTag('timeout', humanReadableTimeout);\n captureMessage(`Possible function timeout: ${context.functionName}`, 'warning');\n });\n }, timeoutWarningDelay) as unknown as NodeJS.Timeout;\n }\n\n return undefined;\n}\n\nexport const AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nexport const AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nexport const AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\nfunction isStreamingHandler(handler: Handler | StreamifyHandler): handler is StreamifyHandler {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n}\n\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): Handler<TEvent, TResult>;\n\nexport function wrapHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): StreamifyHandler<TEvent, TResult>;\n\n/**\n * Wraps a lambda handler adding it error capture and tracing capabilities.\n *\n * @param handler Handler\n * @param options Options\n * @returns Handler\n */\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n wrapOptions: Partial<WrapperOptions> = {},\n): Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult> {\n const START_TIME = performance.now();\n\n // eslint-disable-next-line deprecation/deprecation\n if (typeof wrapOptions.startTrace !== 'undefined') {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'The `startTrace` option is deprecated and will be removed in a future major version. If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`.',\n );\n });\n }\n\n const options: WrapperOptions = {\n flushTimeout: 2000,\n callbackWaitsForEmptyEventLoop: false,\n captureTimeoutWarning: true,\n timeoutWarningLimit: 500,\n captureAllSettledReasons: false,\n startTrace: true, // TODO(v11): Remove this option. Set to true here to satisfy the type, but has no effect.\n ...wrapOptions,\n };\n\n if (isStreamingHandler(handler)) {\n return wrapStreamingHandler(handler, options, START_TIME);\n }\n\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n // AWSLambda is like Express. It makes a distinction about handlers based on its last argument\n // async (event) => async handler\n // async (event, context) => async handler\n // (event, context, callback) => sync handler\n // Nevertheless whatever option is chosen by user, we convert it to async handler.\n const asyncHandler: AsyncHandler<Handler<TEvent, TResult>> =\n handler.length > 2\n ? (event, context) =>\n new Promise((resolve, reject) => {\n const rv = (handler as SyncHandler<Handler<TEvent, TResult>>)(event, context, (error, result) => {\n if (error === null || error === undefined) {\n resolve(result!); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n } else {\n reject(error);\n }\n }) as unknown;\n\n // This should never happen, but still can if someone writes a handler as\n // `async (event, context, callback) => {}`\n if (isPromise(rv)) {\n void (rv as Promise<NonNullable<TResult>>).then(resolve, reject);\n }\n })\n : (handler as AsyncHandler<Handler<TEvent, TResult>>);\n\n return async (event: TEvent, context: Context) => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n let rv: TResult;\n try {\n enhanceScopeWithEnvironmentData(scope, context, START_TIME);\n\n rv = await asyncHandler(event, context);\n\n // We manage lambdas that use Promise.allSettled by capturing the errors of failed promises\n if (options.captureAllSettledReasons && Array.isArray(rv) && isPromiseAllSettledResult(rv)) {\n const reasons = getRejectedReasons(rv);\n reasons.forEach(exception => {\n captureException(exception, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.promise'));\n });\n }\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n clearTimeout(timeoutWarningTimer);\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n return rv;\n }\n\n return withScope(async () => {\n return processResult();\n });\n };\n}\n\nfunction wrapStreamingHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n options: WrapperOptions,\n startTime: number,\n): StreamifyHandler<TEvent, TResult> {\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n const wrappedHandler = async (\n event: TEvent,\n responseStream: Parameters<StreamifyHandler<TEvent, TResult>>[1],\n context: Context,\n ): Promise<TResult> => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processStreamingResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n try {\n enhanceScopeWithEnvironmentData(scope, context, startTime);\n\n responseStream.on('error', error => {\n captureException(error, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.stream'));\n });\n\n return await handler(event, responseStream, context);\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n if (timeoutWarningTimer) {\n clearTimeout(timeoutWarningTimer);\n }\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n }\n\n return withScope(() => processStreamingResult());\n };\n\n const handlerWithSymbols = handler as unknown as Record<symbol, unknown>;\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_STREAMING_SYMBOL];\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrappedHandler;\n}\n"],"names":["types","consoleSandbox","performance","withScope","captureMessage","getCurrentScope","captureException","markEventUnhandled","flush","DEBUG_BUILD","debug"],"mappings":"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"} | ||
| {"version":3,"file":"sdk.js","sources":["../../../src/sdk.ts"],"sourcesContent":["import type { Scope } from '@sentry/core';\nimport { consoleSandbox, debug } from '@sentry/core';\nimport { captureException, captureMessage, flush, getCurrentScope, withScope } from '@sentry/node';\nimport type { Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport { performance } from 'perf_hooks';\nimport { types } from 'util';\nimport { DEBUG_BUILD } from './debug-build';\nimport { markEventUnhandled } from './utils';\n\nconst { isPromise } = types;\n\n// https://www.npmjs.com/package/aws-lambda-consumer\ntype SyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n callback: Parameters<T>[2],\n) => void;\n\nexport type AsyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n) => Promise<NonNullable<Parameters<Parameters<T>[2]>[1]>>;\n\nexport interface WrapperOptions {\n flushTimeout: number;\n callbackWaitsForEmptyEventLoop: boolean;\n captureTimeoutWarning: boolean;\n timeoutWarningLimit: number;\n /**\n * Capture all errors when `Promise.allSettled` is returned by the handler\n * The {@link wrapHandler} will not fail the lambda even if there are errors\n * @default false\n */\n captureAllSettledReasons: boolean;\n // TODO(v11): Remove this option since its no longer used.\n /**\n * @deprecated This option has no effect and will be removed in a future major version.\n * If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`, otherwise OpenTelemetry will automatically trace the handler.\n */\n startTrace: boolean;\n}\n\n/** */\nfunction isPromiseAllSettledResult<T>(result: T[]): boolean {\n return result.every(\n v =>\n Object.prototype.hasOwnProperty.call(v, 'status') &&\n (Object.prototype.hasOwnProperty.call(v, 'value') || Object.prototype.hasOwnProperty.call(v, 'reason')),\n );\n}\n\ntype PromiseSettledResult<T> = { status: 'rejected' | 'fulfilled'; reason?: T };\n\n/** */\nfunction getRejectedReasons<T>(results: PromiseSettledResult<T>[]): T[] {\n return results.reduce((rejected: T[], result) => {\n if (result.status === 'rejected' && result.reason) rejected.push(result.reason);\n return rejected;\n }, []);\n}\n\n/**\n * TODO(v11): Remove this function\n * @deprecated This function is no longer used and will be removed in a future major version.\n */\nexport function tryPatchHandler(_taskRoot: string, _handlerPath: string): void {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('The `tryPatchHandler` function is deprecated and will be removed in a future major version.');\n });\n}\n\n/**\n * Tries to invoke context.getRemainingTimeInMillis if not available returns 0\n * Some environments use AWS lambda but don't support this function\n * @param context\n */\nfunction tryGetRemainingTimeInMillis(context: Context): number {\n return typeof context.getRemainingTimeInMillis === 'function' ? context.getRemainingTimeInMillis() : 0;\n}\n\n/**\n * Adds additional information from the environment and AWS Context to the Sentry Scope.\n *\n * @param scope Scope that should be enhanced\n * @param context AWS Lambda context that will be used to extract some part of the data\n * @param startTime performance.now() when wrapHandler was invoked\n */\nfunction enhanceScopeWithEnvironmentData(scope: Scope, context: Context, startTime: number): void {\n scope.setContext('aws.lambda', {\n aws_request_id: context.awsRequestId,\n function_name: context.functionName,\n function_version: context.functionVersion,\n invoked_function_arn: context.invokedFunctionArn,\n execution_duration_in_millis: performance.now() - startTime,\n remaining_time_in_millis: tryGetRemainingTimeInMillis(context),\n 'sys.argv': process.argv,\n });\n\n scope.setContext('aws.cloudwatch.logs', {\n log_group: context.logGroupName,\n log_stream: context.logStreamName,\n url: `https://console.aws.amazon.com/cloudwatch/home?region=${\n process.env.AWS_REGION\n }#logsV2:log-groups/log-group/${encodeURIComponent(context.logGroupName)}/log-events/${encodeURIComponent(\n context.logStreamName,\n )}?filterPattern=\"${context.awsRequestId}\"`,\n });\n}\n\nfunction setupTimeoutWarning(context: Context, options: WrapperOptions): NodeJS.Timeout | undefined {\n // In seconds. You cannot go any more granular than this in AWS Lambda.\n const configuredTimeout = Math.ceil(tryGetRemainingTimeInMillis(context) / 1000);\n const configuredTimeoutMinutes = Math.floor(configuredTimeout / 60);\n const configuredTimeoutSeconds = configuredTimeout % 60;\n\n const humanReadableTimeout =\n configuredTimeoutMinutes > 0\n ? `${configuredTimeoutMinutes}m${configuredTimeoutSeconds}s`\n : `${configuredTimeoutSeconds}s`;\n\n if (options.captureTimeoutWarning) {\n const timeoutWarningDelay = tryGetRemainingTimeInMillis(context) - options.timeoutWarningLimit;\n\n return setTimeout(() => {\n withScope(scope => {\n scope.setTag('timeout', humanReadableTimeout);\n captureMessage(`Possible function timeout: ${context.functionName}`, 'warning');\n });\n }, timeoutWarningDelay) as unknown as NodeJS.Timeout;\n }\n\n return undefined;\n}\n\nexport const AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nexport const AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nexport const AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\nfunction isStreamingHandler(handler: Handler | StreamifyHandler): handler is StreamifyHandler {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n}\n\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): Handler<TEvent, TResult>;\n\nexport function wrapHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): StreamifyHandler<TEvent, TResult>;\n\n/**\n * Wraps a lambda handler adding it error capture and tracing capabilities.\n *\n * @param handler Handler\n * @param options Options\n * @returns Handler\n */\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n wrapOptions: Partial<WrapperOptions> = {},\n): Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult> {\n const START_TIME = performance.now();\n\n // eslint-disable-next-line deprecation/deprecation\n if (typeof wrapOptions.startTrace !== 'undefined') {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'The `startTrace` option is deprecated and will be removed in a future major version. If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`.',\n );\n });\n }\n\n const options: WrapperOptions = {\n flushTimeout: 2000,\n callbackWaitsForEmptyEventLoop: false,\n captureTimeoutWarning: true,\n timeoutWarningLimit: 500,\n captureAllSettledReasons: false,\n startTrace: true, // TODO(v11): Remove this option. Set to true here to satisfy the type, but has no effect.\n ...wrapOptions,\n };\n\n if (isStreamingHandler(handler)) {\n return wrapStreamingHandler(handler, options, START_TIME);\n }\n\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n // AWSLambda is like Express. It makes a distinction about handlers based on its last argument\n // async (event) => async handler\n // async (event, context) => async handler\n // (event, context, callback) => sync handler\n // Nevertheless whatever option is chosen by user, we convert it to async handler.\n const asyncHandler: AsyncHandler<Handler<TEvent, TResult>> =\n handler.length > 2\n ? (event, context) =>\n new Promise((resolve, reject) => {\n const rv = (handler as SyncHandler<Handler<TEvent, TResult>>)(event, context, (error, result) => {\n if (error === null || error === undefined) {\n resolve(result!); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n } else {\n reject(error);\n }\n }) as unknown;\n\n // This should never happen, but still can if someone writes a handler as\n // `async (event, context, callback) => {}`\n if (isPromise(rv)) {\n void (rv as Promise<NonNullable<TResult>>).then(resolve, reject);\n }\n })\n : (handler as AsyncHandler<Handler<TEvent, TResult>>);\n\n return async (event: TEvent, context: Context) => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n let rv: TResult;\n try {\n enhanceScopeWithEnvironmentData(scope, context, START_TIME);\n\n rv = await asyncHandler(event, context);\n\n // We manage lambdas that use Promise.allSettled by capturing the errors of failed promises\n if (options.captureAllSettledReasons && Array.isArray(rv) && isPromiseAllSettledResult(rv)) {\n const reasons = getRejectedReasons(rv);\n reasons.forEach(exception => {\n captureException(exception, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.promise'));\n });\n }\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n clearTimeout(timeoutWarningTimer);\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n return rv;\n }\n\n return withScope(async () => {\n return processResult();\n });\n };\n}\n\nfunction wrapStreamingHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n options: WrapperOptions,\n startTime: number,\n): StreamifyHandler<TEvent, TResult> {\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n const wrappedHandler = async (\n event: TEvent,\n responseStream: Parameters<StreamifyHandler<TEvent, TResult>>[1],\n context: Context,\n ): Promise<TResult> => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processStreamingResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n try {\n enhanceScopeWithEnvironmentData(scope, context, startTime);\n\n responseStream.on('error', error => {\n captureException(error, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.stream'));\n });\n\n return await handler(event, responseStream, context);\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n if (timeoutWarningTimer) {\n clearTimeout(timeoutWarningTimer);\n }\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n }\n\n return withScope(() => processStreamingResult());\n };\n\n const handlerWithSymbols = handler as unknown as Record<symbol, unknown>;\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_STREAMING_SYMBOL];\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrappedHandler;\n}\n"],"names":["types","consoleSandbox","performance","withScope","captureMessage","getCurrentScope","captureException","markEventUnhandled","flush","DEBUG_BUILD","debug"],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.js","sources":["../../../src/utils.ts"],"sourcesContent":["import type { Context as OtelContext, TextMapGetter } from '@opentelemetry/api';\nimport { context as otelContext, propagation } from '@opentelemetry/api';\nimport type { Scope } from '@sentry/core';\nimport { addExceptionMechanism, isString } from '@sentry/core';\nimport type { APIGatewayProxyEventHeaders, Handler } from 'aws-lambda';\n\ntype HandlerEvent = Parameters<Handler<{ headers?: Record<string, string> }>>[0];\ntype HandlerContext = Parameters<Handler>[1];\n\ntype TraceData = {\n 'sentry-trace'?: string;\n baggage?: string;\n};\n\n// vendored from\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts#L65-L72\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\n/**\n * Marks an event as unhandled by adding a span processor to the passed scope.\n */\nexport function markEventUnhandled(scope: Scope, type: string): Scope {\n scope.addEventProcessor(event => {\n addExceptionMechanism(event, { handled: false, type });\n return event;\n });\n\n return scope;\n}\n\n/**\n * Extracts sentry trace data from the handler `context` if available and falls\n * back to the `event`.\n *\n * When instrumenting the Lambda function with Sentry, the sentry trace data\n * is placed on `context.clientContext.Custom`. Users are free to modify context\n * tho and provide this data via `event` or `context`.\n */\nexport function getAwsTraceData(event: HandlerEvent, context?: HandlerContext): TraceData {\n const headers = event.headers || {};\n\n const traceData: TraceData = {\n 'sentry-trace': headers['sentry-trace'],\n baggage: headers.baggage,\n };\n\n if (context?.clientContext?.Custom) {\n const customContext: Record<string, unknown> = context.clientContext.Custom;\n const sentryTrace = isString(customContext['sentry-trace']) ? customContext['sentry-trace'] : undefined;\n\n if (sentryTrace) {\n traceData['sentry-trace'] = sentryTrace;\n traceData.baggage = isString(customContext.baggage) ? customContext.baggage : undefined;\n }\n }\n\n return traceData;\n}\n\n/**\n * A custom event context extractor for the aws integration. It takes sentry trace data\n * from the context rather than the event, with the event being a fallback.\n *\n * Is only used when the handler was successfully wrapped by otel and the integration option\n * `disableAwsContextPropagation` is `true`.\n */\nexport function eventContextExtractor(event: HandlerEvent, context?: HandlerContext): OtelContext {\n // The default context extractor tries to get sampled trace headers from HTTP headers\n // The otel aws integration packs these onto the context, so we try to extract them from\n // there instead.\n const httpHeaders = {\n ...(event.headers || {}),\n ...getAwsTraceData(event, context),\n };\n\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n}\n"],"names":["addExceptionMechanism","isString","propagation","otelContext"],"mappings":";;;;;AAcA;AACA;AACA,MAAM,YAAY,GAA+C;AACjE,EAAE,IAAI,CAAC,OAAO,EAAY;AAC1B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,GAAG;AACH,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAU;AAC5B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC;AACvB,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAS,IAAI,EAAiB;AACtE,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS;AACnC,IAAIA,0BAAqB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAA,EAAM,CAAC;AAC1D,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;;AAEJ,EAAE,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAgB,OAAO,EAA8B;AAC1F,EAAE,MAAM,UAAU,KAAK,CAAC,OAAA,IAAW,EAAE;;AAErC,EAAE,MAAM,SAAS,GAAc;AAC/B,IAAI,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;AAC3C,IAAI,OAAO,EAAE,OAAO,CAAC,OAAO;AAC5B,GAAG;;AAEH,EAAE,IAAI,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE;AACtC,IAAI,MAAM,aAAa,GAA4B,OAAO,CAAC,aAAa,CAAC,MAAM;AAC/E,IAAI,MAAM,WAAA,GAAcC,aAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA,GAAI,aAAa,CAAC,cAAc,CAAA,GAAI,SAAS;;AAE3G,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,SAAS,CAAC,cAAc,CAAA,GAAI,WAAW;AAC7C,MAAM,SAAS,CAAC,OAAA,GAAUA,aAAQ,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAA,GAAU,SAAS;AAC7F;AACA;;AAEA,EAAE,OAAO,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,KAAK,EAAgB,OAAO,EAAgC;AAClG;AACA;AACA;AACA,EAAE,MAAM,cAAc;AACtB,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AAC5B,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;AACtC,GAAG;;AAEH,EAAE,OAAOC,eAAW,CAAC,OAAO,CAACC,WAAW,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7E;;;;;;"} | ||
| {"version":3,"file":"utils.js","sources":["../../../src/utils.ts"],"sourcesContent":["import type { Context as OtelContext, TextMapGetter } from '@opentelemetry/api';\nimport { context as otelContext, propagation } from '@opentelemetry/api';\nimport type { Scope } from '@sentry/core';\nimport { addExceptionMechanism, isString } from '@sentry/core';\nimport type { APIGatewayProxyEventHeaders, Handler } from 'aws-lambda';\n\ntype HandlerEvent = Parameters<Handler<{ headers?: Record<string, string> }>>[0];\ntype HandlerContext = Parameters<Handler>[1];\n\ntype TraceData = {\n 'sentry-trace'?: string;\n baggage?: string;\n};\n\n// vendored from\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts#L65-L72\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\n/**\n * Marks an event as unhandled by adding a span processor to the passed scope.\n */\nexport function markEventUnhandled(scope: Scope, type: string): Scope {\n scope.addEventProcessor(event => {\n addExceptionMechanism(event, { handled: false, type });\n return event;\n });\n\n return scope;\n}\n\n/**\n * Extracts sentry trace data from the handler `context` if available and falls\n * back to the `event`.\n *\n * When instrumenting the Lambda function with Sentry, the sentry trace data\n * is placed on `context.clientContext.Custom`. Users are free to modify context\n * tho and provide this data via `event` or `context`.\n */\nexport function getAwsTraceData(event: HandlerEvent, context?: HandlerContext): TraceData {\n const headers = event.headers || {};\n\n const traceData: TraceData = {\n 'sentry-trace': headers['sentry-trace'],\n baggage: headers.baggage,\n };\n\n if (context?.clientContext?.Custom) {\n const customContext: Record<string, unknown> = context.clientContext.Custom;\n const sentryTrace = isString(customContext['sentry-trace']) ? customContext['sentry-trace'] : undefined;\n\n if (sentryTrace) {\n traceData['sentry-trace'] = sentryTrace;\n traceData.baggage = isString(customContext.baggage) ? customContext.baggage : undefined;\n }\n }\n\n return traceData;\n}\n\n/**\n * A custom event context extractor for the aws integration. It takes sentry trace data\n * from the context rather than the event, with the event being a fallback.\n *\n * Is only used when the handler was successfully wrapped by otel and the integration option\n * `disableAwsContextPropagation` is `true`.\n */\nexport function eventContextExtractor(event: HandlerEvent, context?: HandlerContext): OtelContext {\n // The default context extractor tries to get sampled trace headers from HTTP headers\n // The otel aws integration packs these onto the context, so we try to extract them from\n // there instead.\n const httpHeaders = {\n ...(event.headers || {}),\n ...getAwsTraceData(event, context),\n };\n\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n}\n"],"names":["addExceptionMechanism","isString","propagation","otelContext"],"mappings":";;;;;AAcA;AACA;AACA,MAAM,YAAY,GAA+C;AACjE,EAAE,IAAI,CAAC,OAAO,EAAY;AAC1B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,EAAE,CAAC;AACH,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAU;AAC5B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC;AACvB,EAAE,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAS,IAAI,EAAiB;AACtE,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS;AACnC,IAAIA,0BAAqB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAA,EAAM,CAAC;AAC1D,IAAI,OAAO,KAAK;AAChB,EAAE,CAAC,CAAC;;AAEJ,EAAE,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAgB,OAAO,EAA8B;AAC1F,EAAE,MAAM,UAAU,KAAK,CAAC,OAAA,IAAW,EAAE;;AAErC,EAAE,MAAM,SAAS,GAAc;AAC/B,IAAI,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;AAC3C,IAAI,OAAO,EAAE,OAAO,CAAC,OAAO;AAC5B,GAAG;;AAEH,EAAE,IAAI,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE;AACtC,IAAI,MAAM,aAAa,GAA4B,OAAO,CAAC,aAAa,CAAC,MAAM;AAC/E,IAAI,MAAM,WAAA,GAAcC,aAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA,GAAI,aAAa,CAAC,cAAc,CAAA,GAAI,SAAS;;AAE3G,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,SAAS,CAAC,cAAc,CAAA,GAAI,WAAW;AAC7C,MAAM,SAAS,CAAC,OAAA,GAAUA,aAAQ,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAA,GAAU,SAAS;AAC7F,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,KAAK,EAAgB,OAAO,EAAgC;AAClG;AACA;AACA;AACA,EAAE,MAAM,cAAc;AACtB,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AAC5B,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;AACtC,GAAG;;AAEH,EAAE,OAAOC,eAAW,CAAC,OAAO,CAACC,WAAW,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7E;;;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"awslambda-auto.js","sources":["../../../src/awslambda-auto.ts"],"sourcesContent":["// Important: This file cannot import anything other than the index file below.\n// This is the entry point to the lambda layer, which only contains the entire SDK bundled into the index file\nimport * as Sentry from './index';\n\nconst lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT;\nif (lambdaTaskRoot) {\n const handlerString = process.env._HANDLER;\n if (!handlerString) {\n throw Error(`LAMBDA_TASK_ROOT is non-empty(${lambdaTaskRoot}) but _HANDLER is not set`);\n }\n\n Sentry.init({\n // We want to load the performance integrations here, if the tracesSampleRate is set for the layer in env vars\n // Sentry node's `getDefaultIntegrations` will load them if tracing is enabled,\n // which is the case if `tracesSampleRate` is set.\n // We can safely add all the node default integrations\n integrations: Sentry.getDefaultIntegrations(\n process.env.SENTRY_TRACES_SAMPLE_RATE\n ? {\n tracesSampleRate: parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE),\n }\n : {},\n ),\n });\n} else {\n throw Error('LAMBDA_TASK_ROOT environment variable is not set');\n}\n"],"names":["Sentry.init","Sentry.getDefaultIntegrations"],"mappings":";;AAAA;AACA;;AAGA,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,gBAAgB;AACnD,IAAI,cAAc,EAAE;AACpB,EAAE,MAAM,aAAA,GAAgB,OAAO,CAAC,GAAG,CAAC,QAAQ;AAC5C,EAAE,IAAI,CAAC,aAAa,EAAE;AACtB,IAAI,MAAM,KAAK,CAAC,CAAC,8BAA8B,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAC3F;;AAEA,EAAEA,IAAW,CAAC;AACd;AACA;AACA;AACA;AACA,IAAI,YAAY,EAAEC,sBAA6B;AAC/C,MAAM,OAAO,CAAC,GAAG,CAAC;AAClB,UAAU;AACV,YAAY,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AAC/E;AACA,UAAU,EAAE;AACZ,KAAK;AACL,GAAG,CAAC;AACJ,CAAA,MAAO;AACP,EAAE,MAAM,KAAK,CAAC,kDAAkD,CAAC;AACjE"} | ||
| {"version":3,"file":"awslambda-auto.js","sources":["../../../src/awslambda-auto.ts"],"sourcesContent":["// Important: This file cannot import anything other than the index file below.\n// This is the entry point to the lambda layer, which only contains the entire SDK bundled into the index file\nimport * as Sentry from './index';\n\nconst lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT;\nif (lambdaTaskRoot) {\n const handlerString = process.env._HANDLER;\n if (!handlerString) {\n throw Error(`LAMBDA_TASK_ROOT is non-empty(${lambdaTaskRoot}) but _HANDLER is not set`);\n }\n\n Sentry.init({\n // We want to load the performance integrations here, if the tracesSampleRate is set for the layer in env vars\n // Sentry node's `getDefaultIntegrations` will load them if tracing is enabled,\n // which is the case if `tracesSampleRate` is set.\n // We can safely add all the node default integrations\n integrations: Sentry.getDefaultIntegrations(\n process.env.SENTRY_TRACES_SAMPLE_RATE\n ? {\n tracesSampleRate: parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE),\n }\n : {},\n ),\n });\n} else {\n throw Error('LAMBDA_TASK_ROOT environment variable is not set');\n}\n"],"names":["Sentry.init","Sentry.getDefaultIntegrations"],"mappings":";;AAAA;AACA;;AAGA,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,gBAAgB;AACnD,IAAI,cAAc,EAAE;AACpB,EAAE,MAAM,aAAA,GAAgB,OAAO,CAAC,GAAG,CAAC,QAAQ;AAC5C,EAAE,IAAI,CAAC,aAAa,EAAE;AACtB,IAAI,MAAM,KAAK,CAAC,CAAC,8BAA8B,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAC3F,EAAE;;AAEF,EAAEA,IAAW,CAAC;AACd;AACA;AACA;AACA;AACA,IAAI,YAAY,EAAEC,sBAA6B;AAC/C,MAAM,OAAO,CAAC,GAAG,CAAC;AAClB,UAAU;AACV,YAAY,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AAC/E;AACA,UAAU,EAAE;AACZ,KAAK;AACL,GAAG,CAAC;AACJ,CAAA,MAAO;AACP,EAAE,MAAM,KAAK,CAAC,kDAAkD,CAAC;AACjE"} |
@@ -1,2 +0,2 @@ | ||
| export { NODE_VERSION, NodeClient, OpenFeatureIntegrationHook, SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Scope, addBreadcrumb, addEventProcessor, addIntegration, amqplibIntegration, anrIntegration, anthropicAIIntegration, buildLaunchDarklyFlagUsedHandler, captureCheckIn, captureEvent, captureException, captureFeedback, captureMessage, captureSession, childProcessIntegration, close, connectIntegration, consoleIntegration, consoleLoggingIntegration, contextLinesIntegration, continueTrace, createConsolaReporter, createGetModuleFromFilename, createLangChainCallbackHandler, createSentryWinstonTransport, createTransport, cron, dataloaderIntegration, defaultStackParser, disableAnrDetectionForCallback, endSession, eventFiltersIntegration, expressErrorHandler, expressIntegration, fastifyIntegration, featureFlagsIntegration, firebaseIntegration, flush, fsIntegration, functionToStringIntegration, generateInstrumentOnce, genericPoolIntegration, getActiveSpan, getAutoPerformanceIntegrations, getClient, getCurrentScope, getGlobalScope, getIsolationScope, getRootSpan, getSentryRelease, getSpanDescendants, getSpanStatusFromHttpCode, getTraceData, getTraceMetaTags, googleGenAIIntegration, graphqlIntegration, growthbookIntegration, hapiIntegration, honoIntegration, httpHeadersToSpanAttributes, httpIntegration, httpServerIntegration, httpServerSpansIntegration, inboundFiltersIntegration, initOpenTelemetry, instrumentSupabaseClient, isEnabled, isInitialized, kafkaIntegration, knexIntegration, koaIntegration, langChainIntegration, lastEventId, launchDarklyIntegration, linkedErrorsIntegration, localVariablesIntegration, logger, lruMemoizerIntegration, makeNodeTransport, modulesIntegration, mongoIntegration, mongooseIntegration, mysql2Integration, mysqlIntegration, nativeNodeFetchIntegration, nodeContextIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, openAIIntegration, openFeatureIntegration, parameterize, pinoIntegration, postgresIntegration, postgresJsIntegration, prismaIntegration, profiler, redisIntegration, requestDataIntegration, setContext, setCurrentClient, setExtra, setExtras, setHttpStatus, setMeasurement, setTag, setTags, setUser, setupConnectErrorHandler, setupExpressErrorHandler, setupHapiErrorHandler, setupHonoErrorHandler, setupKoaErrorHandler, spanToBaggageHeader, spanToJSON, spanToTraceHeader, spotlightIntegration, startInactiveSpan, startNewTrace, startSession, startSpan, startSpanManual, statsigIntegration, supabaseIntegration, suppressTracing, systemErrorIntegration, tediousIntegration, trpcMiddleware, unleashIntegration, updateSpanName, vercelAIIntegration, winterCGHeadersToDict, withActiveSpan, withIsolationScope, withMonitor, withScope, wrapMcpServerWithSentry, zodErrorsIntegration } from '@sentry/node'; | ||
| export { NODE_VERSION, NodeClient, OpenFeatureIntegrationHook, SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Scope, addBreadcrumb, addEventProcessor, addIntegration, amqplibIntegration, anrIntegration, anthropicAIIntegration, buildLaunchDarklyFlagUsedHandler, captureCheckIn, captureEvent, captureException, captureFeedback, captureMessage, captureSession, childProcessIntegration, close, connectIntegration, consoleIntegration, consoleLoggingIntegration, contextLinesIntegration, continueTrace, createConsolaReporter, createGetModuleFromFilename, createLangChainCallbackHandler, createSentryWinstonTransport, createTransport, cron, dataloaderIntegration, defaultStackParser, disableAnrDetectionForCallback, endSession, eventFiltersIntegration, expressErrorHandler, expressIntegration, fastifyIntegration, featureFlagsIntegration, firebaseIntegration, flush, fsIntegration, functionToStringIntegration, generateInstrumentOnce, genericPoolIntegration, getActiveSpan, getAutoPerformanceIntegrations, getClient, getCurrentScope, getGlobalScope, getIsolationScope, getRootSpan, getSentryRelease, getSpanDescendants, getSpanStatusFromHttpCode, getTraceData, getTraceMetaTags, googleGenAIIntegration, graphqlIntegration, growthbookIntegration, hapiIntegration, honoIntegration, httpHeadersToSpanAttributes, httpIntegration, httpServerIntegration, httpServerSpansIntegration, inboundFiltersIntegration, initOpenTelemetry, instrumentSupabaseClient, isEnabled, isInitialized, kafkaIntegration, knexIntegration, koaIntegration, langChainIntegration, lastEventId, launchDarklyIntegration, linkedErrorsIntegration, localVariablesIntegration, logger, lruMemoizerIntegration, makeNodeTransport, metrics, modulesIntegration, mongoIntegration, mongooseIntegration, mysql2Integration, mysqlIntegration, nativeNodeFetchIntegration, nodeContextIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, openAIIntegration, openFeatureIntegration, parameterize, pinoIntegration, postgresIntegration, postgresJsIntegration, prismaIntegration, profiler, redisIntegration, requestDataIntegration, setContext, setCurrentClient, setExtra, setExtras, setHttpStatus, setMeasurement, setTag, setTags, setUser, setupConnectErrorHandler, setupExpressErrorHandler, setupHapiErrorHandler, setupHonoErrorHandler, setupKoaErrorHandler, spanToBaggageHeader, spanToJSON, spanToTraceHeader, spotlightIntegration, startInactiveSpan, startNewTrace, startSession, startSpan, startSpanManual, statsigIntegration, supabaseIntegration, suppressTracing, systemErrorIntegration, tediousIntegration, trpcMiddleware, unleashIntegration, updateSpanName, vercelAIIntegration, winterCGHeadersToDict, withActiveSpan, withIsolationScope, withMonitor, withScope, wrapMcpServerWithSentry, zodErrorsIntegration } from '@sentry/node'; | ||
| export { captureConsoleIntegration, dedupeIntegration, extraErrorDataIntegration, rewriteFramesIntegration } from '@sentry/core'; | ||
@@ -3,0 +3,0 @@ export { awsIntegration } from './integration/aws.js'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"init.js","sources":["../../../src/init.ts"],"sourcesContent":["import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, debug, getSDKSource } from '@sentry/core';\nimport type { NodeClient, NodeOptions } from '@sentry/node';\nimport { getDefaultIntegrationsWithoutPerformance, initWithoutDefaultIntegrations } from '@sentry/node';\nimport { envToBool } from '@sentry/node-core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { awsIntegration } from './integration/aws';\nimport { awsLambdaIntegration } from './integration/awslambda';\n\n/**\n * Checks if proxy environment variables would interfere with the layer extension.\n * The layer extension uses localhost:9000, so we need to check if proxy settings would prevent this.\n */\nfunction shouldDisableLayerExtensionForProxy(): boolean {\n const { http_proxy, no_proxy } = process.env;\n\n // If no http proxy is configured, no interference (https_proxy doesn't affect HTTP requests)\n if (!http_proxy) {\n return false;\n }\n\n // Check if localhost is exempted by no_proxy\n if (no_proxy) {\n const exemptions = no_proxy.split(',').map(exemption => exemption.trim().toLowerCase());\n\n // Handle common localhost exemption patterns explicitly\n // If localhost is exempted, requests to the layer extension will not be proxied\n const localhostExemptions = ['*', 'localhost', '127.0.0.1', '::1'];\n if (exemptions.some(exemption => localhostExemptions.includes(exemption))) {\n return false;\n }\n }\n\n // If http_proxy is set and no localhost exemption, it would interfere\n // The layer extension uses HTTP to localhost:9000, so only http_proxy matters\n if (http_proxy) {\n DEBUG_BUILD &&\n debug.log(\n 'Disabling useLayerExtension due to http_proxy environment variable. Consider adding localhost to no_proxy to re-enable.',\n );\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the default integrations for the AWSLambda SDK.\n */\n// NOTE: in awslambda-auto.ts, we also call the original `getDefaultIntegrations` from `@sentry/node` to load performance integrations.\n// If at some point we need to filter a node integration out for good, we need to make sure to also filter it out there.\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n return [...getDefaultIntegrationsWithoutPerformance(), awsIntegration(), awsLambdaIntegration()];\n}\n\nexport interface AwsServerlessOptions extends NodeOptions {\n /**\n * If Sentry events should be proxied through the Lambda extension when using the Lambda layer.\n * Defaults to `true` when using the Lambda layer.\n *\n * Can also be configured via the `SENTRY_LAYER_EXTENSION` environment variable.\n */\n useLayerExtension?: boolean;\n}\n\n/**\n * Initializes the Sentry AWS Lambda SDK.\n *\n * @param options Configuration options for the SDK, @see {@link AWSLambdaOptions}.\n */\nexport function init(options: AwsServerlessOptions = {}): NodeClient | undefined {\n const sdkSource = getSDKSource();\n const proxyWouldInterfere = shouldDisableLayerExtensionForProxy();\n\n // Determine useLayerExtension value with the following priority:\n // 1. Explicit option value (if provided)\n // 2. Environment variable SENTRY_LAYER_EXTENSION (if set)\n // 3. Default logic based on sdkSource, tunnel, and proxy settings\n const useLayerExtensionFromEnv = envToBool(process.env.SENTRY_LAYER_EXTENSION, { strict: true });\n const defaultUseLayerExtension = sdkSource === 'aws-lambda-layer' && !options.tunnel && !proxyWouldInterfere;\n const useLayerExtension = options.useLayerExtension ?? useLayerExtensionFromEnv ?? defaultUseLayerExtension;\n\n const opts = {\n defaultIntegrations: getDefaultIntegrations(options),\n useLayerExtension,\n ...options,\n };\n\n if (opts.useLayerExtension) {\n if (sdkSource !== 'aws-lambda-layer') {\n DEBUG_BUILD && debug.warn('The Sentry Lambda extension is only supported when using the AWS Lambda layer.');\n } else if (opts.tunnel || proxyWouldInterfere) {\n if (opts.tunnel) {\n DEBUG_BUILD &&\n debug.warn(\n `Using a custom tunnel with the Sentry Lambda extension is not supported. Events will be tunnelled to ${opts.tunnel} and not through the extension.`,\n );\n }\n\n if (proxyWouldInterfere) {\n DEBUG_BUILD &&\n debug.warn(\n 'Sentry Lambda extension is disabled due to proxy environment variables (http_proxy/https_proxy). Consider adding localhost to no_proxy to re-enable.',\n );\n }\n } else {\n DEBUG_BUILD && debug.log('Proxying Sentry events through the Sentry Lambda extension');\n opts.tunnel = 'http://localhost:9000/envelope';\n }\n }\n\n applySdkMetadata(opts, 'aws-serverless', ['aws-serverless'], sdkSource);\n\n return initWithoutDefaultIntegrations(opts);\n}\n"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"init.js","sources":["../../../src/init.ts"],"sourcesContent":["import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, debug, getSDKSource } from '@sentry/core';\nimport type { NodeClient, NodeOptions } from '@sentry/node';\nimport { getDefaultIntegrationsWithoutPerformance, initWithoutDefaultIntegrations } from '@sentry/node';\nimport { envToBool } from '@sentry/node-core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { awsIntegration } from './integration/aws';\nimport { awsLambdaIntegration } from './integration/awslambda';\n\n/**\n * Checks if proxy environment variables would interfere with the layer extension.\n * The layer extension uses localhost:9000, so we need to check if proxy settings would prevent this.\n */\nfunction shouldDisableLayerExtensionForProxy(): boolean {\n const { http_proxy, no_proxy } = process.env;\n\n // If no http proxy is configured, no interference (https_proxy doesn't affect HTTP requests)\n if (!http_proxy) {\n return false;\n }\n\n // Check if localhost is exempted by no_proxy\n if (no_proxy) {\n const exemptions = no_proxy.split(',').map(exemption => exemption.trim().toLowerCase());\n\n // Handle common localhost exemption patterns explicitly\n // If localhost is exempted, requests to the layer extension will not be proxied\n const localhostExemptions = ['*', 'localhost', '127.0.0.1', '::1'];\n if (exemptions.some(exemption => localhostExemptions.includes(exemption))) {\n return false;\n }\n }\n\n // If http_proxy is set and no localhost exemption, it would interfere\n // The layer extension uses HTTP to localhost:9000, so only http_proxy matters\n if (http_proxy) {\n DEBUG_BUILD &&\n debug.log(\n 'Disabling useLayerExtension due to http_proxy environment variable. Consider adding localhost to no_proxy to re-enable.',\n );\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the default integrations for the AWSLambda SDK.\n */\n// NOTE: in awslambda-auto.ts, we also call the original `getDefaultIntegrations` from `@sentry/node` to load performance integrations.\n// If at some point we need to filter a node integration out for good, we need to make sure to also filter it out there.\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n return [...getDefaultIntegrationsWithoutPerformance(), awsIntegration(), awsLambdaIntegration()];\n}\n\nexport interface AwsServerlessOptions extends NodeOptions {\n /**\n * If Sentry events should be proxied through the Lambda extension when using the Lambda layer.\n * Defaults to `true` when using the Lambda layer.\n *\n * Can also be configured via the `SENTRY_LAYER_EXTENSION` environment variable.\n */\n useLayerExtension?: boolean;\n}\n\n/**\n * Initializes the Sentry AWS Lambda SDK.\n *\n * @param options Configuration options for the SDK, @see {@link AWSLambdaOptions}.\n */\nexport function init(options: AwsServerlessOptions = {}): NodeClient | undefined {\n const sdkSource = getSDKSource();\n const proxyWouldInterfere = shouldDisableLayerExtensionForProxy();\n\n // Determine useLayerExtension value with the following priority:\n // 1. Explicit option value (if provided)\n // 2. Environment variable SENTRY_LAYER_EXTENSION (if set)\n // 3. Default logic based on sdkSource, tunnel, and proxy settings\n const useLayerExtensionFromEnv = envToBool(process.env.SENTRY_LAYER_EXTENSION, { strict: true });\n const defaultUseLayerExtension = sdkSource === 'aws-lambda-layer' && !options.tunnel && !proxyWouldInterfere;\n const useLayerExtension = options.useLayerExtension ?? useLayerExtensionFromEnv ?? defaultUseLayerExtension;\n\n const opts = {\n defaultIntegrations: getDefaultIntegrations(options),\n useLayerExtension,\n ...options,\n };\n\n if (opts.useLayerExtension) {\n if (sdkSource !== 'aws-lambda-layer') {\n DEBUG_BUILD && debug.warn('The Sentry Lambda extension is only supported when using the AWS Lambda layer.');\n } else if (opts.tunnel || proxyWouldInterfere) {\n if (opts.tunnel) {\n DEBUG_BUILD &&\n debug.warn(\n `Using a custom tunnel with the Sentry Lambda extension is not supported. Events will be tunnelled to ${opts.tunnel} and not through the extension.`,\n );\n }\n\n if (proxyWouldInterfere) {\n DEBUG_BUILD &&\n debug.warn(\n 'Sentry Lambda extension is disabled due to proxy environment variables (http_proxy/https_proxy). Consider adding localhost to no_proxy to re-enable.',\n );\n }\n } else {\n DEBUG_BUILD && debug.log('Proxying Sentry events through the Sentry Lambda extension');\n opts.tunnel = 'http://localhost:9000/envelope';\n }\n }\n\n applySdkMetadata(opts, 'aws-serverless', ['aws-serverless'], sdkSource);\n\n return initWithoutDefaultIntegrations(opts);\n}\n"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"aws.js","sources":["../../../../src/integration/aws.ts"],"sourcesContent":["import { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsIntegration = defineIntegration(() => {\n return {\n name: 'Aws',\n setupOnce() {\n registerInstrumentations({\n instrumentations: [\n new AwsInstrumentation({\n preRequestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws');\n },\n }),\n ],\n });\n },\n };\n});\n"],"names":[],"mappings":";;;;AAIA;AACA;AACA;MACa,cAAA,GAAiB,iBAAiB,CAAC,MAAM;AACtD,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,SAAS,GAAG;AAChB,MAAM,wBAAwB,CAAC;AAC/B,QAAQ,gBAAgB,EAAE;AAC1B,UAAU,IAAI,kBAAkB,CAAC;AACjC,YAAY,cAAc,CAAC,IAAI,EAAE;AACjC,cAAc,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,eAAe,CAAC;AAClF,aAAa;AACb,WAAW,CAAC;AACZ,SAAS;AACT,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC;;;;"} | ||
| {"version":3,"file":"aws.js","sources":["../../../../src/integration/aws.ts"],"sourcesContent":["import { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsIntegration = defineIntegration(() => {\n return {\n name: 'Aws',\n setupOnce() {\n registerInstrumentations({\n instrumentations: [\n new AwsInstrumentation({\n preRequestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws');\n },\n }),\n ],\n });\n },\n };\n});\n"],"names":[],"mappings":";;;;AAIA;AACA;AACA;MACa,cAAA,GAAiB,iBAAiB,CAAC,MAAM;AACtD,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,SAAS,GAAG;AAChB,MAAM,wBAAwB,CAAC;AAC/B,QAAQ,gBAAgB,EAAE;AAC1B,UAAU,IAAI,kBAAkB,CAAC;AACjC,YAAY,cAAc,CAAC,IAAI,EAAE;AACjC,cAAc,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,eAAe,CAAC;AAClF,YAAY,CAAC;AACb,WAAW,CAAC;AACZ,SAAS;AACT,OAAO,CAAC;AACR,IAAI,CAAC;AACL,GAAG;AACH,CAAC;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"awslambda.js","sources":["../../../../src/integration/awslambda.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { captureException, generateInstrumentOnce } from '@sentry/node';\nimport { eventContextExtractor, markEventUnhandled } from '../utils';\nimport { AwsLambdaInstrumentation } from './instrumentation-aws-lambda/instrumentation';\n\ninterface AwsLambdaOptions {\n /**\n * Disables the AWS context propagation and instead uses\n * Sentry's context. Defaults to `true`, in order for\n * Sentry trace propagation to take precedence, but can\n * be disabled if you want AWS propagation to take take\n * precedence.\n */\n disableAwsContextPropagation?: boolean;\n}\n\nexport const instrumentAwsLambda = generateInstrumentOnce(\n 'AwsLambda',\n AwsLambdaInstrumentation,\n (options: AwsLambdaOptions) => {\n return {\n disableAwsContextPropagation: true,\n ...options,\n eventContextExtractor,\n requestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws-lambda');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'function.aws.lambda');\n },\n responseHook(_span, { err }) {\n if (err) {\n captureException(err, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.otel'));\n }\n },\n };\n },\n);\n\nconst _awsLambdaIntegration = ((options: AwsLambdaOptions = {}) => {\n return {\n name: 'AwsLambda',\n setupOnce() {\n instrumentAwsLambda(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsLambdaIntegration = defineIntegration(_awsLambdaIntegration);\n"],"names":[],"mappings":";;;;;AAiBO,MAAM,mBAAA,GAAsB,sBAAsB;AACzD,EAAE,WAAW;AACb,EAAE,wBAAwB;AAC1B,EAAE,CAAC,OAAO,KAAuB;AACjC,IAAI,OAAO;AACX,MAAM,4BAA4B,EAAE,IAAI;AACxC,MAAM,GAAG,OAAO;AAChB,MAAM,qBAAqB;AAC3B,MAAM,WAAW,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,sBAAsB,CAAC;AACnF,QAAQ,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,qBAAqB,CAAC;AAC9E,OAAO;AACP,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,GAAA,EAAK,EAAE;AACnC,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,gBAAgB,CAAC,GAAG,EAAE,KAAA,IAAS,kBAAkB,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACxG;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;;AAEA,MAAM,qBAAA,IAAyB,CAAC,OAAO,GAAqB,EAAE,KAAK;AACnE,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,WAAW;AACrB,IAAI,SAAS,GAAG;AAChB,MAAM,mBAAmB,CAAC,OAAO,CAAC;AAClC,KAAK;AACL,GAAG;AACH,CAAC,CAAA;;AAED;AACA;AACA;MACa,oBAAA,GAAuB,iBAAiB,CAAC,qBAAqB;;;;"} | ||
| {"version":3,"file":"awslambda.js","sources":["../../../../src/integration/awslambda.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { captureException, generateInstrumentOnce } from '@sentry/node';\nimport { eventContextExtractor, markEventUnhandled } from '../utils';\nimport { AwsLambdaInstrumentation } from './instrumentation-aws-lambda/instrumentation';\n\ninterface AwsLambdaOptions {\n /**\n * Disables the AWS context propagation and instead uses\n * Sentry's context. Defaults to `true`, in order for\n * Sentry trace propagation to take precedence, but can\n * be disabled if you want AWS propagation to take take\n * precedence.\n */\n disableAwsContextPropagation?: boolean;\n}\n\nexport const instrumentAwsLambda = generateInstrumentOnce(\n 'AwsLambda',\n AwsLambdaInstrumentation,\n (options: AwsLambdaOptions) => {\n return {\n disableAwsContextPropagation: true,\n ...options,\n eventContextExtractor,\n requestHook(span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.otel.aws-lambda');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'function.aws.lambda');\n },\n responseHook(_span, { err }) {\n if (err) {\n captureException(err, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.otel'));\n }\n },\n };\n },\n);\n\nconst _awsLambdaIntegration = ((options: AwsLambdaOptions = {}) => {\n return {\n name: 'AwsLambda',\n setupOnce() {\n instrumentAwsLambda(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Instrumentation for aws-sdk package\n */\nexport const awsLambdaIntegration = defineIntegration(_awsLambdaIntegration);\n"],"names":[],"mappings":";;;;;AAiBO,MAAM,mBAAA,GAAsB,sBAAsB;AACzD,EAAE,WAAW;AACb,EAAE,wBAAwB;AAC1B,EAAE,CAAC,OAAO,KAAuB;AACjC,IAAI,OAAO;AACX,MAAM,4BAA4B,EAAE,IAAI;AACxC,MAAM,GAAG,OAAO;AAChB,MAAM,qBAAqB;AAC3B,MAAM,WAAW,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,sBAAsB,CAAC;AACnF,QAAQ,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,qBAAqB,CAAC;AAC9E,MAAM,CAAC;AACP,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,GAAA,EAAK,EAAE;AACnC,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,gBAAgB,CAAC,GAAG,EAAE,KAAA,IAAS,kBAAkB,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACxG,QAAQ;AACR,MAAM,CAAC;AACP,KAAK;AACL,EAAE,CAAC;AACH;;AAEA,MAAM,qBAAA,IAAyB,CAAC,OAAO,GAAqB,EAAE,KAAK;AACnE,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,WAAW;AACrB,IAAI,SAAS,GAAG;AAChB,MAAM,mBAAmB,CAAC,OAAO,CAAC;AAClC,IAAI,CAAC;AACL,GAAG;AACH,CAAC,CAAA;;AAED;AACA;AACA;MACa,oBAAA,GAAuB,iBAAiB,CAAC,qBAAqB;;;;"} |
@@ -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 // 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":";;;;;;;;;AA8DA;AACA,MAAM,eAAA,GAAkB,WAAW;AACnC,MAAM,YAAA,GAAe,oCAAoC;;AAEzD,MAAM,YAAY,GAA+C;AACjE,EAAE,IAAI,CAAC,OAAO,EAAY;AAC1B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,EAAE,CAAC;AACH,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAU;AAC5B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC;AACvB,EAAE,CAAC;AACH,CAAC;;AAEM,MAAM,2BAAA,GAA8B;AAC3C,MAAM,+BAA+B,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACvF,MAAM,mCAAmC,MAAM,CAAC,GAAG,CAAC,oDAAoD,CAAC;AACzG,MAAM,8BAAA,GAAiC,UAAU;;AAEjD;AACA;AACA;AACO,MAAM,wBAAA,SAAiC,mBAAmB,CAAiC;;AAIlG,EAAE,WAAW,CAAC,MAAM,GAAmC,EAAE,EAAE;AAC3D,IAAI,KAAK,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC;AAChD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,GAAG;AACT,IAAI,MAAM,QAAA,GAAW,OAAO,CAAC,GAAG,CAAC,gBAAgB;AACjD,IAAI,MAAM,UAAA,GAAa,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,OAAO,CAAC,GAAG,CAAC,QAAQ;;AAE7E;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iFAAiF,EAAE;AAC1G,QAAQ,QAAQ;AAChB,QAAQ,UAAU;AAClB,OAAO,CAAC;AACR,MAAM,OAAO,EAAE;AACf,IAAI;;AAEJ;AACA;AACA;AACA,IAAI,IAAI,OAAO,UAAU,CAAC,SAAA,KAAc,WAAW,EAAE;AACrD,MAAM,CAAC,UAAA,GAAmB,YAAY;AACtC,QAAQ,iBAAiB,EAAE,CAAC,OAAO,EAAO,OAAO,KAAU;AAC3D,UAAU,OAAO,CAAC,4BAA4B,CAAA,GAAI,8BAA8B;AAChF,UAAU,IAAI,OAAO,OAAO,EAAE,aAAA,KAAkB,QAAQ,EAAE;AAC1D,YAAY,OAAO,CAAC,gCAAgC,CAAA,GAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;AACvF,UAAU;AACV,UAAU,OAAO,OAAO;AACxB,QAAQ,CAAC;AACT,OAAO;AACP,IAAI;;AAEJ,IAAI,MAAM,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC7C,IAAI,MAAM,UAAA,GAAa,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,MAAA,GAAS,OAAO,CAAC,MAAM,CAAC;;AAElF,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;;AAExD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE;AACpD,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,MAAM;AACd,OAAO,CAAC;AACR,MAAM,OAAO,EAAE;AACf,IAAI;;AAEJ;AACA,IAAI,IAAI,QAAA,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;AAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnC;AACA;AACA,MAAM,IAAI;AACV,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAA,QAAA,CAAA,GAAA,CAAA,CAAA;AACA,QAAA,QAAA,IAAA,KAAA;AACA,MAAA,CAAA,CAAA,OAAA,CAAA,EAAA;AACA,QAAA,IAAA;AACA,UAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AACA;AACA,UAAA,QAAA,IAAA,MAAA;AACA,QAAA,CAAA,CAAA,OAAA,EAAA,EAAA;AACA,UAAA,IAAA;AACA,YAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AACA;AACA,YAAA,QAAA,IAAA,MAAA;AACA,UAAA,CAAA,CAAA,OAAA,EAAA,EAAA;AACA,YAAA,IAAA,CAAA,KAAA,CAAA,IAAA;AACA,cAAA,oFAAA;AACA,cAAA,QAAA;AACA,aAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;;AAEA,IAAA,IAAA,CAAA,KAAA,CAAA,8BAAA,EAAA;AACA,MAAA,QAAA;AACA,MAAA,UAAA;AACA,MAAA,OAAA;AACA,MAAA,UAAA;AACA,MAAA,MAAA;AACA,MAAA,QAAA;AACA,MAAA,YAAA;AACA,KAAA,CAAA;;AAEA,IAAA,MAAA,eAAA,GAAA,IAAA,CAAA,SAAA,EAAA,CAAA,eAAA,IAAA,IAAA,CAAA,GAAA,EAAA,GAAA,IAAA,CAAA,KAAA,CAAA,IAAA,GAAA,OAAA,CAAA,MAAA,EAAA,CAAA;;AAEA,IAAA,OAAA;AACA,MAAA,IAAA,mCAAA;AACA;AACA;AACA,QAAA,QAAA;AACA,QAAA,CAAA,GAAA,CAAA;AACA,QAAA,SAAA;AACA,QAAA,SAAA;AACA,QAAA;AACA,UAAA,IAAA,6BAAA;AACA,YAAA,MAAA;AACA,YAAA,CAAA,GAAA,CAAA;AACA,YAAA,CAAA,aAAA,KAAA;AACA,cAAA,IAAA,SAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,EAAA;AACA,gBAAA,IAAA,CAAA,OAAA,CAAA,aAAA,EAAA,YAAA,CAAA;AACA,cAAA;AACA,cAAA,IAAA,CAAA,KAAA,CAAA,aAAA,EAAA,YAAA,EAAA,IAAA,CAAA,WAAA,CAAA,eAAA,CAAA,CAAA;AACA,cAAA,OAAA,aAAA;AACA,YAAA,CAAA;AACA,YAAA,CAAA,aAAA,KAAA;AACA,cAAA,IAAA,aAAA,IAAA,IAAA,EAAA;AACA,cAAA,IAAA,CAAA,OAAA,CAAA,aAAA,EAAA,YAAA,CAAA;AACA,YAAA,CAAA;AACA,WAAA;AACA,SAAA;AACA,OAAA;AACA,KAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,WAAA,CAAA,oBAAA,EAAA;AACA,IAAA,OAAA,CAAA,QAAA,KAAA;AACA,MAAA,IAAA,IAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,EAAA;AACA,QAAA,MAAA,cAAA,GAAA,IAAA,CAAA,gBAAA,CAAA,QAAA,EAAA,oBAAA,CAAA;;AAEA;AACA,QAAA,CAAA,cAAA,GAAA,4BAAA,CAAA,GAAA;AACA,UAAA;AACA,UAAA,4BAAA,CAAA;AACA,QAAA,CAAA,cAAA,GAAA,gCAAA,CAAA,GAAA;AACA,UAAA;AACA,UAAA,gCAAA,CAAA;;AAEA,QAAA,OAAA,WAAA,CAAA,cAAA,CAAA;AACA,MAAA;;AAEA,MAAA,OAAA,WAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,QAAA,EAAA,oBAAA,CAAA,CAAA;AACA,IAAA,CAAA;AACA,EAAA;;AAKA;AACA;AACA;AACA,GAAA,gBAAA,CAAA,QAAA,EAAA,eAAA,EAAA;AACA,IAAA,IAAA,CAAA,KAAA,CAAA,wBAAA,CAAA;AACA,IAAA,MAAA,MAAA,GAAA,IAAA;;AAEA,IAAA,IAAA,oBAAA,GAAA,KAAA;AACA,IAAA,IAAA,kBAAA,GAAA,IAAA;;AAEA;AACA;AACA;AACA,IAAA,SAAA,UAAA,GAAA;AACA,MAAA,IAAA,oBAAA,EAAA;AACA;AACA,QAAA,kBAAA,GAAA,KAAA;AACA,MAAA,CAAA,MAAA;AACA,QAAA,IAAA,OAAA,CAAA,GAAA,CAAA,8BAAA,KAAA,yBAAA,EAAA;AACA;AACA;AACA,UAAA,kBAAA,GAAA,KAAA;AACA,QAAA,CAAA,MAAA;AACA;AACA;AACA,UAAA,MAAA,0BAAA,GAAA,IAAA,CAAA,GAAA,EAAA,GAAA,eAAA;AACA,UAAA,MAAA,uBAAA,GAAA,0BAAA,GAAA,2BAAA;;AAEA;AACA;AACA,UAAA,kBAAA,GAAA,CAAA,uBAAA;AACA,QAAA;AACA,QAAA,oBAAA,GAAA,IAAA;AACA,MAAA;AACA,IAAA;;AAEA,IAAA,IAAA,IAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,EAAA;AACA,MAAA,OAAA,SAAA,uBAAA;;AAEA;AACA,QAAA,KAAA;AACA,QAAA,cAAA;AACA,QAAAA,SAAA;AACA,QAAA;AACA,QAAA,UAAA,EAAA;AACA,QAAA,MAAA,MAAA,GAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,EAAAA,SAAA,CAAA;AACA,QAAA,MAAA,IAAA,GAAA,MAAA,CAAA,qBAAA,CAAA,KAAA,EAAAA,SAAA,EAAA,kBAAA,EAAA,MAAA,CAAA;AACA,QAAA,MAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,KAAA,EAAAA,SAAA,CAAA;;AAEA,QAAA,OAAAC,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA;AACA,UAAA,MAAA,YAAA,GAAA,sBAAA;AACA,YAAA,MAAA,QAAA,CAAA,KAAA,CAAA,IAAA,EAAA,CAAA,KAAA,EAAA,cAAA,EAAAD,SAAA,CAAA,CAAA;AACA,YAAA,KAAA,IAAA;AACA,cAAA,IAAA,KAAA,IAAA,IAAA,EAAA;AACA;AACA,gBAAA,MAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,gBAAA,MAAA,CAAA,QAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AACA,cAAA;AACA,YAAA,CAAA;AACA,WAAA;;AAEA,UAAA,OAAA,MAAA,CAAA,oBAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,QAAA,CAAA,CAAA;AACA,MAAA,CAAA;AACA,IAAA;;AAEA,IAAA,OAAA,SAAA,cAAA;;AAEA;AACA;AACA,MAAA,KAAA;AACA,MAAAA,SAAA;AACA,MAAA,QAAA;AACA,MAAA;AACA,MAAA,UAAA,EAAA;;AAEA,MAAA,MAAA,MAAA,GAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,EAAAA,SAAA,CAAA;;AAEA,MAAA,MAAA,IAAA,GAAA,MAAA,CAAA,qBAAA,CAAA,KAAA,EAAAA,SAAA,EAAA,kBAAA,EAAA,MAAA,CAAA;AACA,MAAA,MAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,KAAA,EAAAA,SAAA,CAAA;;AAEA,MAAA,OAAAC,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA;AACA;AACA;AACA;AACA;AACA,QAAA,MAAA,eAAA,GAAA,MAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,CAAA;AACA,QAAA,MAAA,YAAA,GAAA,sBAAA;AACA,UAAA,MAAA,QAAA,CAAA,KAAA,CAAA,IAAA,EAAA,CAAA,KAAA,EAAAD,SAAA,EAAA,eAAA,CAAA,CAAA;AACA,UAAA,KAAA,IAAA;AACA,YAAA,IAAA,KAAA,IAAA,IAAA,EAAA;AACA;AACA,cAAA,MAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,cAAA,MAAA,CAAA,QAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AACA,YAAA;AACA,UAAA,CAAA;AACA,SAAA;;AAEA,QAAA,OAAA,MAAA,CAAA,oBAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,MAAA,CAAA,CAAA;AACA,IAAA,CAAA;AACA,EAAA;;AAEA,GAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,MAAA,EAAA;AACA,IAAA,MAAA,IAAA,GAAA,OAAA,CAAA,YAAA;AACA,IAAA,OAAA,IAAA,CAAA,MAAA,CAAA,SAAA;AACA,MAAA,IAAA;AACA,MAAA;AACA,QAAA,IAAA,EAAA,QAAA,CAAA,MAAA;AACA,QAAA,UAAA,EAAA;AACA,UAAA,CAAA,uBAAA,GAAA,OAAA,CAAA,YAAA;AACA,UAAA,CAAA,mBAAA,GAAA,OAAA,CAAA,kBAAA;AACA,UAAA,CAAA,4BAAA,GAAA,wBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,kBAAA,CAAA;AACA,UAAA,CAAA,mBAAA,GAAA,kBAAA;AACA,UAAA,GAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,MAAA,MAAA;AACA,KAAA;AACA,EAAA;;AAEA,GAAA,iBAAA,CAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA;AACA,IAAA,MAAA,EAAA,WAAA,EAAA,GAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,IAAA,WAAA,EAAA;AACA,MAAA,sBAAA;AACA,QAAA,MAAA,WAAA,CAAA,IAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,CAAA;AACA,QAAA,CAAA,IAAA;AACA,UAAA,IAAA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,+CAAA,EAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,QAAA,IAAA;AACA,OAAA;AACA,IAAA;AACA,EAAA;;AAEA,GAAA,oBAAA,CAAA,IAAA,EAAA,YAAA,EAAA;AACA,IAAA,IAAA,OAAA,YAAA,EAAA,IAAA,KAAA,UAAA,EAAA;AACA,MAAA,OAAA,YAAA,CAAA,IAAA;AACA,QAAA,KAAA,IAAA;AACA,UAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,CAAA;AACA,UAAA,OAAA,IAAA,OAAA,CAAA,OAAA,IAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,QAAA,CAAA,GAAA,KAAA;AACA,UAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,GAAA,CAAA;AACA,UAAA,OAAA,IAAA,OAAA,CAAA,CAAA,OAAA,EAAA,MAAA,KAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,GAAA,EAAA,MAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,OAAA;AACA,IAAA;;AAEA;AACA,IAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AACA,IAAA,OAAA,YAAA;AACA,EAAA;;AAEA,GAAA,gBAAA,CAAA,KAAA,EAAA,OAAA,EAAA;AACA,IAAA,MAAA,MAAA,GAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,OAAA,wBAAA,CAAA,gBAAA;AACA,MAAA,KAAA;AACA,MAAA,OAAA;AACA,MAAA,MAAA,CAAA,qBAAA,IAAA,wBAAA,CAAA,6BAAA;AACA,KAAA;AACA,EAAA;;AAEA,GAAA,mBAAA;AACA,IAAA,OAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA,CAAA,OAAA,GAAA,4BAAA,CAAA,KAAA;AACA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,iBAAA,CAAA,cAAA,EAAA;AACA,IAAA,KAAA,CAAA,iBAAA,CAAA,cAAA,CAAA;AACA,IAAA,IAAA,CAAA,kBAAA,GAAA,IAAA,CAAA,gBAAA,CAAA,cAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,gBAAA,CAAA,cAAA,EAAA;AACA,IAAA,IAAA,CAAA,cAAA,EAAA,OAAA,SAAA;;AAEA;AACA,IAAA,IAAA,eAAA,GAAA,cAAA;;AAEA,IAAA,IAAA,OAAA,eAAA,CAAA,WAAA,KAAA,UAAA,EAAA;AACA,MAAA,eAAA,GAAA,eAAA,CAAA,WAAA,EAAA;AACA,IAAA;;AAEA,IAAA,IAAA,OAAA,eAAA,CAAA,UAAA,KAAA,UAAA,EAAA;AACA,MAAA,OAAA,eAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,CAAA;AACA,IAAA;;AAEA,IAAA,OAAA,SAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,gBAAA,CAAA,aAAA,EAAA;AACA,IAAA,KAAA,CAAA,gBAAA,CAAA,aAAA,CAAA;AACA,IAAA,IAAA,CAAA,mBAAA,GAAA,IAAA,CAAA,iBAAA,CAAA,aAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,iBAAA,CAAA,aAAA,EAAA;AACA,IAAA,IAAA,CAAA,aAAA,EAAA,OAAA,SAAA;;AAEA;AACA,IAAA,MAAA,eAAA,GAAA,aAAA;;AAEA,IAAA,IAAA,OAAA,eAAA,CAAA,UAAA,KAAA,UAAA,EAAA;AACA,MAAA,OAAA,eAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,CAAA;AACA,IAAA;;AAEA,IAAA,OAAA,SAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA;AACA,IAAA,MAAA,MAAA,GAAA,IAAA;AACA,IAAA,OAAA,SAAA,eAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,4CAAA,CAAA;AACA,MAAA,MAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,GAAA,EAAA,GAAA,CAAA;;AAEA,MAAA,MAAA,CAAA,QAAA,CAAA,IAAA,EAAA,GAAA,EAAA,MAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,6CAAA,CAAA;AACA,QAAA,OAAA,QAAA,CAAA,KAAA,CAAA,IAAA,EAAA,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA;AACA,MAAA,CAAA,CAAA;AACA,IAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,QAAA,CAAA,IAAA,EAAA,GAAA,EAAA,QAAA,EAAA;AACA,IAAA,IAAA,GAAA,EAAA;AACA,MAAA,IAAA,CAAA,eAAA,CAAA,GAAA,CAAA;AACA,IAAA;;AAEA,IAAA,IAAA,UAAA;AACA,IAAA,IAAA,OAAA,GAAA,KAAA,QAAA,EAAA;AACA,MAAA,UAAA,GAAA,GAAA;AACA,IAAA,CAAA,MAAA,IAAA,GAAA,EAAA;AACA,MAAA,UAAA,GAAA,GAAA,CAAA,OAAA;AACA,IAAA;AACA,IAAA,IAAA,UAAA,EAAA;AACA,MAAA,IAAA,CAAA,SAAA,CAAA;AACA,QAAA,IAAA,EAAA,cAAA,CAAA,KAAA;AACA,QAAA,OAAA,EAAA,UAAA;AACA,OAAA,CAAA;AACA,IAAA;;AAEA,IAAA,IAAA,CAAA,GAAA,EAAA;;AAEA,IAAA,MAAA,QAAA,GAAA,EAAA;AACA,IAAA,IAAA,IAAA,CAAA,kBAAA,EAAA;AACA,MAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,kBAAA,EAAA,CAAA;AACA,IAAA,CAAA,MAAA;AACA,MAAA,IAAA,CAAA,KAAA;AACA,QAAA,sGAAA;AACA,OAAA;AACA,IAAA;AACA,IAAA,IAAA,IAAA,CAAA,mBAAA,EAAA;AACA,MAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,IAAA,CAAA,MAAA;AACA,MAAA,IAAA,CAAA,KAAA;AACA,QAAA,wGAAA;AACA,OAAA;AACA,IAAA;;AAEA,IAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,QAAA,EAAA,QAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,kBAAA,CAAA,IAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,IAAA,MAAA,EAAA,YAAA,EAAA,GAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,IAAA,YAAA,EAAA;AACA,MAAA,sBAAA;AACA,QAAA,MAAA,YAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAAA;AACA,QAAA,CAAA,IAAA;AACA,UAAA,IAAA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,gDAAA,EAAA,CAAA,CAAA;AACA,QAAA,CAAA;AACA,QAAA,IAAA;AACA,OAAA;AACA,IAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,iBAAA,CAAA,GAAA,EAAA;AACA,IAAA,MAAA,KAAA,GAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA;AACA,IAAA,IAAA,KAAA,CAAA,MAAA,IAAA,CAAA,EAAA;AACA,MAAA,OAAA,KAAA,CAAA,CAAA,CAAA;AACA,IAAA;AACA,IAAA,OAAA,SAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,6BAAA,CAAA,KAAA,EAAA;AACA;AACA,IAAA,MAAA,WAAA,GAAA,KAAA,CAAA,OAAA,IAAA,EAAA;AACA,IAAA,OAAA,WAAA,CAAA,OAAA,CAAAC,OAAA,CAAA,MAAA,EAAA,EAAA,WAAA,EAAA,YAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,wBAAA,CAAA,KAAA,EAAA;AACA,IAAA,MAAA,MAAA,GAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,IAAA,IAAA,OAAA,EAAA;AACA,MAAA,MAAA,CAAA,aAAA,CAAA,GAAA,OAAA;AACA,IAAA;AACA,IAAA,OAAA,MAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,eAAA,CAAA,KAAA,EAAA;AACA;AACA,IAAA,IAAA,CAAA,KAAA,CAAA,OAAA,EAAA;AACA,MAAA,OAAA,SAAA;AACA,IAAA;AACA;AACA;AACA;AACA;AACA,IAAA,SAAA,OAAA,CAAA,KAAA,EAAA,IAAA,EAAA,IAAA,EAAA;AACA,MAAA,OAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA;AACA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,OAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AACA,IAAA,MAAA,KAAA,GAAA,OAAA,CAAA,KAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA;AACA,IAAA,MAAA,IAAA,GAAA,OAAA,CAAA,KAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA;AACA,IAAA,IAAA,EAAA,KAAA,IAAA,IAAA,KAAA,KAAA,CAAA,IAAA,IAAA,KAAA,CAAA,OAAA,CAAA,CAAA,EAAA;AACA,MAAA,OAAA,SAAA;AACA,IAAA;AACA,IAAA,IAAA,MAAA,GAAA,CAAA,EAAA,KAAA,CAAA,GAAA,EAAA,IAAA,CAAA,CAAA;AACA,IAAA,IAAA,IAAA,EAAA;AACA,MAAA,MAAA,IAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACA,IAAA;AACA,IAAA,MAAA,IAAA,KAAA,CAAA,IAAA,IAAA,KAAA,CAAA,OAAA;AACA,IAAA,IAAA,KAAA,CAAA,qBAAA,EAAA;AACA,MAAA,IAAA,KAAA,GAAA,IAAA;AACA,MAAA,KAAA,MAAA,GAAA,IAAA,KAAA,CAAA,qBAAA,EAAA;AACA,QAAA,MAAA,IAAA,KAAA,GAAA,GAAA,GAAA,GAAA;AACA,QAAA,MAAA,IAAA,kBAAA,CAAA,GAAA,CAAA;AACA,QAAA,MAAA,IAAA,GAAA;AACA,QAAA,MAAA,IAAA,kBAAA,CAAA,KAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA;AACA,QAAA,KAAA,GAAA,KAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA,OAAA,MAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA,GAAA,OAAA,gBAAA;AACA,IAAA,KAAA;AACA,IAAA,OAAA;AACA,IAAA,qBAAA;AACA,IAAA;AACA,IAAA,MAAA,gBAAA,GAAA,sBAAA;AACA,MAAA,MAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AACA,MAAA,CAAA,IAAA;AACA,QAAA,IAAA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,yDAAA,EAAA,CAAA,CAAA;AACA,MAAA,CAAA;AACA,MAAA,IAAA;AACA,KAAA;AACA,IAAA,IAAA,KAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,EAAA;AACA,MAAA,OAAA,gBAAA;AACA,IAAA;AACA,IAAA,OAAA,YAAA;AACA,EAAA;AACA;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"type":"module","version":"10.24.0","sideEffects":false} | ||
| {"type":"module","version":"10.25.0","sideEffects":false} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"sdk.js","sources":["../../../src/sdk.ts"],"sourcesContent":["import type { Scope } from '@sentry/core';\nimport { consoleSandbox, debug } from '@sentry/core';\nimport { captureException, captureMessage, flush, getCurrentScope, withScope } from '@sentry/node';\nimport type { Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport { performance } from 'perf_hooks';\nimport { types } from 'util';\nimport { DEBUG_BUILD } from './debug-build';\nimport { markEventUnhandled } from './utils';\n\nconst { isPromise } = types;\n\n// https://www.npmjs.com/package/aws-lambda-consumer\ntype SyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n callback: Parameters<T>[2],\n) => void;\n\nexport type AsyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n) => Promise<NonNullable<Parameters<Parameters<T>[2]>[1]>>;\n\nexport interface WrapperOptions {\n flushTimeout: number;\n callbackWaitsForEmptyEventLoop: boolean;\n captureTimeoutWarning: boolean;\n timeoutWarningLimit: number;\n /**\n * Capture all errors when `Promise.allSettled` is returned by the handler\n * The {@link wrapHandler} will not fail the lambda even if there are errors\n * @default false\n */\n captureAllSettledReasons: boolean;\n // TODO(v11): Remove this option since its no longer used.\n /**\n * @deprecated This option has no effect and will be removed in a future major version.\n * If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`, otherwise OpenTelemetry will automatically trace the handler.\n */\n startTrace: boolean;\n}\n\n/** */\nfunction isPromiseAllSettledResult<T>(result: T[]): boolean {\n return result.every(\n v =>\n Object.prototype.hasOwnProperty.call(v, 'status') &&\n (Object.prototype.hasOwnProperty.call(v, 'value') || Object.prototype.hasOwnProperty.call(v, 'reason')),\n );\n}\n\ntype PromiseSettledResult<T> = { status: 'rejected' | 'fulfilled'; reason?: T };\n\n/** */\nfunction getRejectedReasons<T>(results: PromiseSettledResult<T>[]): T[] {\n return results.reduce((rejected: T[], result) => {\n if (result.status === 'rejected' && result.reason) rejected.push(result.reason);\n return rejected;\n }, []);\n}\n\n/**\n * TODO(v11): Remove this function\n * @deprecated This function is no longer used and will be removed in a future major version.\n */\nexport function tryPatchHandler(_taskRoot: string, _handlerPath: string): void {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('The `tryPatchHandler` function is deprecated and will be removed in a future major version.');\n });\n}\n\n/**\n * Tries to invoke context.getRemainingTimeInMillis if not available returns 0\n * Some environments use AWS lambda but don't support this function\n * @param context\n */\nfunction tryGetRemainingTimeInMillis(context: Context): number {\n return typeof context.getRemainingTimeInMillis === 'function' ? context.getRemainingTimeInMillis() : 0;\n}\n\n/**\n * Adds additional information from the environment and AWS Context to the Sentry Scope.\n *\n * @param scope Scope that should be enhanced\n * @param context AWS Lambda context that will be used to extract some part of the data\n * @param startTime performance.now() when wrapHandler was invoked\n */\nfunction enhanceScopeWithEnvironmentData(scope: Scope, context: Context, startTime: number): void {\n scope.setContext('aws.lambda', {\n aws_request_id: context.awsRequestId,\n function_name: context.functionName,\n function_version: context.functionVersion,\n invoked_function_arn: context.invokedFunctionArn,\n execution_duration_in_millis: performance.now() - startTime,\n remaining_time_in_millis: tryGetRemainingTimeInMillis(context),\n 'sys.argv': process.argv,\n });\n\n scope.setContext('aws.cloudwatch.logs', {\n log_group: context.logGroupName,\n log_stream: context.logStreamName,\n url: `https://console.aws.amazon.com/cloudwatch/home?region=${\n process.env.AWS_REGION\n }#logsV2:log-groups/log-group/${encodeURIComponent(context.logGroupName)}/log-events/${encodeURIComponent(\n context.logStreamName,\n )}?filterPattern=\"${context.awsRequestId}\"`,\n });\n}\n\nfunction setupTimeoutWarning(context: Context, options: WrapperOptions): NodeJS.Timeout | undefined {\n // In seconds. You cannot go any more granular than this in AWS Lambda.\n const configuredTimeout = Math.ceil(tryGetRemainingTimeInMillis(context) / 1000);\n const configuredTimeoutMinutes = Math.floor(configuredTimeout / 60);\n const configuredTimeoutSeconds = configuredTimeout % 60;\n\n const humanReadableTimeout =\n configuredTimeoutMinutes > 0\n ? `${configuredTimeoutMinutes}m${configuredTimeoutSeconds}s`\n : `${configuredTimeoutSeconds}s`;\n\n if (options.captureTimeoutWarning) {\n const timeoutWarningDelay = tryGetRemainingTimeInMillis(context) - options.timeoutWarningLimit;\n\n return setTimeout(() => {\n withScope(scope => {\n scope.setTag('timeout', humanReadableTimeout);\n captureMessage(`Possible function timeout: ${context.functionName}`, 'warning');\n });\n }, timeoutWarningDelay) as unknown as NodeJS.Timeout;\n }\n\n return undefined;\n}\n\nexport const AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nexport const AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nexport const AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\nfunction isStreamingHandler(handler: Handler | StreamifyHandler): handler is StreamifyHandler {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n}\n\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): Handler<TEvent, TResult>;\n\nexport function wrapHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): StreamifyHandler<TEvent, TResult>;\n\n/**\n * Wraps a lambda handler adding it error capture and tracing capabilities.\n *\n * @param handler Handler\n * @param options Options\n * @returns Handler\n */\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n wrapOptions: Partial<WrapperOptions> = {},\n): Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult> {\n const START_TIME = performance.now();\n\n // eslint-disable-next-line deprecation/deprecation\n if (typeof wrapOptions.startTrace !== 'undefined') {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'The `startTrace` option is deprecated and will be removed in a future major version. If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`.',\n );\n });\n }\n\n const options: WrapperOptions = {\n flushTimeout: 2000,\n callbackWaitsForEmptyEventLoop: false,\n captureTimeoutWarning: true,\n timeoutWarningLimit: 500,\n captureAllSettledReasons: false,\n startTrace: true, // TODO(v11): Remove this option. Set to true here to satisfy the type, but has no effect.\n ...wrapOptions,\n };\n\n if (isStreamingHandler(handler)) {\n return wrapStreamingHandler(handler, options, START_TIME);\n }\n\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n // AWSLambda is like Express. It makes a distinction about handlers based on its last argument\n // async (event) => async handler\n // async (event, context) => async handler\n // (event, context, callback) => sync handler\n // Nevertheless whatever option is chosen by user, we convert it to async handler.\n const asyncHandler: AsyncHandler<Handler<TEvent, TResult>> =\n handler.length > 2\n ? (event, context) =>\n new Promise((resolve, reject) => {\n const rv = (handler as SyncHandler<Handler<TEvent, TResult>>)(event, context, (error, result) => {\n if (error === null || error === undefined) {\n resolve(result!); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n } else {\n reject(error);\n }\n }) as unknown;\n\n // This should never happen, but still can if someone writes a handler as\n // `async (event, context, callback) => {}`\n if (isPromise(rv)) {\n void (rv as Promise<NonNullable<TResult>>).then(resolve, reject);\n }\n })\n : (handler as AsyncHandler<Handler<TEvent, TResult>>);\n\n return async (event: TEvent, context: Context) => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n let rv: TResult;\n try {\n enhanceScopeWithEnvironmentData(scope, context, START_TIME);\n\n rv = await asyncHandler(event, context);\n\n // We manage lambdas that use Promise.allSettled by capturing the errors of failed promises\n if (options.captureAllSettledReasons && Array.isArray(rv) && isPromiseAllSettledResult(rv)) {\n const reasons = getRejectedReasons(rv);\n reasons.forEach(exception => {\n captureException(exception, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.promise'));\n });\n }\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n clearTimeout(timeoutWarningTimer);\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n return rv;\n }\n\n return withScope(async () => {\n return processResult();\n });\n };\n}\n\nfunction wrapStreamingHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n options: WrapperOptions,\n startTime: number,\n): StreamifyHandler<TEvent, TResult> {\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n const wrappedHandler = async (\n event: TEvent,\n responseStream: Parameters<StreamifyHandler<TEvent, TResult>>[1],\n context: Context,\n ): Promise<TResult> => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processStreamingResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n try {\n enhanceScopeWithEnvironmentData(scope, context, startTime);\n\n responseStream.on('error', error => {\n captureException(error, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.stream'));\n });\n\n return await handler(event, responseStream, context);\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n if (timeoutWarningTimer) {\n clearTimeout(timeoutWarningTimer);\n }\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n }\n\n return withScope(() => processStreamingResult());\n };\n\n const handlerWithSymbols = handler as unknown as Record<symbol, unknown>;\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_STREAMING_SYMBOL];\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrappedHandler;\n}\n"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"sdk.js","sources":["../../../src/sdk.ts"],"sourcesContent":["import type { Scope } from '@sentry/core';\nimport { consoleSandbox, debug } from '@sentry/core';\nimport { captureException, captureMessage, flush, getCurrentScope, withScope } from '@sentry/node';\nimport type { Context, Handler, StreamifyHandler } from 'aws-lambda';\nimport { performance } from 'perf_hooks';\nimport { types } from 'util';\nimport { DEBUG_BUILD } from './debug-build';\nimport { markEventUnhandled } from './utils';\n\nconst { isPromise } = types;\n\n// https://www.npmjs.com/package/aws-lambda-consumer\ntype SyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n callback: Parameters<T>[2],\n) => void;\n\nexport type AsyncHandler<T extends Handler> = (\n event: Parameters<T>[0],\n context: Parameters<T>[1],\n) => Promise<NonNullable<Parameters<Parameters<T>[2]>[1]>>;\n\nexport interface WrapperOptions {\n flushTimeout: number;\n callbackWaitsForEmptyEventLoop: boolean;\n captureTimeoutWarning: boolean;\n timeoutWarningLimit: number;\n /**\n * Capture all errors when `Promise.allSettled` is returned by the handler\n * The {@link wrapHandler} will not fail the lambda even if there are errors\n * @default false\n */\n captureAllSettledReasons: boolean;\n // TODO(v11): Remove this option since its no longer used.\n /**\n * @deprecated This option has no effect and will be removed in a future major version.\n * If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`, otherwise OpenTelemetry will automatically trace the handler.\n */\n startTrace: boolean;\n}\n\n/** */\nfunction isPromiseAllSettledResult<T>(result: T[]): boolean {\n return result.every(\n v =>\n Object.prototype.hasOwnProperty.call(v, 'status') &&\n (Object.prototype.hasOwnProperty.call(v, 'value') || Object.prototype.hasOwnProperty.call(v, 'reason')),\n );\n}\n\ntype PromiseSettledResult<T> = { status: 'rejected' | 'fulfilled'; reason?: T };\n\n/** */\nfunction getRejectedReasons<T>(results: PromiseSettledResult<T>[]): T[] {\n return results.reduce((rejected: T[], result) => {\n if (result.status === 'rejected' && result.reason) rejected.push(result.reason);\n return rejected;\n }, []);\n}\n\n/**\n * TODO(v11): Remove this function\n * @deprecated This function is no longer used and will be removed in a future major version.\n */\nexport function tryPatchHandler(_taskRoot: string, _handlerPath: string): void {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('The `tryPatchHandler` function is deprecated and will be removed in a future major version.');\n });\n}\n\n/**\n * Tries to invoke context.getRemainingTimeInMillis if not available returns 0\n * Some environments use AWS lambda but don't support this function\n * @param context\n */\nfunction tryGetRemainingTimeInMillis(context: Context): number {\n return typeof context.getRemainingTimeInMillis === 'function' ? context.getRemainingTimeInMillis() : 0;\n}\n\n/**\n * Adds additional information from the environment and AWS Context to the Sentry Scope.\n *\n * @param scope Scope that should be enhanced\n * @param context AWS Lambda context that will be used to extract some part of the data\n * @param startTime performance.now() when wrapHandler was invoked\n */\nfunction enhanceScopeWithEnvironmentData(scope: Scope, context: Context, startTime: number): void {\n scope.setContext('aws.lambda', {\n aws_request_id: context.awsRequestId,\n function_name: context.functionName,\n function_version: context.functionVersion,\n invoked_function_arn: context.invokedFunctionArn,\n execution_duration_in_millis: performance.now() - startTime,\n remaining_time_in_millis: tryGetRemainingTimeInMillis(context),\n 'sys.argv': process.argv,\n });\n\n scope.setContext('aws.cloudwatch.logs', {\n log_group: context.logGroupName,\n log_stream: context.logStreamName,\n url: `https://console.aws.amazon.com/cloudwatch/home?region=${\n process.env.AWS_REGION\n }#logsV2:log-groups/log-group/${encodeURIComponent(context.logGroupName)}/log-events/${encodeURIComponent(\n context.logStreamName,\n )}?filterPattern=\"${context.awsRequestId}\"`,\n });\n}\n\nfunction setupTimeoutWarning(context: Context, options: WrapperOptions): NodeJS.Timeout | undefined {\n // In seconds. You cannot go any more granular than this in AWS Lambda.\n const configuredTimeout = Math.ceil(tryGetRemainingTimeInMillis(context) / 1000);\n const configuredTimeoutMinutes = Math.floor(configuredTimeout / 60);\n const configuredTimeoutSeconds = configuredTimeout % 60;\n\n const humanReadableTimeout =\n configuredTimeoutMinutes > 0\n ? `${configuredTimeoutMinutes}m${configuredTimeoutSeconds}s`\n : `${configuredTimeoutSeconds}s`;\n\n if (options.captureTimeoutWarning) {\n const timeoutWarningDelay = tryGetRemainingTimeInMillis(context) - options.timeoutWarningLimit;\n\n return setTimeout(() => {\n withScope(scope => {\n scope.setTag('timeout', humanReadableTimeout);\n captureMessage(`Possible function timeout: ${context.functionName}`, 'warning');\n });\n }, timeoutWarningDelay) as unknown as NodeJS.Timeout;\n }\n\n return undefined;\n}\n\nexport const AWS_HANDLER_HIGHWATERMARK_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming.highWaterMark');\nexport const AWS_HANDLER_STREAMING_SYMBOL = Symbol.for('aws.lambda.runtime.handler.streaming');\nexport const AWS_HANDLER_STREAMING_RESPONSE = 'response';\n\nfunction isStreamingHandler(handler: Handler | StreamifyHandler): handler is StreamifyHandler {\n return (\n (handler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] === AWS_HANDLER_STREAMING_RESPONSE\n );\n}\n\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): Handler<TEvent, TResult>;\n\nexport function wrapHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n wrapOptions?: Partial<WrapperOptions>,\n): StreamifyHandler<TEvent, TResult>;\n\n/**\n * Wraps a lambda handler adding it error capture and tracing capabilities.\n *\n * @param handler Handler\n * @param options Options\n * @returns Handler\n */\nexport function wrapHandler<TEvent, TResult>(\n handler: Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult>,\n wrapOptions: Partial<WrapperOptions> = {},\n): Handler<TEvent, TResult> | StreamifyHandler<TEvent, TResult> {\n const START_TIME = performance.now();\n\n // eslint-disable-next-line deprecation/deprecation\n if (typeof wrapOptions.startTrace !== 'undefined') {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'The `startTrace` option is deprecated and will be removed in a future major version. If you want to disable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to `0.0`.',\n );\n });\n }\n\n const options: WrapperOptions = {\n flushTimeout: 2000,\n callbackWaitsForEmptyEventLoop: false,\n captureTimeoutWarning: true,\n timeoutWarningLimit: 500,\n captureAllSettledReasons: false,\n startTrace: true, // TODO(v11): Remove this option. Set to true here to satisfy the type, but has no effect.\n ...wrapOptions,\n };\n\n if (isStreamingHandler(handler)) {\n return wrapStreamingHandler(handler, options, START_TIME);\n }\n\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n // AWSLambda is like Express. It makes a distinction about handlers based on its last argument\n // async (event) => async handler\n // async (event, context) => async handler\n // (event, context, callback) => sync handler\n // Nevertheless whatever option is chosen by user, we convert it to async handler.\n const asyncHandler: AsyncHandler<Handler<TEvent, TResult>> =\n handler.length > 2\n ? (event, context) =>\n new Promise((resolve, reject) => {\n const rv = (handler as SyncHandler<Handler<TEvent, TResult>>)(event, context, (error, result) => {\n if (error === null || error === undefined) {\n resolve(result!); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n } else {\n reject(error);\n }\n }) as unknown;\n\n // This should never happen, but still can if someone writes a handler as\n // `async (event, context, callback) => {}`\n if (isPromise(rv)) {\n void (rv as Promise<NonNullable<TResult>>).then(resolve, reject);\n }\n })\n : (handler as AsyncHandler<Handler<TEvent, TResult>>);\n\n return async (event: TEvent, context: Context) => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n let rv: TResult;\n try {\n enhanceScopeWithEnvironmentData(scope, context, START_TIME);\n\n rv = await asyncHandler(event, context);\n\n // We manage lambdas that use Promise.allSettled by capturing the errors of failed promises\n if (options.captureAllSettledReasons && Array.isArray(rv) && isPromiseAllSettledResult(rv)) {\n const reasons = getRejectedReasons(rv);\n reasons.forEach(exception => {\n captureException(exception, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.promise'));\n });\n }\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n clearTimeout(timeoutWarningTimer);\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n return rv;\n }\n\n return withScope(async () => {\n return processResult();\n });\n };\n}\n\nfunction wrapStreamingHandler<TEvent, TResult>(\n handler: StreamifyHandler<TEvent, TResult>,\n options: WrapperOptions,\n startTime: number,\n): StreamifyHandler<TEvent, TResult> {\n let timeoutWarningTimer: NodeJS.Timeout | undefined;\n\n const wrappedHandler = async (\n event: TEvent,\n responseStream: Parameters<StreamifyHandler<TEvent, TResult>>[1],\n context: Context,\n ): Promise<TResult> => {\n context.callbackWaitsForEmptyEventLoop = options.callbackWaitsForEmptyEventLoop;\n\n timeoutWarningTimer = setupTimeoutWarning(context, options);\n\n async function processStreamingResult(): Promise<TResult> {\n const scope = getCurrentScope();\n\n try {\n enhanceScopeWithEnvironmentData(scope, context, startTime);\n\n responseStream.on('error', error => {\n captureException(error, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.stream'));\n });\n\n return await handler(event, responseStream, context);\n } catch (e) {\n // Errors should already captured in the instrumentation's `responseHook`,\n // we capture them here just to be safe. Double captures are deduplicated by the SDK.\n captureException(e, scope => markEventUnhandled(scope, 'auto.function.aws_serverless.handler'));\n throw e;\n } finally {\n if (timeoutWarningTimer) {\n clearTimeout(timeoutWarningTimer);\n }\n await flush(options.flushTimeout).catch(e => {\n DEBUG_BUILD && debug.error(e);\n });\n }\n }\n\n return withScope(() => processStreamingResult());\n };\n\n const handlerWithSymbols = handler as unknown as Record<symbol, unknown>;\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_STREAMING_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_STREAMING_SYMBOL];\n (wrappedHandler as unknown as Record<symbol, unknown>)[AWS_HANDLER_HIGHWATERMARK_SYMBOL] =\n handlerWithSymbols[AWS_HANDLER_HIGHWATERMARK_SYMBOL];\n\n return wrappedHandler;\n}\n"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"utils.js","sources":["../../../src/utils.ts"],"sourcesContent":["import type { Context as OtelContext, TextMapGetter } from '@opentelemetry/api';\nimport { context as otelContext, propagation } from '@opentelemetry/api';\nimport type { Scope } from '@sentry/core';\nimport { addExceptionMechanism, isString } from '@sentry/core';\nimport type { APIGatewayProxyEventHeaders, Handler } from 'aws-lambda';\n\ntype HandlerEvent = Parameters<Handler<{ headers?: Record<string, string> }>>[0];\ntype HandlerContext = Parameters<Handler>[1];\n\ntype TraceData = {\n 'sentry-trace'?: string;\n baggage?: string;\n};\n\n// vendored from\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts#L65-L72\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\n/**\n * Marks an event as unhandled by adding a span processor to the passed scope.\n */\nexport function markEventUnhandled(scope: Scope, type: string): Scope {\n scope.addEventProcessor(event => {\n addExceptionMechanism(event, { handled: false, type });\n return event;\n });\n\n return scope;\n}\n\n/**\n * Extracts sentry trace data from the handler `context` if available and falls\n * back to the `event`.\n *\n * When instrumenting the Lambda function with Sentry, the sentry trace data\n * is placed on `context.clientContext.Custom`. Users are free to modify context\n * tho and provide this data via `event` or `context`.\n */\nexport function getAwsTraceData(event: HandlerEvent, context?: HandlerContext): TraceData {\n const headers = event.headers || {};\n\n const traceData: TraceData = {\n 'sentry-trace': headers['sentry-trace'],\n baggage: headers.baggage,\n };\n\n if (context?.clientContext?.Custom) {\n const customContext: Record<string, unknown> = context.clientContext.Custom;\n const sentryTrace = isString(customContext['sentry-trace']) ? customContext['sentry-trace'] : undefined;\n\n if (sentryTrace) {\n traceData['sentry-trace'] = sentryTrace;\n traceData.baggage = isString(customContext.baggage) ? customContext.baggage : undefined;\n }\n }\n\n return traceData;\n}\n\n/**\n * A custom event context extractor for the aws integration. It takes sentry trace data\n * from the context rather than the event, with the event being a fallback.\n *\n * Is only used when the handler was successfully wrapped by otel and the integration option\n * `disableAwsContextPropagation` is `true`.\n */\nexport function eventContextExtractor(event: HandlerEvent, context?: HandlerContext): OtelContext {\n // The default context extractor tries to get sampled trace headers from HTTP headers\n // The otel aws integration packs these onto the context, so we try to extract them from\n // there instead.\n const httpHeaders = {\n ...(event.headers || {}),\n ...getAwsTraceData(event, context),\n };\n\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n}\n"],"names":["context","otelContext"],"mappings":";;;AAcA;AACA;AACA,MAAM,YAAY,GAA+C;AACjE,EAAE,IAAI,CAAC,OAAO,EAAY;AAC1B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,GAAG;AACH,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAU;AAC5B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC;AACvB,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAS,IAAI,EAAiB;AACtE,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS;AACnC,IAAI,qBAAqB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAA,EAAM,CAAC;AAC1D,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;;AAEJ,EAAE,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAgB,OAAO,EAA8B;AAC1F,EAAE,MAAM,UAAU,KAAK,CAAC,OAAA,IAAW,EAAE;;AAErC,EAAE,MAAM,SAAS,GAAc;AAC/B,IAAI,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;AAC3C,IAAI,OAAO,EAAE,OAAO,CAAC,OAAO;AAC5B,GAAG;;AAEH,EAAE,IAAI,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE;AACtC,IAAI,MAAM,aAAa,GAA4B,OAAO,CAAC,aAAa,CAAC,MAAM;AAC/E,IAAI,MAAM,WAAA,GAAc,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA,GAAI,aAAa,CAAC,cAAc,CAAA,GAAI,SAAS;;AAE3G,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,SAAS,CAAC,cAAc,CAAA,GAAI,WAAW;AAC7C,MAAM,SAAS,CAAC,OAAA,GAAU,QAAQ,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAA,GAAU,SAAS;AAC7F;AACA;;AAEA,EAAE,OAAO,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,KAAK,EAAgBA,SAAO,EAAgC;AAClG;AACA;AACA;AACA,EAAE,MAAM,cAAc;AACtB,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AAC5B,IAAI,GAAG,eAAe,CAAC,KAAK,EAAEA,SAAO,CAAC;AACtC,GAAG;;AAEH,EAAE,OAAO,WAAW,CAAC,OAAO,CAACC,OAAW,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7E;;;;"} | ||
| {"version":3,"file":"utils.js","sources":["../../../src/utils.ts"],"sourcesContent":["import type { Context as OtelContext, TextMapGetter } from '@opentelemetry/api';\nimport { context as otelContext, propagation } from '@opentelemetry/api';\nimport type { Scope } from '@sentry/core';\nimport { addExceptionMechanism, isString } from '@sentry/core';\nimport type { APIGatewayProxyEventHeaders, Handler } from 'aws-lambda';\n\ntype HandlerEvent = Parameters<Handler<{ headers?: Record<string, string> }>>[0];\ntype HandlerContext = Parameters<Handler>[1];\n\ntype TraceData = {\n 'sentry-trace'?: string;\n baggage?: string;\n};\n\n// vendored from\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts#L65-L72\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\n/**\n * Marks an event as unhandled by adding a span processor to the passed scope.\n */\nexport function markEventUnhandled(scope: Scope, type: string): Scope {\n scope.addEventProcessor(event => {\n addExceptionMechanism(event, { handled: false, type });\n return event;\n });\n\n return scope;\n}\n\n/**\n * Extracts sentry trace data from the handler `context` if available and falls\n * back to the `event`.\n *\n * When instrumenting the Lambda function with Sentry, the sentry trace data\n * is placed on `context.clientContext.Custom`. Users are free to modify context\n * tho and provide this data via `event` or `context`.\n */\nexport function getAwsTraceData(event: HandlerEvent, context?: HandlerContext): TraceData {\n const headers = event.headers || {};\n\n const traceData: TraceData = {\n 'sentry-trace': headers['sentry-trace'],\n baggage: headers.baggage,\n };\n\n if (context?.clientContext?.Custom) {\n const customContext: Record<string, unknown> = context.clientContext.Custom;\n const sentryTrace = isString(customContext['sentry-trace']) ? customContext['sentry-trace'] : undefined;\n\n if (sentryTrace) {\n traceData['sentry-trace'] = sentryTrace;\n traceData.baggage = isString(customContext.baggage) ? customContext.baggage : undefined;\n }\n }\n\n return traceData;\n}\n\n/**\n * A custom event context extractor for the aws integration. It takes sentry trace data\n * from the context rather than the event, with the event being a fallback.\n *\n * Is only used when the handler was successfully wrapped by otel and the integration option\n * `disableAwsContextPropagation` is `true`.\n */\nexport function eventContextExtractor(event: HandlerEvent, context?: HandlerContext): OtelContext {\n // The default context extractor tries to get sampled trace headers from HTTP headers\n // The otel aws integration packs these onto the context, so we try to extract them from\n // there instead.\n const httpHeaders = {\n ...(event.headers || {}),\n ...getAwsTraceData(event, context),\n };\n\n return propagation.extract(otelContext.active(), httpHeaders, headerGetter);\n}\n"],"names":["context","otelContext"],"mappings":";;;AAcA;AACA;AACA,MAAM,YAAY,GAA+C;AACjE,EAAE,IAAI,CAAC,OAAO,EAAY;AAC1B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,EAAE,CAAC;AACH,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAU;AAC5B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC;AACvB,EAAE,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAS,IAAI,EAAiB;AACtE,EAAE,KAAK,CAAC,iBAAiB,CAAC,SAAS;AACnC,IAAI,qBAAqB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAA,EAAM,CAAC;AAC1D,IAAI,OAAO,KAAK;AAChB,EAAE,CAAC,CAAC;;AAEJ,EAAE,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAgB,OAAO,EAA8B;AAC1F,EAAE,MAAM,UAAU,KAAK,CAAC,OAAA,IAAW,EAAE;;AAErC,EAAE,MAAM,SAAS,GAAc;AAC/B,IAAI,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;AAC3C,IAAI,OAAO,EAAE,OAAO,CAAC,OAAO;AAC5B,GAAG;;AAEH,EAAE,IAAI,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE;AACtC,IAAI,MAAM,aAAa,GAA4B,OAAO,CAAC,aAAa,CAAC,MAAM;AAC/E,IAAI,MAAM,WAAA,GAAc,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA,GAAI,aAAa,CAAC,cAAc,CAAA,GAAI,SAAS;;AAE3G,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,SAAS,CAAC,cAAc,CAAA,GAAI,WAAW;AAC7C,MAAM,SAAS,CAAC,OAAA,GAAU,QAAQ,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAA,GAAU,SAAS;AAC7F,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,KAAK,EAAgBA,SAAO,EAAgC;AAClG;AACA;AACA;AACA,EAAE,MAAM,cAAc;AACtB,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AAC5B,IAAI,GAAG,eAAe,CAAC,KAAK,EAAEA,SAAO,CAAC;AACtC,GAAG;;AAEH,EAAE,OAAO,WAAW,CAAC,OAAO,CAACC,OAAW,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7E;;;;"} |
@@ -1,2 +0,2 @@ | ||
| export { addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, captureCheckIn, captureFeedback, startSession, captureSession, endSession, withMonitor, createTransport, getClient, isInitialized, isEnabled, generateInstrumentOnce, getCurrentScope, getGlobalScope, getIsolationScope, getTraceData, getTraceMetaTags, setCurrentClient, Scope, SDK_VERSION, setContext, setExtra, setExtras, setTag, setTags, setUser, getSpanStatusFromHttpCode, setHttpStatus, withScope, withIsolationScope, makeNodeTransport, NodeClient, defaultStackParser, lastEventId, flush, close, getSentryRelease, createGetModuleFromFilename, createLangChainCallbackHandler, httpHeadersToSpanAttributes, winterCGHeadersToDict, anrIntegration, disableAnrDetectionForCallback, consoleIntegration, httpIntegration, httpServerIntegration, httpServerSpansIntegration, nativeNodeFetchIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, openAIIntegration, langChainIntegration, modulesIntegration, contextLinesIntegration, nodeContextIntegration, localVariablesIntegration, requestDataIntegration, functionToStringIntegration, inboundFiltersIntegration, eventFiltersIntegration, linkedErrorsIntegration, setMeasurement, getActiveSpan, startSpan, startInactiveSpan, startSpanManual, startNewTrace, suppressTracing, withActiveSpan, getRootSpan, getSpanDescendants, continueTrace, getAutoPerformanceIntegrations, cron, parameterize, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, dataloaderIntegration, expressIntegration, expressErrorHandler, setupExpressErrorHandler, koaIntegration, setupKoaErrorHandler, connectIntegration, setupConnectErrorHandler, fastifyIntegration, firebaseIntegration, fsIntegration, genericPoolIntegration, graphqlIntegration, knexIntegration, kafkaIntegration, lruMemoizerIntegration, mongoIntegration, mongooseIntegration, mysqlIntegration, mysql2Integration, redisIntegration, tediousIntegration, pinoIntegration, postgresIntegration, postgresJsIntegration, prismaIntegration, childProcessIntegration, createSentryWinstonTransport, hapiIntegration, setupHapiErrorHandler, honoIntegration, setupHonoErrorHandler, spotlightIntegration, initOpenTelemetry, spanToJSON, spanToTraceHeader, spanToBaggageHeader, systemErrorIntegration, trpcMiddleware, updateSpanName, supabaseIntegration, instrumentSupabaseClient, zodErrorsIntegration, profiler, amqplibIntegration, anthropicAIIntegration, googleGenAIIntegration, vercelAIIntegration, logger, consoleLoggingIntegration, createConsolaReporter, wrapMcpServerWithSentry, NODE_VERSION, featureFlagsIntegration, FeatureFlagsIntegration, launchDarklyIntegration, buildLaunchDarklyFlagUsedHandler, openFeatureIntegration, OpenFeatureIntegrationHook, statsigIntegration, unleashIntegration, growthbookIntegration } from '@sentry/node'; | ||
| export { addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, captureCheckIn, captureFeedback, startSession, captureSession, endSession, withMonitor, createTransport, getClient, isInitialized, isEnabled, generateInstrumentOnce, getCurrentScope, getGlobalScope, getIsolationScope, getTraceData, getTraceMetaTags, setCurrentClient, Scope, SDK_VERSION, setContext, setExtra, setExtras, setTag, setTags, setUser, getSpanStatusFromHttpCode, setHttpStatus, withScope, withIsolationScope, makeNodeTransport, NodeClient, defaultStackParser, lastEventId, flush, close, getSentryRelease, createGetModuleFromFilename, createLangChainCallbackHandler, httpHeadersToSpanAttributes, winterCGHeadersToDict, anrIntegration, disableAnrDetectionForCallback, consoleIntegration, httpIntegration, httpServerIntegration, httpServerSpansIntegration, nativeNodeFetchIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, openAIIntegration, langChainIntegration, modulesIntegration, contextLinesIntegration, nodeContextIntegration, localVariablesIntegration, requestDataIntegration, functionToStringIntegration, inboundFiltersIntegration, eventFiltersIntegration, linkedErrorsIntegration, setMeasurement, getActiveSpan, startSpan, startInactiveSpan, startSpanManual, startNewTrace, suppressTracing, withActiveSpan, getRootSpan, getSpanDescendants, continueTrace, getAutoPerformanceIntegrations, cron, parameterize, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, dataloaderIntegration, expressIntegration, expressErrorHandler, setupExpressErrorHandler, koaIntegration, setupKoaErrorHandler, connectIntegration, setupConnectErrorHandler, fastifyIntegration, firebaseIntegration, fsIntegration, genericPoolIntegration, graphqlIntegration, knexIntegration, kafkaIntegration, lruMemoizerIntegration, mongoIntegration, mongooseIntegration, mysqlIntegration, mysql2Integration, redisIntegration, tediousIntegration, pinoIntegration, postgresIntegration, postgresJsIntegration, prismaIntegration, childProcessIntegration, createSentryWinstonTransport, hapiIntegration, setupHapiErrorHandler, honoIntegration, setupHonoErrorHandler, spotlightIntegration, initOpenTelemetry, spanToJSON, spanToTraceHeader, spanToBaggageHeader, systemErrorIntegration, trpcMiddleware, updateSpanName, supabaseIntegration, instrumentSupabaseClient, zodErrorsIntegration, profiler, amqplibIntegration, anthropicAIIntegration, googleGenAIIntegration, vercelAIIntegration, logger, consoleLoggingIntegration, createConsolaReporter, wrapMcpServerWithSentry, NODE_VERSION, featureFlagsIntegration, FeatureFlagsIntegration, launchDarklyIntegration, buildLaunchDarklyFlagUsedHandler, openFeatureIntegration, OpenFeatureIntegrationHook, statsigIntegration, unleashIntegration, growthbookIntegration, metrics } from '@sentry/node'; | ||
| export { captureConsoleIntegration, dedupeIntegration, extraErrorDataIntegration, rewriteFramesIntegration, } from '@sentry/core'; | ||
@@ -3,0 +3,0 @@ export { awsIntegration } from './integration/aws'; |
@@ -1,2 +0,2 @@ | ||
| export { addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, captureCheckIn, captureFeedback, startSession, captureSession, endSession, withMonitor, createTransport, getClient, isInitialized, isEnabled, generateInstrumentOnce, getCurrentScope, getGlobalScope, getIsolationScope, getTraceData, getTraceMetaTags, setCurrentClient, Scope, SDK_VERSION, setContext, setExtra, setExtras, setTag, setTags, setUser, getSpanStatusFromHttpCode, setHttpStatus, withScope, withIsolationScope, makeNodeTransport, NodeClient, defaultStackParser, lastEventId, flush, close, getSentryRelease, createGetModuleFromFilename, createLangChainCallbackHandler, httpHeadersToSpanAttributes, winterCGHeadersToDict, anrIntegration, disableAnrDetectionForCallback, consoleIntegration, httpIntegration, httpServerIntegration, httpServerSpansIntegration, nativeNodeFetchIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, openAIIntegration, langChainIntegration, modulesIntegration, contextLinesIntegration, nodeContextIntegration, localVariablesIntegration, requestDataIntegration, functionToStringIntegration, inboundFiltersIntegration, eventFiltersIntegration, linkedErrorsIntegration, setMeasurement, getActiveSpan, startSpan, startInactiveSpan, startSpanManual, startNewTrace, suppressTracing, withActiveSpan, getRootSpan, getSpanDescendants, continueTrace, getAutoPerformanceIntegrations, cron, parameterize, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, dataloaderIntegration, expressIntegration, expressErrorHandler, setupExpressErrorHandler, koaIntegration, setupKoaErrorHandler, connectIntegration, setupConnectErrorHandler, fastifyIntegration, firebaseIntegration, fsIntegration, genericPoolIntegration, graphqlIntegration, knexIntegration, kafkaIntegration, lruMemoizerIntegration, mongoIntegration, mongooseIntegration, mysqlIntegration, mysql2Integration, redisIntegration, tediousIntegration, pinoIntegration, postgresIntegration, postgresJsIntegration, prismaIntegration, childProcessIntegration, createSentryWinstonTransport, hapiIntegration, setupHapiErrorHandler, honoIntegration, setupHonoErrorHandler, spotlightIntegration, initOpenTelemetry, spanToJSON, spanToTraceHeader, spanToBaggageHeader, systemErrorIntegration, trpcMiddleware, updateSpanName, supabaseIntegration, instrumentSupabaseClient, zodErrorsIntegration, profiler, amqplibIntegration, anthropicAIIntegration, googleGenAIIntegration, vercelAIIntegration, logger, consoleLoggingIntegration, createConsolaReporter, wrapMcpServerWithSentry, NODE_VERSION, featureFlagsIntegration, type FeatureFlagsIntegration, launchDarklyIntegration, buildLaunchDarklyFlagUsedHandler, openFeatureIntegration, OpenFeatureIntegrationHook, statsigIntegration, unleashIntegration, growthbookIntegration, } from '@sentry/node'; | ||
| export { addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, captureCheckIn, captureFeedback, startSession, captureSession, endSession, withMonitor, createTransport, getClient, isInitialized, isEnabled, generateInstrumentOnce, getCurrentScope, getGlobalScope, getIsolationScope, getTraceData, getTraceMetaTags, setCurrentClient, Scope, SDK_VERSION, setContext, setExtra, setExtras, setTag, setTags, setUser, getSpanStatusFromHttpCode, setHttpStatus, withScope, withIsolationScope, makeNodeTransport, NodeClient, defaultStackParser, lastEventId, flush, close, getSentryRelease, createGetModuleFromFilename, createLangChainCallbackHandler, httpHeadersToSpanAttributes, winterCGHeadersToDict, anrIntegration, disableAnrDetectionForCallback, consoleIntegration, httpIntegration, httpServerIntegration, httpServerSpansIntegration, nativeNodeFetchIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, openAIIntegration, langChainIntegration, modulesIntegration, contextLinesIntegration, nodeContextIntegration, localVariablesIntegration, requestDataIntegration, functionToStringIntegration, inboundFiltersIntegration, eventFiltersIntegration, linkedErrorsIntegration, setMeasurement, getActiveSpan, startSpan, startInactiveSpan, startSpanManual, startNewTrace, suppressTracing, withActiveSpan, getRootSpan, getSpanDescendants, continueTrace, getAutoPerformanceIntegrations, cron, parameterize, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, dataloaderIntegration, expressIntegration, expressErrorHandler, setupExpressErrorHandler, koaIntegration, setupKoaErrorHandler, connectIntegration, setupConnectErrorHandler, fastifyIntegration, firebaseIntegration, fsIntegration, genericPoolIntegration, graphqlIntegration, knexIntegration, kafkaIntegration, lruMemoizerIntegration, mongoIntegration, mongooseIntegration, mysqlIntegration, mysql2Integration, redisIntegration, tediousIntegration, pinoIntegration, postgresIntegration, postgresJsIntegration, prismaIntegration, childProcessIntegration, createSentryWinstonTransport, hapiIntegration, setupHapiErrorHandler, honoIntegration, setupHonoErrorHandler, spotlightIntegration, initOpenTelemetry, spanToJSON, spanToTraceHeader, spanToBaggageHeader, systemErrorIntegration, trpcMiddleware, updateSpanName, supabaseIntegration, instrumentSupabaseClient, zodErrorsIntegration, profiler, amqplibIntegration, anthropicAIIntegration, googleGenAIIntegration, vercelAIIntegration, logger, consoleLoggingIntegration, createConsolaReporter, wrapMcpServerWithSentry, NODE_VERSION, featureFlagsIntegration, type FeatureFlagsIntegration, launchDarklyIntegration, buildLaunchDarklyFlagUsedHandler, openFeatureIntegration, OpenFeatureIntegrationHook, statsigIntegration, unleashIntegration, growthbookIntegration, metrics, } from '@sentry/node'; | ||
| export { captureConsoleIntegration, dedupeIntegration, extraErrorDataIntegration, rewriteFramesIntegration, } from '@sentry/core'; | ||
@@ -3,0 +3,0 @@ export { awsIntegration } from './integration/aws'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"} |
+4
-4
| { | ||
| "name": "@sentry/aws-serverless", | ||
| "version": "10.24.0", | ||
| "version": "10.25.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.24.0", | ||
| "@sentry/node": "10.24.0", | ||
| "@sentry/node-core": "10.24.0", | ||
| "@sentry/core": "10.25.0", | ||
| "@sentry/node": "10.25.0", | ||
| "@sentry/node-core": "10.25.0", | ||
| "@types/aws-lambda": "^8.10.62" | ||
@@ -77,0 +77,0 @@ }, |
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 7 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 7 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
279443
0.53%2775
0.04%+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated