@grainql/analytics-web 2.1.1 → 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/README.md +47 -0
- 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/heartbeat.d.ts +5 -0
- package/dist/cjs/heartbeat.d.ts.map +1 -1
- package/dist/cjs/heartbeat.js +35 -7
- package/dist/cjs/heartbeat.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/heartbeat.d.ts +5 -0
- package/dist/esm/heartbeat.d.ts.map +1 -1
- package/dist/esm/heartbeat.js +35 -7
- package/dist/esm/heartbeat.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/heartbeat.d.ts +5 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +35 -7
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.dev.js +78 -23
- 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 +53 -23
- package/dist/index.mjs +53 -23
- 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/heartbeat.d.ts +5 -0
- package/dist/react/heartbeat.d.ts.map +1 -1
- package/dist/react/heartbeat.js +35 -7
- package/dist/react/heartbeat.mjs +35 -7
- package/dist/react/index.d.ts +20 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +53 -23
- package/dist/react/index.mjs +53 -23
- package/package.json +5 -2
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 {
|
|
@@ -178,7 +212,7 @@ class GrainAnalytics {
|
|
|
178
212
|
const cookieOptions = {
|
|
179
213
|
maxAge: 365 * 24 * 60 * 60, // 365 days
|
|
180
214
|
sameSite: 'lax',
|
|
181
|
-
secure: window.location.protocol === 'https:',
|
|
215
|
+
secure: typeof window !== 'undefined' && window.location.protocol === 'https:',
|
|
182
216
|
...this.config.cookieOptions,
|
|
183
217
|
};
|
|
184
218
|
(0, cookies_1.setCookie)(cookieName, userId, cookieOptions);
|
|
@@ -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) {
|
|
@@ -474,6 +503,8 @@ class GrainAnalytics {
|
|
|
474
503
|
}
|
|
475
504
|
}
|
|
476
505
|
startFlushTimer() {
|
|
506
|
+
if (typeof window === 'undefined')
|
|
507
|
+
return;
|
|
477
508
|
if (this.flushTimer) {
|
|
478
509
|
clearInterval(this.flushTimer);
|
|
479
510
|
}
|
|
@@ -557,7 +588,12 @@ class GrainAnalytics {
|
|
|
557
588
|
*/
|
|
558
589
|
handleConsentGranted() {
|
|
559
590
|
this.flushWaitingForConsentQueue();
|
|
560
|
-
//
|
|
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
|
|
561
597
|
if (this.ephemeralSessionId) {
|
|
562
598
|
this.trackSystemEvent('_grain_consent_granted', {
|
|
563
599
|
previous_session_id: this.ephemeralSessionId,
|
|
@@ -727,19 +763,11 @@ class GrainAnalytics {
|
|
|
727
763
|
this.persistentAnonymousUserId = null;
|
|
728
764
|
}
|
|
729
765
|
else {
|
|
730
|
-
// If clearing user ID, ensure we have
|
|
766
|
+
// If clearing user ID, ensure we have an identifier
|
|
731
767
|
if (!this.persistentAnonymousUserId) {
|
|
732
768
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
733
|
-
// Try to persist the new anonymous ID
|
|
734
|
-
|
|
735
|
-
try {
|
|
736
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
737
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
738
|
-
}
|
|
739
|
-
catch (error) {
|
|
740
|
-
this.log('Failed to persist new anonymous user ID:', error);
|
|
741
|
-
}
|
|
742
|
-
}
|
|
769
|
+
// Try to persist the new anonymous ID (respects GDPR opt-in mode)
|
|
770
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
743
771
|
}
|
|
744
772
|
}
|
|
745
773
|
}
|
|
@@ -1320,6 +1348,8 @@ class GrainAnalytics {
|
|
|
1320
1348
|
* Start automatic configuration refresh timer
|
|
1321
1349
|
*/
|
|
1322
1350
|
startConfigRefreshTimer() {
|
|
1351
|
+
if (typeof window === 'undefined')
|
|
1352
|
+
return;
|
|
1323
1353
|
if (this.configRefreshTimer) {
|
|
1324
1354
|
clearInterval(this.configRefreshTimer);
|
|
1325
1355
|
}
|
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 {
|
|
@@ -174,7 +208,7 @@ export class GrainAnalytics {
|
|
|
174
208
|
const cookieOptions = {
|
|
175
209
|
maxAge: 365 * 24 * 60 * 60, // 365 days
|
|
176
210
|
sameSite: 'lax',
|
|
177
|
-
secure: window.location.protocol === 'https:',
|
|
211
|
+
secure: typeof window !== 'undefined' && window.location.protocol === 'https:',
|
|
178
212
|
...this.config.cookieOptions,
|
|
179
213
|
};
|
|
180
214
|
setCookie(cookieName, userId, cookieOptions);
|
|
@@ -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) {
|
|
@@ -470,6 +499,8 @@ export class GrainAnalytics {
|
|
|
470
499
|
}
|
|
471
500
|
}
|
|
472
501
|
startFlushTimer() {
|
|
502
|
+
if (typeof window === 'undefined')
|
|
503
|
+
return;
|
|
473
504
|
if (this.flushTimer) {
|
|
474
505
|
clearInterval(this.flushTimer);
|
|
475
506
|
}
|
|
@@ -553,7 +584,12 @@ export class GrainAnalytics {
|
|
|
553
584
|
*/
|
|
554
585
|
handleConsentGranted() {
|
|
555
586
|
this.flushWaitingForConsentQueue();
|
|
556
|
-
//
|
|
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
|
|
557
593
|
if (this.ephemeralSessionId) {
|
|
558
594
|
this.trackSystemEvent('_grain_consent_granted', {
|
|
559
595
|
previous_session_id: this.ephemeralSessionId,
|
|
@@ -723,19 +759,11 @@ export class GrainAnalytics {
|
|
|
723
759
|
this.persistentAnonymousUserId = null;
|
|
724
760
|
}
|
|
725
761
|
else {
|
|
726
|
-
// If clearing user ID, ensure we have
|
|
762
|
+
// If clearing user ID, ensure we have an identifier
|
|
727
763
|
if (!this.persistentAnonymousUserId) {
|
|
728
764
|
this.persistentAnonymousUserId = this.generateAnonymousUserId();
|
|
729
|
-
// Try to persist the new anonymous ID
|
|
730
|
-
|
|
731
|
-
try {
|
|
732
|
-
const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;
|
|
733
|
-
localStorage.setItem(storageKey, this.persistentAnonymousUserId);
|
|
734
|
-
}
|
|
735
|
-
catch (error) {
|
|
736
|
-
this.log('Failed to persist new anonymous user ID:', error);
|
|
737
|
-
}
|
|
738
|
-
}
|
|
765
|
+
// Try to persist the new anonymous ID (respects GDPR opt-in mode)
|
|
766
|
+
this.savePersistentAnonymousUserId(this.persistentAnonymousUserId);
|
|
739
767
|
}
|
|
740
768
|
}
|
|
741
769
|
}
|
|
@@ -1316,6 +1344,8 @@ export class GrainAnalytics {
|
|
|
1316
1344
|
* Start automatic configuration refresh timer
|
|
1317
1345
|
*/
|
|
1318
1346
|
startConfigRefreshTimer() {
|
|
1347
|
+
if (typeof window === 'undefined')
|
|
1348
|
+
return;
|
|
1319
1349
|
if (this.configRefreshTimer) {
|
|
1320
1350
|
clearInterval(this.configRefreshTimer);
|
|
1321
1351
|
}
|
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);
|
|
@@ -25,7 +25,12 @@ export declare class HeartbeatManager {
|
|
|
25
25
|
private isDestroyed;
|
|
26
26
|
private lastHeartbeatTime;
|
|
27
27
|
private currentInterval;
|
|
28
|
+
private hasSentPageLoadHeartbeat;
|
|
28
29
|
constructor(tracker: HeartbeatTracker, activityDetector: ActivityDetector, config: HeartbeatConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Send initial heartbeat when page loads
|
|
32
|
+
*/
|
|
33
|
+
private sendPageLoadHeartbeat;
|
|
29
34
|
/**
|
|
30
35
|
* Schedule the next heartbeat based on current activity
|
|
31
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,qBAAqB,IAAI,MAAM,CAAC;IAChC,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,IAAI,MAAM,CAAC;IAC1C,iCAAiC,IAAI,IAAI,CAAC;CAC3C;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAS;
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,qBAAqB,IAAI,MAAM,CAAC;IAChC,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,IAAI,MAAM,CAAC;IAC1C,iCAAiC,IAAI,IAAI,CAAC;CAC3C;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,eAAe;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAchB"}
|
package/dist/react/heartbeat.js
CHANGED
|
@@ -9,14 +9,38 @@ class HeartbeatManager {
|
|
|
9
9
|
constructor(tracker, activityDetector, config) {
|
|
10
10
|
this.heartbeatTimer = null;
|
|
11
11
|
this.isDestroyed = false;
|
|
12
|
+
this.hasSentPageLoadHeartbeat = false;
|
|
12
13
|
this.tracker = tracker;
|
|
13
14
|
this.activityDetector = activityDetector;
|
|
14
15
|
this.config = config;
|
|
15
16
|
this.lastHeartbeatTime = Date.now();
|
|
16
17
|
this.currentInterval = config.activeInterval;
|
|
17
|
-
//
|
|
18
|
+
// Send initial heartbeat when page loads (if allowed by consent)
|
|
19
|
+
this.sendPageLoadHeartbeat();
|
|
20
|
+
// Start periodic heartbeat tracking
|
|
18
21
|
this.scheduleNextHeartbeat();
|
|
19
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Send initial heartbeat when page loads
|
|
25
|
+
*/
|
|
26
|
+
sendPageLoadHeartbeat() {
|
|
27
|
+
if (this.isDestroyed || this.hasSentPageLoadHeartbeat)
|
|
28
|
+
return;
|
|
29
|
+
// Wait for page to be fully loaded
|
|
30
|
+
if (typeof window !== 'undefined' && document.readyState !== 'complete') {
|
|
31
|
+
const handleLoad = () => {
|
|
32
|
+
this.sendHeartbeat('page_load');
|
|
33
|
+
this.hasSentPageLoadHeartbeat = true;
|
|
34
|
+
window.removeEventListener('load', handleLoad);
|
|
35
|
+
};
|
|
36
|
+
window.addEventListener('load', handleLoad);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Page is already loaded or we're in a non-browser environment
|
|
40
|
+
this.sendHeartbeat('page_load');
|
|
41
|
+
this.hasSentPageLoadHeartbeat = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
20
44
|
/**
|
|
21
45
|
* Schedule the next heartbeat based on current activity
|
|
22
46
|
*/
|
|
@@ -32,7 +56,7 @@ class HeartbeatManager {
|
|
|
32
56
|
this.currentInterval = isActive ? this.config.activeInterval : this.config.inactiveInterval;
|
|
33
57
|
// Schedule next heartbeat
|
|
34
58
|
this.heartbeatTimer = window.setTimeout(() => {
|
|
35
|
-
this.sendHeartbeat();
|
|
59
|
+
this.sendHeartbeat('periodic');
|
|
36
60
|
this.scheduleNextHeartbeat();
|
|
37
61
|
}, this.currentInterval);
|
|
38
62
|
if (this.config.debug) {
|
|
@@ -42,7 +66,7 @@ class HeartbeatManager {
|
|
|
42
66
|
/**
|
|
43
67
|
* Send heartbeat event
|
|
44
68
|
*/
|
|
45
|
-
sendHeartbeat() {
|
|
69
|
+
sendHeartbeat(heartbeatType = 'periodic') {
|
|
46
70
|
if (this.isDestroyed)
|
|
47
71
|
return;
|
|
48
72
|
const now = Date.now();
|
|
@@ -51,6 +75,7 @@ class HeartbeatManager {
|
|
|
51
75
|
// Base properties (always included)
|
|
52
76
|
const properties = {
|
|
53
77
|
type: 'heartbeat',
|
|
78
|
+
heartbeat_type: heartbeatType,
|
|
54
79
|
status: isActive ? 'active' : 'inactive',
|
|
55
80
|
timestamp: now,
|
|
56
81
|
};
|
|
@@ -60,10 +85,13 @@ class HeartbeatManager {
|
|
|
60
85
|
if (page) {
|
|
61
86
|
properties.page = page;
|
|
62
87
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
88
|
+
// Only include duration and event count for periodic heartbeats
|
|
89
|
+
if (heartbeatType === 'periodic') {
|
|
90
|
+
properties.duration = now - this.lastHeartbeatTime;
|
|
91
|
+
properties.event_count = this.tracker.getEventCountSinceLastHeartbeat();
|
|
92
|
+
// Reset event count
|
|
93
|
+
this.tracker.resetEventCountSinceLastHeartbeat();
|
|
94
|
+
}
|
|
67
95
|
}
|
|
68
96
|
// Track the heartbeat event
|
|
69
97
|
this.tracker.trackSystemEvent('_grain_heartbeat', properties);
|
package/dist/react/heartbeat.mjs
CHANGED
|
@@ -6,14 +6,38 @@ export class HeartbeatManager {
|
|
|
6
6
|
constructor(tracker, activityDetector, config) {
|
|
7
7
|
this.heartbeatTimer = null;
|
|
8
8
|
this.isDestroyed = false;
|
|
9
|
+
this.hasSentPageLoadHeartbeat = false;
|
|
9
10
|
this.tracker = tracker;
|
|
10
11
|
this.activityDetector = activityDetector;
|
|
11
12
|
this.config = config;
|
|
12
13
|
this.lastHeartbeatTime = Date.now();
|
|
13
14
|
this.currentInterval = config.activeInterval;
|
|
14
|
-
//
|
|
15
|
+
// Send initial heartbeat when page loads (if allowed by consent)
|
|
16
|
+
this.sendPageLoadHeartbeat();
|
|
17
|
+
// Start periodic heartbeat tracking
|
|
15
18
|
this.scheduleNextHeartbeat();
|
|
16
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Send initial heartbeat when page loads
|
|
22
|
+
*/
|
|
23
|
+
sendPageLoadHeartbeat() {
|
|
24
|
+
if (this.isDestroyed || this.hasSentPageLoadHeartbeat)
|
|
25
|
+
return;
|
|
26
|
+
// Wait for page to be fully loaded
|
|
27
|
+
if (typeof window !== 'undefined' && document.readyState !== 'complete') {
|
|
28
|
+
const handleLoad = () => {
|
|
29
|
+
this.sendHeartbeat('page_load');
|
|
30
|
+
this.hasSentPageLoadHeartbeat = true;
|
|
31
|
+
window.removeEventListener('load', handleLoad);
|
|
32
|
+
};
|
|
33
|
+
window.addEventListener('load', handleLoad);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Page is already loaded or we're in a non-browser environment
|
|
37
|
+
this.sendHeartbeat('page_load');
|
|
38
|
+
this.hasSentPageLoadHeartbeat = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
17
41
|
/**
|
|
18
42
|
* Schedule the next heartbeat based on current activity
|
|
19
43
|
*/
|
|
@@ -29,7 +53,7 @@ export class HeartbeatManager {
|
|
|
29
53
|
this.currentInterval = isActive ? this.config.activeInterval : this.config.inactiveInterval;
|
|
30
54
|
// Schedule next heartbeat
|
|
31
55
|
this.heartbeatTimer = window.setTimeout(() => {
|
|
32
|
-
this.sendHeartbeat();
|
|
56
|
+
this.sendHeartbeat('periodic');
|
|
33
57
|
this.scheduleNextHeartbeat();
|
|
34
58
|
}, this.currentInterval);
|
|
35
59
|
if (this.config.debug) {
|
|
@@ -39,7 +63,7 @@ export class HeartbeatManager {
|
|
|
39
63
|
/**
|
|
40
64
|
* Send heartbeat event
|
|
41
65
|
*/
|
|
42
|
-
sendHeartbeat() {
|
|
66
|
+
sendHeartbeat(heartbeatType = 'periodic') {
|
|
43
67
|
if (this.isDestroyed)
|
|
44
68
|
return;
|
|
45
69
|
const now = Date.now();
|
|
@@ -48,6 +72,7 @@ export class HeartbeatManager {
|
|
|
48
72
|
// Base properties (always included)
|
|
49
73
|
const properties = {
|
|
50
74
|
type: 'heartbeat',
|
|
75
|
+
heartbeat_type: heartbeatType,
|
|
51
76
|
status: isActive ? 'active' : 'inactive',
|
|
52
77
|
timestamp: now,
|
|
53
78
|
};
|
|
@@ -57,10 +82,13 @@ export class HeartbeatManager {
|
|
|
57
82
|
if (page) {
|
|
58
83
|
properties.page = page;
|
|
59
84
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
// Only include duration and event count for periodic heartbeats
|
|
86
|
+
if (heartbeatType === 'periodic') {
|
|
87
|
+
properties.duration = now - this.lastHeartbeatTime;
|
|
88
|
+
properties.event_count = this.tracker.getEventCountSinceLastHeartbeat();
|
|
89
|
+
// Reset event count
|
|
90
|
+
this.tracker.resetEventCountSinceLastHeartbeat();
|
|
91
|
+
}
|
|
64
92
|
}
|
|
65
93
|
// Track the heartbeat event
|
|
66
94
|
this.tracker.trackSystemEvent('_grain_heartbeat', properties);
|
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":"AAAA;;;GAGG;AAEH,OAAO,EAAkB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAyD,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhG,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACtC;AAGD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AAGpF,MAAM,WAAW,oBAAqB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA8B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAqBD,qBAAa,cAAe,YAAW,gBAAgB,EAAE,WAAW;IAClE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,sBAAsB,CAAsB;IACpD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,yBAAyB,CAAuB;IAExD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,kBAAkB,CAA8C;IAExE,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,4BAA4B,CAAa;gBAErC,MAAM,EAAE,WAAW;IAqE/B,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAI/B;;;OAGG;IACH,OAAO,CAAC,mCAAmC;IAwC3C;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAyBlC,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwDnB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA2BhB;;OAEG;YACW,WAAW;IAczB,OAAO,CAAC,WAAW;YAQL,cAAc;YAsBd,KAAK;IAInB,OAAO,CAAC,gBAAgB;YAmBV,UAAU;YAgEV,oBAAoB;IAoClC,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,iBAAiB;IA0CzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAmCnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA+B9E;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAO/B;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,+BAA+B,IAAI,MAAM;IAIzC;;OAEG;IACH,iCAAiC,IAAI,IAAI;IAIzC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAKtB;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACzG,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoEzE;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgBnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO9B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAyBtC;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAIlC;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IA4ClC;;;;;;;;;OASG;IACH,MAAM,IAAI,IAAI;IAwCd;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDnG;;OAEG;YACW,cAAc;IAgE5B;;OAEG;IACG,UAAU,CAAC,UAAU,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9F;;OAEG;IACG,WAAW,CAAC,UAAU,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAShG;;OAEG;IACG,aAAa,CAAC,UAAU,CAAC,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IASpG;;OAEG;IACG,aAAa,CAAC,UAAU,CAAC,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IASpG;;OAEG;IACG,aAAa,CAAC,UAAU,CAAC,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IASpG;;OAEG;IACG,WAAW,CAAC,UAAU,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAShG;;OAEG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAStG;;OAEG;IACG,mBAAmB,CAAC,UAAU,CAAC,EAAE,6BAA6B,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAShH;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAc1C;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUvC;;OAEG;IACG,WAAW,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA8F1F;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA4BjG;;OAEG;IACG,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAuB5F;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAI7D;;OAEG;IACH,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAOhE;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAUnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACG,aAAa,CAAC,aAAa,GAAE,MAAM,EAAO,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrG;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;;OAGG;IACH,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAUzC;;;OAGG;IACH,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAc1C;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;;OAGG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI/D;;OAEG;IACH,OAAO,IAAI,IAAI;CAoDhB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAExE;AAGD,eAAe,cAAc,CAAC;AAG9B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,KAAK,CAAC,EAAE;YACN,cAAc,EAAE,OAAO,cAAc,CAAC;YACtC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;SACnD,CAAC;KACH;CACF"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|