UNPKG

2.58 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var deprecation = require('deprecation');
8var once = _interopDefault(require('once'));
9
10const logOnceCode = once(deprecation => console.warn(deprecation));
11const logOnceHeaders = once(deprecation => console.warn(deprecation));
12/**
13 * Error with extra properties to help with debugging
14 */
15
16class RequestError extends Error {
17 constructor(message, statusCode, options) {
18 super(message); // Maintains proper stack trace (only available on V8)
19
20 /* istanbul ignore next */
21
22 if (Error.captureStackTrace) {
23 Error.captureStackTrace(this, this.constructor);
24 }
25
26 this.name = "HttpError";
27 this.status = statusCode;
28 let headers;
29
30 if ("headers" in options && typeof options.headers !== "undefined") {
31 headers = options.headers;
32 }
33
34 if ("response" in options) {
35 this.response = options.response;
36 headers = options.response.headers;
37 } // redact request credentials without mutating original request options
38
39
40 const requestCopy = Object.assign({}, options.request);
41
42 if (options.request.headers.authorization) {
43 requestCopy.headers = Object.assign({}, options.request.headers, {
44 authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
45 });
46 }
47
48 requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
49 // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
50 .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
51 // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
52 .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
53 this.request = requestCopy; // deprecations
54
55 Object.defineProperty(this, "code", {
56 get() {
57 logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
58 return statusCode;
59 }
60
61 });
62 Object.defineProperty(this, "headers", {
63 get() {
64 logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));
65 return headers || {};
66 }
67
68 });
69 }
70
71}
72
73exports.RequestError = RequestError;
74//# sourceMappingURL=index.js.map