Skip to content

zentao-api / ZentaoClient

Class: ZentaoClient ​

禅道 API 客户端,封装一次次原始 HTTP 调用。

主要职责:

  • 站点根地址规范化与 /api.php/v2 拼接
  • 自动注入 Token 头
  • 请求超时控制(基于 AbortController)
  • 可选的 TLS 跳过校验(仅 Node.js 运行时)
  • 响应体的 JSON 解析与错误归一化

适合直接调用裸 API;若希望按模块/动作名调用并自动组装路径、参数、分页, 请改用 request。

Constructors ​

Constructor ​

new ZentaoClient(options): ZentaoClient

使用完整配置创建客户端。

Parameters ​

ParameterTypeDescription
optionsZentaoClientOptions客户端配置,参见 ZentaoClientOptions。

Returns ​

ZentaoClient

Throws ​

E_INVALID_BASE_URL —— baseUrl 无法解析为合法的 http(s) URL。

Constructor ​

new ZentaoClient(baseUrl): ZentaoClient

使用站点根地址创建客户端。

Parameters ​

ParameterTypeDescription
baseUrlstring禅道站点根地址,例如 https://zentao.example.com; 若误传 /api.php/v2 后缀会自动剥离。

Returns ​

ZentaoClient

Throws ​

E_INVALID_BASE_URL —— 地址不合法或协议非 http(s)。

Properties ​

PropertyModifierTypeDescription
baseUrlreadonlystring禅道 API v2 根地址,等于 siteUrl + '/api.php/v2'。
siteUrlreadonlystring禅道站点根地址,不包含 /api.php/v2。

Methods ​

delete() ​

delete<T>(path, options?): Promise<T>

发起 DELETE 请求。

Type Parameters ​

Type ParameterDescription
T期望的响应体类型。

Parameters ​

ParameterTypeDescription
pathstring相对 baseUrl 的路径。
optionsOmit<ClientRequestOptions, "method" | "body" | "bodyType">-

Returns ​

Promise<T>

解析后的响应体(强转为 T)。

Throws ​

传输层失败时抛出,详见 ZentaoClient.request。


fetch() ​

fetch(url, options, token?, fetchOptions?): Promise<unknown>

使用完整 URL 发起请求,复用 API 与站点配置的传输层。

Parameters ​

ParameterTypeDescription
urlstring完整请求 URL,包含所需的查询参数。
optionsClientRequestOptions单次请求选项;其中 query 需由调用方预先拼入 url。
token?string显式注入的 Token;省略时不自动使用实例保存的 Token。
fetchOptions?Pick<RequestInit, "cache" | "credentials">原生 fetch 的缓存与凭据选项。

Returns ​

Promise<unknown>

按 options.responseType 解析的响应体,默认优先 JSON,失败后返回文本。

Throws ​

传输层失败时抛出,详见 ZentaoClient.request。


get() ​

get<T>(path, options?): Promise<T>

发起 GET 请求。

Type Parameters ​

Type ParameterDescription
T期望的响应体类型;调用方负责类型收窄,SDK 不做运行时校验。

Parameters ​

ParameterTypeDescription
pathstring相对 baseUrl 的路径。
optionsOmit<ClientRequestOptions, "method" | "body" | "bodyType">-

Returns ​

Promise<T>

解析后的响应体(强转为 T)。

Throws ​

传输层失败时抛出,详见 ZentaoClient.request。


getZentaoConfig() ​

getZentaoConfig(options?): Promise<ServerConfig>

匿名获取禅道站点 /?mode=getconfig 配置,只需站点地址,无需登录或 profile。

不发送 API Token,浏览器请求显式省略 Cookie 等凭据,不受 API Token 过期影响。

默认复用不超过 24 小时的缓存;缺失、过期或时间异常时重新获取。 forceRefresh: true 忽略缓存。同一客户端的并发刷新共用首次调用的传输选项; 后加入的调用仍可通过自己的 signal 取消等待。 成功后更新实例缓存;启用 persistProfiles 且绑定了 profile 时仅更新其配置和获取时间。 返回独立副本,修改返回值不会改变缓存。此方法不会忽略配置获取错误。

Parameters ​

ParameterTypeDescription
optionsGetZentaoConfigOptions缓存、超时、TLS 与取消选项。

Returns ​

Promise<ServerConfig>

服务器配置。

Throws ​

传输错误、E_INVALID_ZENTAO_CONFIG、E_INVALID_ZENTAO_VERSION 或 profile 存储错误。


login() ​

login(account, password): Promise<string>

使用账号密码登录禅道。

验证成功后强制获取一次站点配置,再把返回的 Token 写入当前客户端实例; 配置获取失败默认阻断登录,只有全局 skipVersionCheckOnConfigError 可允许继续。 全局 version 不跳过登录时的配置获取。 当全局 persistProfiles 为真时,会同时把账号、Token、用户信息、服务端配置和 客户端偏好(仅在显式设置过 timeout / insecure 时)持久化为本地 profile, 并切换为当前 profile,方便下次通过 ZentaoClient.fromProfile 直接登录态恢复。 重新登录同一账号时保留已有自定义字段,以及未被显式覆盖的客户端偏好。 保存的 timeout / insecure 与请求一致:全局显式值优先于实例默认值。

