XamiLib Go — Referencia de clases
Paquete: xamisdk. El punto de entrada es XamiSDK, creado con xamisdk.New(cfg).
Todos los métodos devuelven error como último valor; el error concreto es
*xamisdk.XamiException.
XamiSDK
Punto de entrada de la librería.
Constructor
xamisdk.New(cfg xamisdk.Config) *XamiSDK
Config acepta:
| Campo | Descripción |
|---|---|
Endpoint |
URL del servicio local (por defecto http://127.0.0.1:8300). |
WrapperKey |
Credencial de aplicación (wrp_...). |
WrapperSecret |
Secret de la credencial (wsec_...). |
TimeoutSeconds |
Timeout HTTP en segundos (30 por defecto). |
Métodos
| Método | Devuelve | Descripción |
|---|---|---|
Pades() |
*Pades |
Servicio de firma de documentos PDF. |
Blockchain() |
*Blockchain |
Servicio de firma de transacciones EVM. |
Credentials() |
*Credentials |
Consulta de credenciales. |
Designs() |
*Designs |
Consulta de diseños de sello. |
Health() |
*Health |
Estado del servicio local. |
Results() |
*Results |
Resultados de firma recientes. (xamiSDK ≥ 0.2.0) |
Errors() |
*Errors |
Errores registrados por el servicio local. (xamiSDK ≥ 0.2.0) |
Sync() (map[string]interface{}, error) |
resumen | Recarga credenciales y diseños desde Xami sin reiniciar. (xamiSDK ≥ 0.2.0) |
Pades
Firma de documentos PDF (PAdES).
Métodos
Sign(pdfBytes []byte, opts PadesSignOptions) (string, error)
Envía un PDF a firmar. Devuelve el request_id. PadesSignOptions: CredentialKey
(requerido), DesignKey, Variables, Reason, Location, SignerName.
Result(requestID string) (map[string]interface{}, error)
Consulta el estado. Cuando está DONE, incluye el PDF firmado en pdf_base64.
Wait(requestID string, timeoutSeconds int, pollSeconds float64) ([]byte, error)
Bloquea hasta que la firma esté lista y devuelve el PDF firmado.
SignAndWait(pdfBytes []byte, opts PadesSignOptions, timeoutSeconds int) ([]byte, error)
Atajo: Sign() + Wait(). Devuelve el PDF firmado.
Ejemplo
pdfBytes, _ := os.ReadFile("documento.pdf")
firmado, err := xami.Pades().SignAndWait(pdfBytes, xamisdk.PadesSignOptions{
CredentialKey: "TU_CREDENCIAL",
SignerName: "Tu Nombre",
Reason: "Aprobación",
Variables: map[string]interface{}{"name": "Tu Nombre"},
}, 60)
if err != nil {
var xe *xamisdk.XamiException
if errors.As(err, &xe) {
fmt.Println("Error al firmar:", xe.Message, xe.Code)
}
return
}
os.WriteFile("documento_firmado.pdf", firmado, 0o644)
Blockchain
Firma de transacciones / mensajes EVM. El chip actúa como wallet y devuelve r/s/v;
tú ensamblas la transacción con tu librería EVM.
Métodos
Sign(txHash string, opts BlockchainSignOptions) (string, error)
Envía el hash a firmar. Devuelve el request_id. BlockchainSignOptions:
CredentialKey (requerido, credencial EVM), ChainID.
Result(requestID string) (map[string]interface{}, error)
Consulta el estado.
Wait(requestID string, timeoutSeconds int, pollSeconds float64) (map[string]interface{}, error)
Bloquea hasta tener la firma. Devuelve el mapa con r/s/v/signature.
SignAndWait(txHash string, opts BlockchainSignOptions, timeoutSeconds int) (map[string]interface{}, error)
Atajo: Sign() + Wait().
Ejemplo
firma, err := xami.Blockchain().SignAndWait("0xHASH_DE_LA_TX", xamisdk.BlockchainSignOptions{
CredentialKey: "TU_CREDENCIAL_EVM",
ChainID: 648541,
}, 60)
// firma["r"], firma["s"], firma["v"]
Credentials
Consulta de credenciales en la caché local.
| Método | Devuelve | Descripción |
|---|---|---|
All() ([]interface{}, error) |
lista | Todas las credenciales disponibles. |
Get(key string) (map[string]interface{}, error) |
credencial o nil |
Una credencial por su credential_key. |
Designs
Consulta de diseños de sello en la caché local.
| Método | Devuelve | Descripción |
|---|---|---|
All() ([]interface{}, error) |
lista | Todos los diseños disponibles. |
Get(key string) (map[string]interface{}, error) |
diseño o nil |
Un diseño por su design_key. |
Health
| Método | Devuelve | Descripción |
|---|---|---|
Self() (map[string]interface{}, error) |
estado | Estado del servicio local (pareado, tenant, versión, etc.). |
Version() (string, error) |
versión | Versión del xamiSDK local. "" si es anterior a 0.2.0. |
APIVersion() (int, error) |
entero | Versión del contrato local. 1 = sin Sync, Results ni Errors. |
Results
Requiere xamiSDK ≥ 0.2.0.
Pades.Result() necesita que conserves el requestID. Si tu proceso se reinició o el
push no llegó, ese documento quedaba inalcanzable desde la librería. Con Results
puedes recuperar lo firmado sin depender de tu propio almacenamiento.
| Método | Devuelve | Descripción |
|---|---|---|
Recent(limit int) ([]interface{}, error) |
lista | Últimos resultados (PENDING / DONE / ERROR). |
Pending(limit int) ([]interface{}, error) |
lista | Solo los que siguen esperando la firma del chip. |
pendientes, _ := xami.Results().Pending(50)
for _, it := range pendientes {
r := it.(map[string]interface{})
fmt.Println(r["request_id"], "lleva esperando desde", r["created_at"])
}
Errors
Requiere xamiSDK ≥ 0.2.0.
Devuelve el mensaje corto y el error_id de cada fallo. Nunca devuelve el
traceback: el detalle técnico solo sale del equipo del cliente cuando alguien
ejecuta xamisdk report. Está pensado para que tu aplicación pueda decirle al usuario
qué falló y con qué identificador pedir soporte.
| Método | Devuelve | Descripción |
|---|---|---|
Recent(limit int) ([]interface{}, error) |
lista | Últimos errores registrados. |
ForRequest(requestID string) ([]interface{}, error) |
lista | Errores de un request concreto. |
fallos, _ := xami.Errors().ForRequest(requestID)
if len(fallos) > 0 {
f := fallos[0].(map[string]interface{})
fmt.Println("No se pudo firmar:", f["short"])
fmt.Println("Menciona", f["error_id"], "al pedir soporte.")
}
Compatibilidad de versiones
Los métodos marcados con xamiSDK ≥ 0.2.0 devuelven 404 contra un servicio
anterior. Compruébalo antes si no controlas la versión instalada:
v, _ := xami.Health().APIVersion()
if v >= 2 {
xami.Sync()
}
Manejo de errores
Todos los métodos devuelven error; el error concreto es *xamisdk.XamiException
(campos Message, Code, Code == 0 cuando no aplica, p. ej. error de red).
firmado, err := xami.Pades().SignAndWait(pdfBytes, opts, 60)
if err != nil {
var xe *xamisdk.XamiException
if errors.As(err, &xe) {
log.Printf("Error al firmar: %s (%d)", xe.Message, xe.Code)
}
return
} Descargar este manual (.md)
