---
sidebar:
  order: 2
title: TypeScript SDK
description: 使用仓库中的 SDK 完成带类型信息的读取、经确认的写入及本地素材上传。
---

`@influence/sdk` 目前是私有仓库包，尚未作为可公开安装的 npm 包发布。以下示例适用于可使用该工作区包的项目。独立客户端请使用[HTTP API](/zh-Hans/developers/http-api)。

明确提供受信任的源站，并从进程的私密环境变量中加载密钥：

```ts
import { InfluenceClient } from "@influence/sdk/client";

const accessToken = process.env.PUBLISH_API_TOKEN;
if (!accessToken) throw new Error("PUBLISH_API_TOKEN");

const client = new InfluenceClient({
  baseUrl: "https://influence.so",
  accessToken,
});

const catalog = await client.listTools();
const accounts = await client.callTool("accountList", {});
console.log(catalog.tools, accounts.output);
```

使用 `listTools()` 发现工具。对于目录中标为无需确认的工具，使用 `callTool(name, input)`，包括继续已获授权的上传。需要确认的操作先调用 `prepareTool(name, input)`，再调用 `confirmTool(name, input, confirmationCapability, { idempotencyKey })`。响应结果不确定时，请保留相同输入、确认凭据和幂等键。SDK 会验证请求和响应，并在 HTTP 失败或工具失败时抛出 `InfluenceSdkError`。

`uploadMedia(file, { clientKey, name, contentType, sizeBytes })` 接受 `Blob`，并处理需要确认的分片传输。重试时使用相同文件和相同的 `clientKey`。通过 `mediaUploadGet` 持续查看，直到最终素材就绪；仍在处理的上传还不能发布。请遵循单独规定的[发布审核与重试规则](/zh-Hans/developers/http-api)。
