trodo-node 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/cjs/TrodoClient.js +22 -1
- package/dist/cjs/TrodoClient.js.map +1 -1
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/otel/registerOTel.js +211 -0
- package/dist/cjs/otel/registerOTel.js.map +1 -0
- package/dist/cjs/otel/transport.js +27 -0
- package/dist/cjs/otel/transport.js.map +1 -0
- package/dist/cjs/otel/wrapAgent.js +162 -0
- package/dist/cjs/otel/wrapAgent.js.map +1 -1
- package/dist/esm/TrodoClient.d.ts +6 -0
- package/dist/esm/TrodoClient.d.ts.map +1 -1
- package/dist/esm/TrodoClient.js +22 -1
- package/dist/esm/TrodoClient.js.map +1 -1
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +28 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/otel/registerOTel.d.ts +72 -0
- package/dist/esm/otel/registerOTel.d.ts.map +1 -0
- package/dist/esm/otel/registerOTel.js +207 -0
- package/dist/esm/otel/registerOTel.js.map +1 -0
- package/dist/esm/otel/transport.d.ts +31 -0
- package/dist/esm/otel/transport.d.ts.map +1 -0
- package/dist/esm/otel/transport.js +21 -0
- package/dist/esm/otel/transport.js.map +1 -0
- package/dist/esm/otel/wrapAgent.d.ts +11 -0
- package/dist/esm/otel/wrapAgent.d.ts.map +1 -1
- package/dist/esm/otel/wrapAgent.js +162 -0
- package/dist/esm/otel/wrapAgent.js.map +1 -1
- package/dist/esm/types/index.d.ts +15 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/package.json +13 -5
package/README.md
CHANGED
|
@@ -14,6 +14,44 @@ Node 18+ uses native `fetch`. For Node 16/17, install the optional peer dependen
|
|
|
14
14
|
npm install trodo-node node-fetch
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
## OpenTelemetry / OTLP path (NEW in 2.4.0)
|
|
18
|
+
|
|
19
|
+
Already running OTel? Skip the Trodo SDK install entirely and point your existing pipeline at Trodo. Two env vars:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# .env.local
|
|
23
|
+
OTEL_EXPORTER_OTLP_ENDPOINT=https://sdkapi.trodo.ai
|
|
24
|
+
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer ${TRODO_SITE_ID}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The Bearer token is your **site_id** — same value you'd pass to `trodo.init({ siteId })`. Get it from the [Integration Manager](https://app.trodo.ai/dashboard/integrations).
|
|
28
|
+
|
|
29
|
+
Use this when:
|
|
30
|
+
- **NextJS + Vercel AI SDK with `@vercel/otel`** — auto-instrumented `generateText` / `streamText` / tool calls flow into Trodo. Pass `experimental_telemetry.metadata.{userId, sessionId, agentName, ...}` and they map to `distinct_id` / `conversation_id` / `agent_name` / custom `run.metadata`.
|
|
31
|
+
- **You already run OTel** (Datadog, Jaeger, Honeycomb) and want Trodo as an additional destination. Install `trodo-node` and call `trodo.registerOTel({ siteId, mode: 'otlp' })` to attach our OTLP exporter without replacing your existing setup. `wrapAgent` / `withSpan` / `tool` then route through OTel so auto-instrumented children share the same trace.
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
// instrumentation.ts (NextJS root or src/)
|
|
35
|
+
import { registerOTel } from 'trodo-node';
|
|
36
|
+
|
|
37
|
+
registerOTel({
|
|
38
|
+
siteId: process.env.TRODO_SITE_ID!,
|
|
39
|
+
mode: 'otlp',
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`mode: 'otlp'` requires these optional peer deps:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install @opentelemetry/api @opentelemetry/sdk-node \
|
|
47
|
+
@opentelemetry/sdk-trace-base @opentelemetry/exporter-trace-otlp-proto \
|
|
48
|
+
@opentelemetry/resources
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The SDK throws a friendly install hint if you call `mode: 'otlp'` without them.
|
|
52
|
+
|
|
53
|
+
For richer Trodo features on top (`wrapAgent`, `feedback`, `trackMcp`), continue with the SDK quick start below.
|
|
54
|
+
|
|
17
55
|
## Quick Start
|
|
18
56
|
|
|
19
57
|
```javascript
|
package/dist/cjs/TrodoClient.js
CHANGED
|
@@ -11,6 +11,7 @@ const processor_js_1 = require("./otel/processor.js");
|
|
|
11
11
|
const wrapAgent_js_1 = require("./otel/wrapAgent.js");
|
|
12
12
|
const helpers_js_1 = require("./otel/helpers.js");
|
|
13
13
|
const autoInstrument_js_1 = require("./otel/autoInstrument.js");
|
|
14
|
+
const registerOTel_js_1 = require("./otel/registerOTel.js");
|
|
14
15
|
const DEFAULT_API_BASE = 'https://sdkapi.trodo.ai';
|
|
15
16
|
class TrodoClient {
|
|
16
17
|
constructor(config) {
|
|
@@ -37,7 +38,20 @@ class TrodoClient {
|
|
|
37
38
|
this.spanProcessor = new processor_js_1.TrodoSpanProcessor({ apiClient: this.apiClient });
|
|
38
39
|
// Default ON — matches Python SDK. Opt out with autoInstrument: false.
|
|
39
40
|
if (config.autoInstrument !== false) {
|
|
40
|
-
|
|
41
|
+
const useLegacy = process.env.TRODO_LEGACY_INIT === '1';
|
|
42
|
+
if (useLegacy) {
|
|
43
|
+
// Escape hatch for one minor version: bypass registerOTel and use the
|
|
44
|
+
// pre-2.4 enableAutoInstrument path directly.
|
|
45
|
+
(0, autoInstrument_js_1.enableAutoInstrument)({ processor: this.spanProcessor });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
(0, registerOTel_js_1.registerOTel)({
|
|
49
|
+
mode: config.otelMode ?? 'trodo',
|
|
50
|
+
siteId: this.siteId,
|
|
51
|
+
endpoint: this.apiBase,
|
|
52
|
+
processor: this.spanProcessor,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
41
55
|
}
|
|
42
56
|
const client = this;
|
|
43
57
|
this.people = {
|
|
@@ -53,6 +67,13 @@ class TrodoClient {
|
|
|
53
67
|
deleteUser: (d) => client.forUser(d).people.deleteUser(),
|
|
54
68
|
};
|
|
55
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Internal: expose the span processor to registerOTel. Not part of the
|
|
72
|
+
* public surface; subject to change between minors.
|
|
73
|
+
*/
|
|
74
|
+
_getSpanProcessor() {
|
|
75
|
+
return this.spanProcessor;
|
|
76
|
+
}
|
|
56
77
|
// --------------------------------------------------------------------------
|
|
57
78
|
// Primary pattern: forUser()
|
|
58
79
|
// --------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrodoClient.js","sourceRoot":"","sources":["../../src/TrodoClient.ts"],"names":[],"mappings":";;;AAUA,qDAA+C;AAC/C,mEAA6D;AAC7D,yDAAmD;AACnD,6DAAuD;AACvD,oEAA8D;AAC9D,qDAA+C;AAC/C,sDAAyD;AACzD,sDAgB6B;AAC7B,kDAS2B;AAC3B,gEAAgE;
|
|
1
|
+
{"version":3,"file":"TrodoClient.js","sourceRoot":"","sources":["../../src/TrodoClient.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -63,6 +63,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
63
63
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
64
|
exports.people = exports.getTracer = exports.retrieval = exports.llm = exports.trace = exports.propagationHeaders = exports.currentSpanId = exports.currentRunId = exports.getActiveContext = exports.UserContext = exports.TrodoClient = void 0;
|
|
65
65
|
exports.init = init;
|
|
66
|
+
exports.registerOTel = registerOTel;
|
|
66
67
|
exports.forUser = forUser;
|
|
67
68
|
exports.track = track;
|
|
68
69
|
exports.identify = identify;
|
|
@@ -103,6 +104,7 @@ Object.defineProperty(exports, "trace", { enumerable: true, get: function () { r
|
|
|
103
104
|
Object.defineProperty(exports, "llm", { enumerable: true, get: function () { return helpers_js_1.llm; } });
|
|
104
105
|
Object.defineProperty(exports, "retrieval", { enumerable: true, get: function () { return helpers_js_1.retrieval; } });
|
|
105
106
|
Object.defineProperty(exports, "getTracer", { enumerable: true, get: function () { return helpers_js_1.getTracer; } });
|
|
107
|
+
const registerOTel_js_1 = require("./otel/registerOTel.js");
|
|
106
108
|
// ============================================================================
|
|
107
109
|
// Singleton convenience API
|
|
108
110
|
// ============================================================================
|
|
@@ -118,6 +120,32 @@ function init(config) {
|
|
|
118
120
|
_client = new TrodoClient_js_2.TrodoClient(config);
|
|
119
121
|
return _client;
|
|
120
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Configure the OTel pipeline with one call. Auto-creates the singleton
|
|
125
|
+
* TrodoClient if init() hasn't been called yet, so this can replace init()
|
|
126
|
+
* for OTel-first deployments.
|
|
127
|
+
*
|
|
128
|
+
* Example (OTLP mode for use alongside Datadog/Jaeger):
|
|
129
|
+
* import { registerOTel } from 'trodo-node';
|
|
130
|
+
* registerOTel({ siteId: process.env.TRODO_SITE_ID!, mode: 'otlp' });
|
|
131
|
+
*/
|
|
132
|
+
function registerOTel(opts) {
|
|
133
|
+
if (!_client) {
|
|
134
|
+
if (!opts.siteId) {
|
|
135
|
+
throw new Error('registerOTel: pass siteId, or call trodo.init({ siteId }) first.');
|
|
136
|
+
}
|
|
137
|
+
// Suppress the legacy autoInstrument inside the client constructor —
|
|
138
|
+
// registerOTel below is what wires the pipeline.
|
|
139
|
+
_client = new TrodoClient_js_2.TrodoClient({ siteId: opts.siteId, autoInstrument: false });
|
|
140
|
+
}
|
|
141
|
+
return (0, registerOTel_js_1.registerOTel)({
|
|
142
|
+
mode: opts.mode,
|
|
143
|
+
siteId: opts.siteId ?? _client.siteId,
|
|
144
|
+
endpoint: opts.endpoint,
|
|
145
|
+
serviceName: opts.serviceName,
|
|
146
|
+
processor: _client._getSpanProcessor(),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
121
149
|
/** Return a UserContext bound to the given distinctId. */
|
|
122
150
|
function forUser(distinctId, options) {
|
|
123
151
|
return getClient().forUser(distinctId, options);
|
|
@@ -236,6 +264,7 @@ function feedback(runId, props) {
|
|
|
236
264
|
// Default export: the singleton namespace (matches frontend SDK pattern)
|
|
237
265
|
const trodo = {
|
|
238
266
|
init,
|
|
267
|
+
registerOTel,
|
|
239
268
|
forUser,
|
|
240
269
|
track,
|
|
241
270
|
identify,
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerOTel = registerOTel;
|
|
4
|
+
exports._resetForTests = _resetForTests;
|
|
5
|
+
const autoInstrument_js_1 = require("./autoInstrument.js");
|
|
6
|
+
const transport_js_1 = require("./transport.js");
|
|
7
|
+
let _registered = null;
|
|
8
|
+
/**
|
|
9
|
+
* Configure Trodo's OTel pipeline. See file doc-comment for mode semantics.
|
|
10
|
+
*
|
|
11
|
+
* Returns the configured mode + active instrumentations + a `fresh` flag
|
|
12
|
+
* indicating whether this call did the setup or hit the idempotency cache.
|
|
13
|
+
*/
|
|
14
|
+
function registerOTel(opts) {
|
|
15
|
+
if (_registered) {
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.warn('[trodo] registerOTel already called; returning existing configuration. ' +
|
|
18
|
+
'Pass { mode } only at startup.');
|
|
19
|
+
return _registered;
|
|
20
|
+
}
|
|
21
|
+
if (!opts.siteId)
|
|
22
|
+
throw new Error('registerOTel: siteId is required');
|
|
23
|
+
if (!opts.processor) {
|
|
24
|
+
throw new Error('registerOTel: processor is required (typically passed automatically via init()/TrodoClient).');
|
|
25
|
+
}
|
|
26
|
+
const mode = opts.mode ?? 'trodo';
|
|
27
|
+
const serviceName = opts.serviceName ?? 'trodo-agent';
|
|
28
|
+
const endpoint = (opts.endpoint ?? 'https://sdkapi.trodo.ai').replace(/\/+$/, '');
|
|
29
|
+
let active = [];
|
|
30
|
+
if (mode === 'trodo') {
|
|
31
|
+
// Default path — same wiring as legacy enableAutoInstrument.
|
|
32
|
+
active = (0, autoInstrument_js_1.enableAutoInstrument)({
|
|
33
|
+
processor: opts.processor,
|
|
34
|
+
disable: opts.disableInstrumentations,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
active = setupOtlpMode({
|
|
39
|
+
siteId: opts.siteId,
|
|
40
|
+
endpoint,
|
|
41
|
+
serviceName,
|
|
42
|
+
disable: opts.disableInstrumentations,
|
|
43
|
+
processor: opts.processor,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
_registered = { mode, activeInstrumentations: active, fresh: true };
|
|
47
|
+
return _registered;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Reset internal state — for tests only. Not exported from index.ts.
|
|
51
|
+
*/
|
|
52
|
+
function _resetForTests() {
|
|
53
|
+
_registered = null;
|
|
54
|
+
(0, transport_js_1._resetTransportForTests)();
|
|
55
|
+
}
|
|
56
|
+
function setupOtlpMode(params) {
|
|
57
|
+
// Lazy-require OTel deps: only users who pick 'otlp' mode pay the bundle
|
|
58
|
+
// cost / install the peer deps. Print a friendly hint if missing.
|
|
59
|
+
let NodeSDK;
|
|
60
|
+
let Resource;
|
|
61
|
+
let OTLPTraceExporter;
|
|
62
|
+
let BatchSpanProcessor;
|
|
63
|
+
let getTracer = null;
|
|
64
|
+
try {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
66
|
+
NodeSDK = require('@opentelemetry/sdk-node').NodeSDK;
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
68
|
+
Resource = require('@opentelemetry/resources').Resource;
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
70
|
+
OTLPTraceExporter =
|
|
71
|
+
require('@opentelemetry/exporter-trace-otlp-proto').OTLPTraceExporter;
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
73
|
+
BatchSpanProcessor = require('@opentelemetry/sdk-trace-base').BatchSpanProcessor;
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
75
|
+
const apiMod = require('@opentelemetry/api');
|
|
76
|
+
getTracer = (name) => apiMod.trace.getTracer(name);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
throw new Error("registerOTel(mode: 'otlp') requires the OTel SDK + protobuf exporter. " +
|
|
80
|
+
'Install with:\n\n' +
|
|
81
|
+
' npm install @opentelemetry/sdk-node @opentelemetry/sdk-trace-base ' +
|
|
82
|
+
'@opentelemetry/exporter-trace-otlp-proto @opentelemetry/resources\n\n' +
|
|
83
|
+
`Original error: ${e.message}`);
|
|
84
|
+
}
|
|
85
|
+
// Build instrumentations using the same factory list as the legacy path,
|
|
86
|
+
// but DO NOT wire them through TrodoSpanProcessor — they ship to OTLP.
|
|
87
|
+
const instrumentations = collectInstrumentations(params.disable);
|
|
88
|
+
// Coexistence with an existing OTel pipeline: if a non-noop tracer provider
|
|
89
|
+
// is already registered, attach our exporter to it instead of starting a
|
|
90
|
+
// fresh NodeSDK (which would replace it).
|
|
91
|
+
const existing = tryGetExistingTracerProvider();
|
|
92
|
+
const exporter = new OTLPTraceExporter({
|
|
93
|
+
url: `${params.endpoint}/v1/traces`,
|
|
94
|
+
headers: { Authorization: `Bearer ${params.siteId}` },
|
|
95
|
+
});
|
|
96
|
+
const batchProcessor = new BatchSpanProcessor(exporter);
|
|
97
|
+
if (existing && typeof existing.addSpanProcessor === 'function') {
|
|
98
|
+
existing.addSpanProcessor(batchProcessor);
|
|
99
|
+
// Auto-instrumentations may already be registered by the existing pipeline
|
|
100
|
+
// — don't double-register. But we still need to bridge the wrapAgent path.
|
|
101
|
+
if (getTracer) {
|
|
102
|
+
const tracer = getTracer('trodo-agent');
|
|
103
|
+
(0, transport_js_1.setOtelTransport)(tracer);
|
|
104
|
+
}
|
|
105
|
+
return instrumentations.activeIds;
|
|
106
|
+
}
|
|
107
|
+
// Fresh pipeline.
|
|
108
|
+
const ResourceCtor = Resource;
|
|
109
|
+
const NodeSDKCtor = NodeSDK;
|
|
110
|
+
const sdk = new NodeSDKCtor({
|
|
111
|
+
resource: new ResourceCtor({
|
|
112
|
+
'service.name': params.serviceName,
|
|
113
|
+
// Hint to backend: this came from the SDK's registerOTel helper.
|
|
114
|
+
'trodo.sdk.mode': 'otlp',
|
|
115
|
+
}),
|
|
116
|
+
spanProcessor: batchProcessor,
|
|
117
|
+
instrumentations: instrumentations.objects,
|
|
118
|
+
});
|
|
119
|
+
sdk.start();
|
|
120
|
+
// Activate the OTel transport so wrapAgent / withSpan dispatch through the
|
|
121
|
+
// OTel tracer instead of TrodoSpanProcessor. trackMcp / startRun / endRun /
|
|
122
|
+
// joinRun / feedback continue using their own HTTP API endpoints regardless
|
|
123
|
+
// of mode — they have nothing to gain from OTel routing.
|
|
124
|
+
if (getTracer) {
|
|
125
|
+
const tracer = getTracer('trodo-agent');
|
|
126
|
+
(0, transport_js_1.setOtelTransport)(tracer);
|
|
127
|
+
}
|
|
128
|
+
// otelAdapter remains available for users wanting the legacy bridge — kept
|
|
129
|
+
// exported but not auto-registered in 'otlp' mode (would cause double-write).
|
|
130
|
+
void autoInstrument_js_1.otelAdapter;
|
|
131
|
+
return instrumentations.activeIds;
|
|
132
|
+
}
|
|
133
|
+
function collectInstrumentations(disable) {
|
|
134
|
+
const disabled = new Set(disable || []);
|
|
135
|
+
const objects = [];
|
|
136
|
+
const activeIds = [];
|
|
137
|
+
const specs = [
|
|
138
|
+
{
|
|
139
|
+
id: 'anthropic',
|
|
140
|
+
loader: () => new (require('@opentelemetry/instrumentation-anthropic')).AnthropicInstrumentation(),
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'openai',
|
|
144
|
+
loader: () => new (require('@opentelemetry/instrumentation-openai')).OpenAIInstrumentation(),
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'langchain',
|
|
148
|
+
loader: () => new (require('@opentelemetry/instrumentation-langchain')).LangChainInstrumentation(),
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: 'bedrock',
|
|
152
|
+
loader: () => new (require('@opentelemetry/instrumentation-bedrock')).BedrockInstrumentation(),
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'cohere',
|
|
156
|
+
loader: () => new (require('@opentelemetry/instrumentation-cohere')).CohereInstrumentation(),
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
id: 'google-generativeai',
|
|
160
|
+
loader: () => new (require('@opentelemetry/instrumentation-google-generativeai')).GoogleGenerativeAIInstrumentation(),
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: 'vertexai',
|
|
164
|
+
loader: () => new (require('@opentelemetry/instrumentation-vertexai')).VertexAIInstrumentation(),
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: 'llama-index',
|
|
168
|
+
loader: () => new (require('@opentelemetry/instrumentation-llamaindex')).LlamaIndexInstrumentation(),
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
id: 'http',
|
|
172
|
+
loader: () => new (require('@opentelemetry/instrumentation-http')).HttpInstrumentation(),
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: 'fetch',
|
|
176
|
+
loader: () => new (require('@opentelemetry/instrumentation-fetch')).FetchInstrumentation(),
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
for (const spec of specs) {
|
|
180
|
+
if (disabled.has(spec.id))
|
|
181
|
+
continue;
|
|
182
|
+
try {
|
|
183
|
+
objects.push(spec.loader());
|
|
184
|
+
activeIds.push(spec.id);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
/* package not installed — skip silently, matches legacy behavior */
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return { objects, activeIds };
|
|
191
|
+
}
|
|
192
|
+
function tryGetExistingTracerProvider() {
|
|
193
|
+
try {
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
195
|
+
const apiMod = require('@opentelemetry/api');
|
|
196
|
+
const provider = apiMod.trace.getTracerProvider();
|
|
197
|
+
if (!provider)
|
|
198
|
+
return null;
|
|
199
|
+
const ctorName = provider?.constructor?.name || '';
|
|
200
|
+
// ProxyTracerProvider is the no-op default; treat it as "no existing
|
|
201
|
+
// pipeline" so we set one up.
|
|
202
|
+
if (ctorName === 'ProxyTracerProvider' || ctorName === 'NoopTracerProvider') {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
return provider;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=registerOTel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerOTel.js","sourceRoot":"","sources":["../../../src/otel/registerOTel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTransportMode = getTransportMode;
|
|
4
|
+
exports.getOtelTracer = getOtelTracer;
|
|
5
|
+
exports.setOtelTransport = setOtelTransport;
|
|
6
|
+
exports._resetTransportForTests = _resetTransportForTests;
|
|
7
|
+
let _mode = 'trodo';
|
|
8
|
+
let _tracer = null;
|
|
9
|
+
/** Read by wrapAgent / withSpan. Defaults to 'trodo' if registerOTel never called. */
|
|
10
|
+
function getTransportMode() {
|
|
11
|
+
return _mode;
|
|
12
|
+
}
|
|
13
|
+
/** Read by wrapAgent / withSpan in 'otlp' mode. */
|
|
14
|
+
function getOtelTracer() {
|
|
15
|
+
return _tracer;
|
|
16
|
+
}
|
|
17
|
+
/** Internal: registerOTel calls this once mode: 'otlp' setup completes. */
|
|
18
|
+
function setOtelTransport(tracer) {
|
|
19
|
+
_mode = 'otlp';
|
|
20
|
+
_tracer = tracer;
|
|
21
|
+
}
|
|
22
|
+
/** Reset for tests. Not exported from index.ts. */
|
|
23
|
+
function _resetTransportForTests() {
|
|
24
|
+
_mode = 'trodo';
|
|
25
|
+
_tracer = null;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/otel/transport.ts"],"names":[],"mappings":";;AAgCA,4CAEC;AAGD,sCAEC;AAGD,4CAGC;AAGD,0DAGC;AAvBD,IAAI,KAAK,GAAkB,OAAO,CAAC;AACnC,IAAI,OAAO,GAA0B,IAAI,CAAC;AAE1C,sFAAsF;AACtF,SAAgB,gBAAgB;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mDAAmD;AACnD,SAAgB,aAAa;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2EAA2E;AAC3E,SAAgB,gBAAgB,CAAC,MAAsB;IACrD,KAAK,GAAG,MAAM,CAAC;IACf,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC;AAED,mDAAmD;AACnD,SAAgB,uBAAuB;IACrC,KAAK,GAAG,OAAO,CAAC;IAChB,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC"}
|