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.
Комментарии