@tracetail/angular 2.3.7 → 2.3.8
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.
|
@@ -49,14 +49,16 @@ export class TraceTailService {
|
|
|
49
49
|
try {
|
|
50
50
|
this.loadingSubject.next(true);
|
|
51
51
|
this.errorSubject.next(null);
|
|
52
|
-
|
|
52
|
+
// Use verbose: true to get components in the response
|
|
53
|
+
const result = await this.client.generateFingerprint({ verbose: true });
|
|
53
54
|
const fingerprint = {
|
|
54
55
|
visitorId: result.visitorId,
|
|
55
56
|
confidence: result.confidence,
|
|
56
57
|
riskScore: 0,
|
|
57
58
|
fraudulent: false,
|
|
58
59
|
signals: result.components || {},
|
|
59
|
-
timestamp: new Date()
|
|
60
|
+
timestamp: new Date(),
|
|
61
|
+
processingTime: result.processingTime
|
|
60
62
|
};
|
|
61
63
|
this.fingerprintSubject.next(fingerprint);
|
|
62
64
|
this.loadingSubject.next(false);
|
|
@@ -177,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
177
179
|
type: Inject,
|
|
178
180
|
args: [TRACETAIL_CONFIG]
|
|
179
181
|
}] }] });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYWNldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sU0FBUyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFXdEQsTUFBTSxPQUFPLGdCQUFnQjtJQVVtQjtJQVR0QyxNQUFNLENBQVk7SUFDbEIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQ25FLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7SUFFL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxQyxZQUE4QyxNQUF1QjtRQUF2QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUk7WUFDRixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29C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QkFDbkI7OzBCQVdjLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IFRyYWNlVGFpbCBmcm9tICdAdHJhY2V0YWlsL2pzJztcbmltcG9ydCB7IFRSQUNFVEFJTF9DT05GSUcgfSBmcm9tICcuL3RyYWNldGFpbC5jb25maWcnO1xuaW1wb3J0IHsgXG4gIFRyYWNlVGFpbENvbmZpZywgXG4gIEZpbmdlcnByaW50LCBcbiAgVHJhY2tpbmdSZXN1bHQsIFxuICBGcmF1ZFJlc3VsdCBcbn0gZnJvbSAnLi90cmFjZXRhaWwudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFjZVRhaWxTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjbGllbnQ6IFRyYWNlVGFpbDtcbiAgcHJpdmF0ZSBmaW5nZXJwcmludFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbmdlcnByaW50IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXJyb3IgfCBudWxsPihudWxsKTtcblxuICBmaW5nZXJwcmludCQgPSB0aGlzLmZpbmdlcnByaW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgbG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBlcnJvciQgPSB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRSQUNFVEFJTF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBUcmFjZVRhaWxDb25maWcpIHtcbiAgICB0aGlzLmluaXRpYWxpemVDbGllbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNsaWVudCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgLy8gSGFuZGxlIHRlc3QgbW9kZVxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNvbmZpZz8udGVzdE1vZGUgJiYgdGhpcy5jb25maWcuY29uZmlnLm1vY2tEYXRhKSB7XG4gICAgICAgIHRoaXMuZmluZ2VycHJpbnRTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIHZpc2l0b3JJZDogJ21vY2stdmlzaXRvci0xMjMnLFxuICAgICAgICAgIGNvbmZpZGVuY2U6IDAuOTksXG4gICAgICAgICAgcmlza1Njb3JlOiAwLjEsXG4gICAgICAgICAgZnJhdWR1bGVudDogZmFsc2UsXG4gICAgICAgICAgc2lnbmFsczoge30sXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmNvbmZpZy5tb2NrRGF0YVxuICAgICAgICB9IGFzIEZpbmdlcnByaW50KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJbml0aWFsaXplIHJlYWwgY2xpZW50XG4gICAgICB0aGlzLmNsaWVudCA9IG5ldyBUcmFjZVRhaWwoe1xuICAgICAgICBhcGlLZXk6IHRoaXMuY29uZmlnLmFwaUtleSxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWcuY29uZmlnPy50aW1lb3V0LFxuICAgICAgICBkZWJ1ZzogdGhpcy5jb25maWcuY29uZmlnPy5kZWJ1ZyB8fCBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEdldCBpbml0aWFsIGZpbmdlcnByaW50XG4gICAgICB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRGaW5nZXJwcmludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2VuZXJhdGVGaW5nZXJwcmludCh7IGluY2x1ZGVDb21wb25lbnRzOiB0cnVlIH0pO1xuXG4gICAgICBjb25zdCBmaW5nZXJwcmludDogRmluZ2VycHJpbnQgPSB7XG4gICAgICAgIHZpc2l0b3JJZDogcmVzdWx0LnZpc2l0b3JJZCxcbiAgICAgICAgY29uZmlkZW5jZTogcmVzdWx0LmNvbmZpZGVuY2UsXG4gICAgICAgIHJpc2tTY29yZTogMCwgIC8vIERlZmF1bHQgdmFsdWUgLSBub3QgaW4gYmFzZSBTREtcbiAgICAgICAgZnJhdWR1bGVudDogZmFsc2UsICAvLyBEZWZhdWx0IHZhbHVlIC0gbm90IGluIGJhc2UgU0RLXG4gICAgICAgIHNpZ25hbHM6IHJlc3VsdC5jb21wb25lbnRzIHx8IHt9LFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKClcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZmluZ2VycHJpbnRTdWJqZWN0Lm5leHQoZmluZ2VycHJpbnQpO1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBjb25zb2xlLmVycm9yKCdUcmFjZVRhaWwgZXJyb3I6JywgZXJyb3IpO1xuICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoZXJyb3IpO1xuICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZmluZ2VycHJpbnQgYXMgYSBwcm9taXNlXG4gICAqL1xuICBhc3luYyBnZXRGaW5nZXJwcmludCgpOiBQcm9taXNlPEZpbmdlcnByaW50PiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZmluZ2VycHJpbnRTdWJqZWN0LnZhbHVlO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG5cbiAgICAvLyBXYWl0IGZvciBmaW5nZXJwcmludCB0byBiZSBsb2FkZWRcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5maW5nZXJwcmludCQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGZpbmdlcnByaW50KSA9PiB7XG4gICAgICAgICAgaWYgKGZpbmdlcnByaW50KSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmluZ2VycHJpbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIGFuIGV2ZW50XG4gICAqL1xuICBhc3luYyB0cmFja0V2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPFRyYWNraW5nUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyYWNlVGFpbCBkb2Vzbid0IGhhdmUgYSB0cmFjayBtZXRob2QgLSB0aGlzIGlzIGN1c3RvbSBhcHAgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gRm9yIG5vdywganVzdCByZXR1cm4gbW9jayBkYXRhIHdpdGggYSBnZW5lcmF0ZWQgZXZlbnQgSURcbiAgICAgIGNvbnN0IGV2ZW50SWQgPSBgZXZ0XyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgZnJhdWR1bGVudDogZmFsc2UsXG4gICAgICAgIHJpc2tTY29yZTogMCxcbiAgICAgICAgZXZlbnRJZDogZXZlbnRJZFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignVHJhY2sgZXZlbnQgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBmcmF1ZFxuICAgKi9cbiAgYXN5bmMgY2hlY2tGcmF1ZChkYXRhOiBhbnkpOiBQcm9taXNlPEZyYXVkUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmdlcnByaW50ID0gYXdhaXQgdGhpcy5nZXRGaW5nZXJwcmludCgpO1xuICAgICAgXG4gICAgICAvLyBTaW1wbGUgZnJhdWQgZGV0ZWN0aW9uIGxvZ2ljIGJhc2VkIG9uIHJpc2sgc2NvcmVcbiAgICAgIGNvbnN0IGJsb2NrID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC44O1xuICAgICAgY29uc3QgY2hhbGxlbmdlID0gZmluZ2VycHJpbnQucmlza1Njb3JlID4gMC41ICYmIGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjg7XG4gICAgICBjb25zdCBhbGxvdyA9IGZpbmdlcnByaW50LnJpc2tTY29yZSA8PSAwLjU7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlYXNvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBzaWduYWxzID0gZmluZ2VycHJpbnQuc2lnbmFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGlmIChzaWduYWxzPy52cG4pIHJlYXNvbnMucHVzaCgnVlBOIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8udG9yKSByZWFzb25zLnB1c2goJ1RvciBicm93c2VyIGRldGVjdGVkJyk7XG4gICAgICBpZiAoc2lnbmFscz8ucHJveHkpIHJlYXNvbnMucHVzaCgnUHJveHkgZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjcpIHJlYXNvbnMucHVzaCgnSGlnaCByaXNrIHNjb3JlJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJsb2NrLFxuICAgICAgICBjaGFsbGVuZ2UsXG4gICAgICAgIGFsbG93LFxuICAgICAgICByaXNrU2NvcmU6IGZpbmdlcnByaW50LnJpc2tTY29yZSxcbiAgICAgICAgcmVhc29uc1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRnJhdWQgY2hlY2sgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJ5IGZpbmdlcnByaW50aW5nXG4gICAqL1xuICByZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHJlZnJlc2ggZmluZ2VycHJpbnRcbiAgICovXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmF3IFRyYWNlVGFpbCBjbGllbnQgaW5zdGFuY2VcbiAgICovXG4gIGdldENsaWVudCgpOiBUcmFjZVRhaWwge1xuICAgIHJldHVybiB0aGlzLmNsaWVudDtcbiAgfVxufSJdfQ==
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYWNldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sU0FBUyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFXdEQsTUFBTSxPQUFPLGdCQUFnQjtJQVVtQjtJQVR0QyxNQUFNLENBQVk7SUFDbEIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQ25FLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7SUFFL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxQyxZQUE4QyxNQUF1QjtRQUF2QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUk7WUFDRixtQkFBbUI7WUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29C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Z0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFXYyxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBUcmFjZVRhaWwgZnJvbSAnQHRyYWNldGFpbC9qcyc7XG5pbXBvcnQgeyBUUkFDRVRBSUxfQ09ORklHIH0gZnJvbSAnLi90cmFjZXRhaWwuY29uZmlnJztcbmltcG9ydCB7IFxuICBUcmFjZVRhaWxDb25maWcsIFxuICBGaW5nZXJwcmludCwgXG4gIFRyYWNraW5nUmVzdWx0LCBcbiAgRnJhdWRSZXN1bHQgXG59IGZyb20gJy4vdHJhY2V0YWlsLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhY2VUYWlsU2VydmljZSB7XG4gIHByaXZhdGUgY2xpZW50OiBUcmFjZVRhaWw7XG4gIHByaXZhdGUgZmluZ2VycHJpbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaW5nZXJwcmludCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBlcnJvclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVycm9yIHwgbnVsbD4obnVsbCk7XG5cbiAgZmluZ2VycHJpbnQkID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgZXJyb3IkID0gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChUUkFDRVRBSUxfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVHJhY2VUYWlsQ29uZmlnKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ2xpZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDbGllbnQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEhhbmRsZSB0ZXN0IG1vZGVcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb25maWc/LnRlc3RNb2RlICYmIHRoaXMuY29uZmlnLmNvbmZpZy5tb2NrRGF0YSkge1xuICAgICAgICB0aGlzLmZpbmdlcnByaW50U3ViamVjdC5uZXh0KHtcbiAgICAgICAgICB2aXNpdG9ySWQ6ICdtb2NrLXZpc2l0b3ItMTIzJyxcbiAgICAgICAgICBjb25maWRlbmNlOiAwLjk5LFxuICAgICAgICAgIHJpc2tTY29yZTogMC4xLFxuICAgICAgICAgIGZyYXVkdWxlbnQ6IGZhbHNlLFxuICAgICAgICAgIHNpZ25hbHM6IHt9LFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZy5jb25maWcubW9ja0RhdGFcbiAgICAgICAgfSBhcyBGaW5nZXJwcmludCk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSByZWFsIGNsaWVudFxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgVHJhY2VUYWlsKHtcbiAgICAgICAgYXBpS2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLmNvbmZpZz8udGltZW91dCxcbiAgICAgICAgZGVidWc6IHRoaXMuY29uZmlnLmNvbmZpZz8uZGVidWcgfHwgZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgaW5pdGlhbCBmaW5nZXJwcmludFxuICAgICAgdGhpcy5sb2FkRmluZ2VycHJpbnQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmluZ2VycHJpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgIC8vIFVzZSB2ZXJib3NlOiB0cnVlIHRvIGdldCBjb21wb25lbnRzIGluIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2VuZXJhdGVGaW5nZXJwcmludCh7IHZlcmJvc2U6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGZpbmdlcnByaW50OiBGaW5nZXJwcmludCA9IHtcbiAgICAgICAgdmlzaXRvcklkOiByZXN1bHQudmlzaXRvcklkLFxuICAgICAgICBjb25maWRlbmNlOiByZXN1bHQuY29uZmlkZW5jZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLCAgLy8gRGVmYXVsdCB2YWx1ZSAtIG5vdCBpbiBiYXNlIFNES1xuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSwgIC8vIERlZmF1bHQgdmFsdWUgLSBub3QgaW4gYmFzZSBTREtcbiAgICAgICAgc2lnbmFsczogcmVzdWx0LmNvbXBvbmVudHMgfHwge30sXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgcHJvY2Vzc2luZ1RpbWU6IHJlc3VsdC5wcm9jZXNzaW5nVGltZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5maW5nZXJwcmludFN1YmplY3QubmV4dChmaW5nZXJwcmludCk7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RyYWNlVGFpbCBlcnJvcjonLCBlcnJvcik7XG4gICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmaW5nZXJwcmludCBhcyBhIHByb21pc2VcbiAgICovXG4gIGFzeW5jIGdldEZpbmdlcnByaW50KCk6IFByb21pc2U8RmluZ2VycHJpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maW5nZXJwcmludFN1YmplY3QudmFsdWU7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIC8vIFdhaXQgZm9yIGZpbmdlcnByaW50IHRvIGJlIGxvYWRlZFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZpbmdlcnByaW50JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmluZ2VycHJpbnQpID0+IHtcbiAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzb2x2ZShmaW5nZXJwcmludCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgYW4gZXZlbnRcbiAgICovXG4gIGFzeW5jIHRyYWNrRXZlbnQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSk6IFByb21pc2U8VHJhY2tpbmdSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVHJhY2VUYWlsIGRvZXNuJ3QgaGF2ZSBhIHRyYWNrIG1ldGhvZCAtIHRoaXMgaXMgY3VzdG9tIGFwcCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBGb3Igbm93LCBqdXN0IHJldHVybiBtb2NrIGRhdGEgd2l0aCBhIGdlbmVyYXRlZCBldmVudCBJRFxuICAgICAgY29uc3QgZXZlbnRJZCA9IGBldnRfJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBmcmF1ZHVsZW50OiBmYWxzZSxcbiAgICAgICAgcmlza1Njb3JlOiAwLFxuICAgICAgICBldmVudElkOiBldmVudElkXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUcmFjayBldmVudCBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIGZyYXVkXG4gICAqL1xuICBhc3luYyBjaGVja0ZyYXVkKGRhdGE6IGFueSk6IFByb21pc2U8RnJhdWRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluZ2VycHJpbnQgPSBhd2FpdCB0aGlzLmdldEZpbmdlcnByaW50KCk7XG4gICAgICBcbiAgICAgIC8vIFNpbXBsZSBmcmF1ZCBkZXRlY3Rpb24gbG9naWMgYmFzZWQgb24gcmlzayBzY29yZVxuICAgICAgY29uc3QgYmxvY2sgPSBmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjg7XG4gICAgICBjb25zdCBjaGFsbGVuZ2UgPSBmaW5nZXJwcmludC5yaXNrU2NvcmUgPiAwLjUgJiYgZmluZ2VycHJpbnQucmlza1Njb3JlIDw9IDAuODtcbiAgICAgIGNvbnN0IGFsbG93ID0gZmluZ2VycHJpbnQucmlza1Njb3JlIDw9IDAuNTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVhc29uczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHNpZ25hbHMgPSBmaW5nZXJwcmludC5zaWduYWxzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgaWYgKHNpZ25hbHM/LnZwbikgcmVhc29ucy5wdXNoKCdWUE4gZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChzaWduYWxzPy50b3IpIHJlYXNvbnMucHVzaCgnVG9yIGJyb3dzZXIgZGV0ZWN0ZWQnKTtcbiAgICAgIGlmIChzaWduYWxzPy5wcm94eSkgcmVhc29ucy5wdXNoKCdQcm94eSBkZXRlY3RlZCcpO1xuICAgICAgaWYgKGZpbmdlcnByaW50LnJpc2tTY29yZSA+IDAuNykgcmVhc29ucy5wdXNoKCdIaWdoIHJpc2sgc2NvcmUnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIGNoYWxsZW5nZSxcbiAgICAgICAgYWxsb3csXG4gICAgICAgIHJpc2tTY29yZTogZmluZ2VycHJpbnQucmlza1Njb3JlLFxuICAgICAgICByZWFzb25zXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGcmF1ZCBjaGVjayBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cnkgZmluZ2VycHJpbnRpbmdcbiAgICovXG4gIHJldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEZpbmdlcnByaW50KCk7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgcmVmcmVzaCBmaW5nZXJwcmludFxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRGaW5nZXJwcmludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByYXcgVHJhY2VUYWlsIGNsaWVudCBpbnN0YW5jZVxuICAgKi9cbiAgZ2V0Q2xpZW50KCk6IFRyYWNlVGFpbCB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50O1xuICB9XG59Il19
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* TraceTail types for Angular
|
|
3
3
|
*/
|
|
4
4
|
export {};
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2V0YWlsLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFjZXRhaWwudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYWNlVGFpbCB0eXBlcyBmb3IgQW5ndWxhclxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZ2VycHJpbnQge1xuICB2aXNpdG9ySWQ6IHN0cmluZztcbiAgY29uZmlkZW5jZTogbnVtYmVyO1xuICByaXNrU2NvcmU6IG51bWJlcjtcbiAgZnJhdWR1bGVudDogYm9vbGVhbjtcbiAgc2lnbmFsczogdW5rbm93bjtcbiAgdGltZXN0YW1wOiBEYXRlO1xuICBwcm9jZXNzaW5nVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxEYXRhIHtcbiAgYnJvd3Nlcjogc3RyaW5nO1xuICBvczogc3RyaW5nO1xuICBkZXZpY2U6IHN0cmluZztcbiAgc2NyZWVuOiB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBjb2xvckRlcHRoOiBudW1iZXI7XG4gIH07XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHBsdWdpbnM6IHN0cmluZ1tdO1xuICBmb250czogc3RyaW5nW107XG4gIGNhbnZhczogc3RyaW5nO1xuICB3ZWJnbDogc3RyaW5nO1xuICBhdWRpbzogc3RyaW5nO1xuICB2cG46IGJvb2xlYW47XG4gIHRvcjogYm9vbGVhbjtcbiAgcHJveHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tpbmdSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBmcmF1ZHVsZW50OiBib29sZWFuO1xuICByaXNrU2NvcmU6IG51bWJlcjtcbiAgZXZlbnRJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyYXVkUmVzdWx0IHtcbiAgYmxvY2s6IGJvb2xlYW47XG4gIGNoYWxsZW5nZTogYm9vbGVhbjtcbiAgYWxsb3c6IGJvb2xlYW47XG4gIHJpc2tTY29yZTogbnVtYmVyO1xuICByZWFzb25zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFjZVRhaWxDb25maWcge1xuICBhcGlLZXk6IHN0cmluZztcbiAgY29uZmlnPzoge1xuICAgIGVuaGFuY2VkPzogYm9vbGVhbjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIGVuZHBvaW50Pzogc3RyaW5nO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB0ZXN0TW9kZT86IGJvb2xlYW47XG4gICAgbW9ja0RhdGE/OiBQYXJ0aWFsPEZpbmdlcnByaW50PjtcbiAgfTtcbn0iXX0=
|
|
@@ -63,14 +63,16 @@ class TraceTailService {
|
|
|
63
63
|
try {
|
|
64
64
|
this.loadingSubject.next(true);
|
|
65
65
|
this.errorSubject.next(null);
|
|
66
|
-
|
|
66
|
+
// Use verbose: true to get components in the response
|
|
67
|
+
const result = await this.client.generateFingerprint({ verbose: true });
|
|
67
68
|
const fingerprint = {
|
|
68
69
|
visitorId: result.visitorId,
|
|
69
70
|
confidence: result.confidence,
|
|
70
71
|
riskScore: 0,
|
|
71
72
|
fraudulent: false,
|
|
72
73
|
signals: result.components || {},
|
|
73
|
-
timestamp: new Date()
|
|
74
|
+
timestamp: new Date(),
|
|
75
|
+
processingTime: result.processingTime
|
|
74
76
|
};
|
|
75
77
|
this.fingerprintSubject.next(fingerprint);
|
|
76
78
|
this.loadingSubject.next(false);
|
|
@@ -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 const result = await this.client.generateFingerprint({ includeComponents: 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 };\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}\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 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracetail/angular",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
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.8"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@angular/common": "^17.0.0",
|