@dodomain/connect

中文文档
0.3.2发布于 2026/08/20MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 1.4万

Dodomain的官方浏览器部件——在模式iframe中打开主机域连接流量并转发其生命周期事件.

中文使用文档
文档目录8 节
  1. 安装
  2. 使用量
  3. API 密码
  4. showDoDomain(options) → { close }
  5. onError —— 说 DoDomainWidgetError
  6. onClose —— 说 DoDomainCloseDetail
  7. 来源和CSP
  8. 主机URL倒置

@ dodomain/ 连接

可嵌入的浏览器部件 域名打开主机连接流 在一个模式的 Iframe 中将其生命周期事件转发回您的应用程序。 与 @dodomain/node,在服务器上会话符号的薄荷.

📖 附有可操作示例的指南 : dodomain.io/docs/widget (英语) · 所有文件: dodomain.io/docs (英语)使用反应? @dodomain/react 用钩子包裹此部件.

安装

npm install @dodomain/connect
# or: pnpm add @dodomain/connect · yarn add @dodomain/connect

零运行时间依赖, ~3KB 浏览器捆绑( 双端无害环境管理+ CJS + 自定义) .d.ts; 数据 捆绑留下 无分区 看到了吗 test/build.smoke.test.ts) (中文(简体) ).

使用量

import { showDoDomain } from "@dodomain/connect";

// token comes from your server: POST /api/v1/sessions via @dodomain/node
const { token } = await fetch("/my-api/domain-session").then((r) => r.json());

const handle = showDoDomain({
  token,
  onVerified: ({ domain }) => {
    console.log("connected:", domain);
    location.reload();
  },
  onClose: ({ state }) => {
    // "verified" | "pending" | "failed" | "unknown" — closing now tells you
    // something, so you don't have to re-poll your own backend to find out.
    if (state !== "verified") keepTheConnectDomainPromptVisible();
  },
  onError: (err) => {
    if (err.code === "MOUNT_BLOCKED") {
      // The iframe never mounted (host CSP, network, content blocker).
      // Same session, full page — see "Origins & CSP" below.
      location.assign(err.hostedUrl);
      return;
    }
    console.error("connect flow failed:", err.type, err.code);
  },
});

// handle.close() to dismiss it programmatically

API 密码

showDoDomain(options) → { close }

选项类型页:1
tokenstring要求。 会话符号( E)dd_sess_…从 POST /api/v1/sessions。 。 。 .
baseUrlstring域名来源. 默认为 https://app.dodomain.io。 。 。 .
onVerified(detail: { domain?: string }) => void域能验出后起火.
onClose(detail: DoDomainCloseDetail) => void当模式被解除时会起火(回放点击,内流关闭, handle.close())),与会后已知的状态相通——见下文. 一个零弧 () => … 对照旧版本编写的处理器继续工作.
onError(detail: DoDomainWidgetError) => void当流量不能加载或报告会话错误时起火——见下文。 默认缺席(前:沉默).
loadTimeoutMsnumber等待主机流的负载握手需要多久才能将嵌入物视为失败. 默认 15000。 。 。 .

返回一个控件 close()框中的信息为 原产地检查 反对 baseUrl,所以只有主机流才能触发回调. 必须在浏览器中运行 .

onError —— 说 DoDomainWidgetError

一个跨原产地的 Iframe的HTTP 404/500不会开火 onerror 或暴露可读内容,所以 被打碎的嵌入器曾经是完全沉默的. 每个 onError 细节带一个 code (单位:千美元) hostedUrl (同一会话的整页流程),加a type数字 :

  • { type: "load-timeout", code: "MOUNT_BLOCKED" } - 里面没有握手 loadTimeoutMs (a 404, DNS 失败, 离线网络, 内容屏蔽器, 或主机页面 CSP —— 任何从来就不够 运行主机流量自己的JS.
  • { type: "load-error", code: "MOUNT_BLOCKED" } 一个更快的信号 用于同样的事实: iframe属于自己 error 事件开火, 或者说 您的页面 CSP 报告封锁了帧 (单位:千美元)securitypolicyviolation 打开 frame-src编号 :child-src编号 :default-src)),着陆于 毫秒而不是等待出来 loadTimeoutMs。 。 。 .
  • { type: "session-error", code: string } ——主机页面上载并报告故障. code 匹配主机页面本身的页内错误横幅所用的相同词汇 (单位:千美元)expired, (中文(简体) ), not_found, (中文(简体) ), invalid_request, (中文(简体) ), internal) (中文(简体) ). 两名制作人:a verify() 调用 自2026-08-18年以来,这一标志是: 当工作表显示时已死亡 打开 (单位:千美元)expired 编号 : not_found以迷惑的态度降临你 load-timeout 换句话说 将此一个当作终端: 关闭工作表并薄荷新会话 而不是重试同样的事物.

