@quadible/web-sdk
Version:
The web sdk for Quadible's behavioral authentication service.
67 lines • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const eventemitter2_1 = require("eventemitter2");
const sources_1 = require("../common/sources");
const entropy_source_1 = require("../common/utils/entropy_source");
class DeviceCollector extends eventemitter2_1.EventEmitter2 {
sdk;
name = 'WebDevice';
data = [];
isCollecting = false;
constructor(sdk) {
super();
this.sdk = sdk;
}
async start() {
this.isCollecting = true;
await this.collect();
}
stop() {
this.isCollecting = false;
}
flush() {
return this.data.splice(0);
}
async isAvailable() {
return true;
}
async collect() {
const userAgent = navigator.userAgent;
this.data.push({
kind: "deviceinfo" /* EventKind.DeviceInfo */,
timestamp: Date.now(),
userAgent,
viewportWidth: innerWidth,
viewportHeight: innerHeight,
themePreference: this.getThemePreference(),
timezoneOffset: new Date().getTimezoneOffset(),
language: navigator?.language || navigator?.userLanguage,
languages: navigator?.languages
});
try {
const components = await (0, entropy_source_1.loadSources)(sources_1.sources, { cache: {}, debug: true }, [])();
this.data.push({
kind: "deviceproperties" /* EventKind.DeviceProperties */,
timestamp: Date.now(),
components
});
}
catch (error) {
this.sdk.emit('error', error);
}
}
getThemePreference() {
let theming = 'unknown';
if (window.matchMedia) {
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
theming = 'dark';
}
else {
theming = 'default';
}
}
return theming;
}
}
exports.default = DeviceCollector;
//# sourceMappingURL=DeviceCollector.js.map