langwatch 1.18.0 → 1.20.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.
Files changed (91) hide show
  1. package/README.md +25 -11
  2. package/dist/agent/index.d.mts +122 -79
  3. package/dist/agent/index.d.ts +122 -79
  4. package/dist/agent/index.js +523 -300
  5. package/dist/agent/index.js.map +1 -1
  6. package/dist/agent/index.mjs +522 -301
  7. package/dist/agent/index.mjs.map +1 -1
  8. package/dist/chunk-5VYEG3RS.js +117 -0
  9. package/dist/chunk-5VYEG3RS.js.map +1 -0
  10. package/dist/{chunk-O4J3ZPZY.js → chunk-5ZNEXSAB.js} +7912 -2564
  11. package/dist/chunk-5ZNEXSAB.js.map +1 -0
  12. package/dist/chunk-BDQ2RG7R.mjs +852 -0
  13. package/dist/chunk-BDQ2RG7R.mjs.map +1 -0
  14. package/dist/chunk-BL3GHEKF.js +59 -0
  15. package/dist/chunk-BL3GHEKF.js.map +1 -0
  16. package/dist/chunk-C7IWJ2GJ.mjs +59 -0
  17. package/dist/chunk-C7IWJ2GJ.mjs.map +1 -0
  18. package/dist/chunk-EQ5CFQGJ.js +852 -0
  19. package/dist/chunk-EQ5CFQGJ.js.map +1 -0
  20. package/dist/{chunk-NPEK4RSD.mjs → chunk-ET5KYCG2.mjs} +7757 -2409
  21. package/dist/chunk-ET5KYCG2.mjs.map +1 -0
  22. package/dist/{chunk-MVQJMRM6.mjs → chunk-FKYYEGJ7.mjs} +120 -112
  23. package/dist/chunk-FKYYEGJ7.mjs.map +1 -0
  24. package/dist/{chunk-JJASOJOK.js → chunk-HCK7TCSK.js} +138 -130
  25. package/dist/chunk-HCK7TCSK.js.map +1 -0
  26. package/dist/{chunk-LCG5Y2EG.js → chunk-N76BG37W.js} +15 -101
  27. package/dist/chunk-N76BG37W.js.map +1 -0
  28. package/dist/chunk-SERULD4Z.mjs +117 -0
  29. package/dist/chunk-SERULD4Z.mjs.map +1 -0
  30. package/dist/{chunk-73QOHSHU.js → chunk-WDUUAIG3.js} +2 -2
  31. package/dist/chunk-WDUUAIG3.js.map +1 -0
  32. package/dist/{chunk-WMDQVWA6.mjs → chunk-WSGVZ3J2.mjs} +22 -108
  33. package/dist/chunk-WSGVZ3J2.mjs.map +1 -0
  34. package/dist/{chunk-57L2K66L.mjs → chunk-XQ4CP2JK.mjs} +2 -2
  35. package/dist/chunk-XQ4CP2JK.mjs.map +1 -0
  36. package/dist/cli/bundle.js +766 -479
  37. package/dist/implementation-B4Z2ksnA.d.mts +261 -0
  38. package/dist/implementation-BFUgzz5C.d.ts +261 -0
  39. package/dist/index.d.mts +398 -1123
  40. package/dist/index.d.ts +398 -1123
  41. package/dist/index.js +7613 -3566
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +7419 -3372
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/observability-sdk/index.d.mts +16 -76
  46. package/dist/observability-sdk/index.d.ts +16 -76
  47. package/dist/observability-sdk/index.js +8 -5
  48. package/dist/observability-sdk/index.js.map +1 -1
  49. package/dist/observability-sdk/index.mjs +8 -5
  50. package/dist/observability-sdk/instrumentation/langchain/index.d.mts +3 -5
  51. package/dist/observability-sdk/instrumentation/langchain/index.d.ts +3 -5
  52. package/dist/observability-sdk/instrumentation/langchain/index.js +160 -112
  53. package/dist/observability-sdk/instrumentation/langchain/index.js.map +1 -1
  54. package/dist/observability-sdk/instrumentation/langchain/index.mjs +148 -100
  55. package/dist/observability-sdk/instrumentation/langchain/index.mjs.map +1 -1
  56. package/dist/observability-sdk/semconv/index.d.mts +37 -0
  57. package/dist/observability-sdk/semconv/index.d.ts +37 -0
  58. package/dist/observability-sdk/semconv/index.js +121 -0
  59. package/dist/observability-sdk/semconv/index.js.map +1 -0
  60. package/dist/observability-sdk/semconv/index.mjs +121 -0
  61. package/dist/observability-sdk/semconv/index.mjs.map +1 -0
  62. package/dist/observability-sdk/setup/node/index.d.mts +73 -313
  63. package/dist/observability-sdk/setup/node/index.d.ts +73 -313
  64. package/dist/observability-sdk/setup/node/index.js +6 -4
  65. package/dist/observability-sdk/setup/node/index.js.map +1 -1
  66. package/dist/observability-sdk/setup/node/index.mjs +5 -3
  67. package/dist/types-B696jWYQ.d.mts +16010 -0
  68. package/dist/types-Bo6OvFct.d.ts +16010 -0
  69. package/dist/{types-VOZv9LYO.d.mts → types-CoS5PmeU.d.mts} +22 -59
  70. package/dist/{types-VOZv9LYO.d.ts → types-CoS5PmeU.d.ts} +22 -59
  71. package/dist/{types-DLfhJb38.d.mts → types-RkiBQZ9j.d.mts} +1 -6
  72. package/dist/{types-DLfhJb38.d.ts → types-RkiBQZ9j.d.ts} +1 -6
  73. package/dist/values-1yj9l0Sa.d.mts +112 -0
  74. package/dist/values-1yj9l0Sa.d.ts +112 -0
  75. package/package.json +95 -64
  76. package/dist/chunk-57L2K66L.mjs.map +0 -1
  77. package/dist/chunk-73QOHSHU.js.map +0 -1
  78. package/dist/chunk-HY2N6TO5.mjs +0 -566
  79. package/dist/chunk-HY2N6TO5.mjs.map +0 -1
  80. package/dist/chunk-JJASOJOK.js.map +0 -1
  81. package/dist/chunk-LCG5Y2EG.js.map +0 -1
  82. package/dist/chunk-MVQJMRM6.mjs.map +0 -1
  83. package/dist/chunk-NPEK4RSD.mjs.map +0 -1
  84. package/dist/chunk-O4J3ZPZY.js.map +0 -1
  85. package/dist/chunk-UEJSGC3P.js +0 -566
  86. package/dist/chunk-UEJSGC3P.js.map +0 -1
  87. package/dist/chunk-WMDQVWA6.mjs.map +0 -1
  88. package/dist/implementation-BvX-7vox.d.ts +0 -716
  89. package/dist/implementation-CQ__V0Vc.d.mts +0 -716
  90. package/dist/types-CNEUr6Hm.d.ts +0 -36682
  91. package/dist/types-DfPAHmAh.d.mts +0 -36682
