Skip to content

Servicios gRPC

GM Hades Backend registra cuatro servicios gRPC independientes sobre un único puerto. Cada servicio tiene su propio archivo .proto, su propio paquete de código generado y su propio dominio de responsabilidad. Los servicios no se importan entre sí.

QueryGatewayService v1

  • Paquete proto: query
  • Archivo: proto/query.proto
  • Propósito: Endpoint legado de ejecución de consulta única, mantenido por compatibilidad hacia atrás con integraciones existentes.
  • Métodos: ExecuteQuery, Check (health check)

Este servicio no recibe nuevas funcionalidades. Los proyectos nuevos deben usar v2.

QueryGatewayService v2

  • Paquete proto: queryv2
  • Archivo: proto/query_v2.proto (778 líneas, completamente documentado en el archivo)
  • Propósito: Gateway SQL completo con todas las capacidades de consulta, streaming, operaciones de esquema y monitoreo.

Métodos

MétodoTipoDescripción
ExecuteQueryUnarioConsulta SQL con paginación, búsqueda, sort y metadata de columnas
StreamQueryStreaming servidorConsulta SQL con entrega incremental en chunks
CancelQueryUnarioCancela una consulta activa por su ID
GetActiveQueriesUnarioLista las consultas en ejecución para un tenant
ExecuteBatchUnarioEjecuta múltiples consultas independientes en una sola llamada
ExecuteTransactionUnarioEjecuta múltiples consultas en una transacción SQL Server con nivel de aislamiento configurable
GetTableSchemaUnarioIntrospección de tabla: columnas, índices, foreign keys, constraints
ListTablesUnarioEnumera tablas y vistas con filtrado opcional
ValidateQueryUnarioValida la sintaxis SQL sin ejecutar la consulta
GetServiceInfoUnarioVersión del build, commit hash y uptime

TenantContext

Todas las llamadas v2 requieren un TenantContext:

message TenantContext {
string rfc = 1; // RFC del cliente, 10-13 caracteres
int32 timeout_seconds = 2; // Default 300, máximo 600
string connection_tag = 3; // Etiqueta de auditoría opcional
}

ExecuteQueryRequest

{
"tenant": {
"rfc": "KIJ0906199R1",
"timeout_seconds": 60,
"connection_tag": "dashboard-main"
},
"sql_query": "SELECT Codigo, Descripcion FROM CatUnidades",
"pagination": {"page": 1, "page_size": 50},
"sort": {"column": "Codigo", "descending": false},
"search": {"term": "TRACTO", "columns": ["Descripcion"]},
"return_metadata": true,
"return_statistics": true
}

StreamQuery — chunks de respuesta

StreamQuery emite tres tipos de chunks discriminados por ChunkType:

ChunkTypeContenido
METADATADefiniciones de columnas (nombre, tipo, precisión, nullabilidad)
DATAFilas del resultado en el batch actual
ENDEstadísticas totales: filas totales, tiempo de ejecución, bytes transferidos

Comparación de métodos por caso de uso

Caso de usoMétodo recomendado
Consulta con paginación para UIExecuteQuery
Exportación de dataset > 10 000 filasStreamQuery
Dashboard con múltiples KPIs en paraleloExecuteBatch
Actualización de varias tablas de forma atómicaExecuteTransaction
Explorar estructura de la base de datosGetTableSchema + ListTables
Validar SQL antes de enviarlo a producciónValidateQuery
Monitoreo de operaciones en cursoGetActiveQueries
Cancelar una operación de larga duraciónCancelQuery

BovedaFiscalDBService

  • Paquete proto: bovedafiscaldb
  • Archivo: proto/boveda_fiscal_db.proto
  • Propósito: Consultas SQL de solo lectura contra la base de datos MariaDB de la Bóveda Fiscal, accesible únicamente a través de un túnel SSH.

Métodos

