UNPKG

3.06 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const APIConfig_1 = require("./APIConfig");
7const shortid_1 = __importDefault(require("shortid"));
8const lodash_1 = require("lodash");
9class APIError {
10 constructor(friendlyMessage, rawError, statusCode = 500, extraData) {
11 this.id = shortid_1.default.generate();
12 // Is this already and API friendly error?
13 if (lodash_1.get(rawError, "isAPIFriendly", false)) {
14 this.friendlyMessage = rawError.message;
15 this.statusCode = rawError.statusCode;
16 }
17 else {
18 this.friendlyMessage = friendlyMessage;
19 this.statusCode = statusCode;
20 }
21 this.rawError = rawError;
22 this.extraData = extraData;
23 }
24 static shouldReject(error, rejectFunction) {
25 if (!lodash_1.isNil(error)) {
26 if (rejectFunction) {
27 rejectFunction(error);
28 }
29 return true;
30 }
31 return false;
32 }
33 static createValidationError(errors) {
34 return new APIError("validation_error", null, 400, errors);
35 }
36 static create404NotFoundError() {
37 return APIError.createAPIFriendlyError("not found", 404);
38 }
39 static create401UnauthorizedError() {
40 return APIError.createAPIFriendlyError("unauthorized", 401);
41 }
42 static createAPIFriendlyError(message, statusCode = 500) {
43 let error = new Error(message);
44 error.isAPIFriendly = true;
45 error.statusCode = statusCode;
46 return error;
47 }
48 static _rawErrorOut(error) {
49 let errorData = {
50 "error": error.toString()
51 };
52 let stack = error.stack;
53 if (stack) {
54 errorData.stack = stack.split('\n').map(function (line) {
55 return line.trim();
56 }).slice(1);
57 }
58 return errorData;
59 }
60 out(includeRawError = APIConfig_1.APIConfig.DISPLAY_RAW_ERRORS) {
61 let output = {
62 "error": {
63 "id": this.id,
64 "message": this.friendlyMessage,
65 "details": this.extraData,
66 }
67 };
68 if (includeRawError && !lodash_1.isNil(this.rawError)) {
69 output.error.raw_error = APIError._rawErrorOut(this.rawError);
70 }
71 return output;
72 }
73 hapiOut(includeRawError = APIConfig_1.APIConfig.DISPLAY_RAW_ERRORS) {
74 let output = {
75 "this": "failed",
76 "with": this.statusCode,
77 "because": {
78 "message": this.friendlyMessage,
79 "details": this.extraData
80 },
81 "id": this.id
82 };
83 if (includeRawError && !lodash_1.isNil(this.rawError)) {
84 output.because.raw_error = APIError._rawErrorOut(this.rawError);
85 }
86 return output;
87 }
88}
89exports.APIError = APIError;
90//# sourceMappingURL=APIError.js.map
\No newline at end of file