UNPKG

@filemap/events-sdk

Version:

SDK for Filemap events. Desktop client for Filemap dev server.

89 lines 3.6 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KeyManager = void 0; const tsyringe_1 = require("tsyringe"); const logger_service_1 = require("./logger.service"); let KeyManager = class KeyManager { logger; keys = {}; expirationTimers = new Map(); constructor(logger) { this.logger = logger; } setKey(referrer, keyData) { const expirationTime = new Date(keyData.expirationTime); const now = new Date(); if (expirationTime <= now) { this.logger.debug(`Key ${keyData.uuid} from ${referrer} is already expired, not setting`); return false; } const existingTimer = this.expirationTimers.get(referrer); if (existingTimer) { clearTimeout(existingTimer); } this.keys[referrer] = keyData; this.logger.debug(`Key ${keyData.uuid} set successfully for ${referrer}`); const timeUntilExpiration = expirationTime.getTime() - now.getTime(); const timer = setTimeout(() => { this.expireKey(referrer); }, timeUntilExpiration); this.expirationTimers.set(referrer, timer); this.logger.debug(`Key for ${referrer} will expire in ${Math.round(timeUntilExpiration / 1000)} seconds`); return true; } expireKey(referrer) { const key = this.keys[referrer]; if (key) { this.logger.debug(`Key ${key.uuid} from ${referrer} has expired`); delete this.keys[referrer]; } const timer = this.expirationTimers.get(referrer); if (timer) { clearTimeout(timer); this.expirationTimers.delete(referrer); } } getKey(referrer) { return this.keys[referrer] || null; } hasValidKey(referrer) { const key = this.keys[referrer]; if (!key) return false; const expirationTime = new Date(key.expirationTime); const now = new Date(); if (expirationTime <= now) { this.expireKey(referrer); return false; } return true; } getAllReferrers() { return Object.keys(this.keys); } cleanup() { this.expirationTimers.forEach((timer) => { clearTimeout(timer); }); this.expirationTimers.clear(); this.keys = {}; } }; exports.KeyManager = KeyManager; exports.KeyManager = KeyManager = __decorate([ (0, tsyringe_1.singleton)(), (0, tsyringe_1.injectable)(), __param(0, (0, tsyringe_1.inject)(logger_service_1.Logger)), __metadata("design:paramtypes", [logger_service_1.Logger]) ], KeyManager); //# sourceMappingURL=key-manager.service.js.map