# @everfur/sdk 中文文档

规范地址：https://npmcn.com/package/%40everfur/sdk/

版本：1\.0\.1
npm 元数据更新时间：2026-11-13T21:16:08.036Z
中文译文更新时间：2026-11-14T01:23:50.491Z
软件包许可：SEE LICENSE IN LICENSE\.md

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

原始 npm 页面：https://www.npmjs.com/package/%40everfur/sdk
原文对照：https://npmcn.com/package/%40everfur/sdk/?lang=original
项目主页：https://docs.everfur.com/
源码仓库：https://github.com/Everfur-Health/everfur-sdk-rn

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

- 包体积（解压后）：24.6 MB，445 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：2 个
- peer 依赖：react \>=18，react-dom \>=18，react-native \>=0\.74，@daily-co/daily-js \>=0\.70，expo-speech-recognition \>=1，react-native-vision-camera \>=4，@daily-co/react-native-webrtc \>=124\.0\.6-daily\.1 \|\| \>=155\.0\.1-daily\.1，react-native-safe-area-context \>=5，@daily-co/react-native-daily-js \>=0\.87
- 首次发布：2026-09-01T16:41:54.666Z
- 最新版本发布：2026-11-13T21:16:07.781Z
- 近 30 天下载量：2874（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：43（近 12 个月 43 个）

## 中文简介

将Everfur兽医的聊天记录 健康记录 和宠物状态表面 嵌入到你的React Introduction应用中.

## 安装

```sh
npm install @everfur/sdk
```

也可以使用：`pnpm add @everfur/sdk`、`yarn add @everfur/sdk`、`bun add @everfur/sdk`

## README

# @everfur/ sdk(反应土著和网络)

放弃Everfur的人工智能兽医助理和宠物健康特征(记录、行走/录像、照片检查、宠物状态) 将助理输入网站。 你们的客户和用户可以做什么 见决定 **服务器侧** 由Everfur的权利控制飞机 和SDK提供,所以你门 不传送应用程序更新的特性.

