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
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setupConsoleInterceptor = void 0;
3
+ exports.setupConsoleInterceptor = setupConsoleInterceptor;
4
4
  const session_1 = require("../core/session");
5
-
5
+ // Guardamos referencia a los métodos originales ANTES de sobrescribir
6
6
  const originalConsole = {
7
7
  log: console.log.bind(console),
8
8
  warn: console.warn.bind(console),
@@ -10,88 +10,132 @@ const originalConsole = {
10
10
  info: console.info.bind(console),
11
11
  debug: console.debug.bind(console),
12
12
  };
13
-
14
- const RN_WARNING_PATTERNS = ['Warning:', 'VirtualizedList', 'Each child in a list', 'componentWillMount', 'componentWillReceiveProps', 'componentWillUpdate', 'findDOMNode', 'ReactDOM.render', 'key prop', 'unique "key"', 'Maximum update depth'];
15
- const RN_ERROR_PATTERNS = ['Invariant Violation', 'Text strings must be rendered', 'Cannot update a component', 'Element type is invalid', 'Objects are not valid as a React child', 'TypeError', 'ReferenceError', 'Cannot read property', 'Cannot read properties', 'is not a function', 'undefined is not an object', 'null is not an object'];
16
- const METRO_ERROR_PATTERNS = ['Unable to resolve module', 'Module not found', 'SyntaxError', 'TransformError', 'bundling failed', 'Metro Bundler', 'Error: Metro'];
17
- const THIRD_PARTY_PATTERNS = ['[react-navigation]', '[react-query]', '[redux]', '[mobx]', '[zustand]', 'Reanimated', 'Gesture Handler', 'SafeAreaProvider'];
18
-
13
+ /**
14
+ * Patrones que identifican logs internos de React Native
15
+ * para clasificarlos correctamente en el dashboard.
16
+ */
17
+ const RN_WARNING_PATTERNS = [
18
+ 'Warning:',
19
+ 'VirtualizedList',
20
+ 'Each child in a list',
21
+ 'componentWillMount',
22
+ 'componentWillReceiveProps',
23
+ 'componentWillUpdate',
24
+ 'findDOMNode',
25
+ 'ReactDOM.render',
26
+ 'key prop',
27
+ 'unique "key"',
28
+ 'Maximum update depth',
29
+ ];
30
+ const RN_ERROR_PATTERNS = [
31
+ 'Invariant Violation',
32
+ 'Text strings must be rendered',
33
+ 'Cannot update a component',
34
+ 'Element type is invalid',
35
+ 'Objects are not valid as a React child',
36
+ 'TypeError',
37
+ 'ReferenceError',
38
+ 'Cannot read property',
39
+ 'Cannot read properties',
40
+ 'is not a function',
41
+ 'undefined is not an object',
42
+ 'null is not an object',
43
+ ];
44
+ const METRO_ERROR_PATTERNS = [
45
+ 'Unable to resolve module',
46
+ 'Module not found',
47
+ 'SyntaxError',
48
+ 'TransformError',
49
+ 'bundling failed',
50
+ 'Metro Bundler',
51
+ 'Error: Metro',
52
+ ];
53
+ const THIRD_PARTY_PATTERNS = [
54
+ '[react-navigation]',
55
+ '[react-query]',
56
+ '[redux]',
57
+ '[mobx]',
58
+ '[zustand]',
59
+ 'Reanimated',
60
+ 'Gesture Handler',
61
+ 'SafeAreaProvider',
62
+ ];
19
63
  function classifyConsoleMessage(message) {
20
- if (METRO_ERROR_PATTERNS.some(p => message.includes(p))) return 'rn_error';
21
- if (RN_ERROR_PATTERNS.some(p => message.includes(p))) return 'rn_error';
22
- if (RN_WARNING_PATTERNS.some(p => message.includes(p))) return 'rn_warning';
23
- if (THIRD_PARTY_PATTERNS.some(p => message.includes(p))) return 'third_party';
64
+ if (METRO_ERROR_PATTERNS.some(p => message.includes(p)))
65
+ return 'rn_error';
66
+ if (RN_ERROR_PATTERNS.some(p => message.includes(p)))
67
+ return 'rn_error';
68
+ if (RN_WARNING_PATTERNS.some(p => message.includes(p)))
69
+ return 'rn_warning';
70
+ if (THIRD_PARTY_PATTERNS.some(p => message.includes(p)))
71
+ return 'third_party';
24
72
  return 'user_log';
25
73
  }
26
-
27
74
  function serializeArg(arg) {
28
- if (arg === null) return 'null';
29
- if (arg === undefined) return 'undefined';
30
- if (typeof arg === 'string') return arg;
31
- if (typeof arg === 'number' || typeof arg === 'boolean') return String(arg);
32
- if (arg instanceof Error) return `${arg.name}: ${arg.message}\n${arg.stack ?? ''}`;
33
- try { return JSON.stringify(arg, null, 2); } catch { return String(arg); }
75
+ var _a;
76
+ if (arg === null)
77
+ return 'null';
78
+ if (arg === undefined)
79
+ return 'undefined';
80
+ if (typeof arg === 'string')
81
+ return arg;
82
+ if (typeof arg === 'number' || typeof arg === 'boolean')
83
+ return String(arg);
84
+ if (arg instanceof Error)
85
+ return `${arg.name}: ${arg.message}\n${(_a = arg.stack) !== null && _a !== void 0 ? _a : ''}`;
86
+ try {
87
+ return JSON.stringify(arg, null, 2);
88
+ }
89
+ catch (_b) {
90
+ return String(arg);
91
+ }
34
92
  }
35
-
36
93
  function shouldCapture(message, config) {
37
- if (!config) return true;
38
- if (config.ignorePatterns?.some(p => message.includes(p))) return false;
94
+ var _a;
95
+ if (!config)
96
+ return true;
97
+ // Ignorar si matchea algún patrón de exclusión
98
+ if ((_a = config.ignorePatterns) === null || _a === void 0 ? void 0 : _a.some(p => message.includes(p)))
99
+ return false;
100
+ // Si hay patrones de inclusión, solo capturar si matchea alguno
39
101
  if (config.includePatterns && config.includePatterns.length > 0) {
40
102
  return config.includePatterns.some(p => message.includes(p));
41
103
  }
42
104
  return true;
43
105
  }
44
-
45
- // FLAG para prevenir loops de recursión
46
- let _isSending = false;
47
-
48
106
  function setupConsoleInterceptor(transport, config, getCurrentScreen) {
49
- const consoleConfig = config.console ?? {};
50
- const { captureLogs = true, captureWarnings = true, captureErrors = true } = consoleConfig;
51
-
107
+ var _a;
108
+ const consoleConfig = (_a = config.console) !== null && _a !== void 0 ? _a : {};
109
+ const { captureLogs = true, captureWarnings = true, captureErrors = true, } = consoleConfig;
52
110
  function intercept(level, eventType, originalFn) {
53
111
  return (...args) => {
54
- // SIEMPRE llamar el original primero
112
+ var _a;
113
+ // Siempre llamar al original primero — Metro sigue mostrando todo
55
114
  originalFn(...args);
56
-
57
- // Evitar loop recursivo — si ya estamos enviando, no volver a entrar
58
- if (_isSending) return;
59
-
60
115
  const serializedArgs = args.map(serializeArg);
61
116
  const message = serializedArgs.join(' ');
62
-
63
- // Ignorar logs internos de QALink
64
- if (message.startsWith('[QALink]')) return;
65
-
66
- // Ignorar errores de call stack para evitar loop infinito
67
- if (message.includes('Maximum call stack') || message.includes('call stack size exceeded')) return;
68
-
69
- if (!shouldCapture(message, consoleConfig)) return;
70
-
71
- try {
72
- _isSending = true;
73
- const category = classifyConsoleMessage(message);
74
- const event = {
75
- id: (0, session_1.generateId)(),
76
- type: eventType,
77
- level,
78
- message,
79
- args: serializedArgs,
80
- category,
81
- timestamp: Date.now(),
82
- screen: getCurrentScreen(),
83
- sessionId: (0, session_1.getSessionId)(),
84
- };
85
- transport.send(event);
86
- config.onEvent?.(event);
87
- } catch {
88
- // Nunca romper la app por un error del interceptor
89
- } finally {
90
- _isSending = false;
91
- }
117
+ if (!shouldCapture(message, consoleConfig))
118
+ return;
119
+ // Evitar loop infinito si QALink mismo hace console.log en debug mode
120
+ if (message.startsWith('[QALink]'))
121
+ return;
122
+ const category = classifyConsoleMessage(message);
123
+ const event = {
124
+ id: (0, session_1.generateId)(),
125
+ type: eventType,
126
+ level,
127
+ message,
128
+ args: serializedArgs,
129
+ category,
130
+ timestamp: Date.now(),
131
+ screen: getCurrentScreen(),
132
+ sessionId: (0, session_1.getSessionId)(),
133
+ };
134
+ transport.send(event);
135
+ (_a = config.onEvent) === null || _a === void 0 ? void 0 : _a.call(config, event);
92
136
  };
93
137
  }
94
-
138
+ // Sobrescribir métodos de consola
95
139
  if (captureLogs) {
96
140
  console.log = intercept('log', 'console_log', originalConsole.log);
97
141
  console.info = intercept('info', 'console_log', originalConsole.info);
@@ -103,7 +147,7 @@ function setupConsoleInterceptor(transport, config, getCurrentScreen) {
103
147
  if (captureErrors) {
104
148
  console.error = intercept('error', 'console_error', originalConsole.error);
105
149
  }
106
-
150
+ // Cleanup: restaurar consola original
107
151
  return () => {
108
152
  console.log = originalConsole.log;
109
153
  console.warn = originalConsole.warn;
@@ -112,4 +156,4 @@ function setupConsoleInterceptor(transport, config, getCurrentScreen) {
112
156
  console.debug = originalConsole.debug;
113
157
  };
114
158
  }
115
- exports.setupConsoleInterceptor = setupConsoleInterceptor;
159
+ //# sourceMappingURL=console.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/interceptors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,GACnB,MAAM,IAAI,CAiDZ"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/interceptors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAO5D,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,GACnB,MAAM,IAAI,CAkDZ"}
@@ -38,10 +38,11 @@ function setupErrorHandlers(transport, config) {
38
38
  transport.send(jsEvent);
39
39
  (_b = config.onEvent) === null || _b === void 0 ? void 0 : _b.call(config, jsEvent);
40
40
  };
41
- if (typeof global !== 'undefined' && global.addEventListener) {
42
- global.addEventListener('unhandledrejection', unhandledRejectionHandler);
41
+ const g = globalThis;
42
+ if (g === null || g === void 0 ? void 0 : g.addEventListener) {
43
+ g.addEventListener('unhandledrejection', unhandledRejectionHandler);
43
44
  cleanups.push(() => {
44
- global.removeEventListener('unhandledrejection', unhandledRejectionHandler);
45
+ g.removeEventListener('unhandledrejection', unhandledRejectionHandler);
45
46
  });
46
47
  }
47
48
  return () => cleanups.forEach(fn => fn());
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/interceptors/errors.ts"],"names":[],"mappings":";;AAIA,gDAoDC;AAvDD,6CAA2D;AAG3D,SAAgB,kBAAkB,CAChC,SAA6B,EAC7B,MAAoB;IAEpB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,MAAM,oBAAoB,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAE3D,UAAU,CAAC,gBAAgB,CAAC,CAAC,KAAY,EAAE,OAAiB,EAAE,EAAE;;QAC9D,MAAM,KAAK,GAAiB;YAC1B,EAAE,EAAE,IAAA,oBAAU,GAAE;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,MAAM,CAAC,KAAK,CAAC;YACxC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,IAAA,sBAAY,GAAE;SAC1B,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,MAAA,MAAM,CAAC,OAAO,uDAAG,KAAK,CAAC,CAAC;QACxB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,CAAC,KAAU,EAAE,EAAE;;QAC/C,MAAM,KAAK,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC;QAC5B,MAAM,OAAO,GAAiB;YAC5B,EAAE,EAAE,IAAA,oBAAU,GAAE;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,6BAA6B;YACxD,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,IAAA,sBAAY,GAAE;SAC1B,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,MAAA,MAAM,CAAC,OAAO,uDAAG,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/interceptors/errors.ts"],"names":[],"mappings":";;AASA,gDAqDC;AA7DD,6CAA2D;AAQ3D,SAAgB,kBAAkB,CAChC,SAA6B,EAC7B,MAAoB;IAEpB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,MAAM,oBAAoB,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAE3D,UAAU,CAAC,gBAAgB,CAAC,CAAC,KAAY,EAAE,OAAiB,EAAE,EAAE;;QAC9D,MAAM,KAAK,GAAiB;YAC1B,EAAE,EAAE,IAAA,oBAAU,GAAE;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,MAAM,CAAC,KAAK,CAAC;YACxC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,IAAA,sBAAY,GAAE;SAC1B,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,MAAA,MAAM,CAAC,OAAO,uDAAG,KAAK,CAAC,CAAC;QACxB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,CAAC,KAAU,EAAE,EAAE;;QAC/C,MAAM,KAAK,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC;QAC5B,MAAM,OAAO,GAAiB;YAC5B,EAAE,EAAE,IAAA,oBAAU,GAAE;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,6BAA6B;YACxD,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,IAAA,sBAAY,GAAE;SAC1B,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,MAAA,MAAM,CAAC,OAAO,uDAAG,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,UAAiB,CAAC;IAC5B,IAAI,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,gBAAgB,EAAE,CAAC;QACxB,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;YACjB,CAAC,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import { QALinkConfig } from '../types';
2
2
  import { WebSocketTransport } from '../transport/websocket';
3
- export declare function setupFetchInterceptor(transport: WebSocketTransport, config: QALinkConfig): () => void;
3
+ export declare function setupFetchInterceptor(transport: WebSocketTransport, config: QALinkConfig, getDeviceId: () => string): () => void;
4
4
  //# sourceMappingURL=fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/interceptors/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAI5D,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,GACnB,MAAM,IAAI,CA8EZ"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/interceptors/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAItD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAI5D,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,MAAM,GACxB,MAAM,IAAI,CAyGZ"}
@@ -1,108 +1,111 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setupFetchInterceptor = void 0;
3
+ exports.setupFetchInterceptor = setupFetchInterceptor;
4
4
  const classifier_1 = require("../core/classifier");
5
- const session_1 = require("../core/session");
6
- const sanitize_1 = require("../core/sanitize");
7
-
5
+ const session_1 = require("../core/session");
6
+ const sanitize_1 = require("../core/sanitize");
8
7
  const originalFetch = global.fetch;
9
-
10
8
  function setupFetchInterceptor(transport, config, getDeviceId) {
11
- global.fetch = async (input, init) => {
12
- const requestId = (0, session_1.generateId)();
13
- const startTime = Date.now();
14
- const method = init?.method?.toUpperCase() ?? 'GET';
15
- const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
16
-
17
- if (shouldIgnoreUrl(url, config.sensitiveUrlPatterns ?? [])) {
18
- return originalFetch(input, init);
19
- }
20
-
21
- let response, responseBody, statusCode;
22
- const isAuth = (0, sanitize_1.isAuthUrl)(url);
23
-
24
- try {
25
- response = await originalFetch(input, init);
26
- statusCode = response.status;
27
-
28
- if (config.logNetworkBodies) {
9
+ global.fetch = async (input, init) => {
10
+ var _a, _b, _c, _d, _e;
11
+ const requestId = (0, session_1.generateId)();
12
+ const startTime = Date.now();
13
+ const method = (_b = (_a = init === null || init === void 0 ? void 0 : init.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) !== null && _b !== void 0 ? _b : 'GET';
14
+ const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
15
+ // Ignorar URLs sensibles configuradas manualmente
16
+ if (shouldIgnoreUrl(url, (_c = config.sensitiveUrlPatterns) !== null && _c !== void 0 ? _c : [])) {
17
+ return originalFetch(input, init);
18
+ }
19
+ let response;
20
+ let responseBody;
21
+ let statusCode;
22
+ const isAuth = (0, sanitize_1.isAuthUrl)(url);
29
23
  try {
30
- const cloned = response.clone();
31
- responseBody = await cloned.json().catch(() => cloned.text());
32
- } catch { responseBody = '[could not read body]'; }
33
- }
34
-
35
- let reqBody = init?.body;
36
- let sanitizedFlag = false;
37
- if (reqBody && config.logNetworkBodies) {
38
- if (isAuth) {
39
- reqBody = '[REDACTED - auth endpoint]';
40
- sanitizedFlag = true;
41
- } else {
42
- const { sanitized, hadSensitiveData } = (0, sanitize_1.sanitizePayload)(reqBody, config.sensitiveBodyFields);
43
- reqBody = sanitized;
44
- sanitizedFlag = hadSensitiveData;
24
+ response = await originalFetch(input, init);
25
+ statusCode = response.status;
26
+ if (config.logNetworkBodies) {
27
+ try {
28
+ const cloned = response.clone();
29
+ responseBody = await cloned.json().catch(() => cloned.text());
30
+ }
31
+ catch (_f) {
32
+ responseBody = '[could not read body]';
33
+ }
34
+ }
35
+ // Sanitizar request body
36
+ let reqBody = init === null || init === void 0 ? void 0 : init.body;
37
+ let sanitizedFlag = false;
38
+ if (reqBody && config.logNetworkBodies) {
39
+ if (isAuth) {
40
+ // Endpoint de auth — redactar body completo
41
+ reqBody = '[REDACTED - auth endpoint]';
42
+ sanitizedFlag = true;
43
+ }
44
+ else {
45
+ const { sanitized, hadSensitiveData } = (0, sanitize_1.sanitizePayload)(reqBody, config.sensitiveBodyFields);
46
+ reqBody = sanitized;
47
+ sanitizedFlag = hadSensitiveData;
48
+ }
49
+ }
50
+ else {
51
+ reqBody = '[body omitted - enable logNetworkBodies]';
52
+ }
53
+ // Sanitizar response body
54
+ let resBody = responseBody;
55
+ if (resBody && config.logNetworkBodies) {
56
+ const { sanitized } = (0, sanitize_1.sanitizePayload)(resBody, config.sensitiveBodyFields);
57
+ resBody = sanitized;
58
+ }
59
+ else if (!config.logNetworkBodies) {
60
+ resBody = '[body omitted - enable logNetworkBodies]';
61
+ }
62
+ const event = {
63
+ id: requestId,
64
+ type: statusCode >= 400 ? 'network_error' : 'network_request',
65
+ method,
66
+ url,
67
+ statusCode,
68
+ requestHeaders: (0, sanitize_1.sanitizeHeaders)(headersToObject(new Headers(init === null || init === void 0 ? void 0 : init.headers)), config.sensitiveHeaders),
69
+ requestBody: reqBody,
70
+ responseBody: resBody,
71
+ durationMs: Date.now() - startTime,
72
+ timestamp: Date.now(),
73
+ source: (0, classifier_1.classifyErrorSource)(statusCode),
74
+ sessionId: (0, session_1.getSessionId)(),
75
+ deviceId: getDeviceId(),
76
+ };
77
+ transport.send(event);
78
+ (_d = config.onEvent) === null || _d === void 0 ? void 0 : _d.call(config, event);
79
+ return response;
45
80
  }
46
- } else {
47
- reqBody = '[body omitted - enable logNetworkBodies]';
48
- }
49
-
50
- let resBody = responseBody;
51
- if (resBody && config.logNetworkBodies) {
52
- const { sanitized } = (0, sanitize_1.sanitizePayload)(resBody, config.sensitiveBodyFields);
53
- resBody = sanitized;
54
- } else if (!config.logNetworkBodies) {
55
- resBody = '[body omitted - enable logNetworkBodies]';
56
- }
57
-
58
- const event = {
59
- id: requestId,
60
- type: statusCode >= 400 ? 'network_error' : 'network_request',
61
- method, url, statusCode,
62
- requestHeaders: (0, sanitize_1.sanitizeHeaders)(headersToObject(new Headers(init?.headers)), config.sensitiveHeaders),
63
- requestBody: reqBody,
64
- responseBody: resBody,
65
- durationMs: Date.now() - startTime,
66
- timestamp: Date.now(),
67
- source: (0, classifier_1.classifyErrorSource)(statusCode),
68
- sessionId: (0, session_1.getSessionId)(),
69
- deviceId: getDeviceId(),
70
- };
71
-
72
- transport.send(event);
73
- config.onEvent?.(event);
74
- return response;
75
-
76
- } catch (error) {
77
- const event = {
78
- id: requestId,
79
- type: 'network_error',
80
- method, url,
81
- statusCode: undefined,
82
- requestHeaders: (0, sanitize_1.sanitizeHeaders)(headersToObject(new Headers(init?.headers)), config.sensitiveHeaders),
83
- requestBody: '[body omitted on error]',
84
- durationMs: Date.now() - startTime,
85
- timestamp: Date.now(),
86
- source: (0, classifier_1.classifyErrorSource)(undefined, error),
87
- sessionId: (0, session_1.getSessionId)(),
88
- deviceId: getDeviceId(),
89
- };
90
- transport.send(event);
91
- config.onEvent?.(event);
92
- throw error;
93
- }
94
- };
95
-
96
- return () => { global.fetch = originalFetch; };
81
+ catch (error) {
82
+ const event = {
83
+ id: requestId,
84
+ type: 'network_error',
85
+ method,
86
+ url,
87
+ statusCode: undefined,
88
+ requestHeaders: (0, sanitize_1.sanitizeHeaders)(headersToObject(new Headers(init === null || init === void 0 ? void 0 : init.headers)), config.sensitiveHeaders),
89
+ requestBody: '[body omitted on error]',
90
+ durationMs: Date.now() - startTime,
91
+ timestamp: Date.now(),
92
+ source: (0, classifier_1.classifyErrorSource)(undefined, error),
93
+ sessionId: (0, session_1.getSessionId)(),
94
+ deviceId: getDeviceId(),
95
+ };
96
+ transport.send(event);
97
+ (_e = config.onEvent) === null || _e === void 0 ? void 0 : _e.call(config, event);
98
+ throw error;
99
+ }
100
+ };
101
+ return () => { global.fetch = originalFetch; };
97
102
  }
98
- exports.setupFetchInterceptor = setupFetchInterceptor;
99
-
100
103
  function headersToObject(headers) {
101
- const result = {};
102
- headers.forEach((value, key) => { result[key] = value; });
103
- return result;
104
+ const result = {};
105
+ headers.forEach((value, key) => { result[key] = value; });
106
+ return result;
104
107
  }
105
-
106
108
  function shouldIgnoreUrl(url, patterns) {
107
- return patterns.some(p => url.includes(p));
109
+ return patterns.some(pattern => url.includes(pattern));
108
110
  }
111
+ //# sourceMappingURL=fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/interceptors/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/interceptors/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { QALinkConfig } from '../types';
2
+ import { WebSocketTransport } from '../transport/websocket';
3
+ export declare function setupMetroInterceptor(transport: WebSocketTransport, config: QALinkConfig, getDeviceId: () => string): () => void;
4
+ //# sourceMappingURL=metro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metro.d.ts","sourceRoot":"","sources":["../../src/interceptors/metro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AA2E5D,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,MAAM,GACxB,MAAM,IAAI,CAyHZ"}