import { IdGenerator } from '@opentelemetry/core' ; import { generateTraceId , generateSpanId , TRACE_ID_BYTES , } from '../../internal/xray-id-generation' ; /**
 * IdGenerator that generates trace IDs conforming to AWS X-Ray format.
 * https://docs.aws.amazon.com/xray/latest/devguide/xray-api-sendingdata.html#xray-api-traceids
 */ export class AWSXRayIdGenerator implements IdGenerator { /**
     * Returns a random 16-byte trace ID formatted/encoded as a 32 lowercase hex
     * characters corresponding to 128 bits. The first 4 bytes correspond to the current
     * time, in seconds, as per X-Ray trace ID format.
     */ generateTraceId ( ) { return generateTraceId ( generateRandomBytes ) ; } /**
     * Returns a random 8-byte span ID formatted/encoded as a 16 lowercase hex
     * characters corresponding to 64 bits.
     */ generateSpanId ( ) { return generateSpanId ( generateRandomBytes ) ; } } const SHARED_BUFFER = Buffer . allocUnsafe ( TRACE_ID_BYTES ) ; function generateRandomBytes ( bytes ) { for ( let i = 0 ; i < bytes / 4 ; i ++ ) { SHARED_BUFFER . writeUInt32BE ( ( Math . random ( ) * 2 ** 32 ) >>> 0 , i * 4 ) ; } return SHARED_BUFFER . toString ( 'hex' , 0 , bytes ) ; }