SDK TypeScript / JavaScript

SDK completamente tipado construido con openapi-typescript y openapi-fetch. Compatible con Node.js 18+, Deno, Bun y navegadores modernos (usa fetch estándar).

npm: @ssddo/ecf-sdkGitHub

Instalación

bash
npm install @ssddo/ecf-sdk

Uso rápido

typescript
import { EcfClient } from "@ssddo/ecf-sdk";
const client = new EcfClient({
baseUrl: "https://api.test.ecfx.ssd.com.do",
apiKey: "tu-api-key" // o usa la variable ECF_API_KEY
});
// Enviar un ECF con polling automático
const result = await client.sendEcf("rnc-empresa", ecfData);
console.log(result.ImpresionUrl); // URL del QR
console.log(result.CodSec); // Código de seguridad
console.log(result.FechaFirma); // Fecha de firma

Opciones de Polling

El método sendEcf realiza polling automático con backoff exponencial. Puede personalizar el comportamiento:

typescript
const result = await client.sendEcf("rnc", ecfData, {
initialDelay: 1000, // Delay inicial en ms
maxDelay: 10000, // Delay máximo en ms
maxRetries: 20, // Intentos máximos
backoffMultiplier: 1.5, // Multiplicador de backoff
timeout: 120000, // Timeout total en ms
signal: abortController.signal // AbortSignal opcional
});

Cliente Frontend (Solo lectura)

Para aplicaciones frontend, use createFrontendClient que solo expone endpoints GET y maneja el ciclo de vida del token automáticamente (usa localStorage por defecto).

typescript
import { createFrontendClient } from "@ssddo/ecf-sdk";
const frontend = createFrontendClient({
baseUrl: "https://api.prod.ecfx.ssd.com.do",
getToken: async () => {
// Obtener token desde tu backend
const res = await fetch("/api/ecf-token");
return (await res.json()).token;
}
});
// Consultar estado de un ECF
const status = await frontend.raw.GET("/ecf/{trackId}", {
params: { path: { trackId: "abc-123" } }
});

Acceso directo a la API

Además del método sendEcf, puede acceder a cualquier endpoint directamente con tipado completo:

typescript
// GET con tipado de ruta
const { data } = await client.raw.GET("/company/{rnc}", {
params: { path: { rnc: "123456789" } }
});
// POST con body tipado
const { data: result } = await client.raw.POST("/ecf/send", {
body: ecfPayload
});

Métodos de conveniencia

El SDK incluye métodos de conveniencia para todas las operaciones: compañías, certificados, consultas ECF, DGII, recepción y API keys.