react-native-qalink 0.2.0 → 0.3.1

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.
Files changed (42) hide show
  1. package/README.md +10 -1
  2. package/dist/core/device.d.ts +14 -0
  3. package/dist/core/device.d.ts.map +1 -0
  4. package/dist/core/device.js +46 -27
  5. package/dist/core/device.js.map +1 -0
  6. package/dist/core/sanitize.d.ts +16 -0
  7. package/dist/core/sanitize.d.ts.map +1 -0
  8. package/dist/core/sanitize.js +96 -49
  9. package/dist/core/sanitize.js.map +1 -0
  10. package/dist/core/session.d.ts +0 -1
  11. package/dist/core/session.d.ts.map +1 -1
  12. package/dist/core/session.js +12 -27
  13. package/dist/core/session.js.map +1 -1
  14. package/dist/index.d.ts +6 -40
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +197 -174
  17. package/dist/index.js.map +1 -1
  18. package/dist/interceptors/axios.d.ts.map +1 -1
  19. package/dist/interceptors/axios.js +5 -4
  20. package/dist/interceptors/axios.js.map +1 -1
  21. package/dist/interceptors/console.js +111 -67
  22. package/dist/interceptors/errors.d.ts.map +1 -1
  23. package/dist/interceptors/errors.js +4 -3
  24. package/dist/interceptors/errors.js.map +1 -1
  25. package/dist/interceptors/fetch.d.ts +1 -1
  26. package/dist/interceptors/fetch.d.ts.map +1 -1
  27. package/dist/interceptors/fetch.js +99 -96
  28. package/dist/interceptors/fetch.js.map +1 -1
  29. package/dist/interceptors/metro.d.ts +4 -0
  30. package/dist/interceptors/metro.d.ts.map +1 -0
  31. package/dist/interceptors/metro.js +189 -0
  32. package/dist/interceptors/metro.js.map +1 -0
  33. package/dist/interceptors/runtime.d.ts.map +1 -1
  34. package/dist/interceptors/runtime.js +55 -31
  35. package/dist/interceptors/runtime.js.map +1 -1
  36. package/dist/transport/websocket.d.ts +3 -2
  37. package/dist/transport/websocket.d.ts.map +1 -1
  38. package/dist/transport/websocket.js +16 -4
  39. package/dist/transport/websocket.js.map +1 -1
  40. package/dist/types/index.d.ts +66 -31
  41. package/dist/types/index.d.ts.map +1 -1
  42. package/package.json +22 -5
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupMetroInterceptor = setupMetroInterceptor;
4
+ const session_1 = require("../core/session");
5
+ /**
6
+ * Cómo crashea Metro y cómo lo capturamos:
7
+ *
8
+ * 1. SYNTAX ERRORS — cuando hay un error de sintaxis en un archivo JS/TS
9
+ * Metro llama a console.error con un mensaje que contiene "SyntaxError"
10
+ * y la ruta del archivo. Lo capturamos interceptando console.error.
11
+ *
12
+ * 2. MODULE NOT FOUND — cuando un import no puede resolverse
13
+ * Genera un mensaje "Unable to resolve module 'X' from 'Y'"
14
+ * También pasa por console.error.
15
+ *
16
+ * 3. TRANSFORM ERRORS — cuando Babel/TypeScript falla al compilar
17
+ * Mensaje: "TransformError" con ruta del archivo y línea.
18
+ *
19
+ * 4. BUNDLING FAILED — error general del bundler
20
+ * Mensaje: "bundling failed" o "Metro Bundler"
21
+ *
22
+ * 5. HOT RELOAD ERRORS — errores durante HMR
23
+ * Pasan por el global error handler de RN.
24
+ *
25
+ * Todos estos patrones los detectamos y clasificamos en metro_error
26
+ * separado de los console_error normales para que el dashboard los
27
+ * muestre diferenciado y el QA pueda identificarlos rápido.
28
+ */
29
+ // Patrones exactos que indican un error de Metro Bundler
30
+ const METRO_PATTERNS = [
31
+ { pattern: /Unable to resolve module ['"]([^'"]+)['"]\s+from\s+['"]([^'"]+)['"]/i, type: 'module_not_found' },
32
+ { pattern: /SyntaxError:.+\((\d+):(\d+)\)/i, type: 'syntax_error' },
33
+ { pattern: /TransformError/i, type: 'transform_error' },
34
+ { pattern: /bundling failed/i, type: 'bundling_failed' },
35
+ { pattern: /Metro(?:\s+Bundler)?:/i, type: 'metro_generic' },
36
+ { pattern: /error: .+\.(?:js|ts|tsx|jsx):\s*\d+:\d+/i, type: 'build_error' },
37
+ { pattern: /Requiring unknown module/i, type: 'module_not_found' },
38
+ { pattern: /Module not found/i, type: 'module_not_found' },
39
+ { pattern: /cannot find module/i, type: 'module_not_found' },
40
+ { pattern: /ENOENT:.+require/i, type: 'module_not_found' },
41
+ ];
42
+ // Extrae nombre de archivo y línea del mensaje si los contiene
43
+ function parseFileInfo(message) {
44
+ // Patrón: "path/to/file.tsx:42:10"
45
+ const fileMatch = message.match(/([^\s:]+\.(?:js|ts|tsx|jsx)):(\d+):(\d+)/);
46
+ if (fileMatch) {
47
+ return {
48
+ file: fileMatch[1],
49
+ lineNumber: parseInt(fileMatch[2], 10),
50
+ column: parseInt(fileMatch[3], 10),
51
+ };
52
+ }
53
+ // Patrón: "path/to/file.tsx (42:10)"
54
+ const fileMatch2 = message.match(/([^\s(]+\.(?:js|ts|tsx|jsx))\s*\((\d+):(\d+)\)/);
55
+ if (fileMatch2) {
56
+ return {
57
+ file: fileMatch2[1],
58
+ lineNumber: parseInt(fileMatch2[2], 10),
59
+ column: parseInt(fileMatch2[3], 10),
60
+ };
61
+ }
62
+ return {};
63
+ }
64
+ function isMetroMessage(message) {
65
+ return METRO_PATTERNS.some(({ pattern }) => pattern.test(message));
66
+ }
67
+ function getMetroSubtype(message) {
68
+ for (const { pattern, type } of METRO_PATTERNS) {
69
+ if (pattern.test(message))
70
+ return type;
71
+ }
72
+ return 'metro_generic';
73
+ }
74
+ function setupMetroInterceptor(transport, config, getDeviceId) {
75
+ const cleanups = [];
76
+ // ── 1. Interceptar console.error para detectar mensajes de Metro ──────────
77
+ // Metro reporta casi todos sus errores a través de console.error.
78
+ // Nos enganchamos ANTES del interceptor de consola general para
79
+ // clasificarlos como metro_error y no como console_error.
80
+ const originalConsoleError = console.error.bind(console);
81
+ const metroConsoleError = (...args) => {
82
+ var _a;
83
+ // Llamar siempre al original
84
+ originalConsoleError(...args);
85
+ if (config.captureMetroErrors === false)
86
+ return;
87
+ const message = args
88
+ .map(a => (typeof a === 'string' ? a : a instanceof Error ? `${a.message}\n${a.stack}` : String(a)))
89
+ .join(' ');
90
+ if (!isMetroMessage(message))
91
+ return;
92
+ const { file, lineNumber, column } = parseFileInfo(message);
93
+ const event = {
94
+ id: (0, session_1.generateId)(),
95
+ type: 'metro_error',
96
+ metroType: getMetroSubtype(message),
97
+ message: message.slice(0, 2000), // limitar tamaño
98
+ file,
99
+ lineNumber,
100
+ column,
101
+ timestamp: Date.now(),
102
+ sessionId: (0, session_1.getSessionId)(),
103
+ deviceId: getDeviceId(),
104
+ };
105
+ transport.send(event);
106
+ (_a = config.onEvent) === null || _a === void 0 ? void 0 : _a.call(config, event);
107
+ };
108
+ // Sobrescribir console.error — tener en cuenta que el interceptor de
109
+ // console general también lo sobrescribe, así que guardamos referencia
110
+ // al console.error ACTUAL (que puede ya estar sobrescrito) para no
111
+ // perder la cadena de interceptores.
112
+ const previousConsoleError = console.error;
113
+ console.error = (...args) => {
114
+ var _a;
115
+ previousConsoleError(...args);
116
+ if (config.captureMetroErrors === false)
117
+ return;
118
+ const message = args
119
+ .map(a => { var _a; return (typeof a === 'string' ? a : a instanceof Error ? `${a.message}\n${(_a = a.stack) !== null && _a !== void 0 ? _a : ''}` : String(a)); })
120
+ .join(' ');
121
+ if (!isMetroMessage(message))
122
+ return;
123
+ if (message.startsWith('[QALink]'))
124
+ return;
125
+ const { file, lineNumber, column } = parseFileInfo(message);
126
+ const event = {
127
+ id: (0, session_1.generateId)(),
128
+ type: 'metro_error',
129
+ metroType: getMetroSubtype(message),
130
+ message: message.slice(0, 2000),
131
+ file,
132
+ lineNumber,
133
+ column,
134
+ timestamp: Date.now(),
135
+ sessionId: (0, session_1.getSessionId)(),
136
+ deviceId: getDeviceId(),
137
+ };
138
+ transport.send(event);
139
+ (_a = config.onEvent) === null || _a === void 0 ? void 0 : _a.call(config, event);
140
+ };
141
+ cleanups.push(() => {
142
+ console.error = previousConsoleError;
143
+ });
144
+ // ── 2. ErrorUtils — capturar crashes fatales de Metro en el bridge ────────
145
+ // Algunos errores de Metro (especialmente durante HMR/hot reload)
146
+ // llegan como errores fatales al global error handler.
147
+ try {
148
+ if (typeof ErrorUtils !== 'undefined' && ErrorUtils.getGlobalHandler) {
149
+ const originalHandler = ErrorUtils.getGlobalHandler();
150
+ ErrorUtils.setGlobalHandler((error, isFatal) => {
151
+ var _a;
152
+ try {
153
+ if (config.captureMetroErrors !== false && (error === null || error === void 0 ? void 0 : error.message) && isMetroMessage(error.message)) {
154
+ const { file, lineNumber, column } = parseFileInfo(error.message);
155
+ const event = {
156
+ id: (0, session_1.generateId)(),
157
+ type: 'metro_error',
158
+ metroType: getMetroSubtype(error.message),
159
+ message: error.message.slice(0, 2000),
160
+ stack: error.stack,
161
+ file,
162
+ lineNumber,
163
+ column,
164
+ timestamp: Date.now(),
165
+ sessionId: (0, session_1.getSessionId)(),
166
+ deviceId: getDeviceId(),
167
+ };
168
+ transport.send(event);
169
+ (_a = config.onEvent) === null || _a === void 0 ? void 0 : _a.call(config, event);
170
+ }
171
+ }
172
+ catch (_b) { }
173
+ originalHandler(error, isFatal);
174
+ });
175
+ cleanups.push(() => {
176
+ try {
177
+ ErrorUtils.setGlobalHandler(originalHandler);
178
+ }
179
+ catch (_a) { }
180
+ });
181
+ }
182
+ }
183
+ catch (_a) { }
184
+ return () => cleanups.forEach(fn => { try {
185
+ fn();
186
+ }
187
+ catch (_a) { } });
188
+ }
189
+ //# sourceMappingURL=metro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metro.js","sourceRoot":"","sources":["../../src/interceptors/metro.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/interceptors/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAiD5D,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,MAAM,MAAM,GAC7B,MAAM,IAAI,CA2GZ"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/interceptors/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuB5D,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,MAAM,MAAM,GAC7B,MAAM,IAAI,CAmFZ"}
@@ -1,33 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setupRuntimeErrorHandler = void 0;
3
+ exports.setupRuntimeErrorHandler = setupRuntimeErrorHandler;
4
4
  const session_1 = require("../core/session");
5
-
6
5
  function classifyRuntimeError(message, isFatal) {
7
- if (isFatal) return 'red_screen';
8
- if (message.includes('NativeModule') || message.includes('Native module') || message.includes('TurboModule') || message.includes('requireNativeComponent')) return 'native_module';
9
- if (message.includes('bridge') || message.includes('JSContext') || message.includes('RCTBridge') || message.includes('JavaScriptCore')) return 'bridge';
10
- if (message.startsWith('Warning:') || message.includes('deprecated')) return 'yellow_box';
6
+ if (isFatal)
7
+ return 'red_screen';
8
+ if (message.includes('NativeModule') ||
9
+ message.includes('Native module') ||
10
+ message.includes('TurboModule') ||
11
+ message.includes('requireNativeComponent'))
12
+ return 'native_module';
13
+ if (message.includes('bridge') ||
14
+ message.includes('JSContext') ||
15
+ message.includes('RCTBridge') ||
16
+ message.includes('JavaScriptCore'))
17
+ return 'bridge';
18
+ if (message.startsWith('Warning:') || message.includes('deprecated'))
19
+ return 'yellow_box';
11
20
  return 'unknown';
12
21
  }
13
-
14
22
  function setupRuntimeErrorHandler(transport, config, getCurrentScreen) {
15
23
  const cleanups = [];
16
-
17
- // ── 1. Handler global de errores fatales ──────────────────────────────────
24
+ // ── 1. Handler global de errores fatales (pantalla roja) ──────────────────
18
25
  try {
19
26
  if (typeof ErrorUtils !== 'undefined' && ErrorUtils.getGlobalHandler) {
20
27
  const originalGlobalHandler = ErrorUtils.getGlobalHandler();
21
28
  ErrorUtils.setGlobalHandler((error, isFatal) => {
29
+ var _a, _b, _c;
22
30
  try {
23
- const fatal = isFatal ?? false;
24
- const category = classifyRuntimeError(error?.message ?? '', fatal);
31
+ const fatal = isFatal !== null && isFatal !== void 0 ? isFatal : false;
32
+ const category = classifyRuntimeError((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : '', fatal);
25
33
  const event = {
26
34
  id: (0, session_1.generateId)(),
27
35
  type: 'runtime_error',
28
36
  level: fatal ? 'fatal' : 'error',
29
- message: error?.message ?? String(error),
30
- stack: error?.stack,
37
+ message: (_b = error === null || error === void 0 ? void 0 : error.message) !== null && _b !== void 0 ? _b : String(error),
38
+ stack: error === null || error === void 0 ? void 0 : error.stack,
31
39
  isFatal: fatal,
32
40
  category,
33
41
  timestamp: Date.now(),
@@ -35,28 +43,37 @@ function setupRuntimeErrorHandler(transport, config, getCurrentScreen) {
35
43
  sessionId: (0, session_1.getSessionId)(),
36
44
  };
37
45
  transport.send(event);
38
- config.onEvent?.(event);
39
- } catch {}
46
+ (_c = config.onEvent) === null || _c === void 0 ? void 0 : _c.call(config, event);
47
+ }
48
+ catch (_d) {
49
+ // Nunca romper el handler original
50
+ }
40
51
  originalGlobalHandler(error, isFatal);
41
52
  });
42
53
  cleanups.push(() => {
43
- try { ErrorUtils.setGlobalHandler(originalGlobalHandler); } catch {}
54
+ try {
55
+ ErrorUtils.setGlobalHandler(originalGlobalHandler);
56
+ }
57
+ catch (_a) { }
44
58
  });
45
59
  }
46
- } catch {}
47
-
60
+ }
61
+ catch (_a) {
62
+ // ErrorUtils no disponible en este entorno
63
+ }
48
64
  // ── 2. Promesas rechazadas no manejadas ───────────────────────────────────
49
65
  try {
50
66
  const unhandledRejectionHandler = (event) => {
67
+ var _a, _b, _c;
51
68
  try {
52
- const error = event?.reason;
53
- const message = error?.message ?? String(error) ?? 'Unhandled Promise Rejection';
69
+ const error = event === null || event === void 0 ? void 0 : event.reason;
70
+ const message = (_b = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : String(error)) !== null && _b !== void 0 ? _b : 'Unhandled Promise Rejection';
54
71
  const runtimeEvent = {
55
72
  id: (0, session_1.generateId)(),
56
73
  type: 'runtime_error',
57
74
  level: 'error',
58
75
  message,
59
- stack: error?.stack,
76
+ stack: error === null || error === void 0 ? void 0 : error.stack,
60
77
  isFatal: false,
61
78
  category: 'unknown',
62
79
  timestamp: Date.now(),
@@ -64,20 +81,27 @@ function setupRuntimeErrorHandler(transport, config, getCurrentScreen) {
64
81
  sessionId: (0, session_1.getSessionId)(),
65
82
  };
66
83
  transport.send(runtimeEvent);
67
- config.onEvent?.(runtimeEvent);
68
- } catch {}
84
+ (_c = config.onEvent) === null || _c === void 0 ? void 0 : _c.call(config, runtimeEvent);
85
+ }
86
+ catch (_d) { }
69
87
  };
70
88
  if (typeof global !== 'undefined' && global.addEventListener) {
71
89
  global.addEventListener('unhandledrejection', unhandledRejectionHandler);
72
90
  cleanups.push(() => {
73
- try { global.removeEventListener('unhandledrejection', unhandledRejectionHandler); } catch {}
91
+ try {
92
+ global.removeEventListener('unhandledrejection', unhandledRejectionHandler);
93
+ }
94
+ catch (_a) { }
74
95
  });
75
96
  }
76
- } catch {}
77
-
78
- // NOTE: LogBox.__warn removido — causa crash en bridge nativo C++
79
- // Los warnings ya son capturados por el interceptor de console.warn
80
-
81
- return () => cleanups.forEach(fn => { try { fn(); } catch {} });
97
+ }
98
+ catch (_b) { }
99
+ // NOTE: LogBox.__warn ha sido removido — es una API interna privada de RN
100
+ // que causa crashes en el bridge nativo C++. Los warnings de RN ya son
101
+ // capturados por el interceptor de console.warn.
102
+ return () => cleanups.forEach(fn => { try {
103
+ fn();
104
+ }
105
+ catch (_a) { } });
82
106
  }
