добавлен приём пакетов Health Auto Export

- POST /api/v1/ingest: токен, лимит тела, gzip, durable-запись тела в сырой
  архив, учёт доставки в SQLite
- код ответа отражает доставку, а не разбор: битый JSON — 400, непонятое
  содержимое — 200, данные уже сохранены и доразберутся позже
- сохраняется полный набор заголовков запроса с вычисткой секретов по имени
  и по совпадению значения с токеном
This commit is contained in:
av
2026-08-01 12:37:17 +03:00
parent 5e2385ba6e
commit 41f2f05f2f
20 changed files with 1903 additions and 0 deletions
@@ -0,0 +1,26 @@
-- +goose Up
-- Доставка — один принятый пакет от Health Auto Export. Тело лежит в сыром
-- архиве по raw_path; здесь только учёт и метаданные автоматизации.
CREATE TABLE delivery (
id TEXT PRIMARY KEY,
received_at TEXT NOT NULL,
automation_name TEXT NOT NULL DEFAULT '',
automation_id TEXT NOT NULL DEFAULT '',
aggregation TEXT NOT NULL DEFAULT '',
period TEXT NOT NULL DEFAULT '',
session_id TEXT NOT NULL DEFAULT '',
bytes INTEGER NOT NULL,
sha256 TEXT NOT NULL,
raw_path TEXT NOT NULL,
parse_status TEXT NOT NULL,
points INTEGER NOT NULL DEFAULT 0
);
CREATE INDEX delivery_received_at ON delivery (received_at);
-- Хеш тела: пока только учёт. Отсев идентичных повторов включим, когда
-- увидим на живых данных, как часто HAE присылает байт-в-байт одно и то же.
CREATE INDEX delivery_sha256 ON delivery (sha256);
-- +goose Down
DROP TABLE delivery;
@@ -0,0 +1,9 @@
-- +goose Up
-- Полный набор заголовков запроса (JSON: имя → массив значений), кроме
-- несущих секреты. Документация HAE называет пять заголовков, но что
-- приложение шлёт на самом деле — неизвестно, а именно из незадокументированных
-- полей уже вышли самые полезные находки (см. docs/local-research.md).
ALTER TABLE delivery ADD COLUMN headers TEXT NOT NULL DEFAULT '{}';
-- +goose Down
ALTER TABLE delivery DROP COLUMN headers;