@faiber/ sdk- core (中文(简体) )
每个Faiber TypeScript SDK共享的框架中性运输和认证原始.
安装和配置
npm install @faiber/sdk-core
import { FaiberClient, MemoryTokenProvider } from "@faiber/sdk-core";
const tokens = new MemoryTokenProvider({ accessToken: session.accessToken });
const client = new FaiberClient("profile", {
domains: { profile: import.meta.env.FAIBER_PROFILE_URL },
authMode: "bearer",
tokenProvider: tokens,
axios: { timeout: 15_000, withCredentials: true },
});
FaiberClient 只解决配置的服务源, 默认拒绝绝对 URL, 添加 Bearer 令牌 TokenProvider,并保留 Axios 的全部响应。 设定 authMode: "cookie" 以自动启用认证请求并抑制Bearer注射. auto 是向后兼容的默认值,并在可用时使用一个符号,同时尊重明确的Axios cookie设置. MemoryTokenProvider 选择进入 StorageTokenProvider ; 自定义提供者可以绑定服务器侧会话或加密存储.
请求和编码
import { multipart, urlEncoded } from "@faiber/sdk-core";
await client.post("/api/v1/login", urlEncoded({ username, password }), {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
await client.post("/api/v1/profile/avatar", multipart({ file, alt: "Avatar" }));
客户端提供打字 get, (中文(简体) ), post, (中文(简体) ), put, (中文(简体) ), patch, (中文(简体) ), delete,并通用 request 方法。 。 。 查询值,请求标题,超时,适配器,截取器, AbortSignal,多部分数据,和 URL 编码表仍可通过 Axios 兼容选项提供.
土著 FormData 上传自动清除配置的 JSON 内容类型, Axios 可以
提供多段边界。 过 onUploadProgress 关于字节进展和 signal 改为
撤销。 在将上传处理为完整之前等待回复; 存储失败可以
已发送所有字节后到达 .
资源和产生的业务
RestResource 列表/显示/创建/更新/替换/删除帮助者。 每个资源都声明其后端实际挂载操作; 不支持的调用 UnsupportedOperationError 本地而不是发出返回的请求 405。更新动词为每个服务可配置.
OpenApiClient<paths> 生成路径、查询、页眉、正文和响应类型 openapi-typescript 合同。 服务包还暴露出生成的命名操作,这些操作保存了每个挂载后端动词,路径参数,查询对象,请求正文,响应信封,运输编码,以及许可注释.
认证刷新和错误
配置 refreshAuth 当同时接到电话时共享刷新 401。复选的电话获得新令牌;在 cookie 模式下,回调可能返回 null 在服务器旋转了它的 HttpOnly cookie 之后,受保护的请求仍然被重试一次. 失败会刷新清晰的陈旧证书 。 刷新失败保留了原始保护请求 Axios 错误(并将刷新错误作为附件) cause 因此应用程序保留了操作状态,响应正文,信头,请求ID,取消和超时细节.
Sockudo 实时订阅
subscribeRealtime 在 Pusher 兼容的 WebSocket 协议上连接一个私有的 Sockudo 频道。 从自有服务中获取浏览器安全配置,并通过其认证的Faiber客户端授权. 聊天拥有对话频道; 信使拥有通知频道. 浏览器中没有应用程序秘密 .
import { FaiberClient, subscribeRealtime } from '@faiber/sdk-core';
import { ChatApi } from '@faiber/faiber-chat';
const chat = new ChatApi(new FaiberClient('chat', {
domains: { chat: 'https://chat.example.com' }, authMode: 'cookie',
}));
const conversationId = 'your-conversation-id';
const config = (await chat.realtimeConfig(conversationId)).data.data;
const reloadMessages = async () => {
const response = await chat.messages(conversationId);
console.log(response.data.data);
};
const subscription = subscribeRealtime({
config,
authorize: async input => (await chat.realtimeAuth(conversationId, input)).data,
onEvent: () => { void reloadMessages(); },
onSubscribed: () => { void reloadMessages(); },
onError: error => console.error(error.message),
});
// On logout or component teardown:
subscription.close();
重新连接时重复订阅授权. onSubscribed 每次成功订阅后运行 : 重新装入持续数据以恢复离线时丢失的事件 。 事件是无效提示,其特定服务有效载荷是故意的 unknown;服务HTTP响应仍然具有权威性. onError 报告连接/授权失败; HTTP 授权失败保留了您回调中的 Axios 正常行为。 关闭取消连接并忽略后期授权结果. HTTPS 页面要求 wss:; 允许您的内容安全政策中精确的WebSocket来源.
RequestOptions<D> 保存 Axios 信头、信号、超时、适配器和
withXSRFToken 上观相. 它的出口 RequestOptionsContext<D> 描述
被编码的线体和请求元数据,不包括上游本身. 贾森
请求保留其命名的输入类型; URL 编码的登录/实时操作
提供 URLSearchParams 到那个上游。 一个通用元数据上游可以是
重新用于打字请求,而不丢弃机体类型.
短身份证
import { shortIdFromUuid } from "@faiber/sdk-core";
const code = shortIdFromUuid("550e8400-e29b-41d4-a716-446655440000"); // GDCN7L
此同步、 离线的帮助器接受 Canonic 或 紧凑的 UUID并投掷
TypeError 输入错误。 它产生六个大写字符,没有
0, (中文(简体) ), 1, (中文(简体) ), I,或 O。使用课堂 UUID 或配置行的 id (无)
user_id) (中文(简体) ). 别名不能保证独有;为操作保留UUID.