feat(nsd-adapter): REST-клиент ИШ НРД + маршрутизация типов пакетов

- internal/nsdadapter/igw/client.go: REST-клиент ИШ (SendPackage, GetStatus, ListIncoming) с base64-JSON, ретраями на 5xx, 4xx без ретраев
- internal/nsdadapter/router.go: маршрутизация MessageKind -> PackageType ЭДО (#M2MTR, #M2MTD, #M2MER, SUBBR/SUBER/SUB16, Assets_investment)
- internal/nsdadapter/sender.go: реализация m2mcore.NSDSender (Send/SendDecision) через REST ИШ, сериализация Request/Decision в windows-1251
- internal/nsdadapter/config.go: профили guest/test3/prod × gost/rsa (URL ИШ, канал, контейнер ключа, retry)
- internal/nsdadapter/onyx/onyx.go: скелет резервного канала WS ONYX (ждёт PR-6 crypto-service для подписи)
- cmd/nsd-adapter/main.go: HTTP /healthz + фоновый поллер входящих по типам ЭДО; idle-режим без BJ_NSD_PROFILE

make ci зелёный. Без внешних Go-зависимостей.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
fontvielle
2026-05-14 00:55:20 +03:00
parent 9e6e95f431
commit a8cdeeb838
10 changed files with 803 additions and 1 deletions
+41
View File
@@ -0,0 +1,41 @@
# 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 до отправки в адаптер.