Перейти к содержимому
docs.
WORKSPACE

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

Открыть каталог проектов
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатона✓ACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Каталог

Подключение к публичному API события

Сейчас опубликована одна read-only интеграция Hack API: GET /api/v1/public/event. Токен и сессия личного кабинета не нужны. Регистрация пользователей, команды, organizer/admin endpoints и внутренние feature flags не входят в этот контракт. Публичного контракта developer keys, scopes и webhooks пока нет. Hack API — закрытый продукт; открытая документация не предоставляет лицензию на его исходный код.

Ответ — {data: event} либо {data: null}. Сначала сервер выбирает активное событие; если активного нет — ближайшее будущее по времени начала. Когда подходящих событий нет, data равен null. Для интерфейса это «нет события для отображения», а не пустое фиктивное событие или сетевая ошибка. Показывайте event_name как текст, а не непроверенный HTML.

Nullable-даты, сведения о площадке и контакты должны оставаться необязательными в интерфейсе. Флаги регистрации проверяйте как boolean. Публичные флаги описывают доступность регистрации, но не дают права доступа и не заменяют серверную проверку условий участия. Новые неизвестные поля не должны ломать клиента. Полный список и типы — в OpenAPI и справочнике.

Node.js 22+ либо современный браузер с fetch/AbortSignal.timeout:

export async function getPublicEvent(baseUrl = 'https://api.hack-rnd.ru', signal = AbortSignal.timeout(5000)) {
const response = await fetch(new URL('/api/v1/public/event', baseUrl), {
headers: { Accept: 'application/json' }, signal, redirect: 'error',
});
if (!response.ok) {
const error = new Error(`Public event request failed: HTTP ${response.status}`);
error.status = response.status;
error.retryAfter = response.headers.get('retry-after');
throw error;
}
if (!response.headers.get('content-type')?.includes('application/json')) {
throw new Error('Expected an application/json response');
}
const payload = await response.json();
if (!payload || !Object.hasOwn(payload, 'data')) throw new Error('Missing public event data');
if (payload.data === null) return null;
const event = payload.data;
if (typeof event !== 'object' || Array.isArray(event)
|| typeof event.id !== 'string' || typeof event.event_name !== 'string'
|| typeof event.participant_registration_open !== 'boolean'
|| typeof event.volunteer_registration_open !== 'boolean') {
throw new Error('Invalid public event fields');
}
return event;
}

Минимальный клиент проверяет только используемые им поля и не заменяет полную schema validation. Отдельная live-проверка хаба сверяет весь ответ с OpenAPI без сохранения данных события. Импортируйте модуль и вызовите getPublicEvent(); в интерфейсе разделяйте null и ошибку запроса. Браузерный вызов также зависит от фактической CORS-политики API. Успешный server-side fetch не доказывает разрешение любого browser origin; при необходимости используйте свой backend, не пересылая приватные cookie кабинета.

  • В маршруте задано throttle:120,1. Ключи limiter и инфраструктурные ограничения зависят от окружения; не считайте это отдельной квотой каждого приложения.
  • При 429 учитывайте Retry-After, если он есть, и выдерживайте паузу. Не повторяйте запрос немедленно в цикле. Пример возвращает status/header через ошибку, но сам не делает retry.
  • При сетевой ошибке, timeout или 5xx показывайте временную недоступность либо последний успешный кэш с явной отметкой устаревания. Не подменяйте флаги регистрации.
  • Кэшируйте публичный ответ с подходящим TTL. Обновляйте по контролируемому расписанию, а не на каждое нажатие клавиши.
  • Не привязывайтесь к форме JSON-сообщения ошибки: здесь специфицирован успешный payload 200. data:null — корректное успешное состояние.

2026-10-17: ответ живого публичного endpoint прошёл schema validation. Локальные тесты покрывают null, корректные flags, некорректный flag, отсутствие data, 429 и 503. Это не проверка authenticated journeys, browser CORS, всех инфраструктурных ошибок или живого состояния «нет события». Последний вариант проверен fixture и исходным кодом.