@everfur/sdk

中文文档
1.0.1发布于 2026/11/14SEE LICENSE IN LICENSE.mdTypeScriptESM + CJS近 30 天下载 2874

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

中文使用文档
文档目录8 节
  1. 安装
  2. Bundler 分辨率
  3. 在网络上
  4. 快速启动
  5. 安全模式
  6. 特性访问如何工作
  7. 公共入境点
  8. 参考应用

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

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

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

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

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

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

安装

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/[email protected]

相机对等点是可选的: 如果您从未挂载 ./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数字 :

  • 页面,对于一个您拥有的反应树的页面: import { EverfurProvider, EverfurChat } from '@everfur/sdk/web' (年轻人: react, (中文(简体) ), react-dom) (中文(简体) ). 复制的形状是 examples/minimal-web.tsx选择 /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。 。 。 .

聊天和记录是网络表面(记录在它自己的子路径和它自己的框架文档上,可用) 当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。 。 。 .

快速启动

把你的树包起来一次,高高的,然后把特征放进门后. 这是参考应用的确切形状 用途,用于 原生反应 主机; 浏览器主机从 @everfur/sdk/web (见 打开 网络:

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 状态在任何故障上,这是文档中每个示例使用的形状:

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. 记录依靠自己的子路径:

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 地址在 环境和密钥。 。 。 .

证书它的栖息地点它会做什么
可公布的密钥 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/sdkEverfurProvider, (中文(简体) ), CapabilityGate, (中文(简体) ), EverfurChat, (中文(简体) ), useEverfurChat, (中文(简体) ), CapabilityName,出错/结果类型,品牌标识帮助者(petRef, (中文(简体) ), userRef, (中文(简体) ), conversationId(中文(简体) )
@everfur/sdk/recordsEverfurRecords (Everfur app的唱片流出),所命名的屏幕(EverfurRecordsUpload, (中文(简体) ), EverfurRecordsRequests, (中文(简体) ), EverfurRecordsRequest, (中文(简体) ), EverfurRecordDetail,(......), EverfurClinicRequest, (中文(简体) ), EverfurClinicRequestBatch, (中文(简体) ), SignaturePad,记录钩 + 类型
@everfur/sdk/records/depth, (中文(简体) ), @everfur/sdk/web/records/depth在Everfur允许每次部署之前,在自己的条目上记录深度(时间表、被扣记录部分、文件贡献),黑暗;见 章 次 页 次
@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' (见 章 次 页 次(中文(简体) )
@everfur/sdk/web/records-sheetrecordsSheet():v3记录表及其实验室结果屏幕, EverfurRecordsPage'默认外观( 装入了第一个挂载; ); sheet={false} 保存经典页面,该页面没有下载该页面),或用选项构建并传递至其 sheet 道具; 从回放原生像 ./web; 见 章 次 页 次
@everfur/sdk/web/intro第一次公开的介绍 EverfurTabs 在电话窄页播放( n)EverfurIntro,它的诊所请求框架, EverfurRecordsLandedBanner, (中文(简体) ), useEverfurIntroSeen),只有在播放时才下载;如 ./web; 见 章 次 页 次
@everfur/sdk/web/records/uploadcreateWebRecordsUploadTransport 一个人,为 uploadTransport 在您的应用程序根上的提供者配置; 相同的函数 @everfur/sdk/web/records 出口,没有记录条目
@everfur/sdk/server仅限服务器 mintPartnerSession, (中文(简体) ), revokePartnerMemberSessions (现在结束一个成员的会话)和伙伴宠物助手(没有回放原生解析;从不捆绑在设备上)
@everfur/sdk/server/events只有服务器, 只有节点 伙伴活动(审查): constructEvent 以验证网络用户, sendPartnerEvent; 见 章 次 页 次
@everfur/sdk/testing, (中文(简体) ), @everfur/sdk/testing/rn, (中文(简体) ), @everfur/sdk/testing/web试验接缝MockTransport, (中文(简体) ), useEverfurTestEntitlements,...) 为了你自己的测试

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

参考应用

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

版本与发布记录

@everfur/sdk 共发布 43 个版本,首次发布于 2026/09/02;过去 12 个月发布了 43 个版本。

版本发布日期距今
1.0.1latest2026/11/14今天
1.0.02026/11/13今天
0.22.02026/11/13今天
0.21.02026/11/121 天前
0.20.02026/11/121 天前
0.19.02026/11/122 天前

关于 @everfur/sdk 的常见问题

@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 和提交记录判断。