@tracetail/angular 2.3.10 โ 2.3.12
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
CHANGED
|
@@ -102,19 +102,19 @@ Automatically add visitor ID to all API requests:
|
|
|
102
102
|
// Adds X-TraceTail-Visitor-ID header to requests
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
### ๐
|
|
105
|
+
### ๐ Sending app events
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
`@tracetail/angular` does **not** implement a hosted event-tracking API. Instead, collect a fingerprint and send the identifiers you need to your own backend:
|
|
108
108
|
|
|
109
109
|
```typescript
|
|
110
110
|
async onLogin(credentials: any) {
|
|
111
|
-
const
|
|
111
|
+
const fp = await this.traceTail.getFingerprint();
|
|
112
|
+
|
|
113
|
+
await this.http.post('/api/events/login', {
|
|
114
|
+
visitorId: fp.visitorId,
|
|
115
|
+
requestId: (fp as any).requestId,
|
|
112
116
|
username: credentials.username
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
if (result.fraudulent) {
|
|
116
|
-
// Handle fraud
|
|
117
|
-
}
|
|
117
|
+
}).toPromise();
|
|
118
118
|
}
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -126,7 +126,7 @@ async onLogin(credentials: any) {
|
|
|
126
126
|
- `loading$: Observable<boolean>` - Loading state
|
|
127
127
|
- `error$: Observable<Error>` - Error state
|
|
128
128
|
- `getFingerprint(): Promise<Fingerprint>` - Get fingerprint as promise
|
|
129
|
-
- `trackEvent(event, data?): Promise<TrackingResult>` -
|
|
129
|
+
- `trackEvent(event, data?): Promise<TrackingResult>` - Throws a descriptive error because event ingestion must be implemented in your own backend or analytics pipeline
|
|
130
130
|
- `checkFraud(data): Promise<FraudResult>` - Check fraud risk
|
|
131
131
|
- `retry(): void` - Retry fingerprinting
|
|
132
132
|
- `refresh(): Promise<void>` - Force refresh
|
|
@@ -198,9 +198,13 @@ export class PersonalizationService {
|
|
|
198
198
|
|
|
199
199
|
- ๐ [Documentation](https://docs.tracetail.com/angular)
|
|
200
200
|
- ๐ฌ [Discord Community](https://discord.gg/tracetail)
|
|
201
|
-
- ๐ง [Email Support](mailto:support@tracetail.
|
|
201
|
+
- ๐ง [Email Support](mailto:support@tracetail.io)
|
|
202
202
|
- ๐ [Issue Tracker](https://github.com/tracetail/tracetail/issues)
|
|
203
203
|
|
|
204
204
|
## License
|
|
205
205
|
|
|
206
|
+
MIT - see [LICENSE](LICENSE) for details.com/tracetail/tracetail/issues)
|
|
207
|
+
|
|
208
|
+
## License
|
|
209
|
+
|
|
206
210
|
MIT - see [LICENSE](LICENSE) for details.
|
package/dist/README.md
CHANGED
|
@@ -102,19 +102,19 @@ Automatically add visitor ID to all API requests:
|
|
|
102
102
|
// Adds X-TraceTail-Visitor-ID header to requests
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
### ๐
|
|
105
|
+
### ๐ Sending app events
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
`@tracetail/angular` does **not** implement a hosted event-tracking API. Instead, collect a fingerprint and send the identifiers you need to your own backend:
|
|
108
108
|
|
|
109
109
|
```typescript
|
|
110
110
|
async onLogin(credentials: any) {
|
|
111
|
-
const
|
|
111
|
+
const fp = await this.traceTail.getFingerprint();
|
|
112
|
+
|
|
113
|
+
await this.http.post('/api/events/login', {
|
|
114
|
+
visitorId: fp.visitorId,
|
|
115
|
+
requestId: (fp as any).requestId,
|
|
112
116
|
username: credentials.username
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
if (result.fraudulent) {
|
|
116
|
-
// Handle fraud
|
|
117
|
-
}
|
|
117
|
+
}).toPromise();
|
|
118
118
|
}
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -126,7 +126,7 @@ async onLogin(credentials: any) {
|
|
|
126
126
|
- `loading$: Observable<boolean>` - Loading state
|
|
127
127
|
- `error$: Observable<Error>` - Error state
|
|
128
128
|
- `getFingerprint(): Promise<Fingerprint>` - Get fingerprint as promise
|
|
129
|
-
- `trackEvent(event, data?): Promise<TrackingResult>` -
|
|
129
|
+
- `trackEvent(event, data?): Promise<TrackingResult>` - Throws a descriptive error because event ingestion must be implemented in your own backend or analytics pipeline
|
|
130
130
|
- `checkFraud(data): Promise<FraudResult>` - Check fraud risk
|
|
131
131
|
- `retry(): void` - Retry fingerprinting
|
|
132
132
|
- `refresh(): Promise<void>` - Force refresh
|
|
@@ -198,9 +198,13 @@ export class PersonalizationService {
|
|
|
198
198
|
|
|
199
199
|
- ๐ [Documentation](https://docs.tracetail.com/angular)
|
|
200
200
|
- ๐ฌ [Discord Community](https://discord.gg/tracetail)
|
|
201
|
-
- ๐ง [Email Support](mailto:support@tracetail.
|
|
201
|
+
- ๐ง [Email Support](mailto:support@tracetail.io)
|
|
202
202
|
- ๐ [Issue Tracker](https://github.com/tracetail/tracetail/issues)
|
|
203
203
|
|
|
204
204
|
## License
|
|
205
205
|
|
|
206
|
+
MIT - see [LICENSE](LICENSE) for details.com/tracetail/tracetail/issues)
|
|
207
|
+
|
|
208
|
+
## License
|
|
209
|
+
|
|
206
210
|
MIT - see [LICENSE](LICENSE) for details.
|
|
@@ -100,21 +100,8 @@ export class TraceTailService {
|
|
|
100
100
|
* Track an event
|
|
101
101
|
*/
|
|
102
102
|
async trackEvent(event, data) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// For now, just return mock data with a generated event ID
|
|
106
|
-
const eventId = `evt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
107
|
-
return {
|
|
108
|
-
success: true,
|
|
109
|
-
fraudulent: false,
|
|
110
|
-
riskScore: 0,
|
|
111
|
-
eventId: eventId
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
console.error('Track event error:', error);
|
|
116
|
-
throw error;
|
|
117
|
-
}
|
|
103
|
+
console.warn('[TraceTail] trackEvent() was called with:', { event, data });
|
|
104
|
+
throw new Error('[TraceTail] Event tracking is not implemented in @tracetail/angular. Use getFingerprint() to collect visitorId/requestId, then send your event to your own backend or analytics pipeline.');
|
|
118
105
|
}
|
|
119
106
|
/**
|
|
120
107
|
* Check for fraud
|
|
@@ -179,4 +166,4 @@ i0.ษตษตngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
179
166
|
type: Inject,
|
|
180
167
|
args: [TRACETAIL_CONFIG]
|
|
181
168
|
}] }] });
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYWNldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sU0FBUyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFXdEQsTUFBTSxPQUFPLGdCQUFnQjtJQVVtQjtJQVR0QyxNQUFNLENBQVk7SUFDbEIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQ25FLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7SUFFL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxQyxZQUE4QyxNQUF1QjtRQUF2QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUk7WUFDRixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29C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Z0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFXYyxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBUcmFjZVRhaWwgZnJvbSAnQHRyYWNldGFpbC9qcyc7XG5pbXBvcnQgeyBUUkFDRVRBSUxfQ09ORklHIH0gZnJvbSAnLi90cmFjZXRhaWwuY29uZmlnJztcbmltcG9ydCB7IFxuICBUcmFjZVRhaWxDb25maWcsIFxuICBGaW5nZXJwcmludCwgXG4gIFRyYWNraW5nUmVzdWx0LCBcbiAgRnJhdWRSZXN1bHQgXG59IGZyb20gJy4vdHJhY2V0YWlsLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhY2VUYWlsU2VydmljZSB7XG4gIHByaXZhdGUgY2xpZW50OiBUcmFjZVRhaWw7XG4gIHByaXZhdGUgZmluZ2VycHJpbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaW5nZXJwcmludCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBlcnJvclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVycm9yIHwgbnVsbD4obnVsbCk7XG5cbiAgZmluZ2VycHJpbnQkID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgZXJyb3IkID0gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChUUkFDRVRBSUxfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVHJhY2VUYWlsQ29uZmlnKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ2xpZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDbGllbnQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEhhbmRsZSB0ZXN0IG1vZGVcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb25maWc/LnRlc3RNb2RlICYmIHRoaXMuY29uZmlnLmNvbmZpZy5tb2NrRGF0YSkge1xuICAgICAgICB0aGlzLmZpbmdlcnByaW50U3ViamVjdC5uZXh0KHtcbiAgICAgICAgICB2aXNpdG9ySWQ6ICdtb2NrLXZpc2l0b3ItMTIzJyxcbiAgICAgICAgICBjb25maWRlbmNlOiAwLjk5LFxuICAgICAgICAgIHJpc2tTY29yZTogMC4xLFxuICAgICAgICAgIGZyYXVkdWxlbnQ6IGZhbHNlLFxuICAgICAgICAgIHNpZ25hbHM6IHt9LFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZy5jb25maWcubW9ja0RhdGFcbiAgICAgICAgfSBhcyBGaW5nZXJwcmludCk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSByZWFsIGNsaWVudFxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgVHJhY2VUYWlsKHtcbiAgICAgICAgYXBpS2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLmNvbmZpZz8udGltZW91dCxcbiAgICAgICAgZGVidWc6IHRoaXMuY29uZmlnLmNvbmZpZz8uZGVidWcgfHwgZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgaW5pdGlhbCBmaW5nZXJwcmludFxuICAgICAgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmluZ2VycHJpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgIC8vIFVzZSB2ZXJib3NlOiB0cnVlIHRvIGdldCBjb21wb25lbnRzIGluIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2VuZXJhdGVGaW5nZXJwcmludCh7IHZlcmJvc2U6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGZpbmdlcnByaW50OiBGaW5nZXJwcmludCA9IHtcbiAgICAgICAgdmlzaXRvcklkOiByZXN1bHQudmlzaXRvcklkLFxuICAgICAgICBjb25maWRlbmNlOiByZXN1bHQuY29uZmlkZW5jZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLCAgLy8gRGVmYXVsdCB2YWx1ZSAtIG5vdCBpbiBiYXNlIFNES1xuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSwgIC8vIERlZmF1bHQgdmFsdWUgLSBub3QgaW4gYmFzZSBTREtcbiAgICAgICAgc2lnbmFsczogcmVzdWx0LmNvbXBvbmVudHMgfHwge30sXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgcHJvY2Vzc2luZ1RpbWU6IHJlc3VsdC5wcm9jZXNzaW5nVGltZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dChmaW5nZXJwcmludCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RyYWNlVGFpbCBlcnJvcjonLCBlcnJvcik7XG4gICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmaW5nZXJwcmludCBhcyBhIHByb21pc2VcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlcnByaW50KCk6IFByb21pc2U8RmluZ2VycHJpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QudmFsdWU7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIC8vIFdhaXQgZm9yIGZpbmdlcnByaW50IHRvIGJlIGxvYWRlZFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZpbmdlcnByaW50JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmluZ2VycHJpbnQpID0+IHtcbiAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShmaW5nZXJwcmludCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgYW4gZXZlbnRcbiAgICovXG4gIGFzeW5jIHRyYWNrRXZlbnQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8VHJhY2tpbmdSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVHJhY2VUYWlsIGRvZXNuJ3QgaGF2ZSBhIHRyYWNrIG1ldGhvZCAtIHRoaXMgaXMgY3VzdG9tIGFwcCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBGb3Igbm93LCBqdXN0IHJldHVybiBtb2NrIGRhdGEgd2l0aCBhIGdlbmVyYXRlZCBldmVudCBJRFxuICAgICAgY29uc3QgZXZlbnRJZCA9IGBldnRfJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLFxuICAgICAgICBldmVudElkOiBldmVudElkXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUcmFjayBldmVudCBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIGZyYXVkXG4gICAqL1xuICBhc3luYyBjaGVja0ZyYXVkKGRhdGE6IGFueSk6IFByb21pc2U8RnJhdWRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluZ2VycHJpbnQgPSBhd2FpdCB0aGlzLmdldEZpbmdlcnByaW50KCk7XG4gICAgICBcbiAgICAgIC8vIFNpbXBsZSBmcmF1ZCBkZXRlY3Rpb24gbG9naWMgYmFzZWQgb24gcmlzayBzY29yZVxuICAgICAgY29uc3QgYmxvY2sgPSBmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjg7XG4gICAgICBjb25zdCBjaGFsbGVuZ2UgPSBmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjUgJiYgZmluZ2VycHJpbnQucmlza1Njb3JlIDw9IDAuODtcbiAgICAgIGNvbnN0IGFsbG93ID0gZmluZ2VycHJpbnQucmlza1Njb3JlIDw9IDAuNTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVhc29uczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHNpZ25hbHMgPSBmaW5nZXJwcmludC5zaWduYWxzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgaWYgKHNpZ25hbHM/LnZwbikgcmVhc29ucy5wdXNoKCdWUE4gZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChzaWduYWxzPy50b3IpIHJlYXNvbnMucHVzaCgnVG9yIGJyb3dzZXIgZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChzaWduYWxzPy5wcm94eSkgcmVhc29ucy5wdXNoKCdQcm94eSBkZXRlY3RlZCcpO1xuICAgICAgaWYgKGZpbmdlcnByaW50LnJpc2tTY29yZSA+IDAuNykgcmVhc29ucy5wdXNoKCdIaWdoIHJpc2sgc2NvcmUnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIGNoYWxsZW5nZSxcbiAgICAgICAgYWxsb3csXG4gICAgICAgIHJpc2tTY29yZTogZmluZ2VycHJpbnQucmlza1Njb3JlLFxuICAgICAgICByZWFzb25zXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGcmF1ZCBjaGVjayBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cnkgZmluZ2VycHJpbnRpbmdcbiAgICovXG4gIHJldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEZpbmdlcnByaW50KCk7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgcmVmcmVzaCBmaW5nZXJwcmludFxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByYXcgVHJhY2VUYWlsIGNsaWVudCBpbnN0YW5jZVxuICAgKi9cbiAgZ2V0Q2xpZW50KCk6IFRyYWNlVGFpbCB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50O1xuICB9XG59Il19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYWNldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sU0FBUyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFXdEQsTUFBTSxPQUFPLGdCQUFnQjtJQVVtQjtJQVR0QyxNQUFNLENBQVk7SUFDbEIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQ25FLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7SUFFL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxQyxZQUE4QyxNQUF1QjtRQUF2QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUk7WUFDRixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29C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QUFDLENBQUM7WUFDdkQsSUFBSSxPQUFPLEVBQUUsS0FBSztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkQsSUFBSSxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUc7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRWpFLE9BQU87Z0JBQ0wsS0FBSztnQkFDTCxTQUFTO2dCQUNULEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO2dCQUNoQyxPQUFPO2FBQ1IsQ0FBQztTQUNIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO3dHQXBLVSxnQkFBZ0Isa0JBVVAsZ0JBQWdCOzRHQVZ6QixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFXYyxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBUcmFjZVRhaWwgZnJvbSAnQHRyYWNldGFpbC9qcyc7XG5pbXBvcnQgeyBUUkFDRVRBSUxfQ09ORklHIH0gZnJvbSAnLi90cmFjZXRhaWwuY29uZmlnJztcbmltcG9ydCB7IFxuICBUcmFjZVRhaWxDb25maWcsIFxuICBGaW5nZXJwcmludCwgXG4gIFRyYWNraW5nUmVzdWx0LCBcbiAgRnJhdWRSZXN1bHQgXG59IGZyb20gJy4vdHJhY2V0YWlsLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhY2VUYWlsU2VydmljZSB7XG4gIHByaXZhdGUgY2xpZW50OiBUcmFjZVRhaWw7XG4gIHByaXZhdGUgZmluZ2VycHJpbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaW5nZXJwcmludCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBlcnJvclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVycm9yIHwgbnVsbD4obnVsbCk7XG5cbiAgZmluZ2VycHJpbnQkID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgZXJyb3IkID0gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChUUkFDRVRBSUxfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVHJhY2VUYWlsQ29uZmlnKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ2xpZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDbGllbnQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEhhbmRsZSB0ZXN0IG1vZGVcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb25maWc/LnRlc3RNb2RlICYmIHRoaXMuY29uZmlnLmNvbmZpZy5tb2NrRGF0YSkge1xuICAgICAgICB0aGlzLmZpbmdlcnByaW50U3ViamVjdC5uZXh0KHtcbiAgICAgICAgICB2aXNpdG9ySWQ6ICdtb2NrLXZpc2l0b3ItMTIzJyxcbiAgICAgICAgICBjb25maWRlbmNlOiAwLjk5LFxuICAgICAgICAgIHJpc2tTY29yZTogMC4xLFxuICAgICAgICAgIGZyYXVkdWxlbnQ6IGZhbHNlLFxuICAgICAgICAgIHNpZ25hbHM6IHt9LFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZy5jb25maWcubW9ja0RhdGFcbiAgICAgICAgfSBhcyBGaW5nZXJwcmludCk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSByZWFsIGNsaWVudFxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgVHJhY2VUYWlsKHtcbiAgICAgICAgYXBpS2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLmNvbmZpZz8udGltZW91dCxcbiAgICAgICAgZGVidWc6IHRoaXMuY29uZmlnLmNvbmZpZz8uZGVidWcgfHwgZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgaW5pdGlhbCBmaW5nZXJwcmludFxuICAgICAgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmluZ2VycHJpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgIC8vIFVzZSB2ZXJib3NlOiB0cnVlIHRvIGdldCBjb21wb25lbnRzIGluIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2VuZXJhdGVGaW5nZXJwcmludCh7IHZlcmJvc2U6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGZpbmdlcnByaW50OiBGaW5nZXJwcmludCA9IHtcbiAgICAgICAgdmlzaXRvcklkOiByZXN1bHQudmlzaXRvcklkLFxuICAgICAgICBjb25maWRlbmNlOiByZXN1bHQuY29uZmlkZW5jZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLCAgLy8gRGVmYXVsdCB2YWx1ZSAtIG5vdCBpbiBiYXNlIFNES1xuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSwgIC8vIERlZmF1bHQgdmFsdWUgLSBub3QgaW4gYmFzZSBTREtcbiAgICAgICAgc2lnbmFsczogcmVzdWx0LmNvbXBvbmVudHMgfHwge30sXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgcHJvY2Vzc2luZ1RpbWU6IHJlc3VsdC5wcm9jZXNzaW5nVGltZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dChmaW5nZXJwcmludCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RyYWNlVGFpbCBlcnJvcjonLCBlcnJvcik7XG4gICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmaW5nZXJwcmludCBhcyBhIHByb21pc2VcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlcnByaW50KCk6IFByb21pc2U8RmluZ2VycHJpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QudmFsdWU7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIC8vIFdhaXQgZm9yIGZpbmdlcnByaW50IHRvIGJlIGxvYWRlZFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZpbmdlcnByaW50JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmluZ2VycHJpbnQpID0+IHtcbiAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShmaW5nZXJwcmludCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgYW4gZXZlbnRcbiAgICovXG4gIGFzeW5jIHRyYWNrRXZlbnQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8VHJhY2tpbmdSZXN1bHQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ1tUcmFjZVRhaWxdIHRyYWNrRXZlbnQoKSB3YXMgY2FsbGVkIHdpdGg6JywgeyBldmVudCwgZGF0YSB9KTtcblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdbVHJhY2VUYWlsXSBFdmVudCB0cmFja2luZyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gQHRyYWNldGFpbC9hbmd1bGFyLiBVc2UgZ2V0RmluZ2VycHJpbnQoKSB0byBjb2xsZWN0IHZpc2l0b3JJZC9yZXF1ZXN0SWQsIHRoZW4gc2VuZCB5b3VyIGV2ZW50IHRvIHlvdXIgb3duIGJhY2tlbmQgb3IgYW5hbHl0aWNzIHBpcGVsaW5lLidcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBmcmF1ZFxuICAgKi9cbiAgYXN5bmMgY2hlY2tGcmF1ZChkYXRhOiBhbnkpOiBQcm9taXNlPEZyYXVkUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmdlcnByaW50ID0gYXdhaXQgdGhpcy5nZXRGaW5nZXJwcmludCgpO1xuICAgICAgXG4gICAgICAvLyBTaW1wbGUgZnJhdWQgZGV0ZWN0aW9uIGxvZ2ljIGJhc2VkIG9uIHJpc2sgc2NvcmVcbiAgICAgIGNvbnN0IGJsb2NrID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC44O1xuICAgICAgY29uc3QgY2hhbGxlbmdlID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC41ICYmIGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjg7XG4gICAgICBjb25zdCBhbGxvdyA9IGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjU7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlYXNvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBzaWduYWxzID0gZmluZ2VycHJpbnQuc2lnbmFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGlmIChzaWduYWxzPy52cG4pIHJlYXNvbnMucHVzaCgnVlBOIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8udG9yKSByZWFzb25zLnB1c2goJ1RvciBicm93c2VyIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8ucHJveHkpIHJlYXNvbnMucHVzaCgnUHJveHkgZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjcpIHJlYXNvbnMucHVzaCgnSGlnaCByaXNrIHNjb3JlJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJsb2NrLFxuICAgICAgICBjaGFsbGVuZ2UsXG4gICAgICAgIGFsbG93LFxuICAgICAgICByaXNrU2NvcmU6IGZpbmdlcnByaW50LnJpc2tTY29yZSxcbiAgICAgICAgcmVhc29uc1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRnJhdWQgY2hlY2sgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJ5IGZpbmdlcnByaW50aW5nXG4gICAqL1xuICByZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHJlZnJlc2ggZmluZ2VycHJpbnRcbiAgICovXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmF3IFRyYWNlVGFpbCBjbGllbnQgaW5zdGFuY2VcbiAgICovXG4gIGdldENsaWVudCgpOiBUcmFjZVRhaWwge1xuICAgIHJldHVybiB0aGlzLmNsaWVudDtcbiAgfVxufSJdfQ==
|
|
@@ -114,21 +114,8 @@ class TraceTailService {
|
|
|
114
114
|
* Track an event
|
|
115
115
|
*/
|
|
116
116
|
async trackEvent(event, data) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
// For now, just return mock data with a generated event ID
|
|
120
|
-
const eventId = `evt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
121
|
-
return {
|
|
122
|
-
success: true,
|
|
123
|
-
fraudulent: false,
|
|
124
|
-
riskScore: 0,
|
|
125
|
-
eventId: eventId
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
console.error('Track event error:', error);
|
|
130
|
-
throw error;
|
|
131
|
-
}
|
|
117
|
+
console.warn('[TraceTail] trackEvent() was called with:', { event, data });
|
|
118
|
+
throw new Error('[TraceTail] Event tracking is not implemented in @tracetail/angular. Use getFingerprint() to collect visitorId/requestId, then send your event to your own backend or analytics pipeline.');
|
|
132
119
|
}
|
|
133
120
|
/**
|
|
134
121
|
* Check for fraud
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracetail-angular.mjs","sources":["../../src/lib/tracetail.config.ts","../../src/lib/tracetail.service.ts","../../src/lib/directives/fraud-detection.directive.ts","../../src/lib/interceptors/tracetail.interceptor.ts","../../src/lib/tracetail.module.ts","../../src/lib/tracetail.types.ts","../../src/lib/guards/fraud-protection.guard.ts","../../src/public-api.ts","../../src/tracetail-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TraceTailConfig } from './tracetail.types';\n\nexport const TRACETAIL_CONFIG = new InjectionToken<TraceTailConfig>('TRACETAIL_CONFIG');\n\nexport const DEFAULT_CONFIG: Partial<TraceTailConfig> = {\n config: {\n enhanced: true,\n timeout: 5000,\n endpoint: 'https://api.tracetail.com',\n testMode: false\n }\n};","import { Injectable, Inject } from '@angular/core';\nimport { BehaviorSubject, Observable, from, of } from 'rxjs';\nimport { catchError, shareReplay, tap } from 'rxjs/operators';\nimport TraceTail from '@tracetail/js';\nimport { TRACETAIL_CONFIG } from './tracetail.config';\nimport { \n TraceTailConfig, \n Fingerprint, \n TrackingResult, \n FraudResult \n} from './tracetail.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TraceTailService {\n private client: TraceTail;\n private fingerprintSubject = new BehaviorSubject<Fingerprint | null>(null);\n private loadingSubject = new BehaviorSubject<boolean>(true);\n private errorSubject = new BehaviorSubject<Error | null>(null);\n\n fingerprint$ = this.fingerprintSubject.asObservable();\n loading$ = this.loadingSubject.asObservable();\n error$ = this.errorSubject.asObservable();\n\n constructor(@Inject(TRACETAIL_CONFIG) private config: TraceTailConfig) {\n this.initializeClient();\n }\n\n private initializeClient(): void {\n try {\n // Handle test mode\n if (this.config.config?.testMode && this.config.config.mockData) {\n this.fingerprintSubject.next({\n visitorId: 'mock-visitor-123',\n confidence: 0.99,\n riskScore: 0.1,\n fraudulent: false,\n signals: {},\n timestamp: new Date(),\n ...this.config.config.mockData\n } as Fingerprint);\n this.loadingSubject.next(false);\n return;\n }\n\n // Initialize real client\n this.client = new TraceTail({\n apiKey: this.config.apiKey,\n timeout: this.config.config?.timeout,\n debug: this.config.config?.debug || false\n });\n\n // Get initial fingerprint\n this.loadFingerprint();\n } catch (error) {\n this.handleError(error as Error);\n }\n }\n\n private async loadFingerprint(): Promise<void> {\n try {\n this.loadingSubject.next(true);\n this.errorSubject.next(null);\n\n // Use verbose: true to get components in the response\n const result = await this.client.generateFingerprint({ verbose: true });\n\n const fingerprint: Fingerprint = {\n visitorId: result.visitorId,\n confidence: result.confidence,\n riskScore: 0, // Default value - not in base SDK\n fraudulent: false, // Default value - not in base SDK\n signals: result.components || {},\n timestamp: new Date(),\n processingTime: result.processingTime\n };\n\n this.fingerprintSubject.next(fingerprint);\n this.loadingSubject.next(false);\n } catch (error) {\n this.handleError(error as Error);\n }\n }\n\n private handleError(error: Error): void {\n console.error('TraceTail error:', error);\n this.errorSubject.next(error);\n this.loadingSubject.next(false);\n }\n\n /**\n * Get current fingerprint as a promise\n */\n async getFingerprint(): Promise<Fingerprint> {\n const current = this.fingerprintSubject.value;\n if (current) {\n return current;\n }\n\n // Wait for fingerprint to be loaded\n return new Promise((resolve, reject) => {\n const subscription = this.fingerprint$.subscribe({\n next: (fingerprint) => {\n if (fingerprint) {\n subscription.unsubscribe();\n resolve(fingerprint);\n }\n },\n error: (error) => {\n subscription.unsubscribe();\n reject(error);\n }\n });\n });\n }\n\n /**\n * Track an event\n */\n async trackEvent(event: string, data?: any): Promise<TrackingResult> {\n try {\n // TraceTail doesn't have a track method - this is custom app functionality\n // For now, just return mock data with a generated event ID\n const eventId = `evt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n \n return {\n success: true,\n fraudulent: false,\n riskScore: 0,\n eventId: eventId\n };\n } catch (error) {\n console.error('Track event error:', error);\n throw error;\n }\n }\n\n /**\n * Check for fraud\n */\n async checkFraud(data: any): Promise<FraudResult> {\n try {\n const fingerprint = await this.getFingerprint();\n \n // Simple fraud detection logic based on risk score\n const block = fingerprint.riskScore > 0.8;\n const challenge = fingerprint.riskScore > 0.5 && fingerprint.riskScore <= 0.8;\n const allow = fingerprint.riskScore <= 0.5;\n \n const reasons: string[] = [];\n const signals = fingerprint.signals as Record<string, unknown>;\n if (signals?.vpn) reasons.push('VPN detected');\n if (signals?.tor) reasons.push('Tor browser detected');\n if (signals?.proxy) reasons.push('Proxy detected');\n if (fingerprint.riskScore > 0.7) reasons.push('High risk score');\n\n return {\n block,\n challenge,\n allow,\n riskScore: fingerprint.riskScore,\n reasons\n };\n } catch (error) {\n console.error('Fraud check error:', error);\n throw error;\n }\n }\n\n /**\n * Retry fingerprinting\n */\n retry(): void {\n this.loadFingerprint();\n }\n\n /**\n * Force refresh fingerprint\n */\n async refresh(): Promise<void> {\n await this.loadFingerprint();\n }\n\n /**\n * Get raw TraceTail client instance\n */\n getClient(): TraceTail {\n return this.client;\n }\n}","import { \n Directive, \n Input, \n ElementRef, \n OnInit, \n OnDestroy \n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TraceTailService } from '../tracetail.service';\n\n@Directive({\n selector: '[appFraudDetection]'\n})\nexport class FraudDetectionDirective implements OnInit, OnDestroy {\n @Input() appFraudDetection: 'low' | 'medium' | 'high' = 'medium';\n @Input() disableOnRisk = true;\n @Input() cssClass = 'high-risk';\n\n private subscription: Subscription | null = null;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private traceTail: TraceTailService\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.traceTail.fingerprint$.subscribe(fingerprint => {\n if (!fingerprint) return;\n\n const thresholds = {\n low: 0.3,\n medium: 0.5,\n high: 0.7\n };\n\n const threshold = thresholds[this.appFraudDetection];\n const isHighRisk = fingerprint.riskScore > threshold;\n\n // Apply or remove CSS class\n if (isHighRisk) {\n this.el.nativeElement.classList.add(this.cssClass);\n \n // Optionally disable the element\n if (this.disableOnRisk && this.isFormElement()) {\n this.el.nativeElement.setAttribute('disabled', 'true');\n this.el.nativeElement.setAttribute('title', 'High fraud risk detected');\n }\n } else {\n this.el.nativeElement.classList.remove(this.cssClass);\n \n if (this.disableOnRisk && this.isFormElement()) {\n this.el.nativeElement.removeAttribute('disabled');\n this.el.nativeElement.removeAttribute('title');\n }\n }\n\n // Emit custom event\n this.el.nativeElement.dispatchEvent(new CustomEvent('fraudStatusChange', {\n detail: {\n isHighRisk,\n riskScore: fingerprint.riskScore,\n threshold\n },\n bubbles: true\n }));\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private isFormElement(): boolean {\n const tagName = this.el.nativeElement.tagName.toLowerCase();\n return ['input', 'button', 'select', 'textarea', 'form'].includes(tagName);\n }\n}","import { Injectable } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\nimport { TraceTailService } from '../tracetail.service';\n\n@Injectable()\nexport class TraceTailInterceptor implements HttpInterceptor {\n constructor(private traceTail: TraceTailService) {}\n\n intercept(\n req: HttpRequest<any>, \n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n // Skip TraceTail API requests to prevent circular dependency\n if (req.url.includes('api.tracetail.com')) {\n return next.handle(req);\n }\n\n return this.traceTail.fingerprint$.pipe(\n take(1),\n switchMap(fingerprint => {\n // Clone the request and add TraceTail headers\n const modifiedReq = req.clone({\n headers: req.headers\n .set('X-TraceTail-Visitor-ID', fingerprint?.visitorId || 'unknown')\n .set('X-TraceTail-Risk-Score', fingerprint?.riskScore?.toString() || '0')\n .set('X-TraceTail-Confidence', fingerprint?.confidence?.toString() || '0')\n });\n\n return next.handle(modifiedReq);\n })\n );\n }\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { TraceTailService } from './tracetail.service';\nimport { TraceTailConfig } from './tracetail.types';\nimport { TRACETAIL_CONFIG, DEFAULT_CONFIG } from './tracetail.config';\nimport { FraudDetectionDirective } from './directives/fraud-detection.directive';\nimport { TraceTailInterceptor } from './interceptors/tracetail.interceptor';\n\n@NgModule({\n declarations: [\n FraudDetectionDirective\n ],\n imports: [\n CommonModule\n ],\n exports: [\n FraudDetectionDirective\n ]\n})\nexport class TraceTailModule {\n static forRoot(config: TraceTailConfig): ModuleWithProviders<TraceTailModule> {\n return {\n ngModule: TraceTailModule,\n providers: [\n {\n provide: TRACETAIL_CONFIG,\n useValue: { ...DEFAULT_CONFIG, ...config }\n },\n TraceTailService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: TraceTailInterceptor,\n multi: true\n }\n ]\n };\n }\n\n static forFeature(config?: Partial<TraceTailConfig>): ModuleWithProviders<TraceTailModule> {\n return {\n ngModule: TraceTailModule,\n providers: config ? [\n {\n provide: TRACETAIL_CONFIG,\n useValue: { ...DEFAULT_CONFIG, ...config }\n }\n ] : []\n };\n }\n}","/**\n * TraceTail types for Angular\n */\n\nexport interface Fingerprint {\n visitorId: string;\n confidence: number;\n riskScore: number;\n fraudulent: boolean;\n signals: unknown;\n timestamp: Date;\n processingTime?: number;\n}\n\nexport interface SignalData {\n browser: string;\n os: string;\n device: string;\n screen: {\n width: number;\n height: number;\n colorDepth: number;\n };\n timezone: string;\n language: string;\n plugins: string[];\n fonts: string[];\n canvas: string;\n webgl: string;\n audio: string;\n vpn: boolean;\n tor: boolean;\n proxy: boolean;\n}\n\nexport interface TrackingResult {\n success: boolean;\n fraudulent: boolean;\n riskScore: number;\n eventId: string;\n}\n\nexport interface FraudResult {\n block: boolean;\n challenge: boolean;\n allow: boolean;\n riskScore: number;\n reasons: string[];\n}\n\nexport interface TraceTailConfig {\n apiKey: string;\n config?: {\n enhanced?: boolean;\n timeout?: number;\n endpoint?: string;\n debug?: boolean;\n testMode?: boolean;\n mockData?: Partial<Fingerprint>;\n };\n}","import { Injectable } from '@angular/core';\nimport {\n CanActivate,\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n Router,\n UrlTree\n} from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { TraceTailService } from '../tracetail.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FraudProtectionGuard implements CanActivate {\n constructor(\n private traceTail: TraceTailService,\n private router: Router\n ) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n // Get risk threshold from route data or use default\n const maxRiskScore = route.data['maxRiskScore'] ?? 0.7;\n const verificationUrl = route.data['verificationUrl'] ?? '/verify';\n\n return this.traceTail.fingerprint$.pipe(\n take(1),\n map(fingerprint => {\n if (!fingerprint) {\n // No fingerprint yet, allow but monitor\n console.warn('No fingerprint available for fraud check');\n return true;\n }\n\n // Check if user is fraudulent or high risk\n if (fingerprint.fraudulent || fingerprint.riskScore > maxRiskScore) {\n console.warn('High risk user blocked:', {\n visitorId: fingerprint.visitorId,\n riskScore: fingerprint.riskScore,\n fraudulent: fingerprint.fraudulent\n });\n\n // Redirect to verification page\n return this.router.createUrlTree([verificationUrl], {\n queryParams: {\n reason: fingerprint.fraudulent ? 'fraud' : 'risk',\n returnUrl: state.url\n }\n });\n }\n\n // User is safe, allow access\n return true;\n })\n );\n }\n}","/**\n * Public API Surface of @tracetail/angular\n */\n\nexport * from './lib/tracetail.module';\nexport * from './lib/tracetail.service';\nexport * from './lib/tracetail.config';\nexport * from './lib/tracetail.types';\nexport * from './lib/directives/fraud-detection.directive';\nexport * from './lib/interceptors/tracetail.interceptor';\nexport * from './lib/guards/fraud-protection.guard';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TraceTailService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tracetail-angular.mjs","sources":["../../src/lib/tracetail.config.ts","../../src/lib/tracetail.service.ts","../../src/lib/directives/fraud-detection.directive.ts","../../src/lib/interceptors/tracetail.interceptor.ts","../../src/lib/tracetail.module.ts","../../src/lib/tracetail.types.ts","../../src/lib/guards/fraud-protection.guard.ts","../../src/public-api.ts","../../src/tracetail-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TraceTailConfig } from './tracetail.types';\n\nexport const TRACETAIL_CONFIG = new InjectionToken<TraceTailConfig>('TRACETAIL_CONFIG');\n\nexport const DEFAULT_CONFIG: Partial<TraceTailConfig> = {\n config: {\n enhanced: true,\n timeout: 5000,\n endpoint: 'https://api.tracetail.com',\n testMode: false\n }\n};","import { Injectable, Inject } from '@angular/core';\nimport { BehaviorSubject, Observable, from, of } from 'rxjs';\nimport { catchError, shareReplay, tap } from 'rxjs/operators';\nimport TraceTail from '@tracetail/js';\nimport { TRACETAIL_CONFIG } from './tracetail.config';\nimport { \n TraceTailConfig, \n Fingerprint, \n TrackingResult, \n FraudResult \n} from './tracetail.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TraceTailService {\n private client: TraceTail;\n private fingerprintSubject = new BehaviorSubject<Fingerprint | null>(null);\n private loadingSubject = new BehaviorSubject<boolean>(true);\n private errorSubject = new BehaviorSubject<Error | null>(null);\n\n fingerprint$ = this.fingerprintSubject.asObservable();\n loading$ = this.loadingSubject.asObservable();\n error$ = this.errorSubject.asObservable();\n\n constructor(@Inject(TRACETAIL_CONFIG) private config: TraceTailConfig) {\n this.initializeClient();\n }\n\n private initializeClient(): void {\n try {\n // Handle test mode\n if (this.config.config?.testMode && this.config.config.mockData) {\n this.fingerprintSubject.next({\n visitorId: 'mock-visitor-123',\n confidence: 0.99,\n riskScore: 0.1,\n fraudulent: false,\n signals: {},\n timestamp: new Date(),\n ...this.config.config.mockData\n } as Fingerprint);\n this.loadingSubject.next(false);\n return;\n }\n\n // Initialize real client\n this.client = new TraceTail({\n apiKey: this.config.apiKey,\n timeout: this.config.config?.timeout,\n debug: this.config.config?.debug || false\n });\n\n // Get initial fingerprint\n this.loadFingerprint();\n } catch (error) {\n this.handleError(error as Error);\n }\n }\n\n private async loadFingerprint(): Promise<void> {\n try {\n this.loadingSubject.next(true);\n this.errorSubject.next(null);\n\n // Use verbose: true to get components in the response\n const result = await this.client.generateFingerprint({ verbose: true });\n\n const fingerprint: Fingerprint = {\n visitorId: result.visitorId,\n confidence: result.confidence,\n riskScore: 0, // Default value - not in base SDK\n fraudulent: false, // Default value - not in base SDK\n signals: result.components || {},\n timestamp: new Date(),\n processingTime: result.processingTime\n };\n\n this.fingerprintSubject.next(fingerprint);\n this.loadingSubject.next(false);\n } catch (error) {\n this.handleError(error as Error);\n }\n }\n\n private handleError(error: Error): void {\n console.error('TraceTail error:', error);\n this.errorSubject.next(error);\n this.loadingSubject.next(false);\n }\n\n /**\n * Get current fingerprint as a promise\n */\n async getFingerprint(): Promise<Fingerprint> {\n const current = this.fingerprintSubject.value;\n if (current) {\n return current;\n }\n\n // Wait for fingerprint to be loaded\n return new Promise((resolve, reject) => {\n const subscription = this.fingerprint$.subscribe({\n next: (fingerprint) => {\n if (fingerprint) {\n subscription.unsubscribe();\n resolve(fingerprint);\n }\n },\n error: (error) => {\n subscription.unsubscribe();\n reject(error);\n }\n });\n });\n }\n\n /**\n * Track an event\n */\n async trackEvent(event: string, data?: any): Promise<TrackingResult> {\n console.warn('[TraceTail] trackEvent() was called with:', { event, data });\n\n throw new Error(\n '[TraceTail] Event tracking is not implemented in @tracetail/angular. Use getFingerprint() to collect visitorId/requestId, then send your event to your own backend or analytics pipeline.'\n );\n }\n\n /**\n * Check for fraud\n */\n async checkFraud(data: any): Promise<FraudResult> {\n try {\n const fingerprint = await this.getFingerprint();\n \n // Simple fraud detection logic based on risk score\n const block = fingerprint.riskScore > 0.8;\n const challenge = fingerprint.riskScore > 0.5 && fingerprint.riskScore <= 0.8;\n const allow = fingerprint.riskScore <= 0.5;\n \n const reasons: string[] = [];\n const signals = fingerprint.signals as Record<string, unknown>;\n if (signals?.vpn) reasons.push('VPN detected');\n if (signals?.tor) reasons.push('Tor browser detected');\n if (signals?.proxy) reasons.push('Proxy detected');\n if (fingerprint.riskScore > 0.7) reasons.push('High risk score');\n\n return {\n block,\n challenge,\n allow,\n riskScore: fingerprint.riskScore,\n reasons\n };\n } catch (error) {\n console.error('Fraud check error:', error);\n throw error;\n }\n }\n\n /**\n * Retry fingerprinting\n */\n retry(): void {\n this.loadFingerprint();\n }\n\n /**\n * Force refresh fingerprint\n */\n async refresh(): Promise<void> {\n await this.loadFingerprint();\n }\n\n /**\n * Get raw TraceTail client instance\n */\n getClient(): TraceTail {\n return this.client;\n }\n}","import { \n Directive, \n Input, \n ElementRef, \n OnInit, \n OnDestroy \n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TraceTailService } from '../tracetail.service';\n\n@Directive({\n selector: '[appFraudDetection]'\n})\nexport class FraudDetectionDirective implements OnInit, OnDestroy {\n @Input() appFraudDetection: 'low' | 'medium' | 'high' = 'medium';\n @Input() disableOnRisk = true;\n @Input() cssClass = 'high-risk';\n\n private subscription: Subscription | null = null;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private traceTail: TraceTailService\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.traceTail.fingerprint$.subscribe(fingerprint => {\n if (!fingerprint) return;\n\n const thresholds = {\n low: 0.3,\n medium: 0.5,\n high: 0.7\n };\n\n const threshold = thresholds[this.appFraudDetection];\n const isHighRisk = fingerprint.riskScore > threshold;\n\n // Apply or remove CSS class\n if (isHighRisk) {\n this.el.nativeElement.classList.add(this.cssClass);\n \n // Optionally disable the element\n if (this.disableOnRisk && this.isFormElement()) {\n this.el.nativeElement.setAttribute('disabled', 'true');\n this.el.nativeElement.setAttribute('title', 'High fraud risk detected');\n }\n } else {\n this.el.nativeElement.classList.remove(this.cssClass);\n \n if (this.disableOnRisk && this.isFormElement()) {\n this.el.nativeElement.removeAttribute('disabled');\n this.el.nativeElement.removeAttribute('title');\n }\n }\n\n // Emit custom event\n this.el.nativeElement.dispatchEvent(new CustomEvent('fraudStatusChange', {\n detail: {\n isHighRisk,\n riskScore: fingerprint.riskScore,\n threshold\n },\n bubbles: true\n }));\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private isFormElement(): boolean {\n const tagName = this.el.nativeElement.tagName.toLowerCase();\n return ['input', 'button', 'select', 'textarea', 'form'].includes(tagName);\n }\n}","import { Injectable } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\nimport { TraceTailService } from '../tracetail.service';\n\n@Injectable()\nexport class TraceTailInterceptor implements HttpInterceptor {\n constructor(private traceTail: TraceTailService) {}\n\n intercept(\n req: HttpRequest<any>, \n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n // Skip TraceTail API requests to prevent circular dependency\n if (req.url.includes('api.tracetail.com')) {\n return next.handle(req);\n }\n\n return this.traceTail.fingerprint$.pipe(\n take(1),\n switchMap(fingerprint => {\n // Clone the request and add TraceTail headers\n const modifiedReq = req.clone({\n headers: req.headers\n .set('X-TraceTail-Visitor-ID', fingerprint?.visitorId || 'unknown')\n .set('X-TraceTail-Risk-Score', fingerprint?.riskScore?.toString() || '0')\n .set('X-TraceTail-Confidence', fingerprint?.confidence?.toString() || '0')\n });\n\n return next.handle(modifiedReq);\n })\n );\n }\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { TraceTailService } from './tracetail.service';\nimport { TraceTailConfig } from './tracetail.types';\nimport { TRACETAIL_CONFIG, DEFAULT_CONFIG } from './tracetail.config';\nimport { FraudDetectionDirective } from './directives/fraud-detection.directive';\nimport { TraceTailInterceptor } from './interceptors/tracetail.interceptor';\n\n@NgModule({\n declarations: [\n FraudDetectionDirective\n ],\n imports: [\n CommonModule\n ],\n exports: [\n FraudDetectionDirective\n ]\n})\nexport class TraceTailModule {\n static forRoot(config: TraceTailConfig): ModuleWithProviders<TraceTailModule> {\n return {\n ngModule: TraceTailModule,\n providers: [\n {\n provide: TRACETAIL_CONFIG,\n useValue: { ...DEFAULT_CONFIG, ...config }\n },\n TraceTailService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: TraceTailInterceptor,\n multi: true\n }\n ]\n };\n }\n\n static forFeature(config?: Partial<TraceTailConfig>): ModuleWithProviders<TraceTailModule> {\n return {\n ngModule: TraceTailModule,\n providers: config ? [\n {\n provide: TRACETAIL_CONFIG,\n useValue: { ...DEFAULT_CONFIG, ...config }\n }\n ] : []\n };\n }\n}","/**\n * TraceTail types for Angular\n */\n\nexport interface Fingerprint {\n visitorId: string;\n confidence: number;\n riskScore: number;\n fraudulent: boolean;\n signals: unknown;\n timestamp: Date;\n processingTime?: number;\n}\n\nexport interface SignalData {\n browser: string;\n os: string;\n device: string;\n screen: {\n width: number;\n height: number;\n colorDepth: number;\n };\n timezone: string;\n language: string;\n plugins: string[];\n fonts: string[];\n canvas: string;\n webgl: string;\n audio: string;\n vpn: boolean;\n tor: boolean;\n proxy: boolean;\n}\n\nexport interface TrackingResult {\n success: boolean;\n fraudulent: boolean;\n riskScore: number;\n eventId: string;\n}\n\nexport interface FraudResult {\n block: boolean;\n challenge: boolean;\n allow: boolean;\n riskScore: number;\n reasons: string[];\n}\n\nexport interface TraceTailConfig {\n apiKey: string;\n config?: {\n enhanced?: boolean;\n timeout?: number;\n endpoint?: string;\n debug?: boolean;\n testMode?: boolean;\n mockData?: Partial<Fingerprint>;\n };\n}","import { Injectable } from '@angular/core';\nimport {\n CanActivate,\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n Router,\n UrlTree\n} from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { TraceTailService } from '../tracetail.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FraudProtectionGuard implements CanActivate {\n constructor(\n private traceTail: TraceTailService,\n private router: Router\n ) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> {\n // Get risk threshold from route data or use default\n const maxRiskScore = route.data['maxRiskScore'] ?? 0.7;\n const verificationUrl = route.data['verificationUrl'] ?? '/verify';\n\n return this.traceTail.fingerprint$.pipe(\n take(1),\n map(fingerprint => {\n if (!fingerprint) {\n // No fingerprint yet, allow but monitor\n console.warn('No fingerprint available for fraud check');\n return true;\n }\n\n // Check if user is fraudulent or high risk\n if (fingerprint.fraudulent || fingerprint.riskScore > maxRiskScore) {\n console.warn('High risk user blocked:', {\n visitorId: fingerprint.visitorId,\n riskScore: fingerprint.riskScore,\n fraudulent: fingerprint.fraudulent\n });\n\n // Redirect to verification page\n return this.router.createUrlTree([verificationUrl], {\n queryParams: {\n reason: fingerprint.fraudulent ? 'fraud' : 'risk',\n returnUrl: state.url\n }\n });\n }\n\n // User is safe, allow access\n return true;\n })\n );\n }\n}","/**\n * Public API Surface of @tracetail/angular\n */\n\nexport * from './lib/tracetail.module';\nexport * from './lib/tracetail.service';\nexport * from './lib/tracetail.config';\nexport * from './lib/tracetail.types';\nexport * from './lib/directives/fraud-detection.directive';\nexport * from './lib/interceptors/tracetail.interceptor';\nexport * from './lib/guards/fraud-protection.guard';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TraceTailService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracetail/angular",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.12",
|
|
4
4
|
"description": "Angular SDK for TraceTail browser fingerprinting - over 99.5% accuracy",
|
|
5
5
|
"main": "dist/fesm2022/tracetail-angular.mjs",
|
|
6
6
|
"module": "dist/fesm2022/tracetail-angular.mjs",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"rxjs": "^7.0.0"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@tracetail/js": "^2.3.
|
|
57
|
+
"@tracetail/js": "^2.3.12"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@angular/common": "^17.0.0",
|