code === "MOUNT_BLOCKED" 这是您需要的“嵌入在这里是不可能的”检查: 工作表从未出现,所以用户在工作表内所做的任何工作都无法成功——发送到 err.hostedUrl 换句话说 这是故意不叫的 CSP_BLOCKED: 从主页 a CSP块,一个DNS故障和一个广告屏蔽器是无法区分的,所有四个都想要相同的 倒计时.

onClose —— 说 DoDomainCloseDetail

onClose 接收 { state, domain? },来源于流 自己的后米斯吉流量,所以 解雇并非含糊不清

state含义
verified流量报告已核实域(domain 已设定). 粘相——后期出错不能降级.
pending流量挂起, 但用户在任何结果前关闭 .
failed流量报告出错(例如a) verify() 并且从未被证实.
unknown部件完全没有从流中听到 —— 把这个配给 MOUNT_BLOCKED onError。 。 。 .

签名 connection.verified webhook仍然是真相的来源; state 是一个UI提示,和 浏览器中的任何内容都可以被偷取.

来源和CSP

部件从 iframe 中装入主机流 一个 源代码,因此是一个内容-安全政策 您的页面必须允许它进入 frame-src (浏览器掉回 child-src,则 default-src故你们可以随意决定:

Content-Security-Policy: frame-src https://app.dodomain.io;
  • https://app.dodomain.io 生产来源—— 价值 DODOMAIN_DEFAULT_ORIGIN (单位:千美元)packages/core/src/origin.ts),这是什么 baseUrl 默认为 和这个repo定义的单一地点. api.dodomain.io 财务报告和审定财务报表 connect.dodomain.io 为: 同一用途的化妆品名称 没有 今天已经服役了——不要允许列入.
  • 如果你通过自己的 baseUrl (自营或中转), 批准来源.
  • 部件不向您的页面注入脚本、样式、字体或图像, 所以 frame-src 这是 只有它需要的指示。 它会听自己的页面 securitypolicyviolation 事件 早期检测到一个区块——一个只读的收听器,在任何地方都没有报告.

主机URL倒置

如果帧不能挂起,请倒回同一会话全页——没有第二次API呼叫 符号已经是您的 :

showDoDomain({
  token,
  onError: (err) => {
    if (err.code === "MOUNT_BLOCKED") location.assign(err.hostedUrl); // {baseUrl}/connect/{token}
  },
});

hostedUrl 故意省略 embed编号 :origin编号 :theme iframe 中包含的查询参数 : 将流量放入嵌入式模式,这对顶级导航是错误的. 过 returnUrl 当您将会话薄荷时, 用户会返回您的应用程序.

见 src/index.ts 执行.

版本与发布记录

@dodomain/connect 共发布 6 个版本,首次发布于 2026/07/31;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.2latest2026/08/202 个月前
0.3.12026/08/202 个月前
0.3.02026/08/192 个月前
0.2.12026/08/043 个月前
0.2.02026/08/043 个月前
0.1.02026/07/313 个月前

关于 @dodomain/connect 的常见问题

@dodomain/connect 是什么?

Dodomain的官方浏览器部件——在模式iframe中打开主机域连接流量并转发其生命周期事件.

如何安装 @dodomain/connect?

在项目目录运行 npm install @dodomain/connect,或使用 pnpm add / yarn add / bun add。

@dodomain/connect 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dodomain/connect 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@dodomain/connect 可以商用吗?

@dodomain/connect 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dodomain/connect 的下载量有多少?

根据 npm 官方下载统计,@dodomain/connect 在 2026/10/13 – 2026/11/11 这 30 天内被下载 14,332 次,日均约 478 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dodomain/connect 还在维护吗?

最新版本 0.3.2 发布于 2026/08/20(2 个月前);至今共发布 6 个版本,其中过去 12 个月发布了 6 个;首次发布于 2026/07/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。