SDK · Manuales
Descargas

XamiLib Python — Referencia de clases

Paquete: xamisdk_client. El punto de entrada es la clase XamiSDK. Los métodos siguen la convención Python (snake_case). La interfaz es equivalente a la de PHP.


XamiSDK

Punto de entrada de la librería.

Constructor

XamiSDK(config: dict)

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).

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.

Pades

Firma de documentos PDF (PAdES).

Métodos

sign(pdf_bytes: bytes, opts: dict) -> str

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

result(request_id: str) -> dict

Consulta el estado. Cuando está DONE, incluye el PDF firmado en la clave pdf.

wait(request_id: str, timeout_seconds: int = 60, poll_seconds: float = 1.0) -> bytes

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

sign_and_wait(pdf_bytes: bytes, opts: dict, timeout_seconds: int = 60) -> bytes

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

Ejemplo

pdf_firmado = xami.pades().sign_and_wait(
    open("documento.pdf", "rb").read(),
    {
        "credential_key": "TU_CREDENCIAL",
        "signer_name": "Tu Nombre",
        "reason": "Aprobación",
        "variables": {"name": "Tu Nombre"},
    },
)
open("documento_firmado.pdf", "wb").write(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 web3.

Métodos

sign(tx_hash: str, opts: dict) -> str

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

result(request_id: str) -> dict

Consulta el estado.

wait(request_id: str, timeout_seconds: int = 60, poll_seconds: float = 1.0) -> dict

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

sign_and_wait(tx_hash: str, opts: dict, timeout_seconds: int = 60) -> dict

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() -> list lista Todas las credenciales disponibles.
get(key: str) credencial o None Una credencial por su credential_key.

Designs

Consulta de diseños de sello en la caché local.

Método Devuelve Descripción
all() -> list lista Todos los diseños disponibles.
get(key: str) diseño o None Un diseño por su design_key.

Health

Método Devuelve Descripción
self() -> dict estado Estado del servicio local (pareado, tenant, etc.).

Manejo de errores

Todos los métodos lanzan xamisdk_client.XamiException ante un fallo (credencial inválida, servicio caído, timeout). Envuélvelos en try/except.

from xamisdk_client import XamiException

try:
    pdf = xami.pades().sign_and_wait(pdf_bytes, {"credential_key": "..."})
except XamiException as e:
    print("Error al firmar:", e)
Descargar este manual (.md)