@grainql/analytics-web 2.7.1 → 2.9.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 +36 -3
- package/dist/cjs/consent.d.ts +38 -7
- package/dist/cjs/consent.d.ts.map +1 -1
- package/dist/cjs/consent.js +82 -23
- package/dist/cjs/consent.js.map +1 -1
- package/dist/cjs/debug-agent.d.ts +171 -0
- package/dist/cjs/debug-agent.d.ts.map +1 -0
- package/dist/cjs/debug-agent.js +1219 -0
- package/dist/cjs/debug-agent.js.map +1 -0
- package/dist/cjs/id-manager.d.ts +66 -0
- package/dist/cjs/id-manager.d.ts.map +1 -0
- package/dist/cjs/id-manager.js +212 -0
- package/dist/cjs/id-manager.js.map +1 -0
- package/dist/cjs/index.d.ts +26 -8
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction-tracking.d.ts +6 -0
- package/dist/cjs/interaction-tracking.d.ts.map +1 -1
- package/dist/cjs/interaction-tracking.js +55 -5
- package/dist/cjs/interaction-tracking.js.map +1 -1
- package/dist/cjs/page-tracking.d.ts +6 -0
- package/dist/cjs/page-tracking.d.ts.map +1 -1
- package/dist/cjs/page-tracking.js +23 -2
- package/dist/cjs/page-tracking.js.map +1 -1
- package/dist/cjs/react/hooks/useConsent.d.ts +18 -2
- package/dist/cjs/react/hooks/useConsent.d.ts.map +1 -1
- package/dist/cjs/react/hooks/useConsent.js +52 -1
- package/dist/cjs/react/hooks/useConsent.js.map +1 -1
- package/dist/consent.d.ts +38 -7
- package/dist/consent.d.ts.map +1 -1
- package/dist/consent.js +82 -23
- package/dist/debug-agent.d.ts +171 -0
- package/dist/debug-agent.d.ts.map +1 -0
- package/dist/debug-agent.js +1219 -0
- package/dist/esm/consent.d.ts +38 -7
- package/dist/esm/consent.d.ts.map +1 -1
- package/dist/esm/consent.js +82 -23
- package/dist/esm/consent.js.map +1 -1
- package/dist/esm/debug-agent.d.ts +171 -0
- package/dist/esm/debug-agent.d.ts.map +1 -0
- package/dist/esm/debug-agent.js +1215 -0
- package/dist/esm/debug-agent.js.map +1 -0
- package/dist/esm/id-manager.d.ts +66 -0
- package/dist/esm/id-manager.d.ts.map +1 -0
- package/dist/esm/id-manager.js +208 -0
- package/dist/esm/id-manager.js.map +1 -0
- package/dist/esm/index.d.ts +26 -8
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction-tracking.d.ts +6 -0
- package/dist/esm/interaction-tracking.d.ts.map +1 -1
- package/dist/esm/interaction-tracking.js +55 -5
- package/dist/esm/interaction-tracking.js.map +1 -1
- package/dist/esm/page-tracking.d.ts +6 -0
- package/dist/esm/page-tracking.d.ts.map +1 -1
- package/dist/esm/page-tracking.js +23 -2
- package/dist/esm/page-tracking.js.map +1 -1
- package/dist/esm/react/hooks/useConsent.d.ts +18 -2
- package/dist/esm/react/hooks/useConsent.d.ts.map +1 -1
- package/dist/esm/react/hooks/useConsent.js +49 -1
- package/dist/esm/react/hooks/useConsent.js.map +1 -1
- package/dist/id-manager.d.ts +66 -0
- package/dist/id-manager.d.ts.map +1 -0
- package/dist/id-manager.js +212 -0
- package/dist/index.d.ts +26 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.dev.js +1635 -86
- package/dist/index.global.dev.js.map +4 -4
- package/dist/index.global.js +506 -2
- package/dist/index.global.js.map +4 -4
- package/dist/index.js +171 -44
- package/dist/index.mjs +172 -45
- package/dist/interaction-tracking.d.ts +6 -0
- package/dist/interaction-tracking.d.ts.map +1 -1
- package/dist/interaction-tracking.js +55 -5
- package/dist/page-tracking.d.ts +6 -0
- package/dist/page-tracking.d.ts.map +1 -1
- package/dist/page-tracking.js +23 -2
- package/dist/react/hooks/useConsent.d.ts +18 -2
- package/dist/react/hooks/useConsent.d.ts.map +1 -1
- package/dist/react/hooks/useConsent.js +52 -1
- package/dist/react/hooks/useConsent.mjs +49 -1
- package/package.json +1 -1
package/dist/esm/consent.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Consent management for Grain Analytics
|
|
3
|
-
*
|
|
2
|
+
* Consent management for Grain Analytics v2.0
|
|
3
|
+
* Privacy-first, cookie-less by default
|
|
4
|
+
*
|
|
5
|
+
* Consent Modes:
|
|
6
|
+
* - cookieless: Default mode, daily rotating IDs, no consent needed
|
|
7
|
+
* - gdpr-strict: Requires explicit consent, falls back to cookieless
|
|
8
|
+
* - gdpr-opt-out: Permanent IDs by default, cookieless on opt-out
|
|
4
9
|
*/
|
|
5
|
-
export type ConsentMode = '
|
|
10
|
+
export type ConsentMode = 'cookieless' | 'gdpr-strict' | 'gdpr-opt-out';
|
|
6
11
|
export interface ConsentState {
|
|
7
12
|
granted: boolean;
|
|
8
13
|
categories: string[];
|
|
@@ -13,6 +18,7 @@ export declare const DEFAULT_CONSENT_CATEGORIES: string[];
|
|
|
13
18
|
export declare const CONSENT_VERSION = "1.0.0";
|
|
14
19
|
/**
|
|
15
20
|
* Consent manager for handling user consent state
|
|
21
|
+
* v2.0: Cookie-less by default, privacy-first approach
|
|
16
22
|
*/
|
|
17
23
|
export declare class ConsentManager {
|
|
18
24
|
private consentState;
|
|
@@ -23,9 +29,8 @@ export declare class ConsentManager {
|
|
|
23
29
|
/**
|
|
24
30
|
* Load consent state from localStorage
|
|
25
31
|
*
|
|
26
|
-
* GDPR Compliance:
|
|
27
|
-
*
|
|
28
|
-
* The consent preference itself is not tracking data.
|
|
32
|
+
* GDPR Compliance: localStorage only used for storing consent preferences
|
|
33
|
+
* (not for tracking), which is a legitimate interest for compliance.
|
|
29
34
|
*/
|
|
30
35
|
private loadConsentState;
|
|
31
36
|
/**
|
|
@@ -45,11 +50,28 @@ export declare class ConsentManager {
|
|
|
45
50
|
*/
|
|
46
51
|
getConsentState(): ConsentState | null;
|
|
47
52
|
/**
|
|
48
|
-
* Check if user has granted consent
|
|
53
|
+
* Check if user has granted consent for permanent IDs
|
|
49
54
|
*/
|
|
50
55
|
hasConsent(category?: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Check if permanent IDs are allowed
|
|
58
|
+
*/
|
|
59
|
+
shouldUsePermanentId(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Check if we should strip query parameters from URLs
|
|
62
|
+
* Query params stripped unless:
|
|
63
|
+
* - Mode is gdpr-opt-out, OR
|
|
64
|
+
* - Mode is gdpr-strict AND consent given
|
|
65
|
+
*/
|
|
66
|
+
shouldStripQueryParams(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Check if we can track events (always true in v2.0)
|
|
69
|
+
* Even cookieless mode allows basic analytics with daily IDs
|
|
70
|
+
*/
|
|
71
|
+
canTrack(): boolean;
|
|
51
72
|
/**
|
|
52
73
|
* Check if we should wait for consent before tracking
|
|
74
|
+
* Only relevant for GDPR Strict mode
|
|
53
75
|
*/
|
|
54
76
|
shouldWaitForConsent(): boolean;
|
|
55
77
|
/**
|
|
@@ -68,5 +90,14 @@ export declare class ConsentManager {
|
|
|
68
90
|
* Clear all consent data
|
|
69
91
|
*/
|
|
70
92
|
clearConsent(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get current consent mode
|
|
95
|
+
*/
|
|
96
|
+
getConsentMode(): ConsentMode;
|
|
97
|
+
/**
|
|
98
|
+
* Get ID mode based on consent state
|
|
99
|
+
* Returns 'cookieless' or 'permanent'
|
|
100
|
+
*/
|
|
101
|
+
getIdMode(): 'cookieless' | 'permanent';
|
|
71
102
|
}
|
|
72
103
|
//# sourceMappingURL=consent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,0BAA0B,UAA2C,CAAC;AACnF,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAA4C;gBAEjD,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,WAA0B;IAMrE;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAczC;;OAEG;IACH,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IA8B1C;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAiCtC;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;;;OAKG;IACH,sBAAsB,IAAI,OAAO;IAgBjC;;;OAGG;IACH,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI1D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAO7D;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,YAAY,IAAI,IAAI;IAWpB;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;;OAGG;IACH,SAAS,IAAI,YAAY,GAAG,WAAW;CAGxC"}
|
package/dist/esm/consent.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Consent management for Grain Analytics
|
|
3
|
-
*
|
|
2
|
+
* Consent management for Grain Analytics v2.0
|
|
3
|
+
* Privacy-first, cookie-less by default
|
|
4
|
+
*
|
|
5
|
+
* Consent Modes:
|
|
6
|
+
* - cookieless: Default mode, daily rotating IDs, no consent needed
|
|
7
|
+
* - gdpr-strict: Requires explicit consent, falls back to cookieless
|
|
8
|
+
* - gdpr-opt-out: Permanent IDs by default, cookieless on opt-out
|
|
4
9
|
*/
|
|
5
10
|
export const DEFAULT_CONSENT_CATEGORIES = ['necessary', 'analytics', 'functional'];
|
|
6
11
|
export const CONSENT_VERSION = '1.0.0';
|
|
7
12
|
/**
|
|
8
13
|
* Consent manager for handling user consent state
|
|
14
|
+
* v2.0: Cookie-less by default, privacy-first approach
|
|
9
15
|
*/
|
|
10
16
|
export class ConsentManager {
|
|
11
|
-
constructor(tenantId, consentMode = '
|
|
17
|
+
constructor(tenantId, consentMode = 'cookieless') {
|
|
12
18
|
this.consentState = null;
|
|
13
19
|
this.listeners = [];
|
|
14
20
|
this.consentMode = consentMode;
|
|
@@ -18,9 +24,8 @@ export class ConsentManager {
|
|
|
18
24
|
/**
|
|
19
25
|
* Load consent state from localStorage
|
|
20
26
|
*
|
|
21
|
-
* GDPR Compliance:
|
|
22
|
-
*
|
|
23
|
-
* The consent preference itself is not tracking data.
|
|
27
|
+
* GDPR Compliance: localStorage only used for storing consent preferences
|
|
28
|
+
* (not for tracking), which is a legitimate interest for compliance.
|
|
24
29
|
*/
|
|
25
30
|
loadConsentState() {
|
|
26
31
|
if (typeof window === 'undefined')
|
|
@@ -34,8 +39,8 @@ export class ConsentManager {
|
|
|
34
39
|
timestamp: new Date(parsed.timestamp),
|
|
35
40
|
};
|
|
36
41
|
}
|
|
37
|
-
else if (this.consentMode === 'opt-out'
|
|
38
|
-
// Auto-grant consent for opt-out
|
|
42
|
+
else if (this.consentMode === 'gdpr-opt-out') {
|
|
43
|
+
// Auto-grant consent for opt-out mode (user hasn't opted out yet)
|
|
39
44
|
this.consentState = {
|
|
40
45
|
granted: true,
|
|
41
46
|
categories: DEFAULT_CONSENT_CATEGORIES,
|
|
@@ -44,10 +49,10 @@ export class ConsentManager {
|
|
|
44
49
|
};
|
|
45
50
|
this.saveConsentState();
|
|
46
51
|
}
|
|
47
|
-
// Note:
|
|
52
|
+
// Note: cookieless and gdpr-strict modes without stored consent → no permanent tracking
|
|
48
53
|
}
|
|
49
54
|
catch (error) {
|
|
50
|
-
// Silent failure -
|
|
55
|
+
// Silent failure - will use cookieless mode by default
|
|
51
56
|
}
|
|
52
57
|
}
|
|
53
58
|
/**
|
|
@@ -117,32 +122,73 @@ export class ConsentManager {
|
|
|
117
122
|
return this.consentState ? { ...this.consentState } : null;
|
|
118
123
|
}
|
|
119
124
|
/**
|
|
120
|
-
* Check if user has granted consent
|
|
125
|
+
* Check if user has granted consent for permanent IDs
|
|
121
126
|
*/
|
|
122
127
|
hasConsent(category) {
|
|
123
|
-
//
|
|
124
|
-
if (this.consentMode === '
|
|
125
|
-
return
|
|
128
|
+
// Cookie-less mode: no consent needed (no permanent tracking)
|
|
129
|
+
if (this.consentMode === 'cookieless') {
|
|
130
|
+
return false; // No permanent IDs
|
|
126
131
|
}
|
|
127
|
-
//
|
|
128
|
-
if (this.consentMode === '
|
|
129
|
-
|
|
132
|
+
// GDPR Strict: requires explicit consent
|
|
133
|
+
if (this.consentMode === 'gdpr-strict') {
|
|
134
|
+
if (!this.consentState?.granted) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
130
137
|
}
|
|
131
|
-
//
|
|
132
|
-
if (
|
|
133
|
-
|
|
138
|
+
// GDPR Opt-out: consent by default unless explicitly revoked
|
|
139
|
+
if (this.consentMode === 'gdpr-opt-out') {
|
|
140
|
+
// If no state, assume consent (opt-out model)
|
|
141
|
+
if (!this.consentState) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
// Check if consent was revoked
|
|
145
|
+
if (!this.consentState.granted) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
134
148
|
}
|
|
135
149
|
// Check specific category if provided
|
|
136
|
-
if (category) {
|
|
150
|
+
if (category && this.consentState) {
|
|
137
151
|
return this.consentState.categories.includes(category);
|
|
138
152
|
}
|
|
139
|
-
return
|
|
153
|
+
return this.consentState?.granted ?? (this.consentMode === 'gdpr-opt-out');
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if permanent IDs are allowed
|
|
157
|
+
*/
|
|
158
|
+
shouldUsePermanentId() {
|
|
159
|
+
return this.hasConsent();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if we should strip query parameters from URLs
|
|
163
|
+
* Query params stripped unless:
|
|
164
|
+
* - Mode is gdpr-opt-out, OR
|
|
165
|
+
* - Mode is gdpr-strict AND consent given
|
|
166
|
+
*/
|
|
167
|
+
shouldStripQueryParams() {
|
|
168
|
+
if (this.consentMode === 'cookieless') {
|
|
169
|
+
return true; // Always strip in cookieless mode
|
|
170
|
+
}
|
|
171
|
+
if (this.consentMode === 'gdpr-strict') {
|
|
172
|
+
return !this.hasConsent(); // Strip unless consented
|
|
173
|
+
}
|
|
174
|
+
if (this.consentMode === 'gdpr-opt-out') {
|
|
175
|
+
return false; // Don't strip in opt-out mode
|
|
176
|
+
}
|
|
177
|
+
return true; // Default: strip
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if we can track events (always true in v2.0)
|
|
181
|
+
* Even cookieless mode allows basic analytics with daily IDs
|
|
182
|
+
*/
|
|
183
|
+
canTrack() {
|
|
184
|
+
return true; // All modes allow some form of tracking
|
|
140
185
|
}
|
|
141
186
|
/**
|
|
142
187
|
* Check if we should wait for consent before tracking
|
|
188
|
+
* Only relevant for GDPR Strict mode
|
|
143
189
|
*/
|
|
144
190
|
shouldWaitForConsent() {
|
|
145
|
-
return this.consentMode === '
|
|
191
|
+
return this.consentMode === 'gdpr-strict' && !this.consentState?.granted;
|
|
146
192
|
}
|
|
147
193
|
/**
|
|
148
194
|
* Add consent change listener
|
|
@@ -188,5 +234,18 @@ export class ConsentManager {
|
|
|
188
234
|
// Silent failure - consent state may not be fully cleared
|
|
189
235
|
}
|
|
190
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Get current consent mode
|
|
239
|
+
*/
|
|
240
|
+
getConsentMode() {
|
|
241
|
+
return this.consentMode;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get ID mode based on consent state
|
|
245
|
+
* Returns 'cookieless' or 'permanent'
|
|
246
|
+
*/
|
|
247
|
+
getIdMode() {
|
|
248
|
+
return this.shouldUsePermanentId() ? 'permanent' : 'cookieless';
|
|
249
|
+
}
|
|
191
250
|
}
|
|
192
251
|
//# sourceMappingURL=consent.js.map
|
package/dist/esm/consent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Agent for Visual Event Tracking
|
|
3
|
+
* Provides a toolbar and element inspection mode for creating event trackers
|
|
4
|
+
*/
|
|
5
|
+
export interface DebugAgentConfig {
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface Tracker {
|
|
9
|
+
track(eventName: string, properties?: Record<string, unknown>): void | Promise<void>;
|
|
10
|
+
log(...args: unknown[]): void;
|
|
11
|
+
}
|
|
12
|
+
export interface ExistingTracker {
|
|
13
|
+
trackerId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
type: string;
|
|
16
|
+
selector: string;
|
|
17
|
+
urlScope: string;
|
|
18
|
+
urlPattern?: string;
|
|
19
|
+
isEnabled: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class DebugAgent {
|
|
22
|
+
private tracker;
|
|
23
|
+
private sessionId;
|
|
24
|
+
private tenantId;
|
|
25
|
+
private apiUrl;
|
|
26
|
+
private config;
|
|
27
|
+
private isDestroyed;
|
|
28
|
+
private isInspectMode;
|
|
29
|
+
private showTrackers;
|
|
30
|
+
private selectedElement;
|
|
31
|
+
private toolbarElement;
|
|
32
|
+
private panelElement;
|
|
33
|
+
private highlightElement;
|
|
34
|
+
private existingTrackers;
|
|
35
|
+
private trackerHighlights;
|
|
36
|
+
private isDragging;
|
|
37
|
+
private dragStartX;
|
|
38
|
+
private dragStartY;
|
|
39
|
+
private toolbarStartX;
|
|
40
|
+
private toolbarStartY;
|
|
41
|
+
private mouseMoveListener;
|
|
42
|
+
private clickListener;
|
|
43
|
+
private dragMoveListener;
|
|
44
|
+
private dragEndListener;
|
|
45
|
+
constructor(tracker: Tracker, sessionId: string, tenantId: string, apiUrl: string, config?: DebugAgentConfig);
|
|
46
|
+
/**
|
|
47
|
+
* Initialize the debug agent
|
|
48
|
+
*/
|
|
49
|
+
private initialize;
|
|
50
|
+
/**
|
|
51
|
+
* Load existing trackers from API
|
|
52
|
+
*/
|
|
53
|
+
private loadExistingTrackers;
|
|
54
|
+
/**
|
|
55
|
+
* Show the debug toolbar
|
|
56
|
+
*/
|
|
57
|
+
private showToolbar;
|
|
58
|
+
/**
|
|
59
|
+
* Create highlight element for hovering
|
|
60
|
+
*/
|
|
61
|
+
private createHighlightElement;
|
|
62
|
+
/**
|
|
63
|
+
* Start dragging the toolbar
|
|
64
|
+
*/
|
|
65
|
+
private startDrag;
|
|
66
|
+
/**
|
|
67
|
+
* Handle drag movement
|
|
68
|
+
*/
|
|
69
|
+
private onDrag;
|
|
70
|
+
/**
|
|
71
|
+
* End dragging
|
|
72
|
+
*/
|
|
73
|
+
private endDrag;
|
|
74
|
+
/**
|
|
75
|
+
* Toggle tracker view
|
|
76
|
+
*/
|
|
77
|
+
private toggleTrackerView;
|
|
78
|
+
/**
|
|
79
|
+
* Show tracker highlights on page
|
|
80
|
+
*/
|
|
81
|
+
private showTrackerHighlights;
|
|
82
|
+
/**
|
|
83
|
+
* Hide tracker highlights
|
|
84
|
+
*/
|
|
85
|
+
private hideTrackerHighlights;
|
|
86
|
+
/**
|
|
87
|
+
* Show trackers list
|
|
88
|
+
*/
|
|
89
|
+
private showTrackersList;
|
|
90
|
+
/**
|
|
91
|
+
* Hide trackers list
|
|
92
|
+
*/
|
|
93
|
+
private hideTrackersList;
|
|
94
|
+
/**
|
|
95
|
+
* Scroll to and highlight a tracker element
|
|
96
|
+
*/
|
|
97
|
+
private scrollToTracker;
|
|
98
|
+
/**
|
|
99
|
+
* Find element by XPath selector
|
|
100
|
+
*/
|
|
101
|
+
private findElementBySelector;
|
|
102
|
+
/**
|
|
103
|
+
* Toggle inspect mode
|
|
104
|
+
*/
|
|
105
|
+
private toggleInspectMode;
|
|
106
|
+
/**
|
|
107
|
+
* Enable element inspection mode
|
|
108
|
+
*/
|
|
109
|
+
private enableInspectMode;
|
|
110
|
+
/**
|
|
111
|
+
* Handle ESC key to exit inspect mode
|
|
112
|
+
*/
|
|
113
|
+
private handleEscapeKey;
|
|
114
|
+
/**
|
|
115
|
+
* Disable element inspection mode
|
|
116
|
+
*/
|
|
117
|
+
private disableInspectMode;
|
|
118
|
+
/**
|
|
119
|
+
* Handle mouse move to highlight hovered element
|
|
120
|
+
*/
|
|
121
|
+
private handleMouseMove;
|
|
122
|
+
/**
|
|
123
|
+
* Handle element click to show creation panel
|
|
124
|
+
*/
|
|
125
|
+
private handleElementClick;
|
|
126
|
+
/**
|
|
127
|
+
* Show tracker creation panel
|
|
128
|
+
*/
|
|
129
|
+
private showCreationPanel;
|
|
130
|
+
/**
|
|
131
|
+
* Generate suggested event name from element
|
|
132
|
+
*/
|
|
133
|
+
private generateEventName;
|
|
134
|
+
/**
|
|
135
|
+
* Handle tracker creation
|
|
136
|
+
*/
|
|
137
|
+
private handleCreateTracker;
|
|
138
|
+
/**
|
|
139
|
+
* Create tracker via API
|
|
140
|
+
*/
|
|
141
|
+
private createTracker;
|
|
142
|
+
/**
|
|
143
|
+
* Hide creation panel
|
|
144
|
+
*/
|
|
145
|
+
private hideCreationPanel;
|
|
146
|
+
/**
|
|
147
|
+
* Show success message
|
|
148
|
+
*/
|
|
149
|
+
private showSuccessMessage;
|
|
150
|
+
/**
|
|
151
|
+
* End debug session
|
|
152
|
+
*/
|
|
153
|
+
private endDebug;
|
|
154
|
+
/**
|
|
155
|
+
* Get XPath for element
|
|
156
|
+
*/
|
|
157
|
+
private getXPathForElement;
|
|
158
|
+
/**
|
|
159
|
+
* Log debug messages
|
|
160
|
+
*/
|
|
161
|
+
private log;
|
|
162
|
+
/**
|
|
163
|
+
* Update toolbar stats
|
|
164
|
+
*/
|
|
165
|
+
private updateToolbarStats;
|
|
166
|
+
/**
|
|
167
|
+
* Destroy the debug agent
|
|
168
|
+
*/
|
|
169
|
+
destroy(): void;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=debug-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-agent.d.ts","sourceRoot":"","sources":["../../src/debug-agent.ts"],"names":[],"mappings":"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"}
|