@arizeai/phoenix-otel 0.1.0 → 0.2.1

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 (40) hide show
  1. package/README.md +252 -4
  2. package/dist/esm/createNoOpProvider.d.ts +6 -0
  3. package/dist/esm/createNoOpProvider.d.ts.map +1 -0
  4. package/dist/esm/createNoOpProvider.js +9 -0
  5. package/dist/esm/createNoOpProvider.js.map +1 -0
  6. package/dist/esm/index.d.ts +5 -2
  7. package/dist/esm/index.d.ts.map +1 -1
  8. package/dist/esm/index.js +5 -2
  9. package/dist/esm/index.js.map +1 -1
  10. package/dist/esm/register.d.ts +13 -1
  11. package/dist/esm/register.d.ts.map +1 -1
  12. package/dist/esm/register.js +9 -2
  13. package/dist/esm/register.js.map +1 -1
  14. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  15. package/dist/esm/utils.d.ts +3 -0
  16. package/dist/esm/utils.d.ts.map +1 -0
  17. package/dist/esm/utils.js +4 -0
  18. package/dist/esm/utils.js.map +1 -0
  19. package/dist/src/createNoOpProvider.d.ts +6 -0
  20. package/dist/src/createNoOpProvider.d.ts.map +1 -0
  21. package/dist/src/createNoOpProvider.js +12 -0
  22. package/dist/src/createNoOpProvider.js.map +1 -0
  23. package/dist/src/index.d.ts +5 -2
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +21 -3
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/register.d.ts +13 -1
  28. package/dist/src/register.d.ts.map +1 -1
  29. package/dist/src/register.js +9 -2
  30. package/dist/src/register.js.map +1 -1
  31. package/dist/src/utils.d.ts +3 -0
  32. package/dist/src/utils.d.ts.map +1 -0
  33. package/dist/src/utils.js +7 -0
  34. package/dist/src/utils.js.map +1 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/src/createNoOpProvider.ts +10 -0
  38. package/src/index.ts +13 -2
  39. package/src/register.ts +21 -1
  40. package/src/utils.ts +9 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <h1 align="center" style="border-bottom: none">
2
2
  <div>
3
- <a href="https://phoenix.arize.com/?utm_medium=github&utm_content=header_img&utm_campaign=phoenix-client-ts">
3
+ <a href="https://phoenix.arize.com/?utm_medium=github&utm_content=header_img&utm_campaign=phoenix-otel-ts">
4
4
  <picture>
5
5
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Arize-ai/phoenix-assets/refs/heads/main/logos/Phoenix/phoenix.svg">
6
6
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Arize-ai/phoenix-assets/refs/heads/main/logos/Phoenix/phoenix-white.svg">
@@ -11,8 +11,24 @@
11
11
  @arizeai/phoenix-otel
12
12
  </div>
13
13
  </h1>
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/@arizeai/phoenix-otel">
16
+ <img src="https://img.shields.io/npm/v/@arizeai/phoenix-otel" alt="NPM Version">
17
+ </a>
18
+ <a href="https://arize.com/docs/phoenix">
19
+ <img src="https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white" alt="Documentation">
20
+ </a>
21
+ </p>
14
22
 
