# internal/nsdadapter — транспорт к НРД

Реализует `m2mcore.NSDSender`. Основной канал — Интеграционный шлюз
(ИШ) НРД через REST API; ИШ сам подписывает и упаковывает пакеты ЭДО,
нам XMLDSig не требуется. Резерв — WS ONYX (заглушка до PR-6).

## Состав

- `igw/client.go` — REST-клиент ИШ: `SendPackage`, `GetStatus`,
  `ListIncoming`. Body передаётся base64 в JSON, ретраи на 5xx и
  сетевые ошибки, 4xx не ретраится.
- `router.go` — маршрутизация доменного типа сообщения в `PackageType`
  ЭДО (`#M2MTR`, `#M2MTD`, `#M2MER`, `SUBBR/SUBER/SUB16`,
  `Assets_investment`).
- `sender.go` — реализация `m2mcore.NSDSender`: сериализует Request в
  windows-1251 через `nsdxml.Marshal` и шлёт в ИШ. Ответы НРД
  приходят асинхронно через входящий поллер.
- `config.go` — профили `guest-gost`, `guest-rsa`, `test3-gost`,
  `test3-rsa`, `prod-gost`, `prod-rsa` (URL ИШ, канал, контейнер
  ключа, таймауты, retry).
- `onyx/onyx.go` — скелет SOAP-клиента WS ONYX. Реальная реализация —
  после PR-6 (подпись через crypto-service).

## cmd/nsd-adapter

`cmd/nsd-adapter/main.go` — сервис с HTTP `/healthz` и фоновым
поллером входящих пакетов (`ListIncoming` по типам ЭДО из
`IncomingPackageKinds`). Параметры:

- `BJ_HTTP_ADDR` — адрес HTTP (по умолчанию `:8082`).
- `BJ_NSD_PROFILE` — имя профиля. Если не задан — сервис стартует в
  режиме idle (только healthz, опрос отключён). Полезно для CI и
  смоук-тестов без реального ИШ.
- `BJ_NSD_POLL_INTERVAL` — частота опроса, например `15s`.

## Принципы логирования

- Логируем: метод, путь, HTTP-статус, package_id, длительность.
- **Не логируем** тело пакета — там могут быть ПДн.
- Маскировка ПДн в любых журналах — на стороне `m2m-core` при
  логировании content до отправки в адаптер.
