TelegramPWA/src/lib/gramjs/errors/RPCBaseErrors.js
2021-05-08 22:41:28 +03:00

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,
};