@@ -2,7 +2,7 @@ import { NodeSDK } from "@opentelemetry/sdk-node";
2
2
import { SpanProcessor } from "@opentelemetry/sdk-trace-node" ;
3
3
import { context , diag } from "@opentelemetry/api" ;
4
4
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto" ;
5
- import { resourceFromAttributes } from "@opentelemetry/resources" ;
5
+ import { resourceFromAttributes , Resource } from "@opentelemetry/resources" ;
6
6
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions" ;
7
7
import { Instrumentation } from "@opentelemetry/instrumentation" ;
8
8
import { InitializeOptions } from "../interfaces" ;
@@ -307,10 +307,38 @@ export const startTracing = (options: InitializeOptions) => {
307
307
spanProcessors . push ( options . processor ) ;
308
308
}
309
309
310
+ // Create resource with proper detection and defensive handling for OTLP serialization
311
+ const serviceName =
312
+ options . appName || process . env . npm_package_name || "unknown-service" ;
313
+ let resource : Resource ;
314
+
315
+ try {
316
+ // Create our custom resource with service name and let NodeSDK handle default detection
317
+ resource = resourceFromAttributes ( {
318
+ [ ATTR_SERVICE_NAME ] : serviceName ,
319
+ } ) ;
320
+
321
+ // Defensive check to prevent OTLP serialization errors
322
+ if ( ! resource || typeof resource !== "object" ) {
323
+ throw new Error ( "Invalid resource object" ) ;
324
+ }
325
+
326
+ if ( ! resource . attributes || typeof resource . attributes !== "object" ) {
327
+ throw new Error ( "Resource missing attributes" ) ;
328
+ }
329
+ } catch ( error ) {
330
+ // Fallback: create a basic resource manually
331
+ diag . warn (
332
+ "Failed to create resource with resourceFromAttributes, using fallback" ,
333
+ error ,
334
+ ) ;
335
+ resource = resourceFromAttributes ( {
336
+ [ ATTR_SERVICE_NAME ] : serviceName ,
337
+ } ) ;
338
+ }
339
+
310
340
_sdk = new NodeSDK ( {
311
- resource : resourceFromAttributes ( {
312
- [ ATTR_SERVICE_NAME ] : options . appName || process . env . npm_package_name ,
313
- } ) ,
341
+ resource,
314
342
spanProcessors,
315
343
contextManager : options . contextManager ,
316
344
textMapPropagator : options . propagator ,
0 commit comments