@integradte/sdk
v0.6.0
Published
SDK Node.js/TypeScript para la API de IntegraDTE con arquitectura hexagonal
Maintainers
Readme
@integradte/sdk
SDK en Node.js + TypeScript para consumir la API de IntegraDTE, siguiendo arquitectura hexagonal.
Instalacion
npm install @integradte/sdkEstructura
src/domain: modelos y estructuras DTEsrc/ports: contrato del API clientsrc/application: capa de serviciosrc/adapters/httpintegra: adapter HTTP concreto
Uso recomendado
import { Client, Service, encodeDataDTE } from '@integradte/sdk';
const adapter = new Client({
apiKey: 'TU_X_API_KEY'
});
const service = new Service(adapter);
const dataDTE = encodeDataDTE({
Encabezado: {
IdDoc: {
TipoDTE: 33,
FchEmis: '2026-02-03'
}
}
});
const response = await service.createDocument({
code_sii: '33',
data_dte: dataDTE,
idempotencyKey: 'mi-idempotency-key-1'
});
console.log(response);Primer uso: login y primera empresa (bootstrap)
Cuando un usuario todavía no tiene un x-api-key (recién creado, sin empresas),
usa OnboardingClient para el arranque. No requiere apiKey: se usa justo antes
de tener uno.
import { OnboardingClient, Client, Service } from '@integradte/sdk';
const onboarding = new OnboardingClient();
// 1) Login con email + password -> devuelve el x-user-key.
const login = await onboarding.login({
email: '[email protected]',
password: 'PasswordSeguro123'
});
const xUserKey = (login.data as { xUserKey: string }).xUserKey;
// 2) Crear la PRIMERA empresa con el x-user-key -> devuelve el x-api-key.
// Solo funciona si el usuario no tiene empresas (si no, la API responde 409).
const created = await onboarding.createFirstBusiness(
{
businessName: 'Empresa Ejemplo SpA',
rut: '12345678-9',
activity: 'Desarrollo de software',
address: 'Av. Principal 123',
commune: 'Providencia',
city: 'Santiago',
emailDte: '[email protected]',
emailContact: '[email protected]',
rutLegalAgent: '17240862-1',
fullNameLegalAgent: 'Alejandro Jesus Cea Perez',
resolutionNumberDte: '0',
resolutionDateDte: '1992-12-31',
resolutionNumberTicket: '0',
resolutionTicketDate: '2014-05-27'
},
xUserKey
);
const xApiKey = (created.data as { apiToken: { xApiKey: string } }).apiToken.xApiKey;
// 3) De aquí en adelante se opera con el x-api-key normal.
const service = new Service(new Client({ apiKey: xApiKey }));Construir data_dte con tipos
Incluye tipos completos para:
Dte33DataDte34DataDte39DataDte41DataDte46DataDte52DataDte56DataDte61Data
Y builders:
dte33ToRequestdte34ToRequestdte39ToRequestdte41ToRequestdte46ToRequestdte52ToRequestdte56ToRequestdte61ToRequest
Endpoints implementados
Bootstrap (sin x-api-key, vía OnboardingClient)
login— valida email + password y devuelve elx-user-keycreateFirstBusiness— crea la primera empresa con elx-user-keyy devuelve elx-api-key
Usuarios y empresas
getMelistBusinessescreateBusinessgetBusinessupdateBusinessenableProductionModeenableCertificationMode
Documentos y compras
createDocumentlistDocumentsgetDocumentgetDocumentStatssyncDocumentrequeueDocumentrequeueOfflineDocumentrequeueOfflineDocumentStatuscreateCessiongeneratePDFcreatePurchaselistPurchaseAcknowledgments
Certificados, billing y numeraciones
uploadCertificategetCertificateInfogetCurrentCertificategetBillingBalancelistBillingPaymentsgetNumerationSummarygetLastUsedFoliouploadNumerationdeleteNumerationrequestNumbersrequestNumerations
Licencias offline
createLicenselistLicensesgetLicenselistLicenseDevicesenableLicensedisableLicenserevokeLicenseactivateLicenserefreshLicense
Filtros y folios offline
const documents = await service.listDocuments({
code_sii: '33',
status: 'accepted',
from_date: '2026-01-01',
to_date: '2026-01-31',
page: 1,
limit: 20
});
const folioRanges = await service.requestNumbers({
document_type: 33,
quantity: 100
});Scripts
pnpm build
pnpm test
pnpm typecheckVersionado y releases
El repo usa release-please con el workflow ./.github/workflows/release.yml:
- Al hacer push a
main, crea/actualiza un PR de release. - Al mergear ese PR, crea tag + GitHub Release.
- Cuando la release se crea, publica automáticamente en npm.
Para que funcione:
- Debes usar Conventional Commits (
feat:,fix:,feat!:oBREAKING CHANGE:). - Debes tener el secret
NPM_TOKENconfigurado en GitHub.