Parameters ​

ParameterTypeDescription
accountstring禅道用户账号。
passwordstring禅道用户密码(明文,仅在传输层 TLS 内使用)。

Returns ​

Promise<string>

登录成功后返回的 API Token。

Throws ​

E_LOGIN_FAILED —— 服务端返回 status !== "success" 或缺失 token; 也可能因底层 ZentaoClient.request 而抛出 HTTP/网络/超时错误。


post() ​

post<T>(path, body, options?): Promise<T>

发起 POST 请求,body 会被序列化为 JSON。

Type Parameters ​

Type ParameterDescription
T期望的响应体类型。

Parameters ​

ParameterTypeDescription
pathstring相对 baseUrl 的路径。
bodyunknownJSON 请求体,传入对象/数组将被 JSON.stringify。
optionsOmit<ClientRequestOptions, "method">-

Returns ​

Promise<T>

解析后的响应体(强转为 T)。

Throws ​

传输层失败时抛出,详见 ZentaoClient.request。


put() ​

put<T>(path, body, options?): Promise<T>

发起 PUT 请求,body 会被序列化为 JSON。

Type Parameters ​

Type ParameterDescription
T期望的响应体类型。

Parameters ​

ParameterTypeDescription
pathstring相对 baseUrl 的路径。
bodyunknownJSON 请求体。
optionsOmit<ClientRequestOptions, "method">-

Returns ​

Promise<T>

解析后的响应体(强转为 T)。

Throws ​

传输层失败时抛出,详见 ZentaoClient.request。


request() ​

Call Signature ​

request(path, options): Promise<Response>

发起一次原始 API 请求。

选项优先级:本次调用 options > 全局选项(getGlobalOptions) > 客户端构造时默认值。

特殊处理:

  • 默认 HTTP 方法为 GET,GET 请求即使提供了 options.body 也不会发送,避免被部分代理/浏览器拒绝。
  • 不自动跟随重定向,避免把 Token 或请求体转发到另一个地址。
  • 非空响应优先按 JSON 解析;解析失败时回落为字符串原文。
  • 业务层失败(即响应体 { status: "fail" })不会抛出,仍按原样返回;只有 HTTP/网络/超时等传输层错误才会抛错。
  • insecure 仅在 Node.js 下可用,浏览器中传入会抛 E_INSECURE_BROWSER。
Parameters ​
ParameterTypeDescription
pathstring相对 baseUrl 的路径,可省略前导 /。
optionsClientRequestOptions & object单次请求选项,参见 ClientRequestOptions。
Returns ​

Promise<Response>

解析后的响应体;当响应为空字符串时返回 undefined。

Throws ​

可能抛出 E_HTTP_ERROR(非 2xx 状态)、E_NETWORK_ERROR(底层 fetch 失败)、 E_TIMEOUT(超过 timeout)、E_ABORTED(外部信号取消)或 E_INSECURE_BROWSER(浏览器中开启了 insecure);传入 ReadableStream 请求体时会抛 E_INVALID_PARAM。

Call Signature ​

request(path, options): Promise<ArrayBuffer>

发起一次原始 API 请求。

选项优先级:本次调用 options > 全局选项(getGlobalOptions) > 客户端构造时默认值。

特殊处理:

  • 默认 HTTP 方法为 GET,GET 请求即使提供了 options.body 也不会发送,避免被部分代理/浏览器拒绝。
  • 不自动跟随重定向,避免把 Token 或请求体转发到另一个地址。
  • 非空响应优先按 JSON 解析;解析失败时回落为字符串原文。
  • 业务层失败(即响应体 { status: "fail" })不会抛出,仍按原样返回;只有 HTTP/网络/超时等传输层错误才会抛错。
  • insecure 仅在 Node.js 下可用,浏览器中传入会抛 E_INSECURE_BROWSER。
Parameters ​
ParameterTypeDescription
pathstring相对 baseUrl 的路径,可省略前导 /。
optionsClientRequestOptions & object单次请求选项,参见 ClientRequestOptions。
Returns ​

Promise<ArrayBuffer>

解析后的响应体;当响应为空字符串时返回 undefined。

Throws ​

可能抛出 E_HTTP_ERROR(非 2xx 状态)、E_NETWORK_ERROR(底层 fetch 失败)、 E_TIMEOUT(超过 timeout)、E_ABORTED(外部信号取消)或 E_INSECURE_BROWSER(浏览器中开启了 insecure);传入 ReadableStream 请求体时会抛 E_INVALID_PARAM。

Call Signature ​

request(path, options): Promise<Blob>

发起一次原始 API 请求。

选项优先级:本次调用 options > 全局选项(getGlobalOptions) > 客户端构造时默认值。

