@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.
Files changed (50) hide show
  1. package/README.md +47 -0
  2. package/dist/cjs/consent.d.ts +4 -0
  3. package/dist/cjs/consent.d.ts.map +1 -1
  4. package/dist/cjs/consent.js +5 -0
  5. package/dist/cjs/consent.js.map +1 -1
  6. package/dist/cjs/heartbeat.d.ts +5 -0
  7. package/dist/cjs/heartbeat.d.ts.map +1 -1
  8. package/dist/cjs/heartbeat.js +35 -7
  9. package/dist/cjs/heartbeat.js.map +1 -1
  10. package/dist/cjs/index.d.ts +20 -0
  11. package/dist/cjs/index.d.ts.map +1 -1
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/consent.d.ts +4 -0
  14. package/dist/consent.d.ts.map +1 -1
  15. package/dist/consent.js +5 -0
  16. package/dist/esm/consent.d.ts +4 -0
  17. package/dist/esm/consent.d.ts.map +1 -1
  18. package/dist/esm/consent.js +5 -0
  19. package/dist/esm/consent.js.map +1 -1
  20. package/dist/esm/heartbeat.d.ts +5 -0
  21. package/dist/esm/heartbeat.d.ts.map +1 -1
  22. package/dist/esm/heartbeat.js +35 -7
  23. package/dist/esm/heartbeat.js.map +1 -1
  24. package/dist/esm/index.d.ts +20 -0
  25. package/dist/esm/index.d.ts.map +1 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/heartbeat.d.ts +5 -0
  28. package/dist/heartbeat.d.ts.map +1 -1
  29. package/dist/heartbeat.js +35 -7
  30. package/dist/index.d.ts +20 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.global.dev.js +78 -23
  33. package/dist/index.global.dev.js.map +2 -2
  34. package/dist/index.global.js +2 -2
  35. package/dist/index.global.js.map +3 -3
  36. package/dist/index.js +53 -23
  37. package/dist/index.mjs +53 -23
  38. package/dist/react/consent.d.ts +4 -0
  39. package/dist/react/consent.d.ts.map +1 -1
  40. package/dist/react/consent.js +5 -0
  41. package/dist/react/consent.mjs +5 -0
  42. package/dist/react/heartbeat.d.ts +5 -0
  43. package/dist/react/heartbeat.d.ts.map +1 -1
  44. package/dist/react/heartbeat.js +35 -7
  45. package/dist/react/heartbeat.mjs +35 -7
  46. package/dist/react/index.d.ts +20 -0
  47. package/dist/react/index.d.ts.map +1 -1
  48. package/dist/react/index.js +53 -23
  49. package/dist/react/index.mjs +53 -23
  50. 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
- if (typeof window !== 'undefined') {
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
- // Track consent granted event with mapping
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 a UUIDv4 identifier
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
- if (typeof window !== 'undefined') {
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
- if (typeof window !== 'undefined') {
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
- // Track consent granted event with mapping
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 a UUIDv4 identifier
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
- if (typeof window !== 'undefined') {
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
  }
@@ -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;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;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"}
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"}
@@ -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);
@@ -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;gBAG9B,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,eAAe;IAYzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAqCrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAchB"}
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"}
@@ -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
- // Start heartbeat tracking
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
- properties.duration = now - this.lastHeartbeatTime;
64
- properties.event_count = this.tracker.getEventCountSinceLastHeartbeat();
65
- // Reset event count
66
- this.tracker.resetEventCountSinceLastHeartbeat();
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);
@@ -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
- // Start heartbeat tracking
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
- properties.duration = now - this.lastHeartbeatTime;
61
- properties.event_count = this.tracker.getEventCountSinceLastHeartbeat();
62
- // Reset event count
63
- this.tracker.resetEventCountSinceLastHeartbeat();
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);
@@ -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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"}