SDK · Manuales
Descargas

XamiLib Ruby — Referencia de clases

Módulo: XamiSDKClient. El punto de entrada es la clase XamiSDK. Los métodos siguen la convención snake_case de Ruby. Health#self está expuesto como self_status, con el alias self (por compatibilidad con el resto de SDKs de esta suite).


XamiSDK

Punto de entrada de la librería.

Constructor

XamiSDKClient::XamiSDK.new(config = {})

config acepta:

Clave Descripción
:endpoint URL del servicio local (por defecto http://127.0.0.1:8300).
:wrapper_key Credencial de aplicación (wrp_...).
:wrapper_secret Secret de la credencial (wsec_...).
:timeout Timeout HTTP en segundos (opcional, 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 Hash Recarga credenciales y diseños desde Xami sin reiniciar. (xamiSDK ≥ 0.2.0)

Pades

Firma de documentos PDF (PAdES).

Métodos

sign(pdf_bytes, opts = {})

Envía un PDF a firmar. Devuelve el request_id. opts: credential_key (requerido), design_key, variables, reason, location, signer_name.

result(request_id)

Consulta el estado. Cuando está DONE, incluye el PDF firmado (pdf_base64).

wait(request_id, timeout_seconds: 60, poll_seconds: 1.0)

Bloquea hasta que la firma esté lista y devuelve el PDF firmado (bytes).

sign_and_wait(pdf_bytes, opts = {}, timeout_seconds: 60)

Atajo: sign() + wait(). Devuelve el PDF firmado.

Ejemplo

pdf_firmado = xami.pades.sign_and_wait(
  File.binread('documento.pdf'),
  {
    credential_key: 'TU_CREDENCIAL',
    signer_name: 'Tu Nombre',
    reason: 'Aprobación',
    variables: { name: 'Tu Nombre' }
  }
)
File.binwrite('documento_firmado.pdf', pdf_firmado)

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(tx_hash, opts = {})

Envía el hash a firmar. Devuelve el request_id. opts: credential_key (requerido, credencial EVM), chain_id.

result(request_id)

Consulta el estado.

wait(request_id, timeout_seconds: 60, poll_seconds: 1.0)

Bloquea hasta tener la firma. Devuelve {"r"=>..., "s"=>..., "v"=>..., "signature"=>...}.

sign_and_wait(tx_hash, opts = {}, timeout_seconds: 60)

Atajo: sign() + wait().

Ejemplo

firma = xami.blockchain.sign_and_wait('0xHASH_DE_LA_TX', {
  credential_key: 'TU_CREDENCIAL_EVM',
  chain_id: 648541
})
# firma['r'], firma['s'], firma['v']

Credentials

Consulta de credenciales en la caché local.

Método Devuelve Descripción
all Array Todas las credenciales disponibles.
get(key) 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 Array Todos los diseños disponibles.
get(key) diseño o nil Un diseño por su design_key.

Health

Método Devuelve Descripción
self (alias de self_status) Hash Estado del servicio local (pareado, tenant, versión, etc.).
version versión Versión del xamiSDK local. nil si es anterior a 0.2.0.
api_version entero Versión del contrato local. 1 = sin sync, results ni errors.

Results

Requiere xamiSDK ≥ 0.2.0.

Pades#result necesita que conserves el request_id. 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 = 50) Array Últimos resultados (PENDING / DONE / ERROR).
pending(limit = 50) Array Solo los que siguen esperando la firma del chip.
xami.results.pending.each do |r|
  puts "#{r['request_id']} lleva esperando desde #{r['created_at']}"
end

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 = 20) Array Últimos errores registrados.
for_request(request_id) Array Errores de un request concreto.
fallos = xami.errors.for_request(request_id)
if fallos.any?
  puts "No se pudo firmar: #{fallos.first['short']}"
  puts "Menciona #{fallos.first['error_id']} al pedir soporte."
end

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:

xami.sync if xami.health.api_version >= 2

Manejo de errores

Todos los métodos lanzan XamiSDKClient::XamiException ante un fallo (credencial inválida, servicio caído, timeout). Expone message y code.

begin
  pdf = xami.pades.sign_and_wait(bytes, { credential_key: '...' })
rescue XamiSDKClient::XamiException => e
  puts "Error al firmar: #{e.message} (#{e.code})"
end
Descargar este manual (.md)