@@ -2,7 +2,7 @@ import { NodeSDK } from "@opentelemetry/sdk-node";
22import { SpanProcessor } from "@opentelemetry/sdk-trace-node" ;
33import { context , diag } from "@opentelemetry/api" ;
44import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto" ;
5- import { resourceFromAttributes } from "@opentelemetry/resources" ;
5+ import { resourceFromAttributes , Resource } from "@opentelemetry/resources" ;
66import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions" ;
77import { Instrumentation } from "@opentelemetry/instrumentation" ;
88import { InitializeOptions } from "../interfaces" ;
@@ -307,10 +307,38 @@ export const startTracing = (options: InitializeOptions) => {
307307 spanProcessors . push ( options . processor ) ;
308308 }
309309
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+
310340 _sdk = new NodeSDK ( {
311- resource : resourceFromAttributes ( {
312- [ ATTR_SERVICE_NAME ] : options . appName || process . env . npm_package_name ,
313- } ) ,
341+ resource,
314342 spanProcessors,
315343 contextManager : options . contextManager ,
316344 textMapPropagator : options . propagator ,
0 commit comments