@quadible/web-sdk
Version:
The web sdk for Quadible's behavioral authentication service.
125 lines • 4.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const eventemitter2_1 = require("eventemitter2");
class EventCollector extends eventemitter2_1.EventEmitter2 {
isCollecting = false;
name = 'WebGenericEvents';
data = [];
constructor() {
super();
this.registerGamepadEventListeners();
this.registerClipboardListeners();
this.registerBatteryListeners();
}
flush() {
return this.data.splice(0);
}
async isAvailable() {
return true;
}
start() {
this.isCollecting = true;
this.collect();
}
stop() {
this.isCollecting = false;
}
async registerBatteryListeners() {
const battery = await navigator?.getBattery?.();
if (battery) {
this.data.push({
kind: "battery" /* EventKind.Battery */,
timestamp: Date.now(),
event: 'battery',
charging: battery.charging,
chargingTime: battery.chargingTime,
dischargingTime: battery.dischargingTime,
level: battery.level
});
const listener = (event) => {
this.data.push({
kind: event.type,
timestamp: Date.now(),
event: event.type,
charging: battery.charging,
chargingTime: battery.chargingTime,
dischargingTime: battery.dischargingTime,
level: battery.level
});
};
battery.addEventListener?.('chargingchange', listener);
battery.addEventListener?.('chargingtimechange', listener);
battery.addEventListener?.('dischargingtimechange', listener);
battery.addEventListener?.('levelchange', listener);
}
}
collect() {
this.data.push({
kind: "getgamepads" /* EventKind.GetGamepads */,
event: 'get-gamepads',
data: this.getGamepads(),
timestamp: Date.now()
});
}
registerClipboardListeners() {
const listener = (event) => {
if (this.isCollecting) {
const el = event.target;
this.data.push({
kind: event.type,
name: event.type,
timestamp: Date.now(),
element: {
tag: el?.tagName,
class: el?.className,
id: el?.id,
name: el?.name,
type: el?.type,
width: el?.clientWidth,
height: el?.clientHeight
}
});
}
};
window.addEventListener('copy', listener);
window.addEventListener('paste', listener);
window.addEventListener('cut', listener);
}
registerGamepadEventListeners() {
const listener = (event) => {
this.data.push({
kind: event.type,
event: event.type,
timestamp: Date.now(),
gamepad: this.getGamepadInfo(event.gamepad)
});
};
window.addEventListener('gamepadconnected', listener);
window.addEventListener('gamepaddisconnected', listener);
}
getGamepads() {
const gamepads = navigator.getGamepads();
const gamepadInfo = [];
if (gamepads?.length) {
for (const gamepad of gamepads) {
if (gamepad) {
gamepadInfo.push(this.getGamepadInfo(gamepad));
}
}
}
return gamepadInfo;
}
getGamepadInfo(gamepad) {
return {
id: gamepad?.id,
index: gamepad?.index,
mapping: gamepad?.mapping,
connected: gamepad?.connected,
axes: gamepad?.axes,
buttonCount: gamepad?.buttons?.length,
vibrationActuatorType: gamepad?.['vibrationActuator']?.['type']
};
}
}
exports.default = EventCollector;
//# sourceMappingURL=EventCollector.js.map