1
+ // ignore_for_file: invalid_use_of_internal_member
2
+
1
3
library instabug_http_client;
2
4
3
5
import 'dart:convert' ;
@@ -7,19 +9,16 @@ import 'dart:convert';
7
9
import 'dart:typed_data' ;
8
10
9
11
import 'package:http/http.dart' as http;
12
+ import 'package:instabug_flutter/instabug_flutter.dart' ;
10
13
import 'package:instabug_http_client/instabug_http_logger.dart' ;
11
14
import 'package:meta/meta.dart' ;
12
15
13
16
class InstabugHttpClient extends InstabugHttpLogger implements http.Client {
14
- /// Constructs a new [InstabugHttpClient] .
15
- ///
16
- /// Provide a value for [client] in order to override the internal client used
17
- /// by this class. This can be useful if you are working with other libraries
18
- /// that require other custom client implementations
19
- InstabugHttpClient ({http.Client ? client}) : client = client ?? http.Client () {
17
+ InstabugHttpClient () : client = http.Client () {
20
18
logger = this ;
21
19
}
22
20
21
+ final NetworkLogger _networklogger = NetworkLogger ();
23
22
@visibleForTesting
24
23
http.Client client;
25
24
@@ -31,66 +30,92 @@ class InstabugHttpClient extends InstabugHttpLogger implements http.Client {
31
30
32
31
@override
33
32
Future <http.Response > delete (Uri url,
34
- {Map <String , String >? headers, Object ? body, Encoding ? encoding}) {
33
+ {Map <String , String >? headers, Object ? body, Encoding ? encoding}) async {
35
34
final DateTime startTime = DateTime .now ();
35
+ final Map <String , String > requestHeader = headers ?? < String , String > {};
36
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
36
37
return client
37
- .delete (url, body: body, headers: headers , encoding: encoding)
38
+ .delete (url, body: body, headers: requestHeader , encoding: encoding)
38
39
.then ((http.Response response) {
39
- logger.onLogger (response, startTime: startTime);
40
+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
40
41
return response;
41
42
});
42
43
}
43
44
45
+ Future <W3CHeader ?> getW3cHeader (Map <String , String > requestHeader, DateTime startTime) async {
46
+ final W3CHeader ? w3cHeader = await _networklogger.getW3CHeader (
47
+ requestHeader, startTime.millisecondsSinceEpoch);
48
+ if (w3cHeader? .isW3cHeaderFound == false &&
49
+ w3cHeader? .w3CGeneratedHeader != null ) {
50
+ requestHeader['traceparent' ] = w3cHeader! .w3CGeneratedHeader! ;
51
+ }
52
+ return w3cHeader;
53
+ }
54
+
44
55
@override
45
- Future <http.Response > get (Uri url, {Map <String , String >? headers}) {
56
+ Future <http.Response > get (Uri url, {Map <String , String >? headers}) async {
46
57
final DateTime startTime = DateTime .now ();
47
- return client.get (url, headers: headers).then ((http.Response response) {
48
- logger.onLogger (response, startTime: startTime);
58
+ final Map <String , String > requestHeader = headers ?? < String , String > {};
59
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
60
+ return client
61
+ .get (url, headers: requestHeader)
62
+ .then ((http.Response response) {
63
+ logger.onLogger (response, startTime: startTime, w3CHeader: w3cHeader);
49
64
return response;
50
65
});
51
66
}
52
67
53
68
@override
54
- Future <http.Response > head (Uri url, {Map <String , String >? headers}) {
69
+ Future <http.Response > head (Uri url, {Map <String , String >? headers}) async {
55
70
final DateTime startTime = DateTime .now ();
56
- return client.head (url, headers: headers).then ((http.Response response) {
57
- logger.onLogger (response, startTime: startTime);
71
+ final Map <String , String > requestHeader = headers ?? < String , String > {};
72
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
73
+ return client
74
+ .head (url, headers: requestHeader)
75
+ .then ((http.Response response) {
76
+ logger.onLogger (response, startTime: startTime, w3CHeader: w3cHeader);
58
77
return response;
59
78
});
60
79
}
61
80
62
81
@override
63
82
Future <http.Response > patch (Uri url,
64
- {Map <String , String >? headers, Object ? body, Encoding ? encoding}) {
83
+ {Map <String , String >? headers, Object ? body, Encoding ? encoding}) async {
65
84
final DateTime startTime = DateTime .now ();
85
+ final Map <String , String > requestHeader = headers ?? < String , String > {};
86
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
66
87
return client
67
- .patch (url, headers: headers , body: body, encoding: encoding)
88
+ .patch (url, headers: requestHeader , body: body, encoding: encoding)
68
89
.then ((http.Response response) {
69
- logger.onLogger (response, startTime: startTime);
90
+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
70
91
return response;
71
92
});
72
93
}
73
94
74
95
@override
75
96
Future <http.Response > post (Uri url,
76
- {Map <String , String >? headers, Object ? body, Encoding ? encoding}) {
97
+ {Map <String , String >? headers, Object ? body, Encoding ? encoding}) async {
77
98
final DateTime startTime = DateTime .now ();
99
+ final Map <String , String > requestHeader = headers ?? < String , String > {};
100
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
78
101
return client
79
- .post (url, headers: headers , body: body, encoding: encoding)
102
+ .post (url, headers: requestHeader , body: body, encoding: encoding)
80
103
.then ((http.Response response) {
81
- logger.onLogger (response, startTime: startTime);
104
+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
82
105
return response;
83
106
});
84
107
}
85
108
86
109
@override
87
110
Future <http.Response > put (Uri url,
88
- {Map <String , String >? headers, Object ? body, Encoding ? encoding}) {
111
+ {Map <String , String >? headers, Object ? body, Encoding ? encoding}) async {
89
112
final DateTime startTime = DateTime .now ();
113
+ final Map <String , String > requestHeader = headers ?? < String , String > {};
114
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
90
115
return client
91
- .put (url, headers: headers , body: body, encoding: encoding)
116
+ .put (url, headers: requestHeader , body: body, encoding: encoding)
92
117
.then ((http.Response response) {
93
- logger.onLogger (response, startTime: startTime);
118
+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
94
119
return response;
95
120
});
96
121
}
@@ -104,12 +129,14 @@ class InstabugHttpClient extends InstabugHttpLogger implements http.Client {
104
129
client.readBytes (url, headers: headers);
105
130
106
131
@override
107
- Future <http.StreamedResponse > send (http.BaseRequest request) {
132
+ Future <http.StreamedResponse > send (http.BaseRequest request) async {
108
133
final DateTime startTime = DateTime .now ();
134
+ final Map <String , String > requestHeader = request.headers;
135
+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
109
136
return client.send (request).then ((http.StreamedResponse streamedResponse) =>
110
137
http.Response .fromStream (streamedResponse)
111
138
.then ((http.Response response) {
112
- logger.onLogger (response, startTime: startTime);
139
+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
113
140
// Need to return new StreamedResponse, as body only can be listened once
114
141
return http.StreamedResponse (
115
142
Stream <List <int >>.value (response.bodyBytes),
0 commit comments