@tracetail/angular 2.3.13 → 2.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm2022/lib/tracetail.service.mjs +15 -2
- package/dist/esm2022/public-api.mjs +3 -1
- package/dist/fesm2022/tracetail-angular.mjs +15 -1
- package/dist/fesm2022/tracetail-angular.mjs.map +1 -1
- package/dist/lib/tracetail.service.d.ts +12 -0
- package/dist/public-api.d.ts +2 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable, Inject } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import TraceTail from '@tracetail/js';
|
|
3
|
+
import TraceTail, { getComplianceContext } from '@tracetail/js';
|
|
4
4
|
import { TRACETAIL_CONFIG } from './tracetail.config';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class TraceTailService {
|
|
@@ -156,6 +156,19 @@ export class TraceTailService {
|
|
|
156
156
|
getClient() {
|
|
157
157
|
return this.client;
|
|
158
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Return client-side privacy / region compliance signals (GPC, DNT, timezone,
|
|
161
|
+
* locale, inferred region, and a conservative `likelyRequiresConsent` hint).
|
|
162
|
+
*
|
|
163
|
+
* These are CLIENT-SIDE HEURISTICS, not authoritative geolocation, and do NOT
|
|
164
|
+
* gate or alter fingerprint collection. Use `likelyRequiresConsent` together
|
|
165
|
+
* with your own consent state to decide whether to collect a fingerprint —
|
|
166
|
+
* obtaining consent where required (EU ePrivacy/GDPR, UK PECR, etc.) is the
|
|
167
|
+
* merchant's responsibility.
|
|
168
|
+
*/
|
|
169
|
+
getComplianceContext() {
|
|
170
|
+
return getComplianceContext();
|
|
171
|
+
}
|
|
159
172
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraceTailService, deps: [{ token: TRACETAIL_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
160
173
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraceTailService, providedIn: 'root' });
|
|
161
174
|
}
|
|
@@ -168,4 +181,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
168
181
|
type: Inject,
|
|
169
182
|
args: [TRACETAIL_CONFIG]
|
|
170
183
|
}] }] });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYWNldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sU0FBUyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFXdEQsTUFBTSxPQUFPLGdCQUFnQjtJQVVtQjtJQVR0QyxNQUFNLENBQVk7SUFDbEIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQ25FLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7SUFFL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxQyxZQUE4QyxNQUF1QjtRQUF2QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUk7WUFDRixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29C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YmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHNoYXJlUmVwbGF5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgVHJhY2VUYWlsIGZyb20gJ0B0cmFjZXRhaWwvanMnO1xuaW1wb3J0IHsgVFJBQ0VUQUlMX0NPTkZJRyB9IGZyb20gJy4vdHJhY2V0YWlsLmNvbmZpZyc7XG5pbXBvcnQgeyBcbiAgVHJhY2VUYWlsQ29uZmlnLCBcbiAgRmluZ2VycHJpbnQsIFxuICBUcmFja2luZ1Jlc3VsdCwgXG4gIEZyYXVkUmVzdWx0IFxufSBmcm9tICcuL3RyYWNldGFpbC50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYWNlVGFpbFNlcnZpY2Uge1xuICBwcml2YXRlIGNsaWVudDogVHJhY2VUYWlsO1xuICBwcml2YXRlIGZpbmdlcnByaW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmluZ2VycHJpbnQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcnJvciB8IG51bGw+KG51bGwpO1xuXG4gIGZpbmdlcnByaW50JCA9IHRoaXMuZmluZ2VycHJpbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGVycm9yJCA9IHRoaXMuZXJyb3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoVFJBQ0VUQUlMX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFRyYWNlVGFpbENvbmZpZykge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNsaWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2xpZW50KCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBIYW5kbGUgdGVzdCBtb2RlXG4gICAgICBpZiAodGhpcy5jb25maWcuY29uZmlnPy50ZXN0TW9kZSAmJiB0aGlzLmNvbmZpZy5jb25maWcubW9ja0RhdGEpIHtcbiAgICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dCh7XG4gICAgICAgICAgdmlzaXRvcklkOiAnbW9jay12aXNpdG9yLTEyMycsXG4gICAgICAgICAgY29uZmlkZW5jZTogMC45OSxcbiAgICAgICAgICByaXNrU2NvcmU6IDAuMSxcbiAgICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSxcbiAgICAgICAgICBzaWduYWxzOiB7fSxcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgLi4udGhpcy5jb25maWcuY29uZmlnLm1vY2tEYXRhXG4gICAgICAgIH0gYXMgRmluZ2VycHJpbnQpO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXRpYWxpemUgcmVhbCBjbGllbnQuIFBhc3MgdGhyb3VnaCBlbmRwb2ludCBzbyBhIGN1c3RvbSBjb25maWcuZW5kcG9pbnQgaXNcbiAgICAgIC8vIGhvbm9yZWQgKHByZXZpb3VzbHkgZHJvcHBlZCwgc28gaXQgYWx3YXlzIGRlZmF1bHRlZCB0byAnL2FwaScpLlxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgVHJhY2VUYWlsKHtcbiAgICAgICAgYXBpS2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLmNvbmZpZz8udGltZW91dCxcbiAgICAgICAgZGVidWc6IHRoaXMuY29uZmlnLmNvbmZpZz8uZGVidWcgfHwgZmFsc2UsXG4gICAgICAgIC4uLih0aGlzLmNvbmZpZy5jb25maWc/LmVuZHBvaW50ID8geyBlbmRwb2ludDogdGhpcy5jb25maWcuY29uZmlnLmVuZHBvaW50IH0gOiB7fSlcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgaW5pdGlhbCBmaW5nZXJwcmludFxuICAgICAgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmluZ2VycHJpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgIC8vIFVzZSB2ZXJib3NlOiB0cnVlIHRvIGdldCBjb21wb25lbnRzIGluIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2VuZXJhdGVGaW5nZXJwcmludCh7IHZlcmJvc2U6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGZpbmdlcnByaW50OiBGaW5nZXJwcmludCA9IHtcbiAgICAgICAgdmlzaXRvcklkOiByZXN1bHQudmlzaXRvcklkLFxuICAgICAgICBjb25maWRlbmNlOiByZXN1bHQuY29uZmlkZW5jZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLCAgLy8gRGVmYXVsdCB2YWx1ZSAtIG5vdCBpbiBiYXNlIFNES1xuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSwgIC8vIERlZmF1bHQgdmFsdWUgLSBub3QgaW4gYmFzZSBTREtcbiAgICAgICAgc2lnbmFsczogcmVzdWx0LmNvbXBvbmVudHMgfHwge30sXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgcHJvY2Vzc2luZ1RpbWU6IHJlc3VsdC5wcm9jZXNzaW5nVGltZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dChmaW5nZXJwcmludCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RyYWNlVGFpbCBlcnJvcjonLCBlcnJvcik7XG4gICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmaW5nZXJwcmludCBhcyBhIHByb21pc2VcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlcnByaW50KCk6IFByb21pc2U8RmluZ2VycHJpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QudmFsdWU7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIC8vIFdhaXQgZm9yIGZpbmdlcnByaW50IHRvIGJlIGxvYWRlZFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZpbmdlcnByaW50JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmluZ2VycHJpbnQpID0+IHtcbiAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShmaW5nZXJwcmludCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgYW4gZXZlbnRcbiAgICovXG4gIGFzeW5jIHRyYWNrRXZlbnQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8VHJhY2tpbmdSZXN1bHQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ1tUcmFjZVRhaWxdIHRyYWNrRXZlbnQoKSB3YXMgY2FsbGVkIHdpdGg6JywgeyBldmVudCwgZGF0YSB9KTtcblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdbVHJhY2VUYWlsXSBFdmVudCB0cmFja2luZyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gQHRyYWNldGFpbC9hbmd1bGFyLiBVc2UgZ2V0RmluZ2VycHJpbnQoKSB0byBjb2xsZWN0IHZpc2l0b3JJZC9yZXF1ZXN0SWQsIHRoZW4gc2VuZCB5b3VyIGV2ZW50IHRvIHlvdXIgb3duIGJhY2tlbmQgb3IgYW5hbHl0aWNzIHBpcGVsaW5lLidcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBmcmF1ZFxuICAgKi9cbiAgYXN5bmMgY2hlY2tGcmF1ZChkYXRhOiBhbnkpOiBQcm9taXNlPEZyYXVkUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmdlcnByaW50ID0gYXdhaXQgdGhpcy5nZXRGaW5nZXJwcmludCgpO1xuICAgICAgXG4gICAgICAvLyBTaW1wbGUgZnJhdWQgZGV0ZWN0aW9uIGxvZ2ljIGJhc2VkIG9uIHJpc2sgc2NvcmVcbiAgICAgIGNvbnN0IGJsb2NrID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC44O1xuICAgICAgY29uc3QgY2hhbGxlbmdlID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC41ICYmIGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjg7XG4gICAgICBjb25zdCBhbGxvdyA9IGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjU7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlYXNvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBzaWduYWxzID0gZmluZ2VycHJpbnQuc2lnbmFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGlmIChzaWduYWxzPy52cG4pIHJlYXNvbnMucHVzaCgnVlBOIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8udG9yKSByZWFzb25zLnB1c2goJ1RvciBicm93c2VyIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8ucHJveHkpIHJlYXNvbnMucHVzaCgnUHJveHkgZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjcpIHJlYXNvbnMucHVzaCgnSGlnaCByaXNrIHNjb3JlJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJsb2NrLFxuICAgICAgICBjaGFsbGVuZ2UsXG4gICAgICAgIGFsbG93LFxuICAgICAgICByaXNrU2NvcmU6IGZpbmdlcnByaW50LnJpc2tTY29yZSxcbiAgICAgICAgcmVhc29uc1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRnJhdWQgY2hlY2sgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJ5IGZpbmdlcnByaW50aW5nXG4gICAqL1xuICByZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHJlZnJlc2ggZmluZ2VycHJpbnRcbiAgICovXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmF3IFRyYWNlVGFpbCBjbGllbnQgaW5zdGFuY2VcbiAgICovXG4gIGdldENsaWVudCgpOiBUcmFjZVRhaWwge1xuICAgIHJldHVybiB0aGlzLmNsaWVudDtcbiAgfVxufSJdfQ==
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYWNldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sU0FBUyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBV3RELE1BQU0sT0FBTyxnQkFBZ0I7SUFVbUI7SUFUdEMsTUFBTSxDQUFZO0lBQ2xCLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztJQUNuRSxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDcEQsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFlLElBQUksQ0FBQyxDQUFDO0lBRS9ELFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUMsWUFBOEMsTUFBdUI7UUFBdkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJO1lBQ0YsbUJBQW1CO1lBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDL0QsSUFBSSxDQUFDLGtC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QztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVdjLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IFRyYWNlVGFpbCwgeyBnZXRDb21wbGlhbmNlQ29udGV4dCB9IGZyb20gJ0B0cmFjZXRhaWwvanMnO1xuaW1wb3J0IHR5cGUgeyBDb21wbGlhbmNlQ29udGV4dCB9IGZyb20gJ0B0cmFjZXRhaWwvanMnO1xuaW1wb3J0IHsgVFJBQ0VUQUlMX0NPTkZJRyB9IGZyb20gJy4vdHJhY2V0YWlsLmNvbmZpZyc7XG5pbXBvcnQgeyBcbiAgVHJhY2VUYWlsQ29uZmlnLCBcbiAgRmluZ2VycHJpbnQsIFxuICBUcmFja2luZ1Jlc3VsdCwgXG4gIEZyYXVkUmVzdWx0IFxufSBmcm9tICcuL3RyYWNldGFpbC50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYWNlVGFpbFNlcnZpY2Uge1xuICBwcml2YXRlIGNsaWVudDogVHJhY2VUYWlsO1xuICBwcml2YXRlIGZpbmdlcnByaW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmluZ2VycHJpbnQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcnJvciB8IG51bGw+KG51bGwpO1xuXG4gIGZpbmdlcnByaW50JCA9IHRoaXMuZmluZ2VycHJpbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGVycm9yJCA9IHRoaXMuZXJyb3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoVFJBQ0VUQUlMX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFRyYWNlVGFpbENvbmZpZykge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNsaWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2xpZW50KCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBIYW5kbGUgdGVzdCBtb2RlXG4gICAgICBpZiAodGhpcy5jb25maWcuY29uZmlnPy50ZXN0TW9kZSAmJiB0aGlzLmNvbmZpZy5jb25maWcubW9ja0RhdGEpIHtcbiAgICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dCh7XG4gICAgICAgICAgdmlzaXRvcklkOiAnbW9jay12aXNpdG9yLTEyMycsXG4gICAgICAgICAgY29uZmlkZW5jZTogMC45OSxcbiAgICAgICAgICByaXNrU2NvcmU6IDAuMSxcbiAgICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSxcbiAgICAgICAgICBzaWduYWxzOiB7fSxcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgLi4udGhpcy5jb25maWcuY29uZmlnLm1vY2tEYXRhXG4gICAgICAgIH0gYXMgRmluZ2VycHJpbnQpO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXRpYWxpemUgcmVhbCBjbGllbnQuIFBhc3MgdGhyb3VnaCBlbmRwb2ludCBzbyBhIGN1c3RvbSBjb25maWcuZW5kcG9pbnQgaXNcbiAgICAgIC8vIGhvbm9yZWQgKHByZXZpb3VzbHkgZHJvcHBlZCwgc28gaXQgYWx3YXlzIGRlZmF1bHRlZCB0byAnL2FwaScpLlxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgVHJhY2VUYWlsKHtcbiAgICAgICAgYXBpS2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLmNvbmZpZz8udGltZW91dCxcbiAgICAgICAgZGVidWc6IHRoaXMuY29uZmlnLmNvbmZpZz8uZGVidWcgfHwgZmFsc2UsXG4gICAgICAgIC4uLih0aGlzLmNvbmZpZy5jb25maWc/LmVuZHBvaW50ID8geyBlbmRwb2ludDogdGhpcy5jb25maWcuY29uZmlnLmVuZHBvaW50IH0gOiB7fSlcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgaW5pdGlhbCBmaW5nZXJwcmludFxuICAgICAgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmluZ2VycHJpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgIC8vIFVzZSB2ZXJib3NlOiB0cnVlIHRvIGdldCBjb21wb25lbnRzIGluIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2VuZXJhdGVGaW5nZXJwcmludCh7IHZlcmJvc2U6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGZpbmdlcnByaW50OiBGaW5nZXJwcmludCA9IHtcbiAgICAgICAgdmlzaXRvcklkOiByZXN1bHQudmlzaXRvcklkLFxuICAgICAgICBjb25maWRlbmNlOiByZXN1bHQuY29uZmlkZW5jZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLCAgLy8gRGVmYXVsdCB2YWx1ZSAtIG5vdCBpbiBiYXNlIFNES1xuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSwgIC8vIERlZmF1bHQgdmFsdWUgLSBub3QgaW4gYmFzZSBTREtcbiAgICAgICAgc2lnbmFsczogcmVzdWx0LmNvbXBvbmVudHMgfHwge30sXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgcHJvY2Vzc2luZ1RpbWU6IHJlc3VsdC5wcm9jZXNzaW5nVGltZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dChmaW5nZXJwcmludCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RyYWNlVGFpbCBlcnJvcjonLCBlcnJvcik7XG4gICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmaW5nZXJwcmludCBhcyBhIHByb21pc2VcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlcnByaW50KCk6IFByb21pc2U8RmluZ2VycHJpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QudmFsdWU7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIC8vIFdhaXQgZm9yIGZpbmdlcnByaW50IHRvIGJlIGxvYWRlZFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZpbmdlcnByaW50JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmluZ2VycHJpbnQpID0+IHtcbiAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShmaW5nZXJwcmludCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgYW4gZXZlbnRcbiAgICovXG4gIGFzeW5jIHRyYWNrRXZlbnQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8VHJhY2tpbmdSZXN1bHQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ1tUcmFjZVRhaWxdIHRyYWNrRXZlbnQoKSB3YXMgY2FsbGVkIHdpdGg6JywgeyBldmVudCwgZGF0YSB9KTtcblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdbVHJhY2VUYWlsXSBFdmVudCB0cmFja2luZyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gQHRyYWNldGFpbC9hbmd1bGFyLiBVc2UgZ2V0RmluZ2VycHJpbnQoKSB0byBjb2xsZWN0IHZpc2l0b3JJZC9yZXF1ZXN0SWQsIHRoZW4gc2VuZCB5b3VyIGV2ZW50IHRvIHlvdXIgb3duIGJhY2tlbmQgb3IgYW5hbHl0aWNzIHBpcGVsaW5lLidcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBmcmF1ZFxuICAgKi9cbiAgYXN5bmMgY2hlY2tGcmF1ZChkYXRhOiBhbnkpOiBQcm9taXNlPEZyYXVkUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmdlcnByaW50ID0gYXdhaXQgdGhpcy5nZXRGaW5nZXJwcmludCgpO1xuICAgICAgXG4gICAgICAvLyBTaW1wbGUgZnJhdWQgZGV0ZWN0aW9uIGxvZ2ljIGJhc2VkIG9uIHJpc2sgc2NvcmVcbiAgICAgIGNvbnN0IGJsb2NrID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC44O1xuICAgICAgY29uc3QgY2hhbGxlbmdlID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC41ICYmIGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjg7XG4gICAgICBjb25zdCBhbGxvdyA9IGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjU7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlYXNvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBzaWduYWxzID0gZmluZ2VycHJpbnQuc2lnbmFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGlmIChzaWduYWxzPy52cG4pIHJlYXNvbnMucHVzaCgnVlBOIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8udG9yKSByZWFzb25zLnB1c2goJ1RvciBicm93c2VyIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8ucHJveHkpIHJlYXNvbnMucHVzaCgnUHJveHkgZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjcpIHJlYXNvbnMucHVzaCgnSGlnaCByaXNrIHNjb3JlJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJsb2NrLFxuICAgICAgICBjaGFsbGVuZ2UsXG4gICAgICAgIGFsbG93LFxuICAgICAgICByaXNrU2NvcmU6IGZpbmdlcnByaW50LnJpc2tTY29yZSxcbiAgICAgICAgcmVhc29uc1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRnJhdWQgY2hlY2sgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJ5IGZpbmdlcnByaW50aW5nXG4gICAqL1xuICByZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHJlZnJlc2ggZmluZ2VycHJpbnRcbiAgICovXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmF3IFRyYWNlVGFpbCBjbGllbnQgaW5zdGFuY2VcbiAgICovXG4gIGdldENsaWVudCgpOiBUcmFjZVRhaWwge1xuICAgIHJldHVybiB0aGlzLmNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY2xpZW50LXNpZGUgcHJpdmFjeSAvIHJlZ2lvbiBjb21wbGlhbmNlIHNpZ25hbHMgKEdQQywgRE5ULCB0aW1lem9uZSxcbiAgICogbG9jYWxlLCBpbmZlcnJlZCByZWdpb24sIGFuZCBhIGNvbnNlcnZhdGl2ZSBgbGlrZWx5UmVxdWlyZXNDb25zZW50YCBoaW50KS5cbiAgICpcbiAgICogVGhlc2UgYXJlIENMSUVOVC1TSURFIEhFVVJJU1RJQ1MsIG5vdCBhdXRob3JpdGF0aXZlIGdlb2xvY2F0aW9uLCBhbmQgZG8gTk9UXG4gICAqIGdhdGUgb3IgYWx0ZXIgZmluZ2VycHJpbnQgY29sbGVjdGlvbi4gVXNlIGBsaWtlbHlSZXF1aXJlc0NvbnNlbnRgIHRvZ2V0aGVyXG4gICAqIHdpdGggeW91ciBvd24gY29uc2VudCBzdGF0ZSB0byBkZWNpZGUgd2hldGhlciB0byBjb2xsZWN0IGEgZmluZ2VycHJpbnQg4oCUXG4gICAqIG9idGFpbmluZyBjb25zZW50IHdoZXJlIHJlcXVpcmVkIChFVSBlUHJpdmFjeS9HRFBSLCBVSyBQRUNSLCBldGMuKSBpcyB0aGVcbiAgICogbWVyY2hhbnQncyByZXNwb25zaWJpbGl0eS5cbiAgICovXG4gIGdldENvbXBsaWFuY2VDb250ZXh0KCk6IENvbXBsaWFuY2VDb250ZXh0IHtcbiAgICByZXR1cm4gZ2V0Q29tcGxpYW5jZUNvbnRleHQoKTtcbiAgfVxufSJdfQ==
|
|
@@ -8,4 +8,6 @@ export * from './lib/tracetail.types';
|
|
|
8
8
|
export * from './lib/directives/fraud-detection.directive';
|
|
9
9
|
export * from './lib/interceptors/tracetail.interceptor';
|
|
10
10
|
export * from './lib/guards/fraud-protection.guard';
|
|
11
|
-
|
|
11
|
+
// Client-side compliance helper + types (re-exported from the base package).
|
|
12
|
+
export { getComplianceContext } from '@tracetail/js';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxxQ0FBcUMsQ0FBQztBQUVwRCw2RUFBNkU7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQHRyYWNldGFpbC9hbmd1bGFyXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHJhY2V0YWlsLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFjZXRhaWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFjZXRhaWwuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RyYWNldGFpbC50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2ZyYXVkLWRldGVjdGlvbi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJjZXB0b3JzL3RyYWNldGFpbC5pbnRlcmNlcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ndWFyZHMvZnJhdWQtcHJvdGVjdGlvbi5ndWFyZCc7XG5cbi8vIENsaWVudC1zaWRlIGNvbXBsaWFuY2UgaGVscGVyICsgdHlwZXMgKHJlLWV4cG9ydGVkIGZyb20gdGhlIGJhc2UgcGFja2FnZSkuXG5leHBvcnQgeyBnZXRDb21wbGlhbmNlQ29udGV4dCB9IGZyb20gJ0B0cmFjZXRhaWwvanMnO1xuZXhwb3J0IHR5cGUgeyBDb21wbGlhbmNlQ29udGV4dCwgQ29tcGxpYW5jZVJlZ2lvbiB9IGZyb20gJ0B0cmFjZXRhaWwvanMnOyJdfQ==
|
|
@@ -3,7 +3,8 @@ import { InjectionToken, Inject, Injectable, Input, Directive, NgModule } from '
|
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
5
5
|
import { BehaviorSubject } from 'rxjs';
|
|
6
|
-
import TraceTail from '@tracetail/js';
|
|
6
|
+
import TraceTail, { getComplianceContext } from '@tracetail/js';
|
|
7
|
+
export { getComplianceContext } from '@tracetail/js';
|
|
7
8
|
import { take, switchMap, map } from 'rxjs/operators';
|
|
8
9
|
import * as i2 from '@angular/router';
|
|
9
10
|
|
|
@@ -170,6 +171,19 @@ class TraceTailService {
|
|
|
170
171
|
getClient() {
|
|
171
172
|
return this.client;
|
|
172
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Return client-side privacy / region compliance signals (GPC, DNT, timezone,
|
|
176
|
+
* locale, inferred region, and a conservative `likelyRequiresConsent` hint).
|
|
177
|
+
*
|
|
178
|
+
* These are CLIENT-SIDE HEURISTICS, not authoritative geolocation, and do NOT
|
|
179
|
+
* gate or alter fingerprint collection. Use `likelyRequiresConsent` together
|
|
180
|
+
* with your own consent state to decide whether to collect a fingerprint —
|
|
181
|
+
* obtaining consent where required (EU ePrivacy/GDPR, UK PECR, etc.) is the
|
|
182
|
+
* merchant's responsibility.
|
|
183
|
+
*/
|
|
184
|
+
getComplianceContext() {
|
|
185
|
+
return getComplianceContext();
|
|
186
|
+
}
|
|
173
187
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraceTailService, deps: [{ token: TRACETAIL_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
174
188
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraceTailService, providedIn: 'root' });
|
|
175
189
|
}
|
|
@@ -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. Pass through endpoint so a custom config.endpoint is\n // honored (previously dropped, so it always defaulted to '/api').\n this.client = new TraceTail({\n apiKey: this.config.apiKey,\n timeout: this.config.config?.timeout,\n debug: this.config.config?.debug || false,\n ...(this.config.config?.endpoint ? { endpoint: this.config.config.endpoint } : {})\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":";;;;;;;;;MAGa,gBAAgB,GAAG,IAAI,cAAc,CAAkB,kBAAkB;AAE/E,MAAM,cAAc,GAA6B;AACtD,IAAA,MAAM,EAAE;AACN,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,2BAA2B;AACrC,QAAA,QAAQ,EAAE;AACX;;;MCIU,gBAAgB,CAAA;AAUmB,IAAA,MAAA;AATtC,IAAA,MAAM;AACN,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAAqB,IAAI,CAAC;AAClE,IAAA,cAAc,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AACnD,IAAA,YAAY,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC;AAE9D,IAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACrD,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC7C,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAEzC,IAAA,WAAA,CAA8C,MAAuB,EAAA;QAAvB,IAAA,CAAA,MAAM,GAAN,MAAM;QAClD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,gBAAgB,GAAA;QACtB,IAAI;;AAEF,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC3B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,GAAG;AACd,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,IAAI,IAAI,EAAE;AACrB,oBAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACR,iBAAA,CAAC;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B;AACD,YAAA;;;AAID,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;AAC1B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC1B,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO;gBACpC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK;gBACzC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;AAClF,aAAA,CAAC;;YAGF,IAAI,CAAC,eAAe,EAAE;AACvB,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,KAAc,CAAC;AACjC,QAAA;IACH;AAEQ,IAAA,MAAM,eAAe,GAAA;QAC3B,IAAI;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG5B,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEvE,YAAA,MAAM,WAAW,GAAgB;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,OAAO,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;gBAChC,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,cAAc,EAAE,MAAM,CAAC;aACxB;AAED,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,KAAc,CAAC;AACjC,QAAA;IACH;AAEQ,IAAA,WAAW,CAAC,KAAY,EAAA;AAC9B,QAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAC7C,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;AACf,QAAA;;QAGD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC/C,gBAAA,IAAI,EAAE,CAAC,WAAW,KAAI;AACpB,oBAAA,IAAI,WAAW,EAAE;wBACf,YAAY,CAAC,WAAW,EAAE;wBAC1B,OAAO,CAAC,WAAW,CAAC;AACrB,oBAAA;gBACH,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,YAAY,CAAC,WAAW,EAAE;oBAC1B,MAAM,CAAC,KAAK,CAAC;gBACf;AACD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,MAAM,UAAU,CAAC,KAAa,EAAE,IAAU,EAAA;QACxC,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAE1E,QAAA,MAAM,IAAI,KAAK,CACb,2LAA2L,CAC5L;IACH;AAEA;;AAEG;IACH,MAAM,UAAU,CAAC,IAAS,EAAA;QACxB,IAAI;AACF,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;;AAG/C,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,GAAG,GAAG;AACzC,YAAA,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,GAAG,IAAI,WAAW,CAAC,SAAS,IAAI,GAAG;AAC7E,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,IAAI,GAAG;YAE1C,MAAM,OAAO,GAAa,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,OAAkC;YAC9D,IAAI,OAAO,EAAE,GAAG;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9C,IAAI,OAAO,EAAE,GAAG;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;YACtD,IAAI,OAAO,EAAE,KAAK;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAClD,YAAA,IAAI,WAAW,CAAC,SAAS,GAAG,GAAG;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAEhE,OAAO;gBACL,KAAK;gBACL,SAAS;gBACT,KAAK;gBACL,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC;aACD;AACF,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAC1C,YAAA,MAAM,KAAK;AACZ,QAAA;IACH;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEA;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAtKW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAUP,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAVzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAWc,MAAM;2BAAC,gBAAgB;;;MCZzB,uBAAuB,CAAA;AAQxB,IAAA,EAAA;AACA,IAAA,SAAA;IARD,iBAAiB,GAA8B,QAAQ;IACvD,aAAa,GAAG,IAAI;IACpB,QAAQ,GAAG,WAAW;IAEvB,YAAY,GAAwB,IAAI;IAEhD,WAAA,CACU,EAA2B,EAC3B,SAA2B,EAAA;QAD3B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;IAChB;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,IAAG;AACtE,YAAA,IAAI,CAAC,WAAW;gBAAE;AAElB,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,IAAI,EAAE;aACP;YAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACpD,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,GAAG,SAAS;;AAGpD,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;gBAGlD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBAC9C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;oBACtD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,0BAA0B,CAAC;AACxE,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAErD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBAC9C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;oBACjD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC;AAC/C,gBAAA;AACF,YAAA;;YAGD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,EAAE;AACvE,gBAAA,MAAM,EAAE;oBACN,UAAU;oBACV,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC;AACD,iBAAA;AACD,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC,CAAC;AACL,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAChC,QAAA;IACH;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE;AAC3D,QAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5E;wGAhEW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;2GAEU,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;;;MCJU,oBAAoB,CAAA;AACX,IAAA,SAAA;AAApB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAA,CAAA,SAAS,GAAT,SAAS;IAAqB;IAElD,SAAS,CACP,GAAqB,EACrB,IAAiB,EAAA;;QAGjB,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACxB,QAAA;AAED,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACrC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,WAAW,IAAG;;AAEtB,YAAA,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC5B,OAAO,EAAE,GAAG,CAAC;qBACV,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,SAAS,IAAI,SAAS;qBACjE,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG;qBACvE,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,GAAG;AAC5E,aAAA,CAAC;AAEF,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACjC,CAAC,CAAC,CACH;IACH;wGA1BW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCSY,eAAe,CAAA;IAC1B,OAAO,OAAO,CAAC,MAAuB,EAAA;QACpC,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM;AACzC,iBAAA;gBACD,gBAAgB;AAChB,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,KAAK,EAAE;AACR;AACF;SACF;IACH;IAEA,OAAO,UAAU,CAAC,MAAiC,EAAA;QACjD,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE,MAAM,GAAG;AAClB,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM;AACzC;aACF,GAAG;SACL;IACH;wGA7BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,CATxB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAGvB,YAAY,aAGZ,uBAAuB,CAAA,EAAA,CAAA;AAGd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YANxB,YAAY,CAAA,EAAA,CAAA;;4FAMH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;ACnBD;;AAEG;;MCaU,oBAAoB,CAAA;AAErB,IAAA,SAAA;AACA,IAAA,MAAA;IAFV,WAAA,CACU,SAA2B,EAC3B,MAAc,EAAA;QADd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;IAEH,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;;QAG1B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG;QACtD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,SAAS;AAElE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACrC,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,WAAW,IAAG;YAChB,IAAI,CAAC,WAAW,EAAE;;AAEhB,gBAAA,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC;AACxD,gBAAA,OAAO,IAAI;AACZ,YAAA;;YAGD,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,SAAS,GAAG,YAAY,EAAE;AAClE,gBAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE;oBACtC,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,UAAU,EAAE,WAAW,CAAC;AACzB,iBAAA,CAAC;;gBAGF,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,EAAE;AAClD,oBAAA,WAAW,EAAE;wBACX,MAAM,EAAE,WAAW,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM;wBACjD,SAAS,EAAE,KAAK,CAAC;AAClB;AACF,iBAAA,CAAC;AACH,YAAA;;AAGD,YAAA,OAAO,IAAI;QACb,CAAC,CAAC,CACH;IACH;wGA5CW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
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, { getComplianceContext } from '@tracetail/js';\nimport type { ComplianceContext } 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. Pass through endpoint so a custom config.endpoint is\n // honored (previously dropped, so it always defaulted to '/api').\n this.client = new TraceTail({\n apiKey: this.config.apiKey,\n timeout: this.config.config?.timeout,\n debug: this.config.config?.debug || false,\n ...(this.config.config?.endpoint ? { endpoint: this.config.config.endpoint } : {})\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\n /**\n * Return client-side privacy / region compliance signals (GPC, DNT, timezone,\n * locale, inferred region, and a conservative `likelyRequiresConsent` hint).\n *\n * These are CLIENT-SIDE HEURISTICS, not authoritative geolocation, and do NOT\n * gate or alter fingerprint collection. Use `likelyRequiresConsent` together\n * with your own consent state to decide whether to collect a fingerprint —\n * obtaining consent where required (EU ePrivacy/GDPR, UK PECR, etc.) is the\n * merchant's responsibility.\n */\n getComplianceContext(): ComplianceContext {\n return getComplianceContext();\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\n// Client-side compliance helper + types (re-exported from the base package).\nexport { getComplianceContext } from '@tracetail/js';\nexport type { ComplianceContext, ComplianceRegion } from '@tracetail/js';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TraceTailService"],"mappings":";;;;;;;;;;MAGa,gBAAgB,GAAG,IAAI,cAAc,CAAkB,kBAAkB;AAE/E,MAAM,cAAc,GAA6B;AACtD,IAAA,MAAM,EAAE;AACN,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,2BAA2B;AACrC,QAAA,QAAQ,EAAE;AACX;;;MCKU,gBAAgB,CAAA;AAUmB,IAAA,MAAA;AATtC,IAAA,MAAM;AACN,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAAqB,IAAI,CAAC;AAClE,IAAA,cAAc,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AACnD,IAAA,YAAY,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC;AAE9D,IAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACrD,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC7C,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAEzC,IAAA,WAAA,CAA8C,MAAuB,EAAA;QAAvB,IAAA,CAAA,MAAM,GAAN,MAAM;QAClD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,gBAAgB,GAAA;QACtB,IAAI;;AAEF,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC3B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,GAAG;AACd,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,IAAI,IAAI,EAAE;AACrB,oBAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACR,iBAAA,CAAC;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B;AACD,YAAA;;;AAID,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;AAC1B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC1B,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO;gBACpC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK;gBACzC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;AAClF,aAAA,CAAC;;YAGF,IAAI,CAAC,eAAe,EAAE;AACvB,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,KAAc,CAAC;AACjC,QAAA;IACH;AAEQ,IAAA,MAAM,eAAe,GAAA;QAC3B,IAAI;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG5B,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEvE,YAAA,MAAM,WAAW,GAAgB;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,OAAO,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;gBAChC,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,cAAc,EAAE,MAAM,CAAC;aACxB;AAED,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,KAAc,CAAC;AACjC,QAAA;IACH;AAEQ,IAAA,WAAW,CAAC,KAAY,EAAA;AAC9B,QAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAC7C,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;AACf,QAAA;;QAGD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC/C,gBAAA,IAAI,EAAE,CAAC,WAAW,KAAI;AACpB,oBAAA,IAAI,WAAW,EAAE;wBACf,YAAY,CAAC,WAAW,EAAE;wBAC1B,OAAO,CAAC,WAAW,CAAC;AACrB,oBAAA;gBACH,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,YAAY,CAAC,WAAW,EAAE;oBAC1B,MAAM,CAAC,KAAK,CAAC;gBACf;AACD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,MAAM,UAAU,CAAC,KAAa,EAAE,IAAU,EAAA;QACxC,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAE1E,QAAA,MAAM,IAAI,KAAK,CACb,2LAA2L,CAC5L;IACH;AAEA;;AAEG;IACH,MAAM,UAAU,CAAC,IAAS,EAAA;QACxB,IAAI;AACF,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;;AAG/C,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,GAAG,GAAG;AACzC,YAAA,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,GAAG,IAAI,WAAW,CAAC,SAAS,IAAI,GAAG;AAC7E,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,IAAI,GAAG;YAE1C,MAAM,OAAO,GAAa,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,OAAkC;YAC9D,IAAI,OAAO,EAAE,GAAG;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9C,IAAI,OAAO,EAAE,GAAG;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;YACtD,IAAI,OAAO,EAAE,KAAK;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAClD,YAAA,IAAI,WAAW,CAAC,SAAS,GAAG,GAAG;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAEhE,OAAO;gBACL,KAAK;gBACL,SAAS;gBACT,KAAK;gBACL,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC;aACD;AACF,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAC1C,YAAA,MAAM,KAAK;AACZ,QAAA;IACH;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEA;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;;;;;;;AASG;IACH,oBAAoB,GAAA;QAClB,OAAO,oBAAoB,EAAE;IAC/B;AApLW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAUP,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAVzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAWc,MAAM;2BAAC,gBAAgB;;;MCbzB,uBAAuB,CAAA;AAQxB,IAAA,EAAA;AACA,IAAA,SAAA;IARD,iBAAiB,GAA8B,QAAQ;IACvD,aAAa,GAAG,IAAI;IACpB,QAAQ,GAAG,WAAW;IAEvB,YAAY,GAAwB,IAAI;IAEhD,WAAA,CACU,EAA2B,EAC3B,SAA2B,EAAA;QAD3B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,SAAS,GAAT,SAAS;IAChB;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,IAAG;AACtE,YAAA,IAAI,CAAC,WAAW;gBAAE;AAElB,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,IAAI,EAAE;aACP;YAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACpD,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,GAAG,SAAS;;AAGpD,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;gBAGlD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBAC9C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;oBACtD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,0BAA0B,CAAC;AACxE,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAErD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBAC9C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;oBACjD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC;AAC/C,gBAAA;AACF,YAAA;;YAGD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,EAAE;AACvE,gBAAA,MAAM,EAAE;oBACN,UAAU;oBACV,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC;AACD,iBAAA;AACD,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC,CAAC;AACL,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAChC,QAAA;IACH;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE;AAC3D,QAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC5E;wGAhEW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;2GAEU,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;;;MCJU,oBAAoB,CAAA;AACX,IAAA,SAAA;AAApB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAA,CAAA,SAAS,GAAT,SAAS;IAAqB;IAElD,SAAS,CACP,GAAqB,EACrB,IAAiB,EAAA;;QAGjB,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACxB,QAAA;AAED,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACrC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,WAAW,IAAG;;AAEtB,YAAA,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC5B,OAAO,EAAE,GAAG,CAAC;qBACV,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,SAAS,IAAI,SAAS;qBACjE,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG;qBACvE,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,GAAG;AAC5E,aAAA,CAAC;AAEF,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACjC,CAAC,CAAC,CACH;IACH;wGA1BW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCSY,eAAe,CAAA;IAC1B,OAAO,OAAO,CAAC,MAAuB,EAAA;QACpC,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM;AACzC,iBAAA;gBACD,gBAAgB;AAChB,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,KAAK,EAAE;AACR;AACF;SACF;IACH;IAEA,OAAO,UAAU,CAAC,MAAiC,EAAA;QACjD,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE,MAAM,GAAG;AAClB,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM;AACzC;aACF,GAAG;SACL;IACH;wGA7BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,CATxB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAGvB,YAAY,aAGZ,uBAAuB,CAAA,EAAA,CAAA;AAGd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YANxB,YAAY,CAAA,EAAA,CAAA;;4FAMH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;ACnBD;;AAEG;;MCaU,oBAAoB,CAAA;AAErB,IAAA,SAAA;AACA,IAAA,MAAA;IAFV,WAAA,CACU,SAA2B,EAC3B,MAAc,EAAA;QADd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;IAEH,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;;QAG1B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG;QACtD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,SAAS;AAElE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACrC,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,WAAW,IAAG;YAChB,IAAI,CAAC,WAAW,EAAE;;AAEhB,gBAAA,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC;AACxD,gBAAA,OAAO,IAAI;AACZ,YAAA;;YAGD,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,SAAS,GAAG,YAAY,EAAE;AAClE,gBAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE;oBACtC,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,UAAU,EAAE,WAAW,CAAC;AACzB,iBAAA,CAAC;;gBAGF,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,EAAE;AAClD,oBAAA,WAAW,EAAE;wBACX,MAAM,EAAE,WAAW,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM;wBACjD,SAAS,EAAE,KAAK,CAAC;AAClB;AACF,iBAAA,CAAC;AACH,YAAA;;AAGD,YAAA,OAAO,IAAI;QACb,CAAC,CAAC,CACH;IACH;wGA5CW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import TraceTail from '@tracetail/js';
|
|
3
|
+
import type { ComplianceContext } from '@tracetail/js';
|
|
3
4
|
import { TraceTailConfig, Fingerprint, TrackingResult, FraudResult } from './tracetail.types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class TraceTailService {
|
|
@@ -39,6 +40,17 @@ export declare class TraceTailService {
|
|
|
39
40
|
* Get raw TraceTail client instance
|
|
40
41
|
*/
|
|
41
42
|
getClient(): TraceTail;
|
|
43
|
+
/**
|
|
44
|
+
* Return client-side privacy / region compliance signals (GPC, DNT, timezone,
|
|
45
|
+
* locale, inferred region, and a conservative `likelyRequiresConsent` hint).
|
|
46
|
+
*
|
|
47
|
+
* These are CLIENT-SIDE HEURISTICS, not authoritative geolocation, and do NOT
|
|
48
|
+
* gate or alter fingerprint collection. Use `likelyRequiresConsent` together
|
|
49
|
+
* with your own consent state to decide whether to collect a fingerprint —
|
|
50
|
+
* obtaining consent where required (EU ePrivacy/GDPR, UK PECR, etc.) is the
|
|
51
|
+
* merchant's responsibility.
|
|
52
|
+
*/
|
|
53
|
+
getComplianceContext(): ComplianceContext;
|
|
42
54
|
static ɵfac: i0.ɵɵFactoryDeclaration<TraceTailService, never>;
|
|
43
55
|
static ɵprov: i0.ɵɵInjectableDeclaration<TraceTailService>;
|
|
44
56
|
}
|
package/dist/public-api.d.ts
CHANGED
|
@@ -8,3 +8,5 @@ export * from './lib/tracetail.types';
|
|
|
8
8
|
export * from './lib/directives/fraud-detection.directive';
|
|
9
9
|
export * from './lib/interceptors/tracetail.interceptor';
|
|
10
10
|
export * from './lib/guards/fraud-protection.guard';
|
|
11
|
+
export { getComplianceContext } from '@tracetail/js';
|
|
12
|
+
export type { ComplianceContext, ComplianceRegion } from '@tracetail/js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracetail/angular",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.15",
|
|
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.15"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@angular/common": "^17.0.0",
|