# @devicechain/client 中文文档

规范地址：https://npmcn.com/package/%40devicechain/client/

版本：1\.4\.0
npm 元数据更新时间：2026-11-11T16:18:23.650Z
中文译文更新时间：2026-11-12T03:18:22.000Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40devicechain/client
原文对照：https://npmcn.com/package/%40devicechain/client/?lang=original
项目主页：https://devicechain.io/
源码仓库：https://github.com/devicechain-io/devicechain

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：125 kB，13 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- peer 依赖：graphql ^16\.0\.0 \|\| ^17\.0\.0
- 首次发布：2026-09-01T21:39:38.855Z
- 最新版本发布：2026-11-11T16:18:23.121Z
- 近 30 天下载量：5112（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：48（近 12 个月 48 个）

## 中文简介

设备Chan客户端 SDK – 双层认证,输入了GraphQL操作,并在客户端电线上订阅了graphql-ws.

## 安装

```sh
npm install @devicechain/client
```

也可以使用：`pnpm add @devicechain/client`、`yarn add @devicechain/client`、`bun add @devicechain/client`

## README

# @devicechain/ 客户端

DuiceChain 客户端 SDK:一个小的、框架不可知的核心,用于与一个 浏览器中的设备 Chain 实例 。 已输入图QL `fetch`现场直播 订阅结束 `graphql-ws`,并一个符号连接 您的应用程序填写.

这里没有阿波罗 没有商店 也没有反应 它拥有电线,你的应用程序 拥有州和UI.

```bash
npm install @devicechain/client graphql
```

`graphql` 你几乎肯定已经拥有了,因为 sDK接受的打入文档来自 GraphQL 代码生成器 .

## 请求去的地方

每个设备Chain功能区服务于自己的GraphQL端点和SDK 给他们打电话 **相对于页面**,作为 `/api/<area>/graphql`这是 包 约 a DeviceChain 入侵服务: SPA at `/`后方每个区域 `/api/<area>`。 。 。 .

因此,一个来自同一来源的应用程序需要配置到 都说吧 从别处送达的应用程序需要dev-server代理或倒置 转发的代理 `/api/<area>/...` 以实例表示的形状—— 设备 Chain 控制台本身 `vite.config.ts` 用户.

## 查询和变异

```ts
import { gql } from '@devicechain/client';
import { DeviceListDocument } from './gql/graphql'; // your generated documents

const { devices } = await gql('device-management', DeviceListDocument, {
  first: 25,
});
```

该地区是第一个论点,它是一个被检查的工会—— `AREAS` 导出 作为实时运行的数组,而不仅仅是一个类型,所以可以列举.

从文档中推断出结果和可变类型. 如果手术 不需要变量,参数是可选的.

失败的到来 `GraphQLRequestError` 带有 HTTP 状态和 图QL 错误列表 . `isForbiddenError(err)` 一个分类值 特别的,因为"你可能不会这样做" 是一个不同的事情 显示一个 用户比“ 请求没有到达” .

## 认证

设备钱使用两个符号: a **租户出入证** 普通工作,还有 **身份标志** 例如,有范围的管理终点。 你登记一个获取器 每个区域, SDK 在每个请求中附带一个正确的区域—— 检测到管理区域 从地区名称, 所以一个新的行政呼叫 不能悄悄地骑租户标志.

```ts
import { setAuthTokenGetter, setIdentityTokenGetter } from '@devicechain/client';

setAuthTokenGetter(async () => store.accessToken); // refresh inside if near expiry
setIdentityTokenGetter(async () => store.identityToken);
```

登录和刷新没有符号的呼叫; 通过 `{ anonymous: true }` 这些.

`createSessionTokens` 提供更新的逻辑。 你告诉它在哪里 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}象征的一对还活着 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}怎么叫新鲜点 之前不久它就恢复了活力 访问令牌过期, 在同时通话者之间共享一个飞行中刷新 (新鲜的令牌旋转),并降低会后到达的结果: 已替换 :