MétodoTipoDescripción
ExecuteQueryUnarioSELECT parametrizado contra MariaDB vía túnel SSH
StreamQueryStreaming servidorResultado en chunks (default 100 filas/chunk, máximo 1 000)
ListTablesUnarioLista tablas y vistas del schema
GetTableSchemaUnarioMetadata de columnas, nullabilidad, flags de clave primaria

Solo se aceptan SELECT, SHOW, DESCRIBE y EXPLAIN. Cualquier otro tipo de sentencia devuelve codes.InvalidArgument antes de abrir el túnel SSH.

Consulta con parámetros posicionales

Los parámetros se pasan como repeated string params y se corresponden con los marcadores ? en la consulta:

{
"rfc": "MTC0109038R4",
"sql_query": "SELECT * FROM Facturas WHERE RFC_Emisor = ? AND Año = ?",
"params": ["XAXX010101000", "2025"]
}

BovedaFiscalSFTPService

  • Paquete proto: bovedafiscalsftp
  • Archivo: proto/boveda_fiscal_sftp.proto (532 líneas)
  • Propósito: Acceso de solo lectura al servidor SFTP que almacena CFDIs XML (comprobantes fiscales digitales).

Métodos

MétodoTipoDescripción
ListDirectoryUnarioListado de directorio con metadata
DownloadFileUnarioDescarga completa de archivo hasta 10 MB
StreamDownloadStreaming servidorDescarga en chunks configurables (default 64 KB)
StatFileUnarioMetadata de archivo o directorio
ReadTextFileUnarioContenido de texto hasta 50 MB como string
SearchXMLFilesStreaming servidorDescubrimiento recursivo de archivos XML
FindByUUIDUnarioLocaliza un CFDI por su UUID sin descargarlo
StreamDownloadByUUIDStreaming servidorLocaliza y descarga un CFDI por UUID
DownloadBatchAsZipStreaming servidorResuelve múltiples CFDIs por UUID, los comprime en ZIP y transmite el archivo con progreso en tiempo real

Límites de tamaño por operación

OperaciónLímiteMotivo
DownloadFile10 MBRespuesta unaria única
ReadTextFile50 MBContenido de texto en la respuesta
StreamDownloadSin límiteEntrega en chunks de 64 KB
DownloadBatchAsZipSin límiteZIP transmitido vía io.Pipe sin carga en memoria

DownloadBatchAsZip — protocolo de dos fases

DownloadBatchAsZip emite dos tipos de chunk sobre el mismo stream, discriminados por ZipChunkType:

Fase 1 — PROGRESS: Por cada UUID que se resuelve en el árbol de directorios SFTP, se emite un chunk con progress_percent y progress_status. Proporciona retroalimentación en tiempo real al cliente durante la resolución.

Fase 2 — DATA: Una vez resueltos todos los UUIDs, se transmiten los bytes del archivo ZIP en chunks. El primer chunk DATA incluye zip_file_name, files_found, files_not_found y not_found_uuids. El último chunk DATA incluye total_size_bytes.

Documentación interactiva en el puerto

La documentación completa de todos los métodos, mensajes y campos está disponible en HTML en http://host:50051/docs. El servidor HTTP en ese mismo puerto —multiplexado con cmux— sirve la documentación generada a partir del contenido de los archivos proto.

Resumen

  • GM Hades expone cuatro servicios gRPC: v1 (legado), v2 (gateway completo), BovedaFiscalDB (MariaDB vía SSH) y BovedaFiscalSFTP (CFDIs XML).
  • El v2 tiene 10 métodos organizados en cinco categorías: consultas, streaming, batch/transacciones, esquema y monitoreo.
  • TenantContext con el RFC del cliente es obligatorio en todas las llamadas v2.
  • Bóveda Fiscal DB acepta solo sentencias de lectura (SELECT, SHOW, DESCRIBE, EXPLAIN). El resto devuelve error antes de abrir el túnel SSH.
  • DownloadBatchAsZip opera en dos fases sobre un stream único: PROGRESS por resolución de UUIDs, DATA por bytes del ZIP. Nunca carga el archivo completo en memoria.