@@ -1,14 +1,57 @@
1
1
  import {
2
- __spreadProps,
3
- __spreadValues,
2
+ LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,
3
+ LOG_EVNT_GEN_AI_CHOICE,
4
+ LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,
5
+ LOG_EVNT_GEN_AI_TOOL_MESSAGE,
6
+ LOG_EVNT_GEN_AI_USER_MESSAGE
7
+ } from "./chunk-C7IWJ2GJ.mjs";
8
+ import {
4
9
  shouldCaptureOutput
5
- } from "./chunk-WMDQVWA6.mjs";
10
+ } from "./chunk-SERULD4Z.mjs";
11
+ import {
12
+ __spreadProps,
13
+ __spreadValues
14
+ } from "./chunk-WSGVZ3J2.mjs";
6
15
 
7
16
  // src/observability-sdk/exporters/langwatch-trace-exporter.ts
8
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
17
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
18
+
19
+ // src/internal/api/auth.ts
20
+ var LEGACY_PAT_PREFIX = "pat-lw-";
21
+ var API_KEY_PREFIX = "sk-lw-";
22
+ var isUserScopedApiKey = (token) => {
23
+ if (token.startsWith(LEGACY_PAT_PREFIX)) return true;
24
+ if (token.startsWith(API_KEY_PREFIX)) {
25
+ const body = token.slice(API_KEY_PREFIX.length);
26
+ return body.includes("_");
27
+ }
28
+ return false;
29
+ };
30
+ var buildAuthHeaders = ({
31
+ apiKey,
32
+ projectId
33
+ }) => {
34
+ var _a;
35
+ if (!apiKey) return {};
36
+ const resolvedProjectId = (_a = projectId != null ? projectId : process.env.LANGWATCH_PROJECT_ID) != null ? _a : void 0;
37
+ if (isUserScopedApiKey(apiKey)) {
38
+ if (resolvedProjectId) {
39
+ const encoded = Buffer.from(`${resolvedProjectId}:${apiKey}`, "utf-8").toString("base64");
40
+ return { authorization: `Basic ${encoded}` };
41
+ }
42
+ return {
43
+ authorization: `Bearer ${apiKey}`,
44
+ "x-auth-token": apiKey
45
+ };
46
+ }
47
+ return {
48
+ authorization: `Bearer ${apiKey}`,
49
+ "x-auth-token": apiKey
50
+ };
51
+ };
9
52
 
10
53
  // package.json
11
- var version = "1.18.0";
54
+ var version = "1.20.0";
12
55
 
13
56
  // src/internal/runtime.ts
14
57
  var _runtime;
@@ -17,26 +60,21 @@ var getRuntime = () => {
17
60
  return _runtime;
18
61
  };
19
62
  function detectRuntime(globals) {
20
- var _a;
21
63
  let g = globalThis;
22
64
  if (globals) {
23
65
  if (process.env.NODE_ENV === "test") {
24
66
  g = globals;
25
67
  } else {
26
- console.warn("[LangWatch Observability] overriding detectRuntime is only supported when running in NODE_ENV=test");
68
+ console.warn(
69
+ "[LangWatch Observability] overriding detectRuntime is only supported when running in NODE_ENV=test"
70
+ );
27
71
  }
28
72
  }
29
73
  try {
30
- if ("Deno" in g && typeof g.Deno === "object" && g.Deno && "version" in g.Deno && typeof g.Deno.version === "object") {
31
- return "deno";
32
- }
33
- if ("Bun" in g && typeof g.Bun === "object" && g.Bun && "version" in g.Bun && typeof g.Bun.version === "string") {
34
- return "bun";
35
- }
36
- if ("process" in g && typeof g.process === "object" && g.process && typeof g.process.versions === "object" && typeof g.process.versions.node === "string") {
37
- return "node";
38
- }
39
- if (typeof ((_a = g.window) == null ? void 0 : _a.document) !== "undefined" && g === g.window) {
74
+ if (isDenoRuntime(g)) return "deno";
75
+ if (isBunRuntime(g)) return "bun";
76
+ if (isNodeRuntime(g)) return "node";
77
+ if (isWebRuntime(g)) {
40
78
  return "web";
41
79
  }
42
80
  return "unknown";
@@ -45,6 +83,33 @@ function detectRuntime(globals) {
45
83
  return "unknown";
46
84
  }
47
85
  }
86
+ function isWebRuntime(g) {
87
+ if (!("window" in g) || typeof g.window !== "object" || !g.window) {
88
+ return false;
89
+ }
90
+ const win = g.window;
91
+ if (g !== win) return false;
92
+ return "document" in win && typeof win.document !== "undefined";
93
+ }
94
+ function isDenoRuntime(g) {
95
+ if (!("Deno" in g) || typeof g.Deno !== "object" || !g.Deno) {
96
+ return false;
97
+ }
98
+ return "version" in g.Deno && typeof g.Deno.version === "object";
99
+ }
100
+ function isBunRuntime(g) {
101
+ if (!("Bun" in g) || typeof g.Bun !== "object" || !g.Bun) {
102
+ return false;
103
+ }
104
+ return "version" in g.Bun && typeof g.Bun.version === "string";
105
+ }
106
+ function isNodeRuntime(g) {
107
+ if (!("process" in g) || typeof g.process !== "object" || !g.process) {
108
+ return false;
109
+ }
110
+ const versions = "versions" in g.process ? g.process.versions : void 0;
111
+ return typeof versions === "object" && versions !== null && "node" in versions && typeof versions.node === "string";
112
+ }
48
113
 
49
114
  // src/internal/constants.ts
50
115
  var LANGWATCH_SDK_RUNTIME = getRuntime;
@@ -57,42 +122,22 @@ var DEFAULT_SERVICE_NAME = "unknown-service.langwatch";
57
122
  var TRACES_PATH = "/api/otel/v1/traces";
58
123
  var LOGS_PATH = "/api/otel/v1/logs";
59
124
 
60
- // src/internal/api/auth.ts
61
- var LEGACY_PAT_PREFIX = "pat-lw-";
62
- var API_KEY_PREFIX = "sk-lw-";
63
- var isUserScopedApiKey = (token) => {
64
- if (token.startsWith(LEGACY_PAT_PREFIX)) return true;
65
- if (token.startsWith(API_KEY_PREFIX)) {
66
- const body = token.slice(API_KEY_PREFIX.length);
67
- return body.includes("_");
68
- }
69
- return false;
70
- };
71
- var buildAuthHeaders = ({
72
- apiKey,
73
- projectId
74
- }) => {
75
- var _a;
76
- if (!apiKey) return {};
77
- const resolvedProjectId = (_a = projectId != null ? projectId : process.env.LANGWATCH_PROJECT_ID) != null ? _a : void 0;
78
- if (isUserScopedApiKey(apiKey)) {
79
- if (resolvedProjectId) {
80
- const encoded = Buffer.from(
81
- `${resolvedProjectId}:${apiKey}`,
82
- "utf-8"
83
- ).toString("base64");
84
- return { authorization: `Basic ${encoded}` };
85
- }
86
- return {
87
- authorization: `Bearer ${apiKey}`,
88
- "x-auth-token": apiKey
89
- };
90
- }
91
- return {
92
- authorization: `Bearer ${apiKey}`,
93
- "x-auth-token": apiKey
94
- };
95
- };
125
+ // src/internal/otlp-compression.ts
126
+ import { CompressionAlgorithm } from "@opentelemetry/otlp-exporter-base";
127
+ function resolveOtlpCompression({
128
+ compression,
129
+ signal
130
+ }) {
131
+ if (compression !== void 0) return compression;
132
+ const isSetInEnv = [
133
+ "OTEL_EXPORTER_OTLP_COMPRESSION",
134
+ `OTEL_EXPORTER_OTLP_${signal}_COMPRESSION`
135
+ ].some((name) => {
136
+ var _a;
137
+ return (_a = process.env[name]) == null ? void 0 : _a.trim();
138
+ });
139
+ return isSetInEnv ? void 0 : CompressionAlgorithm.GZIP;
140
+ }
96
141
 
97
142
  // src/observability-sdk/exporters/trace-filters.ts
98
143
  function applyFilters(filters, spans) {
@@ -101,10 +146,7 @@ function applyFilters(filters, spans) {
101
146
  }
102
147
  function applyFilterRule(rule, spans) {
103
148
  if ("preset" in rule && rule.preset) {
104
- return applyPreset(
105
- rule.preset,
106
- spans
107
- );
149
+ return applyPreset(rule.preset, spans);
108
150
  }
109
151
  if ("include" in rule && rule.include) {
110
152
  const criteria = rule.include;
@@ -148,7 +190,8 @@ function valueMatches(value, rule) {
148
190
  return ignoreCase ? raw.toLowerCase().startsWith(rule.startsWith.toLowerCase()) : raw.startsWith(rule.startsWith);
149
191
  }
150
192
  if (rule.matches instanceof RegExp) {
151
- const re = ignoreCase && !rule.matches.flags.includes("i") ? new RegExp(rule.matches.source, (rule.matches.flags || "") + "i") : rule.matches;
193
+ const flags = rule.matches.flags;
194
+ const re = ignoreCase && !flags.includes("i") ? new RegExp(rule.matches.source, (flags || "") + "i") : rule.matches;
152
195
  return re.test(raw);
153
196
  }
154
197
  return false;
@@ -171,39 +214,12 @@ function isHttpRequestSpan(span) {
171
214
  if (attributes["http.request.method"] !== void 0 || attributes["http.method"] !== void 0) {
172
215
  return true;
173
216
  }
174
- return /^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|CONNECT|TRACE)( |$)/.test(
175
- (_d = span.name) != null ? _d : ""
176
- );
217
+ return /^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|CONNECT|TRACE)( |$)/.test((_d = span.name) != null ? _d : "");
177
218
  }
178
219
 
179
220
  // src/observability-sdk/exporters/langwatch-trace-exporter.ts
180
221
  var LangWatchTraceExporter = class extends OTLPTraceExporter {
181
- /**
182
- * Creates a new LangWatchTraceExporter instance.
183
- *
184
- * @param opts - Configuration options for the exporter
185
- * @param opts.apiKey - API key for LangWatch authentication.
186
- * Falls back to `LANGWATCH_API_KEY` environment variable, then empty string.
187
- * @param opts.endpoint - Custom endpoint URL for LangWatch ingestion.
188
- * Falls back to `LANGWATCH_ENDPOINT` environment variable, then default endpoint.
189
- * @param opts.filters - Array of filters applied sequentially to spans before export (AND semantics).
190
- * When omitted, defaults to `[{ preset: "excludeHttpRequests" }]`.
191
- * Pass `null` or `[]` to disable all filtering and send all spans.
192
- *
193
- * @example
194
- * ```typescript
195
- * // With API key and default filtering
196
- * const exporter = new LangWatchTraceExporter({
197
- * apiKey: 'your-api-key'
198
- * });
199
- *
200
- * // With custom endpoint and no filtering
201
- * const exporter = new LangWatchTraceExporter({
202
- * endpoint: 'https://custom.langwatch.ai',
203
- * filters: null
204
- * });
205
- * ```
206
- */
222
+ /** Configures auth from opts or environment; applies filters to span stream. */
207
223
  constructor(opts) {
208
224
  var _a, _b, _c, _d, _e;
209
225
  const apiKey = (_b = (_a = opts == null ? void 0 : opts.apiKey) != null ? _a : process.env.LANGWATCH_API_KEY) != null ? _b : "";
@@ -218,7 +234,8 @@ var LangWatchTraceExporter = class extends OTLPTraceExporter {
218
234
  "x-langwatch-sdk-version": LANGWATCH_SDK_VERSION,
219
235
  "x-langwatch-sdk-runtime": LANGWATCH_SDK_RUNTIME()
220
236
  }, buildAuthHeaders({ apiKey, projectId })),
221
- url: otelEndpoint.toString()
237
+ url: otelEndpoint.toString(),
238
+ compression: resolveOtlpCompression({ compression: opts == null ? void 0 : opts.compression, signal: "TRACES" })
222
239
  });
223
240
  if ((opts == null ? void 0 : opts.filters) === null || Array.isArray(opts == null ? void 0 : opts.filters) && opts.filters.length === 0) {
224
241
  this.filters = [];
@@ -235,17 +252,9 @@ var LangWatchTraceExporter = class extends OTLPTraceExporter {
235
252
  };
236
253
 
237
254
  // src/observability-sdk/exporters/langwatch-logs-exporter.ts
238
- import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
255
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-proto";
239
256
  var LangWatchLogsExporter = class extends OTLPLogExporter {
240
- /**
241
- * Creates a new LangWatchLogsExporter instance.
242
- *
243
- * @param opts - Optional configuration options for the exporter.
244
- * @param opts.apiKey - Optional API key for LangWatch authentication. If not provided,
245
- * will use environment variables or fallback configuration.
246
- * @param opts.endpoint - Optional custom endpoint URL for LangWatch ingestion.
247
- * If not provided, will use environment variables or fallback configuration.
248
- */
257
+ /** Configures auth headers and endpoint; reads defaults from environment if needed. */
249
258
  constructor(opts) {
250
259
  var _a, _b, _c, _d;
251
260
  const apiKey = (_b = (_a = opts == null ? void 0 : opts.apiKey) != null ? _a : process.env.LANGWATCH_API_KEY) != null ? _b : "";
@@ -259,18 +268,12 @@ var LangWatchLogsExporter = class extends OTLPLogExporter {
259
268
  "x-langwatch-sdk-version": LANGWATCH_SDK_VERSION,
260
269
  "x-langwatch-sdk-runtime": LANGWATCH_SDK_RUNTIME()
261
270
  }, apiKey ? { authorization: `Bearer ${apiKey}` } : {}),
262
- url: otelEndpoint.toString()
271
+ url: otelEndpoint.toString(),
272
+ compression: resolveOtlpCompression({ compression: opts == null ? void 0 : opts.compression, signal: "LOGS" })
263
273
  });
264
274
  }
265
275
  };
266
276
 
267
- // src/observability-sdk/semconv/events.ts
268
- var LOG_EVNT_GEN_AI_SYSTEM_MESSAGE = "gen.ai.system_message";
269
- var LOG_EVNT_GEN_AI_USER_MESSAGE = "gen.ai.user_message";
270
- var LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE = "gen.ai.assistant_message";
271
- var LOG_EVNT_GEN_AI_TOOL_MESSAGE = "gen.ai.tool_message";
272
- var LOG_EVNT_GEN_AI_CHOICE = "gen.ai.choice";
273
-
274
277
  // src/observability-sdk/logger/index.ts
