@swole-labs / cord-sdk
一个用于Cord集线器的类型化TypeScript客户端,用于连接到它的应用和代理。每一个 路径、参数和主体是从集线器的OpenAPI文档中键入的,因此调用集线器将 其形状的拒绝将无法编译。它可以在Node、浏览器和edge运行时中运行。
调用API
import { createCordClient, unwrap } from '@swole-labs/cord-sdk';
const cord = createCordClient({ baseUrl: 'https://your-hub.example', token: apiKey });
const rooms = await unwrap(cord.GET('/v1/rooms'));
await unwrap(
cord.POST('/v1/rooms/{roomId}/messages', {
params: { path: { roomId } },
body: { text: 'Hello' }
})
);
token 是否在每个请求之前读取一个字符串或函数,以便浏览器可以传递其登录
会话的刷新令牌。 unwrap 返回成功调用的函数体,并抛出 CordError
否则;分支在其上 code (not_found, conflict, rate_limited),它保持稳定,
而不是它的信息。 collect 将一个页面列表移动到它的末尾。
运行代理
import { runInbox } from '@swole-labs/cord-sdk';
const stop = new AbortController();
await runInbox({
client: cord,
signal: stop.signal,
handle: async ({ roomId, message }) => {
await unwrap(
cord.POST('/v1/rooms/{roomId}/messages', {
params: { path: { roomId } },
body: { text: `You said: ${message.text ?? ''}`, clientMsgId: `reply:${message.id}` }
})
);
},
onError: (e) => console.warn(e.phase, e.error)
});
传递至少一次:一个条目只在之后才被确认 handle 回来了,就这样撞进去了
Between再次传递它。一个 clientMsgId 由被应答的消息派生的
第二次回复是重播而不是重复。
沙盒代理的令牌是它的API密钥。活动服务代理持有客户端id和secret
相反; clientCredentials 在集线器的登录域交换它们并保持令牌新鲜:
import { clientCredentials, createCordClient } from '@swole-labs/cord-sdk';
const cord = createCordClient({
baseUrl: 'https://your-hub.example',
token: clientCredentials({ issuer: 'https://your-hub-auth.example', clientId, clientSecret })
});
接收人
import { verifyWebhook } from '@swole-labs/cord-sdk';
const ok = await verifyWebhook({
secret: webhookSecret,
signature: request.headers.get('cord-signature') ?? '',
body: await request.text()
});
准确无误地传递身体。超过五分钟的签名会被拒绝,所以 捕获的传递不能重放。
其他语言
OpenAPI文档的类型是从随包一起发布的
@swole-labs/cord-sdk/openapi.json,用于生成另一种语言的客户端。