@sentry/core 10.36.0 → 10.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/exports.js +10 -0
- package/build/cjs/exports.js.map +1 -1
- package/build/cjs/index.js +82 -78
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/captureconsole.js +2 -2
- package/build/cjs/integrations/captureconsole.js.map +1 -1
- package/build/cjs/integrations/conversationId.js +37 -0
- package/build/cjs/integrations/conversationId.js.map +1 -0
- package/build/cjs/integrations/mcp-server/errorCapture.js +2 -2
- package/build/cjs/integrations/mcp-server/errorCapture.js.map +1 -1
- package/build/cjs/integrations/supabase.js +4 -4
- package/build/cjs/integrations/supabase.js.map +1 -1
- package/build/cjs/scope.js +20 -0
- package/build/cjs/scope.js.map +1 -1
- package/build/cjs/semanticAttributes.js +16 -0
- package/build/cjs/semanticAttributes.js.map +1 -1
- package/build/cjs/tracing/ai/gen-ai-attributes.js +51 -7
- package/build/cjs/tracing/ai/gen-ai-attributes.js.map +1 -1
- package/build/cjs/tracing/ai/messageTruncation.js +26 -45
- package/build/cjs/tracing/ai/messageTruncation.js.map +1 -1
- package/build/cjs/tracing/ai/utils.js +50 -3
- package/build/cjs/tracing/ai/utils.js.map +1 -1
- package/build/cjs/tracing/anthropic-ai/index.js +3 -3
- package/build/cjs/tracing/anthropic-ai/index.js.map +1 -1
- package/build/cjs/tracing/anthropic-ai/streaming.js +3 -3
- package/build/cjs/tracing/anthropic-ai/streaming.js.map +1 -1
- package/build/cjs/tracing/anthropic-ai/utils.js +17 -6
- package/build/cjs/tracing/anthropic-ai/utils.js.map +1 -1
- package/build/cjs/tracing/google-genai/index.js +12 -5
- package/build/cjs/tracing/google-genai/index.js.map +1 -1
- package/build/cjs/tracing/google-genai/streaming.js +2 -2
- package/build/cjs/tracing/google-genai/streaming.js.map +1 -1
- package/build/cjs/tracing/langchain/index.js +9 -9
- package/build/cjs/tracing/langchain/index.js.map +1 -1
- package/build/cjs/tracing/langchain/utils.js +40 -25
- package/build/cjs/tracing/langchain/utils.js.map +1 -1
- package/build/cjs/tracing/langgraph/index.js +14 -6
- package/build/cjs/tracing/langgraph/index.js.map +1 -1
- package/build/cjs/tracing/openai/index.js +52 -14
- package/build/cjs/tracing/openai/index.js.map +1 -1
- package/build/cjs/tracing/openai/streaming.js +2 -2
- package/build/cjs/tracing/openai/streaming.js.map +1 -1
- package/build/cjs/tracing/openai/utils.js +4 -3
- package/build/cjs/tracing/openai/utils.js.map +1 -1
- package/build/cjs/tracing/vercel-ai/constants.js +22 -0
- package/build/cjs/tracing/vercel-ai/constants.js.map +1 -1
- package/build/cjs/tracing/vercel-ai/index.js +41 -11
- package/build/cjs/tracing/vercel-ai/index.js.map +1 -1
- package/build/cjs/tracing/vercel-ai/utils.js +19 -5
- package/build/cjs/tracing/vercel-ai/utils.js.map +1 -1
- package/build/cjs/trpc.js +3 -3
- package/build/cjs/trpc.js.map +1 -1
- package/build/cjs/utils/aggregate-errors.js +13 -5
- package/build/cjs/utils/aggregate-errors.js.map +1 -1
- package/build/cjs/utils/exports.js +7 -7
- package/build/cjs/utils/exports.js.map +1 -1
- package/build/cjs/utils/flushIfServerless.js +2 -2
- package/build/cjs/utils/flushIfServerless.js.map +1 -1
- package/build/cjs/utils/traceData.js +2 -2
- package/build/cjs/utils/traceData.js.map +1 -1
- package/build/cjs/utils/version.js +1 -1
- package/build/esm/exports.js +12 -3
- package/build/esm/exports.js.map +1 -1
- package/build/esm/feedback.js +1 -1
- package/build/esm/index.js +3 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/integrations/conversationId.js +35 -0
- package/build/esm/integrations/conversationId.js.map +1 -0
- package/build/esm/integrations/moduleMetadata.js +1 -1
- package/build/esm/integrations/third-party-errors-filter.js +1 -1
- package/build/esm/logs/internal.js +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/scope.js +20 -0
- package/build/esm/scope.js.map +1 -1
- package/build/esm/semanticAttributes.js +16 -1
- package/build/esm/semanticAttributes.js.map +1 -1
- package/build/esm/tracing/ai/gen-ai-attributes.js +43 -6
- package/build/esm/tracing/ai/gen-ai-attributes.js.map +1 -1
- package/build/esm/tracing/ai/messageTruncation.js +26 -45
- package/build/esm/tracing/ai/messageTruncation.js.map +1 -1
- package/build/esm/tracing/ai/utils.js +50 -4
- package/build/esm/tracing/ai/utils.js.map +1 -1
- package/build/esm/tracing/anthropic-ai/utils.js +17 -6
- package/build/esm/tracing/anthropic-ai/utils.js.map +1 -1
- package/build/esm/tracing/google-genai/index.js +11 -4
- package/build/esm/tracing/google-genai/index.js.map +1 -1
- package/build/esm/tracing/langchain/index.js +6 -6
- package/build/esm/tracing/langchain/index.js.map +1 -1
- package/build/esm/tracing/langchain/utils.js +41 -26
- package/build/esm/tracing/langchain/utils.js.map +1 -1
- package/build/esm/tracing/langgraph/index.js +12 -4
- package/build/esm/tracing/langgraph/index.js.map +1 -1
- package/build/esm/tracing/measurement.js +1 -1
- package/build/esm/tracing/openai/index.js +51 -13
- package/build/esm/tracing/openai/index.js.map +1 -1
- package/build/esm/tracing/openai/utils.js +4 -3
- package/build/esm/tracing/openai/utils.js.map +1 -1
- package/build/esm/tracing/trace.js +3 -3
- package/build/esm/tracing/vercel-ai/constants.js +20 -1
- package/build/esm/tracing/vercel-ai/constants.js.map +1 -1
- package/build/esm/tracing/vercel-ai/index.js +44 -14
- package/build/esm/tracing/vercel-ai/index.js.map +1 -1
- package/build/esm/tracing/vercel-ai/utils.js +21 -7
- package/build/esm/tracing/vercel-ai/utils.js.map +1 -1
- package/build/esm/utils/aggregate-errors.js +13 -5
- package/build/esm/utils/aggregate-errors.js.map +1 -1
- package/build/esm/utils/exports.js +7 -7
- package/build/esm/utils/exports.js.map +1 -1
- package/build/esm/utils/version.js +1 -1
- package/build/types/exports.d.ts +6 -0
- package/build/types/exports.d.ts.map +1 -1
- package/build/types/index.d.ts +2 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/conversationId.d.ts +9 -0
- package/build/types/integrations/conversationId.d.ts.map +1 -0
- package/build/types/scope.d.ts +9 -0
- package/build/types/scope.d.ts.map +1 -1
- package/build/types/semanticAttributes.d.ts +13 -0
- package/build/types/semanticAttributes.d.ts.map +1 -1
- package/build/types/tracing/ai/gen-ai-attributes.d.ts +35 -5
- package/build/types/tracing/ai/gen-ai-attributes.d.ts.map +1 -1
- package/build/types/tracing/ai/messageTruncation.d.ts.map +1 -1
- package/build/types/tracing/ai/utils.d.ts +13 -1
- package/build/types/tracing/ai/utils.d.ts.map +1 -1
- package/build/types/tracing/anthropic-ai/utils.d.ts +1 -0
- package/build/types/tracing/anthropic-ai/utils.d.ts.map +1 -1
- package/build/types/tracing/google-genai/index.d.ts.map +1 -1
- package/build/types/tracing/langchain/index.d.ts.map +1 -1
- package/build/types/tracing/langchain/utils.d.ts +4 -2
- package/build/types/tracing/langchain/utils.d.ts.map +1 -1
- package/build/types/tracing/langgraph/index.d.ts.map +1 -1
- package/build/types/tracing/openai/index.d.ts.map +1 -1
- package/build/types/tracing/openai/utils.d.ts +2 -1
- package/build/types/tracing/openai/utils.d.ts.map +1 -1
- package/build/types/tracing/vercel-ai/constants.d.ts +3 -0
- package/build/types/tracing/vercel-ai/constants.d.ts.map +1 -1
- package/build/types/tracing/vercel-ai/index.d.ts.map +1 -1
- package/build/types/tracing/vercel-ai/utils.d.ts.map +1 -1
- package/build/types/types-hoist/clientreport.d.ts +1 -1
- package/build/types/types-hoist/clientreport.d.ts.map +1 -1
- package/build/types-ts3.8/exports.d.ts +6 -0
- package/build/types-ts3.8/index.d.ts +2 -1
- package/build/types-ts3.8/integrations/conversationId.d.ts +9 -0
- package/build/types-ts3.8/scope.d.ts +9 -0
- package/build/types-ts3.8/semanticAttributes.d.ts +13 -0
- package/build/types-ts3.8/tracing/ai/gen-ai-attributes.d.ts +35 -5
- package/build/types-ts3.8/tracing/ai/utils.d.ts +13 -1
- package/build/types-ts3.8/tracing/anthropic-ai/utils.d.ts +1 -0
- package/build/types-ts3.8/tracing/langchain/utils.d.ts +4 -2
- package/build/types-ts3.8/tracing/openai/utils.d.ts +2 -1
- package/build/types-ts3.8/tracing/vercel-ai/constants.d.ts +3 -0
- package/build/types-ts3.8/types-hoist/clientreport.d.ts +1 -1
- package/package.json +1 -1
|
@@ -10,11 +10,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
10
10
|
* @returns void
|
|
11
11
|
*/
|
|
12
12
|
function replaceExports(
|
|
13
|
-
exports,
|
|
13
|
+
exports$1,
|
|
14
14
|
exportName,
|
|
15
15
|
wrappedConstructor,
|
|
16
16
|
) {
|
|
17
|
-
const original = exports[exportName];
|
|
17
|
+
const original = exports$1[exportName];
|
|
18
18
|
|
|
19
19
|
if (typeof original !== 'function') {
|
|
20
20
|
return;
|
|
@@ -22,10 +22,10 @@ function replaceExports(
|
|
|
22
22
|
|
|
23
23
|
// Replace the named export - handle read-only properties
|
|
24
24
|
try {
|
|
25
|
-
exports[exportName] = wrappedConstructor;
|
|
25
|
+
exports$1[exportName] = wrappedConstructor;
|
|
26
26
|
} catch (error) {
|
|
27
27
|
// If direct assignment fails, override the property descriptor
|
|
28
|
-
Object.defineProperty(exports, exportName, {
|
|
28
|
+
Object.defineProperty(exports$1, exportName, {
|
|
29
29
|
value: wrappedConstructor,
|
|
30
30
|
writable: true,
|
|
31
31
|
configurable: true,
|
|
@@ -34,11 +34,11 @@ function replaceExports(
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
// Replace the default export if it points to the original constructor
|
|
37
|
-
if (exports.default === original) {
|
|
37
|
+
if (exports$1.default === original) {
|
|
38
38
|
try {
|
|
39
|
-
exports.default = wrappedConstructor;
|
|
39
|
+
exports$1.default = wrappedConstructor;
|
|
40
40
|
} catch (error) {
|
|
41
|
-
Object.defineProperty(exports, 'default', {
|
|
41
|
+
Object.defineProperty(exports$1, 'default', {
|
|
42
42
|
value: wrappedConstructor,
|
|
43
43
|
writable: true,
|
|
44
44
|
configurable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sources":["../../../src/utils/exports.ts"],"sourcesContent":["/**\n * Replaces constructor functions in module exports, handling read-only properties,\n * and both default and named exports by wrapping them with the constructor.\n *\n * @param exports The module exports object to modify\n * @param exportName The name of the export to replace (e.g., 'GoogleGenAI', 'Anthropic', 'OpenAI')\n * @param wrappedConstructor The wrapped constructor function to replace the original with\n * @returns void\n */\nexport function replaceExports(\n exports: { [key: string]: unknown },\n exportName: string,\n wrappedConstructor: unknown,\n): void {\n const original = exports[exportName];\n\n if (typeof original !== 'function') {\n return;\n }\n\n // Replace the named export - handle read-only properties\n try {\n exports[exportName] = wrappedConstructor;\n } catch (error) {\n // If direct assignment fails, override the property descriptor\n Object.defineProperty(exports, exportName, {\n value: wrappedConstructor,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n }\n\n // Replace the default export if it points to the original constructor\n if (exports.default === original) {\n try {\n exports.default = wrappedConstructor;\n } catch (error) {\n Object.defineProperty(exports, 'default', {\n value: wrappedConstructor,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n }\n }\n}\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc;AAC9B,
|
|
1
|
+
{"version":3,"file":"exports.js","sources":["../../../src/utils/exports.ts"],"sourcesContent":["/**\n * Replaces constructor functions in module exports, handling read-only properties,\n * and both default and named exports by wrapping them with the constructor.\n *\n * @param exports The module exports object to modify\n * @param exportName The name of the export to replace (e.g., 'GoogleGenAI', 'Anthropic', 'OpenAI')\n * @param wrappedConstructor The wrapped constructor function to replace the original with\n * @returns void\n */\nexport function replaceExports(\n exports: { [key: string]: unknown },\n exportName: string,\n wrappedConstructor: unknown,\n): void {\n const original = exports[exportName];\n\n if (typeof original !== 'function') {\n return;\n }\n\n // Replace the named export - handle read-only properties\n try {\n exports[exportName] = wrappedConstructor;\n } catch (error) {\n // If direct assignment fails, override the property descriptor\n Object.defineProperty(exports, exportName, {\n value: wrappedConstructor,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n }\n\n // Replace the default export if it points to the original constructor\n if (exports.default === original) {\n try {\n exports.default = wrappedConstructor;\n } catch (error) {\n Object.defineProperty(exports, 'default', {\n value: wrappedConstructor,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n }\n }\n}\n"],"names":["exports"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc;AAC9B,EAAEA,SAAO;AACT,EAAE,UAAU;AACZ,EAAE,kBAAkB;AACpB,EAAQ;AACR,EAAE,MAAM,QAAA,GAAWA,SAAO,CAAC,UAAU,CAAC;;AAEtC,EAAE,IAAI,OAAO,QAAA,KAAa,UAAU,EAAE;AACtC,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,IAAI;AACN,IAAIA,SAAO,CAAC,UAAU,CAAA,GAAI,kBAAkB;AAC5C,EAAE,CAAA,CAAE,OAAO,KAAK,EAAE;AAClB;AACA,IAAI,MAAM,CAAC,cAAc,CAACA,SAAO,EAAE,UAAU,EAAE;AAC/C,MAAM,KAAK,EAAE,kBAAkB;AAC/B,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,UAAU,EAAE,IAAI;AACtB,KAAK,CAAC;AACN,EAAE;;AAEF;AACA,EAAE,IAAIA,SAAO,CAAC,OAAA,KAAY,QAAQ,EAAE;AACpC,IAAI,IAAI;AACR,MAAMA,SAAO,CAAC,OAAA,GAAU,kBAAkB;AAC1C,IAAI,CAAA,CAAE,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,cAAc,CAACA,SAAO,EAAE,SAAS,EAAE;AAChD,QAAQ,KAAK,EAAE,kBAAkB;AACjC,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,YAAY,EAAE,IAAI;AAC1B,QAAQ,UAAU,EAAE,IAAI;AACxB,OAAO,CAAC;AACR,IAAI;AACJ,EAAE;AACF;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const _exports = require('../exports.js');
|
|
4
4
|
const debugLogger = require('./debug-logger.js');
|
|
5
5
|
const vercelWaitUntil = require('./vercelWaitUntil.js');
|
|
6
6
|
const worldwide = require('./worldwide.js');
|
|
@@ -8,7 +8,7 @@ const worldwide = require('./worldwide.js');
|
|
|
8
8
|
async function flushWithTimeout(timeout) {
|
|
9
9
|
try {
|
|
10
10
|
debugLogger.debug.log('Flushing events...');
|
|
11
|
-
await
|
|
11
|
+
await _exports.flush(timeout);
|
|
12
12
|
debugLogger.debug.log('Done flushing events');
|
|
13
13
|
} catch (e) {
|
|
14
14
|
debugLogger.debug.log('Error while flushing events:\n', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flushIfServerless.js","sources":["../../../src/utils/flushIfServerless.ts"],"sourcesContent":["import { flush } from '../exports';\nimport { debug } from './debug-logger';\nimport { vercelWaitUntil } from './vercelWaitUntil';\nimport { GLOBAL_OBJ } from './worldwide';\n\ntype MinimalCloudflareContext = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n waitUntil(promise: Promise<any>): void;\n};\n\nasync function flushWithTimeout(timeout: number): Promise<void> {\n try {\n debug.log('Flushing events...');\n await flush(timeout);\n debug.log('Done flushing events');\n } catch (e) {\n debug.log('Error while flushing events:\\n', e);\n }\n}\n\n/**\n * Flushes the event queue with a timeout in serverless environments to ensure that events are sent to Sentry before the\n * serverless function execution ends.\n *\n * The function is async, but in environments that support a `waitUntil` mechanism, it will run synchronously.\n *\n * This function is aware of the following serverless platforms:\n * - Cloudflare: If a Cloudflare context is provided, it will use `ctx.waitUntil()` to flush events (keeps the `this` context of `ctx`).\n * If a `cloudflareWaitUntil` function is provided, it will use that to flush events (looses the `this` context of `ctx`).\n * - Vercel: It detects the Vercel environment and uses Vercel's `waitUntil` function.\n * - Other Serverless (AWS Lambda, Google Cloud, etc.): It detects the environment via environment variables\n * and uses a regular `await flush()`.\n *\n * @internal This function is supposed for internal Sentry SDK usage only.\n * @hidden\n */\nexport async function flushIfServerless(\n params: // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | { timeout?: number; cloudflareWaitUntil?: (task: Promise<any>) => void }\n | { timeout?: number; cloudflareCtx?: MinimalCloudflareContext } = {},\n): Promise<void> {\n const { timeout = 2000 } = params;\n\n if ('cloudflareWaitUntil' in params && typeof params?.cloudflareWaitUntil === 'function') {\n params.cloudflareWaitUntil(flushWithTimeout(timeout));\n return;\n }\n\n if ('cloudflareCtx' in params && typeof params.cloudflareCtx?.waitUntil === 'function') {\n params.cloudflareCtx.waitUntil(flushWithTimeout(timeout));\n return;\n }\n\n // Note: vercelWaitUntil only does something in Vercel Edge runtime\n // In Node runtime, we use process.on('SIGTERM') instead\n // @ts-expect-error This is not typed\n if (GLOBAL_OBJ[Symbol.for('@vercel/request-context')]) {\n // Vercel has a waitUntil equivalent that works without execution context\n vercelWaitUntil(flushWithTimeout(timeout));\n return;\n }\n\n if (typeof process === 'undefined') {\n return;\n }\n\n const isServerless =\n !!process.env.FUNCTIONS_WORKER_RUNTIME || // Azure Functions\n !!process.env.LAMBDA_TASK_ROOT || // AWS Lambda\n !!process.env.K_SERVICE || // Google Cloud Run\n !!process.env.CF_PAGES || // Cloudflare Pages\n !!process.env.VERCEL ||\n !!process.env.NETLIFY;\n\n if (isServerless) {\n // Use regular flush for environments without a generic waitUntil mechanism\n await flushWithTimeout(timeout);\n }\n}\n"],"names":["debug","flush","GLOBAL_OBJ","vercelWaitUntil"],"mappings":";;;;;;;AAUA,eAAe,gBAAgB,CAAC,OAAO,EAAyB;AAChE,EAAE,IAAI;AACN,IAAIA,iBAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACnC,IAAI,MAAMC,
|
|
1
|
+
{"version":3,"file":"flushIfServerless.js","sources":["../../../src/utils/flushIfServerless.ts"],"sourcesContent":["import { flush } from '../exports';\nimport { debug } from './debug-logger';\nimport { vercelWaitUntil } from './vercelWaitUntil';\nimport { GLOBAL_OBJ } from './worldwide';\n\ntype MinimalCloudflareContext = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n waitUntil(promise: Promise<any>): void;\n};\n\nasync function flushWithTimeout(timeout: number): Promise<void> {\n try {\n debug.log('Flushing events...');\n await flush(timeout);\n debug.log('Done flushing events');\n } catch (e) {\n debug.log('Error while flushing events:\\n', e);\n }\n}\n\n/**\n * Flushes the event queue with a timeout in serverless environments to ensure that events are sent to Sentry before the\n * serverless function execution ends.\n *\n * The function is async, but in environments that support a `waitUntil` mechanism, it will run synchronously.\n *\n * This function is aware of the following serverless platforms:\n * - Cloudflare: If a Cloudflare context is provided, it will use `ctx.waitUntil()` to flush events (keeps the `this` context of `ctx`).\n * If a `cloudflareWaitUntil` function is provided, it will use that to flush events (looses the `this` context of `ctx`).\n * - Vercel: It detects the Vercel environment and uses Vercel's `waitUntil` function.\n * - Other Serverless (AWS Lambda, Google Cloud, etc.): It detects the environment via environment variables\n * and uses a regular `await flush()`.\n *\n * @internal This function is supposed for internal Sentry SDK usage only.\n * @hidden\n */\nexport async function flushIfServerless(\n params: // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | { timeout?: number; cloudflareWaitUntil?: (task: Promise<any>) => void }\n | { timeout?: number; cloudflareCtx?: MinimalCloudflareContext } = {},\n): Promise<void> {\n const { timeout = 2000 } = params;\n\n if ('cloudflareWaitUntil' in params && typeof params?.cloudflareWaitUntil === 'function') {\n params.cloudflareWaitUntil(flushWithTimeout(timeout));\n return;\n }\n\n if ('cloudflareCtx' in params && typeof params.cloudflareCtx?.waitUntil === 'function') {\n params.cloudflareCtx.waitUntil(flushWithTimeout(timeout));\n return;\n }\n\n // Note: vercelWaitUntil only does something in Vercel Edge runtime\n // In Node runtime, we use process.on('SIGTERM') instead\n // @ts-expect-error This is not typed\n if (GLOBAL_OBJ[Symbol.for('@vercel/request-context')]) {\n // Vercel has a waitUntil equivalent that works without execution context\n vercelWaitUntil(flushWithTimeout(timeout));\n return;\n }\n\n if (typeof process === 'undefined') {\n return;\n }\n\n const isServerless =\n !!process.env.FUNCTIONS_WORKER_RUNTIME || // Azure Functions\n !!process.env.LAMBDA_TASK_ROOT || // AWS Lambda\n !!process.env.K_SERVICE || // Google Cloud Run\n !!process.env.CF_PAGES || // Cloudflare Pages\n !!process.env.VERCEL ||\n !!process.env.NETLIFY;\n\n if (isServerless) {\n // Use regular flush for environments without a generic waitUntil mechanism\n await flushWithTimeout(timeout);\n }\n}\n"],"names":["debug","flush","GLOBAL_OBJ","vercelWaitUntil"],"mappings":";;;;;;;AAUA,eAAe,gBAAgB,CAAC,OAAO,EAAyB;AAChE,EAAE,IAAI;AACN,IAAIA,iBAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACnC,IAAI,MAAMC,cAAK,CAAC,OAAO,CAAC;AACxB,IAAID,iBAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACrC,EAAE,CAAA,CAAE,OAAO,CAAC,EAAE;AACd,IAAIA,iBAAK,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC,CAAC;AAClD,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB;AACvC,EAAE;;AAEE,GAAmE,EAAE;AACzE,EAAiB;AACjB,EAAE,MAAM,EAAE,OAAA,GAAU,IAAA,EAAK,GAAI,MAAM;;AAEnC,EAAE,IAAI,qBAAA,IAAyB,MAAA,IAAU,OAAO,MAAM,EAAE,mBAAA,KAAwB,UAAU,EAAE;AAC5F,IAAI,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,eAAA,IAAmB,UAAU,OAAO,MAAM,CAAC,aAAa,EAAE,SAAA,KAAc,UAAU,EAAE;AAC1F,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC7D,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAIE,oBAAU,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,EAAE;AACzD;AACA,IAAIC,+BAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC9C,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,OAAO,OAAA,KAAY,WAAW,EAAE;AACtC,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,YAAA;AACR,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAA;AAClB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAA;AAClB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAA;AAClB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAA;AAClB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAA;AAClB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;;AAEzB,EAAE,IAAI,YAAY,EAAE;AACpB;AACA,IAAI,MAAM,gBAAgB,CAAC,OAAO,CAAC;AACnC,EAAE;AACF;;;;"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
3
3
|
const index = require('../asyncContext/index.js');
|
|
4
4
|
const carrier = require('../carrier.js');
|
|
5
5
|
const currentScopes = require('../currentScopes.js');
|
|
6
|
-
const
|
|
6
|
+
const _exports = require('../exports.js');
|
|
7
7
|
const debugLogger = require('./debug-logger.js');
|
|
8
8
|
const spanUtils = require('./spanUtils.js');
|
|
9
9
|
const dynamicSamplingContext = require('../tracing/dynamicSamplingContext.js');
|
|
@@ -28,7 +28,7 @@ function getTraceData(
|
|
|
28
28
|
options = {},
|
|
29
29
|
) {
|
|
30
30
|
const client = options.client || currentScopes.getClient();
|
|
31
|
-
if (!
|
|
31
|
+
if (!_exports.isEnabled() || !client) {
|
|
32
32
|
return {};
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceData.js","sources":["../../../src/utils/traceData.ts"],"sourcesContent":["import { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport type { Client } from '../client';\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { isEnabled } from '../exports';\nimport type { Scope } from '../scope';\nimport { getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan } from '../tracing';\nimport type { Span } from '../types-hoist/span';\nimport type { SerializedTraceData } from '../types-hoist/tracing';\nimport { dynamicSamplingContextToSentryBaggageHeader } from './baggage';\nimport { debug } from './debug-logger';\nimport { getActiveSpan, spanToTraceHeader, spanToTraceparentHeader } from './spanUtils';\nimport { generateSentryTraceHeader, generateTraceparentHeader, TRACEPARENT_REGEXP } from './tracing';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values. These values can be used to propagate\n * a trace via our tracing Http headers or Html `<meta>` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * If (@param options.propagateTraceparent) is `true`, the function will also generate a `traceparent` value,\n * following the W3C traceparent header format.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nexport function getTraceData(\n options: { span?: Span; scope?: Scope; client?: Client; propagateTraceparent?: boolean } = {},\n): SerializedTraceData {\n const client = options.client || getClient();\n if (!isEnabled() || !client) {\n return {};\n }\n\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getTraceData) {\n return acs.getTraceData(options);\n }\n\n const scope = options.scope || getCurrentScope();\n const span = options.span || getActiveSpan();\n const sentryTrace = span ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n\n const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n if (!isValidSentryTraceHeader) {\n debug.warn('Invalid sentry-trace data. Cannot generate trace data');\n return {};\n }\n\n const traceData: SerializedTraceData = {\n 'sentry-trace': sentryTrace,\n baggage,\n };\n\n if (options.propagateTraceparent) {\n traceData.traceparent = span ? spanToTraceparentHeader(span) : scopeToTraceparentHeader(scope);\n }\n\n return traceData;\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope: Scope): string {\n const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n return generateSentryTraceHeader(traceId, propagationSpanId, sampled);\n}\n\nfunction scopeToTraceparentHeader(scope: Scope): string {\n const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n return generateTraceparentHeader(traceId, propagationSpanId, sampled);\n}\n"],"names":["getClient","isEnabled","carrier","getMainCarrier","getAsyncContextStrategy","getCurrentScope","getActiveSpan","spanToTraceHeader","getDynamicSamplingContextFromSpan","getDynamicSamplingContextFromScope","baggage","dynamicSamplingContextToSentryBaggageHeader","TRACEPARENT_REGEXP","debug","spanToTraceparentHeader","generateSentryTraceHeader","generateTraceparentHeader"],"mappings":";;;;;;;;;;;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY;AAC5B,EAAE,OAAO,GAAoF,EAAE;AAC/F,EAAuB;AACvB,EAAE,MAAM,SAAS,OAAO,CAAC,MAAA,IAAUA,uBAAS,EAAE;AAC9C,EAAE,IAAI,CAACC,
|
|
1
|
+
{"version":3,"file":"traceData.js","sources":["../../../src/utils/traceData.ts"],"sourcesContent":["import { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport type { Client } from '../client';\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { isEnabled } from '../exports';\nimport type { Scope } from '../scope';\nimport { getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan } from '../tracing';\nimport type { Span } from '../types-hoist/span';\nimport type { SerializedTraceData } from '../types-hoist/tracing';\nimport { dynamicSamplingContextToSentryBaggageHeader } from './baggage';\nimport { debug } from './debug-logger';\nimport { getActiveSpan, spanToTraceHeader, spanToTraceparentHeader } from './spanUtils';\nimport { generateSentryTraceHeader, generateTraceparentHeader, TRACEPARENT_REGEXP } from './tracing';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values. These values can be used to propagate\n * a trace via our tracing Http headers or Html `<meta>` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * If (@param options.propagateTraceparent) is `true`, the function will also generate a `traceparent` value,\n * following the W3C traceparent header format.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nexport function getTraceData(\n options: { span?: Span; scope?: Scope; client?: Client; propagateTraceparent?: boolean } = {},\n): SerializedTraceData {\n const client = options.client || getClient();\n if (!isEnabled() || !client) {\n return {};\n }\n\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getTraceData) {\n return acs.getTraceData(options);\n }\n\n const scope = options.scope || getCurrentScope();\n const span = options.span || getActiveSpan();\n const sentryTrace = span ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n\n const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n if (!isValidSentryTraceHeader) {\n debug.warn('Invalid sentry-trace data. Cannot generate trace data');\n return {};\n }\n\n const traceData: SerializedTraceData = {\n 'sentry-trace': sentryTrace,\n baggage,\n };\n\n if (options.propagateTraceparent) {\n traceData.traceparent = span ? spanToTraceparentHeader(span) : scopeToTraceparentHeader(scope);\n }\n\n return traceData;\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope: Scope): string {\n const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n return generateSentryTraceHeader(traceId, propagationSpanId, sampled);\n}\n\nfunction scopeToTraceparentHeader(scope: Scope): string {\n const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n return generateTraceparentHeader(traceId, propagationSpanId, sampled);\n}\n"],"names":["getClient","isEnabled","carrier","getMainCarrier","getAsyncContextStrategy","getCurrentScope","getActiveSpan","spanToTraceHeader","getDynamicSamplingContextFromSpan","getDynamicSamplingContextFromScope","baggage","dynamicSamplingContextToSentryBaggageHeader","TRACEPARENT_REGEXP","debug","spanToTraceparentHeader","generateSentryTraceHeader","generateTraceparentHeader"],"mappings":";;;;;;;;;;;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY;AAC5B,EAAE,OAAO,GAAoF,EAAE;AAC/F,EAAuB;AACvB,EAAE,MAAM,SAAS,OAAO,CAAC,MAAA,IAAUA,uBAAS,EAAE;AAC9C,EAAE,IAAI,CAACC,kBAAS,EAAC,IAAK,CAAC,MAAM,EAAE;AAC/B,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAMC,SAAA,GAAUC,sBAAc,EAAE;AAClC,EAAE,MAAM,GAAA,GAAMC,6BAAuB,CAACF,SAAO,CAAC;AAC9C,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE;AACxB,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;AACpC,EAAE;;AAEF,EAAE,MAAM,QAAQ,OAAO,CAAC,KAAA,IAASG,6BAAe,EAAE;AAClD,EAAE,MAAM,OAAO,OAAO,CAAC,IAAA,IAAQC,uBAAa,EAAE;AAC9C,EAAE,MAAM,WAAA,GAAc,IAAA,GAAOC,2BAAiB,CAAC,IAAI,CAAA,GAAI,kBAAkB,CAAC,KAAK,CAAC;AAChF,EAAE,MAAM,GAAA,GAAM,IAAA,GAAOC,wDAAiC,CAAC,IAAI,CAAA,GAAIC,yDAAkC,CAAC,MAAM,EAAE,KAAK,CAAC;AAChH,EAAE,MAAMC,SAAA,GAAUC,mDAA2C,CAAC,GAAG,CAAC;;AAElE,EAAE,MAAM,2BAA2BC,0BAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvE,EAAE,IAAI,CAAC,wBAAwB,EAAE;AACjC,IAAIC,iBAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC;AACvE,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAM,SAAS,GAAwB;AACzC,IAAI,cAAc,EAAE,WAAW;AAC/B,aAAIH,SAAO;AACX,GAAG;;AAEH,EAAE,IAAI,OAAO,CAAC,oBAAoB,EAAE;AACpC,IAAI,SAAS,CAAC,WAAA,GAAc,OAAOI,iCAAuB,CAAC,IAAI,CAAA,GAAI,wBAAwB,CAAC,KAAK,CAAC;AAClG,EAAE;;AAEF,EAAE,OAAO,SAAS;AAClB;;AAEA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAiB;AAClD,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAA,EAAkB,GAAI,KAAK,CAAC,qBAAqB,EAAE;AAC/E,EAAE,OAAOC,iCAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC;AACvE;;AAEA,SAAS,wBAAwB,CAAC,KAAK,EAAiB;AACxD,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAA,EAAkB,GAAI,KAAK,CAAC,qBAAqB,EAAE;AAC/E,EAAE,OAAOC,iCAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC;AACvE;;;;"}
|
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2
2
|
|
|
3
3
|
// This is a magic string replaced by rollup
|
|
4
4
|
|
|
5
|
-
const SDK_VERSION = "10.
|
|
5
|
+
const SDK_VERSION = "10.38.0" ;
|
|
6
6
|
|
|
7
7
|
exports.SDK_VERSION = SDK_VERSION;
|
|
8
8
|
//# sourceMappingURL=version.js.map
|
package/build/esm/exports.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getCurrentScope, getClient, withIsolationScope
|
|
1
|
+
import { getIsolationScope, getCurrentScope, getClient, withIsolationScope } from './currentScopes.js';
|
|
2
2
|
import { DEBUG_BUILD } from './debug-build.js';
|
|
3
|
-
import { makeSession, updateSession
|
|
3
|
+
import { closeSession, makeSession, updateSession } from './session.js';
|
|
4
4
|
import { startNewTrace } from './tracing/trace.js';
|
|
5
5
|
import { debug } from './utils/debug-logger.js';
|
|
6
6
|
import { isThenable } from './utils/is.js';
|
|
@@ -101,6 +101,15 @@ function setUser(user) {
|
|
|
101
101
|
getIsolationScope().setUser(user);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Sets the conversation ID for the current isolation scope.
|
|
106
|
+
*
|
|
107
|
+
* @param conversationId The conversation ID to set. Pass `null` or `undefined` to unset the conversation ID.
|
|
108
|
+
*/
|
|
109
|
+
function setConversationId(conversationId) {
|
|
110
|
+
getIsolationScope().setConversationId(conversationId);
|
|
111
|
+
}
|
|
112
|
+
|
|
104
113
|
/**
|
|
105
114
|
* The last error event id of the isolation scope.
|
|
106
115
|
*
|
|
@@ -322,5 +331,5 @@ function captureSession(end = false) {
|
|
|
322
331
|
_sendSessionUpdate();
|
|
323
332
|
}
|
|
324
333
|
|
|
325
|
-
export { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };
|
|
334
|
+
export { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setConversationId, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };
|
|
326
335
|
//# sourceMappingURL=exports.js.map
|
package/build/esm/exports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sources":["../../src/exports.ts"],"sourcesContent":["import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { CaptureContext } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { startNewTrace } from './tracing/trace';\nimport type { CheckIn, FinishedCheckIn, MonitorConfig } from './types-hoist/checkin';\nimport type { Event, EventHint } from './types-hoist/event';\nimport type { EventProcessor } from './types-hoist/eventprocessor';\nimport type { Extra, Extras } from './types-hoist/extra';\nimport type { Primitive } from './types-hoist/misc';\nimport type { Session, SessionContext } from './types-hoist/session';\nimport type { SeverityLevel } from './types-hoist/severity';\nimport type { User } from './types-hoist/user';\nimport { debug } from './utils/debug-logger';\nimport { isThenable } from './utils/is';\nimport { uuid4 } from './utils/misc';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { timestampInSeconds } from './utils/time';\nimport { GLOBAL_OBJ } from './utils/worldwide';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(exception: unknown, hint?: ExclusiveEventHintOrCaptureContext): string {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | SeverityLevel): string {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const hint = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, hint);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nexport function setContext(name: string, context: { [key: string]: unknown } | null): void {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nexport function lastEventId(): string | undefined {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && debug.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && debug.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param callback Callback to be monitored\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n monitorSlug: CheckIn['monitorSlug'],\n callback: () => T,\n upsertMonitorConfig?: MonitorConfig,\n): T {\n function runCallback(): T {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status: FinishedCheckIn['status']): void {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n // Default behavior without isolateTrace\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n return maybePromiseResult.then(\n r => {\n finishCheckIn('ok');\n return r;\n },\n e => {\n finishCheckIn('error');\n throw e;\n },\n ) as T;\n }\n finishCheckIn('ok');\n\n return maybePromiseResult;\n }\n\n return withIsolationScope(() => (upsertMonitorConfig?.isolateTrace ? startNewTrace(runCallback) : runCallback()));\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && debug.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && debug.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nexport function isEnabled(): boolean {\n const client = getClient();\n return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession?.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n const isolationScope = getIsolationScope();\n const client = getClient();\n const session = isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exports.js","sources":["../../src/exports.ts"],"sourcesContent":["import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { CaptureContext } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { startNewTrace } from './tracing/trace';\nimport type { CheckIn, FinishedCheckIn, MonitorConfig } from './types-hoist/checkin';\nimport type { Event, EventHint } from './types-hoist/event';\nimport type { EventProcessor } from './types-hoist/eventprocessor';\nimport type { Extra, Extras } from './types-hoist/extra';\nimport type { Primitive } from './types-hoist/misc';\nimport type { Session, SessionContext } from './types-hoist/session';\nimport type { SeverityLevel } from './types-hoist/severity';\nimport type { User } from './types-hoist/user';\nimport { debug } from './utils/debug-logger';\nimport { isThenable } from './utils/is';\nimport { uuid4 } from './utils/misc';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { timestampInSeconds } from './utils/time';\nimport { GLOBAL_OBJ } from './utils/worldwide';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(exception: unknown, hint?: ExclusiveEventHintOrCaptureContext): string {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | SeverityLevel): string {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const hint = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, hint);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nexport function setContext(name: string, context: { [key: string]: unknown } | null): void {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n getIsolationScope().setUser(user);\n}\n\n/**\n * Sets the conversation ID for the current isolation scope.\n *\n * @param conversationId The conversation ID to set. Pass `null` or `undefined` to unset the conversation ID.\n */\nexport function setConversationId(conversationId: string | null | undefined): void {\n getIsolationScope().setConversationId(conversationId);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nexport function lastEventId(): string | undefined {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && debug.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && debug.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param callback Callback to be monitored\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n monitorSlug: CheckIn['monitorSlug'],\n callback: () => T,\n upsertMonitorConfig?: MonitorConfig,\n): T {\n function runCallback(): T {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status: FinishedCheckIn['status']): void {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n // Default behavior without isolateTrace\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n return maybePromiseResult.then(\n r => {\n finishCheckIn('ok');\n return r;\n },\n e => {\n finishCheckIn('error');\n throw e;\n },\n ) as T;\n }\n finishCheckIn('ok');\n\n return maybePromiseResult;\n }\n\n return withIsolationScope(() => (upsertMonitorConfig?.isolateTrace ? startNewTrace(runCallback) : runCallback()));\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && debug.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && debug.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nexport function isEnabled(): boolean {\n const client = getClient();\n return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession?.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n const isolationScope = getIsolationScope();\n const client = getClient();\n const session = isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n"],"names":[],"mappings":"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"}
|
package/build/esm/feedback.js
CHANGED
package/build/esm/index.js
CHANGED
|
@@ -9,9 +9,9 @@ export { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope
|
|
|
9
9
|
export { setMeasurement, timedEventsToMeasurements } from './tracing/measurement.js';
|
|
10
10
|
export { sampleSpan } from './tracing/sampling.js';
|
|
11
11
|
export { logSpanEnd, logSpanStart } from './tracing/logSpans.js';
|
|
12
|
-
export { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE } from './semanticAttributes.js';
|
|
12
|
+
export { GEN_AI_CONVERSATION_ID_ATTRIBUTE, SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE } from './semanticAttributes.js';
|
|
13
13
|
export { createEventEnvelope, createSessionEnvelope, createSpanEnvelope } from './envelope.js';
|
|
14
|
-
export { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor } from './exports.js';
|
|
14
|
+
export { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setConversationId, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor } from './exports.js';
|
|
15
15
|
export { getClient, getCurrentScope, getGlobalScope, getIsolationScope, getTraceContextFromScope, withIsolationScope, withScope } from './currentScopes.js';
|
|
16
16
|
export { getDefaultCurrentScope, getDefaultIsolationScope } from './defaultScopes.js';
|
|
17
17
|
export { setAsyncContextStrategy } from './asyncContext/index.js';
|
|
@@ -61,6 +61,7 @@ export { thirdPartyErrorFilterIntegration } from './integrations/third-party-err
|
|
|
61
61
|
export { consoleIntegration } from './integrations/console.js';
|
|
62
62
|
export { featureFlagsIntegration } from './integrations/featureFlags/featureFlagsIntegration.js';
|
|
63
63
|
export { growthbookIntegration } from './integrations/featureFlags/growthbook.js';
|
|
64
|
+
export { conversationIdIntegration } from './integrations/conversationId.js';
|
|
64
65
|
export { profiler } from './profiling.js';
|
|
65
66
|
export { instrumentFetchRequest } from './fetch.js';
|
|
66
67
|
export { trpcMiddleware } from './trpc.js';
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { getCurrentScope, getIsolationScope } from '../currentScopes.js';
|
|
2
|
+
import { defineIntegration } from '../integration.js';
|
|
3
|
+
import { GEN_AI_CONVERSATION_ID_ATTRIBUTE } from '../semanticAttributes.js';
|
|
4
|
+
|
|
5
|
+
const INTEGRATION_NAME = 'ConversationId';
|
|
6
|
+
|
|
7
|
+
const _conversationIdIntegration = (() => {
|
|
8
|
+
return {
|
|
9
|
+
name: INTEGRATION_NAME,
|
|
10
|
+
setup(client) {
|
|
11
|
+
client.on('spanStart', (span) => {
|
|
12
|
+
const scopeData = getCurrentScope().getScopeData();
|
|
13
|
+
const isolationScopeData = getIsolationScope().getScopeData();
|
|
14
|
+
|
|
15
|
+
const conversationId = scopeData.conversationId || isolationScopeData.conversationId;
|
|
16
|
+
|
|
17
|
+
if (conversationId) {
|
|
18
|
+
span.setAttribute(GEN_AI_CONVERSATION_ID_ATTRIBUTE, conversationId);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}) ;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Automatically applies conversation ID from scope to spans.
|
|
27
|
+
*
|
|
28
|
+
* This integration reads the conversation ID from the current or isolation scope
|
|
29
|
+
* and applies it to spans when they start. This ensures the conversation ID is
|
|
30
|
+
* available for all AI-related operations.
|
|
31
|
+
*/
|
|
32
|
+
const conversationIdIntegration = defineIntegration(_conversationIdIntegration);
|
|
33
|
+
|
|
34
|
+
export { conversationIdIntegration };
|
|
35
|
+
//# sourceMappingURL=conversationId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversationId.js","sources":["../../../src/integrations/conversationId.ts"],"sourcesContent":["import type { Client } from '../client';\nimport { getCurrentScope, getIsolationScope } from '../currentScopes';\nimport { defineIntegration } from '../integration';\nimport { GEN_AI_CONVERSATION_ID_ATTRIBUTE } from '../semanticAttributes';\nimport type { IntegrationFn } from '../types-hoist/integration';\nimport type { Span } from '../types-hoist/span';\n\nconst INTEGRATION_NAME = 'ConversationId';\n\nconst _conversationIdIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setup(client: Client) {\n client.on('spanStart', (span: Span) => {\n const scopeData = getCurrentScope().getScopeData();\n const isolationScopeData = getIsolationScope().getScopeData();\n\n const conversationId = scopeData.conversationId || isolationScopeData.conversationId;\n\n if (conversationId) {\n span.setAttribute(GEN_AI_CONVERSATION_ID_ATTRIBUTE, conversationId);\n }\n });\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Automatically applies conversation ID from scope to spans.\n *\n * This integration reads the conversation ID from the current or isolation scope\n * and applies it to spans when they start. This ensures the conversation ID is\n * available for all AI-related operations.\n */\nexport const conversationIdIntegration = defineIntegration(_conversationIdIntegration);\n"],"names":[],"mappings":";;;;AAOA,MAAM,gBAAA,GAAmB,gBAAgB;;AAEzC,MAAM,0BAAA,IAA8B,MAAM;AAC1C,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,gBAAgB;AAC1B,IAAI,KAAK,CAAC,MAAM,EAAU;AAC1B,MAAM,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,KAAW;AAC7C,QAAQ,MAAM,YAAY,eAAe,EAAE,CAAC,YAAY,EAAE;AAC1D,QAAQ,MAAM,qBAAqB,iBAAiB,EAAE,CAAC,YAAY,EAAE;;AAErE,QAAQ,MAAM,iBAAiB,SAAS,CAAC,cAAA,IAAkB,kBAAkB,CAAC,cAAc;;AAE5F,QAAQ,IAAI,cAAc,EAAE;AAC5B,UAAU,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,cAAc,CAAC;AAC7E,QAAQ;AACR,MAAM,CAAC,CAAC;AACR,IAAI,CAAC;AACL,GAAG;AACH,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;MACa,yBAAA,GAA4B,iBAAiB,CAAC,0BAA0B;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineIntegration } from '../integration.js';
|
|
2
|
-
import {
|
|
2
|
+
import { stripMetadataFromStackFrames, addMetadataToStackFrames } from '../metadata.js';
|
|
3
3
|
import { forEachEnvelopeItem } from '../utils/envelope.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineIntegration } from '../integration.js';
|
|
2
|
-
import {
|
|
2
|
+
import { stripMetadataFromStackFrames, addMetadataToStackFrames } from '../metadata.js';
|
|
3
3
|
import { forEachEnvelopeItem } from '../utils/envelope.js';
|
|
4
4
|
import { getFramesFromEvent } from '../utils/stacktrace.js';
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { serializeAttributes } from '../attributes.js';
|
|
2
2
|
import { getGlobalSingleton } from '../carrier.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getClient, getIsolationScope, getCurrentScope } from '../currentScopes.js';
|
|
4
4
|
import { DEBUG_BUILD } from '../debug-build.js';
|
|
5
5
|
import { debug, consoleSandbox } from '../utils/debug-logger.js';
|
|
6
6
|
import { isParameterizedString } from '../utils/is.js';
|
package/build/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"10.
|
|
1
|
+
{"type":"module","version":"10.38.0","sideEffects":false}
|
package/build/esm/scope.js
CHANGED
|
@@ -69,6 +69,8 @@ class Scope {
|
|
|
69
69
|
|
|
70
70
|
/** Contains the last event id of a captured event. */
|
|
71
71
|
|
|
72
|
+
/** Conversation ID */
|
|
73
|
+
|
|
72
74
|
// NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.
|
|
73
75
|
|
|
74
76
|
constructor() {
|
|
@@ -118,6 +120,7 @@ class Scope {
|
|
|
118
120
|
newScope._propagationContext = { ...this._propagationContext };
|
|
119
121
|
newScope._client = this._client;
|
|
120
122
|
newScope._lastEventId = this._lastEventId;
|
|
123
|
+
newScope._conversationId = this._conversationId;
|
|
121
124
|
|
|
122
125
|
_setSpanForScope(newScope, _getSpanForScope(this));
|
|
123
126
|
|
|
@@ -200,6 +203,16 @@ class Scope {
|
|
|
200
203
|
return this._user;
|
|
201
204
|
}
|
|
202
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Set the conversation ID for this scope.
|
|
208
|
+
* Set to `null` to unset the conversation ID.
|
|
209
|
+
*/
|
|
210
|
+
setConversationId(conversationId) {
|
|
211
|
+
this._conversationId = conversationId || undefined;
|
|
212
|
+
this._notifyScopeListeners();
|
|
213
|
+
return this;
|
|
214
|
+
}
|
|
215
|
+
|
|
203
216
|
/**
|
|
204
217
|
* Set an object that will be merged into existing tags on the scope,
|
|
205
218
|
* and will be sent as tags data with the event.
|
|
@@ -423,6 +436,7 @@ class Scope {
|
|
|
423
436
|
level,
|
|
424
437
|
fingerprint = [],
|
|
425
438
|
propagationContext,
|
|
439
|
+
conversationId,
|
|
426
440
|
} = scopeInstance || {};
|
|
427
441
|
|
|
428
442
|
this._tags = { ...this._tags, ...tags };
|
|
@@ -446,6 +460,10 @@ class Scope {
|
|
|
446
460
|
this._propagationContext = propagationContext;
|
|
447
461
|
}
|
|
448
462
|
|
|
463
|
+
if (conversationId) {
|
|
464
|
+
this._conversationId = conversationId;
|
|
465
|
+
}
|
|
466
|
+
|
|
449
467
|
return this;
|
|
450
468
|
}
|
|
451
469
|
|
|
@@ -465,6 +483,7 @@ class Scope {
|
|
|
465
483
|
this._transactionName = undefined;
|
|
466
484
|
this._fingerprint = undefined;
|
|
467
485
|
this._session = undefined;
|
|
486
|
+
this._conversationId = undefined;
|
|
468
487
|
_setSpanForScope(this, undefined);
|
|
469
488
|
this._attachments = [];
|
|
470
489
|
this.setPropagationContext({
|
|
@@ -557,6 +576,7 @@ class Scope {
|
|
|
557
576
|
sdkProcessingMetadata: this._sdkProcessingMetadata,
|
|
558
577
|
transactionName: this._transactionName,
|
|
559
578
|
span: _getSpanForScope(this),
|
|
579
|
+
conversationId: this._conversationId,
|
|
560
580
|
};
|
|
561
581
|
}
|
|
562
582
|
|