@fluwa-tool/sdk 1.0.43 → 1.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Interceptador de XMLHttpRequest
|
|
3
|
-
*
|
|
3
|
+
* Faz fetch interno quando há mock para evitar modificar xhr read-only
|
|
4
4
|
*/
|
|
5
5
|
import { ILogger } from '../../core/Logger';
|
|
6
6
|
import { IRequestLogger } from './RequestLogger';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Interceptador de XMLHttpRequest
|
|
4
|
-
*
|
|
4
|
+
* Faz fetch interno quando há mock para evitar modificar xhr read-only
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.XMLHttpRequestInterceptor = void 0;
|
|
@@ -82,20 +82,64 @@ class XMLHttpRequestInterceptor {
|
|
|
82
82
|
};
|
|
83
83
|
checkMockWithRetry().then(mockResponse => {
|
|
84
84
|
if (mockResponse) {
|
|
85
|
-
// Mock encontrado - simular resposta
|
|
85
|
+
// Mock encontrado - simular resposta XHR
|
|
86
86
|
requestMetadata.source = types_1.RequestSource.MOCK;
|
|
87
87
|
requestMetadata.status = mockResponse.status || 200;
|
|
88
88
|
requestMetadata.response = mockResponse.response;
|
|
89
89
|
const delay = mockResponse.delay || 0;
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// readyState
|
|
90
|
+
// Aguardar axios anexar seus handlers (envolver em Promise.resolve para dar tempo)
|
|
91
|
+
Promise.resolve().then(() => {
|
|
92
|
+
setTimeout(() => {
|
|
93
|
+
const duration = Date.now() - (xhr._fluwaStartTime || 0);
|
|
94
|
+
requestMetadata.duration = duration;
|
|
95
|
+
self.requestLogger.logComplete(requestMetadata).catch(() => { });
|
|
96
|
+
// Simular readyState progression usando defineProperty (Hermes engine compat)
|
|
97
|
+
const setReadyState = (state) => {
|
|
98
|
+
try {
|
|
99
|
+
Object.defineProperty(xhr, 'readyState', {
|
|
100
|
+
value: state,
|
|
101
|
+
writable: true,
|
|
102
|
+
configurable: true,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
// Fallback: try direct assignment se defineProperty falhar
|
|
107
|
+
xhr.readyState = state;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
// Primeiro: configurar todas as propriedades de resposta ANTES de começar readyState
|
|
111
|
+
try {
|
|
112
|
+
// Override status (read-only property in Hermes)
|
|
113
|
+
if (!Object.getOwnPropertyDescriptor(xhr, 'status')) {
|
|
114
|
+
Object.defineProperty(xhr, 'status', {
|
|
115
|
+
value: mockResponse.status || 200,
|
|
116
|
+
writable: true,
|
|
117
|
+
configurable: true,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// Override responseText (read-only property in Hermes)
|
|
121
|
+
if (!Object.getOwnPropertyDescriptor(xhr, 'responseText')) {
|
|
122
|
+
Object.defineProperty(xhr, 'responseText', {
|
|
123
|
+
value: JSON.stringify(mockResponse.response),
|
|
124
|
+
writable: true,
|
|
125
|
+
configurable: true,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Override response (read-only property in Hermes)
|
|
129
|
+
if (!Object.getOwnPropertyDescriptor(xhr, 'response')) {
|
|
130
|
+
Object.defineProperty(xhr, 'response', {
|
|
131
|
+
value: mockResponse.response,
|
|
132
|
+
writable: true,
|
|
133
|
+
configurable: true,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
self.logger.debug('Erro ao injetar propriedades mock:', e);
|
|
139
|
+
}
|
|
140
|
+
// Agora simular readyState progression
|
|
97
141
|
setTimeout(() => {
|
|
98
|
-
|
|
142
|
+
setReadyState(1);
|
|
99
143
|
if (xhr.onreadystatechange) {
|
|
100
144
|
try {
|
|
101
145
|
xhr.onreadystatechange();
|
|
@@ -103,37 +147,27 @@ class XMLHttpRequestInterceptor {
|
|
|
103
147
|
catch (e) { }
|
|
104
148
|
}
|
|
105
149
|
}, 0);
|
|
106
|
-
// readyState 2 = HEADERS_RECEIVED
|
|
107
150
|
setTimeout(() => {
|
|
108
|
-
|
|
151
|
+
setReadyState(2);
|
|
109
152
|
if (xhr.onreadystatechange) {
|
|
110
153
|
try {
|
|
111
154
|
xhr.onreadystatechange();
|
|
112
155
|
}
|
|
113
156
|
catch (e) { }
|
|
114
157
|
}
|
|
115
|
-
},
|
|
116
|
-
// readyState 3 = LOADING
|
|
158
|
+
}, 5);
|
|
117
159
|
setTimeout(() => {
|
|
118
|
-
|
|
160
|
+
setReadyState(3);
|
|
119
161
|
if (xhr.onreadystatechange) {
|
|
120
162
|
try {
|
|
121
163
|
xhr.onreadystatechange();
|
|
122
164
|
}
|
|
123
165
|
catch (e) { }
|
|
124
166
|
}
|
|
125
|
-
},
|
|
126
|
-
// readyState 4
|
|
167
|
+
}, 10);
|
|
168
|
+
// Final: readyState = 4 com propriedades já configuradas
|
|
127
169
|
setTimeout(() => {
|
|
128
|
-
|
|
129
|
-
xhr.statusText = responseStatus >= 200 && responseStatus < 300 ? 'OK' : 'Error';
|
|
130
|
-
xhr.responseText = responseJSON;
|
|
131
|
-
xhr.response = mockResponse.response;
|
|
132
|
-
xhr.readyState = 4;
|
|
133
|
-
const duration = Date.now() - (xhr._fluwaStartTime || 0);
|
|
134
|
-
requestMetadata.duration = duration;
|
|
135
|
-
self.requestLogger.logComplete(requestMetadata).catch(() => { });
|
|
136
|
-
// Chamar evento final
|
|
170
|
+
setReadyState(4);
|
|
137
171
|
if (xhr.onreadystatechange) {
|
|
138
172
|
try {
|
|
139
173
|
xhr.onreadystatechange();
|
|
@@ -146,14 +180,9 @@ class XMLHttpRequestInterceptor {
|
|
|
146
180
|
}
|
|
147
181
|
catch (e) { }
|
|
148
182
|
}
|
|
149
|
-
},
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
self.logger.debug('Erro ao simular resposta mockada:', error);
|
|
153
|
-
// Fallback: fazer request real
|
|
154
|
-
self.originalSend.apply(xhr, [body]);
|
|
155
|
-
}
|
|
156
|
-
}, delay);
|
|
183
|
+
}, 15);
|
|
184
|
+
}, delay);
|
|
185
|
+
});
|
|
157
186
|
return;
|
|
158
187
|
}
|
|
159
188
|
// Sem mock - fazer request real
|