1
1
import 'dart:async' ;
2
2
3
3
import 'package:instabug_flutter/instabug_flutter.dart' ;
4
+ import 'package:instabug_flutter/src/generated/instabug.api.g.dart' ;
5
+ import 'package:instabug_flutter/src/utils/feature_flags_manager.dart' ;
6
+ import 'package:instabug_flutter/src/utils/instabug_constants.dart' ;
7
+ import 'package:instabug_flutter/src/utils/instabug_logger.dart' ;
4
8
5
9
typedef ObfuscateLogCallback = FutureOr <NetworkData > Function (NetworkData data);
6
10
typedef OmitLogCallback = FutureOr <bool > Function (NetworkData data);
@@ -10,6 +14,8 @@ typedef OmitLogCallback = FutureOr<bool> Function(NetworkData data);
10
14
class NetworkManager {
11
15
ObfuscateLogCallback ? _obfuscateLogCallback;
12
16
OmitLogCallback ? _omitLogCallback;
17
+ int ? _cachedNetworkBodyMaxSize;
18
+ final _host = InstabugHostApi ();
13
19
14
20
// ignore: use_setters_to_change_properties
15
21
void setObfuscateLogCallback (ObfuscateLogCallback callback) {
@@ -36,4 +42,92 @@ class NetworkManager {
36
42
37
43
return _omitLogCallback !(data);
38
44
}
45
+
46
+ /// Checks if network request body exceeds backend size limits
47
+ ///
48
+ /// Returns true if request body size exceeds the limit
49
+ Future <bool > didRequestBodyExceedSizeLimit (NetworkData data) async {
50
+ try {
51
+ final limit = await _getNetworkBodyMaxSize ();
52
+ if (limit == null ) {
53
+ return false ; // If we can't get the limit, don't block logging
54
+ }
55
+
56
+ final requestExceeds = data.requestBodySize > limit;
57
+ if (requestExceeds) {
58
+ InstabugLogger .I .d (
59
+ InstabugConstants .getNetworkBodyLimitExceededMessage (
60
+ type: 'request' ,
61
+ bodySize: data.requestBodySize,
62
+ ),
63
+ tag: InstabugConstants .networkManagerTag,
64
+ );
65
+ }
66
+
67
+ return requestExceeds;
68
+ } catch (error) {
69
+ InstabugLogger .I .e (
70
+ 'Error checking network request body size limit: $error ' ,
71
+ tag: InstabugConstants .networkManagerTag,
72
+ );
73
+ return false ; // Don't block logging on error
74
+ }
75
+ }
76
+
77
+ /// Checks if network response body exceeds backend size limits
78
+ ///
79
+ /// Returns true if response body size exceeds the limit
80
+ Future <bool > didResponseBodyExceedSizeLimit (NetworkData data) async {
81
+ try {
82
+ final limit = await _getNetworkBodyMaxSize ();
83
+ if (limit == null ) {
84
+ return false ; // If we can't get the limit, don't block logging
85
+ }
86
+
87
+ final responseExceeds = data.responseBodySize > limit;
88
+ if (responseExceeds) {
89
+ InstabugLogger .I .d (
90
+ InstabugConstants .getNetworkBodyLimitExceededMessage (
91
+ type: 'response' ,
92
+ bodySize: data.responseBodySize,
93
+ ),
94
+ tag: InstabugConstants .networkManagerTag,
95
+ );
96
+ }
97
+
98
+ return responseExceeds;
99
+ } catch (error) {
100
+ InstabugLogger .I .e (
101
+ 'Error checking network response body size limit: $error ' ,
102
+ tag: InstabugConstants .networkManagerTag,
103
+ );
104
+ return false ; // Don't block logging on error
105
+ }
106
+ }
107
+
108
+ /// Gets the network body max size from native SDK, with caching
109
+ Future <int ?> _getNetworkBodyMaxSize () async {
110
+ if (_cachedNetworkBodyMaxSize != null ) {
111
+ return _cachedNetworkBodyMaxSize;
112
+ }
113
+
114
+ final ffmNetworkBodyLimit = FeatureFlagsManager ().networkBodyMaxSize;
115
+
116
+ if (ffmNetworkBodyLimit > 0 ) {
117
+ _cachedNetworkBodyMaxSize = ffmNetworkBodyLimit;
118
+ return ffmNetworkBodyLimit;
119
+ }
120
+
121
+ try {
122
+ final limit = await _host.getNetworkBodyMaxSize ();
123
+ _cachedNetworkBodyMaxSize = limit;
124
+ return limit;
125
+ } catch (error) {
126
+ InstabugLogger .I .e (
127
+ 'Failed to get network body max size from native API: $error ' ,
128
+ tag: InstabugConstants .networkManagerTag,
129
+ );
130
+ return null ;
131
+ }
132
+ }
39
133
}
0 commit comments