# @anduril-industries/lattice-sdk 中文文档

规范地址：https://npmcn.com/package/%40anduril-industries/lattice-sdk/

版本：5\.4\.0
npm 元数据更新时间：2026-10-30T20:20:46.037Z
中文译文更新时间：2026-11-06T03:36:31.775Z
软件包许可：See LICENSE

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

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

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

- 包体积（解压后）：1.4 MB，1524 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.0\.0
- 运行依赖：0 个
- 首次发布：2024-12-03T06:41:19.404Z
- 最新版本发布：2026-10-30T20:20:45.619Z
- 近 30 天下载量：5446（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：62（近 12 个月 41 个）

## 中文简介

![](https://www.anduril.com/lattice-sdk/)

## 安装

```sh
npm install @anduril-industries/lattice-sdk
```

也可以使用：`pnpm add @anduril-industries/lattice-sdk`、`yarn add @anduril-industries/lattice-sdk`、`bun add @anduril-industries/lattice-sdk`

## README

# Lattice SDK 类型脚本库

![](https://www.anduril.com/lattice-sdk/)

[![npm shield](https://img.shields.io/npm/v/@anduril-industries/lattice-sdk)](https://www.npmjs.com/package/@anduril-industries/lattice-sdk)

Lattice SDK TypeScript库从TypeScript提供Lattice SDK API的方便访问.

## 目录

-   [文档](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-documentation)
-   [所需资源](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-requirements)
-   [安装](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-installation)
-   [支助](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-support)
-   [参考文献](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-reference)
-   [使用量](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-usage)
-   [环境](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-environments)
-   [认证](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-authentication)
-   [请求和答复类型](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-request-and-response-types)
-   [例外处理](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-exception-handling)
-   [流化反应](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-streaming-response)
-   [文件上传](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-file-uploads)
-   [二进制响应](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-binary-response)
-   [倾斜](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-pagination)
-   [高级](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-advanced)
    -   [出口](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-subpackage-exports)
    -   [其他信头](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-additional-headers)
    -   [其它查询字符串参数](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-additional-query-string-parameters)
    -   [检索](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-retries)
    -   [超时](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-timeouts)
    -   [中止请求](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-aborting-requests)
    -   [访问原始响应数据](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-access-raw-response-data)
    -   [日志](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-logging)
    -   [自定义抓取](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-custom-fetch)
    -   [运行时间相容性](https://npmcn.com/package/%40anduril-industries/lattice-sdk/#readme-runtime-compatibility)

## 文档

API 备有参考文件 [这里](https://developer.anduril.com/)。 。 。 .

## 所需资源

要使用 SDK 请确保您安装以下设备 :

-   [节点JS](https://nodejs.org/en/download/package-manager)

## 安装

```sh
npm i -s @anduril-industries/lattice-sdk
```

## 支助

请联系您的Anduril代表.

## 参考文献

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

## 使用量

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

```typescript
import { LatticeClient } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({ clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET" });
await client.entities.longPollEntityEvents({
    sessionToken: "sessionToken"
});
```

## 环境

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

```typescript
import { LatticeClient, LatticeEnvironment } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({
    environment: LatticeEnvironment.Default,
});
```

## 认证

SDK支持OAuth认证有两个选项:

**备选方案1:OAuth客户端证书流程**

如果您想要 SDK 自动处理 OAuth 令牌检索和刷新时使用此功能 :

```typescript
import { LatticeClient } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({
    clientId: "YOUR_CLIENT_ID",
    clientSecret: "YOUR_CLIENT_SECRET",
    ...
});
```

**备选案文2:推翻**

当您已经拥有有效的无记名符号并想要跳过 OAuth 流时使用 :

```typescript
import { LatticeClient } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({
    token: "my-pre-generated-bearer-token",
    ...
});
```

## 请求和答复类型

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

```typescript
import { Lattice } from "@anduril-industries/lattice-sdk";

const request: Lattice.GetEntityRequest = {
    ...
};
```

## 例外处理

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

```typescript
import { LatticeError } from "@anduril-industries/lattice-sdk";

try {
    await client.entities.longPollEntityEvents(...);
} catch (err) {
    if (err instanceof LatticeError) {
        console.log(err.statusCode);
        console.log(err.message);
        console.log(err.body);
        console.log(err.rawResponse);
    }
}
```

## 流化反应

一些端点返回流回响应,而不是立即返回全部响应. SDK使用同步延时器,所以您可以使用 `for await...of` 循环.

```typescript
import { LatticeClient } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({ clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET" });
const response = await client.entities.streamEntities();
for await (const item of response) {
    console.log(item);
}
```

## 文件上传

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

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

await client.objects.uploadObject(createReadStream("path/to/file"), ...);
await client.objects.uploadObject(new ReadableStream(), ...);
await client.objects.uploadObject(Buffer.from('binary data'), ...);
await client.objects.uploadObject(new Blob(['binary data'], { type: 'audio/mpeg' }), ...);
await client.objects.uploadObject(new File(['binary data'], 'file.mp3'), ...);
await client.objects.uploadObject(new ArrayBuffer(8), ...);
await client.objects.uploadObject(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.objects.getObject(...);
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.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > const arrayBuffer = await response.arrayBuffer();
> > await writeFile('path/to/file', Buffer.from(arrayBuffer));
> > ```
> 
> > 块
> > 
> > ```ts
> > import { writeFile } from 'fs/promises';
> > 
> > const response = await client.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > const bytes = await response.bytes();
> > await writeFile('path/to/file', bytes);
> > ```

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

> 德诺
> 
> > 可读结构(最高效)
> > 
> > ```ts
> > const response = await client.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > const arrayBuffer = await response.arrayBuffer();
> > await Deno.writeFile('path/to/file', new Uint8Array(arrayBuffer));
> > ```
> 
> > 块
> > 
> > ```ts
> > const response = await client.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > const bytes = await response.bytes();
> > await Deno.writeFile('path/to/file', bytes);
> > ```

> 浏览器
> 
> > Blob( 效率最高)
> > 
> > ```ts
> > const response = await client.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> > 
> > 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.objects.getObject(...);
> 
> const stream = response.stream();
> const text = await new Response(stream).text();
> ```

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

> 块
> 
> ```ts
> const response = await client.objects.getObject(...);
> 
> const blob = await response.blob();
> const text = await blob.text();
> ```

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

## 倾斜

列表终点为相接点. SDK提供了一个传动器,这样你就可以简单地绕过这些项目:

```typescript
import { LatticeClient } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({ clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET" });
const pageableResponse = await client.objects.listObjects();
for await (const item of pageableResponse) {
    console.log(item);
}

// Or you can manually iterate page-by-page
let page = await client.objects.listObjects();
while (page.hasNextPage()) {
    page = await page.getNextPage();
}

// You can also access the underlying response
const response = page.response;
```

## 高级

### 出口

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

```typescript
import { EntitiesClient } from '@anduril-industries/lattice-sdk/entities';

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

### 其他信头

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

```typescript
import { LatticeClient } from "@anduril-industries/lattice-sdk";

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

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

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

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

```typescript
const response = await client.entities.longPollEntityEvents(..., {
    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.entities.longPollEntityEvents(..., {
    maxRetries: 0 // override maxRetries at the request level
});
```

### 超时

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

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

### 中止请求

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

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

### 访问原始响应数据

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

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

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

### 日志

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

```typescript
import { LatticeClient, logging } from "@anduril-industries/lattice-sdk";

const client = new LatticeClient({
    ...
    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+号舱
-   原生反应

## 常见问题

### 如何安装 @anduril-industries/lattice-sdk？

在项目目录运行 npm install @anduril-industries/lattice-sdk，或使用 pnpm add / yarn add / bun add。

### @anduril-industries/lattice-sdk 支持 TypeScript 吗？

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

### @anduril-industries/lattice-sdk 支持 ESM 还是 CommonJS？

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

### @anduril-industries/lattice-sdk 需要什么版本的 Node\.js？

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

### @anduril-industries/lattice-sdk 可以商用吗？

@anduril-industries/lattice-sdk 使用 See LICENSE 许可。声明的许可为 See LICENSE，请阅读许可原文确认使用条件。以上为概括，不构成法律意见，请以许可原文为准。

### @anduril-industries/lattice-sdk 的下载量有多少？

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

### @anduril-industries/lattice-sdk 还在维护吗？

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

