前节点
现代类型SDK 前线 API (英语).
安装
npm install @dugjason/front-node
使用量
import { Front } from "@dugjason/front-node";
const front = new Front({ apiKey: process.env.FRONT_API_TOKEN });
const teammates = await front.teammates.list();
// ID-scoped operations do not require fetching the resource first.
await front.channels.createMessage("cha_123", {
body: "Hello from Front",
options: { archive: true },
to: ["[email protected]"],
});
await front.conversations.addTag("cnv_123", { tag_ids: ["tag_123"] });
await front.messages.markSeen("msg_123");
全权证书为专用:通过 { apiKey } 或者说 { accessToken, refreshToken }从来没有两者。 自动刷新默认 OAuth 到 false。要手动刷新,请打电话 refreshOAuthToken数字 :
const front = new Front({
accessToken,
refreshToken,
onTokenRefresh: async (tokens) => {
await persistTokens(tokens.access_token, tokens.refresh_token);
},
});
const tokens = await front.refreshOAuthToken({
clientId: process.env.FRONT_CLIENT_ID,
clientSecret: process.env.FRONT_CLIENT_SECRET,
});
refreshOAuthToken() 等着 onTokenRefresh 在更新客户端的证书并归还信使之前。 回电也一样 access_token 财务报告和审定财务报表 refresh_token 字段作为返回值。 如果持久性失败, 刷新拒绝和客户端保留其先前的证书 。 Front可能已经旋转了刷新符号,因此在尝试再刷新之前恢复了持久性失败.
要自动刷新,请提供 OAuth 应用程序的 clientId 财务报告和审定财务报表 clientSecret 在构造器中:
const front = new Front({
accessToken,
refreshToken,
autoRefresh: true,
clientId,
clientSecret,
onTokenRefresh: async (tokens) => {
await persistTokens(tokens.access_token, tokens.refresh_token);
},
});
与 autoRefresh: true,一个API 401触发器 refreshOAuthToken()客户端等待 onTokenRefresh,通过新的符号,并重复一次原始请求。 401个投球 FrontApiError 没有另一个新鲜。 其他 HTTP 状态不会触发刷新 。 这些规则适用于JSON请求和原始回复,包括附件下载.
同时期的401s共享一款令牌交换并保存每个客户端的回调. 如果另一个请求已经替换了失败请求的代号, 则该请求会用当前代号重试 。 这种协调不延及客户,也不涉及人工启动的刷新电话.
隐藏交换失败被传播为 FrontApiError 上面写着标志性的终点 标题 和解析的正文 譬如说, body.error === "invalid_grant" 识别一个已拒绝的刷新令牌; 5xx响应保留了提供者的失败。 网络出错并保存回调出错, 宣传不变 。 两次失败都没有被原API 401所取代,也没有引起请求重试. 一个失败的保存让客户端的证书保持不变,尽管Front可能已经旋转了刷新符.
API- key客户端不自动刷新. OAuth 客户端 autoRefresh 省略或设置为 false 保持手动行为.
发展
bun install
bun test
bun run check
释放
发行由Termets管理. 添加一个用于修改用户的更改器 :
bun run changeset
合并为 main 打开或更新版本 PR。 合并出版的PR版本
到 npm 时为 @dugjason/front-node 通过 npm 信任的出版.
费率限额
HTTP 429 答复默认情况下重试两次,等待 Retry-After 秒加0-999 ms的焦急。 如果缺席, 重复使用 X-RateLimit-Reset。超过60秒的无效延迟或延迟使用60秒。 这包括原始答复和OAuth令牌请求.
当应用程序处理时, 禁用 SDK 重试 :
const front = new Front({ apiKey: "...", rateLimitRetry: false });
已禁用或已耗尽的回推 FrontRateLimitError,扩展 FrontApiError 与 retryAfterMs 在紧张之前 使用 error instanceof FrontRateLimitError (d) 最后答复元数据.
自定义 fetch
您可以使用自定义的获取库, 兼容 node:fetch。 。 。 .
举例来说,可以采用内置跟踪或自定义遥测法进行检索;
import { Front } from "@dugjason/front-node";
const loggingFetch: typeof fetch = async (input, init) => {
const t0 = performance.now();
const response = await globalThis.fetch(input, init);
console.log(
`${init?.method ?? "GET"} ${input} ${response.status} ${Math.round(performance.now() - t0)}ms`,
);
return response;
};
const front = new Front({ fetch: loggingFetch });