Control de solicitudes (AbortSignal)
Cancela solicitudes HTTP en curso y configura timeouts por defecto en cualquier método del SDK.
Todos los métodos del SDK aceptan un parámetro opcional options de tipo RequestOptions. Actualmente soporta la propiedad signal para pasar un AbortSignal y cancelar la solicitud.
Además, el constructor de FactusClient acepta timeout en milisegundos para aplicar un tiempo máximo por defecto a todas las peticiones.
Firma de RequestOptions
interface RequestOptions {
signal?: AbortSignal;
}Cancelar una solicitud
const controller = new AbortController();
// Cancelar después de 3 segundos
setTimeout(() => controller.abort(), 3000);
try {
const response = await factus.bills.list(
{ filter: { status: "1" } },
{ signal: controller.signal },
);
console.log(response.data.data);
} catch (error) {
if (error.name === "AbortError") {
console.log("Solicitud cancelada");
}
}Timeout con AbortSignal.timeout
Los entornos modernos de Node.js (≥ 18) y navegadores soportan AbortSignal.timeout() directamente:
// Cancela automáticamente si la respuesta tarda más de 5 s
const response = await factus.bills.get("SETP990000001", {
signal: AbortSignal.timeout(5000),
});Timeout por defecto del cliente
const factus = new FactusClient({
clientId: process.env.FACTUS_CLIENT_ID!,
clientSecret: process.env.FACTUS_CLIENT_SECRET!,
username: process.env.FACTUS_USERNAME!,
password: process.env.FACTUS_PASSWORD!,
environment: "sandbox",
timeout: 10_000,
});Si además pasas options.signal, el SDK combina ambas señales y aborta cuando se dispara cualquiera de las dos.
AbortSignal.timeout() está disponible en Node.js 18+ y en navegadores
modernos. Para entornos más antiguos usa AbortController con setTimeout
como en el ejemplo anterior.
Usar con listAll()
Puedes pasar el signal al iterador listAll() para cancelar la paginación en cualquier página intermedia:
const controller = new AbortController();
setTimeout(() => controller.abort(), 10000);
for await (const bill of factus.bills.listAll(
{},
{ signal: controller.signal },
)) {
process(bill);
}El iterador se detendrá y lanzará AbortError en cuanto la señal sea abortada.
Compatibilidad
El soporte de AbortSignal está disponible en todos los métodos del SDK.