@fluwa-tool/sdk 1.0.42 → 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,41 +82,107 @@ class XMLHttpRequestInterceptor {
|
|
|
82
82
|
};
|
|
83
83
|
checkMockWithRetry().then(mockResponse => {
|
|
84
84
|
if (mockResponse) {
|
|
85
|
-
// Mock encontrado -
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
+
}
|
|
108
136
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
xhr.onload.call(xhr, event);
|
|
137
|
+
catch (e) {
|
|
138
|
+
self.logger.debug('Erro ao injetar propriedades mock:', e);
|
|
112
139
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
140
|
+
// Agora simular readyState progression
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
setReadyState(1);
|
|
143
|
+
if (xhr.onreadystatechange) {
|
|
144
|
+
try {
|
|
145
|
+
xhr.onreadystatechange();
|
|
146
|
+
}
|
|
147
|
+
catch (e) { }
|
|
148
|
+
}
|
|
149
|
+
}, 0);
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
setReadyState(2);
|
|
152
|
+
if (xhr.onreadystatechange) {
|
|
153
|
+
try {
|
|
154
|
+
xhr.onreadystatechange();
|
|
155
|
+
}
|
|
156
|
+
catch (e) { }
|
|
157
|
+
}
|
|
158
|
+
}, 5);
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
setReadyState(3);
|
|
161
|
+
if (xhr.onreadystatechange) {
|
|
162
|
+
try {
|
|
163
|
+
xhr.onreadystatechange();
|
|
164
|
+
}
|
|
165
|
+
catch (e) { }
|
|
166
|
+
}
|
|
167
|
+
}, 10);
|
|
168
|
+
// Final: readyState = 4 com propriedades já configuradas
|
|
169
|
+
setTimeout(() => {
|
|
170
|
+
setReadyState(4);
|
|
171
|
+
if (xhr.onreadystatechange) {
|
|
172
|
+
try {
|
|
173
|
+
xhr.onreadystatechange();
|
|
174
|
+
}
|
|
175
|
+
catch (e) { }
|
|
176
|
+
}
|
|
177
|
+
if (xhr.onload) {
|
|
178
|
+
try {
|
|
179
|
+
xhr.onload();
|
|
180
|
+
}
|
|
181
|
+
catch (e) { }
|
|
182
|
+
}
|
|
183
|
+
}, 15);
|
|
184
|
+
}, delay);
|
|
185
|
+
});
|
|
120
186
|
return;
|
|
121
187
|
}
|
|
122
188
|
// Sem mock - fazer request real
|