@grainql/analytics-web 1.3.0 → 1.4.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 +84 -0
- package/dist/cjs/index.d.ts +15 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.dev.js +84 -3
- 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 +91 -2
- package/dist/index.mjs +91 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -63,6 +63,38 @@ grain.setUserId('user123');
|
|
|
63
63
|
grain.track('page_view', { page: '/dashboard' });
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
### User Properties
|
|
67
|
+
|
|
68
|
+
Set user properties that can be used for analytics and segmentation:
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// Set properties for the current user
|
|
72
|
+
await grain.setProperty({
|
|
73
|
+
plan: 'premium',
|
|
74
|
+
status: 'active',
|
|
75
|
+
signupDate: '2024-01-15',
|
|
76
|
+
source: 'web'
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Set properties for a specific user
|
|
80
|
+
await grain.setProperty({
|
|
81
|
+
plan: 'free',
|
|
82
|
+
lastLogin: new Date().toISOString()
|
|
83
|
+
}, { userId: 'user123' });
|
|
84
|
+
|
|
85
|
+
// Properties are automatically serialized to strings
|
|
86
|
+
await grain.setProperty({
|
|
87
|
+
isActive: true, // Becomes "true"
|
|
88
|
+
count: 42, // Becomes "42"
|
|
89
|
+
metadata: { // Becomes JSON string
|
|
90
|
+
source: 'api',
|
|
91
|
+
version: '2.0'
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Note:** You can set up to 4 properties per request, and all values are automatically converted to strings.
|
|
97
|
+
|
|
66
98
|
### Server-Side Authentication
|
|
67
99
|
|
|
68
100
|
```typescript
|
|
@@ -248,6 +280,28 @@ Alias for `setUserId()` - sets user ID for subsequent events:
|
|
|
248
280
|
grain.identify('user123');
|
|
249
281
|
```
|
|
250
282
|
|
|
283
|
+
#### `setProperty(properties, options?)`
|
|
284
|
+
|
|
285
|
+
Set user properties for analytics and segmentation:
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// Set properties for current user
|
|
289
|
+
await grain.setProperty({
|
|
290
|
+
plan: 'premium',
|
|
291
|
+
status: 'active',
|
|
292
|
+
signupDate: '2024-01-15'
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
// Set properties for specific user
|
|
296
|
+
await grain.setProperty({
|
|
297
|
+
plan: 'free'
|
|
298
|
+
}, { userId: 'user123' });
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Parameters:**
|
|
302
|
+
- `properties`: Object with up to 4 key-value pairs
|
|
303
|
+
- `options.userId`: Optional user ID override
|
|
304
|
+
|
|
251
305
|
#### `flush()`
|
|
252
306
|
|
|
253
307
|
Manually flush all queued events:
|
|
@@ -411,6 +465,36 @@ await grain.trackPageView({ page: '/dashboard' });
|
|
|
411
465
|
grain.setUserId(null);
|
|
412
466
|
```
|
|
413
467
|
|
|
468
|
+
## Changelog
|
|
469
|
+
|
|
470
|
+
### [1.4.0] - 2024-12-19
|
|
471
|
+
|
|
472
|
+
#### Added
|
|
473
|
+
- **User Properties API**: New `setProperty()` method for setting user properties
|
|
474
|
+
- Set up to 4 properties per request
|
|
475
|
+
- Automatic string serialization for all values
|
|
476
|
+
- Support for user-specific property overrides
|
|
477
|
+
- Full authentication support (NONE, SERVER_SIDE, JWT)
|
|
478
|
+
- **Updated API Endpoints**:
|
|
479
|
+
- Events now use `/v1/events/{tenant}/multi` endpoint
|
|
480
|
+
- Properties use `/v1/events/{tenant}/properties` endpoint
|
|
481
|
+
|
|
482
|
+
#### Changed
|
|
483
|
+
- Updated all event sending to use the new `/multi` endpoint
|
|
484
|
+
- Enhanced error handling and retry logic for properties API
|
|
485
|
+
|
|
486
|
+
#### Technical
|
|
487
|
+
- Added comprehensive test coverage for properties functionality
|
|
488
|
+
- Updated all existing tests to use new endpoint structure
|
|
489
|
+
- Improved TypeScript interfaces for better type safety
|
|
490
|
+
|
|
491
|
+
### [1.3.0] - Previous Release
|
|
492
|
+
|
|
493
|
+
- Template events for common analytics scenarios
|
|
494
|
+
- Enhanced user ID management
|
|
495
|
+
- Improved error handling and retry logic
|
|
496
|
+
- Cross-platform compatibility improvements
|
|
497
|
+
|
|
414
498
|
## License
|
|
415
499
|
|
|
416
500
|
MIT
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -34,6 +34,13 @@ export interface GrainConfig {
|
|
|
34
34
|
export interface SendEventOptions {
|
|
35
35
|
flush?: boolean;
|
|
36
36
|
}
|
|
37
|
+
export interface SetPropertyOptions {
|
|
38
|
+
userId?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PropertyPayload {
|
|
41
|
+
userId: string;
|
|
42
|
+
[key: string]: string;
|
|
43
|
+
}
|
|
37
44
|
export interface LoginEventProperties extends Record<string, unknown> {
|
|
38
45
|
method?: string;
|
|
39
46
|
success?: boolean;
|
|
@@ -152,6 +159,14 @@ export declare class GrainAnalytics {
|
|
|
152
159
|
* Get current global user ID
|
|
153
160
|
*/
|
|
154
161
|
getUserId(): string | null;
|
|
162
|
+
/**
|
|
163
|
+
* Set user properties
|
|
164
|
+
*/
|
|
165
|
+
setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Send properties to the API
|
|
168
|
+
*/
|
|
169
|
+
private sendProperties;
|
|
155
170
|
/**
|
|
156
171
|
* Track user login event
|
|
157
172
|
*/
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -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/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA2rBH,oDAEC;AAtiBD,MAAa,cAAc;IAOzB,YAAY,MAAmB;QALvB,eAAU,GAAmB,EAAE,CAAC;QAChC,eAAU,GAAkB,IAAI,CAAC;QACjC,gBAAW,GAAG,KAAK,CAAC;QACpB,iBAAY,GAAkB,IAAI,CAAC;QAGzC,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,yBAAyB;YACjC,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,IAAI,EAAE,YAAY;YACjC,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,IAAI,EAAE,WAAW;YAC7B,mBAAmB,EAAE,GAAG,EAAE,iCAAiC;YAC3D,KAAK,EAAE,KAAK;YACZ,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QAEF,0CAA0C;QAC1C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,GAAG,IAAe;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW;YACxD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;SACnC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACjC,KAAK,MAAM;gBACT,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5D,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;oBACxD,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;gBAC/C,CAAC;gBACD,MAAM;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,EAAU;QAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,gBAAgB,CAAC,KAAc;QACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,6CAA6C;YAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClD,IAAI,OAAO,KAAK,eAAe;gBAAE,OAAO,IAAI,CAAC,CAAC,2CAA2C;YACzF,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,OAAO,IAAI,CAAC;QAClD,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACrE,MAAM,MAAM,GAAI,KAA4B,CAAC,MAAM,CAAC;YACpD,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,iCAAiC;QAC3E,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,MAAsB;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,IAAI,SAAkB,CAAC;QAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAEhG,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE/E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAChC,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;iBACjC,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,IAAI,YAAY,GAAG,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC7C,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;4BACvB,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;wBACnC,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,EAAE,CAAC;4BACd,YAAY,GAAG,SAAS,CAAC;wBAC3B,CAAC;oBACH,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAgC,CAAC;oBACjG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;gBACtD,OAAO,CAAC,2BAA2B;YAErC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,CAAC;gBAElB,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC1C,4BAA4B;oBAC5B,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,mCAAmC;oBACnC,MAAM;gBACR,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB;gBACrF,IAAI,CAAC,GAAG,CAAC,eAAe,OAAO,iBAAiB,EAAE,KAAK,CAAC,CAAC;gBACzD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,MAAsB;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAEhG,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAExC,uDAAuD;YACvD,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBAClE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAEhD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,oBAAoB,CAAC,CAAC;oBACjE,OAAO;gBACT,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,KAAK,CAAC,GAAG,EAAE;gBACf,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,+BAA+B,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC3B,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAEO,iBAAiB;QACvB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,0DAA0D;gBAC1D,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAE/E,gEAAgE;gBAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC9C,oCAAoC;oBACtC,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,qBAAqB;QACrB,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAC5D,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAExD,yCAAyC;QACzC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACjD,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAE/E,gEAAgE;gBAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC9C,gBAAgB;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAOD,KAAK,CAAC,KAAK,CACT,WAAgC,EAChC,mBAAgE,EAChE,OAA0B;QAE1B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,KAAiB,CAAC;QACtB,IAAI,IAAI,GAAqB,EAAE,CAAC;QAEhC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,KAAK,GAAG;gBACN,SAAS,EAAE,WAAW;gBACtB,UAAU,EAAE,mBAA8C;aAC3D,CAAC;YACF,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,WAAW,CAAC;YACpB,IAAI,GAAG,mBAAuC,IAAI,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErC,IAAI,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/D,uCAAuC;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAClE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAqB;QAC7B,IAAI,CAAC,GAAG,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAmC,EAAE,OAA4B;QACjF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC;QAEnE,6CAA6C;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,kCAAkC;QAClC,MAAM,oBAAoB,GAA2B,EAAE,CAAC;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACjC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,oBAAoB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAoB;YAC/B,MAAM;YACN,GAAG,oBAAoB;SACxB,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,OAAwB;QACnD,IAAI,SAAkB,CAAC;QAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAErG,IAAI,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,MAAM,aAAa,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEnF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAChC,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,IAAI,YAAY,GAAG,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC7C,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;4BACvB,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;wBACnC,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,EAAE,CAAC;4BACd,YAAY,GAAG,SAAS,CAAC;wBAC3B,CAAC;oBACH,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAgC,CAAC;oBACpG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,wCAAwC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnE,OAAO,CAAC,2BAA2B;YAErC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,CAAC;gBAElB,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC1C,4BAA4B;oBAC5B,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,mCAAmC;oBACnC,MAAM;gBACR,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB;gBACrF,IAAI,CAAC,GAAG,CAAC,eAAe,OAAO,iBAAiB,EAAE,KAAK,CAAC,CAAC;gBACzD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,+DAA+D,EAAE,SAAS,CAAC,CAAC;QAC1F,MAAM,SAAS,CAAC;IAClB,CAAC;IAED,yBAAyB;IAEzB;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,UAAiC,EAAE,OAA0B;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkC,EAAE,OAA0B;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAoC,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAoC,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAoC,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkC,EAAE,OAA0B;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,UAAqC,EAAE,OAA0B;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,UAA0C,EAAE,OAA0B;QAC9F,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEzC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,gEAAgE;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE/E,iDAAiD;QACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAsB,EAAE,SAAiB;QAC3D,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAE/E,gEAAgE;YAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC9C,+BAA+B;gBACjC,CAAC,CAAC,CAAC;gBAEH,gEAAgE;gBAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC9C,+BAA+B;oBACjC,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA/hBD,wCA+hBC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAAmB;IACtD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,iCAAiC;AACjC,kBAAe,cAAc,CAAC;AAY9B,4BAA4B;AAC5B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,KAAK,GAAG;QACb,cAAc;QACd,oBAAoB;KACrB,CAAC;AACJ,CAAC"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -34,6 +34,13 @@ export interface GrainConfig {
|
|
|
34
34
|
export interface SendEventOptions {
|
|
35
35
|
flush?: boolean;
|
|
36
36
|
}
|
|
37
|
+
export interface SetPropertyOptions {
|
|
38
|
+
userId?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PropertyPayload {
|
|
41
|
+
userId: string;
|
|
42
|
+
[key: string]: string;
|
|
43
|
+
}
|
|
37
44
|
export interface LoginEventProperties extends Record<string, unknown> {
|
|
38
45
|
method?: string;
|
|
39
46
|
success?: boolean;
|
|
@@ -152,6 +159,14 @@ export declare class GrainAnalytics {
|
|
|
152
159
|
* Get current global user ID
|
|
153
160
|
*/
|
|
154
161
|
getUserId(): string | null;
|
|
162
|
+
/**
|
|
163
|
+
* Set user properties
|
|
164
|
+
*/
|
|
165
|
+
setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Send properties to the API
|
|
168
|
+
*/
|
|
169
|
+
private sendProperties;
|
|
155
170
|
/**
|
|
156
171
|
* Track user login event
|
|
157
172
|
*/
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -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/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8IH,MAAM,OAAO,cAAc;IAOzB,YAAY,MAAmB;QALvB,eAAU,GAAmB,EAAE,CAAC;QAChC,eAAU,GAAkB,IAAI,CAAC;QACjC,gBAAW,GAAG,KAAK,CAAC;QACpB,iBAAY,GAAkB,IAAI,CAAC;QAGzC,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,yBAAyB;YACjC,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,IAAI,EAAE,YAAY;YACjC,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,IAAI,EAAE,WAAW;YAC7B,mBAAmB,EAAE,GAAG,EAAE,iCAAiC;YAC3D,KAAK,EAAE,KAAK;YACZ,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QAEF,0CAA0C;QAC1C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,GAAG,IAAe;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW;YACxD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;SACnC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACjC,KAAK,MAAM;gBACT,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5D,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;oBACxD,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;gBAC/C,CAAC;gBACD,MAAM;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,EAAU;QAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,gBAAgB,CAAC,KAAc;QACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,6CAA6C;YAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClD,IAAI,OAAO,KAAK,eAAe;gBAAE,OAAO,IAAI,CAAC,CAAC,2CAA2C;YACzF,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,OAAO,IAAI,CAAC;QAClD,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACrE,MAAM,MAAM,GAAI,KAA4B,CAAC,MAAM,CAAC;YACpD,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,iCAAiC;QAC3E,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,MAAsB;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,IAAI,SAAkB,CAAC;QAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAE1F,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE/E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAChC,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;iBACjC,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,IAAI,YAAY,GAAG,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC7C,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;4BACvB,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;wBACnC,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,EAAE,CAAC;4BACd,YAAY,GAAG,SAAS,CAAC;wBAC3B,CAAC;oBACH,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAgC,CAAC;oBACjG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;gBACtD,OAAO,CAAC,2BAA2B;YAErC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,CAAC;gBAElB,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC1C,4BAA4B;oBAC5B,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,mCAAmC;oBACnC,MAAM;gBACR,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,sBAAsB;gBACrF,IAAI,CAAC,GAAG,CAAC,eAAe,OAAO,iBAAiB,EAAE,KAAK,CAAC,CAAC;gBACzD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,MAAsB;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAE1F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAExC,uDAAuD;YACvD,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBAClE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAEhD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,oBAAoB,CAAC,CAAC;oBACjE,OAAO;gBACT,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,KAAK,CAAC,GAAG,EAAE;gBACf,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,+BAA+B,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC3B,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAEO,iBAAiB;QACvB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,0DAA0D;gBAC1D,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAE/E,gEAAgE;gBAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC9C,oCAAoC;oBACtC,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,qBAAqB;QACrB,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAC5D,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAExD,yCAAyC;QACzC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACjD,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAE/E,gEAAgE;gBAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC9C,gBAAgB;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAOD,KAAK,CAAC,KAAK,CACT,WAAgC,EAChC,mBAAgE,EAChE,OAA0B;QAE1B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,KAAiB,CAAC;QACtB,IAAI,IAAI,GAAqB,EAAE,CAAC;QAEhC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,KAAK,GAAG;gBACN,SAAS,EAAE,WAAW;gBACtB,UAAU,EAAE,mBAA8C;aAC3D,CAAC;YACF,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,WAAW,CAAC;YACpB,IAAI,GAAG,mBAAuC,IAAI,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErC,IAAI,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/D,uCAAuC;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAClE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAqB;QAC7B,IAAI,CAAC,GAAG,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,yBAAyB;IAEzB;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,UAAiC,EAAE,OAA0B;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkC,EAAE,OAA0B;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAoC,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAoC,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAoC,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkC,EAAE,OAA0B;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,UAAqC,EAAE,OAA0B;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,UAA0C,EAAE,OAA0B;QAC9F,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEzC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,gEAAgE;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE/E,iDAAiD;QACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAsB,EAAE,SAAiB;QAC3D,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAE/E,gEAAgE;YAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC9C,+BAA+B;gBACjC,CAAC,CAAC,CAAC;gBAEH,gEAAgE;gBAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC9C,+BAA+B;oBACjC,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,iCAAiC;AACjC,eAAe,cAAc,CAAC;AAY9B,4BAA4B;AAC5B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,KAAK,GAAG;QACb,cAAc;QACd,oBAAoB;KACrB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,13 @@ export interface GrainConfig {
|
|
|
34
34
|
export interface SendEventOptions {
|
|
35
35
|
flush?: boolean;
|
|
36
36
|
}
|
|
37
|
+
export interface SetPropertyOptions {
|
|
38
|
+
userId?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PropertyPayload {
|
|
41
|
+
userId: string;
|
|
42
|
+
[key: string]: string;
|
|
43
|
+
}
|
|
37
44
|
export interface LoginEventProperties extends Record<string, unknown> {
|
|
38
45
|
method?: string;
|
|
39
46
|
success?: boolean;
|
|
@@ -152,6 +159,14 @@ export declare class GrainAnalytics {
|
|
|
152
159
|
* Get current global user ID
|
|
153
160
|
*/
|
|
154
161
|
getUserId(): string | null;
|
|
162
|
+
/**
|
|
163
|
+
* Set user properties
|
|
164
|
+
*/
|
|
165
|
+
setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Send properties to the API
|
|
168
|
+
*/
|
|
169
|
+
private sendProperties;
|
|
155
170
|
/**
|
|
156
171
|
* Track user login event
|
|
157
172
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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/index.global.dev.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* Grain Analytics Web SDK v1.
|
|
1
|
+
/* Grain Analytics Web SDK v1.4.0 | MIT License | Development Build */
|
|
2
2
|
"use strict";
|
|
3
3
|
var Grain = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -124,7 +124,7 @@ var Grain = (() => {
|
|
|
124
124
|
for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
|
|
125
125
|
try {
|
|
126
126
|
const headers = await this.getAuthHeaders();
|
|
127
|
-
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;
|
|
127
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;
|
|
128
128
|
this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);
|
|
129
129
|
const response = await fetch(url, {
|
|
130
130
|
method: "POST",
|
|
@@ -171,7 +171,7 @@ var Grain = (() => {
|
|
|
171
171
|
return;
|
|
172
172
|
try {
|
|
173
173
|
const headers = await this.getAuthHeaders();
|
|
174
|
-
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;
|
|
174
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;
|
|
175
175
|
const body = JSON.stringify({ events });
|
|
176
176
|
if (typeof navigator !== "undefined" && "sendBeacon" in navigator) {
|
|
177
177
|
const blob = new Blob([body], { type: "application/json" });
|
|
@@ -275,6 +275,87 @@ var Grain = (() => {
|
|
|
275
275
|
getUserId() {
|
|
276
276
|
return this.globalUserId;
|
|
277
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Set user properties
|
|
280
|
+
*/
|
|
281
|
+
async setProperty(properties, options) {
|
|
282
|
+
if (this.isDestroyed) {
|
|
283
|
+
throw new Error("Grain Analytics: Client has been destroyed");
|
|
284
|
+
}
|
|
285
|
+
const userId = options?.userId || this.globalUserId || "anonymous";
|
|
286
|
+
const propertyKeys = Object.keys(properties);
|
|
287
|
+
if (propertyKeys.length > 4) {
|
|
288
|
+
throw new Error("Grain Analytics: Maximum 4 properties allowed per request");
|
|
289
|
+
}
|
|
290
|
+
if (propertyKeys.length === 0) {
|
|
291
|
+
throw new Error("Grain Analytics: At least one property is required");
|
|
292
|
+
}
|
|
293
|
+
const serializedProperties = {};
|
|
294
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
295
|
+
if (value === null || value === void 0) {
|
|
296
|
+
serializedProperties[key] = "";
|
|
297
|
+
} else if (typeof value === "string") {
|
|
298
|
+
serializedProperties[key] = value;
|
|
299
|
+
} else {
|
|
300
|
+
serializedProperties[key] = JSON.stringify(value);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
const payload = {
|
|
304
|
+
userId,
|
|
305
|
+
...serializedProperties
|
|
306
|
+
};
|
|
307
|
+
await this.sendProperties(payload);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Send properties to the API
|
|
311
|
+
*/
|
|
312
|
+
async sendProperties(payload) {
|
|
313
|
+
let lastError;
|
|
314
|
+
for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
|
|
315
|
+
try {
|
|
316
|
+
const headers = await this.getAuthHeaders();
|
|
317
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;
|
|
318
|
+
this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);
|
|
319
|
+
const response = await fetch(url, {
|
|
320
|
+
method: "POST",
|
|
321
|
+
headers,
|
|
322
|
+
body: JSON.stringify(payload)
|
|
323
|
+
});
|
|
324
|
+
if (!response.ok) {
|
|
325
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
326
|
+
try {
|
|
327
|
+
const errorBody = await response.json();
|
|
328
|
+
if (errorBody?.message) {
|
|
329
|
+
errorMessage = errorBody.message;
|
|
330
|
+
}
|
|
331
|
+
} catch {
|
|
332
|
+
const errorText = await response.text();
|
|
333
|
+
if (errorText) {
|
|
334
|
+
errorMessage = errorText;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
const error = new Error(`Failed to set properties: ${errorMessage}`);
|
|
338
|
+
error.status = response.status;
|
|
339
|
+
throw error;
|
|
340
|
+
}
|
|
341
|
+
this.log(`Successfully set properties for user ${payload.userId}`);
|
|
342
|
+
return;
|
|
343
|
+
} catch (error) {
|
|
344
|
+
lastError = error;
|
|
345
|
+
if (attempt === this.config.retryAttempts) {
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
if (!this.isRetriableError(error)) {
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
const delayMs = this.config.retryDelay * Math.pow(2, attempt);
|
|
352
|
+
this.log(`Retrying in ${delayMs}ms after error:`, error);
|
|
353
|
+
await this.delay(delayMs);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
console.error("[Grain Analytics] Failed to set properties after all retries:", lastError);
|
|
357
|
+
throw lastError;
|
|
358
|
+
}
|
|
278
359
|
// Template event methods
|
|
279
360
|
/**
|
|
280
361
|
* Track user login event
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.setupBeforeUnload();\n this.startFlushTimer();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.globalUserId || 'anonymous',\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ events }),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry\n break;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry\n break;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n console.error('[Grain Analytics] Failed to send events after all retries:', lastError);\n throw lastError;\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n console.error('[Grain Analytics] Failed to send events via beacon:', error);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n console.error('[Grain Analytics] Auto-flush failed:', error);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n if (this.isDestroyed) {\n throw new Error('Grain Analytics: Client has been destroyed');\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('login', properties, options);\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('signup', properties, options);\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('checkout', properties, options);\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('page_view', properties, options);\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('purchase', properties, options);\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('search', properties, options);\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('add_to_cart', properties, options);\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('remove_from_cart', properties, options);\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\nexport interface SetPropertyOptions {\n userId?: string; // Override global userId\n}\n\nexport interface PropertyPayload {\n userId: string;\n [key: string]: string; // All property values must be strings\n}\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.setupBeforeUnload();\n this.startFlushTimer();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.globalUserId || 'anonymous',\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ events }),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry\n break;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry\n break;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n console.error('[Grain Analytics] Failed to send events after all retries:', lastError);\n throw lastError;\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n console.error('[Grain Analytics] Failed to send events via beacon:', error);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n console.error('[Grain Analytics] Auto-flush failed:', error);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n if (this.isDestroyed) {\n throw new Error('Grain Analytics: Client has been destroyed');\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n /**\n * Set user properties\n */\n async setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void> {\n if (this.isDestroyed) {\n throw new Error('Grain Analytics: Client has been destroyed');\n }\n\n const userId = options?.userId || this.globalUserId || 'anonymous';\n \n // Validate property count (max 4 properties)\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 4) {\n throw new Error('Grain Analytics: Maximum 4 properties allowed per request');\n }\n\n if (propertyKeys.length === 0) {\n throw new Error('Grain Analytics: At least one property is required');\n }\n\n // Serialize all values to strings\n const serializedProperties: Record<string, string> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (value === null || value === undefined) {\n serializedProperties[key] = '';\n } else if (typeof value === 'string') {\n serializedProperties[key] = value;\n } else {\n serializedProperties[key] = JSON.stringify(value);\n }\n }\n\n const payload: PropertyPayload = {\n userId,\n ...serializedProperties,\n };\n\n await this.sendProperties(payload);\n }\n\n /**\n * Send properties to the API\n */\n private async sendProperties(payload: PropertyPayload): Promise<void> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;\n\n this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to set properties: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully set properties for user ${payload.userId}`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry\n break;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry\n break;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n console.error('[Grain Analytics] Failed to set properties after all retries:', lastError);\n throw lastError;\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('login', properties, options);\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('signup', properties, options);\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('checkout', properties, options);\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('page_view', properties, options);\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('purchase', properties, options);\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('search', properties, options);\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('add_to_cart', properties, options);\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('remove_from_cart', properties, options);\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/index.global.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/* Grain Analytics Web SDK v1.
|
|
2
|
-
"use strict";var Grain=(()=>{var
|
|
1
|
+
/* Grain Analytics Web SDK v1.4.0 | MIT License */
|
|
2
|
+
"use strict";var Grain=(()=>{var h=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var f=(u,e)=>{for(var t in e)h(u,t,{get:e[t],enumerable:!0})},y=(u,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of v(e))!p.call(u,n)&&n!==t&&h(u,n,{get:()=>e[n],enumerable:!(r=g(e,n))||r.enumerable});return u};var m=u=>y(h({},"__esModule",{value:!0}),u);var w={};f(w,{GrainAnalytics:()=>d,createGrainAnalytics:()=>l,default:()=>E});var d=class{constructor(e){this.eventQueue=[];this.flushTimer=null;this.isDestroyed=!1;this.globalUserId=null;this.config={apiUrl:"https://api.grainql.com",authStrategy:"NONE",batchSize:50,flushInterval:5e3,retryAttempts:3,retryDelay:1e3,maxEventsPerRequest:160,debug:!1,...e,tenantId:e.tenantId},e.userId&&(this.globalUserId=e.userId),this.validateConfig(),this.setupBeforeUnload(),this.startFlushTimer()}validateConfig(){if(!this.config.tenantId)throw new Error("Grain Analytics: tenantId is required");if(this.config.authStrategy==="SERVER_SIDE"&&!this.config.secretKey)throw new Error("Grain Analytics: secretKey is required for SERVER_SIDE auth strategy");if(this.config.authStrategy==="JWT"&&!this.config.authProvider)throw new Error("Grain Analytics: authProvider is required for JWT auth strategy")}log(...e){this.config.debug&&console.log("[Grain Analytics]",...e)}formatEvent(e){return{eventName:e.eventName,userId:e.userId||this.globalUserId||"anonymous",properties:e.properties||{}}}async getAuthHeaders(){let e={"Content-Type":"application/json"};switch(this.config.authStrategy){case"NONE":break;case"SERVER_SIDE":e.Authorization=`Chase ${this.config.secretKey}`;break;case"JWT":if(this.config.authProvider){let t=await this.config.authProvider.getToken();e.Authorization=`Bearer ${t}`}break}return e}async delay(e){return new Promise(t=>setTimeout(t,e))}isRetriableError(e){if(e instanceof Error){let t=e.message.toLowerCase();if(t.includes("fetch failed")||t==="network error"||t.includes("timeout")||t.includes("connection"))return!0}if(typeof e=="object"&&e!==null&&"status"in e){let t=e.status;return t>=500||t===429}return!1}async sendEvents(e){if(e.length===0)return;let t;for(let r=0;r<=this.config.retryAttempts;r++)try{let n=await this.getAuthHeaders(),s=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;this.log(`Sending ${e.length} events to ${s} (attempt ${r+1})`);let i=await fetch(s,{method:"POST",headers:n,body:JSON.stringify({events:e})});if(!i.ok){let o=`HTTP ${i.status}`;try{let c=await i.json();c?.message&&(o=c.message)}catch{let c=await i.text();c&&(o=c)}let a=new Error(`Failed to send events: ${o}`);throw a.status=i.status,a}this.log(`Successfully sent ${e.length} events`);return}catch(n){if(t=n,r===this.config.retryAttempts||!this.isRetriableError(n))break;let s=this.config.retryDelay*Math.pow(2,r);this.log(`Retrying in ${s}ms after error:`,n),await this.delay(s)}throw console.error("[Grain Analytics] Failed to send events after all retries:",t),t}async sendEventsWithBeacon(e){if(e.length!==0)try{let t=await this.getAuthHeaders(),r=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`,n=JSON.stringify({events:e});if(typeof navigator<"u"&&"sendBeacon"in navigator){let s=new Blob([n],{type:"application/json"});if(navigator.sendBeacon(r,s)){this.log(`Successfully sent ${e.length} events via beacon`);return}}await fetch(r,{method:"POST",headers:t,body:n,keepalive:!0}),this.log(`Successfully sent ${e.length} events via fetch (keepalive)`)}catch(t){console.error("[Grain Analytics] Failed to send events via beacon:",t)}}startFlushTimer(){this.flushTimer&&clearInterval(this.flushTimer),this.flushTimer=window.setInterval(()=>{this.eventQueue.length>0&&this.flush().catch(e=>{console.error("[Grain Analytics] Auto-flush failed:",e)})},this.config.flushInterval)}setupBeforeUnload(){if(typeof window>"u")return;let e=()=>{if(this.eventQueue.length>0){let t=[...this.eventQueue];this.eventQueue=[];let r=this.chunkEvents(t,this.config.maxEventsPerRequest);r.length>0&&this.sendEventsWithBeacon(r[0]).catch(()=>{})}};window.addEventListener("beforeunload",e),window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"&&this.eventQueue.length>0){let t=[...this.eventQueue];this.eventQueue=[];let r=this.chunkEvents(t,this.config.maxEventsPerRequest);r.length>0&&this.sendEventsWithBeacon(r[0]).catch(()=>{})}})}async track(e,t,r){if(this.isDestroyed)throw new Error("Grain Analytics: Client has been destroyed");let n,s={};typeof e=="string"?(n={eventName:e,properties:t},s=r||{}):(n=e,s=t||{});let i=this.formatEvent(n);this.eventQueue.push(i),this.log(`Queued event: ${n.eventName}`,n.properties),(s.flush||this.eventQueue.length>=this.config.batchSize)&&await this.flush()}identify(e){this.log(`Identified user: ${e}`),this.globalUserId=e}setUserId(e){this.log(`Set global user ID: ${e}`),this.globalUserId=e}getUserId(){return this.globalUserId}async setProperty(e,t){if(this.isDestroyed)throw new Error("Grain Analytics: Client has been destroyed");let r=t?.userId||this.globalUserId||"anonymous",n=Object.keys(e);if(n.length>4)throw new Error("Grain Analytics: Maximum 4 properties allowed per request");if(n.length===0)throw new Error("Grain Analytics: At least one property is required");let s={};for(let[o,a]of Object.entries(e))a==null?s[o]="":typeof a=="string"?s[o]=a:s[o]=JSON.stringify(a);let i={userId:r,...s};await this.sendProperties(i)}async sendProperties(e){let t;for(let r=0;r<=this.config.retryAttempts;r++)try{let n=await this.getAuthHeaders(),s=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;this.log(`Setting properties for user ${e.userId} (attempt ${r+1})`);let i=await fetch(s,{method:"POST",headers:n,body:JSON.stringify(e)});if(!i.ok){let o=`HTTP ${i.status}`;try{let c=await i.json();c?.message&&(o=c.message)}catch{let c=await i.text();c&&(o=c)}let a=new Error(`Failed to set properties: ${o}`);throw a.status=i.status,a}this.log(`Successfully set properties for user ${e.userId}`);return}catch(n){if(t=n,r===this.config.retryAttempts||!this.isRetriableError(n))break;let s=this.config.retryDelay*Math.pow(2,r);this.log(`Retrying in ${s}ms after error:`,n),await this.delay(s)}throw console.error("[Grain Analytics] Failed to set properties after all retries:",t),t}async trackLogin(e,t){return this.track("login",e,t)}async trackSignup(e,t){return this.track("signup",e,t)}async trackCheckout(e,t){return this.track("checkout",e,t)}async trackPageView(e,t){return this.track("page_view",e,t)}async trackPurchase(e,t){return this.track("purchase",e,t)}async trackSearch(e,t){return this.track("search",e,t)}async trackAddToCart(e,t){return this.track("add_to_cart",e,t)}async trackRemoveFromCart(e,t){return this.track("remove_from_cart",e,t)}async flush(){if(this.eventQueue.length===0)return;let e=[...this.eventQueue];this.eventQueue=[];let t=this.chunkEvents(e,this.config.maxEventsPerRequest);for(let r of t)await this.sendEvents(r)}chunkEvents(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}destroy(){if(this.isDestroyed=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.eventQueue.length>0){let e=[...this.eventQueue];this.eventQueue=[];let t=this.chunkEvents(e,this.config.maxEventsPerRequest);if(t.length>0){this.sendEventsWithBeacon(t[0]).catch(()=>{});for(let r=1;r<t.length;r++)this.sendEventsWithBeacon(t[r]).catch(()=>{})}}}};function l(u){return new d(u)}var E=d;typeof window<"u"&&(window.Grain={GrainAnalytics:d,createGrainAnalytics:l});return m(w);})();
|
|
3
3
|
//# sourceMappingURL=index.global.js.map
|
package/dist/index.global.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.setupBeforeUnload();\n this.startFlushTimer();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.globalUserId || 'anonymous',\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ events }),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry\n break;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry\n break;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n console.error('[Grain Analytics] Failed to send events after all retries:', lastError);\n throw lastError;\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n console.error('[Grain Analytics] Failed to send events via beacon:', error);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n console.error('[Grain Analytics] Auto-flush failed:', error);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n if (this.isDestroyed) {\n throw new Error('Grain Analytics: Client has been destroyed');\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('login', properties, options);\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('signup', properties, options);\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('checkout', properties, options);\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('page_view', properties, options);\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('purchase', properties, options);\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('search', properties, options);\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('add_to_cart', properties, options);\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('remove_from_cart', properties, options);\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
|
|
5
|
-
"mappings": ";ybAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,yBAAAC,EAAA,YAAAC,
|
|
6
|
-
"names": ["src_exports", "__export", "GrainAnalytics", "createGrainAnalytics", "src_default", "config", "args", "event", "headers", "token", "ms", "resolve", "error", "message", "status", "events", "lastError", "attempt", "url", "response", "errorMessage", "errorBody", "errorText", "delayMs", "body", "blob", "handleBeforeUnload", "eventsToSend", "chunks", "eventOrName", "propertiesOrOptions", "options", "opts", "formattedEvent", "userId", "properties", "chunk", "chunkSize", "i"]
|
|
4
|
+
"sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\nexport interface SetPropertyOptions {\n userId?: string; // Override global userId\n}\n\nexport interface PropertyPayload {\n userId: string;\n [key: string]: string; // All property values must be strings\n}\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.setupBeforeUnload();\n this.startFlushTimer();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.globalUserId || 'anonymous',\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ events }),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry\n break;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry\n break;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n console.error('[Grain Analytics] Failed to send events after all retries:', lastError);\n throw lastError;\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n console.error('[Grain Analytics] Failed to send events via beacon:', error);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n console.error('[Grain Analytics] Auto-flush failed:', error);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n if (this.isDestroyed) {\n throw new Error('Grain Analytics: Client has been destroyed');\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n /**\n * Set user properties\n */\n async setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void> {\n if (this.isDestroyed) {\n throw new Error('Grain Analytics: Client has been destroyed');\n }\n\n const userId = options?.userId || this.globalUserId || 'anonymous';\n \n // Validate property count (max 4 properties)\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 4) {\n throw new Error('Grain Analytics: Maximum 4 properties allowed per request');\n }\n\n if (propertyKeys.length === 0) {\n throw new Error('Grain Analytics: At least one property is required');\n }\n\n // Serialize all values to strings\n const serializedProperties: Record<string, string> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (value === null || value === undefined) {\n serializedProperties[key] = '';\n } else if (typeof value === 'string') {\n serializedProperties[key] = value;\n } else {\n serializedProperties[key] = JSON.stringify(value);\n }\n }\n\n const payload: PropertyPayload = {\n userId,\n ...serializedProperties,\n };\n\n await this.sendProperties(payload);\n }\n\n /**\n * Send properties to the API\n */\n private async sendProperties(payload: PropertyPayload): Promise<void> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;\n\n this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to set properties: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully set properties for user ${payload.userId}`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry\n break;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry\n break;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n console.error('[Grain Analytics] Failed to set properties after all retries:', lastError);\n throw lastError;\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('login', properties, options);\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('signup', properties, options);\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('checkout', properties, options);\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('page_view', properties, options);\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('purchase', properties, options);\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('search', properties, options);\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('add_to_cart', properties, options);\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n return this.track('remove_from_cart', properties, options);\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["src_exports", "__export", "GrainAnalytics", "createGrainAnalytics", "src_default", "config", "args", "event", "headers", "token", "ms", "resolve", "error", "message", "status", "events", "lastError", "attempt", "url", "response", "errorMessage", "errorBody", "errorText", "delayMs", "body", "blob", "handleBeforeUnload", "eventsToSend", "chunks", "eventOrName", "propertiesOrOptions", "options", "opts", "formattedEvent", "userId", "properties", "propertyKeys", "serializedProperties", "key", "value", "payload", "chunk", "chunkSize", "i"]
|
|
7
7
|
}
|
package/dist/index.js
CHANGED
|
@@ -104,7 +104,7 @@ class GrainAnalytics {
|
|
|
104
104
|
for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
|
|
105
105
|
try {
|
|
106
106
|
const headers = await this.getAuthHeaders();
|
|
107
|
-
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;
|
|
107
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;
|
|
108
108
|
this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);
|
|
109
109
|
const response = await fetch(url, {
|
|
110
110
|
method: 'POST',
|
|
@@ -155,7 +155,7 @@ class GrainAnalytics {
|
|
|
155
155
|
return;
|
|
156
156
|
try {
|
|
157
157
|
const headers = await this.getAuthHeaders();
|
|
158
|
-
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;
|
|
158
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;
|
|
159
159
|
const body = JSON.stringify({ events });
|
|
160
160
|
// Try beacon API first (more reliable for page unload)
|
|
161
161
|
if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {
|
|
@@ -271,6 +271,95 @@ class GrainAnalytics {
|
|
|
271
271
|
getUserId() {
|
|
272
272
|
return this.globalUserId;
|
|
273
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Set user properties
|
|
276
|
+
*/
|
|
277
|
+
async setProperty(properties, options) {
|
|
278
|
+
if (this.isDestroyed) {
|
|
279
|
+
throw new Error('Grain Analytics: Client has been destroyed');
|
|
280
|
+
}
|
|
281
|
+
const userId = options?.userId || this.globalUserId || 'anonymous';
|
|
282
|
+
// Validate property count (max 4 properties)
|
|
283
|
+
const propertyKeys = Object.keys(properties);
|
|
284
|
+
if (propertyKeys.length > 4) {
|
|
285
|
+
throw new Error('Grain Analytics: Maximum 4 properties allowed per request');
|
|
286
|
+
}
|
|
287
|
+
if (propertyKeys.length === 0) {
|
|
288
|
+
throw new Error('Grain Analytics: At least one property is required');
|
|
289
|
+
}
|
|
290
|
+
// Serialize all values to strings
|
|
291
|
+
const serializedProperties = {};
|
|
292
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
293
|
+
if (value === null || value === undefined) {
|
|
294
|
+
serializedProperties[key] = '';
|
|
295
|
+
}
|
|
296
|
+
else if (typeof value === 'string') {
|
|
297
|
+
serializedProperties[key] = value;
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
serializedProperties[key] = JSON.stringify(value);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
const payload = {
|
|
304
|
+
userId,
|
|
305
|
+
...serializedProperties,
|
|
306
|
+
};
|
|
307
|
+
await this.sendProperties(payload);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Send properties to the API
|
|
311
|
+
*/
|
|
312
|
+
async sendProperties(payload) {
|
|
313
|
+
let lastError;
|
|
314
|
+
for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
|
|
315
|
+
try {
|
|
316
|
+
const headers = await this.getAuthHeaders();
|
|
317
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;
|
|
318
|
+
this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);
|
|
319
|
+
const response = await fetch(url, {
|
|
320
|
+
method: 'POST',
|
|
321
|
+
headers,
|
|
322
|
+
body: JSON.stringify(payload),
|
|
323
|
+
});
|
|
324
|
+
if (!response.ok) {
|
|
325
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
326
|
+
try {
|
|
327
|
+
const errorBody = await response.json();
|
|
328
|
+
if (errorBody?.message) {
|
|
329
|
+
errorMessage = errorBody.message;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
const errorText = await response.text();
|
|
334
|
+
if (errorText) {
|
|
335
|
+
errorMessage = errorText;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const error = new Error(`Failed to set properties: ${errorMessage}`);
|
|
339
|
+
error.status = response.status;
|
|
340
|
+
throw error;
|
|
341
|
+
}
|
|
342
|
+
this.log(`Successfully set properties for user ${payload.userId}`);
|
|
343
|
+
return; // Success, exit retry loop
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
lastError = error;
|
|
347
|
+
if (attempt === this.config.retryAttempts) {
|
|
348
|
+
// Last attempt, don't retry
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
if (!this.isRetriableError(error)) {
|
|
352
|
+
// Non-retriable error, don't retry
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff
|
|
356
|
+
this.log(`Retrying in ${delayMs}ms after error:`, error);
|
|
357
|
+
await this.delay(delayMs);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
console.error('[Grain Analytics] Failed to set properties after all retries:', lastError);
|
|
361
|
+
throw lastError;
|
|
362
|
+
}
|
|
274
363
|
// Template event methods
|
|
275
364
|
/**
|
|
276
365
|
* Track user login event
|
package/dist/index.mjs
CHANGED
|
@@ -100,7 +100,7 @@ export class GrainAnalytics {
|
|
|
100
100
|
for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
|
|
101
101
|
try {
|
|
102
102
|
const headers = await this.getAuthHeaders();
|
|
103
|
-
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;
|
|
103
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;
|
|
104
104
|
this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);
|
|
105
105
|
const response = await fetch(url, {
|
|
106
106
|
method: 'POST',
|
|
@@ -151,7 +151,7 @@ export class GrainAnalytics {
|
|
|
151
151
|
return;
|
|
152
152
|
try {
|
|
153
153
|
const headers = await this.getAuthHeaders();
|
|
154
|
-
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}`;
|
|
154
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;
|
|
155
155
|
const body = JSON.stringify({ events });
|
|
156
156
|
// Try beacon API first (more reliable for page unload)
|
|
157
157
|
if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {
|
|
@@ -267,6 +267,95 @@ export class GrainAnalytics {
|
|
|
267
267
|
getUserId() {
|
|
268
268
|
return this.globalUserId;
|
|
269
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Set user properties
|
|
272
|
+
*/
|
|
273
|
+
async setProperty(properties, options) {
|
|
274
|
+
if (this.isDestroyed) {
|
|
275
|
+
throw new Error('Grain Analytics: Client has been destroyed');
|
|
276
|
+
}
|
|
277
|
+
const userId = options?.userId || this.globalUserId || 'anonymous';
|
|
278
|
+
// Validate property count (max 4 properties)
|
|
279
|
+
const propertyKeys = Object.keys(properties);
|
|
280
|
+
if (propertyKeys.length > 4) {
|
|
281
|
+
throw new Error('Grain Analytics: Maximum 4 properties allowed per request');
|
|
282
|
+
}
|
|
283
|
+
if (propertyKeys.length === 0) {
|
|
284
|
+
throw new Error('Grain Analytics: At least one property is required');
|
|
285
|
+
}
|
|
286
|
+
// Serialize all values to strings
|
|
287
|
+
const serializedProperties = {};
|
|
288
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
289
|
+
if (value === null || value === undefined) {
|
|
290
|
+
serializedProperties[key] = '';
|
|
291
|
+
}
|
|
292
|
+
else if (typeof value === 'string') {
|
|
293
|
+
serializedProperties[key] = value;
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
serializedProperties[key] = JSON.stringify(value);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const payload = {
|
|
300
|
+
userId,
|
|
301
|
+
...serializedProperties,
|
|
302
|
+
};
|
|
303
|
+
await this.sendProperties(payload);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Send properties to the API
|
|
307
|
+
*/
|
|
308
|
+
async sendProperties(payload) {
|
|
309
|
+
let lastError;
|
|
310
|
+
for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
|
|
311
|
+
try {
|
|
312
|
+
const headers = await this.getAuthHeaders();
|
|
313
|
+
const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;
|
|
314
|
+
this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);
|
|
315
|
+
const response = await fetch(url, {
|
|
316
|
+
method: 'POST',
|
|
317
|
+
headers,
|
|
318
|
+
body: JSON.stringify(payload),
|
|
319
|
+
});
|
|
320
|
+
if (!response.ok) {
|
|
321
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
322
|
+
try {
|
|
323
|
+
const errorBody = await response.json();
|
|
324
|
+
if (errorBody?.message) {
|
|
325
|
+
errorMessage = errorBody.message;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
const errorText = await response.text();
|
|
330
|
+
if (errorText) {
|
|
331
|
+
errorMessage = errorText;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
const error = new Error(`Failed to set properties: ${errorMessage}`);
|
|
335
|
+
error.status = response.status;
|
|
336
|
+
throw error;
|
|
337
|
+
}
|
|
338
|
+
this.log(`Successfully set properties for user ${payload.userId}`);
|
|
339
|
+
return; // Success, exit retry loop
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
lastError = error;
|
|
343
|
+
if (attempt === this.config.retryAttempts) {
|
|
344
|
+
// Last attempt, don't retry
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
if (!this.isRetriableError(error)) {
|
|
348
|
+
// Non-retriable error, don't retry
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff
|
|
352
|
+
this.log(`Retrying in ${delayMs}ms after error:`, error);
|
|
353
|
+
await this.delay(delayMs);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
console.error('[Grain Analytics] Failed to set properties after all retries:', lastError);
|
|
357
|
+
throw lastError;
|
|
358
|
+
}
|
|
270
359
|
// Template event methods
|
|
271
360
|
/**
|
|
272
361
|
* Track user login event
|