Files
Bridge-and-Join-s/internal/nsdadapter/router.go
fontvielle a8cdeeb838 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>
2026-05-14 00:55:20 +03:00

59 lines
2.1 KiB
Go

package nsdadapter
import "fmt"
// PackageType — тип пакета ЭДО НРД. Используется при отправке через ИШ.
type PackageType string
// Известные типы пакетов M2M и связанных сервисных сообщений.
const (
PackageM2MTransferRequest PackageType = "#M2MTR"
PackageM2MTransferDecision PackageType = "#M2MTD"
PackageM2MTransferError PackageType = "#M2MER"
PackageSUBBR PackageType = "SUBBR"
PackageSUBER PackageType = "SUBER"
PackageSUB16 PackageType = "SUB16"
PackageAssetsInvestment PackageType = "Assets_investment"
)
// MessageKind — внутренний классификатор доменного M2M-сообщения,
// который мы хотим отправить в НРД.
type MessageKind string
const (
KindTransferRequest MessageKind = "transfer_request"
KindTransferDecision MessageKind = "transfer_decision"
KindTransferResponse MessageKind = "transfer_response"
KindHandbookRequest MessageKind = "handbook_request"
KindParticipantForm MessageKind = "participant_form"
)
// RouteToPackageType подбирает PackageType ЭДО для нашего MessageKind.
func RouteToPackageType(kind MessageKind) (PackageType, error) {
switch kind {
case KindTransferRequest:
return PackageM2MTransferRequest, nil
case KindTransferDecision:
return PackageM2MTransferDecision, nil
case KindTransferResponse:
return PackageM2MTransferError, nil
case KindHandbookRequest:
return PackageAssetsInvestment, nil
case KindParticipantForm:
return PackageAssetsInvestment, nil
}
return "", fmt.Errorf("nsdadapter: не задан PackageType для kind=%q", kind)
}
// IncomingPackageKinds — типы входящих пакетов, которые нужно опрашивать
// и обрабатывать на нашей стороне.
func IncomingPackageKinds() []PackageType {
return []PackageType{
PackageM2MTransferDecision,
PackageM2MTransferError,
PackageSUBBR,
PackageSUBER,
PackageSUB16,
}
}