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 }; |