@@ -2,7 +2,13 @@ import type { RequestHandler } from '@apollo/client';
2
2
3
3
import InstabugConstants from '../utils/InstabugConstants' ;
4
4
import xhr , { NetworkData , ProgressCallback } from '../utils/XhrNetworkInterceptor' ;
5
- import { isContentTypeNotAllowed , reportNetworkLog } from '../utils/InstabugUtils' ;
5
+ import {
6
+ isContentTypeNotAllowed ,
7
+ registerFilteringAndObfuscationListener ,
8
+ registerFilteringListener ,
9
+ registerObfuscationListener ,
10
+ reportNetworkLog ,
11
+ } from '../utils/InstabugUtils' ;
6
12
import {
7
13
NativeNetworkLogger ,
8
14
NativeNetworkLoggerEvent ,
@@ -18,6 +24,7 @@ let _networkDataObfuscationHandler: NetworkDataObfuscationHandler | null | undef
18
24
let _requestFilterExpression = 'false' ;
19
25
let _isNativeInterceptionEnabled = false ;
20
26
let _networkListener : NetworkListenerType | null = null ;
27
+ let hasFilterExpression = false ;
21
28
22
29
/**
23
30
* Sets whether network logs should be sent with bug reports.
@@ -34,6 +41,9 @@ export const setEnabled = (isEnabled: boolean) => {
34
41
try {
35
42
if ( _networkDataObfuscationHandler ) {
36
43
network = await _networkDataObfuscationHandler ( network ) ;
44
+ console . log (
45
+ `Andrew: xhr.setOnDoneCallback -> _networkDataObfuscationHandler ${ network . url } ` ,
46
+ ) ;
37
47
}
38
48
39
49
if ( network . requestBodySize > InstabugConstants . MAX_NETWORK_BODY_SIZE_IN_BYTES ) {
@@ -82,6 +92,12 @@ export const setNativeInterceptionEnabled = (isEnabled: boolean) => {
82
92
_isNativeInterceptionEnabled = isEnabled ;
83
93
} ;
84
94
95
+ export const getNetworkDataObfuscationHandler = ( ) => _networkDataObfuscationHandler ;
96
+
97
+ export const getRequestFilterExpression = ( ) => _requestFilterExpression ;
98
+
99
+ export const hasRequestFilterExpression = ( ) => hasFilterExpression ;
100
+
85
101
/**
86
102
* Obfuscates any response data.
87
103
* @param handler
@@ -90,13 +106,16 @@ export const setNetworkDataObfuscationHandler = (
90
106
handler ?: NetworkDataObfuscationHandler | null | undefined ,
91
107
) => {
92
108
_networkDataObfuscationHandler = handler ;
93
- if ( _isNativeInterceptionEnabled ) {
94
- _registerNetworkLogsListener ( NetworkListenerType . obfuscation , async ( networkSnapshot ) => {
95
- if ( _networkDataObfuscationHandler ) {
96
- networkSnapshot = await _networkDataObfuscationHandler ( networkSnapshot ) ;
97
- }
98
- NativeNetworkLogger . updateNetworkLogSnapshot ( JSON . stringify ( networkSnapshot ) ) ;
99
- } ) ;
109
+ if ( _isNativeInterceptionEnabled && Platform . OS === 'ios' ) {
110
+ if ( hasFilterExpression ) {
111
+ console . log (
112
+ 'Andrew: setNetworkDataObfuscationHandler -> registerFilteringAndObfuscationListenerV2' ,
113
+ ) ;
114
+ registerFilteringAndObfuscationListener ( _requestFilterExpression ) ;
115
+ } else {
116
+ console . log ( 'Andrew: setNetworkDataObfuscationHandler -> registerObfuscationListener' ) ;
117
+ registerObfuscationListener ( ) ;
118
+ }
100
119
}
101
120
} ;
102
121
@@ -106,23 +125,18 @@ export const setNetworkDataObfuscationHandler = (
106
125
*/
107
126
export const setRequestFilterExpression = ( expression : string ) => {
108
127
_requestFilterExpression = expression ;
109
-
110
- if ( _isNativeInterceptionEnabled ) {
111
- _registerNetworkLogsListener ( NetworkListenerType . filtering , async ( networkSnapshot ) => {
112
- // eslint-disable-next-line no-new-func
113
- const predicate = Function ( 'network' , 'return ' + _requestFilterExpression ) ;
114
- const value = predicate ( networkSnapshot ) ;
115
- if ( Platform . OS === 'ios' ) {
116
- // For iOS True == Request will be saved, False == will be ignored
117
- NativeNetworkLogger . setNetworkLoggingRequestFilterPredicateIOS ( networkSnapshot . id , ! value ) ;
118
- } else {
119
- // For Android Setting the [url] to an empty string will ignore the request;
120
- if ( value ) {
121
- networkSnapshot . url = '' ;
122
- NativeNetworkLogger . updateNetworkLogSnapshot ( JSON . stringify ( networkSnapshot ) ) ;
123
- }
124
- }
125
- } ) ;
128
+ hasFilterExpression = true ;
129
+
130
+ if ( _isNativeInterceptionEnabled && Platform . OS === 'ios' ) {
131
+ if ( _networkDataObfuscationHandler ) {
132
+ console . log (
133
+ 'Andrew: setRequestFilterExpression -> registerFilteringAndObfuscationListenerV2' ,
134
+ ) ;
135
+ registerFilteringAndObfuscationListener ( _requestFilterExpression ) ;
136
+ } else {
137
+ console . log ( 'Andrew: setRequestFilterExpression -> registerFilteringListener' ) ;
138
+ registerFilteringListener ( _requestFilterExpression ) ;
139
+ }
126
140
}
127
141
} ;
128
142
@@ -148,23 +162,6 @@ export const apolloLinkRequestHandler: RequestHandler = (operation, forward) =>
148
162
return forward ( operation ) ;
149
163
} ;
150
164
151
- /**
152
- * @internal
153
- * Exported for internal/testing purposes only.
154
- */
155
- export function registerNetworkLogsListener (
156
- type : NetworkListenerType ,
157
- handler ?: ( networkSnapshot : NetworkData ) => void ,
158
- ) {
159
- if ( process . env . NODE_ENV === 'test' ) {
160
- _registerNetworkLogsListener ( type , handler ) ;
161
- } else {
162
- console . error (
163
- `${ InstabugConstants . IBG_APM_TAG } : The \`registerNetworkLogsListener()\` method is intended solely for testing purposes.` ,
164
- ) ;
165
- }
166
- }
167
-
168
165
/**
169
166
* @internal
170
167
* Exported for internal/testing purposes only.
@@ -179,7 +176,11 @@ export const resetNetworkListener = () => {
179
176
}
180
177
} ;
181
178
182
- const _registerNetworkLogsListener = (
179
+ /**
180
+ * @internal
181
+ * Exported for internal/testing purposes only.
182
+ */
183
+ export const registerNetworkLogsListener = (
183
184
type : NetworkListenerType ,
184
185
handler ?: ( networkSnapshot : NetworkData ) => void ,
185
186
) => {
0 commit comments