comic-vine-sdk
Version:
A JS/TS client for the Comic Vine API
71 lines • 8.39 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpClient = void 0;
const axios_1 = __importDefault(require("axios"));
const status_code_js_1 = require("./status-code.js");
const base_error_js_1 = require("../errors/base-error.js");
const index_js_1 = require("../errors/index.js");
const case_converter_js_1 = require("../utils/case-converter.js");
class HttpClient {
constructor() {
this._http = axios_1.default.create({
transformResponse: (data) => {
return data
? (0, case_converter_js_1.convertSnakeCaseToCamelCase)(JSON.parse(data))
: undefined;
},
});
}
handleResponse(response) {
switch (response.data.statusCode) {
case status_code_js_1.StatusCode.FilterError:
throw new index_js_1.ComicVineFilterError();
case status_code_js_1.StatusCode.JsonpCallbackMissing:
throw new index_js_1.ComicJsonpCallbackMissingError();
case status_code_js_1.StatusCode.ObjectNotFound:
throw new index_js_1.ComicVineObjectNotFoundError();
case status_code_js_1.StatusCode.SubscriberOnlyVideo:
throw new index_js_1.ComicVineSubscriberOnlyError();
case status_code_js_1.StatusCode.UrlFormatError:
throw new index_js_1.ComicVineUrlFormatError();
default:
return response.data;
}
}
generateClientError(err) {
var _a, _b, _c;
if (err instanceof base_error_js_1.BaseError) {
return err;
}
const error = err;
if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {
return new index_js_1.ComicVineUnauthorizedError();
}
const errorMessage = (_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.message;
return new index_js_1.ComicVineGenericRequestError(`${error.message}${errorMessage ? `, ${errorMessage}` : ''}`);
}
get(url) {
return __awaiter(this, void 0, void 0, function* () {
try {
return this.handleResponse(yield this._http.get(url));
}
catch (error) {
throw this.generateClientError(error);
}
});
}
}
exports.HttpClient = HttpClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC1jbGllbnQvaHR0cC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQXlEO0FBQ3pELHFEQUE4QztBQUM5QywyREFBb0Q7QUFDcEQsaURBUTRCO0FBRTVCLGtFQUF5RTtBQUV6RSxNQUFhLFVBQVU7SUFHckI7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsaUJBQWlCLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRTtnQkFDbkMsT0FBTyxJQUFJO29CQUNULENBQUMsQ0FBQyxJQUFBLCtDQUEyQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBYyxDQUFDLENBQUM7b0JBQ3pELENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDaEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQVMsUUFBeUM7UUFDdEUsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLEtBQUssMkJBQVUsQ0FBQyxXQUFXO2dCQUN6QixNQUFNLElBQUksK0JBQW9CLEVBQUUsQ0FBQztZQUNuQyxLQUFLLDJCQUFVLENBQUMsb0JBQW9CO2dCQUNsQyxNQUFNLElBQUkseUNBQThCLEVBQUUsQ0FBQztZQUM3QyxLQUFLLDJCQUFVLENBQUMsY0FBYztnQkFDNUIsTUFBTSxJQUFJLHVDQUE0QixFQUFFLENBQUM7WUFDM0MsS0FBSywyQkFBVSxDQUFDLG1CQUFtQjtnQkFDakMsTUFBTSxJQUFJLHVDQUE0QixFQUFFLENBQUM7WUFDM0MsS0FBSywyQkFBVSxDQUFDLGNBQWM7Z0JBQzVCLE1BQU0sSUFBSSxrQ0FBdUIsRUFBRSxDQUFDO1lBQ3RDO2dCQUNFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVk7O1FBQ3RDLElBQUksR0FBRyxZQUFZLHlCQUFTLEVBQUUsQ0FBQztZQUM3QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxHQUF1QyxDQUFDO1FBQ3RELElBQUksQ0FBQSxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU0sTUFBSyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUkscUNBQTBCLEVBQUUsQ0FBQztRQUMxQyxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsTUFBQSxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLElBQUksMENBQUUsT0FBTyxDQUFDO1FBQ25ELE9BQU8sSUFBSSx1Q0FBNEIsQ0FDckMsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzdELENBQUM7SUFDSixDQUFDO0lBRUssR0FBRyxDQUFTLEdBQVc7O1lBQzNCLElBQUksQ0FBQztnQkFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztLQUFBO0NBQ0Y7QUFyREQsZ0NBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlIH0gZnJvbSAnLi9zdGF0dXMtY29kZS5qcyc7XG5pbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvYmFzZS1lcnJvci5qcyc7XG5pbXBvcnQge1xuICBDb21pY1ZpbmVGaWx0ZXJFcnJvcixcbiAgQ29taWNKc29ucENhbGxiYWNrTWlzc2luZ0Vycm9yLFxuICBDb21pY1ZpbmVPYmplY3ROb3RGb3VuZEVycm9yLFxuICBDb21pY1ZpbmVVbmF1dGhvcml6ZWRFcnJvcixcbiAgQ29taWNWaW5lVXJsRm9ybWF0RXJyb3IsXG4gIENvbWljVmluZVN1YnNjcmliZXJPbmx5RXJyb3IsXG4gIENvbWljVmluZUdlbmVyaWNSZXF1ZXN0RXJyb3IsXG59IGZyb20gJy4uL2Vycm9ycy9pbmRleC5qcyc7XG5pbXBvcnQgeyBSZXNwb25zZSwgSHR0cENsaWVudCBhcyBIdHRwQ2xpZW50Q29udHJhY3QgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBjb252ZXJ0U25ha2VDYXNlVG9DYW1lbENhc2UgfSBmcm9tICcuLi91dGlscy9jYXNlLWNvbnZlcnRlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IGltcGxlbWVudHMgSHR0cENsaWVudENvbnRyYWN0IHtcbiAgcHJpdmF0ZSBfaHR0cDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9odHRwID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIHRyYW5zZm9ybVJlc3BvbnNlOiAoZGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgID8gY29udmVydFNuYWtlQ2FzZVRvQ2FtZWxDYXNlKEpTT04ucGFyc2UoZGF0YSBhcyBzdHJpbmcpKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2U8UmVzdWx0PihyZXNwb25zZTogQXhpb3NSZXNwb25zZTxSZXNwb25zZTxSZXN1bHQ+Pikge1xuICAgIHN3aXRjaCAocmVzcG9uc2UuZGF0YS5zdGF0dXNDb2RlKSB7XG4gICAgICBjYXNlIFN0YXR1c0NvZGUuRmlsdGVyRXJyb3I6XG4gICAgICAgIHRocm93IG5ldyBDb21pY1ZpbmVGaWx0ZXJFcnJvcigpO1xuICAgICAgY2FzZSBTdGF0dXNDb2RlLkpzb25wQ2FsbGJhY2tNaXNzaW5nOlxuICAgICAgICB0aHJvdyBuZXcgQ29taWNKc29ucENhbGxiYWNrTWlzc2luZ0Vycm9yKCk7XG4gICAgICBjYXNlIFN0YXR1c0NvZGUuT2JqZWN0Tm90Rm91bmQ6XG4gICAgICAgIHRocm93IG5ldyBDb21pY1ZpbmVPYmplY3ROb3RGb3VuZEVycm9yKCk7XG4gICAgICBjYXNlIFN0YXR1c0NvZGUuU3Vic2NyaWJlck9ubHlWaWRlbzpcbiAgICAgICAgdGhyb3cgbmV3IENvbWljVmluZVN1YnNjcmliZXJPbmx5RXJyb3IoKTtcbiAgICAgIGNhc2UgU3RhdHVzQ29kZS5VcmxGb3JtYXRFcnJvcjpcbiAgICAgICAgdGhyb3cgbmV3IENvbWljVmluZVVybEZvcm1hdEVycm9yKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2xpZW50RXJyb3IoZXJyOiB1bmtub3duKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcikge1xuICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IGVyciBhcyBBeGlvc0Vycm9yPHsgbWVzc2FnZT86IHN0cmluZyB9PjtcbiAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICByZXR1cm4gbmV3IENvbWljVmluZVVuYXV0aG9yaXplZEVycm9yKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2U7XG4gICAgcmV0dXJuIG5ldyBDb21pY1ZpbmVHZW5lcmljUmVxdWVzdEVycm9yKFxuICAgICAgYCR7ZXJyb3IubWVzc2FnZX0ke2Vycm9yTWVzc2FnZSA/IGAsICR7ZXJyb3JNZXNzYWdlfWAgOiAnJ31gLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXQ8UmVzdWx0Pih1cmw6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShhd2FpdCB0aGlzLl9odHRwLmdldDxSZXNwb25zZTxSZXN1bHQ+Pih1cmwpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5nZW5lcmF0ZUNsaWVudEVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==