react-native-qalink 0.6.1 → 0.7.0

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 (36) hide show
  1. package/README.md +127 -1
  2. package/dist/core/MiddlewarePipeline.d.ts +37 -0
  3. package/dist/core/MiddlewarePipeline.d.ts.map +1 -0
  4. package/dist/core/MiddlewarePipeline.js +58 -0
  5. package/dist/core/MiddlewarePipeline.js.map +1 -0
  6. package/dist/core/OfflineQueue.d.ts +48 -0
  7. package/dist/core/OfflineQueue.d.ts.map +1 -0
  8. package/dist/core/OfflineQueue.js +145 -0
  9. package/dist/core/OfflineQueue.js.map +1 -0
  10. package/dist/core/session.d.ts +2 -0
  11. package/dist/core/session.d.ts.map +1 -1
  12. package/dist/core/session.js +9 -0
  13. package/dist/core/session.js.map +1 -1
  14. package/dist/index.d.ts +79 -13
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +160 -28
  17. package/dist/index.js.map +1 -1
  18. package/dist/trackers/NavigationLoopTracker.d.ts +31 -0
  19. package/dist/trackers/NavigationLoopTracker.d.ts.map +1 -0
  20. package/dist/trackers/NavigationLoopTracker.js +73 -0
  21. package/dist/trackers/NavigationLoopTracker.js.map +1 -0
  22. package/dist/trackers/RageClickTracker.d.ts +33 -0
  23. package/dist/trackers/RageClickTracker.d.ts.map +1 -0
  24. package/dist/trackers/RageClickTracker.js +56 -0
  25. package/dist/trackers/RageClickTracker.js.map +1 -0
  26. package/dist/trackers/SilentFailureTracker.d.ts +55 -0
  27. package/dist/trackers/SilentFailureTracker.d.ts.map +1 -0
  28. package/dist/trackers/SilentFailureTracker.js +84 -0
  29. package/dist/trackers/SilentFailureTracker.js.map +1 -0
  30. package/dist/transport/websocket.d.ts +18 -9
  31. package/dist/transport/websocket.d.ts.map +1 -1
  32. package/dist/transport/websocket.js +66 -30
  33. package/dist/transport/websocket.js.map +1 -1
  34. package/dist/types/index.d.ts +90 -10
  35. package/dist/types/index.d.ts.map +1 -1
  36. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -31,6 +31,9 @@ const ContextManager_1 = require("./core/ContextManager");
31
31
  const Logger_1 = require("./core/Logger");
32
32
  const EventManager_1 = require("./core/EventManager");
33
33
  const ScreenCapture_1 = require("./core/ScreenCapture");
34
+ const RageClickTracker_1 = require("./trackers/RageClickTracker");
35
+ const NavigationLoopTracker_1 = require("./trackers/NavigationLoopTracker");
36
+ const SilentFailureTracker_1 = require("./trackers/SilentFailureTracker");
34
37
  const WS_URL = 'wss://ws.airbites.org';
