@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
- * Usa fetch interno quando há mock para evitar problemas em React Native
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
- * Usa fetch interno quando há mock para evitar problemas em React Native
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 - fazer fetch interno para simular
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
- setTimeout(() => {
91
- const duration = Date.now() - (xhr._fluwaStartTime || 0);
92
- requestMetadata.duration = duration;
93
- self.requestLogger.logComplete(requestMetadata).catch(() => { });
94
- // Criar resposta fake e simular como se fosse enviada pelo servidor
95
- try {
96
- const responseJSON = JSON.stringify(mockResponse.response);
97
- const responseStatus = mockResponse.status || 200;
98
- // Injetar resposta no xhr (pode não funcionar perfeitamente, mas tenta)
99
- xhr.status = responseStatus;
100
- xhr.statusText = 'Mock';
101
- xhr.responseText = responseJSON;
102
- xhr.response = mockResponse.response;
103
- xhr.readyState = 4;
104
- // Disparar evento de completion
105
- const event = new ProgressEvent('readystatechange', {});
106
- if (xhr.onreadystatechange) {
107
- xhr.onreadystatechange.call(xhr, event);
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
- // Disparar evento de load como fallback
110
- if (xhr.onload) {
111
- xhr.onload.call(xhr, event);
137
+ catch (e) {
138
+ self.logger.debug('Erro ao injetar propriedades mock:', e);
112
139
  }
113
- }
114
- catch (error) {
115
- self.logger.debug('Erro ao simular resposta, usando fallback');
116
- // Fallback: fazer request real mesmo assim
117
- self.originalSend.apply(xhr, [body]);
118
- }
119
- }, delay);
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluwa-tool/sdk",
3
- "version": "1.0.42",
3
+ "version": "1.0.44",
4
4
  "description": "Fluwa DevTools SDK for network interception and mocking",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",