стек
Кейс.
Токен авторизации живет 10минут.
Пользователь авторизуется в системе. Проявляет какую-то активность, но не отправляет запросов. Его разлогинивает т.к устаревает токен.
Придуманное решение. Отслеживаю активность пользователя (например движение мышки), запускаю интервал, в котором на 10 минуте проверяю, были ли движения мыши и отправляю фоновый запрос чтобы продлить токен.
Вопрос. Как правильно это реализовать в моем стеке? Именно как скомпоновать?
Текущее решение выглядит так, но я явно понимаю что нужно это сделать как-то в флоу саг
export class Tracker {
constructor({trackEvents, dropActivityTimeMs}) {
this.dropActivityTimeMs = dropActivityTimeMs;
this.trackEvents = trackEvents;
this.wasActivity = false;
this.dropActivityIntervalId = null;
}
restartDropActivity() {
clearInterval(this.dropActivityIntervalId);
console.log('Обнуление активности перезапущено');
this.dropActivityIntervalId = setInterval(() => {
this.wasActivity = false;
}, this.dropActivityTimeMs);
}
init() {
this.trackEvents.forEach(event => {
document.addEventListener(event, () => {
console.log(`Было событие ${event}`);
this.wasActivity = true;
this.restartDropActivity();
});
})
}
}
//в корне приложения вызываю
const events = ['mousemove'];
const tracker = new Tracker({
trackEvents: events,
dropActivityTimeMs: 5000,
});
const prolongateAfterMs = 3000;
tracker.init();
setInterval(() => {
console.log(`активность в последние ${tracker.dropActivityTimeMs}ms`, tracker.wasActivity);
if (tracker.wasActivity) {
api.updateToken();
}
}, prolongateAfterMs);