Node.js SDK для Польша
@corp-merch/sdk — TypeScript-first, ноль зависимостей, работает на Node 18+, Bun, Deno, Vercel и AWS Lambda.
Установка и init
npm install @corp-merch/sdk. Инициализация: const cm = new CorpMerch({ apiKey: process.env.CM_KEY, country: 'Poland', env: 'production' }). Клиент автоматически загружает VAT 23% и маршрутизирует счета через KSeF; хаб Варшава по умолчанию.
Quickstart — отправка заказа
const order = await cm.orders.create({ idempotencyKey: crypto.randomUUID(), buyer: { vatId: 'EU…' }, lines: [{ sku: 'TSH-001', qty: 200 }], promisedDate: '2026-07-01' }); console.log(order.id, order.estimatedVATAmountCents). Возвращает типизированный Order с discriminated-union status. Ошибки выбрасываются как ValidationError / RateLimitError и т.п.
Верификация webhook
В Express/Fastify route: const event = cm.webhooks.constructEvent(rawBody, req.headers['x-corp-signature'], process.env.CM_WEBHOOK_SECRET); switch (event.type) { case 'invoice.issued': … }. Выбрасывает SignatureVerificationError при mismatch или устаревшем timestamp (>5 мин).
FAQ
ESM или CommonJS?
Оба — dual package. ESM предпочтителен (.mjs + .d.ts), CommonJS через require() работает через package.json exports.
Работает с Bun и Deno?
Да — тестируется в CI на Bun 1.x и Deno 1.x с той же test suite, что и Node. Используйте npm: specifier в Deno или просто import в Bun.
Как настраиваются retry?
По умолчанию 3 retry на 5xx, 429 и сетевые ошибки с backoff. Override через new CorpMerch({ retries: 5, retryBackoffMs: 200 }).
Есть streaming-метод для каталога?
Да — cm.catalog.list({ country: 'Poland' }) возвращает AsyncIterator; for await (const item of …) итерирует по всем страницам автоматически (cursor внутри).
Исходники доступны?
MIT-лицензия на GitHub: github.com/corp-merch/sdk-js. PR приветствуются; CLA требуется для нетривиальных вкладов.