Skip to main content
v6 是一次重写:一个扁平的客户端,以纯数据取代类,ID 作为第一个参数,以及单一的错误类。大多数更改都是机械性的。

概览

构造和选项

逐个方法对照

类型

类型随 SDK 一起提供,并与 API 的字段名保持一致。相对于 @squarecloud/api-types 和 v5 类的主要重命名:

错误

  • 合成代码已被移除(RATE_LIMIT_EXCEEDED、PAYLOAD_TOO_LARGE、SERVER_UNAVAILABLE、UNKNOWN_ERROR_<status>):现在会呈现 API 的真实代码(RATE_LIMITED、KEEP_CALM、DAILY_SNAPSHOTS_LIMIT_REACHED、FILE_TOO_LARGE……)。
  • 没有响应:status: 0,带有 NETWORK_ERROR(原因位于 cause 中)或 TIMEOUT。没有代码的响应体为 UNKNOWN_ERROR,带有真实的 status 和消息 HTTP <status>。
  • 对于 API 错误,instanceof TypeError 不再为 true。
  • 过期的密钥与未知密钥一样返回 401 ACCESS_DENIED。
  • ai.chat() 的错误(包括身份验证和速率限制)带有小写的 OpenAI 代码(access_denied、rate_limit_exceeded……)。
  • 被拒绝的 start/stop/restart 返回 409,仅带有代码:CONTAINER_ALREADY_STARTED、CONTAINER_ALREADY_STOPPED、CONTAINER_TEMPORARILY_SUSPENDED、CONTAINER_NOT_FOUND、CONTAINER_INSUFFICIENT_DISK_SPACE、CONTAINER_NETWORK_CONFLICT 或 ACTION_FAILED。

行为变更

  • 调用会超时:默认每次尝试 30 秒(v5 没有超时),对于服务器保持连接的调用至少 120 秒。设置 timeoutMs: 0 可取消超时。
  • files.write() 将字符串视为内容并以纯文本发送;字节以 base64 发送,对二进制安全,空内容会创建一个空文件(与 Python 和 Go SDK 的传输格式相同)。files.read() 请求 base64 并对其解码。
  • 对不存在的目录调用 files.list() 会抛出 404 FILE_NOT_FOUND,而不是返回 []。
  • snapshots.create() 在返回 202 时返回 { pending: true },而不是抛出异常。
  • 字符串结果绝不会是 undefined:当 API 未返回时,setWebhook 和 resetCredentials("certificate") 返回 "";deploys.current() 返回 {}。
  • realtime() 会在连接断开以及收到 REALTIME_RECONNECT 时重新连接(最多连续 3 次,每 5.5 秒最多打开一次)。
  • 重试:GET 上的网络错误以及 503 UPLOAD_BUSY/ANALYTICS_BUSY(外加 GET 上的 DATABASE_UNAVAILABLE),带有退避。429 永不重试。DATABASE_UNAVAILABLE 可能在变更操作已被应用之后到达:请自行重试你的幂等变更操作。
  • 空的、. 和 .. 的 ID 会在本地以 INVALID_ID 失败。
  • 值为 undefined、"" 或 false 的查询参数不会被发送。