UNPKG

@bugspotter/sdk

Version:

Professional bug reporting SDK with screenshots, session replay, and automatic error capture for web applications

77 lines (76 loc) 2.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetadataCapture = void 0; const base_capture_1 = require("./base-capture"); class MetadataCapture extends base_capture_1.BaseCapture { constructor(options = {}) { super(options); this.browserPatterns = [ { pattern: 'Edg', name: 'Edge' }, // Check Edge before Chrome { pattern: 'Chrome', exclude: 'Edge', name: 'Chrome' }, { pattern: 'Firefox', name: 'Firefox' }, { pattern: 'Safari', exclude: 'Chrome', name: 'Safari' }, ]; this.osPatterns = [ { patterns: ['iPhone', 'iPad'], name: 'iOS' }, // Check iOS before Mac { patterns: ['Android'], name: 'Android' }, // Check Android before Linux { patterns: ['Win'], name: 'Windows' }, { patterns: ['Mac'], name: 'macOS' }, { patterns: ['Linux'], name: 'Linux' }, ]; } capture() { try { const metadata = { userAgent: navigator.userAgent, viewport: { width: window.innerWidth, height: window.innerHeight, }, browser: this.detectBrowser(), os: this.detectOS(), url: window.location.href, timestamp: Date.now(), }; // Sanitize sensitive data if sanitizer is enabled if (this.sanitizer) { metadata.url = this.sanitizer.sanitize(metadata.url); metadata.userAgent = this.sanitizer.sanitize(metadata.userAgent); } return metadata; } catch (error) { this.handleError('capturing metadata', error); // Return fallback metadata return { userAgent: 'Unknown', viewport: { width: 0, height: 0 }, browser: 'Unknown', os: 'Unknown', url: 'Unknown', timestamp: Date.now(), }; } } detectBrowser() { const ua = navigator.userAgent; for (const { pattern, exclude, name } of this.browserPatterns) { if (ua.includes(pattern) && (!exclude || !ua.includes(exclude))) { return name; } } return 'Unknown'; } detectOS() { const ua = navigator.userAgent; for (const { patterns, name } of this.osPatterns) { if (patterns.some((pattern) => { return ua.includes(pattern); })) { return name; } } return 'Unknown'; } } exports.MetadataCapture = MetadataCapture;