1+ // ignore_for_file: invalid_use_of_internal_member
2+
13library instabug_http_client;
24
35import 'dart:convert' ;
@@ -7,19 +9,16 @@ import 'dart:convert';
79import 'dart:typed_data' ;
810
911import 'package:http/http.dart' as http;
12+ import 'package:instabug_flutter/instabug_flutter.dart' ;
1013import 'package:instabug_http_client/instabug_http_logger.dart' ;
1114import 'package:meta/meta.dart' ;
1215
1316class 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 () {
2018 logger = this ;
2119 }
2220
21+ final NetworkLogger _networklogger = NetworkLogger ();
2322 @visibleForTesting
2423 http.Client client;
2524
@@ -31,66 +30,92 @@ class InstabugHttpClient extends InstabugHttpLogger implements http.Client {
3130
3231 @override
3332 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 {
3534 final DateTime startTime = DateTime .now ();
35+ final Map <String , String > requestHeader = headers ?? < String , String > {};
36+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
3637 return client
37- .delete (url, body: body, headers: headers , encoding: encoding)
38+ .delete (url, body: body, headers: requestHeader , encoding: encoding)
3839 .then ((http.Response response) {
39- logger.onLogger (response, startTime: startTime);
40+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
4041 return response;
4142 });
4243 }
4344
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+
4455 @override
45- Future <http.Response > get (Uri url, {Map <String , String >? headers}) {
56+ Future <http.Response > get (Uri url, {Map <String , String >? headers}) async {
4657 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);
4964 return response;
5065 });
5166 }
5267
5368 @override
54- Future <http.Response > head (Uri url, {Map <String , String >? headers}) {
69+ Future <http.Response > head (Uri url, {Map <String , String >? headers}) async {
5570 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);
5877 return response;
5978 });
6079 }
6180
6281 @override
6382 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 {
6584 final DateTime startTime = DateTime .now ();
85+ final Map <String , String > requestHeader = headers ?? < String , String > {};
86+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
6687 return client
67- .patch (url, headers: headers , body: body, encoding: encoding)
88+ .patch (url, headers: requestHeader , body: body, encoding: encoding)
6889 .then ((http.Response response) {
69- logger.onLogger (response, startTime: startTime);
90+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
7091 return response;
7192 });
7293 }
7394
7495 @override
7596 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 {
7798 final DateTime startTime = DateTime .now ();
99+ final Map <String , String > requestHeader = headers ?? < String , String > {};
100+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
78101 return client
79- .post (url, headers: headers , body: body, encoding: encoding)
102+ .post (url, headers: requestHeader , body: body, encoding: encoding)
80103 .then ((http.Response response) {
81- logger.onLogger (response, startTime: startTime);
104+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
82105 return response;
83106 });
84107 }
85108
86109 @override
87110 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 {
89112 final DateTime startTime = DateTime .now ();
113+ final Map <String , String > requestHeader = headers ?? < String , String > {};
114+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
90115 return client
91- .put (url, headers: headers , body: body, encoding: encoding)
116+ .put (url, headers: requestHeader , body: body, encoding: encoding)
92117 .then ((http.Response response) {
93- logger.onLogger (response, startTime: startTime);
118+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
94119 return response;
95120 });
96121 }
@@ -104,12 +129,14 @@ class InstabugHttpClient extends InstabugHttpLogger implements http.Client {
104129 client.readBytes (url, headers: headers);
105130
106131 @override
107- Future <http.StreamedResponse > send (http.BaseRequest request) {
132+ Future <http.StreamedResponse > send (http.BaseRequest request) async {
108133 final DateTime startTime = DateTime .now ();
134+ final Map <String , String > requestHeader = request.headers;
135+ final W3CHeader ? w3cHeader = await getW3cHeader (requestHeader, startTime);
109136 return client.send (request).then ((http.StreamedResponse streamedResponse) =>
110137 http.Response .fromStream (streamedResponse)
111138 .then ((http.Response response) {
112- logger.onLogger (response, startTime: startTime);
139+ logger.onLogger (response, startTime: startTime, w3CHeader : w3cHeader );
113140 // Need to return new StreamedResponse, as body only can be listened once
114141 return http.StreamedResponse (
115142 Stream <List <int >>.value (response.bodyBytes),
0 commit comments