@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
JavaScript
;
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;