@agentconnect.md/setup 1.56.0-rc.63 → 1.56.0-rc.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -63383,14 +63383,29 @@ var GithubApiError = class extends Error {
63383
63383
  status;
63384
63384
  code;
63385
63385
  retryable;
63386
- constructor(message, status, code, retryable) {
63386
+ retryAfterMs;
63387
+ rateLimitResetAt;
63388
+ constructor(message, status, code, retryable, hint = {}) {
63387
63389
  super(message);
63388
63390
  this.status = status;
63389
63391
  this.code = code;
63390
63392
  this.retryable = retryable;
63391
63393
  this.name = "GithubApiError";
63394
+ if (hint.retryAfterMs !== void 0) this.retryAfterMs = hint.retryAfterMs;
63395
+ if (hint.rateLimitResetAt !== void 0) this.rateLimitResetAt = hint.rateLimitResetAt;
63392
63396
  }
63393
63397
  };
63398
+ /** `retry-after` is delta-seconds and `x-ratelimit-reset` epoch-seconds; anything unparseable is no hint. */
63399
+ function retryHintFrom(headers) {
63400
+ const retryAfter = headers.get("retry-after");
63401
+ const reset = headers.get("x-ratelimit-remaining") === "0" ? headers.get("x-ratelimit-reset") : null;
63402
+ const retryAfterSec = retryAfter === null ? NaN : Number(retryAfter);
63403
+ const resetSec = reset === null ? NaN : Number(reset);
63404
+ return {
63405
+ ...Number.isFinite(retryAfterSec) && retryAfterSec >= 0 ? { retryAfterMs: retryAfterSec * 1e3 } : {},
63406
+ ...Number.isFinite(resetSec) && resetSec > 0 ? { rateLimitResetAt: resetSec * 1e3 } : {}
63407
+ };
63408
+ }
63394
63409
  const API_BASE = "https://api.github.com";
63395
63410
  const TIMEOUT_MS = 1e4;
63396
63411
  const appAuthByConfig = /* @__PURE__ */ new WeakMap();
@@ -63433,7 +63448,7 @@ async function githubRequest(path, opts) {
63433
63448
  /** {@link githubRequest} keeping the pagination cursor — for the list endpoints
63434
63449
  * whose first page is not the whole answer. */
63435
63450
  async function githubRequestPage(path, opts) {
63436
- const retries = (opts.method ?? "GET") === "GET" ? READ_RETRY_DELAYS_MS : [];
63451
+ const retries = (opts.method ?? "GET") === "GET" || opts.idempotent === true ? READ_RETRY_DELAYS_MS : [];
63437
63452
  for (let attempt = 0;; attempt += 1) try {
63438
63453
  return await githubRequestOnce(path, opts);
63439
63454
  } catch (err) {
@@ -63476,9 +63491,10 @@ async function githubRequestOnce(path, opts) {
63476
63491
  try {
63477
63492
  detail = (await res.json()).message ?? "";
63478
63493
  } catch {}
63479
- if (res.status === 429 || res.status === 403 && res.headers.get("x-ratelimit-remaining") === "0") throw new GithubApiError(`github rate limited: ${detail}`, res.status, "RATE_LIMITED", true);
63494
+ const hint = retryHintFrom(res.headers);
63495
+ if (res.status === 429 || res.status === 403 && (hint.retryAfterMs !== void 0 || res.headers.get("x-ratelimit-remaining") === "0" || /rate limit/i.test(detail))) throw new GithubApiError(`github rate limited: ${detail}`, res.status, "RATE_LIMITED", true, hint);
63480
63496
  if (res.status === 404 || res.status === 422 || res.status === 403) throw new GithubApiError(`github denied (${res.status}): ${detail}`, res.status, "LEASE_DENIED", false);
63481
- throw new GithubApiError(`github error (${res.status}): ${detail}`, res.status, "INTERNAL", res.status >= 500);
63497
+ throw new GithubApiError(`github error (${res.status}): ${detail}`, res.status, "INTERNAL", res.status >= 500, hint);
63482
63498
  }
63483
63499
  //#endregion
63484
63500
  //#region ../control-plane/dist/github/config.js