```ts
import { createSessionTokens, gql, setAuthTokenGetter } from '@devicechain/client';

const session = createSessionTokens({
  read: () => store.pair, // { accessToken, refreshToken } | null
  apply: (pair) => { store.pair = pair; },
  refresh: async (refreshToken) =>
    (await gql('user-management', REFRESH, { refreshToken }, { anonymous: true })).refresh,
  onEnd: (err) => showSignIn(err), // refused, lapsed, or offline past expiry
});
setAuthTokenGetter(session.getAccessToken);
const stop = session.startAutoRefresh(); // optional: refresh on a timer, not only on demand
```

服务器拒绝, 如无效或被撤销的刷新符号, 结束 立即开会。 瞬间故障不会:没有反应,5xx,或429. 虽然 访问令牌仍然有效, 呼叫者不断得到它 `startAutoRefresh` 以紧张的后退重试。 届会只在 访问符实际过期 .

`decodeToken`, (中文(简体) ), `isExpired` 财务报告和审定财务报表 `hasAuthority` 用于读取索赔的导出 客户端。 它们解码,不验证——服务器是权威.

## 订阅

```ts
import { subscribe, disposeSubscriptions } from '@devicechain/client';

const unsubscribe = subscribe(
  'event-management',
  MeasurementStreamDocument,
  { deviceToken: 'sensor-01' },
  {
    next: (data) => render(data),
    error: (err) => report(err),
    connected: (wasRetry) => setLive(true, wasRetry),
    closed: () => setLive(false),
  },
);

// on sign-out, drop every area socket so a stale token's connection cannot linger
disposeSubscriptions();
```

每个区域共用一个套接字,并在订阅时重复使用. `connected` 财务报告和审定财务报表 `closed` 是连接级的信号,让用户界面告诉“连接” 除了"离线"之外,只有数据库是无法区分的.

套接字只包含订阅;通过HTTP发送查询和突变. 这个 服务器用代码关闭它 `4401` 当它打开了过期的进入符时. `subscribe` 处理关闭的您 : 它重新连接一次 与新解决的 符号,再次订阅,并报告重新连接为 `connected(true)`{\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}所以重新点燃 任何你一定不能错过 当你看到它.

## 还有这里

-   **基图分辨率** (单位:千美元)`resolveBasemap`, (中文(简体) ), `renderableBasemap`)——客户一半 因此,绘制地图的每个表面都会解决 地表覆盖 租户默认的方式相同.
-   **口罩** (单位:千美元)`generateToken`, (中文(简体) ), `conformsToMask`, (中文(简体) ), `parseMask`(......) —— 设备脚本词汇,在往返前验证客户端侧.

## 兼容性

无害环境管理,仅供捆绑者溶液使用(网络、网络包装、滚动、建设)。 这个 所公布的申报使用无延展说明,在 类型脚本 `bundler` 模块分辨率和 **没有** 下级 `node16`编号 :`nodenext`。 。 。 .

## 许可证

阿帕奇2.0 (英语). 见 [自由主义](https://npmcn.com/package/%40devicechain/client/LICENSE)。 。 。 .

## 常见问题

### @devicechain/client 是什么？

设备Chan客户端 SDK – 双层认证,输入了GraphQL操作,并在客户端电线上订阅了graphql-ws\.

### 如何安装 @devicechain/client？

在项目目录运行 npm install @devicechain/client，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：graphql（^16\.0\.0 \|\| ^17\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @devicechain/client 支持 TypeScript 吗？

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

### @devicechain/client 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @devicechain/client 可以商用吗？

@devicechain/client 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @devicechain/client 的下载量有多少？

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

### @devicechain/client 还在维护吗？

最新版本 1\.4\.0 发布于 2026/11/12（今天）；至今共发布 48 个版本，其中过去 12 个月发布了 48 个；首次发布于 2026/09/02。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

