"use strict"; const errorChain = require("error-chain"); let HttpError = errorChain("HttpError", { isHttpError: true }); /*** HTTP 400: Bad Request ***/ let BadRequest = HttpError.extend("BadRequest", { statusCode: 400, errorCode: "M_UNRECOGNIZED" }); let NotJson = BadRequest.extend("NotJson", { errorCode: "M_NOT_JSON" }); let BadJson = BadRequest.extend("BadJson", { errorCode: "M_BAD_JSON" }); /*** HTTP 401: Unauthorized ***/ let Unauthorized = HttpError.extend("Unauthorized", { statusCode: 401, errorCode: "M_UNAUTHORIZED" }); let MissingAccessToken = Unauthorized.extend("MissingAccessToken", { errorCode: "M_MISSING_TOKEN" }); let MissingCaptcha = Unauthorized.extend("MissingCaptcha", { errorCode: "M_CAPTCHA_NEEDED" }); /*** HTTP 403: Forbidden ***/ let Forbidden = HttpError.extend("Forbidden", { statusCode: 403, errorCode: "M_FORBIDDEN" }); let InvalidAccessToken = Forbidden.extend("InvalidAccessToken", { errorCode: "M_UNKNOWN_TOKEN" }); let InvalidCaptcha = Forbidden.extend("InvalidCaptcha", { errorCode: "M_CAPTCHA_INVALID" }); let ServerNotTrusted = Forbidden.extend("ServerNotTrusted", { errorCode: "M_SERVER_NOT_TRUSTED" }); let NoGuestAccess = Forbidden.extend("NoGuestAccess", { errorCode: "M_GUEST_ACCESS_FORBIDDEN" }); let ExternalIdentifierAuthenticationFailed = Forbidden.extend("ExternalIdentifierAuthenticationFailed", { errorCode: "M_THREEPID_AUTH_FAILED" }); /*** HTTP 404: Not Found ***/ let NotFound = HttpError.extend("NotFound", { statusCode: 404, errorCode: "M_NOT_FOUND" }); let ExternalIdentifierNotFound = NotFound.extend("ExternalIdentifierNotFound", { errorCode: "M_THREEPID_NOT_FOUND" }); /*** HTTP 409: Conflict ***/ let ResourceExists = HttpError.extend("ResourceExists", { statusCode: 409 }); let UserExists = ResourceExists.extend("UserExists", { errorCode: "M_USER_IN_USE" }); let RoomExists = ResourceExists.extend("RoomExists", { errorCode: "M_ROOM_IN_USE" }); let ExternalIdentifierExists = ResourceExists.extend("ExternalIdentifierExists", { errorCode: "M_THREEPID_IN_USE" }); /*** HTTP 413: Payload Too Large ***/ let RequestTooLarge = HttpError.extend("RequestTooLarge", { statusCode: 413, errorCode: "M_TOO_LARGE" }); /*** HTTP 422: Unprocessable Entity (Invalid Payload) ***/ let InvalidData = HttpError.extend("InvalidData", { statusCode: 422 }); let InvalidUsername = InvalidData.extend("InvalidUsername", { errorCode: "M_INVALID_USERNAME" }); let InvalidRoomVersion = InvalidData.extend("InvalidRoomVersion", { errorCode: "M_UNSUPPORTED_ROOM_VERSION" }); let InvalidRoomState = InvalidData.extend("InvalidRoomState", { errorCode: "M_INVALID_ROOM_STATE" }); let InvalidStateChange = InvalidData.extend("InvalidStateChange", { errorCode: "M_BAD_STATE" }); let InvalidExternalIdentifier = InvalidData.extend("InvalidExternalIdentifier", { errorCode: "M_THREEPID_DENIED" }); let InvalidParameter = InvalidData.extend("InvalidParameter", { errorCode: "M_INVALID_PARAM" }); let MissingParameter = InvalidData.extend("MissingParameter", { errorCode: "M_MISSING_PARAM" }); let IncompatibleRoomVersion = InvalidData.extend("IncompatibleRoomVersion", { errorCode: "M_INCOMPATIBLE_ROOM_VERSION" }); /*** HTTP 429: Too Many Requests ***/ let TooManyRequests = HttpError.extend("TooManyRequests", { statusCode: 429, errorCode: "M_LIMIT_EXCEEDED" }); /*** HTTP 500: Internal Server Error ***/ let InternalServerError = HttpError.extend("InternalServerError", { statusCode: 500 }); let UnknownError = InternalServerError.extend("UnknownError", { errorCode: "M_UNKNOWN" }); /*** HTTP 503: Service Unavailable ***/ let ExclusiveResource = HttpError.extend("ExclusiveResource", { statusCode: 503, errorCode: "M_EXCLUSIVE" }); module.exports = { HttpError, Unauthorized, MissingAccessToken, InvalidAccessToken, NotJson, BadJson, NotFound, TooManyRequests, MissingCaptcha, InvalidCaptcha, ServerNotTrusted, NoGuestAccess, UserExists, RoomExists, RequestTooLarge, InvalidUsername, InvalidRoomVersion, InvalidRoomState, InvalidStateChange, InvalidParameter, MissingParameter, IncompatibleRoomVersion, InternalServerError, UnknownError, ExclusiveResource, ResourceExists, Forbidden, BadRequest, ExternalIdentifierNotFound, ExternalIdentifierExists, ExternalIdentifierAuthenticationFailed, InvalidExternalIdentifier };