特殊处理:

  • 默认 HTTP 方法为 GET,GET 请求即使提供了 options.body 也不会发送,避免被部分代理/浏览器拒绝。
  • 不自动跟随重定向,避免把 Token 或请求体转发到另一个地址。
  • 非空响应优先按 JSON 解析;解析失败时回落为字符串原文。
  • 业务层失败(即响应体 { status: "fail" })不会抛出,仍按原样返回;只有 HTTP/网络/超时等传输层错误才会抛错。
  • insecure 仅在 Node.js 下可用,浏览器中传入会抛 E_INSECURE_BROWSER。
Parameters ​
ParameterTypeDescription
pathstring相对 baseUrl 的路径,可省略前导 /。
optionsClientRequestOptions & object单次请求选项,参见 ClientRequestOptions。
Returns ​

Promise<Blob>

解析后的响应体;当响应为空字符串时返回 undefined。

Throws ​

可能抛出 E_HTTP_ERROR(非 2xx 状态)、E_NETWORK_ERROR(底层 fetch 失败)、 E_TIMEOUT(超过 timeout)、E_ABORTED(外部信号取消)或 E_INSECURE_BROWSER(浏览器中开启了 insecure);传入 ReadableStream 请求体时会抛 E_INVALID_PARAM。

Call Signature ​

request<T>(path, options?): Promise<T>

发起一次原始 API 请求。

选项优先级:本次调用 options > 全局选项(getGlobalOptions) > 客户端构造时默认值。

特殊处理:

  • 默认 HTTP 方法为 GET,GET 请求即使提供了 options.body 也不会发送,避免被部分代理/浏览器拒绝。
  • 不自动跟随重定向,避免把 Token 或请求体转发到另一个地址。
  • 非空响应优先按 JSON 解析;解析失败时回落为字符串原文。
  • 业务层失败(即响应体 { status: "fail" })不会抛出,仍按原样返回;只有 HTTP/网络/超时等传输层错误才会抛错。
  • insecure 仅在 Node.js 下可用,浏览器中传入会抛 E_INSECURE_BROWSER。
Type Parameters ​
Type ParameterDefault type
Tunknown
Parameters ​
ParameterTypeDescription
pathstring相对 baseUrl 的路径,可省略前导 /。
options?ClientRequestOptions单次请求选项,参见 ClientRequestOptions。
Returns ​

Promise<T>

解析后的响应体;当响应为空字符串时返回 undefined。

Throws ​

可能抛出 E_HTTP_ERROR(非 2xx 状态)、E_NETWORK_ERROR(底层 fetch 失败)、 E_TIMEOUT(超过 timeout)、E_ABORTED(外部信号取消)或 E_INSECURE_BROWSER(浏览器中开启了 insecure);传入 ReadableStream 请求体时会抛 E_INVALID_PARAM。


create() ​

static create(options): ZentaoClient

创建客户端实例,语义等同于 new ZentaoClient(options),便于链式调用。

Parameters ​

ParameterTypeDescription
optionsZentaoClientOptions客户端配置,参见 ZentaoClientOptions。

Returns ​

ZentaoClient

新建的客户端实例。

Throws ​

同 构造函数:E_INVALID_BASE_URL 等。


fromProfile() ​

static fromProfile(profileKey?, options?): Promise<ZentaoClient>

根据本地持久化 profile 创建客户端。

默认调用 switchProfile:若 profileKey 存在则刷新其 lastUsedTime 并设为当前 profile; 不传 profileKey 时使用当前 profile。Profile 中保存的 timeout / insecure 偏好也会被带回到客户端实例。 activate: false 时只读存储,不切换账号、不更新时间,支持可读但不可写的存储。 两种模式均不替换全局客户端;后续配置刷新是否写回仍由全局 persistProfiles 控制。

Parameters ​

ParameterTypeDescription
profileKey?string可选的 profile key,格式为 account@server;不传时使用当前 profile。
options?FromProfileOptions恢复选项;默认保持切换当前 profile 的行为。

Returns ​

Promise<ZentaoClient>

用 profile 还原后的客户端实例。

Throws ​

E_NO_PROFILE(无任何 profile 且未传 key)、E_PROFILE_NOT_FOUND(指定 key 不存在)、 E_PROFILE_STORAGE_INVALID(存储内容不合法)、E_PROFILE_STORAGE_UNAVAILABLE(运行时无法访问持久化存储)。


init() ​

static init(options): ZentaoClient

创建客户端并写入全局选项,作为 request 默认使用的实例。

适合应用入口处一次性完成初始化,后续 request("module/action", params) 可省略 options.client。 多次调用会覆盖上一次的全局客户端。

Parameters ​

ParameterTypeDescription
optionsZentaoClientOptions客户端配置,参见 ZentaoClientOptions。

Returns ​

ZentaoClient

新建并已注册为全局默认的客户端实例。

Throws ​

同 构造函数:E_INVALID_BASE_URL 等。

Released under the MIT License.