UNPKG

itch-dl

Version:

Bulk download games from itch.io - TypeScript implementation

44 lines (43 loc) 1.74 kB
"use strict"; 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;