15
- A simple wrapper around OpenTelemetry for use with [Arize Phoenix](https://github.com/Arize-ai/phoenix). This package is still under active development and is subject to change.
23
+ A lightweight wrapper around OpenTelemetry for Node.js applications that simplifies sending traces to [Arize Phoenix](https://github.com/Arize-ai/phoenix). This package provides an easy-to-use `register` function that handles all the boilerplate configuration for OpenTelemetry tracing.
24
+
25
+ > **Note**: This package is under active development and APIs may change.
26
+
27
+ ## Features
28
+
29
+ - **Simple Setup** - One-line configuration with sensible defaults
30
+ - **Environment Variables** - Automatic configuration from environment variables
31
+ - **Batch Processing** - Built-in batch span processing for production use
16
32
 
17
33
  ## Installation
18
34
 
@@ -20,12 +36,244 @@ A simple wrapper around OpenTelemetry for use with [Arize Phoenix](https://githu
20
36
  npm install @arizeai/phoenix-otel
21
37
  ```
22
38
 
23
- ## Usage
39
+ ## Quick Start
40
+
41
+ ### Basic Usage
42
+
43
+ The simplest way to get started is to use the `register` function:
44
+
45
+ ```typescript
46
+ import { register } from "@arizeai/phoenix-otel";
47
+
48
+ // Register with default settings (connects to localhost:6006)
49
+ register({
50
+ projectName: "my-app",
51
+ });
52
+ ```
53
+
54
+ ### Production Setup
55
+
56
+ For production use with Phoenix Cloud:
57
+
58
+ ```typescript
59
+ import { register } from "@arizeai/phoenix-otel";
60
+
61
+ register({
62
+ projectName: "my-app",
63
+ url: "https://app.phoenix.arize.com",
64
+ apiKey: process.env.PHOENIX_API_KEY,
65
+ });
66
+ ```
67
+
68
+ ## Configuration
69
+
70
+ ### Environment Variables
71
+
72
+ The `register` function automatically reads from environment variables:
73
+
74
+ ```bash
75
+ # For local Phoenix server (default)
76
+ export PHOENIX_COLLECTOR_ENDPOINT="http://localhost:6006"
77
+
78
+ # For Phoenix Cloud
79
+ export PHOENIX_COLLECTOR_ENDPOINT="https://app.phoenix.arize.com"
80
+ export PHOENIX_API_KEY="your-api-key"
81
+ ```
82
+
83
+ ### Configuration Options
84
+
85
+ The `register` function accepts the following parameters:
86
+
87
+ | Parameter | Type | Default | Description |
88
+ | ------------------ | ------------------------ | ------------------------- | ------------------------------------------------------ |
89
+ | `projectName` | `string` | `"default"` | The project name for organizing traces in Phoenix |
90
+ | `url` | `string` | `"http://localhost:6006"` | The URL to your Phoenix instance |
91
+ | `apiKey` | `string` | `undefined` | API key for Phoenix authentication |
92
+ | `headers` | `Record<string, string>` | `{}` | Custom headers for OTLP requests |
93
+ | `batch` | `boolean` | `true` | Use batch span processing (recommended for production) |
94
+ | `instrumentations` | `Instrumentation[]` | `undefined` | Array of OpenTelemetry instrumentations to register |
95
+ | `global` | `boolean` | `true` | Register the tracer provider globally |
96
+ | `diagLogLevel` | `DiagLogLevel` | `undefined` | Diagnostic logging level for debugging |
97
+
98
+ ## Usage Examples
99
+
100
+ ### With Auto-Instrumentation
101
+
102
+ Automatically instrument common libraries (works best with CommonJS):
24
103
 
25
104
  ```typescript
26
105
  import { register } from "@arizeai/phoenix-otel";
106
+ import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
107
+ import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
27
108
 
28
109
  register({
29
- url: "http://localhost:6006/v1/traces",
110
+ projectName: "my-express-app",
111
+ instrumentations: [new HttpInstrumentation(), new ExpressInstrumentation()],
30
112
  });
31
113
  ```
114
+
115
+ > **Note**: Auto-instrumentation via the `instrumentations` parameter works best with CommonJS projects. ESM projects require manual instrumentation.
116
+
117
+ ### With OpenAI (ESM)
118
+
119
+ For ESM projects, manually instrument libraries:
120
+
121
+ ```typescript
122
+ // instrumentation.ts
123
+ import { register, registerInstrumentations } from "@arizeai/phoenix-otel";
124
+ import OpenAI from "openai";
125
+ import { OpenAIInstrumentation } from "@arizeai/openinference-instrumentation-openai";
126
+
127
+ register({
128
+ projectName: "openai-app",
129
+ });
130
+
131
+ // Manual instrumentation for ESM
132
+ const instrumentation = new OpenAIInstrumentation();
133
+ instrumentation.manuallyInstrument(OpenAI);
134
+
135
+ registerInstrumentations({
136
+ instrumentations: [instrumentation],
137
+ });
138
+ ```
139
+
140
+ ```typescript
141
+ // main.ts
142
+ import "./instrumentation.ts";
143
+ import OpenAI from "openai";
144
+
145
+ const openai = new OpenAI();
146
+
147
+ const response = await openai.chat.completions.create({
148
+ model: "gpt-4o",
149
+ messages: [{ role: "user", content: "Hello!" }],
150
+ });
151
+ ```
152
+
153
+ ### Manual Tracing
154
+
155
+ Create custom spans using the OpenTelemetry API:
156
+
157
+ ```typescript
158
+ import { register, trace } from "@arizeai/phoenix-otel";
159
+
160
+ register({ projectName: "my-app" });
161
+
162
+ const tracer = trace.getTracer("my-service");
163
+
164
+ async function processOrder(orderId: string) {
165
+ return tracer.startActiveSpan("process-order", async (span) => {
166
+ try {
167
+ span.setAttribute("order.id", orderId);
168
+
169
+ // Your business logic here
170
+ const result = await fetchOrderDetails(orderId);
171
+
172
+ span.setAttribute("order.status", result.status);
173
+ return result;
174
+ } catch (error) {
175
+ span.recordException(error as Error);
176
+ span.setStatus({ code: SpanStatusCode.ERROR });
177
+ throw error;
178
+ } finally {
179
+ span.end();
180
+ }
181
+ });
182
+ }
183
+ ```
184
+
185
+ ### Development vs Production
186
+
187
+ **Development** (with debug logging):
188
+
189
+ ```typescript
190
+ import { register } from "@arizeai/phoenix-otel";
191
+ import { DiagLogLevel } from "@opentelemetry/api";
192
+
193
+ register({
194
+ projectName: "my-app-dev",
195
+ url: "http://localhost:6006",
196
+ batch: false, // Immediate span delivery for faster feedback
197
+ diagLogLevel: DiagLogLevel.DEBUG,
198
+ });
199
+ ```
200
+
201
+ **Production** (optimized for performance):
202
+
203
+ ```typescript
204
+ import { register } from "@arizeai/phoenix-otel";
205
+
206
+ register({
207
+ projectName: "my-app-prod",
208
+ url: "https://app.phoenix.arize.com",
209
+ apiKey: process.env.PHOENIX_API_KEY,
210
+ batch: true, // Batch processing for better performance
211
+ });
212
+ ```
213
+
214
+ ### Custom Headers
215
+
216
+ Add custom headers to OTLP requests:
217
+
218
+ ```typescript
219
+ import { register } from "@arizeai/phoenix-otel";
220
+
221
+ register({
222
+ projectName: "my-app",
223
+ url: "https://app.phoenix.arize.com",
224
+ headers: {
225
+ "X-Custom-Header": "custom-value",
226
+ "X-Environment": process.env.NODE_ENV || "development",
227
+ },
228
+ });
229
+ ```
230
+
231
+ ### Non-Global Provider
232
+
233
+ Use the provider explicitly without registering globally:
234
+
235
+ ```typescript
236
+ import { register } from "@arizeai/phoenix-otel";
237
+
238
+ const provider = register({
239
+ projectName: "my-app",
240
+ global: false,
241
+ });
242
+
243
+ // Use the provider explicitly
244
+ const tracer = provider.getTracer("my-tracer");
245
+ ```
246
+
247
+ ## Re-exported APIs
248
+
249
+ For convenience, commonly used OpenTelemetry APIs are re-exported:
250
+
251
+ ```typescript
252
+ import {
253
+ trace, // Main tracing API
254
+ context, // Context API
255
+ SpanStatusCode, // Span status codes
256
+ registerInstrumentations, // Register instrumentations
257
+ type DiagLogLevel, // Diagnostic log levels
258
+ type Tracer, // Tracer type
259
+ type Instrumentation, // Instrumentation type
260
+ type NodeTracerProvider, // Provider type
261
+ } from "@arizeai/phoenix-otel";
262
+ ```
263
+
264
+ ## Documentation
265
+
266
+ - **[Phoenix Documentation](https://arize.com/docs/phoenix)** - Complete Phoenix documentation
267
+ - **[OpenTelemetry JS](https://opentelemetry.io/docs/languages/js/)** - OpenTelemetry for JavaScript
268
+ - **[OpenInference](https://github.com/Arize-ai/openinference)** - OpenInference semantic conventions
269
+
270
+ ## Community
271
+
272
+ Join our community to connect with thousands of AI builders:
273
+
274
+ - 🌍 Join our [Slack community](https://arize-ai.slack.com/join/shared_invite/zt-11t1vbu4x-xkBIHmOREQnYnYDH1GDfCg)
275
+ - 💡 Ask questions and provide feedback in the _#phoenix-support_ channel
276
+ - 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix)
277
+ - 🐞 Report bugs with [GitHub Issues](https://github.com/Arize-ai/phoenix/issues)
278
+ - 𝕏 Follow us on [𝕏](https://twitter.com/ArizePhoenix)
279
+ - 🗺️ Check out our [roadmap](https://github.com/orgs/Arize-ai/projects/45)
@@ -0,0 +1,6 @@
1
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
2
+ /**
3
+ * For dry runs we create a provider that doesn't export traces.
4
+ */
5
+ export declare function createNoOpProvider(): NodeTracerProvider;
6
+ //# sourceMappingURL=createNoOpProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNoOpProvider.d.ts","sourceRoot":"","sources":["../../src/createNoOpProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;GAEG;AACH,wBAAgB,kBAAkB,uBAIjC"}
@@ -0,0 +1,9 @@
1
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
2
+ /**
3
+ * For dry runs we create a provider that doesn't export traces.
4
+ */
5
+ export function createNoOpProvider() {
6
+ const provider = new NodeTracerProvider({});
7
+ return provider;
8
+ }
9
+ //# sourceMappingURL=createNoOpProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNoOpProvider.js","sourceRoot":"","sources":["../../src/createNoOpProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,5 +1,8 @@
1
- export { trace } from "@opentelemetry/api";
1
+ export { trace, context, type DiagLogLevel, type Tracer, SpanStatusCode, } from "@opentelemetry/api";
2
2
  export { registerInstrumentations } from "@opentelemetry/instrumentation";
3
- export { type RegisterParams, register } from "./register.js";
4
3
  export { type Instrumentation } from "@opentelemetry/instrumentation";
4
+ export { type NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
5
+ export * from "./createNoOpProvider.js";
6
+ export * from "./register.js";
7
+ export * from "./utils.js";
5
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,4 +1,7 @@
1
- export { trace } from "@opentelemetry/api";
1
+ export { trace, context, SpanStatusCode, } from "@opentelemetry/api";
2
2
  export { registerInstrumentations } from "@opentelemetry/instrumentation";
3
- export { register } from "./register.js";
3
+ // Phoenix abstractions
4
+ export * from "./createNoOpProvider.js";
5
+ export * from "./register.js";
6
+ export * from "./utils.js";
4
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAuB,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EAGP,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAI1E,uBAAuB;AACvB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
2
2
  import { Instrumentation } from "@opentelemetry/instrumentation";
3
+ import { DiagLogLevel } from "@opentelemetry/api";
4
+ export type Headers = Record<string, string>;
3
5
  /**
4
6
  * Configuration parameters for registering Phoenix OpenTelemetry tracing
5
7
  */
@@ -20,6 +22,10 @@ export type RegisterParams = {
20
22
  * If not provided, environment variables are checked.
21
23
  */
22
24
  apiKey?: string;
25
+ /**
26
+ * Headers to be used when communicating with the OTLP collector
27
+ */
28
+ headers?: Headers;
23
29
  /**
24
30
  * Whether to use batching for span processing.
25
31
  * It is recommended to use batching in production environments
@@ -36,6 +42,11 @@ export type RegisterParams = {
36
42
  * @default true
37
43
  */
38
44
  global?: boolean;
45
+ /**
46
+ * The diag log level to set for the built in DiagConsoleLogger instance.
47
+ * Omit to disable built in logging.
48
+ */
49
+ diagLogLevel?: DiagLogLevel;
39
50
  };
40
51
  /**
41
52
  * Registers Phoenix OpenTelemetry tracing with the specified configuration
@@ -47,6 +58,7 @@ export type RegisterParams = {
47
58
  * @param params.instrumentations - A list of instrumentation to register
48
59
  * @param params.batch - Whether to use batching for span processing
49
60
  * @param params.global - Whether to set the tracer as a global provider
61
+ * @param params.diagLogLevel - the diagnostics log level
50
62
  * @returns {NodeTracerProvider} The configured NodeTracerProvider instance
51
63
  *
52
64
  * @example
@@ -61,7 +73,7 @@ export type RegisterParams = {
61
73
  * });
62
74
  * ```
63
75
  */
64
- export declare function register({ url: paramsUrl, apiKey: paramsApiKey, projectName, instrumentations, batch, global, }: RegisterParams): NodeTracerProvider;
76
+ export declare function register({ url: paramsUrl, apiKey: paramsApiKey, headers: paramsHeaders, projectName, instrumentations, batch, global, diagLogLevel, }: RegisterParams): NodeTracerProvider;
65
77
  /**
66
78
  * A utility method to normalize the URL to be HTTP compatible.
67
79
  * Assumes we are using HTTP over gRPC and ensures the URL ends with the correct traces endpoint.
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EAEhB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,WAAuB,EACvB,gBAAgB,EAChB,KAAY,EACZ,MAAa,GACd,EAAE,cAAc,GAAG,kBAAkB,CAqCrC;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK3D"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EAEhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA2B,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAkB,EAC3B,WAAuB,EACvB,gBAAgB,EAChB,KAAY,EACZ,MAAa,EACb,YAAY,GACb,EAAE,cAAc,GAAG,kBAAkB,CA0CrC;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK3D"}
@@ -5,6 +5,7 @@ import { resourceFromAttributes } from "@opentelemetry/resources";
5
5
  import { NodeTracerProvider, } from "@opentelemetry/sdk-trace-node";
6
6
  import { getEnvApiKey, getEnvCollectorURL } from "./config.js";
7
7
  import { registerInstrumentations, } from "@opentelemetry/instrumentation";
8
+ import { diag, DiagConsoleLogger } from "@opentelemetry/api";
8
9
  /**
9
10
  * Registers Phoenix OpenTelemetry tracing with the specified configuration
10
11
  *
@@ -15,6 +16,7 @@ import { registerInstrumentations, } from "@opentelemetry/instrumentation";
15
16
  * @param params.instrumentations - A list of instrumentation to register
16
17
  * @param params.batch - Whether to use batching for span processing
17
18
  * @param params.global - Whether to set the tracer as a global provider
19
+ * @param params.diagLogLevel - the diagnostics log level
18
20
  * @returns {NodeTracerProvider} The configured NodeTracerProvider instance
19
21
  *
20
22
  * @example
@@ -29,10 +31,15 @@ import { registerInstrumentations, } from "@opentelemetry/instrumentation";
29
31
  * });
30
32
  * ```
31
33
  */
32
- export function register({ url: paramsUrl, apiKey: paramsApiKey, projectName = "default", instrumentations, batch = true, global = true, }) {
34
+ export function register({ url: paramsUrl, apiKey: paramsApiKey, headers: paramsHeaders = {}, projectName = "default", instrumentations, batch = true, global = true, diagLogLevel, }) {
35
+ if (diagLogLevel) {
36
+ diag.setLogger(new DiagConsoleLogger(), diagLogLevel);
37
+ }
33
38
  const url = ensureCollectorEndpoint(paramsUrl || getEnvCollectorURL() || "http://localhost:6006");
34
39
  const apiKey = paramsApiKey || getEnvApiKey();
35
- const headers = {};
40
+ const headers = Array.isArray(paramsHeaders)
41
+ ? Object.fromEntries(paramsHeaders)
42
+ : paramsHeaders;
36
43
  const configureHeaders = typeof apiKey == "string";
37
44
  if (configureHeaders) {
38
45
  headers["authorization"] = `Bearer ${apiKey}`;
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EACL,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,kBAAkB,GAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAEL,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AAwCxC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,WAAW,GAAG,SAAS,EACvB,gBAAgB,EAChB,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,IAAI,GACE;IACf,MAAM,GAAG,GAAG,uBAAuB,CACjC,SAAS,IAAI,kBAAkB,EAAE,IAAI,uBAAuB,CAC7D,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,IAAI,YAAY,EAAE,CAAC;IAC9C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,gBAAgB,GAAG,OAAO,MAAM,IAAI,QAAQ,CAAC;IACnD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACrC,GAAG;QACH,OAAO;KACR,CAAC,CAAC;IACH,IAAI,aAA4B,CAAC;IACjC,IAAI,KAAK,EAAE,CAAC;QACV,aAAa,GAAG,IAAI,+BAA+B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAI,gCAAgC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC;QACtC,QAAQ,EAAE,sBAAsB,CAAC;YAC/B,CAAC,wBAAwB,CAAC,EAAE,WAAW;SACxC,CAAC;QACF,cAAc,EAAE,CAAC,aAAa,CAAC;KAChC,CAAC,CAAC;IAEH,IAAI,gBAAgB,EAAE,CAAC;QACrB,wBAAwB,CAAC;YACvB,gBAAgB;YAChB,cAAc,EAAE,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EACL,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,kBAAkB,GAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAEL,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAgB,MAAM,oBAAoB,CAAC;AAmD3E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,GAAG,EAAE,EAC3B,WAAW,GAAG,SAAS,EACvB,gBAAgB,EAChB,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,IAAI,EACb,YAAY,GACG;IACf,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAE,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,uBAAuB,CACjC,SAAS,IAAI,kBAAkB,EAAE,IAAI,uBAAuB,CAC7D,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,IAAI,YAAY,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAY,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QACnD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC;QACnC,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,gBAAgB,GAAG,OAAO,MAAM,IAAI,QAAQ,CAAC;IACnD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACrC,GAAG;QACH,OAAO;KACR,CAAC,CAAC;IACH,IAAI,aAA4B,CAAC;IACjC,IAAI,KAAK,EAAE,CAAC;QACV,aAAa,GAAG,IAAI,+BAA+B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAI,gCAAgC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC;QACtC,QAAQ,EAAE,sBAAsB,CAAC;YAC/B,CAAC,wBAAwB,CAAC,EAAE,WAAW;SACxC,CAAC;QACF,cAAc,EAAE,CAAC,aAAa,CAAC;KAChC,CAAC,CAAC;IAEH,IAAI,gBAAgB,EAAE,CAAC;QACrB,wBAAwB,CAAC;YACvB,gBAAgB;YAChB,cAAc,EAAE,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC"}