mirror of
https://github.com/stablyai/orca.git
synced 2026-09-29 16:02:50 +00:00
28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import type { GitHubPRRefreshCandidate } from '../../shared/github/pull-request-refresh-types'
|
|
import { getOriginGitHubApiRepository } from './github-api-repository'
|
|
import { ghRepoExecOptions, githubRepoContext } from './gh-utils'
|
|
import { getRateLimit, repositoryRateLimitGuard, spendsSharedGitHubComQuota } from './rate-limit'
|
|
|
|
const BUCKETS = ['core', 'graphql'] as const
|
|
|
|
export async function prRefreshRateLimitPausedUntil(
|
|
candidate: GitHubPRRefreshCandidate,
|
|
warmSharedSnapshot: boolean
|
|
): Promise<number | null> {
|
|
const executionOptions = ghRepoExecOptions(
|
|
githubRepoContext(candidate.repoPath, candidate.connectionId, candidate.localGitOptions)
|
|
)
|
|
const repository = await getOriginGitHubApiRepository(
|
|
candidate.repoPath,
|
|
candidate.connectionId,
|
|
executionOptions
|
|
)
|
|
if (warmSharedSnapshot && spendsSharedGitHubComQuota(repository, executionOptions)) {
|
|
await getRateLimit()
|
|
}
|
|
const blockedGuard = BUCKETS.map((bucket) =>
|
|
repositoryRateLimitGuard(repository, bucket, executionOptions)
|
|
).find((guard) => guard.blocked)
|
|
return blockedGuard?.blocked ? blockedGuard.resetAt * 1000 : null
|
|
}
|