Package Exports
- @octokit/plugin-throttling
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@octokit/plugin-throttling) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
plugin-throttling.js
Octokit plugin for GitHub’s recommended request throttling
Implements all recommended best practises to prevent hitting abuse rate limits.
Usage
The code below creates a "Hello, world!" issue on every repository in a given organization. Without the throttling plugin it would send many requests in parallel and would hit rate limits very quickly. But the @octokit/plugin-throttling
slows down your requests according to the official guidelines, so you don't get blocked before your quota is exhausted.
The throttle.onAbuseLimit
and throttle.onRateLimit
options are required. Return true
to automatically retry the request after retryAfter
seconds.
const Octokit = require('@octokit/rest')
.plugin(require('@octokit/plugin-throttling'))
const octokit = new Octokit({
throttle: {
onRateLimit: (retryAfter, options) => {
console.warn(`Request quota exhausted for request ${options.method} ${options.url}`)
if (options.request.retryCount === 0) { // only retries once
console.log(`Retrying after ${retryAfter} seconds!`)
return true
}
},
onAbuseLimit: (retryAfter, options) => {
// does not retry, only logs a warning
console.warn(`Abuse detected for request ${options.method} ${options.url}`)
}
}
})
octokit.authenticate({
type: 'token',
token: process.env.TOKEN
})
async function createIssueOnAllRepos (org) {
const repos = await octokit.paginate(octokit.repos.listForOrg.endpoint({ org }))
return Promise.all(repos.forEach(({ name } => {
octokit.issues.create({
owner,
repo: name,
title: 'Hello, world!'
})
})))
}