83
- exports.setupRuntimeErrorHandler = setupRuntimeErrorHandler;
107
+ //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/interceptors/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/interceptors/runtime.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,8 @@ export declare class WebSocketTransport {
9
9
  private readonly maxReconnectAttempts;
10
10
  private readonly reconnectBaseMs;
11
11
  private debug;
12
- private serverUrl;
13
- constructor(serverUrl: string, debug?: boolean);
12
+ private connectionUrl;
13
+ constructor(connectionUrl: string, debug?: boolean);
14
14
  connect(): void;
15
15
  disconnect(): void;
16
16
  send(event: QALinkEvent): void;
@@ -18,6 +18,7 @@ export declare class WebSocketTransport {
18
18
  private flushQueue;
19
19
  private scheduleReconnect;
20
20
  private log;
21
+ private maskedUrlForLogs;
21
22
  }
22
23
  export {};
23
24
  //# sourceMappingURL=websocket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,KAAK,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM,EAAE,KAAK,UAAQ;IAK5C,OAAO,IAAI,IAAI;IAoCf,UAAU,IAAI,IAAI;IAUlB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAe9B,SAAS,IAAI,eAAe;IAI5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,GAAG;CAKZ"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,KAAK,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,EAAE,MAAM,EAAE,KAAK,UAAQ;IAKhD,OAAO,IAAI,IAAI;IAoCf,UAAU,IAAI,IAAI;IAUlB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAe9B,SAAS,IAAI,eAAe;IAI5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WebSocketTransport = void 0;
