opencoredev/domain-sdk
GitHub: opencoredev/domain-sdk
一个面向 SaaS 平台的 TypeScript SDK,通过统一 API 简化客户自定义域名的添加、验证、监控和移除等全生命周期管理。
Stars: 279 | Forks: 12
一个用于客户域名的 TypeScript 客户端。向你已在运行的平台添加一个主机名,返回你的客户所需的确切 DNS 记录,跟踪其状态直到准备就绪,并安全地将其移除。
- 支持 Vercel、Cloudflare for SaaS、Railway、Render 和 Netlify 的适配器
- 统一的生命周期管理,用于添加、读取、列出、验证和移除域名
- 提供面向客户 DNS 指令的确切路由、所有权和证书记录
- 由 provider 授权的验证和证书状态,无误报的就绪状态
- 幂等的添加和移除操作,带有标准化且支持重试的错误处理
- 顺序轮询,支持超时、取消、回调和 provider 退避机制
- 一个隔离的测试适配器,绝不会调用真实的 provider
## 安装
```
npm install @opencoredev/domain-sdk
```
Domain SDK 仅限服务端使用,并且需要 Node 20+ 或 Bun。请勿将 provider 凭据暴露在浏览器代码中。
## 使用说明
```
import { createDomainClient } from "@opencoredev/domain-sdk";
import { vercel } from "@opencoredev/domain-sdk/vercel";
const domains = createDomainClient({
provider: vercel({
token: process.env.VERCEL_TOKEN!,
projectId: process.env.VERCEL_PROJECT_ID!,
}),
});
const domain = await domains.add("app.customer.com");
for (const record of domain.records.filter((record) => record.required)) {
console.log(record.type, record.name, record.value);
}
const active = await domains.waitUntilActive(domain.hostname);
```
对于你所拥有的父域名下由租户选择的子域名,可将客户端限定在该 namespace 内:
```
import { createSubdomainClient } from "@opencoredev/domain-sdk";
const subdomains = createSubdomainClient({
domainClient: domains,
baseDomain: "mydomain.com",
reservedLabels: ["www", "api", "admin"],
});
subdomains.toHostname("customer"); // customer.mydomain.com
```
当 provider 支持泛域名时,使用 `provisionWildcard()` 一次即可;或者使用 `add("customer")` 进行逐个主机名的预配。你的应用程序仍需负责租户所有权及唯一标签的存储。
## Providers
支持 Vercel、Cloudflare for SaaS、Railway、Render、Netlify,以及一个内存中的测试适配器。每个 provider 都位于其独立的入口点之后,并保留你的 UI 所需的平台特定 DNS 和验证详情。
## 文档
完整文档位于 **[domain-sdk.dev/docs](https://domain-sdk.dev/docs)**。推荐阅读:
- [安装说明](https://domain-sdk.dev/docs/installation)
- [Provider 对比](https://domain-sdk.dev/docs/providers)
- [贡献指南](https://domain-sdk.dev/docs/project/contributing)
## 开发说明
```
bun install
bun run dev
bun run test
bun run check-types
bun run lint
bun run build
```
文档通过免 sudo 的 Portless 代理在 `http://domain-sdk.localhost:1355` 运行。使用 `PORTLESS=0 bun run dev` 可绕过代理。
## 发布
在 `.tegami/` 目录下添加一条 Tegami 更新日志,然后运行完整的本地发布流程:
```
bun run release
```
发布工具链需要 Node.js 24 或更高版本。
该命令会对 SDK 进行代码检查、类型检查和测试;使用 Tegami 进行版本控制;构建包;将其发布到 npm;并移除已完成的发布锁。如果发布失败,Tegami 会保留该锁,以便 `bun run tegami publish` 能够安全地重试。
## 许可证
[MIT](./LICENSE)
由 @leodev 构建
标签:API集成, MITM代理, SaaS, TypeScript, 可观测性, 域名管理, 多云适配, 安全插件, 暗色界面, 自动化攻击