ваше сообщение коммита

This commit is contained in:
2025-07-06 00:36:20 +03:00
parent 6182c2ced1
commit af3771ad8c
32 changed files with 3935 additions and 3166 deletions

View File

@@ -1,559 +0,0 @@
<template>
<div class="dns-manager">
<h3>Управление DNS записями</h3>
<!-- Индикатор загрузки -->
<div v-if="isLoading" class="loading-section">
<div class="loading-spinner"></div>
<span>Загрузка DNS записей...</span>
</div>
<!-- Сообщения об ошибках -->
<div v-if="errorMessage" class="error-message">
{{ errorMessage }}
</div>
<!-- Сообщения об успехе -->
<div v-if="successMessage" class="success-message">
{{ successMessage }}
</div>
<!-- Таблица DNS записей -->
<div v-if="!isLoading && records.length > 0" class="dns-records-table">
<table>
<thead>
<tr>
<th>Тип</th>
<th>Имя</th>
<th>Содержимое</th>
<th>TTL</th>
<th>Прокси</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<tr v-for="record in records" :key="record.id">
<td>{{ record.type }}</td>
<td>{{ record.name }}</td>
<td class="content-cell">{{ record.content }}</td>
<td>{{ record.ttl === 1 ? 'Auto' : record.ttl }}</td>
<td>
<span v-if="['A', 'AAAA', 'CNAME'].includes(record.type)"
:class="['proxy-status', record.proxied ? 'proxied' : 'not-proxied']">
{{ record.proxied ? 'Да' : 'Нет' }}
</span>
<span v-else>-</span>
</td>
<td class="actions-cell">
<button class="btn-edit" @click="editRecord(record)">
<i class="fas fa-edit"></i>
</button>
<button class="btn-delete" @click="deleteRecord(record.id)"
:disabled="isDeletingRecord === record.id">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Пустое состояние -->
<div v-if="!isLoading && records.length === 0 && !errorMessage" class="empty-state">
<p>DNS записи не найдены</p>
</div>
<!-- Кнопка добавления новой записи -->
<div class="add-record-section" v-if="!isLoading && !errorMessage">
<button class="btn-primary" @click="showAddForm = true" v-if="!showAddForm">
<i class="fas fa-plus"></i> Добавить DNS запись
</button>
</div>
<!-- Форма создания/редактирования DNS записи -->
<div v-if="showAddForm || editingRecord" class="dns-form">
<h4>{{ editingRecord ? 'Редактирование DNS записи' : 'Добавление DNS записи' }}</h4>
<div class="form-row">
<div class="form-group">
<label>Тип записи:</label>
<select v-model="formData.type" class="form-control">
<option value="A">A</option>
<option value="AAAA">AAAA</option>
<option value="CNAME">CNAME</option>
<option value="MX">MX</option>
<option value="TXT">TXT</option>
<option value="SRV">SRV</option>
<option value="NS">NS</option>
</select>
</div>
<div class="form-group">
<label>Имя:</label>
<input v-model="formData.name" type="text" class="form-control"
placeholder="example.com или @" />
</div>
</div>
<div class="form-group">
<label>Содержимое:</label>
<input v-model="formData.content" type="text" class="form-control"
:placeholder="getContentPlaceholder(formData.type)" />
</div>
<div class="form-row">
<div class="form-group">
<label>TTL:</label>
<select v-model="formData.ttl" class="form-control">
<option value="1">Auto</option>
<option value="300">5 минут</option>
<option value="1800">30 минут</option>
<option value="3600">1 час</option>
<option value="14400">4 часа</option>
<option value="86400">1 день</option>
</select>
</div>
<div class="form-group" v-if="['A', 'AAAA', 'CNAME'].includes(formData.type)">
<label>
<input type="checkbox" v-model="formData.proxied" />
Проксировать через Cloudflare
</label>
</div>
</div>
<div class="form-actions">
<button class="btn-primary" @click="saveRecord" :disabled="isSavingRecord">
{{ isSavingRecord ? 'Сохранение...' : (editingRecord ? 'Обновить' : 'Создать') }}
</button>
<button class="btn-secondary" @click="cancelForm">Отмена</button>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue';
const emit = defineEmits(['dns-updated']);
const records = ref([]);
const isLoading = ref(false);
const errorMessage = ref('');
const successMessage = ref('');
const showAddForm = ref(false);
const editingRecord = ref(null);
const isSavingRecord = ref(false);
const isDeletingRecord = ref(null);
const formData = ref({
type: 'A',
name: '',
content: '',
ttl: 1,
proxied: false
});
// Загрузка DNS записей
async function loadDnsRecords() {
isLoading.value = true;
errorMessage.value = '';
try {
const response = await fetch('/api/cloudflare/dns-records');
const data = await response.json();
if (data.success) {
records.value = data.records || [];
} else {
errorMessage.value = data.message || 'Ошибка загрузки DNS записей';
}
} catch (e) {
errorMessage.value = 'Ошибка соединения: ' + e.message;
} finally {
isLoading.value = false;
}
}
// Получение placeholder для поля content в зависимости от типа записи
function getContentPlaceholder(type) {
const placeholders = {
A: '192.168.1.1',
AAAA: '2001:db8::1',
CNAME: 'example.com',
MX: '10 mail.example.com',
TXT: 'v=spf1 include:_spf.google.com ~all',
SRV: '10 5 443 target.example.com',
NS: 'ns1.example.com'
};
return placeholders[type] || 'Введите значение';
}
// Начало редактирования записи
function editRecord(record) {
editingRecord.value = record;
formData.value = {
type: record.type,
name: record.name,
content: record.content,
ttl: record.ttl,
proxied: record.proxied || false
};
showAddForm.value = false;
}
// Сохранение записи (создание или обновление)
async function saveRecord() {
if (!formData.value.name || !formData.value.content) {
errorMessage.value = 'Заполните все обязательные поля';
return;
}
isSavingRecord.value = true;
errorMessage.value = '';
successMessage.value = '';
try {
const body = {
type: formData.value.type,
name: formData.value.name,
content: formData.value.content,
ttl: parseInt(formData.value.ttl),
proxied: formData.value.proxied
};
if (editingRecord.value) {
body.recordId = editingRecord.value.id;
}
const response = await fetch('/api/cloudflare/dns-records', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
const data = await response.json();
if (data.success) {
successMessage.value = data.message || 'DNS запись сохранена';
cancelForm();
await loadDnsRecords();
emit('dns-updated');
// Очищаем сообщение об успехе через 3 секунды
setTimeout(() => {
successMessage.value = '';
}, 3000);
} else {
errorMessage.value = data.message || 'Ошибка сохранения DNS записи';
}
} catch (e) {
errorMessage.value = 'Ошибка соединения: ' + e.message;
} finally {
isSavingRecord.value = false;
}
}
// Удаление записи
async function deleteRecord(recordId) {
if (!confirm('Вы уверены, что хотите удалить эту DNS запись?')) {
return;
}
isDeletingRecord.value = recordId;
errorMessage.value = '';
successMessage.value = '';
try {
const response = await fetch(`/api/cloudflare/dns-records/${recordId}`, {
method: 'DELETE'
});
const data = await response.json();
if (data.success) {
successMessage.value = data.message || 'DNS запись удалена';
await loadDnsRecords();
emit('dns-updated');
// Очищаем сообщение об успехе через 3 секунды
setTimeout(() => {
successMessage.value = '';
}, 3000);
} else {
errorMessage.value = data.message || 'Ошибка удаления DNS записи';
}
} catch (e) {
errorMessage.value = 'Ошибка соединения: ' + e.message;
} finally {
isDeletingRecord.value = null;
}
}
// Отмена формы
function cancelForm() {
showAddForm.value = false;
editingRecord.value = null;
formData.value = {
type: 'A',
name: '',
content: '',
ttl: 1,
proxied: false
};
}
// Очистка сообщений при изменении формы
watch([() => formData.value.type, () => formData.value.name, () => formData.value.content], () => {
errorMessage.value = '';
});
onMounted(() => {
loadDnsRecords();
});
defineExpose({
loadDnsRecords
});
</script>
<style scoped>
.dns-manager {
margin-top: 2rem;
padding: 1.5rem;
border: 1px solid #e1e5e9;
border-radius: 8px;
background: #f8f9fa;
}
.loading-section {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 1rem;
background: #fff;
border-radius: 6px;
border: 1px solid #e1e5e9;
}
.loading-spinner {
width: 16px;
height: 16px;
border: 2px solid #f3f3f3;
border-top: 2px solid var(--color-primary);
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.error-message {
padding: 0.75rem 1rem;
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
border-radius: 6px;
margin-bottom: 1rem;
}
.success-message {
padding: 0.75rem 1rem;
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
border-radius: 6px;
margin-bottom: 1rem;
}
.dns-records-table {
background: #fff;
border-radius: 6px;
overflow: hidden;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.dns-records-table table {
width: 100%;
border-collapse: collapse;
}
.dns-records-table th,
.dns-records-table td {
padding: 0.75rem;
text-align: left;
border-bottom: 1px solid #e1e5e9;
}
.dns-records-table th {
background: #f8f9fa;
font-weight: 600;
color: #495057;
}
.content-cell {
max-width: 200px;
word-break: break-all;
font-family: monospace;
font-size: 0.9em;
}
.proxy-status.proxied {
color: #28a745;
font-weight: 500;
}
.proxy-status.not-proxied {
color: #6c757d;
}
.actions-cell {
width: 100px;
}
.btn-edit,
.btn-delete {
background: none;
border: none;
padding: 0.25rem 0.5rem;
margin: 0 0.25rem;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
}
.btn-edit {
color: #007bff;
}
.btn-edit:hover {
background: #e3f2fd;
}
.btn-delete {
color: #dc3545;
}
.btn-delete:hover {
background: #fdeaea;
}
.btn-delete:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.empty-state {
text-align: center;
padding: 2rem;
color: #6c757d;
background: #fff;
border-radius: 6px;
}
.add-record-section {
margin-top: 1rem;
}
.dns-form {
margin-top: 1.5rem;
padding: 1.5rem;
background: #fff;
border-radius: 6px;
border: 1px solid #e1e5e9;
}
.dns-form h4 {
margin-top: 0;
margin-bottom: 1.5rem;
color: #495057;
}
.form-row {
display: flex;
gap: 1rem;
margin-bottom: 1rem;
}
.form-group {
flex: 1;
margin-bottom: 1rem;
}
.form-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
color: #495057;
}
.form-control {
width: 100%;
padding: 0.5rem 0.75rem;
border: 1px solid #ced4da;
border-radius: 4px;
font-size: 0.9rem;
}
.form-control:focus {
outline: none;
border-color: var(--color-primary);
box-shadow: 0 0 0 2px rgba(0,123,255,0.25);
}
.form-actions {
display: flex;
gap: 0.75rem;
margin-top: 1.5rem;
}
.btn-primary {
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 4px;
padding: 0.5rem 1rem;
cursor: pointer;
font-size: 0.9rem;
transition: background-color 0.2s;
}
.btn-primary:hover {
background: var(--color-primary-dark);
}
.btn-primary:disabled {
opacity: 0.65;
cursor: not-allowed;
}
.btn-secondary {
background: #6c757d;
color: #fff;
border: none;
border-radius: 4px;
padding: 0.5rem 1rem;
cursor: pointer;
font-size: 0.9rem;
transition: background-color 0.2s;
}
.btn-secondary:hover {
background: #5a6268;
}
@media (max-width: 768px) {
.form-row {
flex-direction: column;
}
.dns-records-table {
font-size: 0.8rem;
}
.content-cell {
max-width: 120px;
}
}
</style>

View File

@@ -5,7 +5,7 @@ const SettingsAiView = () => import('../views/settings/AiSettingsView.vue');
const SettingsBlockchainView = () => import('../views/settings/BlockchainSettingsView.vue');
const SettingsSecurityView = () => import('../views/settings/SecuritySettingsView.vue');
const SettingsInterfaceView = () => import('../views/settings/Interface/InterfaceSettingsView.vue');
const SettingsInterfaceCloudflareDetailsView = () => import('../views/settings/Interface/CloudflareDetailsView.vue');
import axios from 'axios';
import { setToStorage } from '../utils/storage.js';
@@ -53,11 +53,7 @@ const routes = [
name: 'settings-interface',
component: SettingsInterfaceView,
},
{
path: 'interface/cloudflare-details',
name: 'settings-interface-cloudflare-details',
component: SettingsInterfaceCloudflareDetailsView,
},
{
path: 'telegram',
name: 'settings-telegram',

View File

@@ -1,115 +0,0 @@
<template>
<div class="domain-block">
<h3>Подключение домена</h3>
<p>Укажите свой домен, чтобы привязать его к опубликованному в IPFS фронтенду. Следуйте инструкции ниже для настройки DNS.</p>
<div class="form-group">
<input v-model="domain" class="form-control" placeholder="example.com" />
<button class="btn-primary" :disabled="loading || !domain" @click="checkDomain">
{{ loading ? 'Проверка...' : 'Проверить' }}
</button>
</div>
<div v-if="error" class="error">Ошибка: {{ error }}</div>
<div v-if="success" class="success">DNS-записи найдены: <pre>{{ records }}</pre></div>
<div class="instruction">
<b>Инструкция по подключению:</b>
<ol>
<li>Опубликуйте фронтенд в IPFS и получите CID.</li>
<li>В панели управления доменом создайте DNS-запись типа <b>CNAME</b> или <b>TXT</b> (или используйте IPFS gateway).</li>
<li>Для CNAME: укажите <code>yourdomain.com CNAME gateway.ipfs.io</code> или аналогичный шлюз.</li>
<li>Для TXT: <code>_dnslink.yourdomain.com TXT dnslink=/ipfs/&lt;ваш CID&gt;</code></li>
<li>Дождитесь обновления DNS и проверьте домен через эту форму.</li>
</ol>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import axios from '../../api/axios';
const domain = ref('');
const loading = ref(false);
const error = ref('');
const success = ref(false);
const records = ref('');
async function checkDomain() {
loading.value = true;
error.value = '';
success.value = false;
records.value = '';
try {
const { data } = await axios.post('/api/settings/interface/check-domain', { domain: domain.value });
if (data.success && data.records) {
records.value = JSON.stringify(data.records, null, 2);
success.value = true;
} else {
error.value = data.error || 'DNS-записи не найдены';
}
} catch (e) {
error.value = e.response?.data?.error || e.message || 'Ошибка запроса';
} finally {
loading.value = false;
}
}
</script>
<style scoped>
.domain-block {
background: #fff;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.04);
padding: 2rem;
margin-bottom: 2rem;
max-width: 500px;
}
.form-group {
display: flex;
gap: 1rem;
margin-bottom: 1rem;
}
.form-control {
flex: 1;
padding: 0.5rem 1rem;
border-radius: 6px;
border: 1px solid #ccc;
font-size: 1rem;
}
.btn-primary {
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 6px;
padding: 0.5rem 1.5rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
}
.btn-primary:disabled {
background: #ccc;
cursor: not-allowed;
}
.success {
margin-top: 1rem;
color: var(--color-success, #2e7d32);
}
.error {
margin-top: 1rem;
color: var(--color-danger, #c62828);
}
.instruction {
margin-top: 1.5rem;
font-size: 0.95em;
color: #555;
background: #f8f8f8;
border-radius: 8px;
padding: 1rem;
}
pre {
background: #f4f4f4;
border-radius: 6px;
padding: 0.5rem;
font-size: 0.95em;
margin: 0.5rem 0 0 0;
}
</style>

View File

@@ -1,346 +0,0 @@
<template>
<div class="cloudflare-details settings-panel">
<button class="close-btn" @click="goBack">×</button>
<h2>Настройка Cloudflare и подключение домена</h2>
<ol class="instruction-block">
<li>Зайдите в свой аккаунт <a href="https://dash.cloudflare.com/" target="_blank">Cloudflare</a> и добавьте ваш домен.</li>
<li>Смените NS-записи у регистратора домена на те, что выдаст Cloudflare (см. <a href="https://developers.cloudflare.com/fundamentals/setup/add-site/ns/" target="_blank">инструкцию</a>).</li>
<li>Дождитесь, когда домен будет обслуживаться Cloudflare (обычно 5-30 минут).</li>
<li>Сгенерируйте <a href="https://dash.cloudflare.com/profile/api-tokens" target="_blank">API Token</a> с правами управления DNS и туннелями.</li>
<li>Введите API Token и домен ниже для автоматической настройки туннеля и DNS.</li>
<li><b>Один раз выполните в терминале WSL2:</b>
<pre style="white-space:pre-line;font-size:0.95em;">curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared noble main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update
sudo apt install cloudflared</pre>
</li>
<li>Нажмите кнопку <b>Автоматически настроить и открыть приложение</b> и дождитесь появления ссылки.</li>
</ol>
<form class="form-block" @submit.prevent="saveToken">
<label>Cloudflare API Token:</label>
<input v-model="apiToken" type="text" class="form-control" placeholder="Введите API Token" />
<button class="btn-primary" type="submit">Сохранить токен</button>
</form>
<div v-if="accounts.length" class="form-block">
<label>Выберите аккаунт Cloudflare:</label>
<select v-model="selectedAccountId" class="form-control">
<option v-for="acc in accounts" :key="acc.id" :value="acc.id">
{{ acc.name }} ({{ acc.id }})
</option>
</select>
<button class="btn-primary" @click="saveAccountId">Сохранить аккаунт</button>
<div v-if="accountStatusMsg" class="status-block">{{ accountStatusMsg }}</div>
</div>
<form class="form-block" @submit.prevent="connectDomain">
<label>Домен для туннеля:</label>
<input v-model="domain" type="text" class="form-control" placeholder="example.com" />
<button class="btn-primary" type="submit">Проверить и подключить домен</button>
</form>
<div class="status-block">
<b>Статус Cloudflared:</b> {{ tunnelStatus }}<br>
<b>Статус домена:</b> {{ domainStatusMsg }}<br>
<b>Статус туннеля:</b> {{ tunnelStatusMsg }}<br>
<span v-if="statusMsg">{{ statusMsg }}</span>
</div>
<div v-if="appUrl" class="app-link-block">
<a :href="appUrl" target="_blank" class="btn-primary open-app-btn">
Открыть приложение
</a>
</div>
<div v-if="autoSetupSteps.length" class="auto-setup-steps">
<div v-for="step in autoSetupSteps" :key="step.step" :class="['auto-setup-step', step.status]">
{{ step.message }}
</div>
</div>
<!-- Кнопка управления DNS записями -->
<div v-if="appUrl || (accounts.length && selectedAccountId && domain)" class="dns-management-section">
<button class="btn-primary" @click="showDnsManager = !showDnsManager">
<i class="fas fa-cog"></i> {{ showDnsManager ? 'Скрыть' : 'Управлять' }} DNS записями
</button>
</div>
<!-- Компонент управления DNS записями -->
<CloudflareDnsManager
v-if="showDnsManager"
@dns-updated="onDnsUpdated"
ref="dnsManager"
/>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import CloudflareDnsManager from '@/components/CloudflareDnsManager.vue';
const router = useRouter();
const goBack = () => router.push('/settings/interface');
const apiToken = ref('');
const domain = ref('');
const statusMsg = ref('');
const tunnelStatus = ref('');
const domainStatusMsg = ref('');
const tunnelStatusMsg = ref('');
const appUrl = ref('');
const autoSetupSteps = ref([]);
const accounts = ref([]);
const selectedAccountId = ref('');
const accountStatusMsg = ref('');
const showDnsManager = ref(false);
const dnsManager = ref(null);
async function loadSettings() {
try {
console.log('[CloudflareDetails] loadSettings: start');
const res = await fetch('/api/cloudflare/settings');
const data = await res.json();
console.log('[CloudflareDetails] loadSettings: data', data);
if (data.success && data.settings) {
apiToken.value = data.settings.api_token || '';
domain.value = data.settings.domain || '';
}
} catch (e) {
console.error('[CloudflareDetails] loadSettings: error', e);
}
}
async function saveToken() {
try {
console.log('[CloudflareDetails] saveToken: start', apiToken.value);
const res = await fetch('/api/cloudflare/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token: apiToken.value })
});
const data = await res.json();
console.log('[CloudflareDetails] saveToken: data', data);
statusMsg.value = data.message || 'Токен сохранён!';
// Получить список аккаунтов
const accRes = await fetch('/api/cloudflare/accounts', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ api_token: apiToken.value })
});
const accData = await accRes.json();
if (accData.success && accData.accounts) {
accounts.value = accData.accounts;
accountStatusMsg.value = 'Выберите аккаунт и сохраните.';
} else {
accountStatusMsg.value = accData.message || 'Ошибка получения аккаунтов';
}
getStatus();
} catch (e) {
console.error('[CloudflareDetails] saveToken: error', e);
statusMsg.value = 'Ошибка при сохранении токена';
accountStatusMsg.value = 'Ошибка получения аккаунтов';
}
}
async function saveAccountId() {
try {
const res = await fetch('/api/cloudflare/account-id', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ account_id: selectedAccountId.value })
});
const data = await res.json();
accountStatusMsg.value = data.message || 'Account ID сохранён!';
getStatus();
} catch (e) {
accountStatusMsg.value = 'Ошибка при сохранении Account ID';
}
}
async function connectDomain() {
try {
statusMsg.value = 'Выполняется автоматическая настройка...';
appUrl.value = '';
autoSetupSteps.value = [];
const res = await fetch('/api/cloudflare/domain', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ domain: domain.value })
});
const data = await res.json();
if (data.success) {
statusMsg.value = data.message || 'Готово!';
appUrl.value = data.app_url || '';
autoSetupSteps.value = data.steps || [];
// Автоматически показываем DNS менеджер после успешного создания туннеля
showDnsManager.value = true;
// Обновляем DNS записи в менеджере, если он уже загружен
setTimeout(() => {
if (dnsManager.value && dnsManager.value.loadDnsRecords) {
dnsManager.value.loadDnsRecords();
}
}, 1000);
} else {
statusMsg.value = data.error || 'Ошибка автоматической настройки';
autoSetupSteps.value = data.steps || [];
}
getStatus();
} catch (e) {
statusMsg.value = 'Ошибка автоматической настройки: ' + e.message;
}
}
async function getStatus() {
try {
console.log('[CloudflareDetails] getStatus: start');
const res = await fetch('/api/cloudflare/status');
const data = await res.json();
console.log('[CloudflareDetails] getStatus: data', data);
tunnelStatus.value = data.status || '';
domainStatusMsg.value = data.domainMsg || '';
tunnelStatusMsg.value = data.tunnelMsg || '';
} catch (e) {
console.error('[CloudflareDetails] getStatus: error', e);
tunnelStatus.value = 'Ошибка';
domainStatusMsg.value = 'Ошибка';
tunnelStatusMsg.value = 'Ошибка';
}
}
function onDnsUpdated() {
console.log('[CloudflareDetails] DNS records updated');
// Обновляем статус после изменения DNS
getStatus();
}
onMounted(() => {
loadSettings();
getStatus();
});
</script>
<style scoped>
.cloudflare-details.settings-panel {
padding: var(--block-padding);
background-color: var(--color-light);
border-radius: var(--radius-md);
margin-top: var(--spacing-lg);
animation: fadeIn var(--transition-normal);
min-height: 200px;
position: relative;
}
h2 {
margin-bottom: var(--spacing-lg);
border-bottom: 1px solid var(--color-grey-light);
padding-bottom: var(--spacing-md);
}
.instruction-block {
background: #f8f8f8;
border-radius: 8px;
padding: 1rem 1.5rem;
margin-bottom: 2rem;
font-size: 1rem;
}
.form-block {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-bottom: 1.5rem;
max-width: 400px;
}
.form-control {
padding: 0.5rem 1rem;
border-radius: 6px;
border: 1px solid #ccc;
font-size: 1rem;
}
.btn-primary {
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 6px;
padding: 0.5rem 1.5rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
margin-top: 0.5rem;
align-self: flex-start;
}
.btn-primary:hover {
background: var(--color-primary-dark);
}
.btn-primary.install-btn {
margin-top: 2rem;
}
.status-block {
margin: 1.5rem 0 0.5rem 0;
font-size: 1.05rem;
color: #555;
}
.close-btn {
position: absolute;
top: 18px;
right: 18px;
background: none;
border: none;
font-size: 2rem;
cursor: pointer;
color: #bbb;
transition: color 0.2s;
z-index: 10;
}
.close-btn:hover {
color: #333;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.app-link-block {
margin-top: 2rem;
}
.open-app-btn {
display: inline-block;
padding: 0.7rem 2rem;
font-size: 1.1rem;
background: var(--color-success, #2cae4f);
color: #fff;
border-radius: 8px;
text-decoration: none;
transition: background 0.2s;
}
.open-app-btn:hover {
background: var(--color-success-dark, #1e7d32);
}
.auto-setup-btn {
margin-top: 1.5rem;
background: var(--color-primary);
color: #fff;
border: none;
border-radius: 6px;
padding: 0.5rem 1.5rem;
cursor: pointer;
font-size: 1rem;
transition: background 0.2s;
display: block;
}
.auto-setup-steps {
margin-top: 1.5rem;
}
.auto-setup-step {
margin-bottom: 0.5rem;
padding: 0.5rem 1rem;
border-radius: 6px;
background: #f8f8f8;
font-size: 1rem;
}
.auto-setup-step.ok {
color: #2cae4f;
}
.auto-setup-step.error {
color: #c62828;
}
.dns-management-section {
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 1px solid var(--color-grey-light);
}
</style>

View File

@@ -1,51 +1,11 @@
<template>
<div class="interface-settings settings-panel" style="position:relative;min-height:120px">
<button class="close-btn" @click="goBack">×</button>
<h2>Традиционный хостинг</h2>
<!-- Cloudflare -->
<div class="web3-service-block">
<div class="service-header">
<h3>Cloudflare</h3>
<span class="service-badge cloudflare">Туннели и CDN</span>
</div>
<p>Подключите ваш локальный DApp к интернету через Cloudflare Tunnels. Быстрый доступ и защита от DDoS атак.</p>
<div class="service-features">
<span class="feature"> Cloudflare Tunnels</span>
<span class="feature"> Защита от DDoS</span>
<span class="feature"> Глобальная CDN</span>
</div>
<button
class="btn-primary"
@click="isAdmin ? goToCloudflareDetails() : null"
:disabled="!isAdmin"
>
Подробнее
</button>
</div>
<h2>Web3 Хостинг</h2>
<!-- Pinata IPFS -->
<div class="web3-service-block">
<div class="service-header">
<h3>Pinata IPFS</h3>
<span class="service-badge">Децентрализованное хранение</span>
</div>
<p>Разместите ваш DApp на IPFS с помощью Pinata. Поддержка пользовательских доменов, CDN и автоматические деплои.</p>
<div class="service-features">
<span class="feature"> IPFS хостинг</span>
<span class="feature"> CDN глобально</span>
<span class="feature"> Домен</span>
</div>
<button
class="btn-primary"
@click="isAdmin ? goToPinataDetails() : null"
:disabled="!isAdmin"
>
Подробнее
</button>
</div>
<!-- Akash Network -->
<div class="web3-service-block">
@@ -97,13 +57,8 @@ import { useAuthContext } from '@/composables/useAuth';
const router = useRouter();
const { isAdmin } = useAuthContext();
const goBack = () => router.push('/settings');
const goToCloudflareDetails = () => router.push('/settings/interface/cloudflare-details');
// Web3 сервисы
const goToPinataDetails = () => {
// Пока открываем в новой вкладке, позже можно создать отдельные страницы
window.open('https://pinata.cloud/pricing', '_blank');
};
const goToAkashDetails = () => {
window.open('https://akash.network/', '_blank');
@@ -174,10 +129,6 @@ h2:first-of-type {
font-weight: 500;
}
.service-badge.cloudflare {
background: linear-gradient(135deg, #f38020, #f5af19);
}
.service-badge.akash {
background: linear-gradient(135deg, #ff6b6b, #ee5a52);
}

View File

@@ -27,16 +27,16 @@
integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
"@babel/parser@^7.27.5":
version "7.27.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826"
integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==
version "7.28.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e"
integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==
dependencies:
"@babel/types" "^7.27.3"
"@babel/types" "^7.28.0"
"@babel/types@^7.27.3":
version "7.27.6"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535"
integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==
"@babel/types@^7.28.0":
version "7.28.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.0.tgz#2fd0159a6dc7353933920c43136335a9b264d950"
integrity sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
@@ -193,19 +193,19 @@
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
"@eslint/config-array@^0.20.1":
version "0.20.1"
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979"
integrity sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==
"@eslint/config-array@^0.21.0":
version "0.21.0"
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636"
integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==
dependencies:
"@eslint/object-schema" "^2.1.6"
debug "^4.3.1"
minimatch "^3.1.2"
"@eslint/config-helpers@^0.2.1":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672"
integrity sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==
"@eslint/config-helpers@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286"
integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==
"@eslint/core@^0.14.0":
version "0.14.0"
@@ -214,10 +214,10 @@
dependencies:
"@types/json-schema" "^7.0.15"
"@eslint/core@^0.15.0":
version "0.15.0"
resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.0.tgz#8fc04709a7b9a179d9f7d93068fc000cb8c5603d"
integrity sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==
"@eslint/core@^0.15.1":
version "0.15.1"
resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.1.tgz#d530d44209cbfe2f82ef86d6ba08760196dd3b60"
integrity sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==
dependencies:
"@types/json-schema" "^7.0.15"
@@ -236,10 +236,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@9.29.0":
version "9.29.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56"
integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==
"@eslint/js@9.30.1":
version "9.30.1"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.30.1.tgz#ebe9dd52a38345784c486300175a28c6013c088d"
integrity sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==
"@eslint/object-schema@^2.1.6":
version "2.1.6"
@@ -247,32 +247,32 @@
integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==
"@eslint/plugin-kit@^0.3.1":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz#0cad96b134d23a653348e3342f485636b5ef4732"
integrity sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==
version "0.3.3"
resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz#32926b59bd407d58d817941e48b2a7049359b1fd"
integrity sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==
dependencies:
"@eslint/core" "^0.15.0"
"@eslint/core" "^0.15.1"
levn "^0.4.1"
"@floating-ui/core@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.1.tgz#1abc6b157d4a936174f9dbd078278c3a81c8bc6b"
integrity sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==
"@floating-ui/core@^1.7.2":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.2.tgz#3d1c35263950b314b6d5a72c8bfb9e3c1551aefd"
integrity sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==
dependencies:
"@floating-ui/utils" "^0.2.9"
"@floating-ui/utils" "^0.2.10"
"@floating-ui/dom@^1.0.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.1.tgz#76a4e3cbf7a08edf40c34711cf64e0cc8053d912"
integrity sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==
version "1.7.2"
resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.2.tgz#3540b051cf5ce0d4f4db5fb2507a76e8ea5b4a45"
integrity sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==
dependencies:
"@floating-ui/core" "^1.7.1"
"@floating-ui/utils" "^0.2.9"
"@floating-ui/core" "^1.7.2"
"@floating-ui/utils" "^0.2.10"
"@floating-ui/utils@^0.2.9":
version "0.2.9"
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429"
integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==
"@floating-ui/utils@^0.2.10":
version "0.2.10"
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c"
integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==
"@humanfs/core@^0.19.1":
version "0.19.1"
@@ -302,31 +302,31 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba"
integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==
"@intlify/core-base@11.1.7":
version "11.1.7"
resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-11.1.7.tgz#497280e4774011cf0d42eaedb20e9cd4594c0a3f"
integrity sha512-gYiGnQeJVp3kNBeXQ73m1uFOak0ry4av8pn+IkEWigyyPWEMGzB+xFeQdmGMFn49V+oox6294oGVff8bYOhtOw==
"@intlify/core-base@11.1.9":
version "11.1.9"
resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-11.1.9.tgz#54201e7985d52240627b9c327a4d57c08a96cd39"
integrity sha512-Lrdi4wp3XnGhWmB/mMD/XtfGUw1Jt+PGpZI/M63X1ZqhTDjNHRVCs/i8vv8U1cwaj1A9fb0bkCQHLSL0SK+pIQ==
dependencies:
"@intlify/message-compiler" "11.1.7"
"@intlify/shared" "11.1.7"
"@intlify/message-compiler" "11.1.9"
"@intlify/shared" "11.1.9"
"@intlify/message-compiler@11.1.7":
version "11.1.7"
resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-11.1.7.tgz#047ba659cfd34b0f630dddf73c3f9224bd3af7f8"
integrity sha512-0ezkep1AT30NyuKj8QbRlmvMORCCRlOIIu9v8RNU8SwDjjTiFCZzczCORMns2mCH4HZ1nXgrfkKzYUbfjNRmng==
"@intlify/message-compiler@11.1.9":
version "11.1.9"
resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-11.1.9.tgz#c84a3a2777b0d95342348d1bf95669329d71e10c"
integrity sha512-84SNs3Ikjg0rD1bOuchzb3iK1vR2/8nxrkyccIl5DjFTeMzE/Fxv6X+A7RN5ZXjEWelc1p5D4kHA6HEOhlKL5Q==
dependencies:
"@intlify/shared" "11.1.7"
"@intlify/shared" "11.1.9"
source-map-js "^1.0.2"
"@intlify/shared@11.1.7":
version "11.1.7"
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-11.1.7.tgz#54e60d52b73fb25019e2689d6531a54928b40194"
integrity sha512-4yZeMt2Aa/7n5Ehy4KalUlvt3iRLcg1tq9IBVfOgkyWFArN4oygn6WxgGIFibP3svpaH8DarbNaottq+p0gUZQ==
"@intlify/shared@11.1.9":
version "11.1.9"
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-11.1.9.tgz#20244e53322ba01233df7ddb6dc677561b3c7e0b"
integrity sha512-H/83xgU1l8ox+qG305p6ucmoy93qyjIPnvxGWRA7YdOoHe1tIiW9IlEu4lTdsOR7cfP1ecrwyflQSqXdXBacXA==
"@jridgewell/sourcemap-codec@^1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
version "1.5.4"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7"
integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==
"@noble/curves@1.2.0":
version "1.2.0"
@@ -394,105 +394,105 @@
estree-walker "^2.0.2"
picomatch "^4.0.2"
"@rollup/rollup-android-arm-eabi@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz#a3e4e4b2baf0bade6918cf5135c3ef7eee653196"
integrity sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==
"@rollup/rollup-android-arm-eabi@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz#6819b7f1e41a49af566f629a1556eaeea774d043"
integrity sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==
"@rollup/rollup-android-arm64@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz#63566b0e76c62d4f96d44448f38a290562280200"
integrity sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==
"@rollup/rollup-android-arm64@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz#7bd5591af68c64a75be1779e2b20f187878daba9"
integrity sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==
"@rollup/rollup-darwin-arm64@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz#60a51a61b22b1f4fdf97b4adf5f0f447f492759d"
integrity sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==
"@rollup/rollup-darwin-arm64@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz#e216c333e448c67973386e46dbfe8e381aafb055"
integrity sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==
"@rollup/rollup-darwin-x64@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz#bfe3059440f7032de11e749ece868cd7f232e609"
integrity sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==
"@rollup/rollup-darwin-x64@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz#202f80eea3acfe3f67496fedffa006a5f1ce7f5a"
integrity sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==
"@rollup/rollup-freebsd-arm64@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz#d5d4c6cd3b8acb7493b76227d8b2b4a2d732a37b"
integrity sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==
"@rollup/rollup-freebsd-arm64@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz#4880f9769f1a7eec436b9c146e1d714338c26567"
integrity sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==
"@rollup/rollup-freebsd-x64@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz#cb4e1547b572cd0144c5fbd6c4a0edfed5fe6024"
integrity sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==
"@rollup/rollup-freebsd-x64@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz#647d6e333349b1c0fb322c2827ba1a53a0f10301"
integrity sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==
"@rollup/rollup-linux-arm-gnueabihf@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz#feb81bd086f6a469777f75bec07e1bdf93352e69"
integrity sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==
"@rollup/rollup-linux-arm-gnueabihf@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz#7ba5c97a7224f49618861d093c4a7b40fa50867b"
integrity sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==
"@rollup/rollup-linux-arm-musleabihf@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz#68bff1c6620c155c9d8f5ee6a83c46eb50486f18"
integrity sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==
"@rollup/rollup-linux-arm-musleabihf@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz#f858dcf498299d6c625ec697a5191e0e41423905"
integrity sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==
"@rollup/rollup-linux-arm64-gnu@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz#dbc5036a85e3ca3349887c8bdbebcfd011e460b0"
integrity sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==
"@rollup/rollup-linux-arm64-gnu@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz#c0f1fc20c50666c61f574536a00cdd486b6aaae1"
integrity sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==
"@rollup/rollup-linux-arm64-musl@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz#72efc633aa0b93531bdfc69d70bcafa88e6152fc"
integrity sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==
"@rollup/rollup-linux-arm64-musl@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz#0214efc3e404ddf108e946ad5f7e4ee2792a155a"
integrity sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==
"@rollup/rollup-linux-loongarch64-gnu@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz#9b6a49afde86c8f57ca11efdf8fd8d7c52048817"
integrity sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==
"@rollup/rollup-linux-loongarch64-gnu@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz#8303c4ea2ae7bcbb96b2c77cfb53527d964bfceb"
integrity sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==
"@rollup/rollup-linux-powerpc64le-gnu@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz#93cb96073efab0cdbf419c8dfc44b5e2bd815139"
integrity sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==
"@rollup/rollup-linux-powerpc64le-gnu@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz#4197ffbc61809629094c0fccf825e43a40fbc0ca"
integrity sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==
"@rollup/rollup-linux-riscv64-gnu@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz#028708f73c8130ae924e5c3755de50fe93687249"
integrity sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==
"@rollup/rollup-linux-riscv64-gnu@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz#bcb99c9004c9b91e3704a6a70c892cb0599b1f42"
integrity sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==
"@rollup/rollup-linux-riscv64-musl@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz#878bfb158b2cf6671b7611fd58e5c80d9144ac6c"
integrity sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==
"@rollup/rollup-linux-riscv64-musl@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz#3e943bae9b8b4637c573c1922392beb8a5e81acb"
integrity sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==
"@rollup/rollup-linux-s390x-gnu@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz#59b4ebb2129d34b7807ed8c462ff0baaefca9ad4"
integrity sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==
"@rollup/rollup-linux-s390x-gnu@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz#dc43fb467bff9547f5b9937f38668da07fa8fa9f"
integrity sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==
"@rollup/rollup-linux-x64-gnu@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz#597d40f60d4b15bedbbacf2491a69c5b67a58e93"
integrity sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==
"@rollup/rollup-linux-x64-gnu@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz#0699c560fa6ce6b846581a7e6c30c85c22a3f0da"
integrity sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==
"@rollup/rollup-linux-x64-musl@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz#0a062d6fee35ec4fbb607b2a9d933a9372ccf63a"
integrity sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==
"@rollup/rollup-linux-x64-musl@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz#9fb1becedcdc9e227d4748576eb8ba2fad8d2e29"
integrity sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==
"@rollup/rollup-win32-arm64-msvc@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz#41ffab489857987c75385b0fc8cccf97f7e69d0a"
integrity sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==
"@rollup/rollup-win32-arm64-msvc@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz#fcf3e62edd76c560252b819f69627685f65887d7"
integrity sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==
"@rollup/rollup-win32-ia32-msvc@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz#d9fb61d98eedfa52720b6ed9f31442b3ef4b839f"
integrity sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==
"@rollup/rollup-win32-ia32-msvc@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz#45a5304491d6da4666f6159be4f739d4d43a283f"
integrity sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==
"@rollup/rollup-win32-x64-msvc@4.44.0":
version "4.44.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz#a36e79b6ccece1533f777a1bca1f89c13f0c5f62"
integrity sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==
"@rollup/rollup-win32-x64-msvc@4.44.2":
version "4.44.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz#660018c9696ad4f48abe8c5d56db53c81aadba25"
integrity sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==
"@spruceid/siwe-parser@^2.1.2":
version "2.1.2"
@@ -547,9 +547,9 @@
"@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.182":
version "4.17.18"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.18.tgz#4710e7db5b3857103764bf7b7b666414e6141baf"
integrity sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==
version "4.17.20"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.20.tgz#1ca77361d7363432d29f5e55950d9ec1e1c6ea93"
integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==
"@types/minimist@^1.2.0":
version "1.2.5"
@@ -1040,9 +1040,9 @@ dunder-proto@^1.0.1:
gopd "^1.2.0"
element-plus@^2.9.11:
version "2.10.2"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.10.2.tgz#5eb8ea6aa54cfdd88b903d7d65b623bdaeaf899d"
integrity sha512-p2KiAa0jEGXrzdlTAfpiS7HQFAhla4gvx6H7RuDf+OO0uC3DGpolxvdHjFR8gt7+vaWyxQNcHa1sAdBkmjqlgA==
version "2.10.3"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.10.3.tgz#82a4454d76b2104f71a46f49b02fba9650d1f33f"
integrity sha512-OLpf0iekuvWJrz1+H9ybvem6TYTKSNk6L1QDA3tYq2YWbogKXJnWpHG1UAGKR1B7gx+vUH7M15VIH3EijE9Kgw==
dependencies:
"@ctrl/tinycolor" "^3.4.1"
"@element-plus/icons-vue" "^2.3.1"
@@ -1150,15 +1150,7 @@ eslint-config-prettier@^10.0.1, eslint-config-prettier@^10.0.2:
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782"
integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==
eslint-plugin-prettier@^5.2.2:
version "5.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz#54d4748904e58eaf1ffe26c4bffa4986ca7f952b"
integrity sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==
dependencies:
prettier-linter-helpers "^1.0.0"
synckit "^0.11.0"
eslint-plugin-prettier@^5.2.3:
eslint-plugin-prettier@^5.2.2, eslint-plugin-prettier@^5.2.3:
version "5.5.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz#470820964de9aedb37e9ce62c3266d2d26d08d15"
integrity sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==
@@ -1207,17 +1199,17 @@ eslint-visitor-keys@^4.2.1:
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
eslint@^9.21.0:
version "9.29.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.29.0.tgz#65e3db3b7e5a5b04a8af541741a0f3648d0a81a6"
integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==
version "9.30.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.30.1.tgz#d4107b39964412acd9b5c0744f1c6df514fa1211"
integrity sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.12.1"
"@eslint/config-array" "^0.20.1"
"@eslint/config-helpers" "^0.2.1"
"@eslint/config-array" "^0.21.0"
"@eslint/config-helpers" "^0.3.0"
"@eslint/core" "^0.14.0"
"@eslint/eslintrc" "^3.3.1"
"@eslint/js" "9.29.0"
"@eslint/js" "9.30.1"
"@eslint/plugin-kit" "^0.3.1"
"@humanfs/node" "^0.16.6"
"@humanwhocodes/module-importer" "^1.0.1"
@@ -1529,9 +1521,9 @@ globals@^14.0.0:
integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
globals@^16.0.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-16.2.0.tgz#19efcd1ddde2bd5efce128e5c2e441df1abc6f7c"
integrity sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==
version "16.3.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-16.3.0.tgz#66118e765ddaf9e2d880f7e17658543f93f1f667"
integrity sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==
globby@^11.1.0:
version "11.1.0"
@@ -1940,7 +1932,7 @@ ms@^2.1.3:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.11, nanoid@^3.3.8:
nanoid@^3.3.11:
version "3.3.11"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
@@ -2086,32 +2078,32 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pg-cloudflare@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.5.tgz#2e3649c38a7a9c74a7e5327c8098a2fd9af595bd"
integrity sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==
pg-cloudflare@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz#a1f3d226bab2c45ae75ea54d65ec05ac6cfafbef"
integrity sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==
pg-connection-string@^2.8.5:
version "2.8.5"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.8.5.tgz#82cefd0269cb64a09603342d9b69e8392e6eb6cd"
integrity sha512-Ni8FuZ8yAF+sWZzojvtLE2b03cqjO5jNULcHFfM9ZZ0/JXrgom5pBREbtnAw7oxsxJqHw9Nz/XWORUEL3/IFow==
pg-connection-string@^2.9.1:
version "2.9.1"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.9.1.tgz#bb1fd0011e2eb76ac17360dc8fa183b2d3465238"
integrity sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==
pg-int8@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
pg-pool@^3.9.6:
version "3.9.6"
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.9.6.tgz#c6fde89dee615d6c262724e68a3a37e9593157fc"
integrity sha512-rFen0G7adh1YmgvrmE5IPIqbb+IgEzENUm+tzm6MLLDSlPRoZVhzU1WdML9PV2W5GOdRA9qBKURlbt1OsXOsPw==
pg-pool@^3.10.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.10.1.tgz#481047c720be2d624792100cac1816f8850d31b2"
integrity sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==
pg-protocol@^1.9.5:
version "1.9.5"
resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.9.5.tgz#e544eff37d6ab79c26281d7c0b59ac9be4862686"
integrity sha512-DYTWtWpfd5FOro3UnAfwvhD8jh59r2ig8bPtc9H8Ds7MscE/9NYruUQWFAOuraRl29jwcT2kyMFQ3MxeaVjUhg==
pg-protocol@^1.10.3:
version "1.10.3"
resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.10.3.tgz#ac9e4778ad3f84d0c5670583bab976ea0a34f69f"
integrity sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==
pg-types@^2.1.0:
pg-types@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
@@ -2123,19 +2115,19 @@ pg-types@^2.1.0:
postgres-interval "^1.1.0"
pg@^8.12.0:
version "8.15.6"
resolved "https://registry.yarnpkg.com/pg/-/pg-8.15.6.tgz#2a28e98fb6cab18b886ce58b2c184d712a94880a"
integrity sha512-yvao7YI3GdmmrslNVsZgx9PfntfWrnXwtR+K/DjI0I/sTKif4Z623um+sjVZ1hk5670B+ODjvHDAckKdjmPTsg==
version "8.16.3"
resolved "https://registry.yarnpkg.com/pg/-/pg-8.16.3.tgz#160741d0b44fdf64680e45374b06d632e86c99fd"
integrity sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==
dependencies:
pg-connection-string "^2.8.5"
pg-pool "^3.9.6"
pg-protocol "^1.9.5"
pg-types "^2.1.0"
pgpass "1.x"
pg-connection-string "^2.9.1"
pg-pool "^3.10.1"
pg-protocol "^1.10.3"
pg-types "2.2.0"
pgpass "1.0.5"
optionalDependencies:
pg-cloudflare "^1.2.5"
pg-cloudflare "^1.2.7"
pgpass@1.x:
pgpass@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
@@ -2195,7 +2187,7 @@ postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.4.19, postcss@^8.5.3, postcss@^8.5.6:
postcss@^8.4.19, postcss@^8.5.0, postcss@^8.5.3, postcss@^8.5.6:
version "8.5.6"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
@@ -2204,15 +2196,6 @@ postcss@^8.4.19, postcss@^8.5.3, postcss@^8.5.6:
picocolors "^1.1.1"
source-map-js "^1.2.1"
postcss@^8.5.0:
version "8.5.3"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
dependencies:
nanoid "^3.3.8"
picocolors "^1.1.1"
source-map-js "^1.2.1"
postgres-array@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
@@ -2248,9 +2231,9 @@ prettier-linter-helpers@^1.0.0:
fast-diff "^1.1.2"
prettier@^3.5.3:
version "3.6.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.1.tgz#cc3bce21c09a477b1e987b76ce9663925d86ae44"
integrity sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A==
version "3.6.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
proxy-from-env@^1.1.0:
version "1.1.0"
@@ -2350,32 +2333,32 @@ rollup@^3.29.4:
fsevents "~2.3.2"
rollup@^4.34.9:
version "4.44.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.44.0.tgz#0e10b98339b306edad1e612f1e5590a79aef521c"
integrity sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==
version "4.44.2"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.44.2.tgz#faedb27cb2aa6742530c39668092eecbaf78c488"
integrity sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==
dependencies:
"@types/estree" "1.0.8"
optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.44.0"
"@rollup/rollup-android-arm64" "4.44.0"
"@rollup/rollup-darwin-arm64" "4.44.0"
"@rollup/rollup-darwin-x64" "4.44.0"
"@rollup/rollup-freebsd-arm64" "4.44.0"
"@rollup/rollup-freebsd-x64" "4.44.0"
"@rollup/rollup-linux-arm-gnueabihf" "4.44.0"
"@rollup/rollup-linux-arm-musleabihf" "4.44.0"
"@rollup/rollup-linux-arm64-gnu" "4.44.0"
"@rollup/rollup-linux-arm64-musl" "4.44.0"
"@rollup/rollup-linux-loongarch64-gnu" "4.44.0"
"@rollup/rollup-linux-powerpc64le-gnu" "4.44.0"
"@rollup/rollup-linux-riscv64-gnu" "4.44.0"
"@rollup/rollup-linux-riscv64-musl" "4.44.0"
"@rollup/rollup-linux-s390x-gnu" "4.44.0"
"@rollup/rollup-linux-x64-gnu" "4.44.0"
"@rollup/rollup-linux-x64-musl" "4.44.0"
"@rollup/rollup-win32-arm64-msvc" "4.44.0"
"@rollup/rollup-win32-ia32-msvc" "4.44.0"
"@rollup/rollup-win32-x64-msvc" "4.44.0"
"@rollup/rollup-android-arm-eabi" "4.44.2"
"@rollup/rollup-android-arm64" "4.44.2"
"@rollup/rollup-darwin-arm64" "4.44.2"
"@rollup/rollup-darwin-x64" "4.44.2"
"@rollup/rollup-freebsd-arm64" "4.44.2"
"@rollup/rollup-freebsd-x64" "4.44.2"
"@rollup/rollup-linux-arm-gnueabihf" "4.44.2"
"@rollup/rollup-linux-arm-musleabihf" "4.44.2"
"@rollup/rollup-linux-arm64-gnu" "4.44.2"
"@rollup/rollup-linux-arm64-musl" "4.44.2"
"@rollup/rollup-linux-loongarch64-gnu" "4.44.2"
"@rollup/rollup-linux-powerpc64le-gnu" "4.44.2"
"@rollup/rollup-linux-riscv64-gnu" "4.44.2"
"@rollup/rollup-linux-riscv64-musl" "4.44.2"
"@rollup/rollup-linux-s390x-gnu" "4.44.2"
"@rollup/rollup-linux-x64-gnu" "4.44.2"
"@rollup/rollup-linux-x64-musl" "4.44.2"
"@rollup/rollup-win32-arm64-msvc" "4.44.2"
"@rollup/rollup-win32-ia32-msvc" "4.44.2"
"@rollup/rollup-win32-x64-msvc" "4.44.2"
fsevents "~2.3.2"
run-parallel@^1.1.9:
@@ -2390,16 +2373,11 @@ run-parallel@^1.1.9:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@^7.3.4, semver@^7.3.6, semver@^7.6.3:
semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.6.3:
version "7.7.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
semver@^7.3.5:
version "7.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -2526,9 +2504,9 @@ stylelint-config-prettier@^9.0.5:
integrity sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==
stylelint-config-recommended-vue@>=1.1.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.6.0.tgz#e5d34d9f11417922a24dbd21438c6c058843fa20"
integrity sha512-syk1adIHvbH2T1OiR/spUK4oQy35PZIDw8Zmc7E0+eVK9Z9SK3tdMpGRT/bgGnAPpMt/WaL9K1u0tlF6xM0sMQ==
version "1.6.1"
resolved "https://registry.yarnpkg.com/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.6.1.tgz#6a93082ce4a5c1f64793b789175a833c57ce8309"
integrity sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==
dependencies:
semver "^7.3.5"
stylelint-config-html ">=1.0.0"
@@ -2624,7 +2602,7 @@ svg-tags@^1.0.0:
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
synckit@^0.11.0, synckit@^0.11.7:
synckit@^0.11.7:
version "0.11.8"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.8.tgz#b2aaae998a4ef47ded60773ad06e7cb821f55457"
integrity sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==
@@ -2762,12 +2740,12 @@ vue-eslint-parser@^9.4.3:
semver "^7.3.6"
vue-i18n@^11.1.2:
version "11.1.7"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-11.1.7.tgz#a26c0224d1311ac89b82ff6d0ee45f68b5099237"
integrity sha512-CDrU7Cmyh1AxJjerQmipV9nVa//exVBdhTcWGlbfcDCN8bKp/uAe7Le6IoN4//5emIikbsSKe9Uofmf/xXkhOA==
version "11.1.9"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-11.1.9.tgz#214816d3a5461a3169ee1eb507cac045a03a15d8"
integrity sha512-N9ZTsXdRmX38AwS9F6Rh93RtPkvZTkSy/zNv63FTIwZCUbLwwrpqlKz9YQuzFLdlvRdZTnWAUE5jMxr8exdl7g==
dependencies:
"@intlify/core-base" "11.1.7"
"@intlify/shared" "11.1.7"
"@intlify/core-base" "11.1.9"
"@intlify/shared" "11.1.9"
"@vue/devtools-api" "^6.5.0"
vue-router@^4.1.6: