@ably/react-web-cli

中文文档
1.0.0发布于 2026/05/01Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 2532

将 Ably CLI 嵌入网络终端的响应组件

中文使用文档
文档目录18 节
  1. 特征
  2. 安装
  3. 先决条件
  4. 使用量
  5. 道具
  6. 执行签名终点
  7. 中断更改和迁移
  8. HMAC 签名认证( 正在更改)
  9. 连接国
  10. 服务器启动断接
  11. 会话恢复
  12. 分块模式
  13. 设置终端服务器
  14. 页:1
  15. 调试Verbose 日志( V)
  16. 示例项目
  17. 发展
  18. 许可证

@capaly/ react-web-cli (英语)

npm (scoped) License

在网络应用程序中嵌入交互式Ably CLI终端的回放组件.

Ably Web CLI demo screenshot

特征

  • 内嵌 a ably CLI 完全定制 任何 React app 中的会话( xterm.js) .
  • 使用 HMAC 签名的认证连接 Ably 终端服务器的安全 WebSocket 签名配置 财务报告和审定财务报表 签名。 。 。 .
  • 一等站 UX:
    • 带有 ANSI 颜色的终端本地状态信息
    • 动画旋转器在( 重新) 连接时
    • 实况倒计时和清晰的指导(按下) 输入 取消/重试)
    • ASCII 重要状态信息模式框
  • 强大的连接处理 :
    • 自动指数回放重接 (0 s, 2 s, 4 s, 8 s.)
    • 切换到手动重联之前可配置的最大重联尝试( 默认: 15)
    • 用特定错误代码妥善处理服务器启动的断开
  • 复会 页面再装入或瞬间网络丢失(resumeOnReload) (中文(简体) ).
  • 分屏模式 并同时有两个独立的终端会话.
  • 工作在全屏或大抽屉中(见 examples/web-cli) (中文(简体) ).
  • 以 TypeScript 写成, 完全可以树为轴 .

安装

# Using npm
npm install @ably/react-web-cli

# Using yarn
yarn add @ably/react-web-cli

# Using pnpm
pnpm add @ably/react-web-cli

先决条件

  • 17.0.0以上反应
  • Ably CLI 终端服务器的运行实例(参见 @cli-terminal-服务器(中文(简体) )
  • 生成HMAC签名证书的后端签名端点(见下文执行指南)

使用量

import { useState, useEffect } from "react";
import { AblyCliTerminal } from "@ably/react-web-cli";

export default function MyTerminal() {
  const [status, setStatus] = useState("disconnected");
  const [signedConfig, setSignedConfig] = useState("");
  const [signature, setSignature] = useState("");

  // Sign credentials via your backend endpoint
  // See examples/web-cli/api/sign.ts for implementation reference
  async function signCredentials(apiKey: string) {
    const response = await fetch("/api/sign", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ apiKey }),
    });
    const { signedConfig, signature } = await response.json();
    setSignedConfig(signedConfig);
    setSignature(signature);
  }

  // Authenticate on mount (or when user provides credentials)
  useEffect(() => {
    const apiKey = "YOUR_ABLY_API_KEY"; // Get from user input or config
    signCredentials(apiKey);
  }, []);

  if (!signedConfig || !signature) {
    return <div>Loading...</div>;
  }

  return (
    <div style={{ height: 500 }}>
      <AblyCliTerminal
        websocketUrl="wss://web-cli.ably.com"
        signedConfig={signedConfig}
        signature={signature}
        initialCommand="ably --version"
        onConnectionStatusChange={setStatus}
        onSessionEnd={(reason) => console.log("session ended", reason)}
        onSessionId={(id) => console.log("session id", id)}
        resumeOnReload
        maxReconnectAttempts={15}
      />

      <p>Status: {status}</p>
    </div>
  );
}

道具

Prop类型需求默认说明
websocketUrl字符串✅- 说吧WebSocket 终端服务器的 URL
signedConfig字符串✅- 说吧JSON 编码的签名配置,包含证书和元数据(HMAC认证)
signature字符串✅- 说吧HMAC-SHA256 签名安全认证Config
initialCommand字符串没有- 说吧启动时运行的命令
onConnectionStatusChange函数没有- 说吧当连接状态改变时召回
onSessionId函数没有- 说吧收到会话ID后召回
onSessionEnd函数没有- 说吧会话结束后调用
maxReconnectAttempts编号没有15个放弃前最大重联尝试
resumeOnReload布尔没有虚假是否尝试在重新装入页面后恢复已有会话
enableSplitScreen布尔没有虚假启用使用第二个独立终端的分屏模式

