soccer-go
Version:
Soccer CLI for stats and results.
69 lines (68 loc) • 3.3 kB
JavaScript
;
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;
}
}