monobank
Version:
Monobank API wrapper
95 lines (84 loc) • 3.06 kB
JavaScript
const utils = require('./utils');
module.exports = _Error;
/**
* Generic Error klass to wrap any errors returned by stripe-node
*/
function _Error(raw) {
this.populate(...arguments);
this.stack = new Error(this.message).stack;
}
// Extend Native Error
_Error.prototype = Object.create(Error.prototype);
_Error.prototype.type = 'GenericError';
_Error.prototype.populate = function(type, message) {
this.type = type;
this.message = message;
};
_Error.extend = utils.protoExtend;
/**
* Create subclass of internal Error klass
* (Specifically for errors returned from Monobank's REST API)
*/
const MonobankError = (_Error.MonobankError = _Error.extend({
type: 'MonobankError',
populate(raw) {
// Move from prototype def (so it appears in stringified obj)
this.type = this.type;
this.stack = new Error(raw.message).stack;
this.rawType = raw.type;
this.code = raw.code;
this.param = raw.param;
this.message = raw.message;
this.detail = raw.detail;
this.raw = raw;
this.headers = raw.headers;
this.requestId = raw.requestId;
this.statusCode = raw.statusCode;
},
}));
/**
* Helper factory which takes raw stripe errors and outputs wrapping instances
*/
MonobankError.generate = (rawMonobankError) => {
switch (rawMonobankError.type) {
case 'card_error':
return new _Error.MonobankCardError(rawMonobankError);
case 'invalid_request_error':
return new _Error.MonobankInvalidRequestError(rawMonobankError);
case 'api_error':
return new _Error.MonobankAPIError(rawMonobankError);
case 'idempotency_error':
return new _Error.MonobankIdempotencyError(rawMonobankError);
case 'invalid_grant':
return new _Error.MonobankInvalidGrantError(rawMonobankError);
}
return new _Error('Generic', 'Unknown Error');
};
// Specific Monobank Error types:
_Error.MonobankCardError = MonobankError.extend({type: 'MonobankCardError'});
_Error.MonobankInvalidRequestError = MonobankError.extend({
type: 'MonobankInvalidRequestError',
});
_Error.MonobankAPIError = MonobankError.extend({type: 'MonobankAPIError'});
_Error.MonobankAuthenticationError = MonobankError.extend({
type: 'MonobankAuthenticationError',
});
_Error.MonobankPermissionError = MonobankError.extend({
type: 'MonobankPermissionError',
});
_Error.MonobankRateLimitError = MonobankError.extend({
type: 'MonobankRateLimitError',
});
_Error.MonobankConnectionError = MonobankError.extend({
type: 'MonobankConnectionError',
});
_Error.MonobankSignatureVerificationError = MonobankError.extend({
type: 'MonobankSignatureVerificationError',
});
_Error.MonobankIdempotencyError = MonobankError.extend({
type: 'MonobankIdempotencyError',
});
_Error.MonobankInvalidGrantError = MonobankError.extend({
type: 'MonobankInvalidGrantError',
});
;