syntax = "proto3";

// Пакет внутреннего gRPC: события BitGo передаются в mpc_service только по gRPC (публичный ingress — Wallet Gateway).
// Типичный поток: WalletGateway принимает webhook от BitGo → вызывает ProcessBitGoWebhook с JSON-телом в json_payload.
// Бизнес-логика: дедуп, обновление транзакций, исходящие вызовы в Ledger.
package webhook.v1;

service WebhookService {
  // Обработка одного события webhook BitGo: разбор JSON, дедупликация по event_id, обновление custody-транзакций,
  // при необходимости — gRPC в Ledger (статус вывода, зачисление депозита).
  rpc ProcessBitGoWebhook(ProcessWebhookRequest) returns (ProcessWebhookResponse);
}

message ProcessWebhookRequest {
  // Полное тело события от BitGo в виде одной JSON-строки (как передал gateway после приёма webhook).
  // Клиент (gateway) обязан передавать валидный JSON; mpc парсит и маппит поля transfer / state / data и т.д.
  string json_payload = 1;
}

message ProcessWebhookResponse {
  bool ok = 1;                     // true, если обработка завершилась без фатальной ошибки.
  string event_id = 2;             // Стабильный id события (хеш, transfer id и т.п.) — для логов и ответа вызывающей стороне.
}
