taolib.github_app.client#

与 GitHub API 交互的异步 HTTP 客户端。

本模块封装 JWT 签发、覆盖头下发与 GitHub REST API 调用,是跨越 令牌管理逻辑与 GitHub 远端服务的唯一负责者。

Classes#

GitHubAppClient

与 GitHub API 直接交互的异步 HTTP 客户端。

Module Contents#

class taolib.github_app.client.GitHubAppClient(app_id: str, private_key: str, api_url: str, transport: httpx.AsyncBaseTransport | None = None)#

与 GitHub API 直接交互的异步 HTTP 客户端。

本类负责 JWT 签发、覆盖头拼装与安装令牌的 HTTP 调用,不参与缓存 与并发控制,后者由 taolib.github_app.token_manager.GitHubInstallationTokenManager 负责。

初始化客户端。

参数:
  • app_id -- GitHub App 的 App ID。

  • private_key -- PEM 格式的 RSA 私钥内容。

  • api_url -- GitHub API 基地址,尾部斜杠会被自动去除。

  • transport -- 可选的 httpx 传输层,测试中可注入 mock。

static classify_token_kind(token: str) taolib.github_app.models.TokenKind#

根据令牌字符串的前缀与结构特征判定令牌类型。

参数:

token -- 安装令牌明文。

返回:

  • ghs_ 开头且后缀含恰好两个 .TokenKind.STATELESS

  • ghs_ 开头但不含两个 .TokenKind.STATEFUL

  • 其他 → TokenKind.UNKNOWN

async create_installation_token(installation_id: str, strategy: taolib.github_app.models.EffectiveTokenStrategy, permissions: dict[str, str] | None = None, repositories: list[str] | None = None) taolib.github_app.models.InstallationTokenResult#

携带 JWT 与策略覆盖头请求安装令牌。

/app/installations/{installation_id}/access_tokens 发送 POST 请求,并将响应转换为 InstallationTokenResult

参数:
  • installation_id -- GitHub App 安装实例 ID。

  • strategy -- 实际生效的令牌策略,决定是否下发覆盖头。

  • permissions -- 限定令牌能力的权限映射,None 会被平价为空字典。

  • repositories -- 限定令牌可访问的仓库列表,None 会被平价为空列表。

返回:

成功创建的 InstallationTokenResult

抛出:

GitHubAppClientError -- HTTP 调用失败或返回非 2xx 状态码。

api_url#
app_id#
private_key#