You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.9 KiB
40 lines
1.9 KiB
import { Deprecation } from "deprecation"; |
|
import once from "once"; |
|
const logOnce = once((deprecation) => console.warn(deprecation)); |
|
/** |
|
* Error with extra properties to help with debugging |
|
*/ |
|
export class RequestError extends Error { |
|
constructor(message, statusCode, options) { |
|
super(message); |
|
// Maintains proper stack trace (only available on V8) |
|
/* istanbul ignore next */ |
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(this, this.constructor); |
|
} |
|
this.name = "HttpError"; |
|
this.status = statusCode; |
|
Object.defineProperty(this, "code", { |
|
get() { |
|
logOnce(new Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); |
|
return statusCode; |
|
}, |
|
}); |
|
this.headers = options.headers || {}; |
|
// redact request credentials without mutating original request options |
|
const requestCopy = Object.assign({}, options.request); |
|
if (options.request.headers.authorization) { |
|
requestCopy.headers = Object.assign({}, options.request.headers, { |
|
authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]"), |
|
}); |
|
} |
|
requestCopy.url = requestCopy.url |
|
// client_id & client_secret can be passed as URL query parameters to increase rate limit |
|
// see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications |
|
.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") |
|
// OAuth tokens can be passed as URL query parameters, although it is not recommended |
|
// see https://developer.github.com/v3/#oauth2-token-sent-in-a-header |
|
.replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); |
|
this.request = requestCopy; |
|
} |
|
}
|
|
|