UNPKG

soccer-go

Version:

Soccer CLI for stats and results.

72 lines (71 loc) 3.35 kB
"use strict"; 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; } }