132 lines
3.0 KiB
JavaScript
132 lines
3.0 KiB
JavaScript
/**
|
|
* Base class for all Remote Procedure Call errors.
|
|
*/
|
|
class RPCError extends Error {
|
|
constructor(message, request, code = null) {
|
|
super(
|
|
'RPCError {0}: {1}{2}'
|
|
.replace('{0}', code)
|
|
.replace('{1}', message)
|
|
.replace('{2}', RPCError._fmtRequest(request)),
|
|
);
|
|
this.code = code;
|
|
this.message = message;
|
|
}
|
|
|
|
static _fmtRequest(request) {
|
|
// TODO fix this
|
|
if (request) {
|
|
return ` (caused by ${request.className})`;
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The request must be repeated, but directed to a different data center.
|
|
*/
|
|
class InvalidDCError extends RPCError {
|
|
constructor(request, message, code) {
|
|
super(message, request, code);
|
|
this.code = code || 303;
|
|
this.message = message || 'ERROR_SEE_OTHER';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The query contains errors. In the event that a request was created
|
|
* using a form and contains user generated data, the user should be
|
|
* notified that the data must be corrected before the query is repeated.
|
|
*/
|
|
class BadRequestError extends RPCError {
|
|
code = 400;
|
|
|
|
message = 'BAD_REQUEST';
|
|
}
|
|
|
|
/**
|
|
* There was an unauthorized attempt to use functionality available only
|
|
* to authorized users.
|
|
*/
|
|
class UnauthorizedError extends RPCError {
|
|
code = 401;
|
|
|
|
message = 'UNAUTHORIZED';
|
|
}
|
|
|
|
/**
|
|
* Privacy violation. For example, an attempt to write a message to
|
|
* someone who has blacklisted the current user.
|
|
*/
|
|
class ForbiddenError extends RPCError {
|
|
code = 403;
|
|
|
|
message = 'FORBIDDEN';
|
|
}
|
|
|
|
/**
|
|
* An attempt to invoke a non-existent object, such as a method.
|
|
*/
|
|
class NotFoundError extends RPCError {
|
|
code = 404;
|
|
|
|
message = 'NOT_FOUND';
|
|
}
|
|
|
|
/**
|
|
* Errors related to invalid authorization key, like
|
|
* AUTH_KEY_DUPLICATED which can cause the connection to fail.
|
|
*/
|
|
class AuthKeyError extends RPCError {
|
|
code = 406;
|
|
|
|
message = 'AUTH_KEY';
|
|
}
|
|
|
|
/**
|
|
* The maximum allowed number of attempts to invoke the given method
|
|
* with the given input parameters has been exceeded. For example, in an
|
|
* attempt to request a large number of text messages (SMS) for the same
|
|
* phone number.
|
|
*/
|
|
class FloodError extends RPCError {
|
|
code = 420;
|
|
|
|
message = 'FLOOD';
|
|
}
|
|
|
|
/**
|
|
* An internal server error occurred while a request was being processed
|
|
* for example, there was a disruption while accessing a database or file
|
|
* storage
|
|
*/
|
|
class ServerError extends RPCError {
|
|
code = 500; // Also witnessed as -500
|
|
|
|
message = 'INTERNAL';
|
|
}
|
|
|
|
/**
|
|
* Clicking the inline buttons of bots that never (or take to long to)
|
|
* call ``answerCallbackQuery`` will result in this "special" RPCError.
|
|
*/
|
|
class TimedOutError extends RPCError {
|
|
code = 503; // Only witnessed as -503
|
|
|
|
message = 'Timeout';
|
|
}
|
|
|
|
module.exports = {
|
|
RPCError,
|
|
InvalidDCError,
|
|
BadRequestError,
|
|
UnauthorizedError,
|
|
ForbiddenError,
|
|
NotFoundError,
|
|
AuthKeyError,
|
|
FloodError,
|
|
ServerError,
|
|
TimedOutError,
|
|
};
|