29 lines
1.0 KiB
JavaScript
29 lines
1.0 KiB
JavaScript
|
const Octokit = require('@octokit/rest')
|
||
|
const HttpError = require('@octokit/request/lib/http-error')
|
||
|
const throttlingPlugin = require('../..')
|
||
|
|
||
|
module.exports = Octokit
|
||
|
.plugin((octokit) => {
|
||
|
octokit.__t0 = Date.now()
|
||
|
octokit.__requestLog = []
|
||
|
octokit.__requestTimings = []
|
||
|
|
||
|
octokit.hook.wrap('request', async (request, options) => {
|
||
|
octokit.__requestLog.push(`START ${options.method} ${options.url}`)
|
||
|
octokit.__requestTimings.push(Date.now() - octokit.__t0)
|
||
|
await new Promise(resolve => setTimeout(resolve, 0))
|
||
|
|
||
|
const res = options.request.responses.shift()
|
||
|
if (res.status >= 400) {
|
||
|
const message = res.data.message != null ? res.data.message : `Test failed request (${res.status})`
|
||
|
const error = new HttpError(message, res.status, res.headers, options)
|
||
|
throw error
|
||
|
} else {
|
||
|
octokit.__requestLog.push(`END ${options.method} ${options.url}`)
|
||
|
octokit.__requestTimings.push(Date.now() - octokit.__t0)
|
||
|
return res
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
.plugin(throttlingPlugin)
|