§01
Обзор
- Что это: микросервис приватности/анонимизации внутри healthcare-экосистемы healthcare-platform (realm
healthcare-platform-internal-service). ПринимаетpiiUserId→ возвращает детерминированный анонимный UUID (anonUserId); поддерживает обратную ре-идентификацию (строго ограниченную), ротацию и удаление по GDPR. Взаимодействует с соседними сервисамиpii-serviceиphi-service(тоже в очереди на анализ — #46, #44). - Тип / статус / роль: api (внутренний REST-микросервис) / active (последний коммит 2025-12-09, CI/деплой на месте) / contributor — основную доменную логику написал Ramiro (28+1 коммитов), пользователь Davron Yuldashev — 11 коммитов, преимущественно DevOps/инфраструктура.
- Активный период: 2025-10-13 → 2025-12-09 (~2 месяца), 40 коммитов, активная разработка с веткой
fix/health-endpointsи merge-флоу.
§02
Стек
- Языки: TypeScript (strict), рантайм Bun.
- Фреймворки/библиотеки (из `package.json` и кода):
- Elysia 1.4 (+
@elysiajs/cors,@elysiajs/openapi/Swagger) — HTTP-фреймворк поверх Bun. - Drizzle ORM 0.44 +
drizzle-kit+postgres(postgres.js) — доступ к Postgres и миграции. - HashiCorp Vault через
node-vault— Transit-шифрование (AES-256-GCM) + KV + AppRole. - Keycloak +
jose6 — верификация RS256 JWT через JWKS для service-to-service авторизации. - Biome — линт/форматирование (вместо ESLint/Prettier).
- Инфра/деплой: Docker multi-stage (
bun:1.3.3-slim, non-root пользователь), отдельныйDockerfile.migrate,docker-compose.yml+docker-compose-dev.ymlс healthcheck'ами. CI: GitLab CI (.gitlab/ci/_common.yml,build.yml,deploy.yml) + GitHub workflows. Vault-хостhttps://vt.ksa.healthcare-platform.com. - Данные: PostgreSQL. 2 таблицы (
drizzle/schema.ts):id_mappings(шифротексты + bytea blind index, status-enum active/rotated/deleted, версия, soft-deletedeletedAt) иmapping_audit(аудит-лог: caller, action, realm, только индексы — без plaintext). Кастомный типbyteaчерезcustomType(из коробки Drizzle его не поставляет). - Заметный тулинг: OpenAPI-спека (
docs/openapi.yaml), архитектурная документация с Mermaid (docs/ARCHITECTURE.md,DATA_FLOW.md,SEQUENCE_DIAGRAMS.md).
§03
Что реализовано
Хронология по всему проекту (для контекста) и отдельно — что сделал пользователь.
Проект в целом (в основном Ramiro):
- Инициализация сервиса, ядро: app/db/vault/health (
cd4658a,366813a). - Auth + шифрование + метрики: верификация JWT, HMAC, Transit encrypt/decrypt (
b8f608f). - Контроллер mappings → переименован в identities (GDPR-семантика), эндпоинты create/lookup/delete (
f8fa0c2,e8c5c3d). - Service-to-service авторизация через Keycloak + RBAC-плагины (
f08945b), CORS + внутренние роуты (e97f8ff). - Конфиг Vault/Keycloak, init/status-скрипты (
d0935fe); кастомный bytea + boolean success + индекс поcreated_at(4b67b1a).
Вклад пользователя (git log --author="Davron", 11 коммитов — с уклоном в DevOps/инфру):
- CI/CD + Docker dev-окружение (
1d99301, 8 файлов): пайплайн GitLab CI (стадии build/deploy),docker-compose-dev.ymlс Postgres,Dockerfile.migrate, multi-stage Dockerfile. - Хардненинг контейнера (
37c72d8,b9081c0): non-root пользователь (groupadd/useradd), фикс ownership,bun:1.3-slimдля builder и prod. - Health-пробы (
f0ae025, 385+/1492−): liveness/readiness эндпоинты с типизированными схемами ответов + OpenAPI-описания; обновление зависимостей (пересборкаbun.lock). - Swagger/конфиг (
e674d63,c2b1e1a,47bbfc2), docker-compose depends_on/healthcheck (bc95012), финальные правки CI/деплоя (ae86fe6). - Vault-путь + debug-логирование (
4a1a524) — ⚠️ см. «Технические челленджи». - Объём: 11/40 коммитов (~28%), сосредоточены в инфраструктуре и операционной готовности, а не в доменной крипто-логике.
§04
Технические челленджи
Только то, что подтверждено в коде (с путями/хешами).
- Детерминированный поиск по зашифрованным данным → паттерн blind index:
pii_user_idхранится в зашифрованном виде (Vault Transit,crypto.ts/mapping-service.ts:62), а для поиска вычисляетсяHMAC-SHA256(key, value)(services/hmac.ts:23) и кладётся вbytea-колонку. Поиск идёт через индекс (mapping-service.ts:41-44), без plaintext в БД. Сильное решение в области privacy-engineering (уровень Senior) — *авторство Ramiro*. - Аудит без утечки PII → таблица
mapping_auditпишет только blind-индексы и метаданные (caller, action, success), а не сами идентификаторы (schema.ts:43-55,mapping-service.ts:8-28). GDPR-friendly. *Авторство Ramiro.* ⚠️audit()глотает ошибки пустымcatch {}— сбои записи аудита остаются незамеченными. - Service-to-service RBAC на Keycloak →
middleware/service-auth.ts: верификация RS256 черезcreateRemoteJWKSet, проверкаiss, требование service-account (preferred_usernameначинается сservice-account-), извлечение realm- и client-ролей; компонуемые Elysia-плагиныrequireServiceRole/requireServiceClient/requireServiceClientWithRole. Чисто и хорошо типизировано. *Авторство Ramiro.* - Soft-delete + машина статусов → enum
active/rotated/deleted, версионирование,deletedAt(GDPR-удаление как маркер,mapping-service.ts:120-173). - Вклад пользователя — операционная готовность: контейнеризация (multi-stage, non-root), CI/CD-пайплайн (GitLab), liveness/readiness-пробы в стиле Kubernetes с OpenAPI-схемами, healthcheck-зависимости в compose. Реальный DevOps/platform-скилл для security-критичного сервиса.
- ⚠️ Найденные проблемы безопасности (честно — НЕ показывать публично как есть): 1.
config/vault.ts:31-33—strictSSL: false/rejectUnauthorized: false: проверка TLS до Vault отключена. 2.services/hmac.ts:8,11,19-22иmapping-service.ts:35-37—console.logпечатает HMAC-ключ, plaintext `piiUserId`, blind index и ответ Vault. В логи утекает ровно то, что сервис существует защищать; README явно декларирует «No raw IDs in logs». Эти debug-логи добавил пользователь в коммите4a1a524(«Added console logging ... of piiUserId and computed indices», «Enhanced logging in hmac service»). Реальный баг + репутационный риск.
§05
AI-разработка
- Найдено сессий: 0. Проверено по ключу нормализации полного пути для этого проекта — совпадений нет. (Стиль commit-сообщений и
.cursor/в репозитории намекают на возможное использование Cursor, но прямых свидетельств в локальной директории сессий Claude Code нет.) - Что было сделано с AI: данных нет.
- Паттерны AI-воркфлоу: отсутствуют.
- Сессий нет.
§06
Достижения и метрики
Из кода/документации, без домыслов:
- 5 ролевых операций маппинга идентичностей (write/read/reidentify/delete/rotate), привязанных к Keycloak-ролям
anon:*. - 2 таблицы + 3 миграции; enum-машина статусов + версионирование + soft-delete.
- Полный набор health-проб:
/health/live,/health/ready,/api/v1/internal/health(+ статус JWKS). - Интеграция с 3 системами: Vault (Transit+KV+AppRole), Keycloak (JWKS/JWT), Postgres.
- CI/CD на 2 платформах (GitLab + GitHub Actions), Docker multi-stage + образ для миграций.
- Метрик нагрузки/масштаба нет (внутренний проприетарный сервис).