UNPKG

soccer-go

Version:

Soccer CLI for stats and results.

69 lines (68 loc) 3.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTeamId = exports.getStandings = exports.getCompetitionTeams = exports.getTeamFixtures = exports.getTeam = exports.getMatchday = void 0; const dayjs_1 = __importDefault(require("dayjs")); const nanospinner_1 = require("nanospinner"); const cache_1 = require("./cache"); const config_1 = __importDefault(require("./config")); const errors_1 = require("./utils/errors"); async function getMatchday(leagueCode) { const start = (0, dayjs_1.default)().subtract(3, 'day').format('YYYY-MM-DD'); const end = (0, dayjs_1.default)().add(4, 'days').format('YYYY-MM-DD'); 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; } exports.getMatchday = getMatchday; async function getTeam(teamId) { return callApi(`${config_1.default.apiBaseUrl}/teams/${teamId}`, 'Fetching team...', config_1.default.cache.expiry.team); } exports.getTeam = getTeam; async function getTeamFixtures(team) { const data = await callApi(team.links.matches, 'Fetching team fixtures...', config_1.default.cache.expiry.fixtures); return data.matches; } exports.getTeamFixtures = getTeamFixtures; 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; } exports.getCompetitionTeams = getCompetitionTeams; async function getStandings(leagueCode) { var _a; const data = await callApi(`${config_1.default.apiBaseUrl}/competitions/${leagueCode}/standings`, 'Fetching standings...', config_1.default.cache.expiry.standings); return (_a = data.standings) === null || _a === void 0 ? void 0 : _a.filter((s) => s.type === 'TOTAL'); } exports.getStandings = getStandings; 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; } exports.getTeamId = getTeamId; 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; } }