инструменты 2 мин

OpenCoreDev выпустил Domain SDK 0.2.0 — единый API для управления доменами клиентов сразу на пяти платформах

OpenCoreDev представил Domain SDK — TypeScript-библиотеку, которая унифицирует работу с кастомными доменами на Vercel, Cloudflare for SaaS, Railway, Render и Netlify. Вместо изучения пяти разных API разработчики получают единый интерфейс для добавления, проверки и удаления доменов клиентов с нормализованными статусами DNS, верификации и сертификатов.

Кастомные домены — must-have для B2B SaaS, но интеграция с каждой платформой съедает недели. SDK сокращает это до часов и упрощает миграцию между провайдерами, что критично для масштабируемых продуктов.

Одна библиотека вместо пяти API

Кастомные домены — стандартная фича для SaaS, но каждая хостинг-платформа реализует их по-своему. OpenCoreDev решил эту проблему, выпустив Domain SDK — TypeScript-клиент, который нормализует работу с доменами на пяти платформах: Vercel, Cloudflare for SaaS, Railway, Render и Netlify.

Версия 0.2.0 появилась в npm буквально через день после первого релиза.

Что умеет SDK

Библиотека покрывает весь жизненный цикл домена: добавление hostname, получение точных DNS-записей и отслеживание статуса до момента активации. При этом SDK не регистрирует домены, не хостит DNS, не деплоит приложения и не хранит данные клиентов — это остаётся на стороне вашего приложения.

API минималистичен: createDomainClient() возвращает stateless-клиент с семью методами — add, get, refresh, list, verify, remove и waitUntilActive. Все методы поддерживают AbortSignal, а add/remove идемпотентны, что делает retry безопасным.

Статус — не булево значение

Поскольку DNS, верификация владения и выпуск TLS-сертификата завершаются в разное время, SDK моделирует их раздельно. DomainStatus включает восемь значений: от pending и pending_dns до active, misconfigured и failed.

Объект Domain содержит отдельные поля verification и certificate со своими статусами, плюс массив issues с детализацией проблем — каждая с кодом, сообщением, опциональной записью и флагом retryable.

DNS-записи типизированы

DnsRecord включает type, name, value, purpose (routing/ownership/certificate/other) и status (pending/valid/invalid/unknown). Например, hostname на Vercel генерирует три записи: CNAME для маршрутизации, TXT для подтверждения владения и TXT для ACME-челленджа.

Возможности платформ различаются

Хотя жизненный цикл унифицирован, лимиты платформ остаются. Верификация явно поддерживается только на Vercel и Render. Cloudflare for SaaS требует CNAME-таргет (нет поддержки apex-доменов). Только Render принимает wildcard-имена. Никакой адаптер не редактирует DNS клиента автоматически.

Вместо хардкода ограничений читайте client.capabilities в рантайме — там флаги list, explicitVerification, managedCertificates, apexDomains и wildcardDomains.

Тестирование и AI-агенты

Для CI есть in-memory адаптер memoryProvider(), который никогда не обращается к реальному провайдеру. Он поддерживает transition(), инжект latencyMs, ошибки и лог вызовов.

Отдельно доступен agent skill для Codex, Claude Code, Cursor: npx skills add opencoredev/domain-sdk --skill domain-sdk.

Сценарии использования

  • Multi-tenant SaaS на Vercel: клиент мапит app.customer.com, страница настроек рендерит нужные CNAME/TXT с live-статусом
  • Cloudflare for SaaS в масштабе: Custom Hostnames внутри одной зоны, адаптер держит скоупинг явным
  • Субдомены под вашим базовым доменом: createSubdomainClient с блокировкой зарезервированных меток (www, api, admin)
  • Миграция между провайдерами: меняешь импорт адаптера, логика остаётся той же

Ключевые выводы

  • Domain SDK унифицирует работу с кастомными доменами на пяти платформах через единый TypeScript API
  • Статусы DNS, верификации и сертификатов моделируются раздельно — восемь значений DomainStatus вместо булевых флагов
  • Библиотека stateless и серверная (Node >=20, Bun), не хранит данные клиентов и не редактирует их DNS автоматически
  • Различия платформ (apex/wildcard/explicit verification) доступны через runtime-свойство capabilities
  • In-memory провайдер для CI и agent skill для AI-ассистентов входят в комплект

Автор: Юлия Тарасова · Источник: marktechpost.com

Мнение редакции

**Это редкий случай, когда open-source инструмент решает реальную боль разработчиков SaaS, а не добавляет очередную абстракцию ради абстракции.** Работа с кастомными доменами клиентов — это квест: у Vercel свои костыли, у Cloudflare — свои, у Railway — третьи. Domain SDK берёт на себя всю эту зоопарковую логику и даёт единый интерфейс. Особенно ценно, что статусы DNS, верификации и сертификатов моделируются раздельно — это честный подход, который не скрывает сложность, а структурирует её.

**Что настораживает:** версия 0.2.0 вышла через день после 0.1.0 — либо разработчики забыли что-то критичное в первом релизе, либо это пиар-трюк с быстрыми итерациями. Плюс проект очень молодой, и неясно, как поведёт себя в продакшене под нагрузкой. Но направление правильное: если OpenCoreDev продолжит поддержку и добавит больше провайдеров (AWS CloudFront, Fastly?), это может стать де-факто стандартом для мультитенантных SaaS.

Комментарии