49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { Deprecation } from 'deprecation';
 | |
| import once from 'once';
 | |
| 
 | |
| const logOnce = once(deprecation => console.warn(deprecation));
 | |
| /**
 | |
|  * Error with extra properties to help with debugging
 | |
|  */
 | |
| 
 | |
| 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;
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| export { RequestError };
 |