vault ключей + мост abuse-radar + китайские источники: всё в одном реестре
- omni/vault.py: пул ключей парсеров (env-first, data/vault.json, ротация, cooldown 401/402/403=1ч, 429=10м), только маски в выводе - tools/build_vault.py: сборка пула из MASTER_KEYS.csv и локальных дампов (значения не в git) - tools/vault_check.py: живая проверка с маскированием - searchers: firecrawl/tavily/exa/serper/jina/apify берут ключ из vault, если нет env - omni radar: домены+каналы из radar_server.db -> реестр, --import-posts заливает посты каналов - radar-источники помечены opt_in: общий обход не тормозят (869 против 3337 всего) - omni/sources_cn.py + tools/wave_cn.py: 9 живых китайских источников (52pojie, nodeseek, kanxue, anquanke, 4hou, xz.aliyun, ithome, cnbeta, v2ex) - net.get(proxy=...): принудительный прокси для CF-площадок - /api/keys + строка ключей в панели - tests/test_vault_radar.py: 7 тестов, всего 29 passed
This commit is contained in:
@@ -524,6 +524,21 @@ async function loadTypes() {
|
||||
if (r.ok) buildTypes(r.types);
|
||||
}
|
||||
|
||||
async function loadKeys() {
|
||||
try {
|
||||
const k = await api('/api/keys');
|
||||
if (!k || k.error) return;
|
||||
const top = (k.services || []).slice(0, 6)
|
||||
.map(x => `${x.service} ${fmt(x.keys)}`).join(' · ');
|
||||
const f = $('#aside-foot');
|
||||
if (f && !f.dataset.keys) {
|
||||
f.dataset.keys = '1';
|
||||
f.innerHTML += `<br><b>${fmt(k.total_keys)}</b> ключей · <b>${(k.services||[]).length}</b> сервисов` +
|
||||
(top ? `<br><span style="opacity:.65">${top}</span>` : '');
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
async function loadStats() {
|
||||
const s = await api('/api/stats');
|
||||
if (s.error) return toast(s.error, 'err');
|
||||
@@ -536,8 +551,10 @@ async function loadStats() {
|
||||
`<b>${fmt(s.sources)}</b> источников · <b>${fmt(s.sources_enabled)}</b> вкл<br>` +
|
||||
`<b>${fmt(s.alive)}</b> живых · <b>${fmt(s.tested)}</b> проверено<br>` +
|
||||
`<b>${fmt(s.runs)}</b> прогонов · <b>${fmt(s.priced)}</b> с ценой`;
|
||||
$('#aside-foot').dataset.keys = '';
|
||||
renderCats(s.categories);
|
||||
buildChips(s.categories);
|
||||
loadKeys();
|
||||
loadTypes();
|
||||
const ks = [
|
||||
['записей', s.items, 'в sqlite + fts5', ''],
|
||||
|
||||
Reference in New Issue
Block a user