@cloudbase/agent-observability 1.0.1-alpha.9

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/dist/server.js ADDED
@@ -0,0 +1,1528 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
+
33
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/OTLPExporterBase.js
34
+ var OTLPExporterBase;
35
+ var init_OTLPExporterBase = __esm({
36
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/OTLPExporterBase.js"() {
37
+ "use strict";
38
+ OTLPExporterBase = class {
39
+ _delegate;
40
+ constructor(delegate) {
41
+ this._delegate = delegate;
42
+ }
43
+ /**
44
+ * Export items.
45
+ * @param items
46
+ * @param resultCallback
47
+ */
48
+ export(items, resultCallback) {
49
+ this._delegate.export(items, resultCallback);
50
+ }
51
+ forceFlush() {
52
+ return this._delegate.forceFlush();
53
+ }
54
+ shutdown() {
55
+ return this._delegate.shutdown();
56
+ }
57
+ };
58
+ }
59
+ });
60
+
61
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/types.js
62
+ var OTLPExporterError;
63
+ var init_types = __esm({
64
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/types.js"() {
65
+ "use strict";
66
+ OTLPExporterError = class extends Error {
67
+ code;
68
+ name = "OTLPExporterError";
69
+ data;
70
+ constructor(message, code, data) {
71
+ super(message);
72
+ this.data = data;
73
+ this.code = code;
74
+ }
75
+ };
76
+ }
77
+ });
78
+
79
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/shared-configuration.js
80
+ function validateTimeoutMillis(timeoutMillis) {
81
+ if (Number.isFinite(timeoutMillis) && timeoutMillis > 0) {
82
+ return timeoutMillis;
83
+ }
84
+ throw new Error(`Configuration: timeoutMillis is invalid, expected number greater than 0 (actual: '${timeoutMillis}')`);
85
+ }
86
+ function wrapStaticHeadersInFunction(headers) {
87
+ if (headers == null) {
88
+ return void 0;
89
+ }
90
+ return async () => headers;
91
+ }
92
+ function mergeOtlpSharedConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) {
93
+ return {
94
+ timeoutMillis: validateTimeoutMillis(userProvidedConfiguration.timeoutMillis ?? fallbackConfiguration.timeoutMillis ?? defaultConfiguration.timeoutMillis),
95
+ concurrencyLimit: userProvidedConfiguration.concurrencyLimit ?? fallbackConfiguration.concurrencyLimit ?? defaultConfiguration.concurrencyLimit,
96
+ compression: userProvidedConfiguration.compression ?? fallbackConfiguration.compression ?? defaultConfiguration.compression
97
+ };
98
+ }
99
+ function getSharedConfigurationDefaults() {
100
+ return {
101
+ timeoutMillis: 1e4,
102
+ concurrencyLimit: 30,
103
+ compression: "none"
104
+ };
105
+ }
106
+ var init_shared_configuration = __esm({
107
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/shared-configuration.js"() {
108
+ "use strict";
109
+ }
110
+ });
111
+
112
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/bounded-queue-export-promise-handler.js
113
+ function createBoundedQueueExportPromiseHandler(options) {
114
+ return new BoundedQueueExportPromiseHandler(options.concurrencyLimit);
115
+ }
116
+ var BoundedQueueExportPromiseHandler;
117
+ var init_bounded_queue_export_promise_handler = __esm({
118
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/bounded-queue-export-promise-handler.js"() {
119
+ "use strict";
120
+ BoundedQueueExportPromiseHandler = class {
121
+ _concurrencyLimit;
122
+ _sendingPromises = [];
123
+ /**
124
+ * @param concurrencyLimit maximum promises allowed in a queue at the same time.
125
+ */
126
+ constructor(concurrencyLimit) {
127
+ this._concurrencyLimit = concurrencyLimit;
128
+ }
129
+ pushPromise(promise) {
130
+ if (this.hasReachedLimit()) {
131
+ throw new Error("Concurrency Limit reached");
132
+ }
133
+ this._sendingPromises.push(promise);
134
+ const popPromise = () => {
135
+ const index = this._sendingPromises.indexOf(promise);
136
+ void this._sendingPromises.splice(index, 1);
137
+ };
138
+ promise.then(popPromise, popPromise);
139
+ }
140
+ hasReachedLimit() {
141
+ return this._sendingPromises.length >= this._concurrencyLimit;
142
+ }
143
+ async awaitAll() {
144
+ await Promise.all(this._sendingPromises);
145
+ }
146
+ };
147
+ }
148
+ });
149
+
150
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/baggage/constants.js
151
+ var BAGGAGE_KEY_PAIR_SEPARATOR, BAGGAGE_PROPERTIES_SEPARATOR, BAGGAGE_ITEMS_SEPARATOR;
152
+ var init_constants = __esm({
153
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/baggage/constants.js"() {
154
+ "use strict";
155
+ BAGGAGE_KEY_PAIR_SEPARATOR = "=";
156
+ BAGGAGE_PROPERTIES_SEPARATOR = ";";
157
+ BAGGAGE_ITEMS_SEPARATOR = ",";
158
+ }
159
+ });
160
+
161
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/baggage/utils.js
162
+ function parsePairKeyValue(entry) {
163
+ if (!entry)
164
+ return;
165
+ const metadataSeparatorIndex = entry.indexOf(BAGGAGE_PROPERTIES_SEPARATOR);
166
+ const keyPairPart = metadataSeparatorIndex === -1 ? entry : entry.substring(0, metadataSeparatorIndex);
167
+ const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR);
168
+ if (separatorIndex <= 0)
169
+ return;
170
+ const rawKey = keyPairPart.substring(0, separatorIndex).trim();
171
+ const rawValue = keyPairPart.substring(separatorIndex + 1).trim();
172
+ if (!rawKey || !rawValue)
173
+ return;
174
+ let key;
175
+ let value;
176
+ try {
177
+ key = decodeURIComponent(rawKey);
178
+ value = decodeURIComponent(rawValue);
179
+ } catch {
180
+ return;
181
+ }
182
+ let metadata;
183
+ if (metadataSeparatorIndex !== -1 && metadataSeparatorIndex < entry.length - 1) {
184
+ const metadataString = entry.substring(metadataSeparatorIndex + 1);
185
+ metadata = (0, import_api.baggageEntryMetadataFromString)(metadataString);
186
+ }
187
+ return { key, value, metadata };
188
+ }
189
+ function parseKeyPairsIntoRecord(value) {
190
+ const result = {};
191
+ if (typeof value === "string" && value.length > 0) {
192
+ value.split(BAGGAGE_ITEMS_SEPARATOR).forEach((entry) => {
193
+ const keyPair = parsePairKeyValue(entry);
194
+ if (keyPair !== void 0 && keyPair.value.length > 0) {
195
+ result[keyPair.key] = keyPair.value;
196
+ }
197
+ });
198
+ }
199
+ return result;
200
+ }
201
+ var import_api;
202
+ var init_utils = __esm({
203
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/baggage/utils.js"() {
204
+ "use strict";
205
+ import_api = require("@opentelemetry/api");
206
+ init_constants();
207
+ }
208
+ });
209
+
210
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/platform/node/environment.js
211
+ function getNumberFromEnv(key) {
212
+ const raw = process.env[key];
213
+ if (raw == null || raw.trim() === "") {
214
+ return void 0;
215
+ }
216
+ const value = Number(raw);
217
+ if (isNaN(value)) {
218
+ import_api2.diag.warn(`Unknown value ${(0, import_util.inspect)(raw)} for ${key}, expected a number, using defaults`);
219
+ return void 0;
220
+ }
221
+ return value;
222
+ }
223
+ function getStringFromEnv(key) {
224
+ const raw = process.env[key];
225
+ if (raw == null || raw.trim() === "") {
226
+ return void 0;
227
+ }
228
+ return raw;
229
+ }
230
+ var import_api2, import_util;
231
+ var init_environment = __esm({
232
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/platform/node/environment.js"() {
233
+ "use strict";
234
+ import_api2 = require("@opentelemetry/api");
235
+ import_util = require("util");
236
+ }
237
+ });
238
+
239
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/platform/node/index.js
240
+ var init_node = __esm({
241
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/platform/node/index.js"() {
242
+ "use strict";
243
+ init_environment();
244
+ }
245
+ });
246
+
247
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/platform/index.js
248
+ var init_platform = __esm({
249
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/platform/index.js"() {
250
+ "use strict";
251
+ init_node();
252
+ }
253
+ });
254
+
255
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/common/time.js
256
+ function hrTimeToNanoseconds(time) {
257
+ return time[0] * SECOND_TO_NANOSECONDS + time[1];
258
+ }
259
+ var NANOSECOND_DIGITS, NANOSECOND_DIGITS_IN_MILLIS, MILLISECONDS_TO_NANOSECONDS, SECOND_TO_NANOSECONDS;
260
+ var init_time = __esm({
261
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/common/time.js"() {
262
+ "use strict";
263
+ NANOSECOND_DIGITS = 9;
264
+ NANOSECOND_DIGITS_IN_MILLIS = 6;
265
+ MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS);
266
+ SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS);
267
+ }
268
+ });
269
+
270
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/ExportResult.js
271
+ var ExportResultCode;
272
+ var init_ExportResult = __esm({
273
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/ExportResult.js"() {
274
+ "use strict";
275
+ (function(ExportResultCode2) {
276
+ ExportResultCode2[ExportResultCode2["SUCCESS"] = 0] = "SUCCESS";
277
+ ExportResultCode2[ExportResultCode2["FAILED"] = 1] = "FAILED";
278
+ })(ExportResultCode || (ExportResultCode = {}));
279
+ }
280
+ });
281
+
282
+ // ../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/index.js
283
+ var init_esm = __esm({
284
+ "../../node_modules/.pnpm/@opentelemetry+core@2.4.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/esm/index.js"() {
285
+ "use strict";
286
+ init_time();
287
+ init_ExportResult();
288
+ init_utils();
289
+ init_platform();
290
+ }
291
+ });
292
+
293
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/logging-response-handler.js
294
+ function isPartialSuccessResponse(response) {
295
+ return Object.prototype.hasOwnProperty.call(response, "partialSuccess");
296
+ }
297
+ function createLoggingPartialSuccessResponseHandler() {
298
+ return {
299
+ handleResponse(response) {
300
+ if (response == null || !isPartialSuccessResponse(response) || response.partialSuccess == null || Object.keys(response.partialSuccess).length === 0) {
301
+ return;
302
+ }
303
+ import_api3.diag.warn("Received Partial Success response:", JSON.stringify(response.partialSuccess));
304
+ }
305
+ };
306
+ }
307
+ var import_api3;
308
+ var init_logging_response_handler = __esm({
309
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/logging-response-handler.js"() {
310
+ "use strict";
311
+ import_api3 = require("@opentelemetry/api");
312
+ }
313
+ });
314
+
315
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-export-delegate.js
316
+ function createOtlpExportDelegate(components, settings) {
317
+ return new OTLPExportDelegate(components.transport, components.serializer, createLoggingPartialSuccessResponseHandler(), components.promiseHandler, settings.timeout);
318
+ }
319
+ var import_api4, OTLPExportDelegate;
320
+ var init_otlp_export_delegate = __esm({
321
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-export-delegate.js"() {
322
+ "use strict";
323
+ init_esm();
324
+ init_types();
325
+ init_logging_response_handler();
326
+ import_api4 = require("@opentelemetry/api");
327
+ OTLPExportDelegate = class {
328
+ _diagLogger;
329
+ _transport;
330
+ _serializer;
331
+ _responseHandler;
332
+ _promiseQueue;
333
+ _timeout;
334
+ constructor(transport, serializer, responseHandler, promiseQueue, timeout) {
335
+ this._transport = transport;
336
+ this._serializer = serializer;
337
+ this._responseHandler = responseHandler;
338
+ this._promiseQueue = promiseQueue;
339
+ this._timeout = timeout;
340
+ this._diagLogger = import_api4.diag.createComponentLogger({
341
+ namespace: "OTLPExportDelegate"
342
+ });
343
+ }
344
+ export(internalRepresentation, resultCallback) {
345
+ this._diagLogger.debug("items to be sent", internalRepresentation);
346
+ if (this._promiseQueue.hasReachedLimit()) {
347
+ resultCallback({
348
+ code: ExportResultCode.FAILED,
349
+ error: new Error("Concurrent export limit reached")
350
+ });
351
+ return;
352
+ }
353
+ const serializedRequest = this._serializer.serializeRequest(internalRepresentation);
354
+ if (serializedRequest == null) {
355
+ resultCallback({
356
+ code: ExportResultCode.FAILED,
357
+ error: new Error("Nothing to send")
358
+ });
359
+ return;
360
+ }
361
+ this._promiseQueue.pushPromise(this._transport.send(serializedRequest, this._timeout).then((response) => {
362
+ if (response.status === "success") {
363
+ if (response.data != null) {
364
+ try {
365
+ this._responseHandler.handleResponse(this._serializer.deserializeResponse(response.data));
366
+ } catch (e) {
367
+ this._diagLogger.warn("Export succeeded but could not deserialize response - is the response specification compliant?", e, response.data);
368
+ }
369
+ }
370
+ resultCallback({
371
+ code: ExportResultCode.SUCCESS
372
+ });
373
+ return;
374
+ } else if (response.status === "failure" && response.error) {
375
+ resultCallback({
376
+ code: ExportResultCode.FAILED,
377
+ error: response.error
378
+ });
379
+ return;
380
+ } else if (response.status === "retryable") {
381
+ resultCallback({
382
+ code: ExportResultCode.FAILED,
383
+ error: response.error ?? new OTLPExporterError("Export failed with retryable status")
384
+ });
385
+ } else {
386
+ resultCallback({
387
+ code: ExportResultCode.FAILED,
388
+ error: new OTLPExporterError("Export failed with unknown error")
389
+ });
390
+ }
391
+ }, (reason) => resultCallback({
392
+ code: ExportResultCode.FAILED,
393
+ error: reason
394
+ })));
395
+ }
396
+ forceFlush() {
397
+ return this._promiseQueue.awaitAll();
398
+ }
399
+ async shutdown() {
400
+ this._diagLogger.debug("shutdown started");
401
+ await this.forceFlush();
402
+ this._transport.shutdown();
403
+ }
404
+ };
405
+ }
406
+ });
407
+
408
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/index.js
409
+ var init_esm2 = __esm({
410
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/index.js"() {
411
+ "use strict";
412
+ init_OTLPExporterBase();
413
+ }
414
+ });
415
+
416
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/common/hex-to-binary.js
417
+ function intValue(charCode) {
418
+ if (charCode >= 48 && charCode <= 57) {
419
+ return charCode - 48;
420
+ }
421
+ if (charCode >= 97 && charCode <= 102) {
422
+ return charCode - 87;
423
+ }
424
+ return charCode - 55;
425
+ }
426
+ function hexToBinary(hexStr) {
427
+ const buf = new Uint8Array(hexStr.length / 2);
428
+ let offset = 0;
429
+ for (let i = 0; i < hexStr.length; i += 2) {
430
+ const hi = intValue(hexStr.charCodeAt(i));
431
+ const lo = intValue(hexStr.charCodeAt(i + 1));
432
+ buf[offset++] = hi << 4 | lo;
433
+ }
434
+ return buf;
435
+ }
436
+ var init_hex_to_binary = __esm({
437
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/common/hex-to-binary.js"() {
438
+ "use strict";
439
+ }
440
+ });
441
+
442
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/common/utils.js
443
+ function hrTimeToNanos(hrTime2) {
444
+ const NANOSECONDS = BigInt(1e9);
445
+ return BigInt(Math.trunc(hrTime2[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime2[1]));
446
+ }
447
+ function toLongBits(value) {
448
+ const low = Number(BigInt.asUintN(32, value));
449
+ const high = Number(BigInt.asUintN(32, value >> BigInt(32)));
450
+ return { low, high };
451
+ }
452
+ function encodeAsLongBits(hrTime2) {
453
+ const nanos = hrTimeToNanos(hrTime2);
454
+ return toLongBits(nanos);
455
+ }
456
+ function encodeAsString(hrTime2) {
457
+ const nanos = hrTimeToNanos(hrTime2);
458
+ return nanos.toString();
459
+ }
460
+ function identity(value) {
461
+ return value;
462
+ }
463
+ function optionalHexToBinary(str) {
464
+ if (str === void 0)
465
+ return void 0;
466
+ return hexToBinary(str);
467
+ }
468
+ function getOtlpEncoder(options) {
469
+ if (options === void 0) {
470
+ return DEFAULT_ENCODER;
471
+ }
472
+ const useLongBits = options.useLongBits ?? true;
473
+ const useHex = options.useHex ?? false;
474
+ return {
475
+ encodeHrTime: useLongBits ? encodeAsLongBits : encodeTimestamp,
476
+ encodeSpanContext: useHex ? identity : hexToBinary,
477
+ encodeOptionalSpanContext: useHex ? identity : optionalHexToBinary
478
+ };
479
+ }
480
+ var encodeTimestamp, DEFAULT_ENCODER;
481
+ var init_utils2 = __esm({
482
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/common/utils.js"() {
483
+ "use strict";
484
+ init_esm();
485
+ init_hex_to_binary();
486
+ encodeTimestamp = typeof BigInt !== "undefined" ? encodeAsString : hrTimeToNanoseconds;
487
+ DEFAULT_ENCODER = {
488
+ encodeHrTime: encodeAsLongBits,
489
+ encodeSpanContext: hexToBinary,
490
+ encodeOptionalSpanContext: optionalHexToBinary
491
+ };
492
+ }
493
+ });
494
+
495
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js
496
+ function createResource(resource) {
497
+ const result = {
498
+ attributes: toAttributes(resource.attributes),
499
+ droppedAttributesCount: 0
500
+ };
501
+ const schemaUrl = resource.schemaUrl;
502
+ if (schemaUrl && schemaUrl !== "")
503
+ result.schemaUrl = schemaUrl;
504
+ return result;
505
+ }
506
+ function createInstrumentationScope(scope) {
507
+ return {
508
+ name: scope.name,
509
+ version: scope.version
510
+ };
511
+ }
512
+ function toAttributes(attributes) {
513
+ return Object.keys(attributes).map((key) => toKeyValue(key, attributes[key]));
514
+ }
515
+ function toKeyValue(key, value) {
516
+ return {
517
+ key,
518
+ value: toAnyValue(value)
519
+ };
520
+ }
521
+ function toAnyValue(value) {
522
+ const t = typeof value;
523
+ if (t === "string")
524
+ return { stringValue: value };
525
+ if (t === "number") {
526
+ if (!Number.isInteger(value))
527
+ return { doubleValue: value };
528
+ return { intValue: value };
529
+ }
530
+ if (t === "boolean")
531
+ return { boolValue: value };
532
+ if (value instanceof Uint8Array)
533
+ return { bytesValue: value };
534
+ if (Array.isArray(value))
535
+ return { arrayValue: { values: value.map(toAnyValue) } };
536
+ if (t === "object" && value != null)
537
+ return {
538
+ kvlistValue: {
539
+ values: Object.entries(value).map(([k, v]) => toKeyValue(k, v))
540
+ }
541
+ };
542
+ return {};
543
+ }
544
+ var init_internal = __esm({
545
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js"() {
546
+ "use strict";
547
+ }
548
+ });
549
+
550
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/internal.js
551
+ function buildSpanFlagsFrom(traceFlags, isRemote) {
552
+ let flags = traceFlags & 255 | SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK;
553
+ if (isRemote) {
554
+ flags |= SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK;
555
+ }
556
+ return flags;
557
+ }
558
+ function sdkSpanToOtlpSpan(span, encoder) {
559
+ const ctx = span.spanContext();
560
+ const status = span.status;
561
+ const parentSpanId = span.parentSpanContext?.spanId ? encoder.encodeSpanContext(span.parentSpanContext?.spanId) : void 0;
562
+ return {
563
+ traceId: encoder.encodeSpanContext(ctx.traceId),
564
+ spanId: encoder.encodeSpanContext(ctx.spanId),
565
+ parentSpanId,
566
+ traceState: ctx.traceState?.serialize(),
567
+ name: span.name,
568
+ // Span kind is offset by 1 because the API does not define a value for unset
569
+ kind: span.kind == null ? 0 : span.kind + 1,
570
+ startTimeUnixNano: encoder.encodeHrTime(span.startTime),
571
+ endTimeUnixNano: encoder.encodeHrTime(span.endTime),
572
+ attributes: toAttributes(span.attributes),
573
+ droppedAttributesCount: span.droppedAttributesCount,
574
+ events: span.events.map((event) => toOtlpSpanEvent(event, encoder)),
575
+ droppedEventsCount: span.droppedEventsCount,
576
+ status: {
577
+ // API and proto enums share the same values
578
+ code: status.code,
579
+ message: status.message
580
+ },
581
+ links: span.links.map((link) => toOtlpLink(link, encoder)),
582
+ droppedLinksCount: span.droppedLinksCount,
583
+ flags: buildSpanFlagsFrom(ctx.traceFlags, span.parentSpanContext?.isRemote)
584
+ };
585
+ }
586
+ function toOtlpLink(link, encoder) {
587
+ return {
588
+ attributes: link.attributes ? toAttributes(link.attributes) : [],
589
+ spanId: encoder.encodeSpanContext(link.context.spanId),
590
+ traceId: encoder.encodeSpanContext(link.context.traceId),
591
+ traceState: link.context.traceState?.serialize(),
592
+ droppedAttributesCount: link.droppedAttributesCount || 0,
593
+ flags: buildSpanFlagsFrom(link.context.traceFlags, link.context.isRemote)
594
+ };
595
+ }
596
+ function toOtlpSpanEvent(timedEvent, encoder) {
597
+ return {
598
+ attributes: timedEvent.attributes ? toAttributes(timedEvent.attributes) : [],
599
+ name: timedEvent.name,
600
+ timeUnixNano: encoder.encodeHrTime(timedEvent.time),
601
+ droppedAttributesCount: timedEvent.droppedAttributesCount || 0
602
+ };
603
+ }
604
+ function createExportTraceServiceRequest(spans, options) {
605
+ const encoder = getOtlpEncoder(options);
606
+ return {
607
+ resourceSpans: spanRecordsToResourceSpans(spans, encoder)
608
+ };
609
+ }
610
+ function createResourceMap(readableSpans) {
611
+ const resourceMap = /* @__PURE__ */ new Map();
612
+ for (const record of readableSpans) {
613
+ let ilsMap = resourceMap.get(record.resource);
614
+ if (!ilsMap) {
615
+ ilsMap = /* @__PURE__ */ new Map();
616
+ resourceMap.set(record.resource, ilsMap);
617
+ }
618
+ const instrumentationScopeKey = `${record.instrumentationScope.name}@${record.instrumentationScope.version || ""}:${record.instrumentationScope.schemaUrl || ""}`;
619
+ let records = ilsMap.get(instrumentationScopeKey);
620
+ if (!records) {
621
+ records = [];
622
+ ilsMap.set(instrumentationScopeKey, records);
623
+ }
624
+ records.push(record);
625
+ }
626
+ return resourceMap;
627
+ }
628
+ function spanRecordsToResourceSpans(readableSpans, encoder) {
629
+ const resourceMap = createResourceMap(readableSpans);
630
+ const out = [];
631
+ const entryIterator = resourceMap.entries();
632
+ let entry = entryIterator.next();
633
+ while (!entry.done) {
634
+ const [resource, ilmMap] = entry.value;
635
+ const scopeResourceSpans = [];
636
+ const ilmIterator = ilmMap.values();
637
+ let ilmEntry = ilmIterator.next();
638
+ while (!ilmEntry.done) {
639
+ const scopeSpans = ilmEntry.value;
640
+ if (scopeSpans.length > 0) {
641
+ const spans = scopeSpans.map((readableSpan) => sdkSpanToOtlpSpan(readableSpan, encoder));
642
+ scopeResourceSpans.push({
643
+ scope: createInstrumentationScope(scopeSpans[0].instrumentationScope),
644
+ spans,
645
+ schemaUrl: scopeSpans[0].instrumentationScope.schemaUrl
646
+ });
647
+ }
648
+ ilmEntry = ilmIterator.next();
649
+ }
650
+ const processedResource = createResource(resource);
651
+ const transformedSpans = {
652
+ resource: processedResource,
653
+ scopeSpans: scopeResourceSpans,
654
+ schemaUrl: processedResource.schemaUrl
655
+ };
656
+ out.push(transformedSpans);
657
+ entry = entryIterator.next();
658
+ }
659
+ return out;
660
+ }
661
+ var SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK, SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK;
662
+ var init_internal2 = __esm({
663
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/internal.js"() {
664
+ "use strict";
665
+ init_internal();
666
+ init_utils2();
667
+ SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK = 256;
668
+ SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK = 512;
669
+ }
670
+ });
671
+
672
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/trace.js
673
+ var JsonTraceSerializer;
674
+ var init_trace = __esm({
675
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/trace.js"() {
676
+ "use strict";
677
+ init_internal2();
678
+ JsonTraceSerializer = {
679
+ serializeRequest: (arg) => {
680
+ const request = createExportTraceServiceRequest(arg, {
681
+ useHex: true,
682
+ useLongBits: false
683
+ });
684
+ const encoder = new TextEncoder();
685
+ return encoder.encode(JSON.stringify(request));
686
+ },
687
+ deserializeResponse: (arg) => {
688
+ if (arg.length === 0) {
689
+ return {};
690
+ }
691
+ const decoder = new TextDecoder();
692
+ return JSON.parse(decoder.decode(arg));
693
+ }
694
+ };
695
+ }
696
+ });
697
+
698
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/index.js
699
+ var init_json = __esm({
700
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/index.js"() {
701
+ "use strict";
702
+ init_trace();
703
+ }
704
+ });
705
+
706
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/index.js
707
+ var init_esm3 = __esm({
708
+ "../../node_modules/.pnpm/@opentelemetry+otlp-transformer@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-transformer/build/esm/index.js"() {
709
+ "use strict";
710
+ init_json();
711
+ }
712
+ });
713
+
714
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/util.js
715
+ function validateAndNormalizeHeaders(partialHeaders) {
716
+ const headers = {};
717
+ Object.entries(partialHeaders ?? {}).forEach(([key, value]) => {
718
+ if (typeof value !== "undefined") {
719
+ headers[key] = String(value);
720
+ } else {
721
+ import_api5.diag.warn(`Header "${key}" has invalid value (${value}) and will be ignored`);
722
+ }
723
+ });
724
+ return headers;
725
+ }
726
+ var import_api5;
727
+ var init_util = __esm({
728
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/util.js"() {
729
+ "use strict";
730
+ import_api5 = require("@opentelemetry/api");
731
+ }
732
+ });
733
+
734
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-http-configuration.js
735
+ function mergeHeaders(userProvidedHeaders, fallbackHeaders, defaultHeaders) {
736
+ return async () => {
737
+ const requiredHeaders = {
738
+ ...await defaultHeaders()
739
+ };
740
+ const headers = {};
741
+ if (fallbackHeaders != null) {
742
+ Object.assign(headers, await fallbackHeaders());
743
+ }
744
+ if (userProvidedHeaders != null) {
745
+ Object.assign(headers, validateAndNormalizeHeaders(await userProvidedHeaders()));
746
+ }
747
+ return Object.assign(headers, requiredHeaders);
748
+ };
749
+ }
750
+ function validateUserProvidedUrl(url) {
751
+ if (url == null) {
752
+ return void 0;
753
+ }
754
+ try {
755
+ const base = globalThis.location?.href;
756
+ return new URL(url, base).href;
757
+ } catch {
758
+ throw new Error(`Configuration: Could not parse user-provided export URL: '${url}'`);
759
+ }
760
+ }
761
+ function mergeOtlpHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) {
762
+ return {
763
+ ...mergeOtlpSharedConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration),
764
+ headers: mergeHeaders(userProvidedConfiguration.headers, fallbackConfiguration.headers, defaultConfiguration.headers),
765
+ url: validateUserProvidedUrl(userProvidedConfiguration.url) ?? fallbackConfiguration.url ?? defaultConfiguration.url
766
+ };
767
+ }
768
+ function getHttpConfigurationDefaults(requiredHeaders, signalResourcePath) {
769
+ return {
770
+ ...getSharedConfigurationDefaults(),
771
+ headers: async () => requiredHeaders,
772
+ url: "http://localhost:4318/" + signalResourcePath
773
+ };
774
+ }
775
+ var init_otlp_http_configuration = __esm({
776
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-http-configuration.js"() {
777
+ "use strict";
778
+ init_shared_configuration();
779
+ init_util();
780
+ }
781
+ });
782
+
783
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-node-http-configuration.js
784
+ function httpAgentFactoryFromOptions(options) {
785
+ return async (protocol) => {
786
+ const isInsecure = protocol === "http:";
787
+ const module2 = isInsecure ? import("http") : import("https");
788
+ const { Agent } = await module2;
789
+ if (isInsecure) {
790
+ const { ca, cert, key, ...insecureOptions } = options;
791
+ return new Agent(insecureOptions);
792
+ }
793
+ return new Agent(options);
794
+ };
795
+ }
796
+ function mergeOtlpNodeHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) {
797
+ return {
798
+ ...mergeOtlpHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration),
799
+ agentFactory: userProvidedConfiguration.agentFactory ?? fallbackConfiguration.agentFactory ?? defaultConfiguration.agentFactory,
800
+ userAgent: userProvidedConfiguration.userAgent
801
+ };
802
+ }
803
+ function getNodeHttpConfigurationDefaults(requiredHeaders, signalResourcePath) {
804
+ return {
805
+ ...getHttpConfigurationDefaults(requiredHeaders, signalResourcePath),
806
+ agentFactory: httpAgentFactoryFromOptions({ keepAlive: true })
807
+ };
808
+ }
809
+ var init_otlp_node_http_configuration = __esm({
810
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-node-http-configuration.js"() {
811
+ "use strict";
812
+ init_otlp_http_configuration();
813
+ }
814
+ });
815
+
816
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/is-export-retryable.js
817
+ function isExportHTTPErrorRetryable(statusCode) {
818
+ return statusCode === 429 || statusCode === 502 || statusCode === 503 || statusCode === 504;
819
+ }
820
+ function parseRetryAfterToMills(retryAfter) {
821
+ if (retryAfter == null) {
822
+ return void 0;
823
+ }
824
+ const seconds = Number.parseInt(retryAfter, 10);
825
+ if (Number.isInteger(seconds)) {
826
+ return seconds > 0 ? seconds * 1e3 : -1;
827
+ }
828
+ const delay = new Date(retryAfter).getTime() - Date.now();
829
+ if (delay >= 0) {
830
+ return delay;
831
+ }
832
+ return 0;
833
+ }
834
+ var init_is_export_retryable = __esm({
835
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/is-export-retryable.js"() {
836
+ "use strict";
837
+ }
838
+ });
839
+
840
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/version.js
841
+ var VERSION;
842
+ var init_version = __esm({
843
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/version.js"() {
844
+ "use strict";
845
+ VERSION = "0.210.0";
846
+ }
847
+ });
848
+
849
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/http-transport-utils.js
850
+ function sendWithHttp(request, url, headers, compression, userAgent, agent, data, onDone, timeoutMillis) {
851
+ const parsedUrl = new URL(url);
852
+ if (userAgent) {
853
+ headers["User-Agent"] = `${userAgent} ${DEFAULT_USER_AGENT}`;
854
+ } else {
855
+ headers["User-Agent"] = DEFAULT_USER_AGENT;
856
+ }
857
+ const options = {
858
+ hostname: parsedUrl.hostname,
859
+ port: parsedUrl.port,
860
+ path: parsedUrl.pathname,
861
+ method: "POST",
862
+ headers,
863
+ agent
864
+ };
865
+ const req = request(options, (res) => {
866
+ const responseData = [];
867
+ res.on("data", (chunk) => responseData.push(chunk));
868
+ res.on("end", () => {
869
+ if (res.statusCode && res.statusCode < 299) {
870
+ onDone({
871
+ status: "success",
872
+ data: Buffer.concat(responseData)
873
+ });
874
+ } else if (res.statusCode && isExportHTTPErrorRetryable(res.statusCode)) {
875
+ onDone({
876
+ status: "retryable",
877
+ retryInMillis: parseRetryAfterToMills(res.headers["retry-after"])
878
+ });
879
+ } else {
880
+ const error = new OTLPExporterError(res.statusMessage, res.statusCode, Buffer.concat(responseData).toString());
881
+ onDone({
882
+ status: "failure",
883
+ error
884
+ });
885
+ }
886
+ });
887
+ });
888
+ req.setTimeout(timeoutMillis, () => {
889
+ req.destroy();
890
+ onDone({
891
+ status: "retryable",
892
+ error: new Error("Request timed out")
893
+ });
894
+ });
895
+ req.on("error", (error) => {
896
+ if (isHttpTransportNetworkErrorRetryable(error)) {
897
+ onDone({
898
+ status: "retryable",
899
+ error
900
+ });
901
+ } else {
902
+ onDone({
903
+ status: "failure",
904
+ error
905
+ });
906
+ }
907
+ });
908
+ compressAndSend(req, compression, data, (error) => {
909
+ onDone({
910
+ status: "failure",
911
+ error
912
+ });
913
+ });
914
+ }
915
+ function compressAndSend(req, compression, data, onError) {
916
+ let dataStream = readableFromUint8Array(data);
917
+ if (compression === "gzip") {
918
+ req.setHeader("Content-Encoding", "gzip");
919
+ dataStream = dataStream.on("error", onError).pipe(zlib.createGzip()).on("error", onError);
920
+ }
921
+ dataStream.pipe(req).on("error", onError);
922
+ }
923
+ function readableFromUint8Array(buff) {
924
+ const readable = new import_stream.Readable();
925
+ readable.push(buff);
926
+ readable.push(null);
927
+ return readable;
928
+ }
929
+ function isHttpTransportNetworkErrorRetryable(error) {
930
+ const RETRYABLE_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
931
+ "ECONNRESET",
932
+ "ECONNREFUSED",
933
+ "EPIPE",
934
+ "ETIMEDOUT",
935
+ "EAI_AGAIN",
936
+ "ENOTFOUND",
937
+ "ENETUNREACH",
938
+ "EHOSTUNREACH"
939
+ ]);
940
+ if ("code" in error && typeof error.code === "string") {
941
+ return RETRYABLE_NETWORK_ERROR_CODES.has(error.code);
942
+ }
943
+ return false;
944
+ }
945
+ var zlib, import_stream, DEFAULT_USER_AGENT;
946
+ var init_http_transport_utils = __esm({
947
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/http-transport-utils.js"() {
948
+ "use strict";
949
+ zlib = __toESM(require("zlib"));
950
+ import_stream = require("stream");
951
+ init_is_export_retryable();
952
+ init_types();
953
+ init_version();
954
+ DEFAULT_USER_AGENT = `OTel-OTLP-Exporter-JavaScript/${VERSION}`;
955
+ }
956
+ });
957
+
958
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/http-exporter-transport.js
959
+ async function requestFunctionFactory(protocol) {
960
+ const module2 = protocol === "http:" ? import("http") : import("https");
961
+ const { request } = await module2;
962
+ return request;
963
+ }
964
+ function createHttpExporterTransport(parameters) {
965
+ return new HttpExporterTransport(parameters);
966
+ }
967
+ var HttpExporterTransport;
968
+ var init_http_exporter_transport = __esm({
969
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/http-exporter-transport.js"() {
970
+ "use strict";
971
+ init_http_transport_utils();
972
+ HttpExporterTransport = class {
973
+ _utils = null;
974
+ _parameters;
975
+ constructor(parameters) {
976
+ this._parameters = parameters;
977
+ }
978
+ async send(data, timeoutMillis) {
979
+ const { agent, request } = await this._loadUtils();
980
+ const headers = await this._parameters.headers();
981
+ return new Promise((resolve2) => {
982
+ sendWithHttp(request, this._parameters.url, headers, this._parameters.compression, this._parameters.userAgent, agent, data, (result) => {
983
+ resolve2(result);
984
+ }, timeoutMillis);
985
+ });
986
+ }
987
+ shutdown() {
988
+ }
989
+ async _loadUtils() {
990
+ let utils = this._utils;
991
+ if (utils === null) {
992
+ const protocol = new URL(this._parameters.url).protocol;
993
+ const [agent, request] = await Promise.all([
994
+ this._parameters.agentFactory(protocol),
995
+ requestFunctionFactory(protocol)
996
+ ]);
997
+ utils = this._utils = { agent, request };
998
+ }
999
+ return utils;
1000
+ }
1001
+ };
1002
+ }
1003
+ });
1004
+
1005
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/retrying-transport.js
1006
+ function getJitter() {
1007
+ return Math.random() * (2 * JITTER) - JITTER;
1008
+ }
1009
+ function createRetryingTransport(options) {
1010
+ return new RetryingTransport(options.transport);
1011
+ }
1012
+ var import_api6, MAX_ATTEMPTS, INITIAL_BACKOFF, MAX_BACKOFF, BACKOFF_MULTIPLIER, JITTER, RetryingTransport;
1013
+ var init_retrying_transport = __esm({
1014
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/retrying-transport.js"() {
1015
+ "use strict";
1016
+ import_api6 = require("@opentelemetry/api");
1017
+ MAX_ATTEMPTS = 5;
1018
+ INITIAL_BACKOFF = 1e3;
1019
+ MAX_BACKOFF = 5e3;
1020
+ BACKOFF_MULTIPLIER = 1.5;
1021
+ JITTER = 0.2;
1022
+ RetryingTransport = class {
1023
+ _transport;
1024
+ constructor(transport) {
1025
+ this._transport = transport;
1026
+ }
1027
+ retry(data, timeoutMillis, inMillis) {
1028
+ return new Promise((resolve2, reject) => {
1029
+ setTimeout(() => {
1030
+ this._transport.send(data, timeoutMillis).then(resolve2, reject);
1031
+ }, inMillis);
1032
+ });
1033
+ }
1034
+ async send(data, timeoutMillis) {
1035
+ let attempts = MAX_ATTEMPTS;
1036
+ let nextBackoff = INITIAL_BACKOFF;
1037
+ const deadline = Date.now() + timeoutMillis;
1038
+ let result = await this._transport.send(data, timeoutMillis);
1039
+ while (result.status === "retryable" && attempts > 0) {
1040
+ attempts--;
1041
+ const backoff = Math.max(Math.min(nextBackoff * (1 + getJitter()), MAX_BACKOFF), 0);
1042
+ nextBackoff = nextBackoff * BACKOFF_MULTIPLIER;
1043
+ const retryInMillis = result.retryInMillis ?? backoff;
1044
+ const remainingTimeoutMillis = deadline - Date.now();
1045
+ if (retryInMillis > remainingTimeoutMillis) {
1046
+ import_api6.diag.info(`Export retry time ${Math.round(retryInMillis)}ms exceeds remaining timeout ${Math.round(remainingTimeoutMillis)}ms, not retrying further.`);
1047
+ return result;
1048
+ }
1049
+ import_api6.diag.verbose(`Scheduling export retry in ${Math.round(retryInMillis)}ms`);
1050
+ result = await this.retry(data, remainingTimeoutMillis, retryInMillis);
1051
+ }
1052
+ if (result.status === "success") {
1053
+ import_api6.diag.verbose(`Export succeded after ${MAX_ATTEMPTS - attempts} retry attempts.`);
1054
+ } else if (result.status === "retryable") {
1055
+ import_api6.diag.info(`Export failed after maximum retry attempts (${MAX_ATTEMPTS}).`);
1056
+ } else {
1057
+ import_api6.diag.info(`Export failed with non-retryable error: ${result.error}`);
1058
+ }
1059
+ return result;
1060
+ }
1061
+ shutdown() {
1062
+ return this._transport.shutdown();
1063
+ }
1064
+ };
1065
+ }
1066
+ });
1067
+
1068
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-http-export-delegate.js
1069
+ function createOtlpHttpExportDelegate(options, serializer) {
1070
+ return createOtlpExportDelegate({
1071
+ transport: createRetryingTransport({
1072
+ transport: createHttpExporterTransport(options)
1073
+ }),
1074
+ serializer,
1075
+ promiseHandler: createBoundedQueueExportPromiseHandler(options)
1076
+ }, { timeout: options.timeoutMillis });
1077
+ }
1078
+ var init_otlp_http_export_delegate = __esm({
1079
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-http-export-delegate.js"() {
1080
+ "use strict";
1081
+ init_otlp_export_delegate();
1082
+ init_http_exporter_transport();
1083
+ init_bounded_queue_export_promise_handler();
1084
+ init_retrying_transport();
1085
+ }
1086
+ });
1087
+
1088
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/shared-env-configuration.js
1089
+ function parseAndValidateTimeoutFromEnv(timeoutEnvVar) {
1090
+ const envTimeout = getNumberFromEnv(timeoutEnvVar);
1091
+ if (envTimeout != null) {
1092
+ if (Number.isFinite(envTimeout) && envTimeout > 0) {
1093
+ return envTimeout;
1094
+ }
1095
+ import_api7.diag.warn(`Configuration: ${timeoutEnvVar} is invalid, expected number greater than 0 (actual: ${envTimeout})`);
1096
+ }
1097
+ return void 0;
1098
+ }
1099
+ function getTimeoutFromEnv(signalIdentifier) {
1100
+ const specificTimeout = parseAndValidateTimeoutFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_TIMEOUT`);
1101
+ const nonSpecificTimeout = parseAndValidateTimeoutFromEnv("OTEL_EXPORTER_OTLP_TIMEOUT");
1102
+ return specificTimeout ?? nonSpecificTimeout;
1103
+ }
1104
+ function parseAndValidateCompressionFromEnv(compressionEnvVar) {
1105
+ const compression = getStringFromEnv(compressionEnvVar)?.trim();
1106
+ if (compression == null || compression === "none" || compression === "gzip") {
1107
+ return compression;
1108
+ }
1109
+ import_api7.diag.warn(`Configuration: ${compressionEnvVar} is invalid, expected 'none' or 'gzip' (actual: '${compression}')`);
1110
+ return void 0;
1111
+ }
1112
+ function getCompressionFromEnv(signalIdentifier) {
1113
+ const specificCompression = parseAndValidateCompressionFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_COMPRESSION`);
1114
+ const nonSpecificCompression = parseAndValidateCompressionFromEnv("OTEL_EXPORTER_OTLP_COMPRESSION");
1115
+ return specificCompression ?? nonSpecificCompression;
1116
+ }
1117
+ function getSharedConfigurationFromEnvironment(signalIdentifier) {
1118
+ return {
1119
+ timeoutMillis: getTimeoutFromEnv(signalIdentifier),
1120
+ compression: getCompressionFromEnv(signalIdentifier)
1121
+ };
1122
+ }
1123
+ var import_api7;
1124
+ var init_shared_env_configuration = __esm({
1125
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/shared-env-configuration.js"() {
1126
+ "use strict";
1127
+ init_esm();
1128
+ import_api7 = require("@opentelemetry/api");
1129
+ }
1130
+ });
1131
+
1132
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-node-http-env-configuration.js
1133
+ function getStaticHeadersFromEnv(signalIdentifier) {
1134
+ const signalSpecificRawHeaders = getStringFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_HEADERS`);
1135
+ const nonSignalSpecificRawHeaders = getStringFromEnv("OTEL_EXPORTER_OTLP_HEADERS");
1136
+ const signalSpecificHeaders = parseKeyPairsIntoRecord(signalSpecificRawHeaders);
1137
+ const nonSignalSpecificHeaders = parseKeyPairsIntoRecord(nonSignalSpecificRawHeaders);
1138
+ if (Object.keys(signalSpecificHeaders).length === 0 && Object.keys(nonSignalSpecificHeaders).length === 0) {
1139
+ return void 0;
1140
+ }
1141
+ return Object.assign({}, parseKeyPairsIntoRecord(nonSignalSpecificRawHeaders), parseKeyPairsIntoRecord(signalSpecificRawHeaders));
1142
+ }
1143
+ function appendRootPathToUrlIfNeeded(url) {
1144
+ try {
1145
+ const parsedUrl = new URL(url);
1146
+ return parsedUrl.toString();
1147
+ } catch {
1148
+ import_api8.diag.warn(`Configuration: Could not parse environment-provided export URL: '${url}', falling back to undefined`);
1149
+ return void 0;
1150
+ }
1151
+ }
1152
+ function appendResourcePathToUrl(url, path2) {
1153
+ try {
1154
+ new URL(url);
1155
+ } catch {
1156
+ import_api8.diag.warn(`Configuration: Could not parse environment-provided export URL: '${url}', falling back to undefined`);
1157
+ return void 0;
1158
+ }
1159
+ if (!url.endsWith("/")) {
1160
+ url = url + "/";
1161
+ }
1162
+ url += path2;
1163
+ try {
1164
+ new URL(url);
1165
+ } catch {
1166
+ import_api8.diag.warn(`Configuration: Provided URL appended with '${path2}' is not a valid URL, using 'undefined' instead of '${url}'`);
1167
+ return void 0;
1168
+ }
1169
+ return url;
1170
+ }
1171
+ function getNonSpecificUrlFromEnv(signalResourcePath) {
1172
+ const envUrl = getStringFromEnv("OTEL_EXPORTER_OTLP_ENDPOINT");
1173
+ if (envUrl === void 0) {
1174
+ return void 0;
1175
+ }
1176
+ return appendResourcePathToUrl(envUrl, signalResourcePath);
1177
+ }
1178
+ function getSpecificUrlFromEnv(signalIdentifier) {
1179
+ const envUrl = getStringFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_ENDPOINT`);
1180
+ if (envUrl === void 0) {
1181
+ return void 0;
1182
+ }
1183
+ return appendRootPathToUrlIfNeeded(envUrl);
1184
+ }
1185
+ function readFileFromEnv(signalSpecificEnvVar, nonSignalSpecificEnvVar, warningMessage) {
1186
+ const signalSpecificPath = getStringFromEnv(signalSpecificEnvVar);
1187
+ const nonSignalSpecificPath = getStringFromEnv(nonSignalSpecificEnvVar);
1188
+ const filePath = signalSpecificPath ?? nonSignalSpecificPath;
1189
+ if (filePath != null) {
1190
+ try {
1191
+ return fs.readFileSync(path.resolve(process.cwd(), filePath));
1192
+ } catch {
1193
+ import_api8.diag.warn(warningMessage);
1194
+ return void 0;
1195
+ }
1196
+ } else {
1197
+ return void 0;
1198
+ }
1199
+ }
1200
+ function getClientCertificateFromEnv(signalIdentifier) {
1201
+ return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE", "Failed to read client certificate chain file");
1202
+ }
1203
+ function getClientKeyFromEnv(signalIdentifier) {
1204
+ return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_KEY`, "OTEL_EXPORTER_OTLP_CLIENT_KEY", "Failed to read client certificate private key file");
1205
+ }
1206
+ function getRootCertificateFromEnv(signalIdentifier) {
1207
+ return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CERTIFICATE", "Failed to read root certificate file");
1208
+ }
1209
+ function getNodeHttpConfigurationFromEnvironment(signalIdentifier, signalResourcePath) {
1210
+ return {
1211
+ ...getSharedConfigurationFromEnvironment(signalIdentifier),
1212
+ url: getSpecificUrlFromEnv(signalIdentifier) ?? getNonSpecificUrlFromEnv(signalResourcePath),
1213
+ headers: wrapStaticHeadersInFunction(getStaticHeadersFromEnv(signalIdentifier)),
1214
+ agentFactory: httpAgentFactoryFromOptions({
1215
+ keepAlive: true,
1216
+ ca: getRootCertificateFromEnv(signalIdentifier),
1217
+ cert: getClientCertificateFromEnv(signalIdentifier),
1218
+ key: getClientKeyFromEnv(signalIdentifier)
1219
+ })
1220
+ };
1221
+ }
1222
+ var fs, path, import_api8;
1223
+ var init_otlp_node_http_env_configuration = __esm({
1224
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-node-http-env-configuration.js"() {
1225
+ "use strict";
1226
+ fs = __toESM(require("fs"));
1227
+ path = __toESM(require("path"));
1228
+ init_esm();
1229
+ import_api8 = require("@opentelemetry/api");
1230
+ init_shared_env_configuration();
1231
+ init_shared_configuration();
1232
+ init_otlp_node_http_configuration();
1233
+ }
1234
+ });
1235
+
1236
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-http-options.js
1237
+ function convertLegacyHeaders(config) {
1238
+ if (typeof config.headers === "function") {
1239
+ return config.headers;
1240
+ }
1241
+ return wrapStaticHeadersInFunction(config.headers);
1242
+ }
1243
+ var init_convert_legacy_http_options = __esm({
1244
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-http-options.js"() {
1245
+ "use strict";
1246
+ init_shared_configuration();
1247
+ }
1248
+ });
1249
+
1250
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-node-http-options.js
1251
+ function convertLegacyAgentOptions(config) {
1252
+ if (typeof config.httpAgentOptions === "function") {
1253
+ return config.httpAgentOptions;
1254
+ }
1255
+ let legacy = config.httpAgentOptions;
1256
+ if (config.keepAlive != null) {
1257
+ legacy = { keepAlive: config.keepAlive, ...legacy };
1258
+ }
1259
+ if (legacy != null) {
1260
+ return httpAgentFactoryFromOptions(legacy);
1261
+ } else {
1262
+ return void 0;
1263
+ }
1264
+ }
1265
+ function convertLegacyHttpOptions(config, signalIdentifier, signalResourcePath, requiredHeaders) {
1266
+ if (config.metadata) {
1267
+ import_api9.diag.warn("Metadata cannot be set when using http");
1268
+ }
1269
+ return mergeOtlpNodeHttpConfigurationWithDefaults({
1270
+ url: config.url,
1271
+ headers: convertLegacyHeaders(config),
1272
+ concurrencyLimit: config.concurrencyLimit,
1273
+ timeoutMillis: config.timeoutMillis,
1274
+ compression: config.compression,
1275
+ agentFactory: convertLegacyAgentOptions(config),
1276
+ userAgent: config.userAgent
1277
+ }, getNodeHttpConfigurationFromEnvironment(signalIdentifier, signalResourcePath), getNodeHttpConfigurationDefaults(requiredHeaders, signalResourcePath));
1278
+ }
1279
+ var import_api9;
1280
+ var init_convert_legacy_node_http_options = __esm({
1281
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-node-http-options.js"() {
1282
+ "use strict";
1283
+ import_api9 = require("@opentelemetry/api");
1284
+ init_otlp_node_http_configuration();
1285
+ init_index_node_http();
1286
+ init_otlp_node_http_env_configuration();
1287
+ init_convert_legacy_http_options();
1288
+ }
1289
+ });
1290
+
1291
+ // ../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/index-node-http.js
1292
+ var init_index_node_http = __esm({
1293
+ "../../node_modules/.pnpm/@opentelemetry+otlp-exporter-base@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/otlp-exporter-base/build/esm/index-node-http.js"() {
1294
+ "use strict";
1295
+ init_otlp_node_http_configuration();
1296
+ init_otlp_http_export_delegate();
1297
+ init_convert_legacy_node_http_options();
1298
+ }
1299
+ });
1300
+
1301
+ // ../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/node/OTLPTraceExporter.js
1302
+ var OTLPTraceExporter;
1303
+ var init_OTLPTraceExporter = __esm({
1304
+ "../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/node/OTLPTraceExporter.js"() {
1305
+ "use strict";
1306
+ init_esm2();
1307
+ init_esm3();
1308
+ init_index_node_http();
1309
+ OTLPTraceExporter = class extends OTLPExporterBase {
1310
+ constructor(config = {}) {
1311
+ super(createOtlpHttpExportDelegate(convertLegacyHttpOptions(config, "TRACES", "v1/traces", {
1312
+ "Content-Type": "application/json"
1313
+ }), JsonTraceSerializer));
1314
+ }
1315
+ };
1316
+ }
1317
+ });
1318
+
1319
+ // ../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/node/index.js
1320
+ var init_node2 = __esm({
1321
+ "../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/node/index.js"() {
1322
+ "use strict";
1323
+ init_OTLPTraceExporter();
1324
+ }
1325
+ });
1326
+
1327
+ // ../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/index.js
1328
+ var init_platform2 = __esm({
1329
+ "../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/index.js"() {
1330
+ "use strict";
1331
+ init_node2();
1332
+ }
1333
+ });
1334
+
1335
+ // ../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/index.js
1336
+ var esm_exports = {};
1337
+ __export(esm_exports, {
1338
+ OTLPTraceExporter: () => OTLPTraceExporter
1339
+ });
1340
+ var init_esm4 = __esm({
1341
+ "../../node_modules/.pnpm/@opentelemetry+exporter-trace-otlp-http@0.210.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/index.js"() {
1342
+ "use strict";
1343
+ init_platform2();
1344
+ }
1345
+ });
1346
+
1347
+ // src/server/index.ts
1348
+ var server_exports = {};
1349
+ __export(server_exports, {
1350
+ ExporterType: () => ExporterType,
1351
+ setupObservability: () => setupObservability
1352
+ });
1353
+ module.exports = __toCommonJS(server_exports);
1354
+
1355
+ // src/server/setup.ts
1356
+ var TRUTHY_ENV_VALUES = /* @__PURE__ */ new Set(["true", "1", "yes", "on"]);
1357
+ var DEFAULT_BATCH_CONFIG = {
1358
+ maxExportBatchSize: 100,
1359
+ scheduledDelayMillis: 5e3,
1360
+ maxQueueSize: 2048,
1361
+ exportTimeoutMillis: 3e4
1362
+ };
1363
+ function mergeConfigs(paramConfigs) {
1364
+ const result = {
1365
+ console: null,
1366
+ otlp: [],
1367
+ custom: []
1368
+ };
1369
+ const autoTracesStdout = process.env.AUTO_TRACES_STDOUT?.toLowerCase() || "";
1370
+ if (TRUTHY_ENV_VALUES.has(autoTracesStdout)) {
1371
+ result.console = { type: "console" };
1372
+ console.debug(
1373
+ `[Observability] AUTO_TRACES_STDOUT=${autoTracesStdout}, console exporter enabled`
1374
+ );
1375
+ }
1376
+ for (const config of paramConfigs) {
1377
+ switch (config.type) {
1378
+ case "console":
1379
+ result.console = { ...result.console, ...config };
1380
+ break;
1381
+ case "otlp":
1382
+ result.otlp.push(config);
1383
+ break;
1384
+ case "custom":
1385
+ result.custom.push(config);
1386
+ break;
1387
+ }
1388
+ }
1389
+ return result;
1390
+ }
1391
+ function resolveBatchConfig(batch) {
1392
+ return { ...DEFAULT_BATCH_CONFIG, ...batch };
1393
+ }
1394
+ async function safeSetup(name, setupFn) {
1395
+ try {
1396
+ await setupFn();
1397
+ } catch (error) {
1398
+ console.warn(
1399
+ `[Observability] ${name} setup failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`
1400
+ );
1401
+ }
1402
+ }
1403
+ async function setupConsoleExporter(config) {
1404
+ const { trace } = await import("@opentelemetry/api");
1405
+ const { resourceFromAttributes } = await import("@opentelemetry/resources");
1406
+ const { NodeTracerProvider } = await import("@opentelemetry/sdk-trace-node");
1407
+ const { ConsoleSpanExporter, BatchSpanProcessor } = await import("@opentelemetry/sdk-trace-base");
1408
+ const batchConfig = resolveBatchConfig(config.batch);
1409
+ let provider = trace.getTracerProvider();
1410
+ const isRealProvider = "addSpanProcessor" in provider;
1411
+ if (isRealProvider) {
1412
+ const exporter = new ConsoleSpanExporter();
1413
+ const processor = new BatchSpanProcessor(exporter, batchConfig);
1414
+ provider.addSpanProcessor(processor);
1415
+ console.info(
1416
+ `[Observability] Console exporter configured (batch=${batchConfig.maxExportBatchSize}, delay=${batchConfig.scheduledDelayMillis}ms)`
1417
+ );
1418
+ } else {
1419
+ const resource = resourceFromAttributes({
1420
+ "service.name": process.env.OTEL_SERVICE_NAME || "ag-ui-server",
1421
+ "service.version": "1.0.0"
1422
+ });
1423
+ const exporter = new ConsoleSpanExporter();
1424
+ const processor = new BatchSpanProcessor(exporter, batchConfig);
1425
+ const tracerProvider = new NodeTracerProvider({
1426
+ resource,
1427
+ spanProcessors: [processor]
1428
+ });
1429
+ tracerProvider.register();
1430
+ console.info(
1431
+ `[Observability] Console exporter configured (batch=${batchConfig.maxExportBatchSize}, delay=${batchConfig.scheduledDelayMillis}ms)`
1432
+ );
1433
+ }
1434
+ }
1435
+ async function setupOTLPExporter(config) {
1436
+ const { trace } = await import("@opentelemetry/api");
1437
+ const { resourceFromAttributes } = await import("@opentelemetry/resources");
1438
+ const { NodeTracerProvider } = await import("@opentelemetry/sdk-trace-node");
1439
+ const { OTLPTraceExporter: OTLPTraceExporter2 } = await Promise.resolve().then(() => (init_esm4(), esm_exports));
1440
+ const { BatchSpanProcessor } = await import("@opentelemetry/sdk-trace-base");
1441
+ const batchConfig = resolveBatchConfig(config.batch);
1442
+ let provider = trace.getTracerProvider();
1443
+ const isRealProvider = "addSpanProcessor" in provider;
1444
+ if (isRealProvider) {
1445
+ const exporter = new OTLPTraceExporter2({
1446
+ url: config.url,
1447
+ headers: config.headers,
1448
+ timeoutMillis: config.timeout ?? 1e4
1449
+ });
1450
+ const processor = new BatchSpanProcessor(exporter, batchConfig);
1451
+ provider.addSpanProcessor(processor);
1452
+ console.info(
1453
+ `[Observability] OTLP exporter configured (url=${config.url}, batch=${batchConfig.maxExportBatchSize}, delay=${batchConfig.scheduledDelayMillis}ms)`
1454
+ );
1455
+ } else {
1456
+ const resource = resourceFromAttributes({
1457
+ "service.name": process.env.OTEL_SERVICE_NAME || "ag-ui-server",
1458
+ "service.version": "1.0.0"
1459
+ });
1460
+ const exporter = new OTLPTraceExporter2({
1461
+ url: config.url,
1462
+ headers: config.headers,
1463
+ timeoutMillis: config.timeout ?? 1e4
1464
+ });
1465
+ const processor = new BatchSpanProcessor(exporter, batchConfig);
1466
+ const tracerProvider = new NodeTracerProvider({
1467
+ resource,
1468
+ spanProcessors: [processor]
1469
+ });
1470
+ tracerProvider.register();
1471
+ console.info(
1472
+ `[Observability] OTLP exporter configured (url=${config.url}, batch=${batchConfig.maxExportBatchSize}, delay=${batchConfig.scheduledDelayMillis}ms)`
1473
+ );
1474
+ }
1475
+ }
1476
+ async function setupCustomExporter(config) {
1477
+ await config.setup();
1478
+ console.info(`[Observability] Custom exporter setup completed`);
1479
+ }
1480
+ async function applyMergedConfigs(merged) {
1481
+ const setupTasks = [];
1482
+ if (merged.console) {
1483
+ setupTasks.push(safeSetup("Console exporter", () => setupConsoleExporter(merged.console)));
1484
+ }
1485
+ for (const otlp of merged.otlp) {
1486
+ setupTasks.push(safeSetup(`OTLP exporter (${otlp.url})`, () => setupOTLPExporter(otlp)));
1487
+ }
1488
+ for (const custom of merged.custom) {
1489
+ setupTasks.push(safeSetup("Custom exporter", () => setupCustomExporter(custom)));
1490
+ }
1491
+ await Promise.all(setupTasks);
1492
+ if (merged.console || merged.otlp.length > 0 || merged.custom.length > 0) {
1493
+ console.info(`[Observability] Setup completed`);
1494
+ }
1495
+ }
1496
+ var setupPromise = null;
1497
+ async function setupObservability(configs) {
1498
+ if (setupPromise) {
1499
+ return setupPromise;
1500
+ }
1501
+ setupPromise = (async () => {
1502
+ try {
1503
+ const configsArray = configs ? Array.isArray(configs) ? configs : [configs] : [];
1504
+ const merged = mergeConfigs(configsArray);
1505
+ await applyMergedConfigs(merged);
1506
+ } catch (error) {
1507
+ setupPromise = null;
1508
+ throw error;
1509
+ }
1510
+ })();
1511
+ return setupPromise;
1512
+ }
1513
+
1514
+ // src/server/config.ts
1515
+ var ExporterType = {
1516
+ /** Console exporter - outputs traces to stdout */
1517
+ Console: "console",
1518
+ /** OTLP exporter - sends traces to OTLP-compatible backend */
1519
+ OTLP: "otlp",
1520
+ /** Custom exporter - user-defined setup logic */
1521
+ Custom: "custom"
1522
+ };
1523
+ // Annotate the CommonJS export names for ESM import in node:
1524
+ 0 && (module.exports = {
1525
+ ExporterType,
1526
+ setupObservability
1527
+ });
1528
+ //# sourceMappingURL=server.js.map