-   六边形,无框架核并有薄的RN层;每个地表均会平分(没有抛出域错误).
-   服务器授权权限:一个功能,你无权使一个故意的不状态,永远不会 空白屏幕,不能为强制客户端.
-   应用程序从不保密 见 [安全模式](https://npmcn.com/package/%40everfur/sdk/#readme-the-security-model)。 。 。 .

> 该分支机构准备在《公约》之下的未来释放 [Everfur SDK许可证](https://docs.everfur.com/license)。 。 。 . 需要本地反应 `>=0.74` (或反应) `>=18` 与 `react-dom` 和节点 `>=18` 在后端的薄荷会话.

截至2026年10月23日,已发布的SDK 0.14.0和CLI/MCP 0.8.0仍然包含有MIT通知. 出版 这些文件不能取代这些文物。 见 [许可证发放状况](https://docs.everfur.com/license-rollout/)。 。 。 . 2.1版本的接受流量尚未提供。 在其下发布的版本需要接受 在伙伴控制台, Sandbox 证书用于评价, 和书面的伙伴协议用于制作. 这些包裹将包括: `LICENSE.md`,以 `SDK-LICENSE.txt`,以及 `THIRD_PARTY_NOTICES` 用于捆绑的开源组件。 这些部件保留自己的许可证.

**获取密钥 :** 打开 [伙伴控制台](https://everfur.com/partners/console?start=sandbox) 并签入. Everfur允许沙盒注册的地方,创建沙盒(test-mode)租户. 如果无法注册, 请您的Everfur联系人创建一个。 生活租户及其钥匙由Everfur团队提供. 联系人 [支持@ everfur.com](mailto:support@everfur.com) 被设置。 可公布的密钥是用来运送的 在您的应用程序中; 密钥不是 .

## 安装

```bash
npm i @everfur/sdk
# A React Native app installs these itself (react-native and react-native-safe-area-context are declared
# optional peers, so a web project is not handed them):
npm i react react-native react-native-safe-area-context
```

按能力划分的同伴依赖关系(只安装您使用的东西):

| 能力 | 额外对等分页 | 页:1 |
| --- | --- | --- |
| 聊天、应享权利 | 无 | 单靠反应+反应-内在作用 |
| 记录 | 主机提供的文件取取器和上传运输 | SDK不导入 Expo 文件系统或图像管理模块 . |
| 照片(检查) | `react-native-vision-camera` | **使用情况 `4.x` 编号为RN 0.74**· ; `5.x` 需要新结构 |
| 电话通话 | `@daily-co/react-native-daily-js` 财务报告和审定财务报表 `@daily-co/react-native-webrtc`,加上日报自己的同行 | 测试对:日-日 `^0.88.0` 使用 webrtc `124.0.6-daily.2` (准确);对等距离范围也允许每日-js 0.90 有 Webrtc 155; iOS 需要 `UIBackgroundModes` `audio`; Expo SDK 55至57使用 `@daily-co/config-plugin-rn-daily-js@0.0.13` |

相机对等点是可选的: 如果您从未挂载 `./video` 或者说 `./photo`你不需要这个. `EverfurRecords` 接受主机的拾取器并上传传输,所以使用适合您的本地模块 app(包括Expo SDK 57)没有SDK对等依赖性限制. `react-native-vision-camera` 需要一个 相机使用说明; `4.x` 还运送了 Expo 配置插件( 添加到 `app.json` 插件),同时 `5.x` 没有船需要自己的同伴 `react-native-nitro-modules` 财务报告和审定财务报表 `react-native-nitro-image`。 。 。 .

### Bundler 分辨率

不需要Metro配置 。 每一个子路径( E)`@everfur/sdk/chat`, (中文(简体) ), `/records`, (中文(简体) ), `/televet`, (中文(简体) ), `/video`, (中文(简体) ), `/photo`, (中文(简体) ), `/animations`, (中文(简体) ), `/client`, (中文(简体) ), `/core`, (中文(简体) ), `/testing`, (中文(简体) ), `/testing/rn`, (中文(简体) ), `/testing/web`在股票安装上解决。 现代捆绑者 读取软件包 `exports` 地图; Metro 0.80.x, 带有 Expo 51 的船舶, 默认为 `unstable_enablePackageExports: false` 从来没有读过,所以包裹 也运载了经典的根层 解析 shims for the same sub paths. 解析 shims for the same subpaths. 解析 shims for the same subpaths. 您不需要打开软件包出口, 而打开它们确实 不改变你得到的.

`@everfur/sdk/server` 这是唯一的例外 故意的 这是你的 **后端** 模块并带有 `sk_partner_` 届会分钟。 如果它被拉入一个应用捆绑, 它扔在进口而不是 将薄荷运送到设备。 只从您的服务器导入 .

### 在网络上

两种方式,一种电线合同,记录在 [文件/伙伴-一体化/13-WEB-integratation.md](https://docs.everfur.com/web/)数字 :

-   **页面**,对于一个您拥有的反应树的页面: `import { EverfurProvider, EverfurChat } from '@everfur/sdk/web'` (年轻人: `react`, (中文(简体) ), `react-dom`) (中文(简体) ). 复制的形状是 [`examples/minimal-web.tsx`](https://docs.everfur.com/web/#web--1-in-page-everfur-sdk-web)选择 `/web` 条目,而不是软件包根: 根为 React 本地条目和导入 `react-native` 财务报告和审定财务报表 `react-native-safe-area-context`,所以在一个 浏览器预测它无法解决它们而不是渲染. 这个 `/web` 需要条目 `react`, (中文(简体) ), `react/jsx-runtime` 财务报告和审定财务报表 `zod` 和没有本地,什么 `npm run verify:pack` 在运行的每个 CI 上证明 在 React Web 项目中导入其中的每一个 .
-   **框架模式**,对于一个页面,您不能完全控制(一个存储前端主题,一个 CMS 页面): 1 `<script src="https://sdk.everfur.com/v1/everfur.js">` 将表面放入框架上 `sdk.everfur.com`,以及 您的租户没有注册的页面来源中, 框架拒绝关闭 。 复制的形状 实值 [`examples/frame-embed.html`](https://docs.everfur.com/web/#web--the-snippet)。 。 。 .

聊天和记录是网络表面(记录在它自己的子路径和它自己的框架文档上,可用) 当Everfur为您的账户提供记录时; 图片和视频目前仍为原始反应。 (Everfur允许您访问兽医) 两个主机都有自己的条目, `@everfur/sdk/web/televet` 财务报告和审定财务报表 `@everfur/sdk/televet`访问打开 默认情况下, INSID 您的应用程序: 以 Everfur 模式( React Natural) 或 对话框( 网络) `VetVisitButton` 财务报告和审定财务报表 `EverfurChat` 挂载自己;主页是一个明确的选择, `prefer="redirect"`。预订屏幕(`@everfur/sdk/televet/booking`, (中文(简体) ), `@everfur/sdk/web/televet/booking`(中文(简体) ) 和电话`@everfur/sdk/televet/call`, (中文(简体) ), `@everfur/sdk/web/televet/call`)是他们自己的条目. 在网络上 所以一个没有人打开访问下载的页面 和一个没有人加入的页面 无 WebRTC 依赖性; 在 React Introduct 上, 两者都是同一捆绑中的静态导入( WebRTC 堆栈是本地的) 模块化您的应用程序注册 `registerEverfurDaily`) (中文(简体) ). 因为 `EverfurChat` 从 `@everfur/sdk/chat` 挂载 访问主机, 一个 React Industrial app, 导入它也会捆绑预订和调用屏幕; `@everfur/sdk/chat/lite` 是一个没有主机的相同聊天, 对于一个挂载的应用程序 `<EverfurTelevetHost />` 或者不开放访问. [文件/伙伴-一体化/16-TELEVET-VISTS.md](https://docs.everfur.com/vet-visits/)。 。 。 .

## 快速启动

把你的树包起来一次,高高的,然后把特征放进门后. 这是参考应用的确切形状 用途,用于 **原生反应** 主机; 浏览器主机从 `@everfur/sdk/web` (见 [打开 网络](https://npmcn.com/package/%40everfur/sdk/#readme-on-the-web):

```tsx
import { EverfurProvider, EverfurChat, petRef, userRef } from '@everfur/sdk';

export default function App() {
  return (
    <EverfurProvider
      config={{
        publishableKey: process.env.EXPO_PUBLIC_EVERFUR_PUBLISHABLE_KEY!, // pk_test_... or pk_live_...  safe to ship
        apiBaseUrl: 'https://api.everfur.com/api/v1',
      }}
      // Omit `user` entirely for anonymous mode (publishable key alone, general answers).
      user={{
          userRef: userRef('your-stable-user-id'),
          // An absolute URL: a relative path does not resolve in a React Native bundle.
          // Your route answers JSON `{ token, expiresAt }`; see the contract below.
          getToken: async () => {
            const res = await fetch('https://your-backend.example.com/everfur/session', { method: 'POST' });
            if (!res.ok) throw new Error('session mint failed: ' + res.status);
            const { token, expiresAt } = (await res.json()) as { token: string; expiresAt: number };
            return { token, expiresAt };
          },
        }}
      activePet={petRef('pet-ref-123')}
    >
      {/* Every prebuilt widget self-gates. CapabilityGate is for YOUR surrounding UI - a tab, a nav
          entry - not for wrapping a widget that already gates itself. */}
      <EverfurChat petRef={petRef('pet-ref-123')} />
    </EverfurProvider>
  );
}
```

`getToken` 电话 **** 一个短命会话符号的后端(从不在app中隐藏秘密). 你的路线 回答乔森, `{ "token": sessionToken, "expiresAt": expiresAt }` 直接从 `mintPartnerSession`,带有 非-2xx 状态在任何故障上,这是文档中每个示例使用的形状:

```ts
import type { MintedToken } from '@everfur/sdk';

async function getToken(): Promise<MintedToken> {
  const res = await fetch('https://your-backend.example.com/everfur/session', {
    method: 'POST',
    headers: { authorization: `Bearer ${yourAppsUserToken}` },
  });
  if (!res.ok) throw new Error('session mint failed: ' + res.status);
  const { token, expiresAt } = (await res.json()) as { token: string; expiresAt: number };
  return { token, expiresAt };
}
```

SDK电话 `getToken` 懒惰地,在一分钟前再薄荷 `expiresAt` (半途而废,以示 活在两分钟以下, 并再次回顾一次 `401`,所以一个新鲜的标志总是使用,而你管理过期。 Everfur从来不知道你如何在(Auth, a JWT, Firebase, Cognito, a)中签字 它需要一个稳定、不透明、不可怀疑的标识 `userRef`. 记录依靠自己的子路径:

```tsx
import { EverfurRecords } from '@everfur/sdk/records';
import { petRef } from '@everfur/sdk';

<EverfurRecords petRef={petRef('pet-ref-123')} />
```

## 安全模式

一条规则是: **应用程序从来就没有秘密.** 两份提供证书,分开,外加只读 用于工具的文件密钥 。 测试模式是沙盒租户(`livemode: false` 参加或参加 生产; API 接受一个 `pk_test_` 键只用于沙盒租户,所以测试键永远无法到达活数据. A 类 沙盒键可以从 `pk_live_` 或者说 `pk_test_`,所以读作 `livemode`而不是前缀 每个环境的API 基础 URL、密钥和主机 MCP 地址在 [环境和密钥](https://docs.everfur.com/quickstart/#quickstart--environments-and-keys)。 。 。 .

| 证书 | 它的栖息地点 | 它会做什么 |
| --- | --- | --- |
| 可公布的密钥 `pk_live_...` 或者说 `pk_test_...` (一个沙盒键可以携带其中之一) | 在应用中( I)`EXPO_PUBLIC_...`) (中文(简体) ). 安全可乘船. | 说出房客的名字 无法自定会话或赋予一个特性 . |
| 伴侣密钥 `sk_partner_...` | **仅** 在您的服务器上。 从不在应用程序,它的捆绑, env, git,或日志. | Mints 会话符号 。 可恢复性和可转性而不发布应用软件. |
| 会话符号( 守护者) | 应用记忆,短命. | 认证一个终端用户; 通过您的后端在 401 上重命名 。 签字,不保密,默认为15分钟(1分至1小时). |
| 文档密钥 `dk_partner_...` | 只在开发机上的MCP服务器或CLI配置. | 只读:从 Everfur 获取合同 `GET /partners/contract` 并且不会打开其他路线. |

您的后端通过调用来交换短短会话的两份提供证书 `POST /widget/v1/sessions` 与 `x-everfur-partner-key: pk_...` + 键 `x-everfur-partner-secret-key: sk_partner_...`都来自同一个租户 SDK飞船a **仅限服务器** 帮助( e)`mintPartnerSession`从 `@everfur/sdk/server`) 所以你不要手卷这个请求。 这帮手是故意不在的 React-Native-resolved 捆绑:一个设备永远无法导入它,所以这个秘密在手机上没有路径.

**执行 :** 可公布的密钥`pk_test_` 或者说 `pk_live_`在应用程序中; 保留 `sk_partner_` 在服务器密钥管理器中; 您的薄荷会话 后端; 在 HTTPS 上提供所有服务 . **永远:** 设置 `sk_partner_` 在应用程序中; 设备上的薄荷会话; 尝试强制启用特性 客户端( 服务器重新检查和返回) `403`) (中文(简体) ).

## 特性访问如何工作

访问由确定服务器侧并交付给SDK(`GET /widget/v1/entitlements`,失败关闭). 每个 表面坐落在后面 `CapabilityGate`\- 一种你无权使 故意的状态外, 它不能是强制的客户端 因为API重新检查了每一个请求。 一个粗糙的特征 (单位:千美元)`chat`, (中文(简体) ), `records`, (中文(简体) ), `video`,.)只有在它所需要的每一个被点化的子特性资源是时才启用 授予(例如 `records` 需要两者 `records.upload.create` 财务报告和审定财务报表 `records.record.read`) (中文(简体) ). 你设置这些 everfur管理控制平面上的每个客户和每个用户;应用程序做出判断.

每个 SDK 表面使所有四个状态(装入、空出、出错、人口密集);一个被拒绝的表面使它成为 州外,从不空地.

## 公共入境点

| 导入 | 目录 |
| --- | --- |
| `@everfur/sdk` | `EverfurProvider`, (中文(简体) ), `CapabilityGate`, (中文(简体) ), `EverfurChat`, (中文(简体) ), `useEverfurChat`, (中文(简体) ), `CapabilityName`,出错/结果类型,品牌标识帮助者(`petRef`, (中文(简体) ), `userRef`, (中文(简体) ), `conversationId`(中文(简体) ) |
| `@everfur/sdk/records` | `EverfurRecords` (Everfur app的唱片流出),所命名的屏幕(`EverfurRecordsUpload`, (中文(简体) ), `EverfurRecordsRequests`, (中文(简体) ), `EverfurRecordsRequest`, (中文(简体) ), `EverfurRecordDetail`,(......), `EverfurClinicRequest`, (中文(简体) ), `EverfurClinicRequestBatch`, (中文(简体) ), `SignaturePad`,记录钩 + 类型 |
| `@everfur/sdk/records/depth`, (中文(简体) ), `@everfur/sdk/web/records/depth` | 在Everfur允许每次部署之前,在自己的条目上记录深度(时间表、被扣记录部分、文件贡献),黑暗;见 [章 次 页 次](https://docs.everfur.com/records/#records--record-depth-behind-a-separate-switch) |
| `@everfur/sdk/video` | 步入/ 活扫描表面 |
| `@everfur/sdk/photo` | 照片检查表面 |
| `@everfur/sdk/animations` | 服务器驱动的宠物状态介质表面 |
| `@everfur/sdk/web` | 浏览器条目 : `EverfurProvider`, (中文(简体) ), `CapabilityGate`, (中文(简体) ), `EverfurChat`, (中文(简体) ), `useEverfurChat`, (中文(简体) ), `EverfurTabs` (请问,健康计划与记录在一个外壳中, 与第一次公开的介绍),主题钩, 与 `react-dom`; 从回放本地捆绑的方式扣取 `./server` 实值 |
| `@everfur/sdk/web/records` | 浏览器主机的记录 : `EverfurRecordsPage` (Everfur网络应用程序的记录页,自行完成: 诊所的请求,上传,请求状态,有疫苗的完整记录,都在你的页面内),命名的屏幕, `EverfurRecords` (反应的土著-形状流), `useEverfurRecords`, (中文(简体) ), `createWebRecordsUploadTransport`, (中文(简体) ), `fileToHandle`;它自己的入口, 被拒于反应原住民喜欢 `./web`; Everfur 启用账户记录时可用。 框架模式为它服务 `surface: 'records'` (见 [章 次 页 次](https://docs.everfur.com/web/#web--2-frame-mode-the-loader-and-the-frame)(中文(简体) ) |
| `@everfur/sdk/web/records-sheet` | `recordsSheet()`:v3记录表及其实验室结果屏幕, `EverfurRecordsPage`'默认外观( 装入了第一个挂载; ); `sheet={false}` 保存经典页面,该页面没有下载该页面),或用选项构建并传递至其 `sheet` 道具; 从回放原生像 `./web`; 见 [章 次 页 次](https://docs.everfur.com/web/#web--records-everfur-sdk-web-records) |
| `@everfur/sdk/web/intro` | 第一次公开的介绍 `EverfurTabs` 在电话窄页播放( n)`EverfurIntro`,它的诊所请求框架, `EverfurRecordsLandedBanner`, (中文(简体) ), `useEverfurIntroSeen`),只有在播放时才下载;如 `./web`; 见 [章 次 页 次](https://docs.everfur.com/web/#web--three-tabs-everfurtabs) |
| `@everfur/sdk/web/records/upload` | `createWebRecordsUploadTransport` 一个人,为 `uploadTransport` 在您的应用程序根上的提供者配置; 相同的函数 `@everfur/sdk/web/records` 出口,没有记录条目 |
| `@everfur/sdk/server` | **仅限服务器** `mintPartnerSession`, (中文(简体) ), `revokePartnerMemberSessions` (现在结束一个成员的会话)和伙伴宠物助手(没有回放原生解析;从不捆绑在设备上) |
| `@everfur/sdk/server/events` | **只有服务器, 只有节点** 伙伴活动(审查): `constructEvent` 以验证网络用户, `sendPartnerEvent`; 见 [章 次 页 次](https://docs.everfur.com/webhooks/) |
| `@everfur/sdk/testing`, (中文(简体) ), `@everfur/sdk/testing/rn`, (中文(简体) ), `@everfur/sdk/testing/web` | 试验接缝`MockTransport`, (中文(简体) ), `useEverfurTestEntitlements`,...) 为了你自己的测试 |

`@everfur/sdk/client` 财务报告和审定财务报表 `@everfur/sdk/core` 披露高级集成器无框架层; 大多数应用只需要根入和能力子路径.

## 参考应用

一个完整的,可运行的集成(一个虚构的"Pawtrail"应用程序外加一个能保守秘密的最小薄荷后端) 生活状况 [`examples/minimal-integration.tsx`](https://docs.everfur.com/quickstart/) 此寄存器中; 是 类型检查 `npm run docs:check`所以它不能腐烂。 它显示匿名模式, 两证书会话 薄荷,宠物注册和签出。 (单列) `everfur-integration-example-rn` 应用程序在内部存在,但 不得在合作伙伴能够到达的地方发表,因此不依赖引用。 ) 每一道门 ,是上面片段的复制-粘贴源.

## 常见问题

### @everfur/sdk 是什么？

将Everfur兽医的聊天记录 健康记录 和宠物状态表面 嵌入到你的React Introduction应用中\.

### 如何安装 @everfur/sdk？

在项目目录运行 npm install @everfur/sdk，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：react（\>=18）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @everfur/sdk 支持 TypeScript 吗？

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

### @everfur/sdk 支持 ESM 还是 CommonJS？

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

### @everfur/sdk 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @everfur/sdk 可以商用吗？

@everfur/sdk 使用 SEE LICENSE IN LICENSE\.md 许可。许可条款写在包内的独立文件中，请阅读该文件确认可否商用。以上为概括，不构成法律意见，请以许可原文为准。

### @everfur/sdk 的下载量有多少？

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

### @everfur/sdk 还在维护吗？

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