说明: 这个 signedConfig 财务报告和审定财务报表 signature 必须由 您的后端 使用HMAC-SHA256签名. 绝不在浏览器中签名 - 这将暴露您的签名秘密 .

参考执行情况:

  • 维塞尔: 见 examples/web-cli/api/sign.ts 对于一个没有服务器的函数示例
  • 节点.js: 见 examples/web-cli/server/sign-handler.ts 用于共享签名逻辑
  • 维特·德夫: 见 examples/web-cli/vite.config.ts 用于开发中间软件

您的签名秘密必须符合终端服务器的 SIGNING_SECRET 配置 。 联系您的平台团队以获取这个秘密或参考 终端服务器文档。 。 。 .

执行签名终点

你个 必须 执行后端终点以签署证书。 这里有一个小例子:

// Example: /api/sign endpoint (Node.js/Express/Vercel)
import crypto from "crypto";

export default function handler(req, res) {
  const { apiKey } = req.body;
  const secret = process.env.SIGNING_SECRET; // From environment variable

  // Build config object
  const config = {
    apiKey,
    timestamp: Date.now(),
  };

  // Sign it with HMAC-SHA256
  const configString = JSON.stringify(config);
  const hmac = crypto.createHmac("sha256", secret);
  hmac.update(configString);
  const signature = hmac.digest("hex");

  res.json({ signedConfig: configString, signature });
}

安保要求:

  • ⚠️ 从不 在客户端代码中嵌入您的签名秘密
  • ⚠️ 永远 在您的安全后端服务器上签名
  • QQ 签名密钥必须匹配终端服务器的配置
  • QQ 生产时使用 HTTPS 保护 API 键

全面实施的实例:

  • 见 examples/web-cli/ 完整工作示例目录
  • 包括 Vercel 无服务器功能、 Vite dev 中间软件和 React 集成

中断更改和迁移

HMAC 签名认证( 正在更改)

这是一个突破性的变化. 认证机制已经更新,以便使用HMAC签署的证书来改进安全.

旧 API( 过期 ) :

<AblyCliTerminal
  websocketUrl="wss://web-cli.ably.com"
  ablyApiKey="YOUR_ABLY_API_KEY"           // ❌ Removed
  ablyAccessToken="YOUR_ABLY_TOKEN"        // ❌ Removed
  ablyEndpoint="nonprod:sandbox"           // ❌ Removed
  ablyControlHost="staging-control..."     // ❌ Removed
/>

新建 API( 需要):

<AblyCliTerminal
  websocketUrl="wss://web-cli.ably.com"
  signedConfig={signedConfig}              // ✅ Required
  signature={signature}                    // ✅ Required
/>

移徙步骤:

  1. 执行后端签名 : 创建一个 /api/sign 后端的端点(见上文“执行签名端点”部分)
  2. 获得签名秘密 : 获取 SIGNING_SECRET 来自您的平台团队( 必须匹配终端服务器配置)
  3. 更新您的反应代码 :
    • 删除旧道具 : ablyApiKey, (中文(简体) ), ablyAccessToken, (中文(简体) ), ablyEndpoint, (中文(简体) ), ablyControlHost
    • 打电话给你 /api/sign 要得到的终点 signedConfig 财务报告和审定财务报表 signature
    • 将签名的证书传递给 AblyCliTerminal

为什么改变?

新的由 HMAC 签名的认证可以防止证书被篡改,并确保配置设置(如端点和控制主机)由服务器认证. 这为嵌入式终端会话提供了更好的安全.

连接国

该组件管理多个连接, 声明您的应用程序可以响应 :

  • initial: 终端正在初始化
  • connecting: 试图连接到服务器
  • connected: 成功连接和准备
  • disconnected: 服务器或用户手动关闭的连接
  • reconnecting: 连接中断后试图重新连接
  • error: 连接错误或其他终端错误

