UNPKG

@sports-sdk/odds-blaze

Version:

A package for interacting with the OddsBlaze API

254 lines (249 loc) 9.5 kB
import { League } from '@sports-sdk/core'; import axios from 'axios'; // src/client.ts // src/enums.ts var OddsBlazeLeague = /* @__PURE__ */ ((OddsBlazeLeague2) => { OddsBlazeLeague2["Bundesliga"] = "germany_bundesliga"; OddsBlazeLeague2["CS2"] = "cs2"; OddsBlazeLeague2["EPL"] = "england_premier_league"; OddsBlazeLeague2["LOL"] = "league_of_legends"; OddsBlazeLeague2["MLB"] = "mlb"; OddsBlazeLeague2["MLS"] = "united_states_major_league_soccer"; OddsBlazeLeague2["NBA"] = "nba"; OddsBlazeLeague2["NCAAF"] = "ncaaf"; OddsBlazeLeague2["NCAAM"] = "ncaab"; OddsBlazeLeague2["NFL"] = "nfl"; OddsBlazeLeague2["NHL"] = "nhl"; OddsBlazeLeague2["UFC"] = "ufc"; OddsBlazeLeague2["Valorant"] = "valorant"; OddsBlazeLeague2["WNBA"] = "wnba"; return OddsBlazeLeague2; })(OddsBlazeLeague || {}); var OddsBlazeSGPSportsbooks = /* @__PURE__ */ ((OddsBlazeSGPSportsbooks2) => { OddsBlazeSGPSportsbooks2["BALLY_BET"] = "bally_bet"; OddsBlazeSGPSportsbooks2["BALLY_BET_COLORADO"] = "bally_bet_colorado"; OddsBlazeSGPSportsbooks2["BETONLINE_PROP_BUILDER"] = "betonline_prop_builder"; OddsBlazeSGPSportsbooks2["BETRIVERS"] = "betrivers"; OddsBlazeSGPSportsbooks2["BETRIVERS_COLORADO"] = "betrivers_colorado"; OddsBlazeSGPSportsbooks2["BETRIVERS_ONTARIO"] = "betrivers_ontario"; OddsBlazeSGPSportsbooks2["BETSAFE_ONTARIO"] = "betsafe_ontario"; OddsBlazeSGPSportsbooks2["BODOG"] = "bodog"; OddsBlazeSGPSportsbooks2["BODOG_PROP_BUILDER"] = "bodog_prop_builder"; OddsBlazeSGPSportsbooks2["BOVADA"] = "bovada"; OddsBlazeSGPSportsbooks2["BOVADA_PROP_BUILDER"] = "bovada_prop_builder"; OddsBlazeSGPSportsbooks2["CASUMO_ONTARIO"] = "casumo_ontario"; OddsBlazeSGPSportsbooks2["DRAFTKINGS"] = "draftkings"; OddsBlazeSGPSportsbooks2["DRAFTKINGS_ONTARIO"] = "draftkings_ontario"; OddsBlazeSGPSportsbooks2["ESPN_BET"] = "espn_bet"; OddsBlazeSGPSportsbooks2["FANDUEL"] = "fanduel"; OddsBlazeSGPSportsbooks2["FANDUEL_ONTARIO"] = "fanduel_ontario"; OddsBlazeSGPSportsbooks2["HARD_ROCK_BET"] = "hard_rock_bet"; OddsBlazeSGPSportsbooks2["HARD_ROCK_BET_NEW_JERSEY"] = "hard_rock_bet_new_jersey"; OddsBlazeSGPSportsbooks2["LADBROKES_AUSTRALIA"] = "ladbrokes_australia"; OddsBlazeSGPSportsbooks2["NORTHSTAR_BETS_ONTARIO"] = "northstar_bets_ontario"; OddsBlazeSGPSportsbooks2["PRIZEPICKS"] = "prizepicks"; OddsBlazeSGPSportsbooks2["PRIZEPICKS_DEMONS"] = "prizepicks_demons"; OddsBlazeSGPSportsbooks2["PRIZEPICKS_GOBLINS"] = "prizepicks_goblins"; OddsBlazeSGPSportsbooks2["THESCORE_BET"] = "thescore_bet"; OddsBlazeSGPSportsbooks2["THESCORE_BET_ONTARIO"] = "thescore_bet_ontario"; OddsBlazeSGPSportsbooks2["UNIBET_UNITED_KINGDOM"] = "unibet_united_kingdom"; return OddsBlazeSGPSportsbooks2; })(OddsBlazeSGPSportsbooks || {}); var OddsBlazeSportsbooks = /* @__PURE__ */ ((OddsBlazeSportsbooks2) => { OddsBlazeSportsbooks2["BET365"] = "bet365"; OddsBlazeSportsbooks2["BETFAIR_UNITED_KINGDOM"] = "betfair_united_kingdom"; OddsBlazeSportsbooks2["BETFRED_UNITED_KINGDOM"] = "betfred_united_kingdom"; OddsBlazeSportsbooks2["BETMGM"] = "betmgm"; OddsBlazeSportsbooks2["BETMGM_COLORADO"] = "betmgm_colorado"; OddsBlazeSportsbooks2["BETMGM_ONTARIO"] = "betmgm_ontario"; OddsBlazeSportsbooks2["BETONLINE"] = "betonline"; OddsBlazeSportsbooks2["BETPARX_NEW_JERSEY"] = "betparx_new_jersey"; OddsBlazeSportsbooks2["BOOMBET_AUSTRALIA"] = "boombet_australia"; OddsBlazeSportsbooks2["CAESARS_COLORADO"] = "caesars_colorado"; OddsBlazeSportsbooks2["CAESARS_ONTARIO"] = "caesars_ontario"; OddsBlazeSportsbooks2["CIRCA_SPORTS_NEVADA"] = "circa_sports_nevada"; OddsBlazeSportsbooks2["DRAFTKINGS_PICK6"] = "draftkings_pick6"; OddsBlazeSportsbooks2["FANATICS"] = "fanatics"; OddsBlazeSportsbooks2["FLIFF"] = "fliff"; OddsBlazeSportsbooks2["HOTSTREAK"] = "hotstreak"; OddsBlazeSportsbooks2["LADBROKES_UNITED_KINGDOM"] = "ladbrokes_united_kingdom"; OddsBlazeSportsbooks2["PADDY_POWER_UNITED_KINGDOM"] = "paddy_power_united_kingdom"; OddsBlazeSportsbooks2["PARLAYPLAY"] = "parlayplay"; OddsBlazeSportsbooks2["PINNACLE"] = "pinnacle"; OddsBlazeSportsbooks2["POINTSBET"] = "pointsbet"; OddsBlazeSportsbooks2["POINTSBET_ONTARIO"] = "pointsbet_ontario"; OddsBlazeSportsbooks2["PRIME_SPORTS_NEW_JERSEY"] = "prime_sports_new_jersey"; OddsBlazeSportsbooks2["PROPHETX"] = "prophetx"; OddsBlazeSportsbooks2["PS3838"] = "ps3838"; OddsBlazeSportsbooks2["SKY_BET_UNITED_KINGDOM"] = "sky_bet_united_kingdom"; OddsBlazeSportsbooks2["SLEEPER"] = "sleeper"; OddsBlazeSportsbooks2["SPORT_888_ONTARIO"] = "888sport_ontario"; OddsBlazeSportsbooks2["STAKE"] = "stake"; OddsBlazeSportsbooks2["TAB_AUSTRALIA"] = "tab_australia"; OddsBlazeSportsbooks2["UNDERDOG_FANTASY"] = "underdog_fantasy"; return OddsBlazeSportsbooks2; })(OddsBlazeSportsbooks || {}); // src/client.ts var OddsBlazeClient = class { /** * Create an OddsBlaze API client * @param apiKey - The API key for authenticating API requests. If not provided, it will look for `ODDS_BLAZE_KEY` in the environment variables. * @param apiVersion - The version of the OddsBlaze API endpoint to use * @throws Will throw an error if the API key is not provided or found in the environment variables. */ constructor(apiKey, apiVersion = "v1") { this.apiVersion = apiVersion; const key = apiKey || process.env.ODDS_BLAZE_KEY; if (!key) { throw new Error( "OddsBlaze API key is required. Provide it as a parameter or set the environment variable ODDS_BLAZE_KEY." ); } this.apiKey = key; this.axiosInstances = { api: this.getAxiosInstance("api"), data: this.getAxiosInstance("data"), sgp: this.getAxiosInstance("sgp") }; } apiKey; axiosInstances; getAxiosInstance(subDomain) { return axios.create({ baseURL: `https://${subDomain}.oddsblaze.com/${this.apiVersion}`, headers: { "Content-Type": "application/json" } }); } static coreLeagueToOddsBlazeLeague(league) { switch (league) { case League.NFL: return "nfl" /* NFL */; case League.EPL: return "england_premier_league" /* EPL */; case League.MLB: return "mlb" /* MLB */; case League.NCAAF: return "ncaaf" /* NCAAF */; case League.NBA: return "nba" /* NBA */; case League.NHL: return "nhl" /* NHL */; case League.NCAAM: return "ncaab" /* NCAAM */; default: throw new Error("OddsBlaze does not support this league yet"); } } /** * Sends a GET request to the specified URL path. * @param subDomain - The OddsBlaze subdomain to call * @param path - The path to append to base URL to send the request to. * @param body - The body to send with the post request * @param method - The HTTP method to use * @param additionalParams - Additional query parameters for the request. * @returns The response data from the API * @throws Will throw an error if the request fails. */ async request({ subDomain, path, body = {}, method = "get", additionalParams = {} }) { additionalParams = { key: this.apiKey, ...additionalParams }; const params = Object.entries(additionalParams).reduce( (acc, [key, value]) => { if (Array.isArray(value)) { acc.append(key, value.join(",")); } else { acc.append(key, value); } return acc; }, new URLSearchParams() ); const response = await this.axiosInstances[subDomain][method](path, { params, data: body }); if (response.status === 200) { return response.data; } throw new Error( `Failed to get a valid response: status code ${response.status}, response body ${response.data}` ); } async getOdds(props) { const { league, sportsbook, main, live } = props; const params = {}; if (main) { params["main"] = main; } if (live) { params["live"] = live; } return await this.request({ subDomain: "data", path: `/odds/${sportsbook}_${league}.json`, additionalParams: main || live ? params : void 0 }); } async settleBets(props) { return this.request({ subDomain: "api", method: "post", path: "/grader", body: { odds: props.gradeIds.map((gradeId) => ({ grade: gradeId })) } }); } async priceSameGameParlay(props) { const { sgpIds, ...additionalParams } = props; return this.request({ subDomain: "sgp", method: "post", path: "/", body: { odds: sgpIds.map((sgp) => ({ sgp })) }, additionalParams }); } async getSportsbooks() { return await this.request({ path: `/sportsbooks.json`, subDomain: "data" }); } async getMarkets(props) { return await this.request({ path: `/markets/${props.league}.json`, subDomain: "data" }); } async getTeams(props) { return await this.request({ subDomain: "api", path: "/teams", additionalParams: props }); } async getPlayers(props) { return await this.request({ subDomain: "api", path: "/players", additionalParams: props }); } async getOddsStatus(props) { return await this.request({ path: `/status/odds/${props.league}.json`, subDomain: "data" }); } }; export { OddsBlazeClient, OddsBlazeLeague, OddsBlazeSGPSportsbooks, OddsBlazeSportsbooks };