You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
4.7 KiB
JavaScript

"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" });
let UIARequired = HttpError.extend("UIARequired", { statusCode: 401 });
let AuthenticationError = Unauthorized.extend("AuthenticationError", { errorCode: "M_FORBIDDEN" });
/*** 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) ***/
/* NOTE: Currently set to 400 instead, because that seems to be what the specification requires, even though 422 would be more appropriate. */
let InvalidData = HttpError.extend("InvalidData", { statusCode: /*422*/ 400 });
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" });
let WeakPassword = InvalidData.extend("WeakPassword", { errorCode: "M_WEAK_PASSWORD" });
let ExclusiveResource = InvalidData.extend("ExclusiveResource", { errorCode: "M_EXCLUSIVE" });
/*** 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" });
let Unreachable = InternalServerError.extend("Unreachable"); /* FIXME: How to represent this with an error code? This should crash the process anyway. */
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, WeakPassword, Unreachable, UIARequired, AuthenticationError
};