@devicechain/ 客户端
DuiceChain 客户端 SDK:一个小的、框架不可知的核心,用于与一个
浏览器中的设备 Chain 实例 。 已输入图QL fetch现场直播
订阅结束 graphql-ws,并一个符号连接 您的应用程序填写.
这里没有阿波罗 没有商店 也没有反应 它拥有电线,你的应用程序 拥有州和UI.
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 用户.
查询和变异
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 在每个请求中附带一个正确的区域—— 检测到管理区域 从地区名称, 所以一个新的行政呼叫 不能悄悄地骑租户标志.
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}怎么叫新鲜点 之前不久它就恢复了活力
访问令牌过期, 在同时通话者之间共享一个飞行中刷新
(新鲜的令牌旋转),并降低会后到达的结果:
已替换 :
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 用于读取索赔的导出
客户端。 它们解码,不验证——服务器是权威.
订阅
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 (英语). 见 自由主义。 。 。 .