@sports-sdk/odds-blaze
Version:
A package for interacting with the OddsBlaze API
254 lines (249 loc) • 9.5 kB
JavaScript
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 };