@@ -2,11 +2,11 @@ import 'dart:async';
22import 'dart:convert' ;
33
44import 'package:http/http.dart' ;
5+ import 'http_transport_request_creator.dart' ;
56
67import '../client_reports/client_report_recorder.dart' ;
78import '../client_reports/discard_reason.dart' ;
89import 'data_category.dart' ;
9- import 'noop_encode.dart' if (dart.library.io) 'encode.dart' ;
1010import '../noop_client.dart' ;
1111import '../protocol.dart' ;
1212import '../sentry_options.dart' ;
@@ -24,9 +24,7 @@ class HttpTransport implements Transport {
2424
2525 final ClientReportRecorder _recorder;
2626
27- late _CredentialBuilder _credentialBuilder;
28-
29- final Map <String , String > _headers;
27+ late HttpTransportRequestCreator _httpTransportRequestCreator;
3028
3129 factory HttpTransport (SentryOptions options, RateLimiter rateLimiter) {
3230 if (options.httpClient is NoOpClient ) {
@@ -38,15 +36,8 @@ class HttpTransport implements Transport {
3836
3937 HttpTransport ._(this ._options, this ._rateLimiter)
4038 : _dsn = Dsn .parse (_options.dsn! ),
41- _recorder = _options.recorder,
42- _headers = _buildHeaders (
43- _options.platformChecker.isWeb,
44- _options.sentryClientName,
45- ) {
46- _credentialBuilder = _CredentialBuilder (
47- _dsn,
48- _options.sentryClientName,
49- );
39+ _recorder = _options.recorder {
40+ _httpTransportRequestCreator = HttpTransportRequestCreator (_options, _dsn.postUri);
5041 }
5142
5243 @override
@@ -57,7 +48,7 @@ class HttpTransport implements Transport {
5748 }
5849 filteredEnvelope.header.sentAt = _options.clock ();
5950
60- final streamedRequest = await _createStreamedRequest (filteredEnvelope);
51+ final streamedRequest = await _httpTransportRequestCreator. createRequest (filteredEnvelope);
6152 final response = await _options.httpClient
6253 .send (streamedRequest)
6354 .then (Response .fromStream);
@@ -95,27 +86,6 @@ class HttpTransport implements Transport {
9586 return SentryId .fromId (eventId);
9687 }
9788
98- Future <StreamedRequest > _createStreamedRequest (
99- SentryEnvelope envelope) async {
100- final streamedRequest = StreamedRequest ('POST' , _dsn.postUri);
101-
102- if (_options.compressPayload) {
103- final compressionSink = compressInSink (streamedRequest.sink, _headers);
104- envelope
105- .envelopeStream (_options)
106- .listen (compressionSink.add)
107- .onDone (compressionSink.close);
108- } else {
109- envelope
110- .envelopeStream (_options)
111- .listen (streamedRequest.sink.add)
112- .onDone (streamedRequest.sink.close);
113- }
114- streamedRequest.headers.addAll (_credentialBuilder.configure (_headers));
115-
116- return streamedRequest;
117- }
118-
11989 void _updateRetryAfterLimits (Response response) {
12090 // seconds
12191 final retryAfterHeader = response.headers['Retry-After' ];
@@ -131,51 +101,3 @@ class HttpTransport implements Transport {
131101 sentryRateLimitHeader, retryAfterHeader, response.statusCode);
132102 }
133103}
134-
135- class _CredentialBuilder {
136- final String _authHeader;
137-
138- _CredentialBuilder ._(String authHeader) : _authHeader = authHeader;
139-
140- factory _CredentialBuilder (Dsn dsn, String sdkIdentifier) {
141- final authHeader = _buildAuthHeader (
142- publicKey: dsn.publicKey,
143- secretKey: dsn.secretKey,
144- sdkIdentifier: sdkIdentifier,
145- );
146-
147- return _CredentialBuilder ._(authHeader);
148- }
149-
150- static String _buildAuthHeader ({
151- required String publicKey,
152- String ? secretKey,
153- required String sdkIdentifier,
154- }) {
155- var header = 'Sentry sentry_version=7, sentry_client=$sdkIdentifier , '
156- 'sentry_key=$publicKey ' ;
157-
158- if (secretKey != null ) {
159- header += ', sentry_secret=$secretKey ' ;
160- }
161-
162- return header;
163- }
164-
165- Map <String , String > configure (Map <String , String > headers) {
166- return headers
167- ..addAll (
168- < String , String > {'X-Sentry-Auth' : _authHeader},
169- );
170- }
171- }
172-
173- Map <String , String > _buildHeaders (bool isWeb, String sdkIdentifier) {
174- final headers = {'Content-Type' : 'application/x-sentry-envelope' };
175- // NOTE(lejard_h) overriding user agent on VM and Flutter not sure why
176- // for web it use browser user agent
177- if (! isWeb) {
178- headers['User-Agent' ] = sdkIdentifier;
179- }
180- return headers;
181- }
0 commit comments