import * as core from "@actions/core";
import { request } from "../../http-request";
import { parsePrDetailFromPullApi } from "../parse-utils";
import { RepoContext, PrDetail } from "../types";
const GITCODE_API_BASE =
process.env.GITCODE_API_BASE_URL || "https://api.gitcode.com/api/v5/repos";
* GitCode PR 详情客户端:评论事件无事件文件时,按 PR 编号反查全局 id 与分支
* (鉴权与 label-manager 一致:Authorization 头直接携带 token)。
*/
export class GitCodePrClient {
* 反查 PR 详情。
*
* @param ctx 统一上下文(orgName/repoName/prId)
* @param token GitCode 访问令牌
* @return PR 详情;缺 PR 编号、请求失败或响应缺全局 id 时返回 null
*/
async fetchPrDetail(ctx: RepoContext, token: string): Promise<PrDetail | null> {
if (ctx.prId == null) return null;
const url = `${GITCODE_API_BASE}/${ctx.orgName}/${ctx.repoName}/pulls/${ctx.prId}`;
try {
const resp = await request("GET", url, { "Authorization": token });
if (resp.statusCode < 200 || resp.statusCode >= 300) {
core.warning(`GitCode PR 详情反查失败: ${resp.statusCode} ${resp.body}`);
return null;
}
return parsePrDetailFromPullApi(JSON.parse(resp.body));
} catch (e) {
core.warning(
`GitCode PR 详情反查异常: ${e instanceof Error ? e.message : String(e)}`,
);
return null;
}
}
}