solver-sdk
Version:
SDK для интеграции с Code Solver Backend API
109 lines • 4.31 kB
JavaScript
/**
* Класс для хранения токенов сессий в памяти
*/
export class MemorySessionTokenStore {
constructor() {
/** Хранилище токенов */
this.tokens = new Map();
}
/**
* Получить токен сессии для указанного пространства имен
* @param {WebSocketNamespace} namespace Пространство имен
* @returns {string | null} Токен сессии или null, если не найден
*/
getToken(namespace) {
return this.tokens.get(namespace) || null;
}
/**
* Сохранить токен сессии для указанного пространства имен
* @param {WebSocketNamespace} namespace Пространство имен
* @param {string} token Токен сессии
*/
saveToken(namespace, token) {
this.tokens.set(namespace, token);
}
/**
* Удалить токен сессии для указанного пространства имен
* @param {WebSocketNamespace} namespace Пространство имен
*/
removeToken(namespace) {
this.tokens.delete(namespace);
}
/**
* Проверить наличие токена для указанного пространства имен
* @param {WebSocketNamespace} namespace Пространство имен
* @returns {boolean} true, если токен есть
*/
hasToken(namespace) {
return this.tokens.has(namespace);
}
/**
* Очистить все токены
*/
clear() {
this.tokens.clear();
}
}
/**
* Класс для управления токенами сессий WebSocket
*/
export class SessionManager {
/**
* Создает новый менеджер сессий
* @param {SessionManagerOptions} options Опции менеджера сессий
*/
constructor(options = {}) {
/** Хранилище токенов сессий */
this.sessionTokens = new Map();
this.enableSessionPersistence = options.enableSessionPersistence !== false;
this.logger = options.logger || {
debug: () => { },
info: () => { },
warn: () => { },
error: () => { },
withPrefix: () => this.logger
};
}
/**
* Сохраняет токен сессии для пространства имен
* @param {string} namespace Пространство имен
* @param {string} token Токен сессии
*/
saveSessionToken(namespace, token) {
if (!this.enableSessionPersistence) {
this.logger.debug(`Сохранение сессий отключено, игнорируем токен для ${namespace}`);
return;
}
this.logger.debug(`Сохранение токена сессии для ${namespace}`);
this.sessionTokens.set(namespace, token);
}
/**
* Получает токен сессии для пространства имен
* @param {string} namespace Пространство имен
* @returns {string | undefined} Токен сессии или undefined, если не найден
*/
getSessionToken(namespace) {
if (!this.enableSessionPersistence) {
return undefined;
}
const token = this.sessionTokens.get(namespace);
this.logger.debug(`Получение токена сессии для ${namespace}: ${token ? 'найден' : 'не найден'}`);
return token;
}
/**
* Удаляет токен сессии для пространства имен
* @param {string} namespace Пространство имен
*/
clearSessionToken(namespace) {
this.logger.debug(`Удаление токена сессии для ${namespace}`);
this.sessionTokens.delete(namespace);
}
/**
* Удаляет все токены сессий
*/
clearAllSessionTokens() {
this.logger.debug('Удаление всех токенов сессий');
this.sessionTokens.clear();
}
}
//# sourceMappingURL=session-manager.js.map