← Back

Futures Screener — Code Review (12 May 2026)

Всего: 23 находки (4 critical, 10 important, 9 nice-to-have)

Critical

1. Admin эндпоинты без auth

Файл: server/index.js, строки 1746, 1757, 1769

2. period в OI-history без валидации

Файл: server/index.js, строка 1513

3. SQL prepare без кеширования

Файл: server/signals.js, строки 867-873

4. Push subscribe без auth

Файл: server/index.js, строки 1453-1470

Important

5. God-файл index.js — 2000+ строк

Static serving, все API routes, warmup, density cache, proxy cache, resync, shutdown — всё в одном файле.

6. 17 дублированных static file routes

Строки 492-561 — можно заменить одним циклом.

7. NATR в 3 местах

8. Treemap: 100 fetch без rate limiter

Файл: server/treemap.js, строки 35-69

9. liveSignals — мутируемый массив

index.js напрямую модифицирует экспортированный массив из signals.js.

10. ~10 мест с direct fetch паттерном

AbortController + timeout + try/finally — повторяется 10 раз без централизации.

11. 4 orphan файла в modules/

12. depth-heatmap.js — мёртвый код

Заменён на depth-store.js (SQLite), старый файл остался.

13. Нет integration тестов

Auth flow, admin endpoints, push subscription, Density V2 — не покрыты.

14. binHistory O(N) scan

trackAndEnrichBins() — полный перебор 5000 entries с startsWith(). Терпимо при cap 5000.

Nice-to-have

15. 6 мёртвых функций (~100 строк)

sendTelegramAlert(), calcScore(), groupCloseLevels(), filterLevelsByWindow(), calcNearestDensities(), getCacheKey()/getCached()/setCached()

16. require() внутри функций

path, fs уже импортированы top-level, но require-ятся повторно в функциях.

17. KLINE_INTERVAL / KLINE_LIMIT не используются

Объявлены но нигде не применяются.

18. Двойной graceful shutdown handler

logger.js + index.js оба регистрируют SIGTERM handler.

19. Нет validation для body в alerts/watchlists

symbol — только !symbol, condition — произвольный JSON без schema.

20. innerHTML с частичным escape

escAttr() не везде. Данные от Binance, не от юзера — риск минимальный.

21. bcrypt.hashSync блокирует event loop

~100ms на hash. При малом кол-ве юзеров — ОК.

22. Зависимости не в package.json

@fastify/cors, better-sqlite3, bcryptjs, jsonwebtoken — не в основном package.json.

23. mfeTracker createdAt после рестарта

При восстановлении из DB createdAt = now, а не оригинальный timestamp. Tracker живёт дольше 25h.

ТОП-3 для немедленного фикса

  1. Auth на admin endpoints (#1)
  2. Whitelist period для OI-history (#2)
  3. requireAuth для push subscribe (#4)

📜 Git History

859010cbrain: auto-sync 2026-05-12 00:408 weeks ago
Show last diff
Loading...