import $ from 'jquery'; import { JSONRPC } from '@/json-rpc.js'; let tokens = []; async function loadTokens() { try { tokens = await JSONRPC.Auth.listTokens(); tokens = tokens || []; return true; } catch (e) { console.error('Ошибка при загрузке токенов:', e); tokens = []; return false; } } function renderTokenList() { const $listContainer = $('#api-token-container'); const createButtonHtml = ` `; if (tokens.length === 0) { $listContainer.html(createButtonHtml + '

Активных API токенов не найдено.

'); attachEventHandlers(); return; } const listHtml = tokens.map(item => { const displayToken = item.token ? `${item.token.substring(0, 8)}...${item.token.substring(item.token.length - 4)}` : 'Неизвестный токен'; return `
  • ${item.description}
    Ключ: ${displayToken}
  • `; }).join(''); const html = ` ${createButtonHtml} `; $listContainer.html(html); attachEventHandlers(); } function showCreateTokenModal() { const description = prompt('Введите описание для нового API токена (например, "Токен для Telegram бота"):'); if (description === null) { return; } if (description.trim() === '') { alert('Описание токена не может быть пустым.'); return; } createToken(description.trim()); } async function createToken(description) { const $btn = $('#create-token-btn'); const $message = $('#token-status-message'); $message.hide().removeClass('error-message').addClass('success-message'); $btn.prop('disabled', true).text('Создание...'); try { const newTokenValue = await JSONRPC.Auth.createAPIToken(description); if (!newTokenValue) { throw new Error('Сервер не вернул токен.'); } prompt('ВАЖНО: Ваш новый токен API. Сохраните его, он больше не будет показан!', newTokenValue); await loadTokens(); renderTokenList(); $message.text(`Токен "${description}" успешно создан.`).show(); } catch (e) { console.error('Ошибка создания токена:', e); $message.removeClass('success-message').addClass('error-message').text('Ошибка при создании токена.').show(); } finally { $btn.prop('disabled', false).text('Создать токен API'); setTimeout(() => $message.fadeOut(), 8000); } } async function deleteToken(token) { if (!confirm('Вы уверены, что хотите удалить этот API токен?')) { return; } const $item = $(`li.token-item[data-full-token="${token}"]`); $item.addClass('deleting').css('opacity', 0.5); try { await JSONRPC.Auth.removeToken(token); tokens = tokens.filter(item => item.token !== token); renderTokenList(); const $message = $('#token-status-message'); $message.text('Токен успешно удален.').addClass('success-message').show(); } catch (e) { console.error('Ошибка удаления токена:', e); $item.removeClass('deleting').css('opacity', 1); const $message = $('#token-status-message'); $message.removeClass('success-message').addClass('error-message').text('Ошибка при удалении токена.').show(); } } function attachEventHandlers() { $('#create-token-btn').off('click').on('click', showCreateTokenModal); $('#api-token-container').off('click', '.delete-token-btn').on('click', '.delete-token-btn', function () { const tokenToDelete = $(this).data('token'); if (tokenToDelete) { deleteToken(tokenToDelete); } }); } export const APITokens = { render: () => `

    API Токены

    Загрузка токенов...

    `, mount: async () => { const success = await loadTokens(); if (success) { renderTokenList(); } else { $('#api-token-container').html('

    Не удалось загрузить токены. Проверьте соединение с сервером.

    '); } }, unmount: () => { tokens = []; $('#api-token-container').off(); } };