soccer-go
Version:
Soccer CLI for stats and results.
72 lines (71 loc) • 3.35 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMatchday = getMatchday;
exports.getTeam = getTeam;
exports.getTeamFixtures = getTeamFixtures;
exports.getCompetitionTeams = getCompetitionTeams;
exports.getStandings = getStandings;
exports.getTeamId = getTeamId;
exports.getScorers = getScorers;
/* eslint-disable @typescript-eslint/no-explicit-any */
const nanospinner_1 = require("nanospinner");
const cache_1 = require("./cache");
const config_1 = __importDefault(require("./config"));
const errors_1 = require("./utils/errors");
const date_format_1 = require("./utils/date-format");
async function getMatchday(leagueCode) {
const start = (0, date_format_1.getDateWithOffset)(-3);
const end = (0, date_format_1.getDateWithOffset)(4);
const data = (await callApi(`${config_1.default.apiBaseUrl}/competitions/${leagueCode}/matches?dateFrom=${start}&dateTo=${end}`, 'Fetching matchday...', config_1.default.cache.expiry.fixtures));
return data.matches;
}
async function getTeam(teamId) {
return callApi(`${config_1.default.apiBaseUrl}/teams/${teamId}`, 'Fetching team...', config_1.default.cache.expiry.team);
}
async function getTeamFixtures(team) {
const data = (await callApi(team.links.matches, 'Fetching team fixtures...', config_1.default.cache.expiry.fixtures));
return data.matches;
}
async function getCompetitionTeams(leagueCode) {
const data = (await callApi(`${config_1.default.apiBaseUrl}/competitions/${leagueCode}/teams`, 'Fetching teams...', config_1.default.cache.expiry.competition));
return data.teams;
}
async function getStandings(leagueCode) {
const data = (await callApi(`${config_1.default.apiBaseUrl}/competitions/${leagueCode}/standings`, 'Fetching standings...', config_1.default.cache.expiry.standings));
return data.standings?.filter((s) => s.type === 'TOTAL');
}
async function getTeamId(teamName, leagueCode) {
const teams = await getCompetitionTeams(leagueCode);
const team = teams.find((t) => t.name.toLowerCase().includes(teamName.toLowerCase().trim()));
if (team == null) {
throw new errors_1.ApplicationError(errors_1.ErrorCode.TEAM_NOT_FOUND, teamName);
}
return team.id;
}
async function getScorers(leagueCode) {
return callApi(`${config_1.default.apiBaseUrl}/competitions/${leagueCode}/scorers`, 'Fetching top scorers...', config_1.default.cache.expiry.scorers);
}
async function callApi(url, placeholder, expiry) {
const spinner = (0, nanospinner_1.createSpinner)(placeholder).start();
if (!config_1.default.authToken && !process.env.CI) {
spinner.error();
throw new errors_1.ApplicationError(errors_1.ErrorCode.API_KEY_MISSING);
}
try {
const response = await (0, cache_1.cachedApiCall)(url, config_1.default.authToken, expiry);
spinner.success().clear();
return response;
}
catch (error) {
spinner.error();
if ((0, errors_1.isErrorNodeSystemError)(error) &&
error.code === 'ENOTFOUND' &&
error.syscall === 'getaddrinfo') {
throw new errors_1.ApplicationError(errors_1.ErrorCode.NETWORK_UNREACHABLE);
}
throw error;
}
}