@vector-im/matrix-bot-sdk
Version:
TypeScript/JavaScript SDK for Matrix bots and appservices
73 lines • 2.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.MatrixError = void 0;
const LogService_1 = require("../logging/LogService");
/**
* Represents an HTTP error from the Matrix server.
* @category Error handling
*/
class MatrixError extends Error {
body;
statusCode;
/**
* Parse a Retry-After header into a number of milliseconds.
* @see https://www.rfc-editor.org/rfc/rfc9110#field.retry-after
* @param header The value of a Retry-After header.
* @throws If the date could not be parsed.
*/
static parseRetryAfterHeader(header) {
// First try to parse as seconds
const retryAfterSeconds = parseInt(header, 10);
if (!Number.isNaN(retryAfterSeconds)) {
return retryAfterSeconds * 1000;
}
const retryAfterDate = new Date(header);
return retryAfterDate.getTime() - Date.now();
}
/**
* The Matrix error code
*/
errcode;
/**
* Optional human-readable error message.
*/
error;
/**
* If rate limited, the time in milliseconds to wait before retrying the request
*/
retryAfterMs;
/**
* Creates a new Matrix Error
* @param body The error body.
* @param statusCode The HTTP status code.
*/
constructor(body, statusCode, headers) {
super();
this.body = body;
this.statusCode = statusCode;
this.errcode = body.errcode;
this.error = body.error;
const retryAfterHeader = headers['retry-after'];
if (this.statusCode === 429 && retryAfterHeader) {
try {
this.retryAfterMs = MatrixError.parseRetryAfterHeader(retryAfterHeader);
}
catch (ex) {
// Could not parse...skip handling for now.
LogService_1.LogService.warn("MatrixError", "Could not parse Retry-After header from request.", ex);
}
}
// Fall back to the deprecated retry_after_ms property.
if (!this.retryAfterMs && body.retry_after_ms) {
this.retryAfterMs = body.retry_after_ms;
}
}
/**
* Developer-friendly error message.
*/
get message() {
return `${this.errcode}: ${this.error}`;
}
}
exports.MatrixError = MatrixError;
//# sourceMappingURL=MatrixError.js.map
;