itch-dl
Version:
Bulk download games from itch.io - TypeScript implementation
44 lines (43 loc) • 1.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ItchApiClient = exports.ITCH_API = void 0;
const axios_1 = __importDefault(require("axios"));
const axios_retry_1 = __importDefault(require("axios-retry"));
exports.ITCH_API = 'https://api.itch.io';
class ItchApiClient {
constructor(apiKey, userAgent, baseUrl = exports.ITCH_API) {
this.baseUrl = baseUrl;
this.apiKey = apiKey;
this.client = axios_1.default.create({
headers: {
'User-Agent': userAgent ?? 'itch-dl',
},
});
(0, axios_retry_1.default)(this.client, {
retries: 5,
retryDelay: axios_retry_1.default.exponentialDelay,
retryCondition: error => {
const status = error.response?.status;
const retryStatuses = [429, 500, 502, 503, 504];
return (axios_retry_1.default.isNetworkOrIdempotentRequestError(error) ||
(status !== undefined && retryStatuses.includes(status)));
},
});
}
async get(endpoint, appendApiKey = true, config = {}) {
const url = endpoint.startsWith('http') ? endpoint : this.baseUrl + endpoint;
if (appendApiKey && this.apiKey) {
const params = { ...(config.params || {}) };
if (!('api_key' in params)) {
params['api_key'] = this.apiKey;
}
config.params = params;
}
return this.client.get(url, config);
}
}
exports.ItchApiClient = ItchApiClient;
exports.default = ItchApiClient;