275
278
  import {
276
279
  createNoopLogger
@@ -302,7 +305,9 @@ var LangWatchLoggerInternal = class {
302
305
  var _a;
303
306
  this.emitGenAIEvent(
304
307
  LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,
305
- __spreadProps(__spreadValues({}, body), { role: (_a = body.role) != null ? _a : "system" }),
308
+ __spreadProps(__spreadValues({}, body), {
309
+ role: (_a = body.role) != null ? _a : "system"
310
+ }),
306
311
  __spreadProps(__spreadValues({}, attributes), {
307
312
  "gen_ai.system": system
308
313
  })
@@ -312,7 +317,9 @@ var LangWatchLoggerInternal = class {
312
317
  var _a;
313
318
  this.emitGenAIEvent(
314
319
  LOG_EVNT_GEN_AI_USER_MESSAGE,
315
- __spreadProps(__spreadValues({}, body), { role: (_a = body.role) != null ? _a : "user" }),
320
+ __spreadProps(__spreadValues({}, body), {
321
+ role: (_a = body.role) != null ? _a : "user"
322
+ }),
316
323
  __spreadProps(__spreadValues({}, attributes), {
317
324
  "gen_ai.system": system
318
325
  })
@@ -322,7 +329,9 @@ var LangWatchLoggerInternal = class {
322
329
  var _a;
323
330
  this.emitGenAIEvent(
324
331
  LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,
325
- __spreadProps(__spreadValues({}, body), { role: (_a = body.role) != null ? _a : "assistant" }),
332
+ __spreadProps(__spreadValues({}, body), {
333
+ role: (_a = body.role) != null ? _a : "assistant"
334
+ }),
326
335
  __spreadProps(__spreadValues({}, attributes), {
327
336
  "gen_ai.system": system
328
337
  })
@@ -385,7 +394,7 @@ function createLangWatchLogger(logger) {
385
394
  }
386
395
 
387
396
  export {
388
- version,
397
+ buildAuthHeaders,
389
398
  LANGWATCH_SDK_RUNTIME,
390
399
  LANGWATCH_SDK_NAME_OBSERVABILITY,
391
400
  LANGWATCH_SDK_NAME_CLIENT,
@@ -393,11 +402,10 @@ export {
393
402
  LANGWATCH_SDK_VERSION,
394
403
  DEFAULT_ENDPOINT,
395
404
  DEFAULT_SERVICE_NAME,
396
- buildAuthHeaders,
397
405
  LangWatchTraceExporter,
398
406
  LangWatchLogsExporter,
399
407
  setLangWatchLoggerProvider,
400
408
  getLangWatchLogger,
401
409
  getLangWatchLoggerFromProvider
402
410
  };
403
- //# sourceMappingURL=chunk-MVQJMRM6.mjs.map
411
+ //# sourceMappingURL=chunk-FKYYEGJ7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/observability-sdk/exporters/langwatch-trace-exporter.ts","../src/internal/api/auth.ts","../package.json","../src/internal/runtime.ts","../src/internal/constants.ts","../src/internal/otlp-compression.ts","../src/observability-sdk/exporters/trace-filters.ts","../src/observability-sdk/exporters/langwatch-logs-exporter.ts","../src/observability-sdk/logger/index.ts","../src/observability-sdk/logger/implementation.ts"],"sourcesContent":["import { type ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { type CompressionAlgorithm } from \"@opentelemetry/otlp-exporter-base\";\nimport { type ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\n\nimport { buildAuthHeaders } from \"../../internal/api/auth\";\nimport {\n DEFAULT_ENDPOINT,\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n TRACES_PATH,\n} from \"../../internal/constants\";\nimport { resolveOtlpCompression } from \"../../internal/otlp-compression\";\nimport { type TraceFilter, type Criteria, type Match, applyFilters } from \"./trace-filters\";\n\n/** Options: endpoint URL, API key for auth, and optional span filters (default excludes HTTP). */\nexport interface LangWatchTraceExporterOptions {\n endpoint?: string;\n apiKey?: string;\n /**\n * Project identifier. Required when `apiKey` is a Personal Access Token\n * (`pat-lw-*`); ignored for legacy `sk-lw-*` keys. Falls back to\n * `LANGWATCH_PROJECT_ID`.\n */\n projectId?: string;\n filters?: TraceFilter[] | null;\n /** Request compression: gzip unless an OTEL_EXPORTER_OTLP_*COMPRESSION env var is set. */\n compression?: CompressionAlgorithm;\n}\n\nexport type { TraceFilter, Criteria, Match };\n\n/** Sends traces to LangWatch with auth; applies span filters (default excludes HTTP). */\nexport class LangWatchTraceExporter extends OTLPTraceExporter {\n private readonly filters: TraceFilter[];\n /** Configures auth from opts or environment; applies filters to span stream. */\n constructor(opts?: LangWatchTraceExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const projectId = opts?.projectId ?? process.env.LANGWATCH_PROJECT_ID;\n const endpoint = opts?.endpoint ?? process.env.LANGWATCH_ENDPOINT ?? DEFAULT_ENDPOINT;\n\n const url = new URL(TRACES_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...buildAuthHeaders({ apiKey, projectId }),\n },\n url: otelEndpoint.toString(),\n compression: resolveOtlpCompression({ compression: opts?.compression, signal: \"TRACES\" }),\n });\n\n // Handle filters: null or [] = no filtering, undefined = default, array = use provided\n if (opts?.filters === null || (Array.isArray(opts?.filters) && opts.filters.length === 0)) {\n this.filters = [];\n } else if (Array.isArray(opts?.filters)) {\n this.filters = opts.filters;\n } else {\n this.filters = [{ preset: \"excludeHttpRequests\" }];\n }\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n const filtered = applyFilters(this.filters, spans);\n super.export(filtered, resultCallback);\n }\n}\n","/**\n * Authentication header assembly, two token families: legacy `sk-lw-`\n * project keys send `Bearer` + `X-Auth-Token`; user-scoped keys send\n * `Basic base64(projectId:token)` so the server can resolve the role binding.\n */\n\n/** Old PAT prefix — still accepted by the server for backward compat. */\nconst LEGACY_PAT_PREFIX = \"pat-lw-\";\n\n/** Unified API key prefix — also used by legacy project keys. */\nconst API_KEY_PREFIX = \"sk-lw-\";\n\nexport interface LangWatchAuthHeadersInput {\n /** API key token. May be empty; in that case no auth headers are emitted. */\n apiKey: string;\n /**\n * Project identifier. Required for user-scoped API keys to resolve scope;\n * optional for legacy project keys (the token already encodes project identity).\n * Falls back to `LANGWATCH_PROJECT_ID` when omitted.\n */\n projectId?: string;\n}\n\nexport type LangWatchAuthHeaders = Record<string, string>;\n\n/**\n * Whether the credential is a user-scoped API key (as opposed to a legacy project key): a\n * `pat-lw-` prefix, or a `sk-lw-` prefix with an underscore in the body (the new format).\n */\nexport const isUserScopedApiKey = (token: string): boolean => {\n if (token.startsWith(LEGACY_PAT_PREFIX)) return true;\n if (token.startsWith(API_KEY_PREFIX)) {\n const body = token.slice(API_KEY_PREFIX.length);\n return body.includes(\"_\");\n }\n return false;\n};\n\n/**\n * Builds the HTTP headers required to authenticate against the LangWatch\n * API using either a legacy project key or a user-scoped API key.\n */\nexport const buildAuthHeaders = ({\n apiKey,\n projectId,\n}: LangWatchAuthHeadersInput): LangWatchAuthHeaders => {\n if (!apiKey) return {};\n\n const resolvedProjectId = projectId ?? process.env.LANGWATCH_PROJECT_ID ?? undefined;\n\n if (isUserScopedApiKey(apiKey)) {\n if (resolvedProjectId) {\n // Basic Auth is the canonical carrier — the server extracts both\n // the project and the token from one header.\n const encoded = Buffer.from(`${resolvedProjectId}:${apiKey}`, \"utf-8\").toString(\"base64\");\n return { authorization: `Basic ${encoded}` };\n }\n\n // API key without a projectId: use Bearer and let the server reject\n // unresolvable requests.\n return {\n authorization: `Bearer ${apiKey}`,\n \"x-auth-token\": apiKey,\n };\n }\n\n // Legacy sk-lw-* project key: preserve the dual-header shape.\n return {\n authorization: `Bearer ${apiKey}`,\n \"x-auth-token\": apiKey,\n };\n};\n","{\n \"name\": \"langwatch\",\n \"version\": \"1.20.0\",\n \"description\": \"LangWatch TypeScript/JavaScript SDK. Interact with the full LangWatch API and use the LangWatch OpenTelemetry SDK to instrument your application. For more information, see https://docs.langwatch.ai/integration/typescript/guide\",\n \"license\": \"MIT\",\n \"author\": \"LangWatch\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/langwatch/langwatch.git\",\n \"directory\": \"typescript-sdk\"\n },\n \"bin\": {\n \"langwatch\": \"./dist/cli/index.js\",\n \"lw\": \"./dist/cli/index.js\"\n },\n \"files\": [\n \"dist\",\n \"!dist/bin\",\n \"!dist/cli/*.map\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n },\n \"./observability\": {\n \"types\": \"./dist/observability-sdk/index.d.ts\",\n \"require\": \"./dist/observability-sdk/index.js\",\n \"import\": \"./dist/observability-sdk/index.mjs\"\n },\n \"./observability/semconv\": {\n \"types\": \"./dist/observability-sdk/semconv/index.d.ts\",\n \"require\": \"./dist/observability-sdk/semconv/index.js\",\n \"import\": \"./dist/observability-sdk/semconv/index.mjs\"\n },\n \"./observability/node\": {\n \"types\": \"./dist/observability-sdk/setup/node/index.d.ts\",\n \"require\": \"./dist/observability-sdk/setup/node/index.js\",\n \"import\": \"./dist/observability-sdk/setup/node/index.mjs\"\n },\n \"./observability/instrumentation/langchain\": {\n \"types\": \"./dist/observability-sdk/instrumentation/langchain/index.d.ts\",\n \"require\": \"./dist/observability-sdk/instrumentation/langchain/index.js\",\n \"import\": \"./dist/observability-sdk/instrumentation/langchain/index.mjs\"\n },\n \"./agent\": {\n \"types\": \"./dist/agent/index.d.ts\",\n \"require\": \"./dist/agent/index.js\",\n \"import\": \"./dist/agent/index.mjs\"\n }\n },\n \"scripts\": {\n \"generate\": \"pnpm run generate:server-types\",\n \"cli\": \"node dist/cli/index.js\",\n \"prelint\": \"pnpm run generate\",\n \"lint\": \"eslint .\",\n \"pretest\": \"pnpm run generate\",\n \"test\": \"vitest run --exclude '**/*.integration.test.ts'\",\n \"test:e2e\": \"dotenv -- vitest run -c ./vitest.e2e.config.mts\",\n \"test:governance-e2e\": \"vitest run -c ./vitest.governance-e2e.config.mts\",\n \"test:seed\": \"dotenv -e .env.test -- pnpm -w run prisma:seed\",\n \"prebuild\": \"pnpm run generate\",\n \"build\": \"rm -rf dist && tsup\",\n \"postbuild\": \"node -e \\\"const{statSync}=require('node:fs'),{execFileSync}=require('node:child_process');const f='dist/cli/index.js',want=require('./package.json').version;const s=statSync(f);if(process.platform!=='win32'&&!(s.mode&0o111))throw new Error(f+' is not executable');const got=execFileSync(process.execPath,[f,'--version'],{encoding:'utf8',env:{...process.env,LANGWATCH_NO_DAEMON:'1'}}).trim();if(got!==want)throw new Error('version mismatch: '+f+' reports '+got+', package.json says '+want);console.log('postbuild: '+f+' ok ('+got+')')\\\"\",\n \"build:binary\": \"bun run scripts/build-cli-binary.ts\",\n \"tarball\": \"pnpm build && pnpm pack\",\n \"typecheck\": \"GOMAXPROCS=2 GOMEMLIMIT=2GiB pnpm -w exec tsc -b sdks/typescript\",\n \"prepublish\": \"pnpm run build\",\n \"generate:openapi-types\": \"node scripts/generate-openapi-types.mjs\",\n \"generate:server-types\": \"./copy-types.sh\"\n },\n \"dependencies\": {\n \"@opentelemetry/api-logs\": \"catalog:\",\n \"@opentelemetry/context-async-hooks\": \"catalog:\",\n \"@opentelemetry/core\": \"catalog:\",\n \"@opentelemetry/exporter-logs-otlp-proto\": \"catalog:\",\n \"@opentelemetry/exporter-trace-otlp-proto\": \"catalog:\",\n \"@opentelemetry/otlp-exporter-base\": \"catalog:\",\n \"@opentelemetry/resources\": \"catalog:\",\n \"@opentelemetry/sdk-logs\": \"catalog:\",\n \"@opentelemetry/sdk-trace-base\": \"catalog:\",\n \"@opentelemetry/sdk-trace-node\": \"catalog:\",\n \"liquidjs\": \"catalog:\",\n \"open\": \"^11.0.0\",\n \"openapi-fetch\": \"^0.17.0\",\n \"ws\": \"catalog:\",\n \"xksuid\": \"^0.0.4\",\n \"zod\": \"catalog:\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.32.0\",\n \"@langchain/core\": \">=0.3.68 <0.4.0\",\n \"@langchain/langgraph\": \">=0.4.0 <1.0.0\",\n \"@langchain/openai\": \">=0.6.0 <1.0.0\",\n \"@langwatch/e2e-stack\": \"workspace:*\",\n \"@langwatch/handled-error\": \"workspace:*\",\n \"@opentelemetry/api\": \"catalog:\",\n \"@opentelemetry/instrumentation\": \"catalog:\",\n \"@opentelemetry/sdk-metrics\": \"catalog:\",\n \"@opentelemetry/sdk-trace-web\": \"catalog:\",\n \"@types/debug\": \"catalog:\",\n \"@types/js-yaml\": \"catalog:\",\n \"@types/node\": \"catalog:\",\n \"@types/prompts\": \"catalog:\",\n \"@types/ws\": \"catalog:\",\n \"@typescript-eslint/parser\": \"^8.58.1\",\n \"@vercel/otel\": \"^1.13.0\",\n \"@vitest/coverage-v8\": \"^5.0.1\",\n \"chalk\": \"catalog:\",\n \"cloudflared\": \"0.7.1\",\n \"commander\": \"catalog:\",\n \"dotenv\": \"catalog:\",\n \"dotenv-cli\": \"^11.0.0\",\n \"esbuild\": \"catalog:\",\n \"eslint\": \"^9.32.0\",\n \"fets\": \"^0.8.5\",\n \"fishery\": \"^2.3.1\",\n \"js-yaml\": \"catalog:\",\n \"jsonc-parser\": \"^3.3.1\",\n \"langchain\": \">=0.3.0 <2.0.0\",\n \"msw\": \"^2.10.4\",\n \"nock\": \"^14.0.8\",\n \"openapi-msw\": \"^1.2.0\",\n \"openapi-typescript\": \"7.13.0\",\n \"ora\": \"catalog:\",\n \"prompts\": \"catalog:\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:sdk-toolchain\",\n \"typescript-eslint\": \"catalog:\",\n \"vitest\": \"catalog:\",\n \"vitest-mock-extended\": \"^5.1.1\",\n \"yaml\": \"^2.8.1\"\n },\n \"peerDependencies\": {\n \"@ai-sdk/openai\": \">=2.0.0 <5.0.0\",\n \"@langchain/core\": \">=0.3.0 <2.0.0\",\n \"@langchain/langgraph\": \">=0.4.0 <2.0.0\",\n \"@langchain/openai\": \">=0.6.0 <2.0.0\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/context-zone\": \">=1.19.0 <3.0.0\",\n \"@opentelemetry/exporter-trace-otlp-grpc\": \">=0.221.0 <1.0.0\",\n \"@opentelemetry/instrumentation\": \">=0.200.0 <1.0.0\",\n \"@opentelemetry/sdk-metrics\": \">=2.0.0 <3.0.0\",\n \"@opentelemetry/sdk-trace-web\": \">=1.19.0 <3.0.0\",\n \"langchain\": \">=0.3.0 <2.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@ai-sdk/openai\": {\n \"optional\": true\n },\n \"@langchain/core\": {\n \"optional\": true\n },\n \"@langchain/langgraph\": {\n \"optional\": true\n },\n \"@langchain/openai\": {\n \"optional\": true\n },\n \"@opentelemetry/context-zone\": {\n \"optional\": true\n },\n \"@opentelemetry/exporter-trace-otlp-grpc\": {\n \"optional\": true\n },\n \"@opentelemetry/instrumentation\": {\n \"optional\": true\n },\n \"@opentelemetry/sdk-metrics\": {\n \"optional\": true\n },\n \"@opentelemetry/sdk-trace-web\": {\n \"optional\": true\n },\n \"langchain\": {\n \"optional\": true\n }\n },\n \"engines\": {\n \"node\": \"^22.23.4 || ^24.22.1 || >=26.12.1\",\n \"pnpm\": \">=8\"\n },\n \"nx\": {\n \"namedInputs\": {\n \"sdkBuild\": [\n \"default\",\n \"!{projectRoot}/**/*.test.ts\",\n \"!{projectRoot}/**/*.test.tsx\",\n \"!{projectRoot}/**/*.test.mts\",\n \"!{projectRoot}/vitest.config.*\",\n \"!{projectRoot}/vitest.integration.config.*\",\n \"!{projectRoot}/__tests__/**/*\"\n ],\n \"production\": [\n \"sdkBuild\",\n \"!{projectRoot}/src/cli/**/*\"\n ]\n }\n }\n}\n","export type JsRuntime = \"node\" | \"deno\" | \"bun\" | \"web\" | \"unknown\";\n\nlet _runtime: JsRuntime | undefined;\n\n/**\n * Gets the cached JavaScript runtime environment.\n * @returns The detected runtime environment\n */\nexport const getRuntime = (): JsRuntime => {\n _runtime ??= detectRuntime();\n return _runtime;\n};\n\n/**\n * Resets the cached runtime. Only used for testing.\n * @internal\n */\nexport const resetRuntimeCache = (): void => {\n _runtime = undefined;\n};\n\n/**\n * Detects the JavaScript runtime environment.\n * @param globals - (Test only) Override the global object for environment simulation;\n * only used if NODE_ENV === 'test'.\n */\nexport function detectRuntime(globals?: object): JsRuntime {\n let g: object = globalThis;\n if (globals) {\n if (process.env.NODE_ENV === \"test\") {\n g = globals;\n } else {\n console.warn(\n \"[LangWatch Observability] overriding detectRuntime is only supported when running in NODE_ENV=test\",\n );\n }\n }\n\n try {\n if (isDenoRuntime(g)) return \"deno\";\n if (isBunRuntime(g)) return \"bun\";\n if (isNodeRuntime(g)) return \"node\";\n if (isWebRuntime(g)) {\n return \"web\";\n }\n return \"unknown\";\n } catch (error) {\n console.warn(\"[LangWatch Observability] Failed to detect runtime\", error);\n return \"unknown\";\n }\n}\n\nfunction isWebRuntime(g: object): boolean {\n if (!(\"window\" in g) || typeof g.window !== \"object\" || !g.window) {\n return false;\n }\n const win: object = g.window;\n if (g !== win) return false;\n return \"document\" in win && typeof win.document !== \"undefined\";\n}\n\nfunction isDenoRuntime(g: object): boolean {\n if (!(\"Deno\" in g) || typeof g.Deno !== \"object\" || !g.Deno) {\n return false;\n }\n return \"version\" in g.Deno && typeof g.Deno.version === \"object\";\n}\n\nfunction isBunRuntime(g: object): boolean {\n if (!(\"Bun\" in g) || typeof g.Bun !== \"object\" || !g.Bun) {\n return false;\n }\n return \"version\" in g.Bun && typeof g.Bun.version === \"string\";\n}\n\nfunction isNodeRuntime(g: object): boolean {\n if (!(\"process\" in g) || typeof g.process !== \"object\" || !g.process) {\n return false;\n }\n const versions: unknown = \"versions\" in g.process ? g.process.versions : undefined;\n return (\n typeof versions === \"object\" &&\n versions !== null &&\n \"node\" in versions &&\n typeof versions.node === \"string\"\n );\n}\n","import { version } from \"../../package.json\";\nimport { getRuntime } from \"./runtime\";\n\nexport const LANGWATCH_SDK_RUNTIME = getRuntime;\n\nexport const LANGWATCH_SDK_NAME_OBSERVABILITY = \"langwatch-observability-sdk\";\nexport const LANGWATCH_SDK_NAME_CLIENT = \"langwatch-client-sdk\";\nexport const LANGWATCH_SDK_LANGUAGE = \"typescript\";\nexport const LANGWATCH_SDK_VERSION = version;\n\nexport const DEFAULT_ENDPOINT = \"https://app.langwatch.ai\";\nexport const DEFAULT_SERVICE_NAME = \"unknown-service.langwatch\";\n\nexport const TRACES_PATH = \"/api/otel/v1/traces\";\nexport const LOGS_PATH = \"/api/otel/v1/logs\";\nexport const METRICS_PATH = \"/api/otel/v1/metrics\";\n","import { CompressionAlgorithm } from \"@opentelemetry/otlp-exporter-base\";\n\n/**\n * The compression an OTLP exporter is built with: the caller's choice, else\n * the standard OTel env vars (left to the exporter), else gzip. Explicit\n * config beats env in OTel JS, so gzip is only set when neither is given.\n */\nexport function resolveOtlpCompression({\n compression,\n signal,\n}: {\n compression?: CompressionAlgorithm;\n signal: \"TRACES\" | \"LOGS\" | \"METRICS\";\n}): CompressionAlgorithm | undefined {\n if (compression !== undefined) return compression;\n const isSetInEnv = [\n \"OTEL_EXPORTER_OTLP_COMPRESSION\",\n `OTEL_EXPORTER_OTLP_${signal}_COMPRESSION`,\n ].some((name) => process.env[name]?.trim());\n return isSetInEnv ? undefined : CompressionAlgorithm.GZIP;\n}\n","import { type ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\n\nexport interface Criteria {\n instrumentationScopeName?: Match[];\n name?: Match[];\n}\n\nexport interface Match {\n equals?: string;\n startsWith?: string;\n matches?: RegExp;\n ignoreCase?: boolean;\n}\n\nexport type TraceFilter =\n | { preset: \"vercelAIOnly\" | \"excludeHttpRequests\" }\n | { include: Criteria }\n | { exclude: Criteria };\n\n/**\n * Applies filters to spans sequentially (AND semantics).\n * @param filters - Filter rules to apply in sequence\n * @param spans - Array of spans to filter\n */\nexport function applyFilters(\n filters: TraceFilter[] | undefined,\n spans: ReadableSpan[],\n): ReadableSpan[] {\n if (!filters || filters.length === 0) return spans;\n return filters.reduce((current, rule) => applyFilterRule(rule, current), spans);\n}\n\n/**\n * Applies a single filter rule (preset, include, or exclude).\n * @param rule - Filter rule to apply\n * @param spans - Array of spans to filter\n */\nexport function applyFilterRule(rule: TraceFilter, spans: ReadableSpan[]): ReadableSpan[] {\n if (\"preset\" in rule && rule.preset) {\n return applyPreset(rule.preset, spans);\n }\n\n if (\"include\" in rule && rule.include) {\n const criteria = (rule as { include: Criteria }).include;\n return spans.filter((s) => matchesCriteria(s, criteria));\n }\n\n if (\"exclude\" in rule && rule.exclude) {\n const criteria = (rule as { exclude: Criteria }).exclude;\n return spans.filter((s) => !matchesCriteria(s, criteria));\n }\n\n return spans;\n}\n\n/**\n * Applies a preset filter: vercelAIOnly or excludeHttpRequests.\n * @param preset - Preset filter name\n * @param spans - Array of spans to filter\n */\nexport function applyPreset(\n preset: \"vercelAIOnly\" | \"excludeHttpRequests\",\n spans: ReadableSpan[],\n): ReadableSpan[] {\n if (preset === \"vercelAIOnly\") return spans.filter((s) => isVercelAiSpan(s));\n if (preset === \"excludeHttpRequests\") return spans.filter((s) => !isHttpRequestSpan(s));\n\n return spans;\n}\n\n/**\n * Checks if a span matches criteria (AND within fields, OR within each field).\n * @param span - Span to evaluate\n * @param criteria - Criteria to match against\n */\nexport function matchesCriteria(span: ReadableSpan, criteria: Criteria): boolean {\n if (criteria.instrumentationScopeName !== void 0) {\n const scopeName = span.instrumentationScope?.name ?? \"\";\n const ok = criteria.instrumentationScopeName.some((m) => valueMatches(scopeName, m));\n if (!ok) return false;\n }\n\n if (criteria.name !== void 0) {\n const ok = criteria.name.some((m) => valueMatches(span.name ?? \"\", m));\n if (!ok) return false;\n }\n\n return true;\n}\n\n/**\n * Evaluates if a string matches a rule (equals, startsWith, or regex).\n * Case-sensitive by default unless ignoreCase is true.\n * @param value - String to evaluate\n * @param rule - Match rule\n */\nexport function valueMatches(value: string, rule: Match): boolean {\n const raw = value ?? \"\";\n const ignoreCase = rule.ignoreCase ?? false;\n\n if (rule.equals !== void 0) {\n return ignoreCase\n ? raw.localeCompare(rule.equals, void 0, { sensitivity: \"base\" }) === 0\n : raw === rule.equals;\n }\n\n if (rule.startsWith !== void 0) {\n return ignoreCase\n ? raw.toLowerCase().startsWith(rule.startsWith.toLowerCase())\n : raw.startsWith(rule.startsWith);\n }\n\n if (rule.matches instanceof RegExp) {\n const flags = rule.matches.flags;\n const re =\n ignoreCase && !flags.includes(\"i\")\n ? new RegExp(rule.matches.source, (flags || \"\") + \"i\")\n : rule.matches;\n return re.test(raw);\n }\n\n return false;\n}\n\n/**\n * Checks if a span is from the Vercel AI SDK (scope name === 'ai', case-insensitive).\n * @param span - Span to check\n */\nexport function isVercelAiSpan(span: ReadableSpan): boolean {\n const scope = span.instrumentationScope?.name?.toLowerCase?.() ?? \"\";\n return scope === \"ai\";\n}\n\n/**\n * Instrumentation scopes that emit HTTP client/server request spans. Only\n * fully qualified package scopes count: an application is free to name its\n * own instrumentation \"fetch\" or \"undici\", and such spans are user data.\n */\nconst HTTP_INSTRUMENTATION_SCOPES = new Set([\n \"@opentelemetry/instrumentation-http\",\n \"@opentelemetry/instrumentation-undici\",\n \"@opentelemetry/instrumentation-fetch\",\n]);\n\n/**\n * Checks if a span is an HTTP instrumentation span.\n * Checks scope, then http.request.method attribute, then name heuristic.\n * @param span - Span to check\n */\nexport function isHttpRequestSpan(span: ReadableSpan): boolean {\n const scopeName = span.instrumentationScope?.name ?? \"\";\n if (HTTP_INSTRUMENTATION_SCOPES.has(scopeName)) return true;\n\n const attributes = (span.attributes ?? {}) as Record<string, unknown>;\n if (attributes[\"http.request.method\"] !== undefined || attributes[\"http.method\"] !== undefined) {\n return true;\n }\n\n return /^(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|CONNECT|TRACE)( |$)/.test(span.name ?? \"\");\n}\n","import { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-proto\";\nimport { type CompressionAlgorithm } from \"@opentelemetry/otlp-exporter-base\";\n\nimport {\n DEFAULT_ENDPOINT,\n LANGWATCH_SDK_LANGUAGE,\n LANGWATCH_SDK_NAME_OBSERVABILITY,\n LANGWATCH_SDK_RUNTIME,\n LANGWATCH_SDK_VERSION,\n LOGS_PATH,\n} from \"../../internal/constants\";\nimport { resolveOtlpCompression } from \"../../internal/otlp-compression\";\n\nexport interface LangWatchLogsExporterOptions {\n endpoint?: string;\n apiKey?: string;\n /** Request compression: gzip unless an OTEL_EXPORTER_OTLP_*COMPRESSION env var is set. */\n compression?: CompressionAlgorithm;\n}\n\n/** Extends OpenTelemetry OTLP HTTP logs exporter to send logs to LangWatch with authentication. */\nexport class LangWatchLogsExporter extends OTLPLogExporter {\n /** Configures auth headers and endpoint; reads defaults from environment if needed. */\n constructor(opts?: LangWatchLogsExporterOptions) {\n const apiKey = opts?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint = opts?.endpoint ?? process.env.LANGWATCH_ENDPOINT ?? DEFAULT_ENDPOINT;\n\n const url = new URL(LOGS_PATH, endpoint);\n const otelEndpoint = url.toString();\n\n super({\n headers: {\n \"x-langwatch-sdk-name\": LANGWATCH_SDK_NAME_OBSERVABILITY,\n \"x-langwatch-sdk-language\": LANGWATCH_SDK_LANGUAGE,\n \"x-langwatch-sdk-version\": LANGWATCH_SDK_VERSION,\n \"x-langwatch-sdk-runtime\": LANGWATCH_SDK_RUNTIME(),\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n },\n url: otelEndpoint.toString(),\n compression: resolveOtlpCompression({ compression: opts?.compression, signal: \"LOGS\" }),\n });\n }\n}\n","import {\n type Logger,\n type LoggerOptions,\n type LoggerProvider,\n createNoopLogger,\n} from \"@opentelemetry/api-logs\";\n\nimport { LangWatchLoggerInternal } from \"./implementation\";\nimport { type LangWatchLogger } from \"./types\";\n\n/**\n * `NoopLoggerProvider` was dropped from @opentelemetry/api-logs' public exports\n * (0.221) in favour of the still-exported `createNoopLogger`, so this is its\n * replacement: a provider whose loggers are always the shared no-op logger.\n */\nconst NOOP_LOGGER_PROVIDER: LoggerProvider = {\n getLogger: (_name: string, _version?: string, _options?: LoggerOptions) => createNoopLogger(),\n};\n\n/**\n * The LangWatch-specific global logger provider -- may differ from the\n * current OTel one; the last one `setupObservability` knows about.\n * @internal\n */\nlet currentLoggerProvider: LoggerProvider = NOOP_LOGGER_PROVIDER;\n\n/** Sets the global logger provider that {@link getLangWatchLogger} will use. */\nexport function setLangWatchLoggerProvider(loggerProvider: LoggerProvider): void {\n currentLoggerProvider = loggerProvider;\n}\n\n/**\n * @param name - The logger name (typically your service or module name).\n * @param version - Optional logger version.\n * @returns A {@link LangWatchLogger} instance, or a no-op logger if no provider was set.\n */\nexport function getLangWatchLogger(name: string, version?: string): LangWatchLogger {\n return getLangWatchLoggerFromProvider(currentLoggerProvider, name, version);\n}\n\n/**\n * @param loggerProvider - The OpenTelemetry logger provider to use.\n * @param name - The name of the logger.\n * @param version - Optional logger version.\n * @returns A {@link LangWatchLogger} instance.\n */\nexport function getLangWatchLoggerFromProvider(\n loggerProvider: LoggerProvider,\n name: string,\n version?: string,\n): LangWatchLogger {\n return createLangWatchLogger(loggerProvider.getLogger(name, version));\n}\n\n/**\n * Wraps an OpenTelemetry logger as a LangWatch logger.\n * @param logger - The OpenTelemetry logger to wrap.\n * @returns A {@link LangWatchLogger} instance.\n */\nexport function createLangWatchLogger(logger: Logger): LangWatchLogger {\n return new LangWatchLoggerInternal(logger);\n}\n\n// Export types and implementation\nexport * from \"./types\";\nexport * from \"./implementation\";\n","import { context } from \"@opentelemetry/api\";\nimport { type AnyValue, type Logger } from \"@opentelemetry/api-logs\";\n\nimport { shouldCaptureOutput } from \"../config\";\nimport * as intSemconv from \"../semconv\";\nimport { type SemConvLogRecordAttributes } from \"../semconv\";\nimport {\n type EmitOptions,\n type LangWatchLogger,\n type LangWatchLogRecord,\n type LangWatchSpanGenAIAssistantMessageEventBody,\n type LangWatchSpanGenAIChoiceEventBody,\n type LangWatchSpanGenAISystemMessageEventBody,\n type LangWatchSpanGenAIToolMessageEventBody,\n type LangWatchSpanGenAIUserMessageEventBody,\n} from \"./types\";\n\n/** Internal implementation of {@link LangWatchLogger}. Wraps OpenTelemetry\n * logger with LangWatch functionality. Use {@link getLangWatchLogger} instead. */\nexport class LangWatchLoggerInternal implements LangWatchLogger {\n constructor(private logger: Logger) {}\n\n // Delegates to the wrapped OTel logger rather than always returning `true`:\n // the underlying logger is what actually knows whether a processor is\n // registered, so this is what keeps `enabled()` truthful for a caller that\n // wraps a no-op provider (e.g. `getLangWatchLogger` before setup runs).\n enabled(options?: Parameters<Logger[\"enabled\"]>[0]): boolean {\n return this.logger.enabled(options);\n }\n\n emit(logRecord: LangWatchLogRecord, options?: EmitOptions): void {\n // Handle output capture configuration\n if (!shouldCaptureOutput()) {\n logRecord.body = void 0;\n }\n\n // Set context if not provided and not explicitly excluded\n if (!logRecord.context && !options?.excludeContext) {\n logRecord.context = context.active();\n }\n\n // Emit the log record through the underlying OpenTelemetry logger\n this.logger.emit(logRecord);\n }\n\n emitGenAISystemMessageEvent(\n body: LangWatchSpanGenAISystemMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_SYSTEM_MESSAGE,\n {\n ...body,\n role: body.role ?? \"system\",\n } satisfies LangWatchSpanGenAISystemMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIUserMessageEvent(\n body: LangWatchSpanGenAIUserMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_USER_MESSAGE,\n {\n ...body,\n role: body.role ?? \"user\",\n } satisfies LangWatchSpanGenAIUserMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIAssistantMessageEvent(\n body: LangWatchSpanGenAIAssistantMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_ASSISTANT_MESSAGE,\n {\n ...body,\n role: body.role ?? \"assistant\",\n } satisfies LangWatchSpanGenAIAssistantMessageEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIToolMessageEvent(\n body: LangWatchSpanGenAIToolMessageEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.role === void 0) {\n body.role = \"tool\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_TOOL_MESSAGE,\n { ...body },\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n emitGenAIChoiceEvent(\n body: LangWatchSpanGenAIChoiceEventBody,\n system?: intSemconv.VAL_GEN_AI_SYSTEMS | (string & {}),\n attributes?: SemConvLogRecordAttributes,\n ) {\n if (body.message && body.message.role === void 0) {\n body.message.role = \"assistant\";\n }\n\n this.emitGenAIEvent(\n intSemconv.LOG_EVNT_GEN_AI_CHOICE,\n {\n ...body,\n message: { ...body.message, role: body.message?.role ?? \"assistant\" },\n } satisfies LangWatchSpanGenAIChoiceEventBody,\n {\n ...attributes,\n \"gen_ai.system\": system,\n },\n );\n }\n\n private emitGenAIEvent(\n eventName: string,\n body: AnyValue,\n attributes?: SemConvLogRecordAttributes,\n ): void {\n this.emit({\n eventName,\n context: context.active(),\n attributes: { ...attributes },\n body: shouldCaptureOutput() ? body : void 0,\n observedTimestamp: new Date().getTime(),\n });\n }\n}\n"],"mappings":"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","names":["_a","version"]}