@@ -6,7 +6,31 @@ import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base';
66import { ProtobufTraceSerializer } from '@opentelemetry/otlp-transformer' ;
77import { ReadableSpan } from '@opentelemetry/sdk-trace-base' ;
88import { ExportResult } from '@opentelemetry/core' ;
9- import { getNodeVersion } from './utils' ;
9+ import { getNodeVersion } from '../../../../utils' ;
10+ let SignatureV4 : any ;
11+ let HttpRequest : any ;
12+ let defaultProvider : any ;
13+ let Sha256 : any ;
14+
15+ const nodeVersionSupported = getNodeVersion ( ) >= 16 ;
16+
17+ if ( nodeVersionSupported ) {
18+ try {
19+ const { defaultProvider : awsDefaultProvider } = require ( '@aws-sdk/credential-provider-node' ) ;
20+ const { Sha256 : awsSha256 } = require ( '@aws-crypto/sha256-js' ) ;
21+ const { SignatureV4 : awsSignatureV4 } = require ( '@smithy/signature-v4' ) ;
22+ const { HttpRequest : awsHttpRequest } = require ( '@smithy/protocol-http' ) ;
23+
24+ // Assign to module-level variables
25+ defaultProvider = awsDefaultProvider ;
26+ Sha256 = awsSha256 ;
27+ SignatureV4 = awsSignatureV4 ;
28+ HttpRequest = awsHttpRequest ;
29+ } catch ( error ) {
30+ diag . error ( `Failed to load required AWS dependency for SigV4 Signing: ${ error } ` ) ;
31+ }
32+ }
33+
1034
1135/**
1236 * This exporter extends the functionality of the OTLPProtoTraceExporter to allow spans to be exported
@@ -21,18 +45,18 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
2145 private endpoint : string ;
2246 private region : string ;
2347
24- // Holds the dependencies needed to sign the SigV4 headers
25- private defaultProvider : any ;
26- private sha256 : any ;
27- private signatureV4 : any ;
28- private httpRequest : any ;
48+ // // Holds the dependencies needed to sign the SigV4 headers
49+ // private defaultProvider: any;
50+ // private sha256: any;
51+ // private signatureV4: any;
52+ // private httpRequest: any;
2953
3054 // If the required dependencies are installed then we enable SigV4 signing. Otherwise skip it
3155 private hasRequiredDependencies : boolean = false ;
3256
3357 constructor ( endpoint : string , config ?: OTLPExporterNodeConfigBase ) {
3458 super ( OTLPAwsSpanExporter . changeUrlConfig ( endpoint , config ) ) ;
35- this . initDependencies ( ) ;
59+ // this.initDependencies();
3660 this . region = endpoint . split ( '.' ) [ 1 ] ;
3761 this . endpoint = endpoint ;
3862 }
@@ -59,7 +83,7 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
5983 const oldHeaders = this [ '_delegate' ] . _transport ?. _transport ?. _parameters ?. headers ( ) ;
6084
6185 if ( oldHeaders ) {
62- const request = new this . httpRequest ( {
86+ const request = new HttpRequest . httpRequest ( {
6387 method : 'POST' ,
6488 protocol : 'https' ,
6589 hostname : url . hostname ,
@@ -72,11 +96,11 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
7296 } ) ;
7397
7498 try {
75- const signer = new this . signatureV4 ( {
76- credentials : this . defaultProvider ( ) ,
99+ const signer = new SignatureV4 ( {
100+ credentials : defaultProvider ( ) ,
77101 region : this . region ,
78102 service : OTLPAwsSpanExporter . SERVICE_NAME ,
79- sha256 : this . sha256 ,
103+ sha256 : Sha256 ,
80104 } ) ;
81105
82106 const signedRequest = await signer . sign ( request ) ;
@@ -108,27 +132,27 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
108132 return newHeaders ;
109133 }
110134
111- private initDependencies ( ) : any {
112- if ( getNodeVersion ( ) < 16 ) {
113- diag . error ( 'SigV4 signing requires atleast Node major version 16' ) ;
114- return ;
115- }
116-
117- try {
118- const awsSdkModule = require ( '@aws-sdk/credential-provider-node' ) ;
119- const awsCryptoModule = require ( '@aws-crypto/sha256-js' ) ;
120- const signatureModule = require ( '@smithy/signature-v4' ) ;
121- const httpModule = require ( '@smithy/protocol-http' ) ;
122-
123- ( this . defaultProvider = awsSdkModule . defaultProvider ) ,
124- ( this . sha256 = awsCryptoModule . Sha256 ) ,
125- ( this . signatureV4 = signatureModule . SignatureV4 ) ,
126- ( this . httpRequest = httpModule . HttpRequest ) ;
127- this . hasRequiredDependencies = true ;
128- } catch ( error ) {
129- diag . error ( `Failed to load required AWS dependency for SigV4 Signing: ${ error } ` ) ;
130- }
131- }
135+ // private initDependencies(): any {
136+ // if (getNodeVersion() < 16) {
137+ // diag.error('SigV4 signing requires atleast Node major version 16');
138+ // return;
139+ // }
140+
141+ // try {
142+ // const awsSdkModule = require('@aws-sdk/credential-provider-node');
143+ // const awsCryptoModule = require('@aws-crypto/sha256-js');
144+ // const signatureModule = require('@smithy/signature-v4');
145+ // const httpModule = require('@smithy/protocol-http');
146+
147+ // (this.defaultProvider = awsSdkModule.defaultProvider),
148+ // (this.sha256 = awsCryptoModule.Sha256),
149+ // (this.signatureV4 = signatureModule.SignatureV4),
150+ // (this.httpRequest = httpModule.HttpRequest);
151+ // this.hasRequiredDependencies = true;
152+ // } catch (error) {
153+ // diag.error(`Failed to load required AWS dependency for SigV4 Signing: ${error}`);
154+ // }
155+ // }
132156
133157 private static changeUrlConfig ( endpoint : string , config ?: OTLPExporterNodeConfigBase ) : OTLPExporterNodeConfigBase {
134158 const newConfig =
0 commit comments