@grainql/analytics-web 2.1.3 → 2.2.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/dist/cjs/consent.d.ts +4 -0
- package/dist/cjs/consent.d.ts.map +1 -1
- package/dist/cjs/consent.js +5 -0
- package/dist/cjs/consent.js.map +1 -1
- package/dist/cjs/index.d.ts +20 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/consent.d.ts +4 -0
- package/dist/consent.d.ts.map +1 -1
- package/dist/consent.js +5 -0
- package/dist/esm/consent.d.ts +4 -0
- package/dist/esm/consent.d.ts.map +1 -1
- package/dist/esm/consent.js +5 -0
- package/dist/esm/consent.js.map +1 -1
- package/dist/esm/index.d.ts +20 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.dev.js +45 -17
- package/dist/index.global.dev.js.map +2 -2
- package/dist/index.global.js +2 -2
- package/dist/index.global.js.map +3 -3
- package/dist/index.js +48 -22
- package/dist/index.mjs +48 -22
- package/dist/react/consent.d.ts +4 -0
- package/dist/react/consent.d.ts.map +1 -1
- package/dist/react/consent.js +5 -0
- package/dist/react/consent.mjs +5 -0
- package/dist/react/index.d.ts +20 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +48 -22
- package/dist/react/index.mjs +48 -22
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -116,6 +116,23 @@ class GrainAnalytics {
|
|
|
116
116
|
return v.toString(16);
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if we should allow persistent storage (GDPR compliance)
|
|
121
|
+
*
|
|
122
|
+
* Returns true if:
|
|
123
|
+
* - Consent has been granted, OR
|
|
124
|
+
* - Not in opt-in mode, OR
|
|
125
|
+
* - User has been explicitly identified by the site (login/identify), OR
|
|
126
|
+
* - Using JWT auth strategy (functional/essential purpose)
|
|
127
|
+
*/
|
|
128
|
+
shouldAllowPersistentStorage() {
|
|
129
|
+
const hasConsent = this.consentManager.hasConsent('analytics');
|
|
130
|
+
const isOptInMode = this.config.consentMode === 'opt-in';
|
|
131
|
+
const userExplicitlyIdentified = !!this.globalUserId;
|
|
132
|
+
const isJWTAuth = this.config.authStrategy === 'JWT';
|
|
133
|
+
// Allow persistent storage if any of these conditions are met
|
|
134
|
+
return hasConsent || !isOptInMode || userExplicitlyIdentified || isJWTAuth;
|
|
135
|
+
}
|
|
119
136
|
/**
|
|
120
137
|
* Generate a proper UUIDv4 identifier for anonymous user ID
|
|
121
138
|
*/
|
|
@@ -125,10 +142,19 @@ class GrainAnalytics {
|
|
|
125
142
|
/**
|
|
126
143
|
* Initialize persistent anonymous user ID from cookies or localStorage
|
|
127
144
|
* Priority: Cookie → localStorage → generate new
|
|
145
|
+
*
|
|
146
|
+
* GDPR Compliance: In opt-in mode without consent, we skip loading/saving
|
|
147
|
+
* persistent IDs unless the user has been explicitly identified by the site
|
|
148
|
+
* or when using JWT auth (functional/essential purpose)
|
|
128
149
|
*/
|
|
129
150
|
initializePersistentAnonymousUserId() {
|
|
130
151
|
if (typeof window === 'undefined')
|
|
131
152
|
return;
|
|
153
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
154
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
155
|
+
this.log('Opt-in mode without consent: skipping persistent ID initialization (GDPR compliance)');
|
|
156
|
+
return; // Don't load or create persistent ID
|
|
157
|
+
}
|
|
132
158
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
133
159
|
const cookieName = '_grain_uid';
|
|
134
160
|
try {
|
|
@@ -166,10 +192,18 @@ class GrainAnalytics {
|
|
|
166
192
|
}
|
|
167
193
|
/**
|
|
168
194
|
* Save persistent anonymous user ID to cookie and/or localStorage
|
|
195
|
+
*
|
|
196
|
+
* GDPR Compliance: In opt-in mode without consent, we don't persist IDs
|
|
197
|
+
* unless the user has been explicitly identified or using JWT auth
|
|
169
198
|
*/
|
|
170
199
|
savePersistentAnonymousUserId(userId) {
|
|
171
200
|
if (typeof window === 'undefined')
|
|
172
201
|
return;
|
|
202
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
203
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
204
|
+
this.log('Opt-in mode without consent: skipping persistent ID save (GDPR compliance)');
|
|
205
|
+
return; // Don't save persistent ID
|
|
206
|
+
}
|
|
173
207
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
174
208
|
const cookieName = '_grain_uid';
|
|
175
209
|
try {
|
|
@@ -192,6 +226,9 @@ class GrainAnalytics {
|
|
|
192
226
|
}
|
|
193
227
|
/**
|
|
194
228
|
* Get the effective user ID (global userId or persistent anonymous ID)
|
|
229
|
+
*
|
|
230
|
+
* GDPR Compliance: In opt-in mode without consent and no explicit user identification,
|
|
231
|
+
* this should not be called. Use getEphemeralSessionId() instead.
|
|
195
232
|
*/
|
|
196
233
|
getEffectiveUserIdInternal() {
|
|
197
234
|
if (this.globalUserId) {
|
|
@@ -202,16 +239,8 @@ class GrainAnalytics {
|
|
|
202
239
|
}
|
|
203
240
|
// Generate a new UUIDv4 identifier as fallback
|
|
204
241
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
205
|
-
// Try to persist it
|
|
206
|
-
|
|
207
|
-
try {
|
|
208
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
209
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
this.log('Failed to persist generated anonymous user ID:', error);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
242
|
+
// Try to persist it (will be skipped in opt-in mode without consent)
|
|
243
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
215
244
|
return this.persistentAnonymousUserId;
|
|
216
245
|
}
|
|
217
246
|
log(...args) {
|
|
@@ -559,7 +588,12 @@ class GrainAnalytics {
|
|
|
559
588
|
*/
|
|
560
589
|
handleConsentGranted() {
|
|
561
590
|
this.flushWaitingForConsentQueue();
|
|
562
|
-
//
|
|
591
|
+
// Initialize persistent ID now that consent is granted (if not already initialized)
|
|
592
|
+
if (!this.persistentAnonymousUserId) {
|
|
593
|
+
this.initializePersistentAnonymousUserId();
|
|
594
|
+
this.log('Initialized persistent ID after consent grant');
|
|
595
|
+
}
|
|
596
|
+
// Track consent granted event with mapping from ephemeral to persistent ID
|
|
563
597
|
if (this.ephemeralSessionId) {
|
|
564
598
|
this.trackSystemEvent('_grain_consent_granted', {
|
|
565
599
|
previous_session_id: this.ephemeralSessionId,
|
|
@@ -729,19 +763,11 @@ class GrainAnalytics {
|
|
|
729
763
|
this.persistentAnonymousUserId = null;
|
|
730
764
|
}
|
|
731
765
|
else {
|
|
732
|
-
// If clearing user ID, ensure we have
|
|
766
|
+
// If clearing user ID, ensure we have an identifier
|
|
733
767
|
if (!this.persistentAnonymousUserId) {
|
|
734
768
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
735
|
-
// Try to persist the new anonymous ID
|
|
736
|
-
|
|
737
|
-
try {
|
|
738
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
739
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
740
|
-
}
|
|
741
|
-
catch (error) {
|
|
742
|
-
this.log('Failed to persist new anonymous user ID:', error);
|
|
743
|
-
}
|
|
744
|
-
}
|
|
769
|
+
// Try to persist the new anonymous ID (respects GDPR opt-in mode)
|
|
770
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
745
771
|
}
|
|
746
772
|
}
|
|
747
773
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -112,6 +112,23 @@ export class GrainAnalytics {
|
|
|
112
112
|
return v.toString(16);
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if we should allow persistent storage (GDPR compliance)
|
|
117
|
+
*
|
|
118
|
+
* Returns true if:
|
|
119
|
+
* - Consent has been granted, OR
|
|
120
|
+
* - Not in opt-in mode, OR
|
|
121
|
+
* - User has been explicitly identified by the site (login/identify), OR
|
|
122
|
+
* - Using JWT auth strategy (functional/essential purpose)
|
|
123
|
+
*/
|
|
124
|
+
shouldAllowPersistentStorage() {
|
|
125
|
+
const hasConsent = this.consentManager.hasConsent('analytics');
|
|
126
|
+
const isOptInMode = this.config.consentMode === 'opt-in';
|
|
127
|
+
const userExplicitlyIdentified = !!this.globalUserId;
|
|
128
|
+
const isJWTAuth = this.config.authStrategy === 'JWT';
|
|
129
|
+
// Allow persistent storage if any of these conditions are met
|
|
130
|
+
return hasConsent || !isOptInMode || userExplicitlyIdentified || isJWTAuth;
|
|
131
|
+
}
|
|
115
132
|
/**
|
|
116
133
|
* Generate a proper UUIDv4 identifier for anonymous user ID
|
|
117
134
|
*/
|
|
@@ -121,10 +138,19 @@ export class GrainAnalytics {
|
|
|
121
138
|
/**
|
|
122
139
|
* Initialize persistent anonymous user ID from cookies or localStorage
|
|
123
140
|
* Priority: Cookie → localStorage → generate new
|
|
141
|
+
*
|
|
142
|
+
* GDPR Compliance: In opt-in mode without consent, we skip loading/saving
|
|
143
|
+
* persistent IDs unless the user has been explicitly identified by the site
|
|
144
|
+
* or when using JWT auth (functional/essential purpose)
|
|
124
145
|
*/
|
|
125
146
|
initializePersistentAnonymousUserId() {
|
|
126
147
|
if (typeof window === 'undefined')
|
|
127
148
|
return;
|
|
149
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
150
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
151
|
+
this.log('Opt-in mode without consent: skipping persistent ID initialization (GDPR compliance)');
|
|
152
|
+
return; // Don't load or create persistent ID
|
|
153
|
+
}
|
|
128
154
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
129
155
|
const cookieName = '_grain_uid';
|
|
130
156
|
try {
|
|
@@ -162,10 +188,18 @@ export class GrainAnalytics {
|
|
|
162
188
|
}
|
|
163
189
|
/**
|
|
164
190
|
* Save persistent anonymous user ID to cookie and/or localStorage
|
|
191
|
+
*
|
|
192
|
+
* GDPR Compliance: In opt-in mode without consent, we don't persist IDs
|
|
193
|
+
* unless the user has been explicitly identified or using JWT auth
|
|
165
194
|
*/
|
|
166
195
|
savePersistentAnonymousUserId(userId) {
|
|
167
196
|
if (typeof window === 'undefined')
|
|
168
197
|
return;
|
|
198
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
199
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
200
|
+
this.log('Opt-in mode without consent: skipping persistent ID save (GDPR compliance)');
|
|
201
|
+
return; // Don't save persistent ID
|
|
202
|
+
}
|
|
169
203
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
170
204
|
const cookieName = '_grain_uid';
|
|
171
205
|
try {
|
|
@@ -188,6 +222,9 @@ export class GrainAnalytics {
|
|
|
188
222
|
}
|
|
189
223
|
/**
|
|
190
224
|
* Get the effective user ID (global userId or persistent anonymous ID)
|
|
225
|
+
*
|
|
226
|
+
* GDPR Compliance: In opt-in mode without consent and no explicit user identification,
|
|
227
|
+
* this should not be called. Use getEphemeralSessionId() instead.
|
|
191
228
|
*/
|
|
192
229
|
getEffectiveUserIdInternal() {
|
|
193
230
|
if (this.globalUserId) {
|
|
@@ -198,16 +235,8 @@ export class GrainAnalytics {
|
|
|
198
235
|
}
|
|
199
236
|
// Generate a new UUIDv4 identifier as fallback
|
|
200
237
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
201
|
-
// Try to persist it
|
|
202
|
-
|
|
203
|
-
try {
|
|
204
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
205
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
this.log('Failed to persist generated anonymous user ID:', error);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
238
|
+
// Try to persist it (will be skipped in opt-in mode without consent)
|
|
239
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
211
240
|
return this.persistentAnonymousUserId;
|
|
212
241
|
}
|
|
213
242
|
log(...args) {
|
|
@@ -555,7 +584,12 @@ export class GrainAnalytics {
|
|
|
555
584
|
*/
|
|
556
585
|
handleConsentGranted() {
|
|
557
586
|
this.flushWaitingForConsentQueue();
|
|
558
|
-
//
|
|
587
|
+
// Initialize persistent ID now that consent is granted (if not already initialized)
|
|
588
|
+
if (!this.persistentAnonymousUserId) {
|
|
589
|
+
this.initializePersistentAnonymousUserId();
|
|
590
|
+
this.log('Initialized persistent ID after consent grant');
|
|
591
|
+
}
|
|
592
|
+
// Track consent granted event with mapping from ephemeral to persistent ID
|
|
559
593
|
if (this.ephemeralSessionId) {
|
|
560
594
|
this.trackSystemEvent('_grain_consent_granted', {
|
|
561
595
|
previous_session_id: this.ephemeralSessionId,
|
|
@@ -725,19 +759,11 @@ export class GrainAnalytics {
|
|
|
725
759
|
this.persistentAnonymousUserId = null;
|
|
726
760
|
}
|
|
727
761
|
else {
|
|
728
|
-
// If clearing user ID, ensure we have
|
|
762
|
+
// If clearing user ID, ensure we have an identifier
|
|
729
763
|
if (!this.persistentAnonymousUserId) {
|
|
730
764
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
731
|
-
// Try to persist the new anonymous ID
|
|
732
|
-
|
|
733
|
-
try {
|
|
734
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
735
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
736
|
-
}
|
|
737
|
-
catch (error) {
|
|
738
|
-
this.log('Failed to persist new anonymous user ID:', error);
|
|
739
|
-
}
|
|
740
|
-
}
|
|
765
|
+
// Try to persist the new anonymous ID (respects GDPR opt-in mode)
|
|
766
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
741
767
|
}
|
|
742
768
|
}
|
|
743
769
|
}
|
package/dist/react/consent.d.ts
CHANGED
|
@@ -22,6 +22,10 @@ export declare class ConsentManager {
|
|
|
22
22
|
constructor(tenantId: string, consentMode?: ConsentMode);
|
|
23
23
|
/**
|
|
24
24
|
* Load consent state from localStorage
|
|
25
|
+
*
|
|
26
|
+
* GDPR Compliance: In opt-in mode, we can use localStorage for consent preferences
|
|
27
|
+
* since storing consent choices is a legitimate interest and necessary for compliance.
|
|
28
|
+
* The consent preference itself is not tracking data.
|
|
25
29
|
*/
|
|
26
30
|
private loadConsentState;
|
|
27
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5D,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;;GAEG;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,WAAuB;IAMlE
|
|
1
|
+
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5D,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;;GAEG;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,WAAuB;IAMlE;;;;;;OAMG;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;IAwBtC;;OAEG;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;CAUrB"}
|
package/dist/react/consent.js
CHANGED
|
@@ -20,6 +20,10 @@ class ConsentManager {
|
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Load consent state from localStorage
|
|
23
|
+
*
|
|
24
|
+
* GDPR Compliance: In opt-in mode, we can use localStorage for consent preferences
|
|
25
|
+
* since storing consent choices is a legitimate interest and necessary for compliance.
|
|
26
|
+
* The consent preference itself is not tracking data.
|
|
23
27
|
*/
|
|
24
28
|
loadConsentState() {
|
|
25
29
|
if (typeof window === 'undefined')
|
|
@@ -43,6 +47,7 @@ class ConsentManager {
|
|
|
43
47
|
};
|
|
44
48
|
this.saveConsentState();
|
|
45
49
|
}
|
|
50
|
+
// Note: In opt-in mode without stored consent, consentState remains null (no consent)
|
|
46
51
|
}
|
|
47
52
|
catch (error) {
|
|
48
53
|
console.error('[Grain Consent] Failed to load consent state:', error);
|
package/dist/react/consent.mjs
CHANGED
|
@@ -17,6 +17,10 @@ export class ConsentManager {
|
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Load consent state from localStorage
|
|
20
|
+
*
|
|
21
|
+
* GDPR Compliance: In opt-in mode, we can use localStorage for consent preferences
|
|
22
|
+
* since storing consent choices is a legitimate interest and necessary for compliance.
|
|
23
|
+
* The consent preference itself is not tracking data.
|
|
20
24
|
*/
|
|
21
25
|
loadConsentState() {
|
|
22
26
|
if (typeof window === 'undefined')
|
|
@@ -40,6 +44,7 @@ export class ConsentManager {
|
|
|
40
44
|
};
|
|
41
45
|
this.saveConsentState();
|
|
42
46
|
}
|
|
47
|
+
// Note: In opt-in mode without stored consent, consentState remains null (no consent)
|
|
43
48
|
}
|
|
44
49
|
catch (error) {
|
|
45
50
|
console.error('[Grain Consent] Failed to load consent state:', error);
|
package/dist/react/index.d.ts
CHANGED
|
@@ -219,6 +219,16 @@ export declare class GrainAnalytics implements HeartbeatTracker, PageTracker {
|
|
|
219
219
|
* Generate a UUID v4 string
|
|
220
220
|
*/
|
|
221
221
|
private generateUUID;
|
|
222
|
+
/**
|
|
223
|
+
* Check if we should allow persistent storage (GDPR compliance)
|
|
224
|
+
*
|
|
225
|
+
* Returns true if:
|
|
226
|
+
* - Consent has been granted, OR
|
|
227
|
+
* - Not in opt-in mode, OR
|
|
228
|
+
* - User has been explicitly identified by the site (login/identify), OR
|
|
229
|
+
* - Using JWT auth strategy (functional/essential purpose)
|
|
230
|
+
*/
|
|
231
|
+
private shouldAllowPersistentStorage;
|
|
222
232
|
/**
|
|
223
233
|
* Generate a proper UUIDv4 identifier for anonymous user ID
|
|
224
234
|
*/
|
|
@@ -226,14 +236,24 @@ export declare class GrainAnalytics implements HeartbeatTracker, PageTracker {
|
|
|
226
236
|
/**
|
|
227
237
|
* Initialize persistent anonymous user ID from cookies or localStorage
|
|
228
238
|
* Priority: Cookie → localStorage → generate new
|
|
239
|
+
*
|
|
240
|
+
* GDPR Compliance: In opt-in mode without consent, we skip loading/saving
|
|
241
|
+
* persistent IDs unless the user has been explicitly identified by the site
|
|
242
|
+
* or when using JWT auth (functional/essential purpose)
|
|
229
243
|
*/
|
|
230
244
|
private initializePersistentAnonymousUserId;
|
|
231
245
|
/**
|
|
232
246
|
* Save persistent anonymous user ID to cookie and/or localStorage
|
|
247
|
+
*
|
|
248
|
+
* GDPR Compliance: In opt-in mode without consent, we don't persist IDs
|
|
249
|
+
* unless the user has been explicitly identified or using JWT auth
|
|
233
250
|
*/
|
|
234
251
|
private savePersistentAnonymousUserId;
|
|
235
252
|
/**
|
|
236
253
|
* Get the effective user ID (global userId or persistent anonymous ID)
|
|
254
|
+
*
|
|
255
|
+
* GDPR Compliance: In opt-in mode without consent and no explicit user identification,
|
|
256
|
+
* this should not be called. Use getEphemeralSessionId() instead.
|
|
237
257
|
*/
|
|
238
258
|
private getEffectiveUserIdInternal;
|
|
239
259
|
private log;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/react/index.js
CHANGED
|
@@ -116,6 +116,23 @@ class GrainAnalytics {
|
|
|
116
116
|
return v.toString(16);
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if we should allow persistent storage (GDPR compliance)
|
|
121
|
+
*
|
|
122
|
+
* Returns true if:
|
|
123
|
+
* - Consent has been granted, OR
|
|
124
|
+
* - Not in opt-in mode, OR
|
|
125
|
+
* - User has been explicitly identified by the site (login/identify), OR
|
|
126
|
+
* - Using JWT auth strategy (functional/essential purpose)
|
|
127
|
+
*/
|
|
128
|
+
shouldAllowPersistentStorage() {
|
|
129
|
+
const hasConsent = this.consentManager.hasConsent('analytics');
|
|
130
|
+
const isOptInMode = this.config.consentMode === 'opt-in';
|
|
131
|
+
const userExplicitlyIdentified = !!this.globalUserId;
|
|
132
|
+
const isJWTAuth = this.config.authStrategy === 'JWT';
|
|
133
|
+
// Allow persistent storage if any of these conditions are met
|
|
134
|
+
return hasConsent || !isOptInMode || userExplicitlyIdentified || isJWTAuth;
|
|
135
|
+
}
|
|
119
136
|
/**
|
|
120
137
|
* Generate a proper UUIDv4 identifier for anonymous user ID
|
|
121
138
|
*/
|
|
@@ -125,10 +142,19 @@ class GrainAnalytics {
|
|
|
125
142
|
/**
|
|
126
143
|
* Initialize persistent anonymous user ID from cookies or localStorage
|
|
127
144
|
* Priority: Cookie → localStorage → generate new
|
|
145
|
+
*
|
|
146
|
+
* GDPR Compliance: In opt-in mode without consent, we skip loading/saving
|
|
147
|
+
* persistent IDs unless the user has been explicitly identified by the site
|
|
148
|
+
* or when using JWT auth (functional/essential purpose)
|
|
128
149
|
*/
|
|
129
150
|
initializePersistentAnonymousUserId() {
|
|
130
151
|
if (typeof window === 'undefined')
|
|
131
152
|
return;
|
|
153
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
154
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
155
|
+
this.log('Opt-in mode without consent: skipping persistent ID initialization (GDPR compliance)');
|
|
156
|
+
return; // Don't load or create persistent ID
|
|
157
|
+
}
|
|
132
158
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
133
159
|
const cookieName = '_grain_uid';
|
|
134
160
|
try {
|
|
@@ -166,10 +192,18 @@ class GrainAnalytics {
|
|
|
166
192
|
}
|
|
167
193
|
/**
|
|
168
194
|
* Save persistent anonymous user ID to cookie and/or localStorage
|
|
195
|
+
*
|
|
196
|
+
* GDPR Compliance: In opt-in mode without consent, we don't persist IDs
|
|
197
|
+
* unless the user has been explicitly identified or using JWT auth
|
|
169
198
|
*/
|
|
170
199
|
savePersistentAnonymousUserId(userId) {
|
|
171
200
|
if (typeof window === 'undefined')
|
|
172
201
|
return;
|
|
202
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
203
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
204
|
+
this.log('Opt-in mode without consent: skipping persistent ID save (GDPR compliance)');
|
|
205
|
+
return; // Don't save persistent ID
|
|
206
|
+
}
|
|
173
207
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
174
208
|
const cookieName = '_grain_uid';
|
|
175
209
|
try {
|
|
@@ -192,6 +226,9 @@ class GrainAnalytics {
|
|
|
192
226
|
}
|
|
193
227
|
/**
|
|
194
228
|
* Get the effective user ID (global userId or persistent anonymous ID)
|
|
229
|
+
*
|
|
230
|
+
* GDPR Compliance: In opt-in mode without consent and no explicit user identification,
|
|
231
|
+
* this should not be called. Use getEphemeralSessionId() instead.
|
|
195
232
|
*/
|
|
196
233
|
getEffectiveUserIdInternal() {
|
|
197
234
|
if (this.globalUserId) {
|
|
@@ -202,16 +239,8 @@ class GrainAnalytics {
|
|
|
202
239
|
}
|
|
203
240
|
// Generate a new UUIDv4 identifier as fallback
|
|
204
241
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
205
|
-
// Try to persist it
|
|
206
|
-
|
|
207
|
-
try {
|
|
208
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
209
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
this.log('Failed to persist generated anonymous user ID:', error);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
242
|
+
// Try to persist it (will be skipped in opt-in mode without consent)
|
|
243
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
215
244
|
return this.persistentAnonymousUserId;
|
|
216
245
|
}
|
|
217
246
|
log(...args) {
|
|
@@ -559,7 +588,12 @@ class GrainAnalytics {
|
|
|
559
588
|
*/
|
|
560
589
|
handleConsentGranted() {
|
|
561
590
|
this.flushWaitingForConsentQueue();
|
|
562
|
-
//
|
|
591
|
+
// Initialize persistent ID now that consent is granted (if not already initialized)
|
|
592
|
+
if (!this.persistentAnonymousUserId) {
|
|
593
|
+
this.initializePersistentAnonymousUserId();
|
|
594
|
+
this.log('Initialized persistent ID after consent grant');
|
|
595
|
+
}
|
|
596
|
+
// Track consent granted event with mapping from ephemeral to persistent ID
|
|
563
597
|
if (this.ephemeralSessionId) {
|
|
564
598
|
this.trackSystemEvent('_grain_consent_granted', {
|
|
565
599
|
previous_session_id: this.ephemeralSessionId,
|
|
@@ -729,19 +763,11 @@ class GrainAnalytics {
|
|
|
729
763
|
this.persistentAnonymousUserId = null;
|
|
730
764
|
}
|
|
731
765
|
else {
|
|
732
|
-
// If clearing user ID, ensure we have
|
|
766
|
+
// If clearing user ID, ensure we have an identifier
|
|
733
767
|
if (!this.persistentAnonymousUserId) {
|
|
734
768
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
735
|
-
// Try to persist the new anonymous ID
|
|
736
|
-
|
|
737
|
-
try {
|
|
738
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
739
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
740
|
-
}
|
|
741
|
-
catch (error) {
|
|
742
|
-
this.log('Failed to persist new anonymous user ID:', error);
|
|
743
|
-
}
|
|
744
|
-
}
|
|
769
|
+
// Try to persist the new anonymous ID (respects GDPR opt-in mode)
|
|
770
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
745
771
|
}
|
|
746
772
|
}
|
|
747
773
|
}
|
package/dist/react/index.mjs
CHANGED
|
@@ -112,6 +112,23 @@ export class GrainAnalytics {
|
|
|
112
112
|
return v.toString(16);
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if we should allow persistent storage (GDPR compliance)
|
|
117
|
+
*
|
|
118
|
+
* Returns true if:
|
|
119
|
+
* - Consent has been granted, OR
|
|
120
|
+
* - Not in opt-in mode, OR
|
|
121
|
+
* - User has been explicitly identified by the site (login/identify), OR
|
|
122
|
+
* - Using JWT auth strategy (functional/essential purpose)
|
|
123
|
+
*/
|
|
124
|
+
shouldAllowPersistentStorage() {
|
|
125
|
+
const hasConsent = this.consentManager.hasConsent('analytics');
|
|
126
|
+
const isOptInMode = this.config.consentMode === 'opt-in';
|
|
127
|
+
const userExplicitlyIdentified = !!this.globalUserId;
|
|
128
|
+
const isJWTAuth = this.config.authStrategy === 'JWT';
|
|
129
|
+
// Allow persistent storage if any of these conditions are met
|
|
130
|
+
return hasConsent || !isOptInMode || userExplicitlyIdentified || isJWTAuth;
|
|
131
|
+
}
|
|
115
132
|
/**
|
|
116
133
|
* Generate a proper UUIDv4 identifier for anonymous user ID
|
|
117
134
|
*/
|
|
@@ -121,10 +138,19 @@ export class GrainAnalytics {
|
|
|
121
138
|
/**
|
|
122
139
|
* Initialize persistent anonymous user ID from cookies or localStorage
|
|
123
140
|
* Priority: Cookie → localStorage → generate new
|
|
141
|
+
*
|
|
142
|
+
* GDPR Compliance: In opt-in mode without consent, we skip loading/saving
|
|
143
|
+
* persistent IDs unless the user has been explicitly identified by the site
|
|
144
|
+
* or when using JWT auth (functional/essential purpose)
|
|
124
145
|
*/
|
|
125
146
|
initializePersistentAnonymousUserId() {
|
|
126
147
|
if (typeof window === 'undefined')
|
|
127
148
|
return;
|
|
149
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
150
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
151
|
+
this.log('Opt-in mode without consent: skipping persistent ID initialization (GDPR compliance)');
|
|
152
|
+
return; // Don't load or create persistent ID
|
|
153
|
+
}
|
|
128
154
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
129
155
|
const cookieName = '_grain_uid';
|
|
130
156
|
try {
|
|
@@ -162,10 +188,18 @@ export class GrainAnalytics {
|
|
|
162
188
|
}
|
|
163
189
|
/**
|
|
164
190
|
* Save persistent anonymous user ID to cookie and/or localStorage
|
|
191
|
+
*
|
|
192
|
+
* GDPR Compliance: In opt-in mode without consent, we don't persist IDs
|
|
193
|
+
* unless the user has been explicitly identified or using JWT auth
|
|
165
194
|
*/
|
|
166
195
|
savePersistentAnonymousUserId(userId) {
|
|
167
196
|
if (typeof window === 'undefined')
|
|
168
197
|
return;
|
|
198
|
+
// Check if we should avoid persistent storage (GDPR compliance)
|
|
199
|
+
if (!this.shouldAllowPersistentStorage()) {
|
|
200
|
+
this.log('Opt-in mode without consent: skipping persistent ID save (GDPR compliance)');
|
|
201
|
+
return; // Don't save persistent ID
|
|
202
|
+
}
|
|
169
203
|
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
170
204
|
const cookieName = '_grain_uid';
|
|
171
205
|
try {
|
|
@@ -188,6 +222,9 @@ export class GrainAnalytics {
|
|
|
188
222
|
}
|
|
189
223
|
/**
|
|
190
224
|
* Get the effective user ID (global userId or persistent anonymous ID)
|
|
225
|
+
*
|
|
226
|
+
* GDPR Compliance: In opt-in mode without consent and no explicit user identification,
|
|
227
|
+
* this should not be called. Use getEphemeralSessionId() instead.
|
|
191
228
|
*/
|
|
192
229
|
getEffectiveUserIdInternal() {
|
|
193
230
|
if (this.globalUserId) {
|
|
@@ -198,16 +235,8 @@ export class GrainAnalytics {
|
|
|
198
235
|
}
|
|
199
236
|
// Generate a new UUIDv4 identifier as fallback
|
|
200
237
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
201
|
-
// Try to persist it
|
|
202
|
-
|
|
203
|
-
try {
|
|
204
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
205
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
this.log('Failed to persist generated anonymous user ID:', error);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
238
|
+
// Try to persist it (will be skipped in opt-in mode without consent)
|
|
239
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
211
240
|
return this.persistentAnonymousUserId;
|
|
212
241
|
}
|
|
213
242
|
log(...args) {
|
|
@@ -555,7 +584,12 @@ export class GrainAnalytics {
|
|
|
555
584
|
*/
|
|
556
585
|
handleConsentGranted() {
|
|
557
586
|
this.flushWaitingForConsentQueue();
|
|
558
|
-
//
|
|
587
|
+
// Initialize persistent ID now that consent is granted (if not already initialized)
|
|
588
|
+
if (!this.persistentAnonymousUserId) {
|
|
589
|
+
this.initializePersistentAnonymousUserId();
|
|
590
|
+
this.log('Initialized persistent ID after consent grant');
|
|
591
|
+
}
|
|
592
|
+
// Track consent granted event with mapping from ephemeral to persistent ID
|
|
559
593
|
if (this.ephemeralSessionId) {
|
|
560
594
|
this.trackSystemEvent('_grain_consent_granted', {
|
|
561
595
|
previous_session_id: this.ephemeralSessionId,
|
|
@@ -725,19 +759,11 @@ export class GrainAnalytics {
|
|
|
725
759
|
this.persistentAnonymousUserId = null;
|
|
726
760
|
}
|
|
727
761
|
else {
|
|
728
|
-
// If clearing user ID, ensure we have
|
|
762
|
+
// If clearing user ID, ensure we have an identifier
|
|
729
763
|
if (!this.persistentAnonymousUserId) {
|
|
730
764
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
731
|
-
// Try to persist the new anonymous ID
|
|
732
|
-
|
|
733
|
-
try {
|
|
734
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
735
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
736
|
-
}
|
|
737
|
-
catch (error) {
|
|
738
|
-
this.log('Failed to persist new anonymous user ID:', error);
|
|
739
|
-
}
|
|
740
|
-
}
|
|
765
|
+
// Try to persist the new anonymous ID (respects GDPR opt-in mode)
|
|
766
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
741
767
|
}
|
|
742
768
|
}
|
|
743
769
|
}
|