@ 持续- labs/ sdk
连续 API 的 SDK 类型.
Spekeasy从公共连续API合同中生成了这个SDK. 这个 API 参考 记录每个操作。 在此寄存器中报告 SDK 和 API 的问题 .
内容提要
连续API:从快照开始API Boxs,Web Boxs和MCP Boxs. 以 API 密钥认证作为 Bearer 令牌发送的每项请求 .
目录
SDK 安装
SDK可以安装其中之一 无, (中文(简体) ), 小时, (中文(简体) ), 包头 或者说 线条 软件包管理器.
国家预防机制
npm add @continuous-labs/sdk
菲律宾
pnpm add @continuous-labs/sdk
阿宝
bun add @continuous-labs/sdk
雅伦
yarn add @continuous-labs/sdk
[注] 此软件包仅作为ES模块(ESM)发布. 用于应用 常见JS, 使用
await import("@continuous-labs/sdk")以导入和使用此软件包.
所需资源
对于支持的 JavaScript 运行时间, 请参考 运行时间.md。 。 。 .
SDK 示例使用法
示例
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apibox.listApiboxes({});
for await (const page of result) {
console.log(page);
}
}
run();
认证
常客安全计划
这个SDK在全球支持以下安全计划:
| 名称 | 类型 | 计划 | 环境变量 |
|---|---|---|---|
apiKeyAuth | 网页 | HTTP 缓冲器 | CONTINUOUS_API_KEY_AUTH |
用 API 认证 apiKeyAuth 初始化 SDK 客户端实例时必须设置参数 。 例如:
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apibox.listApiboxes({});
for await (const page of result) {
console.log(page);
}
}
run();
现有资源和业务
可用方法
图片框
- 列表辅助框 - 列表 API 框
- 创建 Apibox - 创建 API 框
- 删除辅助框 - 删除 API 框
- 获取 Apibox - 拿API盒来
- 更新 Api框 - 更新 API 框
- 保存 Apibox 缩写 - 将 API 框保存为快照
- 启动 Apibox 选项 - 启动 API 框
- 列表 Apibox 设置 - 列出 API 框步骤
- 停止 Apibox 选项 - 停止API盒
Apibox 抓图
- 列表 Apibox 缩写 - 列表 API 盒快照
- 创建 Apibox 抓图 - 创建 API 盒快照
- 删除 Apibox 抓图 - 删除 API 盒快照
- 获取 Apibox 缩写 - 获取API盒快照
- 更新 Apibox 抓图 - 更新 API 盒快照
- 取消 Apibox 缩写 - 取消 API 盒快照构建
- 克隆 Apibox 缩写 - 克隆API盒快照
- 恢复 Apibox 缩写 - 恢复 API 盒快照构建
全权证书
麦克风盒
- 列表Mcp框 - 列出MCP盒
- 创建Mcpbox - 创建 MCP 框
- 删除Mcpbox - 删除MCP盒
- 获取Mcpbox - 拿MCP盒来
- 更新Mcpbox - 更新 MCP 框
- 保存 Mcpbox 抓图 - 将 MCP 框保存为快照
- 启动Mcpbox - 启动MCP盒
- 停止磁盘盒 - 停止MCP盒
Mcpbox 弹出
- 列表 Mcpbox 缩写 - 列出MCP盒快照
- 创建McpboxSnapshot - 创建 MCP 盒快照
- 删除Mcpbox快照 - 删除 MCP 盒快照
- 获取 Mcpbox 图像 - 获取 MCP 盒快照
- 更新McpboxSnapshot - 更新 MCP 盒快照
- 取消 Mcpbox 抓图 - 取消MCP 框快照构建
- 克隆Mcpbox 抓图 - 克隆MCP盒快照
- 恢复McpboxSnapshot - 恢复MCP盒快照构建
模拟快照
列表模拟图像- 模拟快照列表:警告: 折旧创建模拟图集- 创建模拟快照:警告: 折旧删除模拟图- 删除模拟快照:警告: 折旧获取模拟图像- 获得模拟快照:警告: 折旧更新模拟快照- 更新模拟快照:警告: 折旧
模拟
列表模拟- 模拟清单:警告: 折旧创建模拟- 创建模拟:警告: 折旧删除模拟- 删除模拟:警告: 折旧获得模拟- 得到模拟: 警告: 折旧更新模拟- 更新模拟:警告: 折旧创建模拟 预付款- 提前模拟时间:警告: 折旧获得模拟 预付款- 获得模拟时钟前进:警告: 折旧列表模拟 预告- 列出时钟高级事件:警告: 折旧开始模拟- 开始模拟:警告: 折旧列表模拟- 模拟步骤:警告: 折旧停止模拟- 停止模拟:警告: 折旧获取模拟- 获取当前模拟 Token:警告: 折旧再生模拟- 重复模拟Token:警告: 折旧
模拟器
列表模拟器- 列表模拟器:警告: 折旧构建模拟器- 构建模拟器:警告: 折旧删除模拟器- 删除模拟器:警告: 折旧获取模拟器- 获取模拟器:警告: 折旧更新模拟器- 更新模拟器:警告: 折旧取消模拟器- 取消模拟器 构建: 警告 : 折旧克隆模拟器- 克隆模拟器:警告: 折旧恢复模拟器- 恢复模拟器构建:警告: 折旧
网页盒
- 列表网页框 - 列出网页框
- 创建网络框 - 创建网页框
- 删除网页框 - 删除网页框
- 获取Webbox - 获取网页盒
- 更新网页框 - 更新网页框
- 保存 Webbox 抓图 - 将网页框另存为快照
- 启动Webbox - 开始网页盒
- 列表 WebboxSteps - 列出网页框步骤
- 停止网页框 - 停止网页盒
网络框抓取
- 列表 Webbox 抓图 - 列出网页盒快照
- 创建WebboxSnapshot - 创建网络框快照
- 删除 Webbox 抓图 - 删除网络盒快照
- 获取 Webbox 抓取 - 获取网络盒快照
- 更新WebboxSnapshot - 更新网页盒快照
- 取消 Webbox 抓图 - 取消网页盒快照构建
- 克隆 Webbox 抓图 - 克隆人网络盒快照
- 恢复 Webbox 抓图 - 恢复网页盒快照构建
独立职能
上述所有方法都作为独立功能提供。 这些 函数是用于在浏览器中运行的应用程序的理想功能,没有服务器 运行时间或应用程序捆绑大小为主的其他环境 关心。 当使用捆绑器构建您的应用程序时, 全部未使用 功能将被从最后的捆绑中排除,或者被树切除.
要了解更多独立函数, 请检查 职能.md。 。 。 .
现有的独立职能
apiboxCreateApibox- 创建 API 框apiboxDeleteApibox- 删除 API 框apiboxGetApibox- 拿API盒来apiboxListApiboxes- 列表 API 框apiboxListApiboxSteps- 列出 API 框步骤apiboxSaveApiboxSnapshot- 将 API 框保存为快照apiboxSnapshotsCancelApiboxSnapshot- 取消 API 盒快照构建apiboxSnapshotsCloneApiboxSnapshot- 克隆API盒快照apiboxSnapshotsCreateApiboxSnapshot- 创建 API 盒快照apiboxSnapshotsDeleteApiboxSnapshot- 删除 API 盒快照apiboxSnapshotsGetApiboxSnapshot- 获取API盒快照apiboxSnapshotsListApiboxSnapshots- 列表 API 盒快照apiboxSnapshotsResumeApiboxSnapshot- 恢复 API 盒快照构建apiboxSnapshotsUpdateApiboxSnapshot- 更新 API 盒快照apiboxStartApibox- 启动 API 框apiboxStopApibox- 停止API盒apiboxUpdateApibox- 更新 API 框credentialsCreateCredential- 创建证书credentialsDeleteCredential- 删除证书credentialsGetCredential- 获得证书credentialsListCredentials- 名单证书credentialsUpdateCredential- 更新证书mcpboxCreateMcpbox- 创建 MCP 框mcpboxDeleteMcpbox- 删除MCP盒mcpboxGetMcpbox- 拿MCP盒来mcpboxListMcpboxes- 列出MCP盒mcpboxSaveMcpboxSnapshot- 将 MCP 框保存为快照mcpboxSnapshotsCancelMcpboxSnapshot- 取消MCP 框快照构建mcpboxSnapshotsCloneMcpboxSnapshot- 克隆MCP盒快照mcpboxSnapshotsCreateMcpboxSnapshot- 创建 MCP 盒快照mcpboxSnapshotsDeleteMcpboxSnapshot- 删除 MCP 盒快照mcpboxSnapshotsGetMcpboxSnapshot- 获取 MCP 盒快照mcpboxSnapshotsListMcpboxSnapshots- 列出MCP盒快照mcpboxSnapshotsResumeMcpboxSnapshot- 恢复MCP盒快照构建mcpboxSnapshotsUpdateMcpboxSnapshot- 更新 MCP 盒快照mcpboxStartMcpbox- 启动MCP盒mcpboxStopMcpbox- 停止MCP盒mcpboxUpdateMcpbox- 更新 MCP 框webboxCreateWebbox- 创建网页框webboxDeleteWebbox- 删除网页框webboxGetWebbox- 获取网页盒webboxListWebboxes- 列出网页框webboxListWebboxSteps- 列出网页框步骤webboxSaveWebboxSnapshot- 将网页框另存为快照webboxSnapshotsCancelWebboxSnapshot- 取消网页盒快照构建webboxSnapshotsCloneWebboxSnapshot- 克隆人网络盒快照webboxSnapshotsCreateWebboxSnapshot- 创建网络框快照webboxSnapshotsDeleteWebboxSnapshot- 删除网络盒快照webboxSnapshotsGetWebboxSnapshot- 获取网络盒快照webboxSnapshotsListWebboxSnapshots- 列出网页盒快照webboxSnapshotsResumeWebboxSnapshot- 恢复网页盒快照构建webboxSnapshotsUpdateWebboxSnapshot- 更新网页盒快照webboxStartWebbox- 开始网页盒webboxStopWebbox- 停止网页盒webboxUpdateWebbox- 更新网页框- 创建模拟:警告: 折旧simulationsCreateSimulation- 提前模拟时间:警告: 折旧simulationsCreateSimulationAdvance- 删除模拟:警告: 折旧simulationsDeleteSimulation- 得到模拟: 警告: 折旧simulationsGetSimulation- 获得模拟时钟前进:警告: 折旧simulationsGetSimulationAdvance- 获取当前模拟 Token:警告: 折旧simulationsGetSimulationToken- 列出时钟高级事件:警告: 折旧simulationsListSimulationAdvanceEvents- 模拟清单:警告: 折旧simulationsListSimulations- 模拟步骤:警告: 折旧simulationsListSimulationSteps- 创建模拟快照:警告: 折旧simulationSnapshotsCreateSimulationSnapshot- 删除模拟快照:警告: 折旧simulationSnapshotsDeleteSimulationSnapshot- 获得模拟快照:警告: 折旧simulationSnapshotsGetSimulationSnapshot- 模拟快照列表:警告: 折旧simulationSnapshotsListSimulationSnapshots- 更新模拟快照:警告: 折旧simulationSnapshotsUpdateSimulationSnapshot- 重复模拟Token:警告: 折旧simulationsRegenerateSimulationToken- 开始模拟:警告: 折旧simulationsStartSimulation- 停止模拟:警告: 折旧simulationsStopSimulation- 更新模拟:警告: 折旧simulationsUpdateSimulation- 构建模拟器:警告: 折旧simulatorsBuildSimulator- 取消模拟器 构建: 警告 : 折旧simulatorsCancelSimulator- 克隆模拟器:警告: 折旧simulatorsCloneSimulator- 删除模拟器:警告: 折旧simulatorsDeleteSimulator- 获取模拟器:警告: 折旧simulatorsGetSimulator- 列表模拟器:警告: 折旧simulatorsListSimulators- 恢复模拟器构建:警告: 折旧simulatorsResumeSimulator- 更新模拟器:警告: 折旧simulatorsUpdateSimulator
倾斜
此 SDK 中的一些端点支持 pagination. 要用帕吉恩语,你
使您的 SDK 调用如常, 但返回的响应对象也将是
可使用下列设备消耗的同步可执行性: for await...of
语法.
举个例子说
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apibox.listApiboxes({});
for await (const page of result) {
console.log(page);
}
}
run();
文件上传
某些SDK方法接受文件作为多段请求的一部分. 可以而且通常建议将文件作为流上传,而不是将全部内容读入内存. 这避免了过度的内存消耗,并且在与非常大的文件合作时,可能会与外出错误相撞. 以下示例说明如何在请求中附加文件流 .
[TIP]
根据您的 JavaScript 运行时间, 有一些方便的功能可以将一个控件返回到一个文件, 而不将全部内容读入内存 :
- 节点.js v20+: V20年以后,Node.js有一个本地人
openAsBlob函数在node:fs。 。 。 .- 宾: 当地人
Bun.file函数生成一个可用于流文件上传的文件手柄.- 浏览器 : 所有支持的浏览器返回实例到一个
File当从一个值读取时<input type="file">键.- 节点.js v18: 文件流可以使用
fileFrom助手从fetch-blob/from.js。 。 。 .
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apiboxSnapshots.createApiboxSnapshot({
body: {
request: {},
},
});
console.log(result);
}
run();
检索
此 SDK 中的一些端点支持重试. 如果在没有任何配置的情况下使用SDK,则会回落到API提供的默认重试策略. 然而,默认的重试策略可以在一次操作的基础上被推翻,或者在整个SDK中被推翻.
更改单个 API 调用默认重试策略, 只需为调用提供重试 Config 对象 :
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apibox.listApiboxes({}, {
retries: {
strategy: "backoff",
backoff: {
initialInterval: 1,
maxInterval: 50,
exponent: 1.1,
maxElapsedTime: 100,
},
retryConnectionErrors: false,
},
});
for await (const page of result) {
console.log(page);
}
}
run();
如果您想要覆盖所有支持重试的操作的默认重试策略, 您可以在 SDK 初始化时提供重试Config :
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
retryConfig: {
strategy: "backoff",
backoff: {
initialInterval: 1,
maxInterval: 50,
exponent: 1.1,
maxElapsedTime: 100,
},
retryConnectionErrors: false,
},
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apibox.listApiboxes({});
for await (const page of result) {
console.log(page);
}
}
run();
处理错误
ContinuousError 是所有 HTTP 错误响应的基础类。 其属性如下:
| 财产 | 类型 | 说明 |
|---|---|---|
error.message | string | 错误消息 |
error.statusCode | number | HTTP 响应状态代码 eg 404 |
error.headers | Headers | HTTP 响应头 |
error.body | string | HTTP 躯体. 如果没有尸体返回, 则可以是空字符串 . |
error.rawResponse | Response | 原始 HTTP 响应 |
error.data$ | 可选的 一些错误可能包含结构化数据. 参见错误类。 。 。 . |
示例
import { Continuous } from "@continuous-labs/sdk";
import * as errors from "@continuous-labs/sdk/models/errors";
const continuous = new Continuous({
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
try {
const result = await continuous.apibox.listApiboxes({});
for await (const page of result) {
console.log(page);
}
} catch (error) {
// The base class for HTTP error responses
if (error instanceof errors.ContinuousError) {
console.log(error.message);
console.log(error.statusCode);
console.log(error.body);
console.log(error.headers);
// Depending on the method different errors may be thrown
if (error instanceof errors.ErrorT) {
console.log(error.data$.code); // string
console.log(error.data$.detail); // string
console.log(error.data$.validation); // models.SpecificationValidation
}
}
}
}
run();
错误分类
主错误 :
ContinuousError: HTTP 错误响应的基础类.ErrorT: 通用错误.
少常见错误(7)
网络错误 :
ConnectionError: HTTP 客户端无法向服务器提出请求.RequestTimeoutError: HTTP 请求由于中止信号而超时.RequestAbortedError:HTTP请求被客户端中止.InvalidRequestError: 用于创建请求的任何输入无效.UnexpectedClientError:无法识别或出乎意料的错误.
继承从 ContinuousError数字 :
SimulatorDeleteConflictError: 冲突。 状态代码409适用于81个方法中的1个ResponseValidationError:从服务器返回的数据和SDK期望的结构之间的类型不匹配. 见error.rawValue原值和error.pretty()用于格式化良好的多行字符串.
* 检查 方法文档 以查看该错误是否适用.
服务器选择
覆盖服务器 URL / 客户端
通过将 URL 传递到 serverURL: string 初始化 SDK 客户端实例时的可选参数 。 例如:
import { Continuous } from "@continuous-labs/sdk";
const continuous = new Continuous({
serverURL: "https://api.continuouslabs.ai",
apiKeyAuth: process.env["CONTINUOUS_API_KEY_AUTH"] ?? "",
});
async function run() {
const result = await continuous.apibox.listApiboxes({});
for await (const page of result) {
console.log(page);
}
}
run();
自定义 HTTP 客户端
TypeScript SDK 使用一个 HTTPClient 将本地人包裹起来
获取 API这个
客户端是薄薄的包装 fetch 并且提供连接钩子的能力
围绕可用于修改请求或处理的请求生命周期
错误和反应.
这个 HTTPClient 构造器使用可选 fetcher 参数可以是
用于整合第三方 HTTP 客户端或用于编写测试以嘲弄
hTTP 客户端并输入固定设备.
以下例子说明如何:
- 通过使用 未编辑代理代理代理服务器
- 使用该
"beforeRequest"向请求添加自定义头和超时 - 使用该
"requestError"记录错误的钩头
import { Continuous } from "@continuous-labs/sdk";
import { ProxyAgent } from "undici";
import { HTTPClient } from "@continuous-labs/sdk/lib/http";
const dispatcher = new ProxyAgent("http://proxy.example.com:8080");
const httpClient = new HTTPClient({
// 'fetcher' takes a function that has the same signature as native 'fetch'.
fetcher: (input, init) =>
// 'dispatcher' is specific to undici and not part of the standard Fetch API.
fetch(input, { ...init, dispatcher } as RequestInit),
});
httpClient.addHook("beforeRequest", (request) => {
const nextRequest = new Request(request, {
signal: request.signal || AbortSignal.timeout(5000)
});
nextRequest.headers.set("x-custom-header", "custom value");
return nextRequest;
});
httpClient.addHook("requestError", (error, request) => {
console.group("Request Error");
console.log("Reason:", `${error}`);
console.log("Endpoint:", `${request.method} ${request.url}`);
console.groupEnd();
});
const sdk = new Continuous({ httpClient: httpClient });
调试
您可以为 SDK 请求和响应设置 SDK 以发送调试日志 .
你可以通过一个匹配的日志 console'作为 SDK 选项的接口.
[尖叫声] 注意调试日志会揭示一些秘密, 如标题中的 API 令牌, 打印到控制台或文件中的日志信息 。 建议只在本地开发期间使用这一特征,而不能用于生产.
import { Continuous } from "@continuous-labs/sdk";
const sdk = new Continuous({ debugLogger: console });
通过设置环境变量也可以启用默认调试日志 CONTINUOUS_DEBUG 真实的.
发展
成熟度
这个SDK是在β中,在版本之间可能会有断裂的更改,而没有主要的版本更新. 因此,我们建议使用 到特定软件包版本。 这样,您可以每次安装同一版本而不中断更改,除非您是故意的 正在寻找最新版本.
捐款
虽然我们重视对SDK的开源贡献,但这个库是程序生成的. 任何加入内部文件的手动修改都会被覆盖到下一代上. 我们期待着听到你的反馈。 随便你开个公关 或一个有概念证明的问题 我们会尽力把它纳入未来的发行.