opencoredev/domain-sdk

GitHub: opencoredev/domain-sdk

一个面向 SaaS 平台的 TypeScript SDK,通过统一 API 简化客户自定义域名的添加、验证、监控和移除等全生命周期管理。

Stars: 279 | Forks: 12

Domain SDK — Custom domains, handled

npm version GitHub stars Follow @leodev on X

一个用于客户域名的 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, 可观测性, 域名管理, 多云适配, 安全插件, 暗色界面, 自动化攻击