No description
Find a file
2026-08-20 18:23:48 +07:00
.github/workflows feat(core): Phase 1.2 Final Core Audit Fixes - storage driver policy, snapshot relation binding, true Fisher-Yates HMAC_SHA256_FY_V1, proof/event hash separation, verification API, and GitHub Actions CI 2026-08-17 23:55:01 +07:00
agents fix(snapshot): Phase 2.4.1 enforce atomic snapshot lock, single lock invariant and direct seed commitment binding 2026-08-20 18:23:48 +07:00
claude_review Phase 2.3.1: token refresh correctness gate 2026-08-18 14:37:09 +07:00
docs chore(tooling): add AI security review exporter 2026-08-18 14:46:09 +07:00
grok_review Phase 2.3.1: token refresh correctness gate 2026-08-18 14:37:09 +07:00
prisma feat(security): Phase 2.2.3 Final Auth Security Gate - fix GET /api/giveaways IDOR, scoped DB query, Prisma ownership migration, atomic OAuth consumeTransaction, trusted production origin, rate limiting, and comprehensive security tests 2026-08-18 12:02:39 +07:00
src fix(snapshot): Phase 2.4.1 enforce atomic snapshot lock, single lock invariant and direct seed commitment binding 2026-08-20 18:23:48 +07:00
tests fix(snapshot): Phase 2.4.1 enforce atomic snapshot lock, single lock invariant and direct seed commitment binding 2026-08-20 18:23:48 +07:00
tools chore(tooling): add AI security review exporter 2026-08-18 14:46:09 +07:00
.env.example feat(security): Phase 2.2.1 Critical AuthZ & Credential Security - centralized ownership guards, protected giveaway mutations, safe redirect validator, CSRF defenses, TokenVault production fail-fast, and comprehensive security tests 2026-08-18 03:08:02 +07:00
.eslintrc.json feat(core): Phase 1.1 hardening - Prisma persistence, FSM, immutable snapshots, unbiased HMAC_SHA256_FY_V1 randomizer, and audit proof 2026-08-17 23:44:51 +07:00
.gitignore feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
AGENTS.md docs(agents): add Randomayzer project agent rules 2026-08-18 14:58:49 +07:00
docker-compose.yml feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
next.config.mjs feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
package-lock.json feat(core): Phase 1.4 Production Hardening - double draw atomic protection, snapshot concurrency safety, Zod API validation, payload scalability & pagination, provider safety, normalized errors, idempotency, rate limiting, and 20 concurrent draw integration tests 2026-08-18 01:54:35 +07:00
package.json feat(core): Phase 1.4 Production Hardening - double draw atomic protection, snapshot concurrency safety, Zod API validation, payload scalability & pagination, provider safety, normalized errors, idempotency, rate limiting, and 20 concurrent draw integration tests 2026-08-18 01:54:35 +07:00
postcss.config.js feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
README.md feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
tailwind.config.ts feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
tsconfig.json feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00
vitest.config.ts feat: initial commit - VK Giveaway Randomizer Phase 1 2026-08-17 23:34:49 +07:00

Randomayzer — VK Giveaway Randomizer (Этап 1)

Веб-приложение для проведения честных, прозрачных и доказуемых (Provably Fair) розыгрышей среди пользователей ВКонтакте (с архитектурным заделом под Telegram, YouTube и др.).


🎯 Возможности первого этапа

  • Парсинг и превью записей VK: Поддержка любых ссылок на посты ВКонтакте (vk.com/wall..., m.vk.com, vk.ru, ?w=wall...).
  • Сбор участников и фильтрация:
    • Лайки записи ❤️
    • Комментарии (с дедупликацией: 1 пользователь = 1 шанс) 💬
    • Репосты (с учетом настроек приватности профилей) 🔁
    • Проверка подписки на сообщество-организатор 👥
    • Исключение администраторов сообщества 🛡️
    • Черный список ID и логинов.
  • Детерминированный Randomizer (Provably Fair):
    • Исключен непрозрачный Math.random().
    • Выборка на основе HMAC-SHA256 и перетасовки Фишера-Йетса.
    • Snapshot Hash (SHA-256) канонического списка участников + Seed = 100% повторяемость и верифицируемость.
    • Поддержка основных и резервных призовых мест.
  • Интерактивный UI:
    • Dashboard со статистикой и списком кампаний.
    • 5-шаговый визард создания розыгрыша.
    • Живое превью условий и статуса допуска каждого участника с указанием причин отклонения.
    • Презентация победителей и сертификат криптографического аудита.

🏗 Архитектура и стек технологий

  • Frontend / Backend: Next.js 14+ (App Router), TypeScript, React, TailwindCSS, Lucide Icons.
  • Core Domain: Независимый от соцсетей слой (src/core/) для жеребьевки, хеширования и фильтрации.
  • Social Providers: Абстракция SocialMediaProvider (src/providers/) с клиентом VK API и встроенным VkMockProvider для изолированной разработки.
  • База данных: PostgreSQL 16 + Prisma ORM (с in-memory fallback для быстрого локального запуска).
  • Тесты: Vitest (юнит-тесты детерминированности, seed reproducibility, фильтров и парсера).

🚀 Инструкция по локальному запуску

1. Установка зависимостей

npm install

2. Настройка переменных окружения

Скопируйте файл конфигурации:

cp .env.example .env

По умолчанию приложение работает в автономном/mock-режиме без обязательного указания боевого ключа VK API.

Для работы с реальным VK API укажите в .env:

VK_SERVICE_TOKEN=аш_сервисный_ключ_vk"

3. Запуск базы данных (Docker Compose, опционально)

docker compose up -d
npm run prisma:push

(Если Docker не запущен, приложение автоматически использует встроенный store).

4. Запуск тестов

npm test

5. Запуск сервера разработки

npm run dev

Откройте в браузере: http://localhost:3000


🧪 Запуск автоматических тестов

В проекте реализованы unit-тесты ядра:

  • tests/randomizer.test.ts: Тесты воспроизводимости seed, отсутствия дублей, выборки резерва и сторонней верификации verifyDrawResult.
  • tests/filter-engine.test.ts: Тесты всех комбинаций условий отбора, дедупликации комментариев и черных списков.
  • tests/vk-parser.test.ts: Тесты парсинга всех форматов ссылок VK.

Запуск:

npm run test

📚 Документация проекта

  • docs/VK_API_RESEARCH.md — Исследование официального VK API, лимитов, токенов и методов execute.
  • docs/ARCHITECTURE.md — Архитектура слоев, абстракция провайдеров и механизм Provably Fair.
  • docs/DATA_MODEL.md — Модели данных Prisma и схемы связей.