react-native-qalink 0.6.0 → 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.
- package/README.md +258 -0
- package/dist/core/MiddlewarePipeline.d.ts +37 -0
- package/dist/core/MiddlewarePipeline.d.ts.map +1 -0
- package/dist/core/MiddlewarePipeline.js +58 -0
- package/dist/core/MiddlewarePipeline.js.map +1 -0
- package/dist/core/OfflineQueue.d.ts +48 -0
- package/dist/core/OfflineQueue.d.ts.map +1 -0
- package/dist/core/OfflineQueue.js +145 -0
- package/dist/core/OfflineQueue.js.map +1 -0
- package/dist/core/session.d.ts +2 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +9 -0
- package/dist/core/session.js.map +1 -1
- package/dist/index.d.ts +79 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +160 -28
- package/dist/index.js.map +1 -1
- package/dist/trackers/NavigationLoopTracker.d.ts +31 -0
- package/dist/trackers/NavigationLoopTracker.d.ts.map +1 -0
- package/dist/trackers/NavigationLoopTracker.js +73 -0
- package/dist/trackers/NavigationLoopTracker.js.map +1 -0
- package/dist/trackers/RageClickTracker.d.ts +33 -0
- package/dist/trackers/RageClickTracker.d.ts.map +1 -0
- package/dist/trackers/RageClickTracker.js +56 -0
- package/dist/trackers/RageClickTracker.js.map +1 -0
- package/dist/trackers/SilentFailureTracker.d.ts +55 -0
- package/dist/trackers/SilentFailureTracker.d.ts.map +1 -0
- package/dist/trackers/SilentFailureTracker.js +84 -0
- package/dist/trackers/SilentFailureTracker.js.map +1 -0
- package/dist/transport/websocket.d.ts +18 -9
- package/dist/transport/websocket.d.ts.map +1 -1
- package/dist/transport/websocket.js +66 -30
- package/dist/transport/websocket.js.map +1 -1
- package/dist/types/index.d.ts +90 -10
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { QALinkConfig, LogRequestOptions, UserContext, CustomContext, HTTPInterceptorConfig } from './types';
|
|
1
|
+
import { QALinkConfig, LogRequestOptions, UserContext, CustomContext, HTTPInterceptorConfig, DataStateCheck } from './types';
|
|
2
|
+
import { EventMiddleware } from './core/MiddlewarePipeline';
|
|
3
|
+
import { RageClickOptions } from './trackers/RageClickTracker';
|
|
2
4
|
declare class QALinkSDK {
|
|
3
5
|
private transport;
|
|
4
6
|
private config;
|
|
@@ -10,36 +12,98 @@ declare class QALinkSDK {
|
|
|
10
12
|
private logger;
|
|
11
13
|
private eventManager;
|
|
12
14
|
private screenCapture;
|
|
15
|
+
private rageClickTracker;
|
|
16
|
+
private navigationLoopTracker;
|
|
17
|
+
private silentFailureTracker;
|
|
13
18
|
init(config: QALinkConfig): Promise<void>;
|
|
14
|
-
interceptAxios(axiosInstance:
|
|
19
|
+
interceptAxios(axiosInstance: unknown): void;
|
|
20
|
+
/**
|
|
21
|
+
* Add an event middleware. Each middleware runs before an event is sent.
|
|
22
|
+
*
|
|
23
|
+
* @example — Drop console_log events in production:
|
|
24
|
+
* QALink.use((event, next) => {
|
|
25
|
+
* if (event.type === 'console_log') return; // drop
|
|
26
|
+
* next(event);
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* @example — Tag every event with a release ID:
|
|
30
|
+
* QALink.use((event, next) => next({ ...event, _release: '1.2.3' } as typeof event));
|
|
31
|
+
*/
|
|
32
|
+
use(middleware: EventMiddleware): void;
|
|
15
33
|
setUserContext(context: UserContext): void;
|
|
16
34
|
setCustomContext(context: CustomContext): void;
|
|
17
35
|
clearContext(): void;
|
|
18
|
-
debug(...args:
|
|
19
|
-
info(...args:
|
|
20
|
-
warn(...args:
|
|
21
|
-
error(...args:
|
|
22
|
-
critical(...args:
|
|
23
|
-
logEvent(eventName: string, data?:
|
|
36
|
+
debug(...args: unknown[]): void;
|
|
37
|
+
info(...args: unknown[]): void;
|
|
38
|
+
warn(...args: unknown[]): void;
|
|
39
|
+
error(...args: unknown[]): void;
|
|
40
|
+
critical(...args: unknown[]): void;
|
|
41
|
+
logEvent(eventName: string, data?: unknown): void;
|
|
24
42
|
captureScreen(label?: string): Promise<void>;
|
|
25
|
-
captureRef(viewRef:
|
|
43
|
+
captureRef(viewRef: unknown, label?: string): Promise<void>;
|
|
26
44
|
configureHTTP(httpConfig: Partial<HTTPInterceptorConfig>): void;
|
|
45
|
+
/**
|
|
46
|
+
* Manually flush all buffered offline events.
|
|
47
|
+
* Useful before the user puts the app in background.
|
|
48
|
+
*/
|
|
49
|
+
flush(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Enable rage-click detection.
|
|
52
|
+
* After enabling, call `QALink.trackUIInteraction(target)` from any onPress handler.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* QALink.enableRageClickDetection({ threshold: 3, windowMs: 600 });
|
|
56
|
+
* // then in a component:
|
|
57
|
+
* <Button onPress={() => { QALink.trackUIInteraction('submit-btn'); ... }} />
|
|
58
|
+
*/
|
|
59
|
+
enableRageClickDetection(options?: RageClickOptions): void;
|
|
60
|
+
/**
|
|
61
|
+
* Record a UI interaction (tap/press) for rage-click detection.
|
|
62
|
+
* Has no effect if `enableRageClickDetection()` was not called.
|
|
63
|
+
*
|
|
64
|
+
* @param target - Component label, testID, or any string that identifies the element.
|
|
65
|
+
*/
|
|
66
|
+
trackUIInteraction(target: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Enable navigation-loop detection.
|
|
69
|
+
* Automatically active when you call `setScreen()` or `startPackage()`.
|
|
70
|
+
*
|
|
71
|
+
* @param loopThreshold - How many back-and-forth alternations trigger the alert. @default 3
|
|
72
|
+
*/
|
|
73
|
+
enableNavigationLoopDetection(loopThreshold?: number): void;
|
|
74
|
+
/**
|
|
75
|
+
* Assert that API data meets expectations. Fires a `silent_failure` event
|
|
76
|
+
* when an API call succeeds (2xx) but returns invalid/empty/unexpected data.
|
|
77
|
+
*
|
|
78
|
+
* Returns `true` if the check passes, `false` if a silent failure was detected.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* const users = await fetchUsers(); // 200 OK
|
|
82
|
+
* QALink.trackDataState({
|
|
83
|
+
* context: 'users_list',
|
|
84
|
+
* expected: Array.isArray(users) && users.length > 0,
|
|
85
|
+
* actual: users,
|
|
86
|
+
* statusCode: 200,
|
|
87
|
+
* url: '/api/users',
|
|
88
|
+
* });
|
|
89
|
+
*/
|
|
90
|
+
trackDataState(check: DataStateCheck): boolean;
|
|
27
91
|
addBreadcrumb(action: string, data?: Record<string, unknown>): void;
|
|
28
92
|
logRequest(options: LogRequestOptions): void;
|
|
29
93
|
setScreen(screenName: string): void;
|
|
30
94
|
/**
|
|
31
95
|
* Start grouping all subsequent events for `screenName` into an in-memory package.
|
|
32
|
-
* Call
|
|
33
|
-
*
|
|
96
|
+
* Call when a screen mounts. Pair with endPackage() on unmount.
|
|
97
|
+
* `useTrackedScreen(screenName)` does both automatically.
|
|
34
98
|
*/
|
|
35
99
|
startPackage(screenName: string): void;
|
|
36
100
|
/**
|
|
37
|
-
* Close the active package, compute metrics and send
|
|
38
|
-
* All buffered events are included; nothing is lost.
|
|
101
|
+
* Close the active package, compute metrics, and send as a single EventPackage event.
|
|
39
102
|
*/
|
|
40
103
|
endPackage(): void;
|
|
41
104
|
getDeviceId(): string;
|
|
42
105
|
getStatus(): string;
|
|
106
|
+
getQueueSize(): number;
|
|
43
107
|
destroy(): void;
|
|
44
108
|
private log;
|
|
45
109
|
private validateRequiredConfig;
|
|
@@ -47,6 +111,8 @@ declare class QALinkSDK {
|
|
|
47
111
|
}
|
|
48
112
|
export declare const QALink: QALinkSDK;
|
|
49
113
|
export * from './types';
|
|
114
|
+
export type { EventMiddleware } from './core/MiddlewarePipeline';
|
|
115
|
+
export type { RageClickOptions } from './trackers/RageClickTracker';
|
|
50
116
|
export { getSourceLabel } from './core/classifier';
|
|
51
117
|
export { useTrackedScreen } from './hooks/useTrackedScreen';
|
|
52
118
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,iBAAiB,EAGjB,WAAW,EACX,aAAa,EACb,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
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'
|
|
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
|
|
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, (
|
|
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, (
|
|
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: (
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
403
|
+
// ─── Event Package API ────────────────────────────────────────────────────
|
|
282
404
|
/**
|
|
283
405
|
* Start grouping all subsequent events for `screenName` into an in-memory package.
|
|
284
|
-
* Call
|
|
285
|
-
*
|
|
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
|
|
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
|
|
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
|