服务器启动断接

终端以特定的 WebSocket 关闭代码妥善处理服务器启动的断开:

代码说明行为
1 000个正常关闭在终端显示原因, 需要手动重接
1001 (简体中文)服务器离开显示服务重启消息, 需要手动重接
1011号服务器出错显示出乎意料的条件消息, 需要手动重接
1013号无服务显示不可用服务消息, 需要手动重接
4000个通用服务器断开显示服务器提供的理由, 需要手动重接
4001 (英语)认证失败显示带有指令的认证错误, 需要手动重接
第4008号违反政策显示认证超时/格式消息, 需要手动重接
第4429号达到能力限制使用 CLI 安装指令显示容量消息, 需要手动重接

对于其他WebSocket关闭代码,终端会自动尝试使用指数后退策略重新连接.

会话恢复

何时 resumeOnReload 启用,终端将把会话ID存储到 sessionStorage 并尝试在重新装入一页后恢复会话。 这使得在导航出行后和回行后可以进行无缝体验.

分块模式

何时 enableSplitScreen 设置为 true,组件在终端右上角显示一个分割图标。 点击此图标可以将视图分割为两个独立的终端会话并排.

分屏模式的特性 :

  • 两个完全独立的终端会话,共享相同的证书
  • 每个终端都有自己的有关闭按钮的标签
  • 两个终端自动调整大小,以保持最佳布局
  • 每个终端独立进行状态和连接管理
  • 关闭任一终端返回到单页模式

该功能是为需要同时运行多条指令的开发者设计的,比如在一个面板上订阅一个频道,同时在另一个面板上发布.

设置终端服务器

此组件所需的终端服务器由单独的寄存器提供. 请参看 @cli-terminal-服务器 用于:

  • 安装指令
  • 配置选项
  • 本地运行服务器
  • Docker 部署指令

用于生产,Ably网络CLI连接到 wss://web-cli.ably.com 默认情况下,这是终端服务器的主机实例.

页:1

  • 航站楼需要一个容器来进行尺寸,所以要确保母元素有被定义的高度和宽度.
  • 该组件会用指数回放自动处理重联.
  • 仅 ably, (中文(简体) ), clear,以及 exit 命令默认在终端中可用.
  • 终端支持完整的xterm.js功能,包括颜色和Unicode.

调试Verbose 日志( V)

装有内置动词记录器的部件船 默认禁用。 。 。 . 以下列任何方式启用 在此之前 组件挂载 :

  1. 查询字符串旗 - 简单添加 ?cliDebug=true 到页面 URL. 示例 http://localhost:5173/?cliDebug=true (国旗可与其他查询参数合并

  2. 运行时全球旗帜 - 从浏览器 DevTools 控制台运行:

window.ABLY_CLI_DEBUG = true;

终端将发布详细寿命周期日志,其前缀为 [AblyCLITerminal DEBUG]。删除旗帜或刷新而无需查询 参数返回到无声模式.

示例项目

使用该组件的完整实例,见 网络 cli 实例 在 Ably CLI 存储器中.

发展

# Install dependencies
pnpm install

# Build the package
pnpm build

# Run tests
pnpm test

许可证

阿帕奇 - 2.0

版本与发布记录

@ably/react-web-cli 共发布 13 个版本,首次发布于 2025/04/11;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.0latest2026/05/016 个月前
0.17.02026/03/097 个月前
0.16.02026/01/209 个月前
0.15.02025/12/0411 个月前
0.14.02025/11/061 年前
0.13.12025/09/241.1 年前

关于 @ably/react-web-cli 的常见问题

@ably/react-web-cli 是什么?

将 Ably CLI 嵌入网络终端的响应组件

如何安装 @ably/react-web-cli?

在项目目录运行 npm install @ably/react-web-cli,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=17.0.0)、react-dom(>=17.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@ably/react-web-cli 支持 TypeScript 吗?

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

@ably/react-web-cli 支持 ESM 还是 CommonJS?

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

@ably/react-web-cli 可以商用吗?

@ably/react-web-cli 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@ably/react-web-cli 的下载量有多少?

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

@ably/react-web-cli 还在维护吗?

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