Skip to content

Надёжность сети: таймауты запросов + кэш PoW-WASM (общий lib/pow)#20

Open
danscMax wants to merge 1 commit into
ForgetMeAI:mainfrom
danscMax:feat/net-reliability
Open

Надёжность сети: таймауты запросов + кэш PoW-WASM (общий lib/pow)#20
danscMax wants to merge 1 commit into
ForgetMeAI:mainfrom
danscMax:feat/net-reliability

Conversation

@danscMax

Copy link
Copy Markdown
Contributor

Набор небольших правок надёжности сетевого слоя. Поведение API не меняется.

Что и зачем

  • Кэш скомпилированного WASM (lib/pow.js). Раньше WASM для PoW качался по сети
    и компилировался на КАЖДЫЙ запрос завершения (и на каждом ретрае пустого ответа —
    до 10× за один запрос). Теперь модуль компилируется один раз и кэшируется по URL;
    на solve создаётся только свежий инстанс. Плюс жёсткий таймаут на загрузку WASM.
  • Таймауты на все запросы к DeepSeek (dsFetch). У голого fetch() нет
    таймаута по умолчанию — зависший upstream держал HTTP-соединение клиента и
    «пину́л» аккаунт бесконечно. Теперь у каждого вызова есть таймаут
    (DEEPSEEK_FETCH_TIMEOUT_MS, по умолчанию 60с).
  • Фикс битой кириллицы в стриме. TextDecoder создавался заново на каждый чанк,
    из-за чего мультибайтовые символы (кириллица/emoji) на границе чанков ломались
    ({stream:true} хранит состояние только в одном инстансе). Декодер вынесен из цикла.
  • client.js кросс-платформенный + DRY. Переиспользует общий lib/pow (раньше
    solvePOW был продублирован в server.js и client.js), читает stdin через fd 0 и
    пишет в os.tmpdir() — работает на Windows (раньше /dev/stdin и /tmp ломали запуск).
  • .gitignore: игнорируем deepseek-accounts.json и data/accounts/*.json
    это живые токены/cookie, их нельзя коммитить.

Проверено

npm test (node --check всех файлов + юнит-тесты) — зелёный. Логика PoW/стрима
не изменена, только устранены лишняя загрузка WASM, отсутствие таймаутов и баг декодера.

- lib/pow.js: компилируем WASM один раз и кэшируем модуль (раньше WASM качался и
  компилировался на КАЖДЫЙ PoW, в т.ч. на каждом ретрае); добавлен таймаут на
  загрузку WASM. solvePOW теперь общий для server.js и client.js (был продублирован).
- dsFetch(): все запросы к DeepSeek получают жёсткий таймаут (у голого fetch() его
  нет — зависший upstream держал запрос клиента и блокировал аккаунт бесконечно).
- Поднят TextDecoder из цикла чтения стрима: иначе мультибайтовые символы
  (кириллица/emoji) на границе чанков бьются (locale по умолчанию — ru).
- client.js: переиспользует lib/pow; stdin через fd 0 и os.tmpdir() — работает на
  Windows (раньше /dev/stdin и /tmp ломали кросс-платформенность).
- .gitignore: игнорируем deepseek-accounts.json и data/accounts/*.json — это
  живые токены/cookie, их нельзя коммитить.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant