# @band-ai/rest-client 中文文档

规范地址：https://npmcn.com/package/%40band-ai/rest-client/

版本：0\.0\.165
npm 元数据更新时间：2026-11-03T16:49:22.423Z
中文译文更新时间：2026-11-07T20:54:55.585Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40band-ai/rest-client
原文对照：https://npmcn.com/package/%40band-ai/rest-client/?lang=original
项目主页：https://github.com/thenvoi/fern-javascript-sdk#readme
源码仓库：https://github.com/thenvoi/fern-javascript-sdk

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2 MB，1571 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.0\.0
- 运行依赖：0 个
- 首次发布：2026-03-31T10:42:45.487Z
- 最新版本发布：2026-11-03T16:49:22.254Z
- 近 30 天下载量：2610（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：50（近 12 个月 50 个）

## 中文简介

[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com/?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Fthenvoi%2Ffern-javascript-sdk) \[npmshiel\] (笑声)

## 安装

```sh
npm install @band-ai/rest-client
```

也可以使用：`pnpm add @band-ai/rest-client`、`yarn add @band-ai/rest-client`、`bun add @band-ai/rest-client`

## README

# 带状类型脚本库

[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com/?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Fthenvoi%2Ffern-javascript-sdk) [![npm shield](https://img.shields.io/npm/v/@band-ai/rest-client)](https://www.npmjs.com/package/@band-ai/rest-client)

Band TypeScript库提供从TypeScript获取Band API的方便通道.

## 目录

-   [安装](https://npmcn.com/package/%40band-ai/rest-client/#readme-installation)
-   [参考文献](https://npmcn.com/package/%40band-ai/rest-client/#readme-reference)
-   [使用量](https://npmcn.com/package/%40band-ai/rest-client/#readme-usage)
-   [环境](https://npmcn.com/package/%40band-ai/rest-client/#readme-environments)
-   [请求和答复类型](https://npmcn.com/package/%40band-ai/rest-client/#readme-request-and-response-types)
-   [例外处理](https://npmcn.com/package/%40band-ai/rest-client/#readme-exception-handling)
-   [文件上传](https://npmcn.com/package/%40band-ai/rest-client/#readme-file-uploads)
-   [二进制响应](https://npmcn.com/package/%40band-ai/rest-client/#readme-binary-response)
-   [高级](https://npmcn.com/package/%40band-ai/rest-client/#readme-advanced)
    -   [出口](https://npmcn.com/package/%40band-ai/rest-client/#readme-subpackage-exports)
    -   [其他信头](https://npmcn.com/package/%40band-ai/rest-client/#readme-additional-headers)
    -   [其它查询字符串参数](https://npmcn.com/package/%40band-ai/rest-client/#readme-additional-query-string-parameters)
    -   [检索](https://npmcn.com/package/%40band-ai/rest-client/#readme-retries)
    -   [超时](https://npmcn.com/package/%40band-ai/rest-client/#readme-timeouts)
    -   [中止请求](https://npmcn.com/package/%40band-ai/rest-client/#readme-aborting-requests)
    -   [访问原始响应数据](https://npmcn.com/package/%40band-ai/rest-client/#readme-access-raw-response-data)
    -   [日志](https://npmcn.com/package/%40band-ai/rest-client/#readme-logging)
    -   [自定义抓取](https://npmcn.com/package/%40band-ai/rest-client/#readme-custom-fetch)
    -   [运行时间相容性](https://npmcn.com/package/%40band-ai/rest-client/#readme-runtime-compatibility)
-   [捐款](https://npmcn.com/package/%40band-ai/rest-client/#readme-contributing)

## 安装

```sh
npm i -s @band-ai/rest-client
```

## 参考文献

该图书馆的全部参考资料可供查阅 [这里](https://github.com/thenvoi/fern-javascript-sdk/blob/HEAD/reference.md)。 。 。 .

## 使用量

以下列方式证明和使用客户端:

```typescript
import { BandClient } from "@band-ai/rest-client";

const client = new BandClient({ apiKey: "YOUR_API_KEY" });
await client.agentApiContacts.respondToAgentContactRequest({
    action: "approve"
});
```

## 环境

此 SDK 允许您为 API 请求配置不同的环境 .

```typescript
import { BandClient, BandEnvironment } from "@band-ai/rest-client";

const client = new BandClient({
    environment: BandEnvironment.Default,
});
```

## 请求和答复类型

SDK导出所有请求和响应类型为TypeScript接口. 只需用 以下命名空间:

```typescript
import { Band } from "@band-ai/rest-client";

const request: Band.RespondToAgentContactRequestRequest = {
    ...
};
```

## 例外处理

当 API 返回一个非成功状态代码( 4xx 或 5xx 响应) 时, 以下错误的子类 将会被扔出.

```typescript
import { BandError } from "@band-ai/rest-client";

try {
    await client.agentApiContacts.respondToAgentContactRequest(...);
} catch (err) {
    if (err instanceof BandError) {
        console.log(err.statusCode);
        console.log(err.message);
        console.log(err.body);
        console.log(err.rawResponse);
    }
}
```

## 文件上传

您可以使用客户端上传文件 :

```typescript
import { createReadStream } from "fs";

await client.agentApiFiles.uploadAgentChatFile(createReadStream("path/to/file"), ...);
await client.agentApiFiles.uploadAgentChatFile(new ReadableStream(), ...);
await client.agentApiFiles.uploadAgentChatFile(Buffer.from('binary data'), ...);
await client.agentApiFiles.uploadAgentChatFile(new Blob(['binary data'], { type: 'audio/mpeg' }), ...);
await client.agentApiFiles.uploadAgentChatFile(new File(['binary data'], 'file.mp3'), ...);
await client.agentApiFiles.uploadAgentChatFile(new ArrayBuffer(8), ...);
await client.agentApiFiles.uploadAgentChatFile(new Uint8Array([0, 1, 2]), ...);
```

客户端接受多种类型的文件上传参数:

-   流类型 : `fs.ReadStream`, (中文(简体) ), `stream.Readable`,以及 `ReadableStream`
-   缓冲类型 : `Buffer`, (中文(简体) ), `Blob`, (中文(简体) ), `File`, (中文(简体) ), `ArrayBuffer`, (中文(简体) ), `ArrayBufferView`,以及 `Uint8Array`

### 元数据

您可以在上传文件时配置元数据 :

```typescript
const file: Uploadable.WithMetadata = {
    data: createReadStream("path/to/file"),
    filename: "my-file",       // optional
    contentType: "audio/mpeg", // optional
    contentLength: 1949,       // optional
};
```

或者,您可以从文件路径直接上传文件 :

```typescript
const file : Uploadable.FromPath = {
    path: "path/to/file",
    filename: "my-file",        // optional
    contentType: "audio/mpeg",  // optional
    contentLength: 1949,        // optional
};
```

元数据用于设置 `Content-Length`, (中文(简体) ), `Content-Type`,以及 `Content-Disposition` 头. 如果不提供,客户端将尝试自动确定. 譬如说, `fs.ReadStream` 有一个 `path` 属性,SDK用于从文件系统取回文件大小而不将其装入内存.

## 二进制响应

您可以使用 `BinaryResponse` 类型,允许您选择如何消耗数据 :

```typescript
const response = await client.agentApiFiles.downloadAgentChatFile(...);
const stream: ReadableStream<Uint8Array> = response.stream();
// const arrayBuffer: ArrayBuffer = await response.arrayBuffer();
// const blob: Blob = response.blob();
// const bytes: Uint8Array = response.bytes();
// You can only use the response body once, so you must choose one of the above methods.
// If you want to check if the response body has been used, you can use the following property.
const bodyUsed = response.bodyUsed;
```

对文件保存二进制响应

> 节点.js
> 
> > 可读结构(最高效)
> > 
> > ```ts
> > import { createWriteStream } from 'fs';
> > import { Readable } from 'stream';
> > import { pipeline } from 'stream/promises';
> > 
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const stream = response.stream();
> > const nodeStream = Readable.fromWeb(stream);
> > const writeStream = createWriteStream('path/to/file');
> > 
> > await pipeline(nodeStream, writeStream);
> > ```
> 
> > 矩阵缓冲
> > 
> > ```ts
> > import { writeFile } from 'fs/promises';
> > 
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const arrayBuffer = await response.arrayBuffer();
> > await writeFile('path/to/file', Buffer.from(arrayBuffer));
> > ```
> 
> > 块
> > 
> > ```ts
> > import { writeFile } from 'fs/promises';
> > 
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const blob = await response.blob();
> > const arrayBuffer = await blob.arrayBuffer();
> > await writeFile('output.bin', Buffer.from(arrayBuffer));
> > ```
> 
> > 字节 (UIntArray8)
> > 
> > ```ts
> > import { writeFile } from 'fs/promises';
> > 
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const bytes = await response.bytes();
> > await writeFile('path/to/file', bytes);
> > ```

> 阿宝
> 
> > 可读结构(最高效)
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const stream = response.stream();
> > await Bun.write('path/to/file', stream);
> > ```
> 
> > 矩阵缓冲
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const arrayBuffer = await response.arrayBuffer();
> > await Bun.write('path/to/file', arrayBuffer);
> > ```
> 
> > 块
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const blob = await response.blob();
> > await Bun.write('path/to/file', blob);
> > ```
> 
> > 字节 (UIntArray8)
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const bytes = await response.bytes();
> > await Bun.write('path/to/file', bytes);
> > ```

> 德诺
> 
> > 可读结构(最高效)
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const stream = response.stream();
> > const file = await Deno.open('path/to/file', { write: true, create: true });
> > await stream.pipeTo(file.writable);
> > ```
> 
> > 矩阵缓冲
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const arrayBuffer = await response.arrayBuffer();
> > await Deno.writeFile('path/to/file', new Uint8Array(arrayBuffer));
> > ```
> 
> > 块
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const blob = await response.blob();
> > const arrayBuffer = await blob.arrayBuffer();
> > await Deno.writeFile('path/to/file', new Uint8Array(arrayBuffer));
> > ```
> 
> > 字节 (UIntArray8)
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const bytes = await response.bytes();
> > await Deno.writeFile('path/to/file', bytes);
> > ```

> 浏览器
> 
> > Blob( 效率最高)
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const blob = await response.blob();
> > const url = URL.createObjectURL(blob);
> > 
> > // trigger download
> > const a = document.createElement('a');
> > a.href = url;
> > a.download = 'filename';
> > a.click();
> > URL.revokeObjectURL(url);
> > ```
> 
> > 可读结构
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const stream = response.stream();
> > const reader = stream.getReader();
> > const chunks = [];
> > 
> > while (true) {
> >   const { done, value } = await reader.read();
> >   if (done) break;
> >   chunks.push(value);
> > }
> > 
> > const blob = new Blob(chunks);
> > const url = URL.createObjectURL(blob);
> > 
> > // trigger download
> > const a = document.createElement('a');
> > a.href = url;
> > a.download = 'filename';
> > a.click();
> > URL.revokeObjectURL(url);
> > ```
> 
> > 矩阵缓冲
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const arrayBuffer = await response.arrayBuffer();
> > const blob = new Blob([arrayBuffer]);
> > const url = URL.createObjectURL(blob);
> > 
> > // trigger download
> > const a = document.createElement('a');
> > a.href = url;
> > a.download = 'filename';
> > a.click();
> > URL.revokeObjectURL(url);
> > ```
> 
> > 字节 (UIntArray8)
> > 
> > ```ts
> > const response = await client.agentApiFiles.downloadAgentChatFile(...);
> > 
> > const bytes = await response.bytes();
> > const blob = new Blob([bytes]);
> > const url = URL.createObjectURL(blob);
> > 
> > // trigger download
> > const a = document.createElement('a');
> > a.href = url;
> > a.download = 'filename';
> > a.click();
> > URL.revokeObjectURL(url);
> > ```
将二进制响应转换为文本

> 可读结构
> 
> ```ts
> const response = await client.agentApiFiles.downloadAgentChatFile(...);
> 
> const stream = response.stream();
> const text = await new Response(stream).text();
> ```

> 矩阵缓冲
> 
> ```ts
> const response = await client.agentApiFiles.downloadAgentChatFile(...);
> 
> const arrayBuffer = await response.arrayBuffer();
> const text = new TextDecoder().decode(arrayBuffer);
> ```

> 块
> 
> ```ts
> const response = await client.agentApiFiles.downloadAgentChatFile(...);
> 
> const blob = await response.blob();
> const text = await blob.text();
> ```

> 字节 (UIntArray8)
> 
> ```ts
> const response = await client.agentApiFiles.downloadAgentChatFile(...);
> 
> const bytes = await response.bytes();
> const text = new TextDecoder().decode(bytes);
> ```

## 高级

### 出口

这个SDK支持子包客户端的直接进口,它允许JavaScript捆绑器进行树摇并只包括被导入子包代码. 这导致捆绑大小要小得多.

```typescript
import { AgentApiContactsClient } from '@band-ai/rest-client/agentApiContacts';

const client = new AgentApiContactsClient({...});
```

### 其他信头

如果您希望作为请求的一部分发送额外的信头,请使用 `headers` 请求选项.

```typescript
import { BandClient } from "@band-ai/rest-client";

const client = new BandClient({
    ...
    headers: {
        'X-Custom-Header': 'custom value'
    }
});

const response = await client.agentApiContacts.respondToAgentContactRequest(..., {
    headers: {
        'X-Custom-Header': 'custom value'
    }
});
```

### 其它查询字符串参数

如果您希望作为请求的一部分发送额外的查询字符串参数,请使用 `queryParams` 请求选项.

```typescript
const response = await client.agentApiContacts.respondToAgentContactRequest(..., {
    queryParams: {
        'customQueryParamKey': 'custom query param value'
    }
});
```

### 检索

SDK是用有指数回放的自动回放装置. 申请要等会再审 由于请求被认为可以重试,且重试的次数没有超过所配置的 重试限制( 默认: 2) .

重审哪个状态代码取决于 `retryStatusCodes` 生成器配置 :

**`legacy`** (当前默认值):在

-   [408 (简体中文)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (超时)
-   [429个](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (太多请求)
-   [第5XX条](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses) (所有服务器错误,包括500个)

**`recommended`**: 重试

-   [408 (简体中文)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (超时)
-   [429个](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (太多请求)
-   [502 (中文(简体) )](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502) (坏门)
-   [第503条](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503) (服务不可用)
-   [504 (中文(简体) )](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504) (Gateway超时)

使用 `maxRetries` 请求选项来配置此行为.

```typescript
const response = await client.agentApiContacts.respondToAgentContactRequest(..., {
    maxRetries: 0 // override maxRetries at the request level
});
```

### 超时

SDK默认为60第二次超时. 使用 `timeoutInSeconds` 选项来配置此行为.

```typescript
const response = await client.agentApiContacts.respondToAgentContactRequest(..., {
    timeoutInSeconds: 30 // override timeout to 30s
});
```

### 中止请求

SDK允许用户在任何时刻通过一个中止信号来中止请求.

```typescript
const controller = new AbortController();
const response = await client.agentApiContacts.respondToAgentContactRequest(..., {
    abortSignal: controller.signal
});
controller.abort(); // aborts the request
```

### 访问原始响应数据

SDK通过下列方式提供原始响应数据,包括信头: `.withRawResponse()` 方法. 这个 `.withRawResponse()` 方法返回给一个带有 `data` (单位:千美元) `rawResponse` 属性.

```typescript
const { data, rawResponse } = await client.agentApiContacts.respondToAgentContactRequest(...).withRawResponse();

console.log(data);
console.log(rawResponse.headers['X-My-Header']);
```

### 日志

SDK支持记录. 您可以通过通过一个 `logging` 对象对客户端选项.

```typescript
import { BandClient, logging } from "@band-ai/rest-client";

const client = new BandClient({
    ...
    logging: {
        level: logging.LogLevel.Debug, // defaults to logging.LogLevel.Info
        logger: new logging.ConsoleLogger(), // defaults to ConsoleLogger
        silent: false, // defaults to true, set to false to enable logging
    }
});
```

这个 `logging` 对象可以具有以下属性:

-   `level`: 要使用的日志级别 。 默认为 `logging.LogLevel.Info`。 。 。 .
-   `logger`:要使用的伐木机. 默认为 a `logging.ConsoleLogger`。 。 。 .
-   `silent`: 是否让伐木工安静. 默认为 `true`。 。 。 .

这个 `level` 属性可以是下列值之一:

-   `logging.LogLevel.Debug`
-   `logging.LogLevel.Info`
-   `logging.LogLevel.Warn`
-   `logging.LogLevel.Error`

要提供自定义日志, 您可以通过一个执行 `logging.ILogger` 接口.

自定义日志示例

举个例子,用流行的 `winston` 伐木图书馆.

```ts
import winston from 'winston';

const winstonLogger = winston.createLogger({...});

const logger: logging.ILogger = {
    debug: (msg, ...args) => winstonLogger.debug(msg, ...args),
    info: (msg, ...args) => winstonLogger.info(msg, ...args),
    warn: (msg, ...args) => winstonLogger.warn(msg, ...args),
    error: (msg, ...args) => winstonLogger.error(msg, ...args),
};
```

举个例子,用流行的 `pino` 伐木图书馆.

```ts
import pino from 'pino';

const pinoLogger = pino({...});

const logger: logging.ILogger = {
  debug: (msg, ...args) => pinoLogger.debug(args, msg),
  info: (msg, ...args) => pinoLogger.info(args, msg),
  warn: (msg, ...args) => pinoLogger.warn(args, msg),
  error: (msg, ...args) => pinoLogger.error(args, msg),
};
```

### 自定义抓取

SDK提供低级 `fetch` 将自定义的 HTTP 请求生成到当前 从SDK级配置中受益,如认证、重试、超时和记录. 这对调用SDK中尚未支持的API端点很有用.

```typescript
const response = await client.fetch("/v1/custom/endpoint", {
    method: "GET",
}, {
    timeoutInSeconds: 30,
    maxRetries: 3,
    headers: {
        "X-Custom-Header": "custom-value",
    },
});

const data = await response.json();
```

### 运行时间相容性

SDK工作时间如下:

-   节点.js 18+
-   维塞尔
-   云花岗工人
-   德诺v1.25+
-   1.0+号舱
-   原生反应

## 捐款

虽然我们重视对SDK的开源贡献,但这个库是程序生成的. 直接给这个图书馆增加的代码 得转到我们一代人的代码上, 否则,它们将被覆盖 在下一次产生的释放。 随便打开公关吧 是一个概念的证明, 但知道我们将无法 合并它作为一个。 我们建议开放 先和我们讨论一个问题!

另一方面,对 " README " 的贡献总是非常受欢迎的!

## 常见问题

### @band-ai/rest-client 是什么？

\[npmshiel\] \(笑声\)

### 如何安装 @band-ai/rest-client？

在项目目录运行 npm install @band-ai/rest-client，或使用 pnpm add / yarn add / bun add。

### @band-ai/rest-client 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @band-ai/rest-client 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @band-ai/rest-client 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @band-ai/rest-client 可以商用吗？

@band-ai/rest-client 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @band-ai/rest-client 的下载量有多少？

根据 npm 官方下载统计，@band-ai/rest-client 在 2026/10/08 – 2026/11/06 这 30 天内被下载 2,610 次，日均约 87 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @band-ai/rest-client 还在维护吗？

最新版本 0\.0\.165 发布于 2026/11/04（4 天前）；至今共发布 50 个版本，其中过去 12 个月发布了 50 个；首次发布于 2026/03/31。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

