SDK Node.js para España
@corp-merch/sdk — TypeScript-first, cero dependencias, funciona en Node 18+, Bun, Deno, Vercel y AWS Lambda.
Instalación e init
npm install @corp-merch/sdk. Inicializa: const cm = new CorpMerch({ apiKey: process.env.CM_KEY, country: 'ES', env: 'production' }). El cliente autoload IVA 21% y enruta facturas vía FACe/SII (AEAT); hub Madrid por defecto.
Quickstart — enviar pedido
const order = await cm.orders.create({ idempotencyKey: crypto.randomUUID(), buyer: { vatId: 'ES…' }, lines: [{ sku: 'TSH-001', qty: 200 }], promisedDate: '2026-07-01' }); console.log(order.id, order.estimatedIvaAmountCents). Devuelve Order tipado con status discriminated-union. Errores lanzados como ValidationError / RateLimitError etc.
Verificación webhook
En una ruta Express/Fastify: const event = cm.webhooks.constructEvent(rawBody, req.headers['x-corp-signature'], process.env.CM_WEBHOOK_SECRET); switch (event.type) { case 'invoice.issued': … }. Lanza SignatureVerificationError en mismatch o timestamp obsoleto (>5 min).
FAQ
¿ESM o CommonJS?
Ambos — dual package. ESM preferido (.mjs + .d.ts), CommonJS vía require() funciona vía package.json exports.
¿Funciona con Bun y Deno?
Sí — probado en CI en Bun 1.x y Deno 1.x con la misma test suite que Node. Usa npm: specifier en Deno o simplemente import en Bun.
¿Cómo se configuran los reintentos?
3 reintentos por defecto en 5xx, 429 y errores de red con backoff. Override vía new CorpMerch({ retries: 5, retryBackoffMs: 200 }).
¿Hay método catalog streaming?
Sí — cm.catalog.list({ country: 'ES' }) devuelve AsyncIterator; for await (const item of …) itera todas las páginas automáticamente.
¿Código fuente disponible?
MIT en GitHub: github.com/corp-merch/sdk-js. PRs bienvenidos; CLA requerido para contribuciones no triviales.