35
38
  class QALinkSDK {
36
39
  constructor() {
@@ -40,14 +43,18 @@ class QALinkSDK {
40
43
  this.initialized = false;
41
44
  this.currentScreen = 'unknown';
42
45
  this._deviceId = 'unknown';
43
- // Nuevos managers
44
46
  this.contextManager = null;
45
47
  this.logger = null;
46
48
  this.eventManager = null;
47
49
  this.screenCapture = null;
50
+ // Advanced QA trackers
51
+ this.rageClickTracker = null;
52
+ this.navigationLoopTracker = null;
53
+ this.silentFailureTracker = null;
48
54
  }
55
+ // ─── Init ──────────────────────────────────────────────────────────────────
49
56
  async init(config) {
50
- var _a, _b, _c, _d, _e, _f;
57
+ var _a, _b, _c, _d, _e, _f, _g;
51
58
  if (this.initialized) {
52
59
  console.warn('[QALink] Already initialized. Call destroy() first.');
53
60
  return;
@@ -58,19 +65,27 @@ class QALinkSDK {
58
65
  }
59
66
  this.config = Object.assign(Object.assign({ enabled: true, environment: 'dev', logNetworkBodies: false, sensitiveHeaders: [], sensitiveUrlPatterns: [], sensitiveBodyFields: [], captureRuntimeErrors: true, captureMetroErrors: true, enableScreenCapture: false, debug: false }, config), { console: Object.assign({ captureLogs: true, captureWarnings: true, captureErrors: true, ignorePatterns: [], includePatterns: [] }, ((_a = config.console) !== null && _a !== void 0 ? _a : {})), httpConfig: Object.assign({ captureRequests: true, captureResponses: true, captureTimings: true, maxBodySize: 5000, slowRequestThreshold: 2000 }, ((_b = config.httpConfig) !== null && _b !== void 0 ? _b : {})) });
60
67
  this.validateRequiredConfig(this.config);
61
- const g = typeof globalThis !== 'undefined' ? globalThis : null;
68
+ const g = typeof globalThis !== 'undefined'
69
+ ? globalThis
70
+ : null;
62
71
  if (!((_c = g === null || g === void 0 ? void 0 : g.crypto) === null || _c === void 0 ? void 0 : _c.subtle)) {
63
- console.warn('[QALink] Web Crypto API (crypto.subtle) is not available. E2EE will fail. Use a secure context (HTTPS / React Native).');
72
+ console.warn('[QALink] Web Crypto API (crypto.subtle) is not available. E2EE will fall back to plain. Use a secure context (HTTPS / React Native).');
64
73
  }
65
74
  this._deviceId = await (0, device_1.getDeviceId)();
75
+ (0, session_1.resetSequenceCounter)();
66
76
  const connectionUrl = this.buildConnectionUrl(this.config);
67
- this.transport = new websocket_1.WebSocketTransport(connectionUrl, this.config.apiKey.trim(), this.config.debug);
77
+ this.transport = new websocket_1.WebSocketTransport(connectionUrl, this.config.apiKey.trim(), this.config.debug, (_d = this.config.offlineQueue) !== null && _d !== void 0 ? _d : {});
68
78
  this.transport.connect();
69
- // Inicializar managers
70
79
  this.contextManager = new ContextManager_1.ContextManager();
71
- this.logger = new Logger_1.Logger(this.transport, () => this.contextManager.getUserContext(), () => this.contextManager.getCustomContext(), () => this.currentScreen, () => this._deviceId, (_d = this.config.debug) !== null && _d !== void 0 ? _d : false);
80
+ this.logger = new Logger_1.Logger(this.transport, () => this.contextManager.getUserContext(), () => this.contextManager.getCustomContext(), () => this.currentScreen, () => this._deviceId, (_e = this.config.debug) !== null && _e !== void 0 ? _e : false);
72
81
  this.eventManager = new EventManager_1.EventManager(this.transport, () => this.contextManager.getUserContext(), () => this.contextManager.getCustomContext(), () => this.currentScreen, () => this._deviceId);
73
- this.screenCapture = new ScreenCapture_1.ScreenCapture(this.transport, () => this.currentScreen, () => this._deviceId, (_e = this.config.enableScreenCapture) !== null && _e !== void 0 ? _e : false);
82
+ this.screenCapture = new ScreenCapture_1.ScreenCapture(this.transport, () => this.currentScreen, () => this._deviceId, (_f = this.config.enableScreenCapture) !== null && _f !== void 0 ? _f : false);
83
+ // Initialize silent failure tracker (always active — no explicit enable needed)
84
+ this.silentFailureTracker = new SilentFailureTracker_1.SilentFailureTracker((ev) => {
85
+ var _a, _b, _c;
86
+ (_a = this.transport) === null || _a === void 0 ? void 0 : _a.send(ev);
87
+ (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.onEvent) === null || _c === void 0 ? void 0 : _c.call(_b, ev);
88
+ }, () => this.currentScreen, this._deviceId);
74
89
  const deviceInfo = await (0, session_1.getDeviceInfo)(config.appVersion);
75
90
  const sessionEvent = {
76
91
  id: (0, session_1.generateId)(),
@@ -80,15 +95,14 @@ class QALinkSDK {
80
95
  timestamp: Date.now(),
81
96
  deviceInfo,
82
97
  appVersion: config.appVersion,
83
- environment: (_f = this.config.environment) !== null && _f !== void 0 ? _f : 'dev',
98
+ environment: (_g = this.config.environment) !== null && _g !== void 0 ? _g : 'dev',
84
99
  };
85
100
  this.transport.send(sessionEvent);
86
101
  const getScreen = () => this.currentScreen;
87
102
  const getDevId = () => this._deviceId;
88
103
  const getUserCtx = () => this.contextManager.getUserContext();
89
104
  const getCustomCtx = () => this.contextManager.getCustomContext();
90
- // ── Interceptors ──────────────────────────────────────────────────────────
91
- // Nuevo fetch interceptor con HTTP config
105
+ // ── Interceptors ─────────────────────────────────────────────────────────
92
106
  if (this.config.httpConfig) {
93
107
  this.cleanups.push((0, fetch_1.setupFetchInterceptor)(this.transport, this.config.httpConfig, getUserCtx, getCustomCtx, getScreen, getDevId));
94
108
  }
@@ -105,21 +119,41 @@ class QALinkSDK {
105
119
  sessionId: (0, session_1.getSessionId)(),
106
120
  deviceId: this._deviceId,
107
121
  environment: this.config.environment,
108
- captureMetroErrors: this.config.captureMetroErrors,
109
122
  httpConfig: this.config.httpConfig ? 'enabled' : 'disabled',
110
123
  screenCapture: this.config.enableScreenCapture ? 'enabled' : 'disabled',
111
124
  });
112
125
  }
113
126
  interceptAxios(axiosInstance) {
127
+ var _a;
114
128
  if (!this.transport || !this.config || !this.contextManager) {
115
129
  console.warn('[QALink] Call init() before interceptAxios()');
116
130
  return;
117
131
  }
118
- const httpConfig = this.config.httpConfig || {};
132
+ const httpConfig = (_a = this.config.httpConfig) !== null && _a !== void 0 ? _a : {};
119
133
  this.cleanups.push((0, axios_1.setupAxiosInterceptor)(axiosInstance, this.transport, httpConfig, () => this.contextManager.getUserContext(), () => this.contextManager.getCustomContext(), () => this.currentScreen, () => this._deviceId));
120
134
  this.log('Axios interceptor installed ✅');
121
135
  }
122
- // ========== Context API ==========
136
+ // ─── Middleware ────────────────────────────────────────────────────────────
137
+ /**
138
+ * Add an event middleware. Each middleware runs before an event is sent.
139
+ *
140
+ * @example — Drop console_log events in production:
141
+ * QALink.use((event, next) => {
142
+ * if (event.type === 'console_log') return; // drop
143
+ * next(event);
144
+ * });
145
+ *
146
+ * @example — Tag every event with a release ID:
147
+ * QALink.use((event, next) => next({ ...event, _release: '1.2.3' } as typeof event));
148
+ */
149
+ use(middleware) {
150
+ if (!this.transport) {
151
+ console.warn('[QALink] Call init() before use()');
152
+ return;
153
+ }
154
+ this.transport.use(middleware);
155
+ }
156
+ // ─── Context API ──────────────────────────────────────────────────────────
123
157
  setUserContext(context) {
124
158
  if (!this.contextManager) {
125
159
  console.warn('[QALink] SDK not initialized');
@@ -138,7 +172,7 @@ class QALinkSDK {
138
172
  var _a;
139
173
  (_a = this.contextManager) === null || _a === void 0 ? void 0 : _a.clear();
140
174
  }
141
- // ========== Logging API (debug, info, warn, error, critical) ==========
175
+ // ─── Logging API ──────────────────────────────────────────────────────────
142
176
  debug(...args) {
143
177
  if (!this.logger) {
144
178
  console.warn('[QALink] SDK not initialized');
@@ -174,7 +208,7 @@ class QALinkSDK {
174
208
  }
175
209
  this.logger.critical(...args);
176
210
  }
177
- // ========== Custom Events API ==========
211
+ // ─── Custom Events API ────────────────────────────────────────────────────
178
212
  logEvent(eventName, data) {
179
213
  if (!this.eventManager) {
180
214
  console.warn('[QALink] SDK not initialized');
@@ -182,7 +216,7 @@ class QALinkSDK {
182
216
  }
183
217
  this.eventManager.logEvent(eventName, data);
184
218
  }
185
- // ========== Screen Capture API ==========
219
+ // ─── Screen Capture API ───────────────────────────────────────────────────
186
220
  async captureScreen(label) {
187
221
  if (!this.screenCapture) {
188
222
  console.warn('[QALink] SDK not initialized');
@@ -197,18 +231,104 @@ class QALinkSDK {
197
231
  }
198
232
  await this.screenCapture.captureRef(viewRef, label);
199
233
  }
200
- // ========== HTTP Config API ==========
234
+ // ─── HTTP Config API ──────────────────────────────────────────────────────
201
235
  configureHTTP(httpConfig) {
202
236
  if (!this.config) {
203
237
  console.warn('[QALink] SDK not initialized');
204
238
  return;
205
239
  }
206
240
  this.config.httpConfig = Object.assign(Object.assign({}, this.config.httpConfig), httpConfig);
207
- // Re-setup fetch interceptor con nueva config
208
- // (En producción, deberías tener una referencia al interceptor para actualizarlo)
209
241
  this.log('HTTP config updated', httpConfig);
210
242
  }
211
- // ========== Legacy APIs (mantener compatibilidad) ==========
243
+ // ─── Offline queue / flush ────────────────────────────────────────────────
244
+ /**
245
+ * Manually flush all buffered offline events.
246
+ * Useful before the user puts the app in background.
247
+ */
248
+ flush() {
249
+ if (!this.transport || !this.initialized) {
250
+ console.warn('[QALink] SDK not initialized');
251
+ return;
252
+ }
253
+ this.transport.flush();
254
+ this.log('Manual flush triggered');
255
+ }
256
+ // ─── Advanced QA Trackers ─────────────────────────────────────────────────
257
+ /**
258
+ * Enable rage-click detection.
259
+ * After enabling, call `QALink.trackUIInteraction(target)` from any onPress handler.
260
+ *
261
+ * @example
262
+ * QALink.enableRageClickDetection({ threshold: 3, windowMs: 600 });
263
+ * // then in a component:
264
+ * <Button onPress={() => { QALink.trackUIInteraction('submit-btn'); ... }} />
265
+ */
266
+ enableRageClickDetection(options) {
267
+ if (!this.initialized) {
268
+ console.warn('[QALink] SDK not initialized');
269
+ return;
270
+ }
271
+ this.rageClickTracker = new RageClickTracker_1.RageClickTracker((ev) => {
272
+ var _a, _b, _c;
273
+ (_a = this.transport) === null || _a === void 0 ? void 0 : _a.send(ev);
274
+ (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.onEvent) === null || _c === void 0 ? void 0 : _c.call(_b, ev);
275
+ this.log(`Rage click detected on "${ev.target}" (×${ev.count})`);
276
+ }, () => this.currentScreen, this._deviceId, options);
277
+ this.log('Rage click detection enabled');
278
+ }
279
+ /**
280
+ * Record a UI interaction (tap/press) for rage-click detection.
281
+ * Has no effect if `enableRageClickDetection()` was not called.
282
+ *
283
+ * @param target - Component label, testID, or any string that identifies the element.
284
+ */
285
+ trackUIInteraction(target) {
286
+ var _a;
287
+ (_a = this.rageClickTracker) === null || _a === void 0 ? void 0 : _a.recordTap(target);
288
+ }
289
+ /**
290
+ * Enable navigation-loop detection.
291
+ * Automatically active when you call `setScreen()` or `startPackage()`.
292
+ *
293
+ * @param loopThreshold - How many back-and-forth alternations trigger the alert. @default 3
294
+ */
295
+ enableNavigationLoopDetection(loopThreshold) {
296
+ if (!this.initialized) {
297
+ console.warn('[QALink] SDK not initialized');
298
+ return;
299
+ }
300
+ this.navigationLoopTracker = new NavigationLoopTracker_1.NavigationLoopTracker((ev) => {
301
+ var _a, _b, _c;
302
+ (_a = this.transport) === null || _a === void 0 ? void 0 : _a.send(ev);
303
+ (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.onEvent) === null || _c === void 0 ? void 0 : _c.call(_b, ev);
304
+ this.log(`Navigation loop: ${ev.screens.join(' ↔ ')} (×${ev.alternations})`);
305
+ }, this._deviceId, loopThreshold);
306
+ this.log('Navigation loop detection enabled');
307
+ }
308
+ /**
309
+ * Assert that API data meets expectations. Fires a `silent_failure` event
310
+ * when an API call succeeds (2xx) but returns invalid/empty/unexpected data.
311
+ *
312
+ * Returns `true` if the check passes, `false` if a silent failure was detected.
313
+ *
314
+ * @example
315
+ * const users = await fetchUsers(); // 200 OK
316
+ * QALink.trackDataState({
317
+ * context: 'users_list',
318
+ * expected: Array.isArray(users) && users.length > 0,
319
+ * actual: users,
320
+ * statusCode: 200,
321
+ * url: '/api/users',
322
+ * });
323
+ */
324
+ trackDataState(check) {
325
+ if (!this.silentFailureTracker) {
326
+ console.warn('[QALink] SDK not initialized');
327
+ return true;
328
+ }
329
+ return this.silentFailureTracker.check(check);
330
+ }
331
+ // ─── Legacy APIs (backward compatible) ────────────────────────────────────
212
332
  addBreadcrumb(action, data) {
213
333
  var _a, _b;
214
334
  if (!this.transport || !this.initialized)
@@ -273,27 +393,30 @@ class QALinkSDK {
273
393
  this.log(`logRequest: ${method.toUpperCase()} ${url} ${statusCode !== null && statusCode !== void 0 ? statusCode : '?'}${hadSensitiveData ? ' [sanitized]' : ''}`);
274
394
  }
275
395
  setScreen(screenName) {
396
+ var _a;
276
397
  if (!this.initialized)
277
398
  return;
278
399
  this.currentScreen = screenName;
400
+ (_a = this.navigationLoopTracker) === null || _a === void 0 ? void 0 : _a.record(screenName);
279
401
  this.addBreadcrumb(`NAVIGATE → ${screenName}`);
280
402
  }
281
- // ========== Event Package API ==========
403
+ // ─── Event Package API ────────────────────────────────────────────────────
282
404
  /**
283
405
  * Start grouping all subsequent events for `screenName` into an in-memory package.
284
- * Call this when a screen mounts. Pair with endPackage() on unmount.
285
- * Using `useTrackedScreen(screenName)` does both automatically.
406
+ * Call when a screen mounts. Pair with endPackage() on unmount.
407
+ * `useTrackedScreen(screenName)` does both automatically.
286
408
  */
287
409
  startPackage(screenName) {
410
+ var _a;
288
411
  if (!this.initialized)
289
412
  return;
290
413
  this.currentScreen = screenName;
414
+ (_a = this.navigationLoopTracker) === null || _a === void 0 ? void 0 : _a.record(screenName);
291
415
  PackageManager_1.packageManager.start(screenName, this._deviceId);
292
416
  this.log(`Package started for screen: ${screenName}`);
293
417
  }
294
418
  /**
295
- * Close the active package, compute metrics and send it as a single EventPackage event.
296
- * All buffered events are included; nothing is lost.
419
+ * Close the active package, compute metrics, and send as a single EventPackage event.
297
420
  */
298
421
  endPackage() {
299
422
  if (!this.transport || !this.initialized)
@@ -301,9 +424,10 @@ class QALinkSDK {
301
424
  const pkg = PackageManager_1.packageManager.end();
302
425
  if (pkg) {
303
426
  this.transport.send(pkg);
304
- this.log(`Package ended for screen: ${pkg.context.screenName} — ${pkg.metrics.totalEvents} events`);
427
+ this.log(`Package ended: ${pkg.context.screenName} — ${pkg.metrics.totalEvents} events`);
305
428
  }
306
429
  }
430
+ // ─── Misc ─────────────────────────────────────────────────────────────────
307
431
  getDeviceId() {
308
432
  return this._deviceId;
309
433
  }
@@ -311,9 +435,13 @@ class QALinkSDK {
311
435
  var _a, _b;
312
436
  return (_b = (_a = this.transport) === null || _a === void 0 ? void 0 : _a.getStatus()) !== null && _b !== void 0 ? _b : 'not initialized';
313
437
  }
438
+ getQueueSize() {
439
+ var _a, _b;
440
+ return (_b = (_a = this.transport) === null || _a === void 0 ? void 0 : _a.getQueueSize()) !== null && _b !== void 0 ? _b : 0;
441
+ }
314
442
  destroy() {
315
443
  var _a;
316
- this.cleanups.forEach(fn => fn());
444
+ this.cleanups.forEach((fn) => fn());
317
445
  this.cleanups = [];
318
446
  (_a = this.transport) === null || _a === void 0 ? void 0 : _a.disconnect();
319
447
  this.transport = null;
@@ -322,10 +450,14 @@ class QALinkSDK {
322
450
  this.logger = null;
323
451
  this.eventManager = null;
324
452
  this.screenCapture = null;
453
+ this.rageClickTracker = null;
454
+ this.navigationLoopTracker = null;
455
+ this.silentFailureTracker = null;
325
456
  PackageManager_1.packageManager.clear();
326
457
  (0, crypto_1.clearKeyCache)();
327
458
  this.initialized = false;
328
459
  }
460
+ // ─── Private helpers ──────────────────────────────────────────────────────
329
461
  log(...args) {
330
462
  var _a;
331
463
  if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.debug)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * NavigationLoopTracker — detects when a user bounces back and forth between screens.
3
+ *
4
+ * A "navigation loop" is when the user alternates between the same 2 screens
5
+ * more than `loopThreshold` times (e.g. A→B→A→B→A). Classic QA signal for
6
+ * confusing UX, broken back navigation, or unresolved error states.
7
+ *
8
+ * Call `record(screenName)` every time the active screen changes.
9
+ *
10
+ * @example
11
+ * <NavigationContainer onStateChange={() => {
12
+ * QALink.setScreen(routeName); // internally records for loop detection
13
+ * }}>
14
+ */
15
+ import type { NavigationLoopEvent } from '../types';
16
+ type LoopCallback = (event: NavigationLoopEvent) => void;
17
+ export declare class NavigationLoopTracker {
18
+ private history;
19
+ private readonly loopThreshold;
20
+ private readonly windowSize;
21
+ private readonly onLoop;
22
+ private readonly deviceId;
23
+ private lastFiredAt;
24
+ constructor(onLoop: LoopCallback, deviceId: string, loopThreshold?: number);
25
+ /** Record a screen visit. Call on every navigation state change. */
26
+ record(screenName: string): void;
27
+ private detect;
28
+ private fire;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=NavigationLoopTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationLoopTracker.d.ts","sourceRoot":"","sources":["../../src/trackers/NavigationLoopTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAMpD,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAEzD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,WAAW,CAAK;gBAGtB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,aAAa,SAAyB;IAQxC,oEAAoE;IACpE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQhC,OAAO,CAAC,MAAM;IAsBd,OAAO,CAAC,IAAI;CAab"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * NavigationLoopTracker — detects when a user bounces back and forth between screens.
4
+ *
5
+ * A "navigation loop" is when the user alternates between the same 2 screens
6
+ * more than `loopThreshold` times (e.g. A→B→A→B→A). Classic QA signal for
7
+ * confusing UX, broken back navigation, or unresolved error states.
8
+ *
9
+ * Call `record(screenName)` every time the active screen changes.
10
+ *
11
+ * @example
12
+ * <NavigationContainer onStateChange={() => {
13
+ * QALink.setScreen(routeName); // internally records for loop detection
14
+ * }}>
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.NavigationLoopTracker = void 0;
18
+ const session_1 = require("../core/session");
19
+ const DEFAULT_LOOP_THRESHOLD = 3;
20
+ const COOLDOWN_MS = 5000;
21
+ class NavigationLoopTracker {
22
+ constructor(onLoop, deviceId, loopThreshold = DEFAULT_LOOP_THRESHOLD) {
23
+ this.history = [];
24
+ this.lastFiredAt = 0;
25
+ this.onLoop = onLoop;
26
+ this.deviceId = deviceId;
27
+ this.loopThreshold = loopThreshold;
28
+ this.windowSize = loopThreshold * 2 + 2;
29
+ }
30
+ /** Record a screen visit. Call on every navigation state change. */
31
+ record(screenName) {
32
+ this.history.push(screenName);
33
+ if (this.history.length > this.windowSize) {
34
+ this.history = this.history.slice(-this.windowSize);
35
+ }
36
+ this.detect();
37
+ }
38
+ detect() {
39
+ if (this.history.length < this.loopThreshold * 2)
40
+ return;
41
+ const now = Date.now();
42
+ if (now - this.lastFiredAt < COOLDOWN_MS)
43
+ return;
44
+ const uniqueScreens = [...new Set(this.history)];
45
+ // Only fire for A↔B loops (exactly 2 unique screens in window)
46
+ if (uniqueScreens.length !== 2)
47
+ return;
48
+ let alternations = 0;
49
+ for (let i = 1; i < this.history.length; i++) {
50
+ if (this.history[i] !== this.history[i - 1])
51
+ alternations++;
52
+ }
53
+ if (alternations >= this.loopThreshold * 2 - 1) {
54
+ this.lastFiredAt = now;
55
+ this.fire(uniqueScreens, alternations);
56
+ }
57
+ }
58
+ fire(screens, alternations) {
59
+ const event = {
60
+ id: (0, session_1.generateId)(),
61
+ type: 'navigation_loop',
62
+ screens,
63
+ alternations,
64
+ pattern: this.history.join(' → '),
65
+ timestamp: Date.now(),
66
+ sessionId: (0, session_1.getSessionId)(),
67
+ deviceId: this.deviceId,
68
+ };
69
+ this.onLoop(event);
70
+ }
71
+ }
72
+ exports.NavigationLoopTracker = NavigationLoopTracker;
73
+ //# sourceMappingURL=NavigationLoopTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationLoopTracker.js","sourceRoot":"","sources":["../../src/trackers/NavigationLoopTracker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAGH,6CAA2D;AAE3D,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,WAAW,GAAG,IAAK,CAAC;AAI1B,MAAa,qBAAqB;IAQhC,YACE,MAAoB,EACpB,QAAgB,EAChB,aAAa,GAAG,sBAAsB;QAVhC,YAAO,GAAa,EAAE,CAAC;QAKvB,gBAAW,GAAG,CAAC,CAAC;QAOtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,UAAkB;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEO,MAAM;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;YAAE,OAAO;QAEzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,WAAW;YAAE,OAAO;QAEjD,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjD,+DAA+D;QAC/D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEvC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,YAAY,EAAE,CAAC;QAC9D,CAAC;QAED,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,OAAiB,EAAE,YAAoB;QAClD,MAAM,KAAK,GAAwB;YACjC,EAAE,EAAE,IAAA,oBAAU,GAAE;YAChB,IAAI,EAAE,iBAAiB;YACvB,OAAO;YACP,YAAY;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAA,sBAAY,GAAE;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;CACF;AA/DD,sDA+DC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * RageClickTracker — detects when a user taps the same target rapidly multiple times.
3
+ *
4
+ * A "rage click" is ≥ `threshold` taps on the same target within `windowMs`.
5
+ * Fires a `rage_click` event that appears in the dashboard as a QA signal.
6
+ *
7
+ * Usage — call `recordTap(target)` from any onPress / onTouchEnd handler:
8
+ *
9
+ * @example
10
+ * <Button onPress={() => { QALink.trackUIInteraction('submit-button'); handlePress(); }} />
11
+ */
12
+ import type { RageClickEvent } from '../types';
13
+ export interface RageClickOptions {
14
+ /** Minimum number of taps to qualify as rage click. @default 3 */
15
+ threshold?: number;
16
+ /** Time window in ms within which taps must occur. @default 600 */
17
+ windowMs?: number;
18
+ }
19
+ type RageClickCallback = (event: RageClickEvent) => void;
20
+ export declare class RageClickTracker {
21
+ private taps;
22
+ private readonly threshold;
23
+ private readonly windowMs;
24
+ private readonly onRageClick;
25
+ private readonly getScreen;
26
+ private readonly deviceId;
27
+ constructor(onRageClick: RageClickCallback, getScreen: () => string, deviceId: string, options?: RageClickOptions);
28
+ /** Register a tap on `target`. Call from onPress / onTouchEnd. */
29
+ recordTap(target: string): void;
30
+ private fireRageClick;
31
+ }
32
+ export {};
33
+ //# sourceMappingURL=RageClickTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RageClickTracker.d.ts","sourceRoot":"","sources":["../../src/trackers/RageClickTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/C,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;AAEzD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,MAAM,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB;IAShC,kEAAkE;IAClE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgB/B,OAAO,CAAC,aAAa;CActB"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * RageClickTracker — detects when a user taps the same target rapidly multiple times.
4
+ *
5
+ * A "rage click" is ≥ `threshold` taps on the same target within `windowMs`.
6
+ * Fires a `rage_click` event that appears in the dashboard as a QA signal.
7
+ *
8
+ * Usage — call `recordTap(target)` from any onPress / onTouchEnd handler:
9
+ *
10
+ * @example
11
+ * <Button onPress={() => { QALink.trackUIInteraction('submit-button'); handlePress(); }} />
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.RageClickTracker = void 0;
15
+ const session_1 = require("../core/session");
16
+ const DEFAULT_THRESHOLD = 3;
17
+ const DEFAULT_WINDOW_MS = 600;
18
+ class RageClickTracker {
19
+ constructor(onRageClick, getScreen, deviceId, options = {}) {
20
+ var _a, _b;
21
+ this.taps = [];
22
+ this.onRageClick = onRageClick;
23
+ this.getScreen = getScreen;
24
+ this.deviceId = deviceId;
25
+ this.threshold = (_a = options.threshold) !== null && _a !== void 0 ? _a : DEFAULT_THRESHOLD;
26
+ this.windowMs = (_b = options.windowMs) !== null && _b !== void 0 ? _b : DEFAULT_WINDOW_MS;
27
+ }
28
+ /** Register a tap on `target`. Call from onPress / onTouchEnd. */
29
+ recordTap(target) {
30
+ const now = Date.now();
31
+ // Keep only recent taps for this exact target within the time window
32
+ this.taps = this.taps.filter((t) => t.target === target && now - t.time <= this.windowMs);
33
+ this.taps.push({ time: now, target });
34
+ if (this.taps.length >= this.threshold) {
35
+ const count = this.taps.length;
36
+ this.taps = [];
37
+ this.fireRageClick(target, count);
38
+ }
39
+ }
40
+ fireRageClick(target, count) {
41
+ const event = {
42
+ id: (0, session_1.generateId)(),
43
+ type: 'rage_click',
44
+ target,
45
+ count,
46
+ windowMs: this.windowMs,
47
+ screen: this.getScreen(),
48
+ timestamp: Date.now(),
49
+ sessionId: (0, session_1.getSessionId)(),
50
+ deviceId: this.deviceId,
51
+ };
52
+ this.onRageClick(event);
53
+ }
54
+ }
55
+ exports.RageClickTracker = RageClickTracker;
56
+ //# sourceMappingURL=RageClickTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RageClickTracker.js","sourceRoot":"","sources":["../../src/trackers/RageClickTracker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAGH,6CAA2D;AAE3D,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAgB9B,MAAa,gBAAgB;IAQ3B,YACE,WAA8B,EAC9B,SAAuB,EACvB,QAAgB,EAChB,UAA4B,EAAE;;QAXxB,SAAI,GAAe,EAAE,CAAC;QAa5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,iBAAiB,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,iBAAiB,CAAC;IACxD,CAAC;IAED,kEAAkE;IAClE,SAAS,CAAC,MAAc;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,qEAAqE;QACrE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAC5D,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAa;QACjD,MAAM,KAAK,GAAmB;YAC5B,EAAE,EAAE,IAAA,oBAAU,GAAE;YAChB,IAAI,EAAE,YAAY;YAClB,MAAM;YACN,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAA,sBAAY,GAAE;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF;AApDD,4CAoDC"}