4
4
  class WebSocketTransport {
5
- constructor(serverUrl, debug = false) {
5
+ constructor(connectionUrl, debug = false) {
6
6
  this.ws = null;
7
7
  this.queue = [];
8
8
  this.status = 'disconnected';
@@ -10,16 +10,16 @@ class WebSocketTransport {
10
10
  this.reconnectAttempts = 0;
11
11
  this.maxReconnectAttempts = 10;
12
12
  this.reconnectBaseMs = 1000;
13
- this.serverUrl = serverUrl;
13
+ this.connectionUrl = connectionUrl;
14
14
  this.debug = debug;
15
15
  }
16
16
  connect() {
17
17
  if (this.status === 'connecting' || this.status === 'connected')
18
18
  return;
19
19
  this.status = 'connecting';
20
- this.log(`Connecting to ${this.serverUrl}...`);
20
+ this.log(`Connecting to ${this.maskedUrlForLogs()}...`);
21
21
  try {
22
- this.ws = new WebSocket(this.serverUrl);
22
+ this.ws = new WebSocket(this.connectionUrl);
23
23
  this.ws.onopen = () => {
24
24
  this.status = 'connected';
25
25
  this.reconnectAttempts = 0;
@@ -99,6 +99,18 @@ class WebSocketTransport {
99
99
  console.log('[QALink Transport]', ...args);
100
100
  }
101
101
  }
102
+ maskedUrlForLogs() {
103
+ try {
104
+ const url = new URL(this.connectionUrl);
105
+ if (url.searchParams.has('apiKey')) {
106
+ url.searchParams.set('apiKey', '***');
107
+ }
108
+ return url.toString();
109
+ }
110
+ catch (_a) {
111
+ return this.connectionUrl;
112
+ }
113
+ }
102
114
  }
103
115
  exports.WebSocketTransport = WebSocketTransport;
104
116
  //# sourceMappingURL=websocket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export type ErrorSource = 'BACKEND' | 'FRONTEND' | 'NETWORK' | 'AUTH' | 'UNKNOWN';
2
- export type EventType = 'network_request' | 'network_error' | 'js_error' | 'breadcrumb' | 'session_start' | 'console_log' | 'console_warn' | 'console_error' | 'runtime_error' | 'metro_error';
2
+ export type EventType = 'network_request' | 'network_error' | 'js_error' | 'breadcrumb' | 'network_log' | 'session_start' | 'console_log' | 'console_warn' | 'console_error' | 'runtime_error' | 'metro_error';
3
3
  export interface NetworkEvent {
4
4
  id: string;
5
5
  type: 'network_request' | 'network_error';
@@ -14,6 +14,30 @@ export interface NetworkEvent {
14
14
  timestamp: number;
15
15
  source: ErrorSource;
16
16
  sessionId: string;
17
+ deviceId?: string;
18
+ }
19
+ export interface NetworkLogEvent {
20
+ id: string;
21
+ type: 'network_log';
22
+ method: string;
23
+ url: string;
24
+ statusCode?: number;
25
+ requestPayload?: unknown;
26
+ responsePayload?: unknown;
27
+ durationMs?: number;
28
+ timestamp: number;
29
+ sessionId: string;
30
+ deviceId?: string;
31
+ screen?: string;
32
+ sanitized: boolean;
33
+ }
34
+ export interface LogRequestOptions {
35
+ method: string;
36
+ url: string;
37
+ statusCode?: number;
38
+ requestPayload?: unknown;
39
+ responsePayload?: unknown;
40
+ durationMs?: number;
17
41
  }
18
42
  export interface JSErrorEvent {
19
43
  id: string;
@@ -24,14 +48,8 @@ export interface JSErrorEvent {
24
48
  timestamp: number;
25
49
  source: 'FRONTEND';
26
50
  sessionId: string;
51
+ deviceId?: string;
27
52
  }
28
- /**
29
- * Errores que React Native lanza en tiempo de ejecución:
30
- * - Red screen of death (pantalla roja)
31
- * - Yellow box warnings
32
- * - Errores de módulos nativos
33
- * - Errores de bridge JS<->Native
34
- */
35
53
  export interface RuntimeErrorEvent {
36
54
  id: string;
37
55
  type: 'runtime_error';
@@ -44,29 +62,34 @@ export interface RuntimeErrorEvent {
44
62
  timestamp: number;
45
63
  screen: string;
46
64
  sessionId: string;
65
+ deviceId?: string;
47
66
  }
48
67
  /**
49
- * Errores que Metro Bundler reporta durante el desarrollo:
50
- * - Syntax errors en el código
51
- * - Módulos no encontrados
52
- * - Errores de transformación
68
+ * Subtipos de errores de Metro Bundler:
69
+ * - module_not_found: import/require que no puede resolverse
70
+ * - syntax_error: error de sintaxis JS/TS en un archivo
71
+ * - transform_error: Babel/TypeScript falla al compilar
72
+ * - bundling_failed: fallo general del bundler
73
+ * - build_error: error de compilación genérico
74
+ * - metro_generic: cualquier otro error de Metro
53
75
  */
76
+ export type MetroErrorType = 'module_not_found' | 'syntax_error' | 'transform_error' | 'bundling_failed' | 'build_error' | 'metro_generic';
54
77
  export interface MetroErrorEvent {
55
78
  id: string;
56
79
  type: 'metro_error';
80
+ /** Subtipo específico del error de Metro */
81
+ metroType: MetroErrorType;
57
82
  message: string;
83
+ /** Archivo donde ocurrió el error (si se pudo extraer) */
58
84
  file?: string;
59
85
  lineNumber?: number;
60
86
  column?: number;
61
87
  stack?: string;
62
88
  timestamp: number;
63
89
  sessionId: string;
90
+ deviceId?: string;
64
91
  }
65
92
  export type ConsoleLevel = 'log' | 'warn' | 'error' | 'info' | 'debug';
66
- /**
67
- * Captura todo lo que el desarrollador imprime con console.log/warn/error.
68
- * Incluye los logs internos de React Native y librerías de terceros.
69
- */
70
93
  export interface ConsoleEvent {
71
94
  id: string;
72
95
  type: 'console_log' | 'console_warn' | 'console_error';
@@ -77,6 +100,7 @@ export interface ConsoleEvent {
77
100
  timestamp: number;
78
101
  screen: string;
79
102
  sessionId: string;
103
+ deviceId?: string;
80
104
  }
81
105
  export interface BreadcrumbEvent {
82
106
  id: string;
@@ -86,16 +110,19 @@ export interface BreadcrumbEvent {
86
110
  data?: Record<string, unknown>;
87
111
  timestamp: number;
88
112
  sessionId: string;
113
+ deviceId?: string;
89
114
  }
90
115
  export interface SessionStartEvent {
91
116
  id: string;
92
117
  type: 'session_start';
93
118
  sessionId: string;
119
+ deviceId: string;
94
120
  timestamp: number;
95
121
  deviceInfo: DeviceInfo;
96
122
  appVersion: string;
123
+ environment: 'dev' | 'prod';
97
124
  }
98
- export type QALinkEvent = NetworkEvent | JSErrorEvent | RuntimeErrorEvent | MetroErrorEvent | ConsoleEvent | BreadcrumbEvent | SessionStartEvent;
125
+ export type QALinkEvent = NetworkEvent | NetworkLogEvent | JSErrorEvent | RuntimeErrorEvent | MetroErrorEvent | ConsoleEvent | BreadcrumbEvent | SessionStartEvent;
99
126
  export interface DeviceInfo {
100
127
  platform: 'ios' | 'android';
101
128
  osVersion: string;
@@ -104,35 +131,43 @@ export interface DeviceInfo {
104
131
  buildType: 'debug' | 'release';
105
132
  }
106
133
  export interface ConsoleConfig {
107
- /** Capturar console.log (default: true) */
108
134
  captureLogs?: boolean;
109
- /** Capturar console.warn (default: true) */
110
135
  captureWarnings?: boolean;
111
- /** Capturar console.error (default: true) */
112
136
  captureErrors?: boolean;
113
- /**
114
- * Filtrar mensajes que contengan estos strings.
115
- * Útil para ignorar logs muy verbosos de librerías.
116
- * Ej: ['[react-query]', '[redux]']
117
- */
118
137
  ignorePatterns?: string[];
119
- /**
120
- * Solo capturar mensajes que contengan estos strings.
121
- * Si está vacío, captura todo.
122
- */
123
138
  includePatterns?: string[];
124
139
  }
125
140
  export interface QALinkConfig {
126
141
  serverUrl: string;
142
+ /** API key generated in QALink Dashboard (format: qlk_<64 hex chars>) */
143
+ apiKey: string;
127
144
  appVersion: string;
145
+ /** Habilita o deshabilita el SDK completamente. @default true */
128
146
  enabled?: boolean;
147
+ /** Entorno de la app. @default 'dev' */
148
+ environment?: 'dev' | 'prod';
129
149
  logNetworkBodies?: boolean;
130
150
  sensitiveHeaders?: string[];
131
151
  sensitiveUrlPatterns?: string[];
132
- /** Configuración de captura de consola y Metro */
152
+ sensitiveBodyFields?: string[];
133
153
  console?: ConsoleConfig;
134
- /** Capturar errores del runtime de React Native (red/yellow box) */
135
154
  captureRuntimeErrors?: boolean;
155
+ /**
156
+ * Captura errores de Metro Bundler: módulos no encontrados,
157
+ * syntax errors, transform errors, bundling failures, etc.
158
+ *
159
+ * Muy útil para detectar crashes de la app causados por
160
+ * problemas en el proceso de compilación/bundling.
161
+ *
162
+ * @default true
163
+ *
164
+ * @example — Desactivar:
165
+ * captureMetroErrors: false
166
+ *
167
+ * @example — Solo en desarrollo:
168
+ * captureMetroErrors: __DEV__
169
+ */
170
+ captureMetroErrors?: boolean;
136
171
  onEvent?: (event: QALinkEvent) => void;
137
172
  debug?: boolean;
138
173
  }