diff --git a/.dockerignore b/.dockerignore index 80a07e42..647c8741 100644 --- a/.dockerignore +++ b/.dockerignore @@ -106,4 +106,9 @@ dist /.idea/* .vscode .git -/*/test/ \ No newline at end of file + +# Test folders +/*/test/ +jest +jest.config.js +__mocks__ \ No newline at end of file diff --git a/__mocks__/overtime-live-trading-utils.js b/__mocks__/overtime-live-trading-utils.js new file mode 100644 index 00000000..7964f008 --- /dev/null +++ b/__mocks__/overtime-live-trading-utils.js @@ -0,0 +1,105 @@ +// MOCKED functions + +let __gameContraints = { allow: true, message: "" }; +const __mockCheckGameContraints = (gameContraints) => (__gameContraints = gameContraints); +const checkGameContraints = () => __gameContraints; + +// NOT MOCKED functions + +const teamNamesMatching = (leagueId, marketHomeTeam, marketAwayTeam, apiHomeTeam, apiAwayTeam, teamsMap) => + jest + .requireActual("overtime-live-trading-utils") + .teamNamesMatching(leagueId, marketHomeTeam, marketAwayTeam, apiHomeTeam, apiAwayTeam, teamsMap); + +const gamesDatesMatching = (marketMaturityDate, apiStartDate, sportId, tennisDifferenceEnvVariable) => + jest + .requireActual("overtime-live-trading-utils") + .gamesDatesMatching(marketMaturityDate, apiStartDate, sportId, tennisDifferenceEnvVariable); + +const getLeagueOpticOddsName = (league) => + jest.requireActual("overtime-live-trading-utils").getLeagueOpticOddsName(league); + +const getBookmakersArray = (bookmakersData, sportId, backupLiveOddsProviders) => + jest + .requireActual("overtime-live-trading-utils") + .getBookmakersArray(bookmakersData, sportId, backupLiveOddsProviders); + +const getLiveSupportedLeagues = (leagueInfoArray) => + jest.requireActual("overtime-live-trading-utils").getLiveSupportedLeagues(leagueInfoArray); + +const getBetTypesForLeague = (league, leagueInfoArray) => + jest.requireActual("overtime-live-trading-utils").getBetTypesForLeague(league, leagueInfoArray); + +const getLeagueSport = (league) => jest.requireActual("overtime-live-trading-utils").getLeagueSport(league); + +const getLeagueLabel = (league) => jest.requireActual("overtime-live-trading-utils").getLeagueLabel(league); + +const getLeagueProvider = (league) => jest.requireActual("overtime-live-trading-utils").getLeagueProvider(league); + +const getLeagueIsDrawAvailable = (league) => + jest.requireActual("overtime-live-trading-utils").getLeagueIsDrawAvailable(league); + +const fetchResultInCurrentSet = (currentSet, opticOddsScoresApiResponse) => + jest.requireActual("overtime-live-trading-utils").fetchResultInCurrentSet(currentSet, opticOddsScoresApiResponse); + +const League = jest.requireActual("overtime-live-trading-utils").League; +const Sport = jest.requireActual("overtime-live-trading-utils").Sport; +const MoneylineTypes = jest.requireActual("overtime-live-trading-utils").MoneylineTypes; +const Provider = jest.requireActual("overtime-live-trading-utils").Provider; +const PeriodType = jest.requireActual("overtime-live-trading-utils").PeriodType; +const TotalTypes = jest.requireActual("overtime-live-trading-utils").TotalTypes; + +const UFC_LEAGUE_IDS = jest.requireActual("overtime-live-trading-utils").UFC_LEAGUE_IDS; +const LeagueMap = jest.requireActual("overtime-live-trading-utils").LeagueMap; +const LeagueIdMapEnetpulse = jest.requireActual("overtime-live-trading-utils").LeagueIdMapEnetpulse; +const LeagueIdMapOpticOdds = jest.requireActual("overtime-live-trading-utils").LeagueIdMapOpticOdds; + +const processMarket = ( + market, + apiResponseWithOdds, + liveOddsProviders, + spreadData, + isDrawAvailable, + defaultSpreadForLiveMarkets, + maxPercentageDiffBetwenOdds, + leagueMap, +) => + jest + .requireActual("overtime-live-trading-utils") + .processMarket( + market, + apiResponseWithOdds, + liveOddsProviders, + spreadData, + isDrawAvailable, + defaultSpreadForLiveMarkets, + maxPercentageDiffBetwenOdds, + leagueMap, + ); + +module.exports = { + checkGameContraints, + __mockCheckGameContraints, + teamNamesMatching, + gamesDatesMatching, + getLeagueOpticOddsName, + getBookmakersArray, + getLiveSupportedLeagues, + getBetTypesForLeague, + getLeagueSport, + getLeagueLabel, + getLeagueProvider, + getLeagueIsDrawAvailable, + fetchResultInCurrentSet, + processMarket, + League, + Sport, + MoneylineTypes, + Provider, + PeriodType, + TotalTypes, + UFC_LEAGUE_IDS, + LeagueMap, + LeagueIdMapEnetpulse, + LeagueIdMapOpticOdds, +}; diff --git a/eslint.config.mjs b/eslint.config.mjs index 527c73a9..2cb96f14 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,6 +4,9 @@ import globals from "globals"; export default [ { files: ["**/*.js"], + env: { + jest: true, + }, languageOptions: { sourceType: "commonjs" }, rules: { "prefer-const": "error", diff --git a/help.txt b/help.txt index 843f20bc..9a8f2e07 100644 --- a/help.txt +++ b/help.txt @@ -50,4 +50,9 @@ docker-compose up -d overtime-v2-api-testnet - Access SERVER - Run: docker ps - Copy "CONTAINER ID" of redis:alpine -- Run: docker exec -it "CONTAINER ID" redis-cli \ No newline at end of file +- Run: docker exec -it "CONTAINER ID" redis-cli + +### RUN TESTS ### +npm test +npm test -- liveMarkets.test.js +npm test -- --testNamePattern 'checks number of live markets' --no-silent \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..76036a37 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + verbose: true, + setupFilesAfterEnv: ["./jest/jestInitialSetup.js"], + collectCoverage: true, + collectCoverageFrom: ["overtimeV2Api/**/*.js"], + coveragePathIgnorePatterns: ["contracts", "test"], +}; diff --git a/jest/jestInitialSetup.js b/jest/jestInitialSetup.js new file mode 100644 index 00000000..d2945ae5 --- /dev/null +++ b/jest/jestInitialSetup.js @@ -0,0 +1,2 @@ +jest.mock("redis", () => jest.requireActual("./redisV4Mock")); +// jest.mock("redis", () => jest.requireActual("redis-mock")); // redis V4 is not supported by redis-mock diff --git a/jest/redisV4Mock.js b/jest/redisV4Mock.js new file mode 100644 index 00000000..583fb0f2 --- /dev/null +++ b/jest/redisV4Mock.js @@ -0,0 +1,31 @@ +// redis-mock has not been updated for node-redis v4 yet, but the main changes +// in the API are camelCase names and promises instead of callback, so we can work around it. +// https://github.com/yeahoffline/redis-mock/issues/195 + +const redis = require("redis-mock"); +const { promisify } = require("util"); + +const client = redis.createClient(); +const set = promisify(client.set).bind(client); +const setEx = promisify(client.setex).bind(client); + +const v4Client = { + isOpen: false, + connect: () => (v4Client.isOpen = true), + get: promisify(client.get).bind(client), + set: (key, value) => set(key, value), + del: promisify(client.del).bind(client), + hSet: promisify(client.hset).bind(client), + hGet: promisify(client.hget).bind(client), + hDel: promisify(client.hdel).bind(client), + flushAll: promisify(client.flushall).bind(client), + setEx: promisify(client.setex).bind(client), + expire: promisify(client.expire).bind(client), + mGet: promisify(client.mget).bind(client), + mSet: promisify(client.mset).bind(client), + pSetEx: (key, ms, value) => setEx(key, ms / 1000, value), + on: () => v4Client, + // Add additional functions as needed... +}; + +module.exports = { ...redis, createClient: () => v4Client }; diff --git a/overtimeV2Api/constants/markets.js b/overtimeV2Api/constants/markets.js index cb7669c2..89ef42aa 100644 --- a/overtimeV2Api/constants/markets.js +++ b/overtimeV2Api/constants/markets.js @@ -1637,7 +1637,6 @@ const PARENT_MARKET_PROPERTIES_TO_EXCLUDE = [ "isPlayerPropsMarket", "isOneSidePlayerPropsMarket", "isYesNoPlayerPropsMarket", - "isV3", ]; const CHILD_MARKET_PROPERTIES_TO_EXCLUDE = [ diff --git a/overtimeV2Api/source/liveMarkets.js b/overtimeV2Api/source/liveMarkets.js index 4d9a1534..c86a1ac1 100644 --- a/overtimeV2Api/source/liveMarkets.js +++ b/overtimeV2Api/source/liveMarkets.js @@ -63,7 +63,8 @@ async function processLiveMarkets() { const startTime = new Date().getTime(); logAllInfo(`Live markets ${network}: process live markets`); - await processAllMarkets( + // call function from the same file with module.exports for unit tests mocking purpose + await module.exports.processAllMarkets( oddsStreamsInfoByLeagueMap, oddsInitializedByLeagueMap, resultsInitializedByLeagueMap, @@ -110,9 +111,7 @@ async function processAllMarkets( const openMarketsMap = new Map(JSON.parse(openMarkets)); const supportedLiveMarkets = Array.from(openMarketsMap.values()) - .filter( - (market) => !!market.isV3 && market.statusCode === "ongoing" && !market.isWholeGameResolved && !market.noTickets, - ) + .filter((market) => market.statusCode === "ongoing" && !market.isWholeGameResolved && !market.noTickets) .filter((market) => supportedLiveLeagueIds.includes(market.leagueId)); const uniqueLiveLeagueIds = uniq(supportedLiveMarkets.map((market) => market.leagueId)); @@ -450,7 +449,6 @@ async function processMarketsByLeague( market.proof = []; market.homeScoreByPeriod = gamesHomeScoreByPeriod; market.awayScoreByPeriod = gamesAwayScoreByPeriod; - market.isV3 = true; if (!errorMessage) { const processedMarket = processMarket( @@ -503,4 +501,5 @@ async function processMarketsByLeague( module.exports = { processLiveMarkets, + processAllMarkets, }; diff --git a/overtimeV2Api/source/liveScores.js b/overtimeV2Api/source/liveScores.js index 506f4a36..9b49dd38 100644 --- a/overtimeV2Api/source/liveScores.js +++ b/overtimeV2Api/source/liveScores.js @@ -77,7 +77,7 @@ async function processAllLiveResults(resultsInitialization, isTestnet) { const leagueProvider = getLeagueProvider(leagueId); const gameInfo = gamesInfoMap.get(market.gameId); - if (leagueProvider === Provider.OPTICODDS && market.isV3) { + if (leagueProvider === Provider.OPTICODDS) { opticOddsGameIdsWithLeagueID.push({ gameId: market.gameId, leagueId, gameInfo }); } } diff --git a/overtimeV2Api/source/markets.js b/overtimeV2Api/source/markets.js index 3542214d..f62211c4 100644 --- a/overtimeV2Api/source/markets.js +++ b/overtimeV2Api/source/markets.js @@ -147,10 +147,10 @@ const loadMarkets = async (isTestnet, shouldDoFullUpdate) => { }; const mapMarket = (market) => { - const packedMarket = packMarket(market, false); + const packedMarket = packMarket(market); packedMarket.childMarkets = []; market.childMarkets.forEach((childMarket) => { - const packedChildMarket = packMarket(childMarket, true); + const packedChildMarket = packMarket(childMarket); packedMarket.childMarkets.push(packedChildMarket); }); diff --git a/overtimeV2Api/test/index.test.js b/overtimeV2Api/test/index.test.js new file mode 100644 index 00000000..6522b453 --- /dev/null +++ b/overtimeV2Api/test/index.test.js @@ -0,0 +1,7 @@ +describe("Check OvertimeV2 initialization", () => { + it("checks redis client is connected", async () => { + require("../index"); + const { redisClient } = require("../../redis/client"); + expect(redisClient.isOpen).toBe(true); + }); +}); diff --git a/overtimeV2Api/test/indexTestnet.test.js b/overtimeV2Api/test/indexTestnet.test.js new file mode 100644 index 00000000..6315898c --- /dev/null +++ b/overtimeV2Api/test/indexTestnet.test.js @@ -0,0 +1,7 @@ +describe("Check OvertimeV2 testnet initialization", () => { + it("checks redis client is connected", async () => { + require("../indexTestnet"); + const { redisClient } = require("../../redis/client"); + expect(redisClient.isOpen).toBe(true); + }); +}); diff --git a/overtimeV2Api/test/liveMarkets/checkConstraints.test.js b/overtimeV2Api/test/liveMarkets/checkConstraints.test.js deleted file mode 100644 index 08be5982..00000000 --- a/overtimeV2Api/test/liveMarkets/checkConstraints.test.js +++ /dev/null @@ -1,97 +0,0 @@ -/* eslint-disable no-undef */ -const { checkGameContraints } = require("overtime-live-trading-utils"); -const { League, Sport } = require("../../constants/sports"); -const { - nbaScoresResponse, - mlbScoresResponse, - soccerScoresResponse, - soccerScoresHalftimeResponse, - tennisScoresATPResponse, - volleyballScoresResponseApprove, - volleyballScoresResponseBlock, -} = require("./mockedResponses/opticOddsGameScoresRespones"); - -const constraintsMap = new Map(); -process.env.QUARTER_LIMIT_FOR_LIVE_TRADING_BASKETBALL = 4; -process.env.PERIOD_LIMIT_FOR_LIVE_TRADING_HOCKEY = 3; -process.env.INNING_LIMIT_FOR_LIVE_TRADING_BASEBALL = 8; -process.env.MINUTE_LIMIT_FOR_LIVE_TRADING_FOOTBALL = 85; -process.env.SET_LIMIT_FOR_LIVE_TRADING_VOLLEYBAL = 5; - -constraintsMap.set(Sport.BASKETBALL, Number(process.env.QUARTER_LIMIT_FOR_LIVE_TRADING_BASKETBALL)); -constraintsMap.set(Sport.HOCKEY, Number(process.env.PERIOD_LIMIT_FOR_LIVE_TRADING_HOCKEY)); -constraintsMap.set(Sport.BASEBALL, Number(process.env.INNING_LIMIT_FOR_LIVE_TRADING_BASEBALL)); -constraintsMap.set(Sport.SOCCER, Number(process.env.MINUTE_LIMIT_FOR_LIVE_TRADING_FOOTBALL)); -constraintsMap.set(Sport.VOLLEYBALL, Number(process.env.SET_LIMIT_FOR_LIVE_TRADING_VOLLEYBAL)); - -describe("Check contraints", () => { - it("checks NBA contraints for quarter and allow game", () => { - const passingConstraintsObject = checkGameContraints(nbaScoresResponse, League.NBA, constraintsMap); - - expect(passingConstraintsObject.allow).toBe(true); - }); -}); - -describe("Check contraints", () => { - it("checks MLB contraints for inning and block game", () => { - const passingConstraintsObject = checkGameContraints(mlbScoresResponse, League.MLB, constraintsMap); - - expect(passingConstraintsObject.allow).toBe(false); - }); -}); - -describe("Check contraints", () => { - it("checks soccer contraints for game clock", () => { - const passingConstraintsObject = checkGameContraints(soccerScoresResponse, League.UEFA_EURO, constraintsMap); - - expect(passingConstraintsObject.allow).toBe(true); - }); -}); - -describe("Check contraints", () => { - it("checks soccer contraints for halftime", () => { - const passingConstraintsObject = checkGameContraints( - soccerScoresHalftimeResponse, - League.UEFA_EURO, - constraintsMap, - ); - - expect(passingConstraintsObject.allow).toBe(true); - }); -}); - -describe("Check contraints", () => { - it("checks tennis contraints for result", () => { - const passingConstraintsObject = checkGameContraints( - tennisScoresATPResponse, - League.TENNIS_MASTERS, - constraintsMap, - ); - - expect(passingConstraintsObject.allow).toBe(false); - }); -}); - -describe("Check contraints", () => { - it("checks volleyball olympics contraints for set and approve game", () => { - const passingConstraintsObject = checkGameContraints( - volleyballScoresResponseApprove, - League.SUMMER_OLYMPICS_VOLEYBALL, - constraintsMap, - ); - - expect(passingConstraintsObject.allow).toBe(true); - }); -}); - -describe("Check contraints", () => { - it("checks volleyball olympics contraints for set and block game", () => { - const passingConstraintsObject = checkGameContraints( - volleyballScoresResponseBlock, - League.SUMMER_OLYMPICS_VOLEYBALL_WOMEN, - constraintsMap, - ); - - expect(passingConstraintsObject.allow).toBe(false); - }); -}); diff --git a/overtimeV2Api/test/liveMarkets/liveMarkets.test.js b/overtimeV2Api/test/liveMarkets/liveMarkets.test.js new file mode 100644 index 00000000..139556cc --- /dev/null +++ b/overtimeV2Api/test/liveMarkets/liveMarkets.test.js @@ -0,0 +1,668 @@ +const { openMarkets } = require("../mockData/openMarkets"); +const { liveSoccerGames, liveTennisGames } = require("../mockData/liveGames"); +const { liveApiFixtureOdds } = require("../mockData/opticOdds/opticOddsApiFixtureOdds"); +const { liveApiResults } = require("../mockData/opticOdds/opticOddsApiResults"); +const { teamsMap } = require("../mockData/riskManagement/teamsMap"); +const { bookmakersData } = require("../mockData/riskManagement/bookmakersData"); +const { spreadData } = require("../mockData/riskManagement/spreadData"); +const { leaguesData } = require("../mockData/riskManagement/leaguesData"); +const { NETWORK } = require("../../constants/networks"); +const KEYS = require("../../../redis/redis-keys"); +const { convertFromBytes32 } = require("../../utils/markets"); +const { streamOddsEventsData } = require("../mockData/opticOdds/opticOddsStreamEventOdds"); +const { delay } = require("../../utils/general"); + +describe("Check live markets without streams", () => { + const OLD_ENV = process.env; + let riskManagementSpy; + let utilsStaleOddsSpy; + let utilsFilterStaleOddsSpy; + let opticOddsGamesSpy; + let opticOddsFixtureOddsSpy; + let opticOddsResultsSpy; + + beforeAll(() => { + jest.resetModules(); // Clear the module cache + process.env = { ...OLD_ENV }; // Copy current environment variables + + process.env.REDIS_URL = "redis://redis:6379"; + process.env.LIVE_ODDS_PROVIDERS = "draftkings"; + process.env.DISABLE_OPTIC_ODDS_STREAM_ODDS = "true"; + process.env.DISABLE_OPTIC_ODDS_STREAM_RESULTS = "true"; + process.env.TENNIS_MATCH_TIME_DIFFERENCE_MINUTES = "360"; + process.env.IS_TESTNET = "false"; + + jest.mock("overtime-live-trading-utils"); + + // Mock risk management API + const liveMarketsUtils = require("../../utils/liveMarkets"); + riskManagementSpy = jest.spyOn(liveMarketsUtils, "fetchRiskManagementConfig"); + const config = { teamsMap, bookmakersData, spreadData, leaguesData }; + riskManagementSpy.mockResolvedValue(config); + // Mock stale odds check + utilsStaleOddsSpy = jest.spyOn(liveMarketsUtils, "isOddsTimeStale"); + utilsStaleOddsSpy.mockReturnValue(false); + utilsFilterStaleOddsSpy = jest.spyOn(liveMarketsUtils, "filterStaleOdds"); + utilsFilterStaleOddsSpy.mockImplementation((a) => a); + // Mock Optic Odds fixtures active API + opticOddsGamesSpy = jest.spyOn(liveMarketsUtils, "fetchOpticOddsGamesForLeague"); + // Mock Optic Odds fixtures odds API + const opticOddsFixtureOddsUtils = require("../../utils/opticOdds/opticOddsFixtureOdds"); + opticOddsFixtureOddsSpy = jest.spyOn(opticOddsFixtureOddsUtils, "fetchOpticOddsFixtureOdds"); + opticOddsFixtureOddsSpy.mockResolvedValue(liveApiFixtureOdds); + // Mock Optic Odds fixtures results API + const opticOddsResultsUtils = require("../../utils/opticOdds/opticOddsResults"); + opticOddsResultsSpy = jest.spyOn(opticOddsResultsUtils, "fetchOpticOddsResults"); + opticOddsResultsSpy.mockResolvedValue(liveApiResults); + }); + + beforeEach(() => { + jest.useRealTimers(); + + opticOddsGamesSpy.mockResolvedValueOnce(liveSoccerGames).mockResolvedValueOnce(liveTennisGames); + }); + + afterAll(() => { + process.env = OLD_ENV; // Restore original environment variables + + riskManagementSpy.mockRestore(); + utilsStaleOddsSpy.mockRestore(); + utilsFilterStaleOddsSpy.mockRestore(); + opticOddsGamesSpy.mockRestore(); + opticOddsFixtureOddsSpy.mockRestore(); + opticOddsResultsSpy.mockRestore(); + }); + + it("checks live markets processing (processLiveMarkets)", () => { + jest.useFakeTimers(); + + // Mock Optic Odds fixtures odds API + const liveMarkets = require("../../source/liveMarkets"); + const liveMarketsSpy = jest.spyOn(liveMarkets, "processAllMarkets"); + liveMarketsSpy.mockResolvedValue([]); + + // This needs to be imported after mocks in order to work + const { processLiveMarkets } = require("../../source/liveMarkets"); + processLiveMarkets(); + + jest.runAllTimers(); + + try { + expect(liveMarketsSpy).toHaveBeenCalledTimes(1); + } finally { + liveMarketsSpy.mockRestore(); + } + }); + + it("checks live markets processing with error (processLiveMarkets)", () => { + jest.useFakeTimers(); + + process.env.IS_TESTNET = "true"; + + // Mock Optic Odds fixtures odds API + const liveMarkets = require("../../source/liveMarkets"); + const liveMarketsSpy = jest.spyOn(liveMarkets, "processAllMarkets"); + liveMarketsSpy.mockRejectedValue("Some error"); + + // This needs to be imported after mocks in order to work + const { processLiveMarkets } = require("../../source/liveMarkets"); + processLiveMarkets(); + + jest.runAllTimers(); + + try { + expect(liveMarketsSpy).toHaveBeenCalledTimes(1); + } finally { + process.env.IS_TESTNET = "false"; + liveMarketsSpy.mockRestore(); + } + }); + + it("checks all markets processing with error (processAllMarkets)", async () => { + // Mock some games error + opticOddsGamesSpy.mockReset(); + opticOddsGamesSpy.mockRejectedValue("Some games error"); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN zero live markets should be stored in Redis for all networks + const liveMarketsOp = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Optimism])); + expect(liveMarketsOp.length).toBe(0); + const liveMarketsArb = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Arbitrum])); + expect(liveMarketsArb.length).toBe(0); + }); + + it("checks zero number of live markets (processAllMarkets)", async () => { + // Mock zero games + opticOddsGamesSpy.mockReset(); + opticOddsGamesSpy.mockResolvedValue([]); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN zero live markets should be stored in Redis for all networks + const liveMarketsOp = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Optimism])); + expect(liveMarketsOp.length).toBe(0); + const liveMarketsArb = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Arbitrum])); + expect(liveMarketsArb.length).toBe(0); + }); + + it("checks number of live markets on mainnets (processAllMarkets)", async () => { + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN X live markets should be stored in Redis for all networks + const liveMarketsOp = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Optimism])); + expect(liveMarketsOp.length).toBe(openMarkets.length); + const liveMarketsArb = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Arbitrum])); + expect(liveMarketsArb.length).toBe(openMarkets.length); + }); + + it("checks error from game constraints", async () => { + const ERROR_MESSAGE = "Mocked checkGameContraints error message"; + // Mock checkGameContraints from node_modules/overtime-live-trading-utils + const { __mockCheckGameContraints } = require("../../../__mocks__/overtime-live-trading-utils"); + __mockCheckGameContraints({ allow: false, message: ERROR_MESSAGE }); + require("overtime-live-trading-utils").checkGameContraints(); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN error message should be stored to redis + await delay(100); // wait for redis set to be completed + const errorObj = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + const firstMarket = Array.from(new Map(openMarkets).values())[0]; + const errorMessages = new Map(JSON.parse(errorObj)).get(firstMarket.gameId); + const errorMessage = errorMessages && errorMessages.length ? errorMessages[0].errorMessage : ""; + + try { + expect(errorMessage).toBeTruthy(); + expect(errorMessage).toBe(ERROR_MESSAGE); + } finally { + await redisClient.del(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + __mockCheckGameContraints({ allow: true, message: "" }); + } + }); + + it("checks error for stale odds", async () => { + // Mock stale odds + utilsStaleOddsSpy.mockReturnValue(true); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN error message should be stored to redis + await delay(100); // wait for redis set to be completed + const errorObj = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + const firstMarket = Array.from(new Map(openMarkets).values())[0]; + const errorMessages = new Map(JSON.parse(errorObj)).get(firstMarket.gameId); + const errorMessage = errorMessages && errorMessages.length ? errorMessages[0].errorMessage : ""; + + try { + expect(errorMessage).toBeTruthy(); + expect(errorMessage).toBe( + `Pausing game ${firstMarket.homeTeam} - ${firstMarket.awayTeam} due to odds being stale`, + ); + } finally { + utilsStaleOddsSpy.mockReturnValue(false); + await redisClient.del(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + } + }); + + it("checks error for result not found", async () => { + // Mock empty results + opticOddsResultsSpy.mockResolvedValue([]); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN error message should be stored to redis + await delay(100); // wait for redis set to be completed + const errorObj = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + const firstMarket = Array.from(new Map(openMarkets).values())[0]; + const errorMessages = new Map(JSON.parse(errorObj)).get(firstMarket.gameId); + const errorMessage = errorMessages && errorMessages.length ? errorMessages[0].errorMessage : ""; + + try { + expect(errorMessage).toBeTruthy(); + expect(errorMessage).toBe( + `Blocking game ${firstMarket.homeTeam} - ${firstMarket.awayTeam} due to missing game result.`, + ); + } finally { + opticOddsResultsSpy.mockResolvedValue(liveApiResults); + await redisClient.del(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + } + }); + + it("checks error for result unknown status", async () => { + // Mock results status null + const liveApiResultsWithUnknownStatus = liveApiResults.map((liveApiResult) => ({ + ...liveApiResult, + fixture: { ...liveApiResult.fixture, status: null }, + })); + opticOddsResultsSpy.mockResolvedValue(liveApiResultsWithUnknownStatus); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN error message should be stored to redis + await delay(100); // wait for redis set to be completed + const errorObj = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + const firstMarket = Array.from(new Map(openMarkets).values())[0]; + const errorMessages = new Map(JSON.parse(errorObj)).get(firstMarket.gameId); + const errorMessage = errorMessages && errorMessages.length ? errorMessages[0].errorMessage : ""; + + try { + expect(errorMessage).toBeTruthy(); + expect(errorMessage).toBe( + `Pausing game ${firstMarket.homeTeam} - ${firstMarket.awayTeam} due to unknown status or period`, + ); + } finally { + opticOddsResultsSpy.mockResolvedValue(liveApiResults); + await redisClient.del(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + } + }); + + it("checks error for bad odds", async () => { + // Mock odds empty array + const liveApiFixtureOddsWithBadOdds = liveApiFixtureOdds.map((liveApiOdds) => ({ + ...liveApiOdds, + odds: [], + })); + opticOddsFixtureOddsSpy.mockResolvedValue(liveApiFixtureOddsWithBadOdds); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN error message should be stored to redis + await delay(100); // wait for redis set to be completed + const errorObj = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + const firstMarket = Array.from(new Map(openMarkets).values())[0]; + const errorMessages = new Map(JSON.parse(errorObj)).get(firstMarket.gameId); + const errorMessage = errorMessages && errorMessages.length ? errorMessages[0].errorMessage : ""; + + try { + expect(errorMessage).toBeTruthy(); + expect(errorMessage).toBe("Returning zero odds cause bookmakers have 0 or 1 odds"); + } finally { + await redisClient.del(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + opticOddsFixtureOddsSpy.mockResolvedValue(liveApiFixtureOdds); + } + }); + + it("checks error for result not live", async () => { + // Mock results isLive false + const liveApiResultsWithUnknownStatus = liveApiResults.map((liveApiResult) => ({ + ...liveApiResult, + fixture: { ...liveApiResult.fixture, is_live: false }, + })); + opticOddsResultsSpy.mockResolvedValue(liveApiResultsWithUnknownStatus); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN error message should be stored to redis + await delay(100); // wait for redis set to be completed + const errorObj = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + const firstMarket = Array.from(new Map(openMarkets).values())[0]; + const errorMessages = new Map(JSON.parse(errorObj)).get(firstMarket.gameId); + const errorMessage = errorMessages && errorMessages.length ? errorMessages[0].errorMessage : ""; + + try { + expect(errorMessage).toBeTruthy(); + expect(errorMessage).toBe(`Provider marked game ${firstMarket.homeTeam} - ${firstMarket.awayTeam} as not live`); + } finally { + await redisClient.del(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[NETWORK.Optimism]); + opticOddsResultsSpy.mockResolvedValue(liveApiResults); + } + }); + + it("checks number of live markets on testnet", async () => { + process.env.IS_TESTNET = "true"; + process.env.LIVE_DUMMY_MARKETS_ENABLED = "true"; + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + const dummyMarketsLive = require("../../utils/dummy/dummyMarketsLive.json"); + + // GIVEN X number of ongoing markets on Optimism Sepolia + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.OptimismSepolia], JSON.stringify(openMarkets)); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + const isTestnet = process.env.IS_TESTNET === "true"; + + // WHEN process X ongoing markets + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN X live markets should be stored in Redis for Optimism Sepolia + try { + const liveMarketsOp = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.OptimismSepolia])); + expect(liveMarketsOp.length).toBe(openMarkets.length + dummyMarketsLive.length); + } finally { + process.env.IS_TESTNET = "false"; + process.env.LIVE_DUMMY_MARKETS_ENABLED = "false"; + } + }); +}); + +describe("Check live markets with streams", () => { + const OLD_ENV = process.env; + let riskManagementSpy; + let utilsStaleOddsSpy; + let utilsFilterStaleOddsSpy; + let opticOddsGamesSpy; + let opticOddsFixtureOddsSpy; + let opticOddsResultsSpy; + let startOddsStreamsSpy; + let closeInactiveOddsStreamsSpy; + + const getExpectedStreamOddsPrice = (gameId, selection, checkStream = true) => { + const expectedApiOdds = liveApiFixtureOdds.find((data) => data.id === convertFromBytes32(gameId))?.odds; + + const isUpdatedLiveMarketSelection = + checkStream && + streamOddsEventsData + .flat() + .find((data) => data.fixture_id === convertFromBytes32(gameId) && data.selection === selection) !== undefined; + + const expectedOdds = isUpdatedLiveMarketSelection + ? streamOddsEventsData + .flat() + .reverse() + .filter((data) => data.fixture_id === convertFromBytes32(gameId)) || [] + : expectedApiOdds; + + const expected = expectedOdds.find((data) => data.selection === selection); + + return expected?.price; + }; + + beforeAll(() => { + jest.resetModules(); // Clear the module cache + process.env = { ...OLD_ENV }; // Copy current environment variables + + process.env.LIVE_ODDS_PROVIDERS = "draftkings"; + process.env.DISABLE_OPTIC_ODDS_STREAM_ODDS = "false"; + process.env.DISABLE_OPTIC_ODDS_STREAM_RESULTS = "false"; + + jest.mock("overtime-live-trading-utils"); + + // Mock risk management API + const liveMarketsUtils = require("../../utils/liveMarkets"); + riskManagementSpy = jest.spyOn(liveMarketsUtils, "fetchRiskManagementConfig"); + const config = { teamsMap, bookmakersData, spreadData, leaguesData }; + riskManagementSpy.mockResolvedValue(config); + // Mock stale odds check + utilsStaleOddsSpy = jest.spyOn(liveMarketsUtils, "isOddsTimeStale"); + utilsStaleOddsSpy.mockReturnValue(false); + utilsFilterStaleOddsSpy = jest.spyOn(liveMarketsUtils, "filterStaleOdds"); + utilsFilterStaleOddsSpy.mockImplementation((a) => a); + // Mock Optic Odds fixtures active API + opticOddsGamesSpy = jest.spyOn(liveMarketsUtils, "fetchOpticOddsGamesForLeague"); + opticOddsGamesSpy + .mockResolvedValueOnce(liveSoccerGames) + .mockResolvedValueOnce(liveTennisGames) + .mockResolvedValueOnce(liveSoccerGames) + .mockResolvedValueOnce(liveTennisGames); + // Mock Optic Odds fixtures odds API + const opticOddsFixtureOddsUtils = require("../../utils/opticOdds/opticOddsFixtureOdds"); + opticOddsFixtureOddsSpy = jest.spyOn(opticOddsFixtureOddsUtils, "fetchOpticOddsFixtureOdds"); + opticOddsFixtureOddsSpy.mockResolvedValue(liveApiFixtureOdds); + // Mock Optic Odds fixtures results API + const opticOddsResultsUtils = require("../../utils/opticOdds/opticOddsResults"); + opticOddsResultsSpy = jest.spyOn(opticOddsResultsUtils, "fetchOpticOddsResults"); + opticOddsResultsSpy.mockResolvedValue(liveApiResults); + // Mock start/close streams + startOddsStreamsSpy = jest.spyOn(opticOddsFixtureOddsUtils, "startOddsStreams"); + startOddsStreamsSpy.mockReturnValue(); + closeInactiveOddsStreamsSpy = jest.spyOn(opticOddsFixtureOddsUtils, "closeInactiveOddsStreams"); + closeInactiveOddsStreamsSpy.mockReturnValue(); + }); + + afterAll(() => { + process.env = OLD_ENV; // Restore original environment variables + + riskManagementSpy.mockRestore(); + utilsStaleOddsSpy.mockRestore(); + utilsFilterStaleOddsSpy.mockRestore(); + opticOddsGamesSpy.mockRestore(); + opticOddsFixtureOddsSpy.mockRestore(); + opticOddsResultsSpy.mockRestore(); + startOddsStreamsSpy.mockRestore(); + closeInactiveOddsStreamsSpy.mockRestore(); + }); + + it("checks odds of live markets with streams (processAllMarkets)", async () => { + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { processAllMarkets } = require("../../source/liveMarkets"); + const { + setRedisStreamOddsDataForGameId, + setRedisStreamResultsDataForGameId, + } = require("../mockData/redis/streams"); + + const isTestnet = process.env.IS_TESTNET === "true"; + + // GIVEN X number of ongoing markets on Optimism + await redisClient.set(KEYS.OVERTIME_V2_OPEN_MARKETS[NETWORK.Optimism], JSON.stringify(openMarkets)); + // And some old stream data (will be deleted on first execution) + setRedisStreamOddsDataForGameId(streamOddsEventsData[0][0].fixture_id, isTestnet); + + const oddsStreamsInfoByLeagueMap = new Map(); + const oddsInitializedByLeagueMap = new Map(); + const resultsInitializedByLeagueMap = new Map(); + + // WHEN process X ongoing markets for the first time using API + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN odds should be the same as from API + let liveMarketsOp = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Optimism])); + liveMarketsOp.forEach((liveMarket) => { + const liveOdds = liveMarket.odds.map((odds) => odds.decimal); + + liveOdds.forEach((decimalOdds, i) => { + const selection = i === 0 ? liveMarket.homeTeam : i === 1 ? liveMarket.awayTeam : "Draw"; + const expectedPrice = getExpectedStreamOddsPrice(liveMarket.gameId, selection, false); + + expect(decimalOdds).toBe(expectedPrice); + }); + }); + + // WHEN one game odds have been updated from stream + const gameIds = Array.from(new Map(openMarkets).values()).map((openMarket) => + convertFromBytes32(openMarket.gameId), + ); + gameIds.forEach((gameId) => { + setRedisStreamOddsDataForGameId(gameId, isTestnet); + setRedisStreamResultsDataForGameId(gameId, isTestnet); + }); + + // And second processing is executed + await processAllMarkets( + oddsStreamsInfoByLeagueMap, + oddsInitializedByLeagueMap, + resultsInitializedByLeagueMap, + isTestnet, + ); + + // THEN odds should be updated from from Stream + liveMarketsOp = JSON.parse(await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS[NETWORK.Optimism])); + liveMarketsOp.forEach((liveMarket) => { + const liveOdds = liveMarket.odds.map((odds) => odds.decimal); + + liveOdds.forEach((decimalOdds, i) => { + const selection = i === 0 ? liveMarket.homeTeam : i === 1 ? liveMarket.awayTeam : "Draw"; + const expectedPrice = getExpectedStreamOddsPrice(liveMarket.gameId, selection); + + expect(decimalOdds).toBe(expectedPrice); + }); + }); + }); +}); diff --git a/overtimeV2Api/test/liveMarkets/mockedResponses/opticOddsGameScoresRespones.js b/overtimeV2Api/test/liveMarkets/mockedResponses/opticOddsGameScoresRespones.js deleted file mode 100644 index de796f1a..00000000 --- a/overtimeV2Api/test/liveMarkets/mockedResponses/opticOddsGameScoresRespones.js +++ /dev/null @@ -1,443 +0,0 @@ -const nbaScoresResponse = { - game_id: "77646-14251-2024-06-09", - score_home_total: 105, - score_away_total: 98, - clock: null, - sport: "basketball", - league: "NBA", - period: "3", - status: "In progress", - is_live: true, - weather: null, - capacity: "18624", - away_team: "Chicago Bulls", - home_team: "Miami Heat", - last_play: "End of the Game", - attendance: "19156", - start_date: "2024-04-19T19:00:00-04:00", - description: "Chicago Bulls vs Miami Heat", - away_starter: null, - home_starter: null, - weather_temp: null, - score_away_period_1: 28, - score_away_period_2: 23, - score_away_period_3: 23, - score_away_period_4: 24, - score_home_period_1: 25, - score_home_period_2: 29, - score_home_period_3: 29, - score_home_period_4: 22, - current_outs: null, - runner_on_second: null, - broadcast: "ABC", - current_balls: null, - venue_name: "TD Garden", - current_down_and_distance: null, - runner_on_first: null, - runner_on_third: null, - decision: null, - decision_method: null, - current_strikes: null, - weather_temp_high: null, - home_team_abb: "BOS", - season_week: null, - away_team_abb: "DAL", - venue_location: "Boston, MA", - current_possession: null, - current_batter_name: null, - away_team_name: "Mavericks", - current_pitcher_name: null, - home_team_name: "Celtics", - duration: null, - home_team_city: "Boston", - season_year: "2023", - away_team_city: "Dallas", - season_type: "Postseason", -}; - -const mlbScoresResponse = { - game_id: "39506-34048-2024-07-21-16", - score_home_total: 9, - score_away_total: 6, - clock: null, - sport: "baseball", - league: "MLB", - period: "9", - status: "In progress", - is_live: false, - weather: null, - capacity: "56000", - away_team: "Boston Red Sox", - home_team: "Los Angeles Dodgers", - last_play: null, - attendance: "50824", - start_date: "2024-07-21T23:10:00+00:00", - team_stats: { - away_stats: { - stat_rbi: 6, - stat_hits: 9, - stat_runs: 6, - stat_at_bats: 36, - stat_total_bases: 15, - stat_double_plays: 0, - stat_triple_plays: 0, - stat_batting_walks: 6, - stat_batting_strikeouts: 14, - stat_runners_left_on_base: 10, - stat_scoring_position_successes: 3, - stat_scoring_position_opportunities: 14, - }, - home_stats: { - stat_rbi: 9, - stat_hits: 10, - stat_runs: 9, - stat_at_bats: 34, - stat_total_bases: 30, - stat_double_plays: 1, - stat_triple_plays: 0, - stat_batting_walks: 1, - stat_batting_strikeouts: 5, - stat_runners_left_on_base: 2, - stat_scoring_position_successes: 3, - stat_scoring_position_opportunities: 4, - }, - }, - description: "Boston Red Sox vs Los Angeles Dodgers", - away_starter: "Kutter Crawford", - current_outs: null, - home_starter: "James Paxton", - weather_temp: null, - current_balls: null, - current_strikes: null, - runner_on_first: null, - runner_on_third: null, - runner_on_second: null, - current_batter_name: null, - score_away_period_1: 2, - score_away_period_2: 0, - score_away_period_3: 0, - score_away_period_4: 0, - score_away_period_5: 0, - score_away_period_6: 1, - score_away_period_7: 0, - score_away_period_8: 0, - score_away_period_9: 3, - score_home_period_1: 2, - score_home_period_2: 0, - score_home_period_3: 1, - score_home_period_4: 1, - score_home_period_5: 2, - score_home_period_6: 0, - score_home_period_7: 0, - score_home_period_8: 3, - current_pitcher_name: null, - decision: null, - venue_name: "Dodger Stadium", - current_possession: null, - weather_temp_high: null, - season_week: null, - home_team_name: "Dodgers", - home_team_city: "Los Angeles", - decision_method: null, - away_team_abb: "BOS", - away_team_city: "Boston", - current_down_and_distance: null, - venue_location: "Los Angeles, CA", - season_year: "2024", - broadcast: "ESPN", - away_team_name: "Red Sox", - season_type: "Regular Season", - duration: null, - home_team_abb: "LAD", -}; - -const soccerScoresResponse = { - game_id: "15535-22241-2024-07-06", - score_home_total: 1, - score_away_total: 1, - clock: 83, - sport: "soccer", - league: "UEFA - European Championship", - period: "None", - status: "In progress", - is_live: false, - away_team: "Switzerland", - home_team: "England", - attendance: "46907", - start_date: "2024-07-06T16:00:00+00:00", - description: "England vs Switzerland", - score_away_period_1: 0, - score_away_period_2: 1, - score_away_period_3: 0, - score_away_period_4: 3, - score_home_period_1: 0, - score_home_period_2: 1, - score_home_period_3: 0, - score_home_period_4: 5, - home_team_abb: "ENG", - duration: null, - capacity: null, - current_batter_name: null, - current_strikes: null, - season_type: "Quarter-finals", - runner_on_third: null, - runner_on_first: null, - current_possession: null, - last_play: null, - current_outs: null, - decision: null, - away_starter: null, - weather_temp_high: null, - away_team_city: null, - current_pitcher_name: null, - season_week: null, - away_team_abb: "SUI", - venue_location: null, - venue_name: "Merkur Spiel-Arena", - runner_on_second: null, - current_balls: null, - home_team_city: null, - weather: null, - decision_method: null, - broadcast: null, - season_year: "2024 Germany", - home_starter: null, - weather_temp: null, - current_down_and_distance: null, - away_team_name: null, - home_team_name: null, -}; - -const soccerScoresHalftimeResponse = { - game_id: "15535-22241-2024-07-06", - score_home_total: 1, - score_away_total: 1, - clock: "-", - sport: "soccer", - league: "UEFA - European Championship", - period: "HALF", - status: "In progress", - is_live: false, - away_team: "Switzerland", - home_team: "England", - attendance: "46907", - start_date: "2024-07-06T16:00:00+00:00", - description: "England vs Switzerland", - score_away_period_1: 0, - score_away_period_2: 1, - score_away_period_3: 0, - score_away_period_4: 3, - score_home_period_1: 0, - score_home_period_2: 1, - score_home_period_3: 0, - score_home_period_4: 5, - home_team_abb: "ENG", - duration: null, - capacity: null, - current_batter_name: null, - current_strikes: null, - season_type: "Quarter-finals", - runner_on_third: null, - runner_on_first: null, - current_possession: null, - last_play: null, - current_outs: null, - decision: null, - away_starter: null, - weather_temp_high: null, - away_team_city: null, - current_pitcher_name: null, - season_week: null, - away_team_abb: "SUI", - venue_location: null, - venue_name: "Merkur Spiel-Arena", - runner_on_second: null, - current_balls: null, - home_team_city: null, - weather: null, - decision_method: null, - broadcast: null, - season_year: "2024 Germany", - home_starter: null, - weather_temp: null, - current_down_and_distance: null, - away_team_name: null, - home_team_name: null, -}; - -const tennisScoresATPResponse = { - game_id: "42461-15533-2024-26", - score_home_total: 1, - score_away_total: 0, - clock: null, - sport: "tennis", - league: "ATP", - period: "2", - status: "In progress", - is_live: true, - away_team: "Roberto Carballes Baena", - home_team: "Gael Monfils", - attendance: null, - start_date: "2024-06-25T16:30:00+00:00", - description: "Gael Monfils v Roberto Carballes Baena", - score_away_period_1: 3, - score_away_period_2: 4, - score_home_period_1: 6, - score_home_period_2: 5, - current_batter_name: null, - weather_temp_high: null, - weather: null, - decision_method: null, - decision: null, - away_team_name: null, - broadcast: null, - season_week: "1/16 final", - away_team_abb: null, - season_year: "ATP World Tour 2024", - home_team_abb: null, - current_pitcher_name: null, - current_outs: null, - season_type: "Mallorca Championships 2024", - away_starter: null, - runner_on_third: null, - home_team_name: null, - current_strikes: null, - weather_temp: null, - away_team_city: null, - current_down_and_distance: null, - current_balls: null, - current_possession: null, - duration: null, - venue_name: null, - last_play: null, - runner_on_first: null, - home_team_city: null, - runner_on_second: null, - venue_location: "Mallorca, Spain", - capacity: null, - home_starter: null, -}; - -const volleyballScoresResponseApprove = { - game_id: "21396-35989-2024-06-21", - score_home_total: 0, - score_away_total: 2, - clock: "00:00", - sport: "volleyball", - league: "FIVB - Nations League", - period: "3", - status: "In progress", - is_live: false, - duration: null, - away_team: "Cuba", - home_team: "Bulgaria", - start_date: "2024-06-21T14:30:00+00:00", - description: "Cuba vs Bulgaria", - score_away_period_1: 25, - score_away_period_2: 25, - score_away_period_3: 19, - score_home_period_1: 18, - score_home_period_2: 20, - score_home_period_3: 18, - weather_temp: null, - current_outs: null, - broadcast: null, - home_starter: null, - home_team_name: null, - decision_method: null, - away_team_name: null, - current_balls: null, - current_batter_name: null, - attendance: null, - home_team_city: null, - decision: null, - away_starter: null, - weather: null, - runner_on_second: null, - current_down_and_distance: null, - away_team_abb: "CUB", - season_week: "25", - current_pitcher_name: null, - home_team_abb: "BUL", - current_strikes: null, - weather_temp_high: null, - season_type: null, - capacity: null, - season_year: "2024", - venue_location: null, - runner_on_third: null, - runner_on_first: null, - last_play: null, - current_possession: null, - venue_name: null, - away_team_city: null, -}; - -const volleyballScoresResponseBlock = { - game_id: "21396-35989-2024-06-21", - score_home_total: 2, - score_away_total: 2, - clock: "00:00", - sport: "volleyball", - league: "FIVB - Nations League", - period: "5", - status: "In progress", - is_live: false, - duration: null, - away_team: "Cuba", - home_team: "Bulgaria", - start_date: "2024-06-21T14:30:00+00:00", - description: "Cuba vs Bulgaria", - score_away_period_1: 25, - score_away_period_2: 25, - score_away_period_3: 25, - score_away_period_4: 25, - score_away_period_5: 13, - score_home_period_1: 18, - score_home_period_2: 20, - score_home_period_3: 20, - score_home_period_4: 20, - score_home_period_5: 10, - weather_temp: null, - current_outs: null, - broadcast: null, - home_starter: null, - home_team_name: null, - decision_method: null, - away_team_name: null, - current_balls: null, - current_batter_name: null, - attendance: null, - home_team_city: null, - decision: null, - away_starter: null, - weather: null, - runner_on_second: null, - current_down_and_distance: null, - away_team_abb: "CUB", - season_week: "25", - current_pitcher_name: null, - home_team_abb: "BUL", - current_strikes: null, - weather_temp_high: null, - season_type: null, - capacity: null, - season_year: "2024", - venue_location: null, - runner_on_third: null, - runner_on_first: null, - last_play: null, - current_possession: null, - venue_name: null, - away_team_city: null, -}; - -module.exports = { - nbaScoresResponse, - mlbScoresResponse, - soccerScoresResponse, - soccerScoresHalftimeResponse, - tennisScoresATPResponse, - volleyballScoresResponseApprove, - volleyballScoresResponseBlock, -}; diff --git a/overtimeV2Api/test/mockData/liveGames.js b/overtimeV2Api/test/mockData/liveGames.js new file mode 100644 index 00000000..96e5cd26 --- /dev/null +++ b/overtimeV2Api/test/mockData/liveGames.js @@ -0,0 +1,37 @@ +const liveSoccerGames = [ + { + gameId: "3DA34AEB6566", + startDate: "2024-11-19T19:45:00Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + isLive: true, + status: "live", + sport: "soccer", + league: "UEFA - Nations League", + }, + { + gameId: "7B28437F12ED", + startDate: "2024-11-19T19:45:00Z", + homeTeam: "Malta", + awayTeam: "Andorra", + isLive: true, + status: "live", + sport: "soccer", + league: "UEFA - Nations League", + }, +]; + +const liveTennisGames = [ + { + gameId: "4673726", + startDate: "2024-11-09T14:10:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + isLive: true, + status: "live", + sport: "tennis", + league: "ATP", + }, +]; + +module.exports = { liveSoccerGames, liveTennisGames }; diff --git a/overtimeV2Api/test/mockData/liveMarkets.js b/overtimeV2Api/test/mockData/liveMarkets.js new file mode 100644 index 00000000..fc103f1a --- /dev/null +++ b/overtimeV2Api/test/mockData/liveMarkets.js @@ -0,0 +1,2313 @@ +const liveMarkets = [ + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 0, + type: "winner", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -140.056022408986, + decimal: 1.71399999999988, + normalizedImplied: 0.583430571762, + }, + { + american: 450.00000000055, + decimal: 5.5000000000055, + normalizedImplied: 0.181818181818, + }, + { + american: 234.999999999514, + decimal: 3.34999999999514, + normalizedImplied: 0.298507462687, + }, + ], + proof: [ + "0xa06fac1ee48f3728e895fcd58c202d8e8cfdbfc9c9570df4ac201c04e4f4e0d3", + "0xbcc7572b4f2fbd999c7153e4d00b8b2f9068e3250b7a5560d9699e52b757c334", + "0x3e3e5a1e9704f8a4777ba642983dcc835d251cbc26233adb6a0700b6d0dd391d", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + isV3: true, + childMarkets: [ + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -699.300699299637, + decimal: 1.14300000000022, + normalizedImplied: 0.87489063867, + }, + { + american: 380.000000000768, + decimal: 4.80000000000768, + normalizedImplied: 0.208333333333, + }, + ], + proof: [ + "0x0ba3911e7e0b514e4d6c0a88bb0cacad245bba55502ff979885705aca25e92cd", + "0x2d36472acf8e610f174dd3a42af3b54d790ce02970e97a29ef1c03a7b61cd864", + "0x14499138abb47fdebaeaafa007d5ebe3e31973c131f8d7370fcf171cc6ad72ad", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 999.99999999989, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + ], + proof: [ + "0x6905d9ba6a34c9fae4baf7e6b76d29414d264c4f8a1a59ed4a9c1741cc2c8cb5", + "0x66825bf2a04157ae1e2b1eeb5f12da09621e2f8f042e3e3ad1a75ae5028f8ac2", + "0x1c21ee248780741b1b32d54d2187db431c00b4fe6217e89c3bfd8c4c7da3860f", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 220, + decimal: 3.2, + normalizedImplied: 0.3125, + }, + { + american: -330.033003299755, + decimal: 1.30300000000053, + normalizedImplied: 0.767459708365, + }, + ], + proof: [ + "0x92b4a11864557dd319ea0123d0482dc0b7ce87bb0d611f328c1961560cf9856d", + "0x92af14f4f24c405ad0877c8a836fff55aa52be8d88f4946d4b194fd3e257384c", + "0x758f8b3bb6910d847cba7fc6e0817fee5fb8315538f5b8f1b6bc92d3e85ba529", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -2.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 600.0000000007, + decimal: 7.000000000007, + normalizedImplied: 0.142857142857, + }, + { + american: -1612.90322579523, + decimal: 1.06200000000043, + normalizedImplied: 0.941619585687, + }, + ], + proof: [ + "0xed950ff2ca6a4970897d1612c7ec0e978b3d0cb3a4cd36f4f61202462799a031", + "0xdcbfd9eeb0d912a7c3db1eadca8e076dc3b443189992e768aaf0ffdbc49e6137", + "0xea1e9f5d4d3f5fa40d364bc07411907373e1d4771762fe9a19dc5465a79b15bf", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -149.925037481134, + decimal: 1.66700000000056, + normalizedImplied: 0.599880023995, + }, + { + american: 110.00000000021, + decimal: 2.1000000000021, + normalizedImplied: 0.47619047619, + }, + ], + proof: [ + "0xe9e69b18073ec5cec27b27ff58ef5e1dc1d589f50c069cc9bdcd3411f5fadcb8", + "0x1684c6f41af47f58394511440859462989360ebf7a3277ccec62725fb72bca08", + "0x23f94aeb287085870b29ba54d9eaabc7f50f7081316f362e49b294b3a55fb9e1", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -1, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 134.999999999788, + decimal: 2.34999999999789, + normalizedImplied: 0.425531914894, + }, + { + american: -190.114068441455, + decimal: 1.52599999999892, + normalizedImplied: 0.655307994758, + }, + ], + proof: [ + "0xa395eeb2118e95a59343854ba47afb7a0be5f1341aa4fbb7d00469e476ea72c8", + "0xbcc7572b4f2fbd999c7153e4d00b8b2f9068e3250b7a5560d9699e52b757c334", + "0x3e3e5a1e9704f8a4777ba642983dcc835d251cbc26233adb6a0700b6d0dd391d", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -1098.90109890127, + decimal: 1.09099999999999, + normalizedImplied: 0.916590284143, + }, + { + american: 600.0000000007, + decimal: 7.000000000007, + normalizedImplied: 0.142857142857, + }, + ], + proof: [ + "0x69678da2346ac965e2387a5a2528f9d1ff4373f0766cbe14d772c35cc066f0e7", + "0x66825bf2a04157ae1e2b1eeb5f12da09621e2f8f042e3e3ad1a75ae5028f8ac2", + "0x1c21ee248780741b1b32d54d2187db431c00b4fe6217e89c3bfd8c4c7da3860f", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 2.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 170.00000000027, + decimal: 2.7000000000027, + normalizedImplied: 0.37037037037, + }, + { + american: -234.741784037826, + decimal: 1.42599999999952, + normalizedImplied: 0.70126227209, + }, + ], + proof: [ + "0xafc2ce4a71b303e12177ea4a62f1e83a324dda055bee312e0ab66a37e0187024", + "0xdd3096e6c157e15def5efcfcbcc258c68e91933291770b4aae2bb0b4e60cd876", + "0x0cc09b42088afaba0b2cf52a9950d7e13978f0bca03d82bd29af951e0b7e2c2e", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 3.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 450.00000000055, + decimal: 5.5000000000055, + normalizedImplied: 0.181818181818, + }, + { + american: -751.879699248339, + decimal: 1.13299999999996, + normalizedImplied: 0.882612533098, + }, + ], + proof: [ + "0xd035df316cfef4693582ddae054e6fd341d7cdae2b96c283ae11b2507f5f62b2", + "0x942d4db41c07045bbba5a006bdc5e8e357ee54932f969d3e7f9a31cb44e58328", + "0x23f94aeb287085870b29ba54d9eaabc7f50f7081316f362e49b294b3a55fb9e1", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 4.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 999.99999999989, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0xeab25dc9b5b783523fd260ccd72c03911e0a29a23d50b6213afaf8c9baac0d24", + "0xd085bfa89a92013758db6d2c93cb2c17d196cb0b706cf2d776b83aa0b50105dd", + "0xea1e9f5d4d3f5fa40d364bc07411907373e1d4771762fe9a19dc5465a79b15bf", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -179.856115107992, + decimal: 1.55599999999976, + normalizedImplied: 0.642673521851, + }, + { + american: 134.999999999788, + decimal: 2.34999999999789, + normalizedImplied: 0.425531914894, + }, + ], + proof: [ + "0x45c37f52653885493f0a07965ea1a3585138d60844703a6e555ea81d0f55b464", + "0xef24d6df41708eb05b8ccfd7c9c2b34e4d35c4b7a777c2f658a81dc6a55532e4", + "0x0b6462e5637b5ffe6cb1f1ae4dbeb3d79b118fc03002e43e12e189d19a63c0b5", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 2, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 104.999999999908, + decimal: 2.04999999999908, + normalizedImplied: 0.487804878049, + }, + { + american: -134.952766531813, + decimal: 1.74099999999946, + normalizedImplied: 0.574382538771, + }, + ], + proof: [ + "0x66534e5e9d484e3dfeb8d4712c3116726b5f49fd083a91e0ae6e38214631098d", + "0xe336121976547bd89c9c57724160bedee0bbe17f8f52daa7cdc017a0f4194bad", + "0x1c21ee248780741b1b32d54d2187db431c00b4fe6217e89c3bfd8c4c7da3860f", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10010, + type: "drawNoBet", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -425.531914892834, + decimal: 1.23500000000043, + normalizedImplied: 0.80971659919, + }, + { + american: 300, + decimal: 4, + normalizedImplied: 0.25, + }, + ], + proof: [ + "0x22a17b12f9fa21e3c6aa594905975f248b9f0699262340b6b98a284e08562f5a", + "0x6dc916eb0dce1bc85d666ea6920e35125275ae5d6a5970a636e4e15791b822f0", + "0x0b6462e5637b5ffe6cb1f1ae4dbeb3d79b118fc03002e43e12e189d19a63c0b5", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10003, + type: "doubleChance", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -747.012833754681, + decimal: 1.13386650868818, + normalizedImplied: 0.881938034449, + }, + { + american: -325.98282873901, + decimal: 1.3067646243418, + normalizedImplied: 0.76524875358, + }, + { + american: 108.192090395371, + decimal: 2.08192090395371, + normalizedImplied: 0.480325644505, + }, + ], + proof: [ + "0xec0d556f48e98ba8041cf0028e7c596a838d046ab589cd2c063096d9c8277561", + "0xd085bfa89a92013758db6d2c93cb2c17d196cb0b706cf2d776b83aa0b50105dd", + "0xea1e9f5d4d3f5fa40d364bc07411907373e1d4771762fe9a19dc5465a79b15bf", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10006, + type: "halftimeFulltime", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [ + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + ], + odds: [ + { + american: 160.00000000026, + decimal: 2.6000000000026, + normalizedImplied: 0.384615384615, + }, + { + american: 4999.99999998827, + decimal: 50.9999999998827, + normalizedImplied: 0.0196078431373, + }, + { + american: 1699.99999999856, + decimal: 17.9999999999856, + normalizedImplied: 0.0555555555556, + }, + { + american: 3000.00000000279, + decimal: 31.0000000000279, + normalizedImplied: 0.0322580645161, + }, + { + american: 849.999999997625, + decimal: 9.49999999997625, + normalizedImplied: 0.105263157895, + }, + { + american: 1599.99999999898, + decimal: 16.9999999999898, + normalizedImplied: 0.0588235294118, + }, + { + american: 300, + decimal: 4, + normalizedImplied: 0.25, + }, + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: 329.999999999785, + decimal: 4.29999999999785, + normalizedImplied: 0.232558139535, + }, + ], + proof: [ + "0x722e6a4cc4afe85a9223c377796336a754d24807e109a4f02fc0dbbcacfa24b8", + "0x636e54b2cf5e1a32a26857768e6c91a7b5763981b586c8f13083567ca4043418", + "0x758f8b3bb6910d847cba7fc6e0817fee5fb8315538f5b8f1b6bc92d3e85ba529", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10005, + type: "totalOddEven", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -114.942528735738, + decimal: 1.8699999999992, + normalizedImplied: 0.534759358289, + }, + { + american: -114.942528735738, + decimal: 1.8699999999992, + normalizedImplied: 0.534759358289, + }, + ], + proof: [ + "0x93cec95109d5c3adddc379bd75ab63cccd2e86a6c50f4a0710cd1a580373aa35", + "0x92af14f4f24c405ad0877c8a836fff55aa52be8d88f4946d4b194fd3e257384c", + "0x758f8b3bb6910d847cba7fc6e0817fee5fb8315538f5b8f1b6bc92d3e85ba529", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10100, + type: "correctScore", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + ], + odds: [ + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: 475.000000000863, + decimal: 5.75000000000863, + normalizedImplied: 0.173913043478, + }, + { + american: 1900, + decimal: 20, + normalizedImplied: 0.05, + }, + { + american: 5999.9999999817, + decimal: 60.999999999817, + normalizedImplied: 0.016393442623, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 279.999999999772, + decimal: 3.79999999999772, + normalizedImplied: 0.263157894737, + }, + { + american: 475.000000000863, + decimal: 5.75000000000863, + normalizedImplied: 0.173913043478, + }, + { + american: 700, + decimal: 8, + normalizedImplied: 0.125, + }, + { + american: 1100.00000000048, + decimal: 12.0000000000048, + normalizedImplied: 0.0833333333333, + }, + { + american: 1500, + decimal: 16, + normalizedImplied: 0.0625, + }, + { + american: 3499.99999999712, + decimal: 35.9999999999712, + normalizedImplied: 0.0277777777778, + }, + { + american: 2500.0000000026, + decimal: 26.000000000026, + normalizedImplied: 0.0384615384615, + }, + { + american: 3499.99999999712, + decimal: 35.9999999999712, + normalizedImplied: 0.0277777777778, + }, + { + american: 5500.00000001344, + decimal: 56.0000000001344, + normalizedImplied: 0.0178571428571, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 749.9999999966, + decimal: 8.499999999966, + normalizedImplied: 0.117647058824, + }, + { + american: 2199.99999999816, + decimal: 22.9999999999816, + normalizedImplied: 0.0434782608696, + }, + { + american: 1500, + decimal: 16, + normalizedImplied: 0.0625, + }, + { + american: 5500.00000001344, + decimal: 56.0000000001344, + normalizedImplied: 0.0178571428571, + }, + { + american: 4999.99999998827, + decimal: 50.9999999998827, + normalizedImplied: 0.0196078431373, + }, + { + american: 5500.00000001344, + decimal: 56.0000000001344, + normalizedImplied: 0.0178571428571, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + positionNames: [ + "draw_0_0", + "draw_1_1", + "draw_2_2", + "draw_3_3", + "draw_4_4", + "liechtenstein_1_0", + "liechtenstein_2_0", + "liechtenstein_2_1", + "liechtenstein_3_0", + "liechtenstein_3_1", + "liechtenstein_3_2", + "liechtenstein_4_0", + "liechtenstein_4_1", + "liechtenstein_4_2", + "liechtenstein_4_3", + "san_marino_1_0", + "san_marino_2_0", + "san_marino_2_1", + "san_marino_3_0", + "san_marino_3_1", + "san_marino_3_2", + "san_marino_4_0", + "san_marino_4_1", + "san_marino_4_2", + "san_marino_4_3", + "other", + ], + proof: [ + "0x645f7279e42071ac59273fd6d094dff66990d76dd65c5d649268977906bd5286", + "0xa3bbaeda444feed355d802efd3319fa0e617d6fedbf263d925991c3e887cd5ee", + "0xdd197b62edf9cb47806d7b39a143d23ad350f7911ad8374d5003f3a7823467ec", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10009, + type: "bothTeamsToScore", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 150, + decimal: 2.5, + normalizedImplied: 0.4, + }, + { + american: -200.0000000003, + decimal: 1.49999999999925, + normalizedImplied: 0.666666666667, + }, + ], + proof: [ + "0x6895a47d1b65a1f6f6d7f6a0aa1f8822fc427cbb4f0fa602d6fecf1090b45d10", + "0xe336121976547bd89c9c57724160bedee0bbe17f8f52daa7cdc017a0f4194bad", + "0x1c21ee248780741b1b32d54d2187db431c00b4fe6217e89c3bfd8c4c7da3860f", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -425.531914892834, + decimal: 1.23500000000043, + normalizedImplied: 0.80971659919, + }, + { + american: 274.999999999531, + decimal: 3.74999999999531, + normalizedImplied: 0.266666666667, + }, + ], + proof: [ + "0x9d76e3ddd4d0869246bbe7d241ae532b5a945fdc193d753dcb55a3a1d92106c3", + "0xf491dbf55b9537e67e564907fa4196827f0cb2bebe5e6d211e14e0991a1caaf1", + "0x3e3e5a1e9704f8a4777ba642983dcc835d251cbc26233adb6a0700b6d0dd391d", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 2.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 400, + decimal: 5, + normalizedImplied: 0.2, + }, + { + american: -699.300699299637, + decimal: 1.14300000000022, + normalizedImplied: 0.87489063867, + }, + ], + proof: [ + "0x1a6487c5e22b9e4178934900db9f72498dc32d62416414a44352ddde54907c3a", + "0x2d36472acf8e610f174dd3a42af3b54d790ce02970e97a29ef1c03a7b61cd864", + "0x14499138abb47fdebaeaafa007d5ebe3e31973c131f8d7370fcf171cc6ad72ad", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 3.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 999.99999999989, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x9ee7fd80ace04b53a3b70d1d42a48178a1ad20202b6d90762367165bd6eba3f6", + "0xf491dbf55b9537e67e564907fa4196827f0cb2bebe5e6d211e14e0991a1caaf1", + "0x3e3e5a1e9704f8a4777ba642983dcc835d251cbc26233adb6a0700b6d0dd391d", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 475.000000000863, + decimal: 5.75000000000863, + normalizedImplied: 0.173913043478, + }, + { + american: -900.900900901901, + decimal: 1.11099999999988, + normalizedImplied: 0.900090009001, + }, + ], + proof: [ + "0x1a7618981e7805386fea8a6c019a6c794df75b581292d4f8d4ca46201feafbb8", + "0x6dc916eb0dce1bc85d666ea6920e35125275ae5d6a5970a636e4e15791b822f0", + "0x0b6462e5637b5ffe6cb1f1ae4dbeb3d79b118fc03002e43e12e189d19a63c0b5", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 125.000000000225, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + { + american: -170.068027210624, + decimal: 1.5880000000009, + normalizedImplied: 0.629722921914, + }, + ], + proof: [ + "0xb0e2b86f00745443f0c2b6fbc8cb1e2882799d49c700da9bb3e3ec4346bcc773", + "0xdd3096e6c157e15def5efcfcbcc258c68e91933291770b4aae2bb0b4e60cd876", + "0x0cc09b42088afaba0b2cf52a9950d7e13978f0bca03d82bd29af951e0b7e2c2e", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -110.011001100104, + decimal: 1.90900000000005, + normalizedImplied: 0.523834468308, + }, + { + american: -130.039011703332, + decimal: 1.76900000000106, + normalizedImplied: 0.565291124929, + }, + ], + proof: [ + "0x709c84b3212653c00a5be70f2e0ad2955ef27838d49af13cb815975c764af3c8", + "0x636e54b2cf5e1a32a26857768e6c91a7b5763981b586c8f13083567ca4043418", + "0x758f8b3bb6910d847cba7fc6e0817fee5fb8315538f5b8f1b6bc92d3e85ba529", + "0x92df7c3545ad185d7f39f59293aa0cc4ddb31c5c4d2281bb8d7219215265ccd5", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10021, + type: "firstPeriodWinner", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 145.000000000074, + decimal: 2.45000000000074, + normalizedImplied: 0.408163265306, + }, + { + american: 475.000000000863, + decimal: 5.75000000000863, + normalizedImplied: 0.173913043478, + }, + { + american: -110.011001100104, + decimal: 1.90900000000005, + normalizedImplied: 0.523834468308, + }, + ], + proof: [ + "0x048235a0b5c113d2d2a463e9a5087ea9ead28f5e5b03c696e3b6068669cd2eb9", + "0xed1cee0c44682648e4e88dcde646db2b539a51e4e3e8e948398b181f8b80c9fb", + "0x14499138abb47fdebaeaafa007d5ebe3e31973c131f8d7370fcf171cc6ad72ad", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 274.999999999531, + decimal: 3.74999999999531, + normalizedImplied: 0.266666666667, + }, + { + american: -425.531914892834, + decimal: 1.23500000000043, + normalizedImplied: 0.80971659919, + }, + ], + proof: [ + "0x615838ef5608dfad5d6debec3eda7234d97d8aea0f7308c06020bdf67a4adcd2", + "0xc903042d2c46fa12a5ea771a09a31884ddd5d99d61aa696afa8d84351e27be54", + "0xdd197b62edf9cb47806d7b39a143d23ad350f7911ad8374d5003f3a7823467ec", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 2.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: -4000.0000000738, + decimal: 1.02499999999954, + normalizedImplied: 0.975609756098, + }, + ], + proof: [ + "0xb3629daee5c2c555b13df8a9b220ec278fae91e7d76e836a79b4fd6bdc5ca416", + "0xba75c4076135454342cef08e43847366eebd55d43e1b49df2901920a117a736f", + "0xcfdaf644bbed0387085bfe52cf7c4bc82899ef7392fc3391a5605fc73dbce60b", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -175.131348511089, + decimal: 1.57100000000096, + normalizedImplied: 0.636537237428, + }, + { + american: 125.000000000225, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + ], + proof: [ + "0xbc23b750b9fa50c16109a98faaf5a516ee1c0bda28c741f146cb46158ab78139", + "0xde8ee1b426bd9c8aa7f2594ce91dee488b9cb80687f80aa5cf6e51e548ddab91", + "0xcfdaf644bbed0387085bfe52cf7c4bc82899ef7392fc3391a5605fc73dbce60b", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10041, + type: "firstPeriodSpread", + line: -0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 139.999999999808, + decimal: 2.39999999999808, + normalizedImplied: 0.416666666667, + }, + { + american: -200.0000000003, + decimal: 1.49999999999925, + normalizedImplied: 0.666666666667, + }, + ], + proof: [ + "0xc85bf90d3871fc8ec341f1d87f5273db579812c40e7348471255f4d3f976bebb", + "0xde8ee1b426bd9c8aa7f2594ce91dee488b9cb80687f80aa5cf6e51e548ddab91", + "0xcfdaf644bbed0387085bfe52cf7c4bc82899ef7392fc3391a5605fc73dbce60b", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10081, + type: "firstPeriodTotalOddEven", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 120.00000000022, + decimal: 2.2000000000022, + normalizedImplied: 0.454545454545, + }, + { + american: -160.00000000026, + decimal: 1.62499999999898, + normalizedImplied: 0.615384615385, + }, + ], + proof: [ + "0xa8ecb1c40b8415dbf3d9fa0c1fe210f1816d7e751a64a4a31106f993800cf7bd", + "0xeedf462729a987ba5947e4fbf082b5512a71cce36c26981d5ee600320b24a17e", + "0x0cc09b42088afaba0b2cf52a9950d7e13978f0bca03d82bd29af951e0b7e2c2e", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10101, + type: "firstPeriodBothTeamsToScore", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 450.00000000055, + decimal: 5.5000000000055, + normalizedImplied: 0.181818181818, + }, + { + american: -1785.71428572506, + decimal: 1.05599999999966, + normalizedImplied: 0.94696969697, + }, + ], + proof: [ + "0xdd3412135f705b867477038e8aeb5e8f2f21a5737030dcc11a83b0557833e9dd", + "0x942d4db41c07045bbba5a006bdc5e8e357ee54932f969d3e7f9a31cb44e58328", + "0x23f94aeb287085870b29ba54d9eaabc7f50f7081316f362e49b294b3a55fb9e1", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10111, + type: "firstPeriodTotalHomeTeam", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 550.00000000065, + decimal: 6.5000000000065, + normalizedImplied: 0.153846153846, + }, + { + american: -1000.0000000011, + decimal: 1.09999999999989, + normalizedImplied: 0.909090909091, + }, + ], + proof: [ + "0xa9881a9de45ae9d2ea3b967f9f1a25a481120eccffbad9cbf41e01852b04f67c", + "0xeedf462729a987ba5947e4fbf082b5512a71cce36c26981d5ee600320b24a17e", + "0x0cc09b42088afaba0b2cf52a9950d7e13978f0bca03d82bd29af951e0b7e2c2e", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10112, + type: "firstPeriodTotalAwayTeam", + line: 1.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 1199.99999999961, + decimal: 12.9999999999961, + normalizedImplied: 0.0769230769231, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0xf5855b0672120168a69223fabc0176158a528ee6111c110122b61a810f9bca69", + "0xdcbfd9eeb0d912a7c3db1eadca8e076dc3b443189992e768aaf0ffdbc49e6137", + "0xea1e9f5d4d3f5fa40d364bc07411907373e1d4771762fe9a19dc5465a79b15bf", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10111, + type: "firstPeriodTotalHomeTeam", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 100, + decimal: 2, + normalizedImplied: 0.5, + }, + { + american: -130.039011703332, + decimal: 1.76900000000106, + normalizedImplied: 0.565291124929, + }, + ], + proof: [ + "0xe9683c91857b2a43033fed846e1b3a1bb638b197ed7a0082678f889ba4f95607", + "0x1684c6f41af47f58394511440859462989360ebf7a3277ccec62725fb72bca08", + "0x23f94aeb287085870b29ba54d9eaabc7f50f7081316f362e49b294b3a55fb9e1", + "0xfbb0074bf17a749b4ad9b90db596818cb0b7ad1a023f6c0cce0e9c0b1be8d324", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10112, + type: "firstPeriodTotalAwayTeam", + line: 0.5, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 250.00000000035, + decimal: 3.5000000000035, + normalizedImplied: 0.285714285714, + }, + { + american: -359.712230216823, + decimal: 1.27799999999923, + normalizedImplied: 0.782472613459, + }, + ], + proof: [ + "0xb9096d6312dc23b9b9899df55b4e078f39054e1f6cf8751a50f3eea3d24d12b1", + "0xba75c4076135454342cef08e43847366eebd55d43e1b49df2901920a117a736f", + "0xcfdaf644bbed0387085bfe52cf7c4bc82899ef7392fc3391a5605fc73dbce60b", + "0xde5618855fa7b94c885c9a2ca11cbecbac67aef128491499a3f845a2b883c3ea", + "0x80974b0005f2b5c5ea75d1717a23c7a4c907839a585aadee58d0c4baacdfc4e8", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10022, + type: "secondPeriodWinner", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 110.00000000021, + decimal: 2.1000000000021, + normalizedImplied: 0.47619047619, + }, + { + american: 425.000000000525, + decimal: 5.25000000000525, + normalizedImplied: 0.190476190476, + }, + { + american: 120.00000000022, + decimal: 2.2000000000022, + normalizedImplied: 0.454545454545, + }, + ], + proof: [ + "0x615ea1cba3b44f05f8ee38ca005ea632375611cf28b9d5497b27aa08198a40b8", + "0xa3bbaeda444feed355d802efd3319fa0e617d6fedbf263d925991c3e887cd5ee", + "0xdd197b62edf9cb47806d7b39a143d23ad350f7911ad8374d5003f3a7823467ec", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10082, + type: "secondPeriodTotalOddEven", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 104.999999999908, + decimal: 2.04999999999908, + normalizedImplied: 0.487804878049, + }, + { + american: -140.056022408986, + decimal: 1.71399999999988, + normalizedImplied: 0.583430571762, + }, + ], + proof: [ + "0x73648bae401da3606b3fe66aa6f1b2fc8f1d2aea42a546f651f3910b71b062ba", + "0xf8a7d59b401bbaaf2c5d3f3ed5a42888ff9c4fbb2e973c24d2365303b35fc372", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10102, + type: "secondPeriodBothTeamsToScore", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 339.999999999472, + decimal: 4.39999999999472, + normalizedImplied: 0.227272727273, + }, + { + american: -900.900900901901, + decimal: 1.11099999999988, + normalizedImplied: 0.900090009001, + }, + ], + proof: [ + "0x021699842af3a477d053763c08456f800b3f4415d146bffd8e482cdd65d8f413", + "0xed1cee0c44682648e4e88dcde646db2b539a51e4e3e8e948398b181f8b80c9fb", + "0x14499138abb47fdebaeaafa007d5ebe3e31973c131f8d7370fcf171cc6ad72ad", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10015, + type: "firstPeriodDoubleChance", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -1370.53922338958, + decimal: 1.07296398256497, + normalizedImplied: 0.931997733614, + }, + { + american: -139.2781316346, + decimal: 1.71798780487918, + normalizedImplied: 0.582076308784, + }, + { + american: -230.849220103685, + decimal: 1.43318318318375, + normalizedImplied: 0.697747511786, + }, + ], + proof: [ + "0x56ed68ba9ba1405c8f731e62844661842d0d954c971a59878184e76b69491468", + "0xc903042d2c46fa12a5ea771a09a31884ddd5d99d61aa696afa8d84351e27be54", + "0xdd197b62edf9cb47806d7b39a143d23ad350f7911ad8374d5003f3a7823467ec", + "0xf8709cc8a5ebc9eb3dc03e9199901365d8e3b2f748dc8f5fe309766146a696da", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + { + gameId: "0x3030394130434633343445450000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10016, + type: "secondPeriodDoubleChance", + line: 0, + maturity: 1731959100, + maturityDate: "2024-11-18T19:45:00.000Z", + homeTeam: "Liechtenstein", + awayTeam: "San Marino", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -1343.7499999806, + decimal: 1.07441860465224, + normalizedImplied: 0.930735930735, + }, + { + american: -199.9999999994, + decimal: 1.5000000000015, + normalizedImplied: 0.666666666666, + }, + { + american: -181.707317072659, + decimal: 1.55033557047135, + normalizedImplied: 0.645021645021, + }, + ], + proof: [ + "0x540d9873892f07d5703c88ee6fd2e47641f41d6c86c43c3ad02539f7666401bb", + "0xef24d6df41708eb05b8ccfd7c9c2b34e4d35c4b7a777c2f658a81dc6a55532e4", + "0x0b6462e5637b5ffe6cb1f1ae4dbeb3d79b118fc03002e43e12e189d19a63c0b5", + "0xf9acae8254c329807af8c932376d6b587c6a611a905658a4a9699666913743ed", + "0x80637578add56c26fea05ef3c490dc45d4a4239e238d644de6d6a4112a242da3", + "0x20e31e07d357ce06a783a29a13f5eac28664182ecd6e7bee3b41ba131cc606eb", + ], + }, + ], + statusCode: "ongoing", + }, +]; + +module.exports = { liveMarkets }; diff --git a/overtimeV2Api/test/mockData/openMarkets.js b/overtimeV2Api/test/mockData/openMarkets.js new file mode 100644 index 00000000..954469dd --- /dev/null +++ b/overtimeV2Api/test/mockData/openMarkets.js @@ -0,0 +1,5313 @@ +const openMarkets = [ + [ + "0x3344413334414542363536360000000000000000000000000000000000000000", + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 0, + type: "winner", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: -194.93177387874443, + decimal: 1.513000000001047, + normalizedImplied: 0.660938532716, + }, + { + american: 329.99999999978498, + decimal: 4.2999999999978499, + normalizedImplied: 0.232558139535, + }, + ], + proof: [ + "0x73ad7d15f8544374521760327d1298be6e8cceb935d2006ae8e8bc04dde968ad", + "0xcdd0d061f209de8d79555a8b9852451b935bbfcd79d0e0dc82d61794f09da327", + "0x3b832be4bf6ff02145e363f4790d0d3a8941c0ba2f6d4e1aad861ce3661c8e1e", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + childMarkets: [ + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 145.00000000007354, + decimal: 2.450000000000735, + normalizedImplied: 0.408163265306, + }, + { + american: -210.0840336136851, + decimal: 1.4759999999994569, + normalizedImplied: 0.6775067750679999, + }, + ], + proof: [ + "0xa22c3c20b9e6b5c1b79948ca09c9fa40a645888c764b4b25139bf19dc8e77f57", + "0x60269616380c0c14a76ab1fbb1397b08e98cc9899631a78fa86ff70f099c0457", + "0x8fccdac9bc2a04a6343795f896ed52b5d0385149b1043747bf412c8a7e0c7264", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -574.712643676269, + decimal: 1.1740000000005729, + normalizedImplied: 0.851788756388, + }, + { + american: 339.99999999947206, + decimal: 4.39999999999472, + normalizedImplied: 0.227272727273, + }, + ], + proof: [ + "0x59ab82526baacd9022400214969c283078adb8306531e72a25cddc83be693922", + "0x58d876dc8ea07848b206f61f2ae76edb13af88fa93ebc094572d525d768f999a", + "0x11dbde7c8b5787249895d8e2461f6faaa7840b92c6814ad4d27f32ce9fe2f1a8", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -2499.9999999688009, + decimal: 1.0400000000004993, + normalizedImplied: 0.961538461538, + }, + { + american: 749.9999999965999, + decimal: 8.499999999965999, + normalizedImplied: 0.117647058824, + }, + ], + proof: [ + "0xca5f24c993ce430278d08b756f5624060ca04a622ee52aac45b09e10c91b4c56", + "0xa293b2d6eb170743b247a4d0d3b0165ef17ba2ec641803e8fc2e5bd3f2233b62", + "0x3b3103ed45225236e79275f554f1f77ab26ed121144aa065ca397e203eb6b4e3", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 425.000000000525, + decimal: 5.25000000000525, + normalizedImplied: 0.190476190476, + }, + { + american: -800.0000000008996, + decimal: 1.1249999999998595, + normalizedImplied: 0.888888888889, + }, + ], + proof: [ + "0x8a4389daa9d1e143ec8c2bb26a87d8f1d45beac084ae018769eabb17c0287a03", + "0x29d32a1498ebc210396328e83c728224a788f6e9577456bc0bb9608c9d8bde4e", + "0x1d43abc1975a9c4561643e55c919acbff4faea59e7cd6f4cfdbf4425b4435e3f", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -190.11406844145507, + decimal: 1.5259999999989198, + normalizedImplied: 0.655307994758, + }, + { + american: 134.99999999978849, + decimal: 2.349999999997885, + normalizedImplied: 0.425531914894, + }, + ], + proof: [ + "0x284878f90036cd1b639e76f07eb621ea30b276c791ded4b40b50e86d48ee15b1", + "0xf23deaa91f7367265dd62568a8a8cf2b819615f05d8bf05a5dc89396c371cdf0", + "0xdc3d1dffa57dc8401194728463419168cb1414d6af5f677b10b205ade280cd56", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 1, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -110.01100110010353, + decimal: 1.9090000000000536, + normalizedImplied: 0.523834468308, + }, + { + american: -125.00000000022499, + decimal: 1.79999999999856, + normalizedImplied: 0.555555555556, + }, + ], + proof: [ + "0x19122366478896f48061b198f52dd88243c58cbc06400788ade99f89f6c1ad26", + "0x785e0c20a8b43b055b8a8c916b2cdbaf6de41531107706ddf0687c527c86c851", + "0x162869dc871925284538cd98b2ba8eade508b7a067e9dc29aca94ca1c869adf9", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 1100.0000000004803, + decimal: 12.000000000004802, + normalizedImplied: 0.0833333333333, + }, + ], + proof: [ + "0x97ce98aec1a6a490e9b9ab81f8ceef349ee26c10bf36093da74f1632e85856e7", + "0x27d9b98443a8aa45b3294ebfedbef7ca8c218bc79ee90ce37944c4c802ac316f", + "0x8fccdac9bc2a04a6343795f896ed52b5d0385149b1043747bf412c8a7e0c7264", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -450.45045045151695, + decimal: 1.2219999999994745, + normalizedImplied: 0.818330605565, + }, + { + american: 300, + decimal: 4, + normalizedImplied: 0.25, + }, + ], + proof: [ + "0xe567c3d85e9839397c68fa0bf4d5027ba87a3eb182251ec7dfdba7d2bef35d10", + "0x5644332c739faee9583eaff2e48d94a410659518d60f037b014a4851b917e1c0", + "0x2303d223c10a0e3308effbafa946d1a642632dbf35a6a182c01c95c06ac07230", + "0xf617099c9bfbc284e190eb22873a88e10785dfd4dfab6d5829a2523e39e0b36f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 185.0000000003705, + decimal: 2.850000000003705, + normalizedImplied: 0.350877192982, + }, + { + american: -250.00000000034994, + decimal: 1.3999999999994402, + normalizedImplied: 0.714285714286, + }, + ], + proof: [ + "0xf7377387c7f07c5913e2f3d85367d7cfb1b19c18da194ad317706d2b1b47b818", + "0x65b02745826b266c7606c135c1f0c4acbe0708f246b2ab40197103d63508d8dc", + "0x2303d223c10a0e3308effbafa946d1a642632dbf35a6a182c01c95c06ac07230", + "0xf617099c9bfbc284e190eb22873a88e10785dfd4dfab6d5829a2523e39e0b36f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 4.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 425.000000000525, + decimal: 5.25000000000525, + normalizedImplied: 0.190476190476, + }, + { + american: -699.3006992996373, + decimal: 1.1430000000002172, + normalizedImplied: 0.87489063867, + }, + ], + proof: [ + "0xc59a7816b0ad1efa447a7e4a29d57e4e0087aa1eaf0eef98fa528f07f44bc674", + "0xa293b2d6eb170743b247a4d0d3b0165ef17ba2ec641803e8fc2e5bd3f2233b62", + "0x3b3103ed45225236e79275f554f1f77ab26ed121144aa065ca397e203eb6b4e3", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 5.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: -3030.3030303208586, + decimal: 1.0329999999998059, + normalizedImplied: 0.968054211036, + }, + ], + proof: [ + "0xd3be1858117ecad66b29006957dd0b61956fdfa11da3a0b1ba0624a99d862240", + "0x8e7e6bc56737ae7ca68d583856ae69f496df17c56cd2baeb4a81c083394e37bf", + "0x44ccdc17672a25f3f1028be467907a1920664225cee3e1f6f4c6f791b4769ab5", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -134.9527665318125, + decimal: 1.7409999999994586, + normalizedImplied: 0.574382538771, + }, + { + american: 104.99999999990775, + decimal: 2.0499999999990776, + normalizedImplied: 0.487804878049, + }, + ], + proof: [ + "0x2b3d26525dfbff588f7427dccbc22487e387c17e26862cb1f06341045bc436e4", + "0xcb8cc43b341aeaedc018cb291d05c1a8e8a6c95660d47a958c096dc17162c90e", + "0xdc3d1dffa57dc8401194728463419168cb1414d6af5f677b10b205ade280cd56", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 3, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 125.00000000022502, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + { + american: -160.00000000026, + decimal: 1.6249999999989844, + normalizedImplied: 0.615384615385, + }, + ], + proof: [ + "0x70b2beed64fd260faf3f0a5cef0ac70a17a0fc82b5cffc07eff648d07cc6c4ee", + "0x211089dd62777dd62e127799f6c11f1e337b5b4d4692dfc3d4c56d52374f6c07", + "0x3b832be4bf6ff02145e363f4790d0d3a8941c0ba2f6d4e1aad861ce3661c8e1e", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10010, + type: "drawNoBet", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 369.99999999957699, + decimal: 4.69999999999577, + normalizedImplied: 0.212765957447, + }, + { + american: -549.4505494493577, + decimal: 1.1820000000003948, + normalizedImplied: 0.846023688663, + }, + ], + proof: [ + "0x281c7617944608c2f0eb122895a3474e526663e605439f7fb0821cdaae7cf969", + "0xf23deaa91f7367265dd62568a8a8cf2b819615f05d8bf05a5dc89396c371cdf0", + "0xdc3d1dffa57dc8401194728463419168cb1414d6af5f677b10b205ade280cd56", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10003, + type: "doubleChance", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 150.48543689292178, + decimal: 2.5048543689292179, + normalizedImplied: 0.399224806202, + }, + { + american: -480.06389776316106, + decimal: 1.2083056036205724, + normalizedImplied: 0.827605199383, + }, + { + american: -838.9377976589935, + decimal: 1.119198348529586, + normalizedImplied: 0.893496672251, + }, + ], + proof: [ + "0xe18e3d6374cda65a547da82889e548a24207a42ff120719001f004cc54dfeb9c", + "0xa2d7c0b2fc7ababe57e6eba3cef52a9a99da7b283545f9526542f9b24a38853b", + "0x44ccdc17672a25f3f1028be467907a1920664225cee3e1f6f4c6f791b4769ab5", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10006, + type: "halftimeFulltime", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [ + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + ], + odds: [ + { + american: 999.9999999998901, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + { + american: 2000.0000000021, + decimal: 21.000000000021, + normalizedImplied: 0.047619047619, + }, + { + american: 1500, + decimal: 16, + normalizedImplied: 0.0625, + }, + { + american: 4499.99999999632, + decimal: 45.9999999999632, + normalizedImplied: 0.0217391304348, + }, + { + american: 114.99999999989248, + decimal: 2.1499999999989249, + normalizedImplied: 0.46511627907, + }, + { + american: 1599.99999999898, + decimal: 16.9999999999898, + normalizedImplied: 0.0588235294118, + }, + { + american: 1199.9999999996099, + decimal: 12.9999999999961, + normalizedImplied: 0.0769230769231, + }, + { + american: 310.000000000656, + decimal: 4.10000000000656, + normalizedImplied: 0.243902439024, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + ], + proof: [ + "0x88da1ea5c1c335265644261dc638276218f5c7f0bb3b3933e2f96fe4c9b1d1fd", + "0x29d32a1498ebc210396328e83c728224a788f6e9577456bc0bb9608c9d8bde4e", + "0x1d43abc1975a9c4561643e55c919acbff4faea59e7cd6f4cfdbf4425b4435e3f", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10005, + type: "totalOddEven", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -114.94252873573842, + decimal: 1.8699999999991959, + normalizedImplied: 0.534759358289, + }, + { + american: -120.04801920763527, + decimal: 1.8330000000003318, + normalizedImplied: 0.545553737043, + }, + ], + proof: [ + "0x215e7ab1cdf119ff8bac3f5c95fa9bb379fe2a7a79f01682fa6ad46fa907d9e9", + "0x9748054e34a7863692b244864871ade415af3b136cdfd92fa7d650e11ada5714", + "0x162869dc871925284538cd98b2ba8eade508b7a067e9dc29aca94ca1c869adf9", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10100, + type: "correctScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + ], + odds: [ + { + american: 1199.9999999996099, + decimal: 12.9999999999961, + normalizedImplied: 0.0769230769231, + }, + { + american: 550.00000000065, + decimal: 6.5000000000065, + normalizedImplied: 0.153846153846, + }, + { + american: 1299.9999999994403, + decimal: 13.999999999994401, + normalizedImplied: 0.0714285714286, + }, + { + american: 4499.99999999632, + decimal: 45.9999999999632, + normalizedImplied: 0.0217391304348, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 1199.9999999996099, + decimal: 12.9999999999961, + normalizedImplied: 0.0769230769231, + }, + { + american: 3000.00000000279, + decimal: 31.0000000000279, + normalizedImplied: 0.0322580645161, + }, + { + american: 1399.9999999992502, + decimal: 14.9999999999925, + normalizedImplied: 0.0666666666667, + }, + { + american: 5999.9999999817, + decimal: 60.999999999817, + normalizedImplied: 0.016393442623, + }, + { + american: 4000.0000000065599, + decimal: 41.0000000000656, + normalizedImplied: 0.0243902439024, + }, + { + american: 3000.00000000279, + decimal: 31.0000000000279, + normalizedImplied: 0.0322580645161, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 7500.000000024321, + decimal: 76.0000000002432, + normalizedImplied: 0.0131578947368, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 7500.000000024321, + decimal: 76.0000000002432, + normalizedImplied: 0.0131578947368, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: 600.0000000007001, + decimal: 7.000000000007001, + normalizedImplied: 0.142857142857, + }, + { + american: 800.0000000009001, + decimal: 9.000000000009, + normalizedImplied: 0.111111111111, + }, + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: 1900, + decimal: 20, + normalizedImplied: 0.05, + }, + { + american: 1599.99999999898, + decimal: 16.9999999999898, + normalizedImplied: 0.0588235294118, + }, + { + american: 1699.9999999985599, + decimal: 17.999999999985599, + normalizedImplied: 0.0555555555556, + }, + { + american: 3000.00000000279, + decimal: 31.0000000000279, + normalizedImplied: 0.0322580645161, + }, + { + american: 5999.9999999817, + decimal: 60.999999999817, + normalizedImplied: 0.016393442623, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + positionNames: [ + "draw_0_0", + "draw_1_1", + "draw_2_2", + "draw_3_3", + "draw_4_4", + "montenegro_1_0", + "montenegro_2_0", + "montenegro_2_1", + "montenegro_3_0", + "montenegro_3_1", + "montenegro_3_2", + "montenegro_4_0", + "montenegro_4_1", + "montenegro_4_2", + "montenegro_4_3", + "türkiye_1_0", + "türkiye_2_0", + "türkiye_2_1", + "türkiye_3_0", + "türkiye_3_1", + "türkiye_3_2", + "türkiye_4_0", + "türkiye_4_1", + "türkiye_4_2", + "türkiye_4_3", + "other", + ], + proof: [ + "0x51cf3277b7e282a4bf1e9a24c83eb858823f57178858e530148cebae2a1cb442", + "0x58d876dc8ea07848b206f61f2ae76edb13af88fa93ebc094572d525d768f999a", + "0x11dbde7c8b5787249895d8e2461f6faaa7840b92c6814ad4d27f32ce9fe2f1a8", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10009, + type: "bothTeamsToScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -120.04801920763527, + decimal: 1.8330000000003318, + normalizedImplied: 0.545553737043, + }, + { + american: -110.01100110010353, + decimal: 1.9090000000000536, + normalizedImplied: 0.523834468308, + }, + ], + proof: [ + "0xfe95eb442f44355f9d1ad1d780a32f9ef317a3922822b804ea5a8b9915564820", + "0x00944418f80efe165f8f46fb15f88e80d8936e4b1d7ec62b7b35203753df2536", + "0xf617099c9bfbc284e190eb22873a88e10785dfd4dfab6d5829a2523e39e0b36f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 290.00000000039008, + decimal: 3.9000000000039005, + normalizedImplied: 0.25641025641, + }, + { + american: -473.93364928851187, + decimal: 1.2110000000002617, + normalizedImplied: 0.825763831544, + }, + ], + proof: [ + "0x34d9e589bdb322d84adfde1d953fc6a6fe762223b55be1fc0230789a94ec414c", + "0x5a416f02dc91bda6919d932dbd7a1d787249776c418c14e6aed99554dc1efe8f", + "0xdb00caf95491383d190b48a66d9cb1ce5588f924bccb0967ac301c53e59e36c9", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x3e7ffb9575c9721c1a2c9e3b3063fa33b5f199b7f36f6be22d6fa7a0a1fff9d2", + "0x9e4c94a00db9c8d91d9e0e455cace32ea40139b14848da0cd52863342b8907b8", + "0xdb00caf95491383d190b48a66d9cb1ce5588f924bccb0967ac301c53e59e36c9", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -1098.9010989012709, + decimal: 1.0909999999999858, + normalizedImplied: 0.916590284143, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + ], + proof: [ + "0xd97052c83923f9a6d8d9099c0f266039b2ee90c54bd3aa5b10de4b7f0d603d00", + "0xa2d7c0b2fc7ababe57e6eba3cef52a9a99da7b283545f9526542f9b24a38853b", + "0x44ccdc17672a25f3f1028be467907a1920664225cee3e1f6f4c6f791b4769ab5", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 179.99999999988803, + decimal: 2.7999999999988804, + normalizedImplied: 0.357142857143, + }, + { + american: -259.7402597404933, + decimal: 1.3849999999996539, + normalizedImplied: 0.72202166065, + }, + ], + proof: [ + "0xfd85dccb0eba5927fc7020ff2e3869ff493d8288c9787022f2ff1cf9f5af9048", + "0x65b02745826b266c7606c135c1f0c4acbe0708f246b2ab40197103d63508d8dc", + "0x2303d223c10a0e3308effbafa946d1a642632dbf35a6a182c01c95c06ac07230", + "0xf617099c9bfbc284e190eb22873a88e10785dfd4dfab6d5829a2523e39e0b36f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 475.0000000008625, + decimal: 5.750000000008625, + normalizedImplied: 0.173913043478, + }, + { + american: -1000.0000000011005, + decimal: 1.09999999999989, + normalizedImplied: 0.909090909091, + }, + ], + proof: [ + "0x294b315aa9237f79abcfdd43b38679147cb68120ea25a9429b173065264a6c83", + "0xcb8cc43b341aeaedc018cb291d05c1a8e8a6c95660d47a958c096dc17162c90e", + "0xdc3d1dffa57dc8401194728463419168cb1414d6af5f677b10b205ade280cd56", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 4.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 1100.0000000004803, + decimal: 12.000000000004802, + normalizedImplied: 0.0833333333333, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x409788fa148b46807c3cc975fbdba20d4e92084d4fc5d6cada641203d14ab3e5", + "0x224af415f3fe79ad10299889b27a9339ef58da921982f2d0f1b65672472532ab", + "0x11dbde7c8b5787249895d8e2461f6faaa7840b92c6814ad4d27f32ce9fe2f1a8", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -170.0680272106235, + decimal: 1.5880000000009019, + normalizedImplied: 0.629722921914, + }, + { + american: 120.00000000022001, + decimal: 2.2000000000022, + normalizedImplied: 0.454545454545, + }, + ], + proof: [ + "0xd7f60912bf60cc83a0a746f9dbf5c68138a5ccb9f1608d8fb684d095903bdeec", + "0x8e7e6bc56737ae7ca68d583856ae69f496df17c56cd2baeb4a81c083394e37bf", + "0x44ccdc17672a25f3f1028be467907a1920664225cee3e1f6f4c6f791b4769ab5", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -175.1313485110886, + decimal: 1.5710000000009617, + normalizedImplied: 0.636537237428, + }, + { + american: 125.00000000022502, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + ], + proof: [ + "0xff6e4c83e75ca930950bad40b2b7ca6468aa0bae6cc477e1725ba2f497dd5818", + "0x00944418f80efe165f8f46fb15f88e80d8936e4b1d7ec62b7b35203753df2536", + "0xf617099c9bfbc284e190eb22873a88e10785dfd4dfab6d5829a2523e39e0b36f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10021, + type: "firstPeriodWinner", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 475.0000000008625, + decimal: 5.750000000008625, + normalizedImplied: 0.173913043478, + }, + { + american: 100, + decimal: 2, + normalizedImplied: 0.5, + }, + { + american: 129.999999999816, + decimal: 2.29999999999816, + normalizedImplied: 0.434782608696, + }, + ], + proof: [ + "0x1070c808567759837b5b51832e4878988643a7f3cf8801c38714dae76a0ab2bd", + "0x785e0c20a8b43b055b8a8c916b2cdbaf6de41531107706ddf0687c527c86c851", + "0x162869dc871925284538cd98b2ba8eade508b7a067e9dc29aca94ca1c869adf9", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -320.5128205124324, + decimal: 1.3120000000003778, + normalizedImplied: 0.762195121951, + }, + { + american: 220.00000000000004, + decimal: 3.2, + normalizedImplied: 0.3125, + }, + ], + proof: [ + "0x2dbbc77c9d06d4c20ea72dcd51fc0d04d12c01383db5f3e644ee09962d10d287", + "0x5a416f02dc91bda6919d932dbd7a1d787249776c418c14e6aed99554dc1efe8f", + "0xdb00caf95491383d190b48a66d9cb1ce5588f924bccb0967ac301c53e59e36c9", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: -1000.0000000011005, + decimal: 1.09999999999989, + normalizedImplied: 0.909090909091, + }, + ], + proof: [ + "0x1c7177a91a672c4b004571b6929c930a689216382fddae74c7c7fff4f946b547", + "0x9748054e34a7863692b244864871ade415af3b136cdfd92fa7d650e11ada5714", + "0x162869dc871925284538cd98b2ba8eade508b7a067e9dc29aca94ca1c869adf9", + "0x1aa5bfd11437e971e8e16f474c8a7ef0870819a212be7093d7dbd6be9fc565c0", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 1100.0000000004803, + decimal: 12.000000000004802, + normalizedImplied: 0.0833333333333, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0xd2d36eb404c55b702ff54274c410938c0e16dcb3a70d54ddeca69c13cda05164", + "0x8abafa7958805e6247ce2c7f40a435572f1dc6f5866e35639ebaa342e4335f41", + "0x3b3103ed45225236e79275f554f1f77ab26ed121144aa065ca397e203eb6b4e3", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 150, + decimal: 2.5, + normalizedImplied: 0.4, + }, + { + american: -215.05376344057235, + decimal: 1.4650000000006225, + normalizedImplied: 0.682593856655, + }, + ], + proof: [ + "0xa9138af074b9aeff7cd7b6f48b30b71500ef88e78d8aeca9862d6beb9b4b29ea", + "0x108274c649c6d41f9f46a6c91bb9aa7ff6127a21734962c354833f15b9afa19d", + "0xad632275e97492c4e41f87a78f71bbd38067181c42d23b40f6957dd61f9ad5c7", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10041, + type: "firstPeriodSpread", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -140.05602240898643, + decimal: 1.7139999999998837, + normalizedImplied: 0.583430571762, + }, + { + american: 100, + decimal: 2, + normalizedImplied: 0.5, + }, + ], + proof: [ + "0x715a77827304726d8a969ab106c524828dd9d76e0ef3b209c6cac5dc4d43cb31", + "0xcdd0d061f209de8d79555a8b9852451b935bbfcd79d0e0dc82d61794f09da327", + "0x3b832be4bf6ff02145e363f4790d0d3a8941c0ba2f6d4e1aad861ce3661c8e1e", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10081, + type: "firstPeriodTotalOddEven", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 100, + decimal: 2, + normalizedImplied: 0.5, + }, + { + american: -134.9527665318125, + decimal: 1.7409999999994586, + normalizedImplied: 0.574382538771, + }, + ], + proof: [ + "0xcebddc3d00ac79385818e982b0a80b7bdb93d32b20d07718a4441cc13709841a", + "0x8abafa7958805e6247ce2c7f40a435572f1dc6f5866e35639ebaa342e4335f41", + "0x3b3103ed45225236e79275f554f1f77ab26ed121144aa065ca397e203eb6b4e3", + "0x04483476e1914b8f9e845d19348b5f364c414d93063b8ab00b48ede5a0d41a4f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10101, + type: "firstPeriodBothTeamsToScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 295.00000000003947, + decimal: 3.9500000000003947, + normalizedImplied: 0.253164556962, + }, + { + american: -699.3006992996373, + decimal: 1.1430000000002172, + normalizedImplied: 0.87489063867, + }, + ], + proof: [ + "0xbbadead41eb31a0e9d87287e96cce8194f3e59c7a1ea3b7791f699cca34a7abb", + "0xc0c3ee60d168e78f324ff082a62eee2d54de4df64bff8a238d30c31116b22680", + "0xad632275e97492c4e41f87a78f71bbd38067181c42d23b40f6957dd61f9ad5c7", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10111, + type: "firstPeriodTotalHomeTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 999.9999999998901, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + { + american: -4000.000000073804, + decimal: 1.0249999999995388, + normalizedImplied: 0.975609756098, + }, + ], + proof: [ + "0x8a8c8ac1d3682dd1fd4f98c57b4f814712fd8a61595d50c955c733ef149493fc", + "0x4e4fb3024fdcf2ffca0a79033bdd477cc401d299c299cb2bdda26084b8a3de4d", + "0x1d43abc1975a9c4561643e55c919acbff4faea59e7cd6f4cfdbf4425b4435e3f", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10112, + type: "firstPeriodTotalAwayTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 310.000000000656, + decimal: 4.10000000000656, + normalizedImplied: 0.243902439024, + }, + { + american: -473.93364928851187, + decimal: 1.2110000000002617, + normalizedImplied: 0.825763831544, + }, + ], + proof: [ + "0x62d5d5603672abd78f730165546c96cb3177f7f8971fb32a4c1731e274a0b706", + "0x211089dd62777dd62e127799f6c11f1e337b5b4d4692dfc3d4c56d52374f6c07", + "0x3b832be4bf6ff02145e363f4790d0d3a8941c0ba2f6d4e1aad861ce3661c8e1e", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10112, + type: "firstPeriodTotalAwayTeam", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 999.9999999998901, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0xaa7d7b9378b03c5b43b8646fc39a5ec31077f17c7954c93555277edbb5d519e6", + "0xc0c3ee60d168e78f324ff082a62eee2d54de4df64bff8a238d30c31116b22680", + "0xad632275e97492c4e41f87a78f71bbd38067181c42d23b40f6957dd61f9ad5c7", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10111, + type: "firstPeriodTotalHomeTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 179.99999999988803, + decimal: 2.7999999999988804, + normalizedImplied: 0.357142857143, + }, + { + american: -239.80815347770639, + decimal: 1.4169999999991512, + normalizedImplied: 0.705716302047, + }, + ], + proof: [ + "0xa9877439a22d92788b4279e992cbf8fd547285df01f0528f7d1f1aab1908d243", + "0x108274c649c6d41f9f46a6c91bb9aa7ff6127a21734962c354833f15b9afa19d", + "0xad632275e97492c4e41f87a78f71bbd38067181c42d23b40f6957dd61f9ad5c7", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10112, + type: "firstPeriodTotalAwayTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -170.0680272106235, + decimal: 1.5880000000009019, + normalizedImplied: 0.629722921914, + }, + { + american: 129.999999999816, + decimal: 2.29999999999816, + normalizedImplied: 0.434782608696, + }, + ], + proof: [ + "0xe3790b39cc095caad77a845248a71cb2154b0377c4d1e952d8af1f78dc3a6a90", + "0x5644332c739faee9583eaff2e48d94a410659518d60f037b014a4851b917e1c0", + "0x2303d223c10a0e3308effbafa946d1a642632dbf35a6a182c01c95c06ac07230", + "0xf617099c9bfbc284e190eb22873a88e10785dfd4dfab6d5829a2523e39e0b36f", + "0xf3e6d17b2d217f06d17bfc75937cf87380eb002b64c7e4a6fef0460691f19cc6", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10022, + type: "secondPeriodWinner", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 425.000000000525, + decimal: 5.25000000000525, + normalizedImplied: 0.190476190476, + }, + { + american: -130.03901170333189, + decimal: 1.7690000000010596, + normalizedImplied: 0.565291124929, + }, + { + american: 170.00000000027004, + decimal: 2.7000000000027004, + normalizedImplied: 0.37037037037, + }, + ], + proof: [ + "0xa4dcc7ce3a80018ced500ecb9bb47785ac3939a22e33ef05e278c4a845feeb9e", + "0x60269616380c0c14a76ab1fbb1397b08e98cc9899631a78fa86ff70f099c0457", + "0x8fccdac9bc2a04a6343795f896ed52b5d0385149b1043747bf412c8a7e0c7264", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10082, + type: "secondPeriodTotalOddEven", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -105.0420168066331, + decimal: 1.952000000000812, + normalizedImplied: 0.512295081967, + }, + { + american: -125.00000000022499, + decimal: 1.79999999999856, + normalizedImplied: 0.555555555556, + }, + ], + proof: [ + "0x4744574294e3b1e8cdf1c77c356de6c32fd10929c9b51edd79b354a6c9c9e2b1", + "0x224af415f3fe79ad10299889b27a9339ef58da921982f2d0f1b65672472532ab", + "0x11dbde7c8b5787249895d8e2461f6faaa7840b92c6814ad4d27f32ce9fe2f1a8", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10102, + type: "secondPeriodBothTeamsToScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 210.00000000027905, + decimal: 3.1000000000027905, + normalizedImplied: 0.322580645161, + }, + { + american: -400, + decimal: 1.25, + normalizedImplied: 0.8, + }, + ], + proof: [ + "0xa1bd999cc6c8bb1bfcbfad7c0cedee6a09ef34c79e821a94b2d49ead26fd160d", + "0x27d9b98443a8aa45b3294ebfedbef7ca8c218bc79ee90ce37944c4c802ac316f", + "0x8fccdac9bc2a04a6343795f896ed52b5d0385149b1043747bf412c8a7e0c7264", + "0x96f4e2e4e64f8b9c8026f9966df220e841731db4ca390e97b3502e06146d35ee", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10015, + type: "firstPeriodDoubleChance", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -155.55555555561237, + decimal: 1.642857142856908, + normalizedImplied: 0.608695652174, + }, + { + american: -206.66666666642133, + decimal: 1.48387096774251, + normalizedImplied: 0.673913043478, + }, + { + american: -1433.33333334151, + decimal: 1.0697674418600672, + normalizedImplied: 0.934782608696, + }, + ], + proof: [ + "0x960b9fb9bf1649ed65b957206162092b67b76ae3651a9822f8b093d049efac63", + "0x4e4fb3024fdcf2ffca0a79033bdd477cc401d299c299cb2bdda26084b8a3de4d", + "0x1d43abc1975a9c4561643e55c919acbff4faea59e7cd6f4cfdbf4425b4435e3f", + "0x758aaf0e2e3a847db8e22a4a4e7e2ebda491bd67acd69cac614673a6ab4a7863", + "0x40e14d70bee72287d12556247655f89b67f0b3ded46e1077874d03c6a7c7a124", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + { + gameId: "0x3344413334414542363536360000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10016, + type: "secondPeriodDoubleChance", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Montenegro", + awayTeam: "Türkiye", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -127.71084337320318, + decimal: 1.7830188679263113, + normalizedImplied: 0.560846560846, + }, + { + american: -309.44560784657247, + decimal: 1.323158569597735, + normalizedImplied: 0.755767315405, + }, + { + american: -1454.279205970509, + decimal: 1.0687625867092457, + normalizedImplied: 0.935661495299, + }, + ], + proof: [ + "0x3789d04d767cd22bc4fe296bfc8d1f2b326cf40089c633adf8f38f4002710d61", + "0x9e4c94a00db9c8d91d9e0e455cace32ea40139b14848da0cd52863342b8907b8", + "0xdb00caf95491383d190b48a66d9cb1ce5588f924bccb0967ac301c53e59e36c9", + "0xae72fd37db3b5f76cea4497eb3ba656950375145554c56146e8dac8dbbd53a39", + "0xdc36b11987fe944046140cfa3e33d50ec16d722faf8647df06532ba9acf1ab22", + "0x5b3732a95806a1c1721f8ce630bde0d35872c3c990594ac17b10a38c8d1bcb34", + ], + }, + ], + statusCode: "ongoing", + }, + ], + [ + "0x3742323834333746313245440000000000000000000000000000000000000000", + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 0, + type: "winner", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -165.01650165041085, + decimal: 1.6059999999990973, + normalizedImplied: 0.622665006227, + }, + { + american: 600.0000000007001, + decimal: 7.000000000007001, + normalizedImplied: 0.142857142857, + }, + { + american: 239.999999999796, + decimal: 3.3999999999979599, + normalizedImplied: 0.294117647059, + }, + ], + proof: [ + "0xd2acd518651e321c889cd6ba8b72857b4d9fb19d49dd353b2824e1c9f95c3edd", + "0x36b81a64840b5de49b971484f88af6490e34c9abc6341d85a3adc337bf24d2c0", + "0x31678d1ac3b238505d01141ba7c1b909474f647cc389ee3c70e05a029e6c5fc9", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + childMarkets: [ + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 195.00000000039828, + decimal: 2.9500000000039829, + normalizedImplied: 0.338983050847, + }, + { + american: -284.9002849002705, + decimal: 1.3510000000000178, + normalizedImplied: 0.740192450037, + }, + ], + proof: [ + "0xdecebafd6e451a50b95ec3121eaf6244d5f7a0652709e6dc175ee3fbaf533572", + "0x79c79f9c9f88f6d6e6639f2a80ad8f00ccab074cbcfea2e9f72dfbe11586bfcb", + "0xbab21ed9bc880df2a3ec9c602117c0f32ed61c0ffa6093dbebd340b18dc0a41b", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 550.00000000065, + decimal: 6.5000000000065, + normalizedImplied: 0.153846153846, + }, + { + american: -1204.8192771023328, + decimal: 1.0830000000004204, + normalizedImplied: 0.923361034164, + }, + ], + proof: [ + "0x82bb27f731c41202cdbde0c88797d76c7a78c86e743eb3798c7a9541ab7b7670", + "0x2a09a0ae76ff1add9d15777d05301de327bb24eb5e8ae6b548392b7f7f07a465", + "0x2ded7e6f9e20e75c12d84d20c160625e9806c0f0a23f41932404e4a5c727f06f", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -1098.9010989012709, + decimal: 1.0909999999999858, + normalizedImplied: 0.916590284143, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + ], + proof: [ + "0xb7fb07221a250116361170ccca65f108ba64cd77fa8177a640920156d149c014", + "0x329c3e8d42245a9ed2d00865deda43a2eb7251f1caa688663a46c387e0255e4c", + "0x3275362c6d88ebedb4ea36ed324c6564cb66831a4ee50073e537e995fb04114e", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -179.85611510799223, + decimal: 1.5559999999997572, + normalizedImplied: 0.642673521851, + }, + { + american: 125.00000000022502, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + ], + proof: [ + "0xc0d1fcd404220601bb22404686d37dcfdb662bfff0142ba30aee8bb445bf2042", + "0x5fb79eb1a6e15db38b01f6a5e5a41a033f9a658e3a29188da1cca2a1f5fdb8d2", + "0x3275362c6d88ebedb4ea36ed324c6564cb66831a4ee50073e537e995fb04114e", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -1, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 110.00000000021002, + decimal: 2.1000000000021, + normalizedImplied: 0.47619047619, + }, + { + american: -155.03875968972083, + decimal: 1.645000000000839, + normalizedImplied: 0.607902735562, + }, + ], + proof: [ + "0x354fb75624ff5a9fe7c6f7f73dfdcaa6acfd80691543a90d3968f49a6d8a774e", + "0x6cd9a84128094ca08d8706ef5a5eec2913580b92b4c6fd26105dd04f7f86172c", + "0xd45a4a312389ad51596f6cb4201f93239e88ce8fb1f39946b10733af41f015c3", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -900.9009009019012, + decimal: 1.1109999999998768, + normalizedImplied: 0.900090009001, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + ], + proof: [ + "0x70b1887dfc0b17b78e2613390284435467a2df15eae1b8092fe0d434944747d6", + "0x4b5838fb298c6b05ace2d94ed8cef7a5b9736e309ad3a2851e1ba2ef4aa237bf", + "0x5767bbef0b78fe9d9279a154fc4db249ebb61a3e4430a7b1e0faff80480437c6", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 200.0000000003, + decimal: 3.000000000003, + normalizedImplied: 0.333333333333, + }, + { + american: -270.2702702698999, + decimal: 1.370000000000507, + normalizedImplied: 0.729927007299, + }, + ], + proof: [ + "0x499c97ca9568315fc0625b3e9d8e372d92b7b535ae59efb63e143d2dac4db89e", + "0xac8d73469daf7ad849da9d09418661a538d6cadf714caa142e6f4db60e294c51", + "0x1d9651efdb6e76c6768bba51a8b1ebedb96837fedf450c60f40cbe8b04e7ae3d", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: -1000.0000000011005, + decimal: 1.09999999999989, + normalizedImplied: 0.909090909091, + }, + ], + proof: [ + "0x88501c56a5584a92534a48d55d5f369476e067529b16e6d026c7e1f0754574c8", + "0x2a09a0ae76ff1add9d15777d05301de327bb24eb5e8ae6b548392b7f7f07a465", + "0x2ded7e6f9e20e75c12d84d20c160625e9806c0f0a23f41932404e4a5c727f06f", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 4.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 1100.0000000004803, + decimal: 12.000000000004802, + normalizedImplied: 0.0833333333333, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x1b20efe524df57d840a9877627fd220114a6dc9e92f869f6656a81eb52497b3c", + "0x951b3fab2e7f19bdf7ab2d22a9ca92d514496d80aed5b9568852b2d4b7257828", + "0x02c6741cf295132dfbc435c723de57d2ca9ed6c686018efc412b9cffd451aa70", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -160.00000000026, + decimal: 1.6249999999989844, + normalizedImplied: 0.615384615385, + }, + { + american: 120.00000000022001, + decimal: 2.2000000000022, + normalizedImplied: 0.454545454545, + }, + ], + proof: [ + "0x5408ce19671eb679f4abc42eb194666ea93d7cecb497c9de58b6abaf92da5f01", + "0xbd90ea6dae2dab412cc848436d2d4bf56c5fc7ca5c88b496b733e86669bf4bd2", + "0x0a0b5f4680d47a31ab818f4c3acd0590285f2c14b28e21217a872b06109cb996", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10002, + type: "total", + line: 2, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 125.00000000022502, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + { + american: -155.03875968972083, + decimal: 1.645000000000839, + normalizedImplied: 0.607902735562, + }, + ], + proof: [ + "0xd064aa1835039225b400a5cf28472108be51b40efbe867edfd0cbdab6ee21bbe", + "0x37b40feadaf54b348148851a730a3a400ce7dae3b8d69c3b9346e3feff7256b4", + "0x31678d1ac3b238505d01141ba7c1b909474f647cc389ee3c70e05a029e6c5fc9", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10010, + type: "drawNoBet", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -649.3506493480413, + decimal: 1.1540000000006186, + normalizedImplied: 0.866551126516, + }, + { + american: 425.000000000525, + decimal: 5.25000000000525, + normalizedImplied: 0.190476190476, + }, + ], + proof: [ + "0x80ce7dc2e15185cafe054b290be3061894950f97c114c5820fe13b4351d77e82", + "0x4b5838fb298c6b05ace2d94ed8cef7a5b9736e309ad3a2851e1ba2ef4aa237bf", + "0x5767bbef0b78fe9d9279a154fc4db249ebb61a3e4430a7b1e0faff80480437c6", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10003, + type: "doubleChance", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -1101.6725352188697, + decimal: 1.0907710747097213, + normalizedImplied: 0.916782653286, + }, + { + american: -326.47951441615808, + decimal: 1.306297931675222, + normalizedImplied: 0.765522149084, + }, + { + american: 128.84615384613626, + decimal: 2.2884615384613626, + normalizedImplied: 0.436974789916, + }, + ], + proof: [ + "0x6633b95c6604700272df7538e24762435d3ff6533bb68b80f96e84e634330e40", + "0x62368fa87862a2ad4f3ee6a02e3badb7829d4a7db8cbd1f9347c3b54620cd8b0", + "0x5767bbef0b78fe9d9279a154fc4db249ebb61a3e4430a7b1e0faff80480437c6", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10006, + type: "halftimeFulltime", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [ + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 0, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 1, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 0, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 1, + line: 0, + }, + ], + [ + { + typeId: 10021, + position: 2, + line: 0, + }, + { + typeId: 0, + position: 2, + line: 0, + }, + ], + ], + odds: [ + { + american: 139.999999999808, + decimal: 2.39999999999808, + normalizedImplied: 0.416666666667, + }, + { + american: 6500.000000006599, + decimal: 66.000000000066, + normalizedImplied: 0.0151515151515, + }, + { + american: 2000.0000000021, + decimal: 21.000000000021, + normalizedImplied: 0.047619047619, + }, + { + american: 3000.00000000279, + decimal: 31.0000000000279, + normalizedImplied: 0.0322580645161, + }, + { + american: 1299.9999999994403, + decimal: 13.999999999994401, + normalizedImplied: 0.0714285714286, + }, + { + american: 1699.9999999985599, + decimal: 17.999999999985599, + normalizedImplied: 0.0555555555556, + }, + { + american: 274.9999999995312, + decimal: 3.749999999995312, + normalizedImplied: 0.266666666667, + }, + { + american: 1199.9999999996099, + decimal: 12.9999999999961, + normalizedImplied: 0.0769230769231, + }, + { + american: 310.000000000656, + decimal: 4.10000000000656, + normalizedImplied: 0.243902439024, + }, + ], + proof: [ + "0xcb22d130607afe52894058f5a3dd5f2ce52c65173ebc9641a638560a43d887e5", + "0x5fb79eb1a6e15db38b01f6a5e5a41a033f9a658e3a29188da1cca2a1f5fdb8d2", + "0x3275362c6d88ebedb4ea36ed324c6564cb66831a4ee50073e537e995fb04114e", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10005, + type: "totalOddEven", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -114.94252873573842, + decimal: 1.8699999999991959, + normalizedImplied: 0.534759358289, + }, + { + american: -114.94252873573842, + decimal: 1.8699999999991959, + normalizedImplied: 0.534759358289, + }, + ], + proof: [ + "0x14d45ee13f8765ee5c1a89407871c96959bba3075cbe3c2536c334246b22f09d", + "0x2f90e65c3d1e97cd243c39c32653bdf247e9bd39ce2915f76ca882b2e580c100", + "0x02c6741cf295132dfbc435c723de57d2ca9ed6c686018efc412b9cffd451aa70", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10100, + type: "correctScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + [], + ], + odds: [ + { + american: 450.0000000005501, + decimal: 5.5000000000055009, + normalizedImplied: 0.181818181818, + }, + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: 2199.99999999816, + decimal: 22.9999999999816, + normalizedImplied: 0.0434782608696, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 230.00000000032999, + decimal: 3.3000000000033, + normalizedImplied: 0.30303030303, + }, + { + american: 390.00000000014708, + decimal: 4.90000000000147, + normalizedImplied: 0.204081632653, + }, + { + american: 800.0000000009001, + decimal: 9.000000000009, + normalizedImplied: 0.111111111111, + }, + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: 1799.99999999886, + decimal: 18.9999999999886, + normalizedImplied: 0.0526315789474, + }, + { + american: 4000.0000000065599, + decimal: 41.0000000000656, + normalizedImplied: 0.0243902439024, + }, + { + american: 2199.99999999816, + decimal: 22.9999999999816, + normalizedImplied: 0.0434782608696, + }, + { + american: 3499.9999999971198, + decimal: 35.999999999971198, + normalizedImplied: 0.0277777777778, + }, + { + american: 6999.9999999765709, + decimal: 70.9999999997657, + normalizedImplied: 0.0140845070423, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 900, + decimal: 10, + normalizedImplied: 0.1, + }, + { + american: 3000.00000000279, + decimal: 31.0000000000279, + normalizedImplied: 0.0322580645161, + }, + { + american: 2000.0000000021, + decimal: 21.000000000021, + normalizedImplied: 0.047619047619, + }, + { + american: 7500.000000024321, + decimal: 76.0000000002432, + normalizedImplied: 0.0131578947368, + }, + { + american: 6999.9999999765709, + decimal: 70.9999999997657, + normalizedImplied: 0.0140845070423, + }, + { + american: 5999.9999999817, + decimal: 60.999999999817, + normalizedImplied: 0.016393442623, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + positionNames: [ + "draw_0_0", + "draw_1_1", + "draw_2_2", + "draw_3_3", + "draw_4_4", + "malta_1_0", + "malta_2_0", + "malta_2_1", + "malta_3_0", + "malta_3_1", + "malta_3_2", + "malta_4_0", + "malta_4_1", + "malta_4_2", + "malta_4_3", + "andorra_1_0", + "andorra_2_0", + "andorra_2_1", + "andorra_3_0", + "andorra_3_1", + "andorra_3_2", + "andorra_4_0", + "andorra_4_1", + "andorra_4_2", + "andorra_4_3", + "other", + ], + proof: [ + "0x27cad55df02c9913cb18ee378bc82b9580eb984e655bfa43ed29ea4b211f00c8", + "0xd3c87285cfe1ade1f0314f631cb9281468231020978b52c7077aeea83365c2ee", + "0x0a2bbfeb4acd33b0c0f30ecc5ef8955c96ac2752be7a6783ede6b24cac6e9803", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10009, + type: "bothTeamsToScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 185.0000000003705, + decimal: 2.850000000003705, + normalizedImplied: 0.350877192982, + }, + { + american: -255.1020408167033, + decimal: 1.391999999999421, + normalizedImplied: 0.718390804598, + }, + ], + proof: [ + "0xa03201bbda91266ade07399ed4721521f9a543b29d38253302d4ba1cef40b6fa", + "0x329c3e8d42245a9ed2d00865deda43a2eb7251f1caa688663a46c387e0255e4c", + "0x3275362c6d88ebedb4ea36ed324c6564cb66831a4ee50073e537e995fb04114e", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 650.000000001875, + decimal: 7.50000000001875, + normalizedImplied: 0.133333333333, + }, + { + american: -1785.7142857250606, + decimal: 1.055999999999662, + normalizedImplied: 0.94696969697, + }, + ], + proof: [ + "0x6407fcd5f9706b72e8171bc9fa0694d8a84b666dc6b32589042318604256bed2", + "0xe77eb4dcd625839e9edc52be8f8bfc506f31f26d9c848eb269216292c4074789", + "0x0a0b5f4680d47a31ab818f4c3acd0590285f2c14b28e21217a872b06109cb996", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -473.93364928851187, + decimal: 1.2110000000002617, + normalizedImplied: 0.825763831544, + }, + { + american: 290.00000000039008, + decimal: 3.9000000000039005, + normalizedImplied: 0.25641025641, + }, + ], + proof: [ + "0x2c5fa2e2a18df6989e82f12ad3175593932ed8f38b3fbb8493e4ddbaaea3dc04", + "0x99d6a435f0303acd6faa661845a252535a206279149019294aa69815abbf6c9f", + "0x0a2bbfeb4acd33b0c0f30ecc5ef8955c96ac2752be7a6783ede6b24cac6e9803", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 400, + decimal: 5, + normalizedImplied: 0.2, + }, + { + american: -699.3006992996373, + decimal: 1.1430000000002172, + normalizedImplied: 0.87489063867, + }, + ], + proof: [ + "0x35599b8957dae708be4705f5cb2a96946f1e2018adfb160ca02c62e9bb9ffee4", + "0x6cd9a84128094ca08d8706ef5a5eec2913580b92b4c6fd26105dd04f7f86172c", + "0xd45a4a312389ad51596f6cb4201f93239e88ce8fb1f39946b10733af41f015c3", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 999.9999999998901, + decimal: 10.9999999999989, + normalizedImplied: 0.0909090909091, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x1e5424bc0eb04d73c89c2a0bb1927bec33582c71148d49cd8ba64c08fc8eca55", + "0x951b3fab2e7f19bdf7ab2d22a9ca92d514496d80aed5b9568852b2d4b7257828", + "0x02c6741cf295132dfbc435c723de57d2ca9ed6c686018efc412b9cffd451aa70", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10018, + type: "totalAwayTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 125.00000000022502, + decimal: 2.25000000000225, + normalizedImplied: 0.444444444444, + }, + { + american: -175.1313485110886, + decimal: 1.5710000000009617, + normalizedImplied: 0.636537237428, + }, + ], + proof: [ + "0xf995d1fc1e18417dc9975632de59828cb8a2f91f23a5db8cfa2bd19f3dabdb67", + "0xd89cb5bf3d969c645c40ba916c157ad2a4ed6d4e102c667a303976ec499192b4", + "0xbab21ed9bc880df2a3ec9c602117c0f32ed61c0ffa6093dbebd340b18dc0a41b", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10017, + type: "totalHomeTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 120.00000000022001, + decimal: 2.2000000000022, + normalizedImplied: 0.454545454545, + }, + { + american: -165.01650165041085, + decimal: 1.6059999999990973, + normalizedImplied: 0.622665006227, + }, + ], + proof: [ + "0xcda580b0ecd64c1343b387dc1b453380a34f97f1b0f133da7cad8177dd21535f", + "0x37b40feadaf54b348148851a730a3a400ce7dae3b8d69c3b9346e3feff7256b4", + "0x31678d1ac3b238505d01141ba7c1b909474f647cc389ee3c70e05a029e6c5fc9", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10021, + type: "firstPeriodWinner", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 134.99999999978849, + decimal: 2.349999999997885, + normalizedImplied: 0.425531914894, + }, + { + american: 600.0000000007001, + decimal: 7.000000000007001, + normalizedImplied: 0.142857142857, + }, + { + american: -120.04801920763527, + decimal: 1.8330000000003318, + normalizedImplied: 0.545553737043, + }, + ], + proof: [ + "0x44b2bb56cc468daccf5e4e95abf75529752f14c652bc89cc69228f5642ad0d21", + "0xac8d73469daf7ad849da9d09418661a538d6cadf714caa142e6f4db60e294c51", + "0x1d9651efdb6e76c6768bba51a8b1ebedb96837fedf450c60f40cbe8b04e7ae3d", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 300, + decimal: 4, + normalizedImplied: 0.25, + }, + { + american: -473.93364928851187, + decimal: 1.2110000000002617, + normalizedImplied: 0.825763831544, + }, + ], + proof: [ + "0x52be0b33019436b7d4933842f49687858acbef57a48281330b6e81d24c3a9cb7", + "0x047a5f5ff4847c96dcecf727de92c49823d08d37356be3467d2c09fe66d4b926", + "0x1d9651efdb6e76c6768bba51a8b1ebedb96837fedf450c60f40cbe8b04e7ae3d", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 2.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 949.9999999999475, + decimal: 10.499999999999475, + normalizedImplied: 0.0952380952381, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x07aa59037e02729c066aae3f5d6d815b4b71fad45c7ecd2e3d31cac4af46de81", + "0x2f90e65c3d1e97cd243c39c32653bdf247e9bd39ce2915f76ca882b2e580c100", + "0x02c6741cf295132dfbc435c723de57d2ca9ed6c686018efc412b9cffd451aa70", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10031, + type: "firstPeriodTotal", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -155.03875968972083, + decimal: 1.645000000000839, + normalizedImplied: 0.607902735562, + }, + { + american: 114.99999999989248, + decimal: 2.1499999999989249, + normalizedImplied: 0.46511627907, + }, + ], + proof: [ + "0x38eb58503fcd61b6625b839237b8e93dcbdc3cabb23167d1c8fefbfe37310806", + "0x1d88e13647612c4a228c9282c4f44a2bbc7e599d67bacd69bcfe52da81caeeb2", + "0xd45a4a312389ad51596f6cb4201f93239e88ce8fb1f39946b10733af41f015c3", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10041, + type: "firstPeriodSpread", + line: -0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 129.999999999816, + decimal: 2.29999999999816, + normalizedImplied: 0.434782608696, + }, + { + american: -184.8428835490413, + decimal: 1.5409999999998306, + normalizedImplied: 0.64892926671, + }, + ], + proof: [ + "0x2a840535b98aac709763c2b1910f5df8cb7e2daa60980baeee801c882d7687e0", + "0x99d6a435f0303acd6faa661845a252535a206279149019294aa69815abbf6c9f", + "0x0a2bbfeb4acd33b0c0f30ecc5ef8955c96ac2752be7a6783ede6b24cac6e9803", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10081, + type: "firstPeriodTotalOddEven", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 129.999999999816, + decimal: 2.29999999999816, + normalizedImplied: 0.434782608696, + }, + { + american: -170.0680272106235, + decimal: 1.5880000000009019, + normalizedImplied: 0.629722921914, + }, + ], + proof: [ + "0xd2fb5be87cbfdaca1dbfb0262a031b8023b12d838c3c436beea6229b79f13ae6", + "0x36b81a64840b5de49b971484f88af6490e34c9abc6341d85a3adc337bf24d2c0", + "0x31678d1ac3b238505d01141ba7c1b909474f647cc389ee3c70e05a029e6c5fc9", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10101, + type: "firstPeriodBothTeamsToScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: -3030.3030303208586, + decimal: 1.0329999999998059, + normalizedImplied: 0.968054211036, + }, + ], + proof: [ + "0x9da82318fdc50e77a52bfdc27b0f527fa38ab3f9fd785230e88b2f0d881fba56", + "0xff6de70339242bc6785f6941ef45a2aff633cd7bfed9ad478cd09cc9c894778f", + "0x2ded7e6f9e20e75c12d84d20c160625e9806c0f0a23f41932404e4a5c727f06f", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10111, + type: "firstPeriodTotalHomeTeam", + line: 1.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 499.9999999988, + decimal: 5.999999999988, + normalizedImplied: 0.166666666667, + }, + { + american: -1000.0000000011005, + decimal: 1.09999999999989, + normalizedImplied: 0.909090909091, + }, + ], + proof: [ + "0x8e548298fe4c8f97620c0f280b4e201c3e21c6f0e13df32e7946645074c5c631", + "0xff6de70339242bc6785f6941ef45a2aff633cd7bfed9ad478cd09cc9c894778f", + "0x2ded7e6f9e20e75c12d84d20c160625e9806c0f0a23f41932404e4a5c727f06f", + "0xdd9dc6d914e3ade0110ac354e6ab494136815a6b0200e3ff541985314d9ca80b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10112, + type: "firstPeriodTotalAwayTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 320.00000000042, + decimal: 4.2000000000042, + normalizedImplied: 0.238095238095, + }, + { + american: -473.93364928851187, + decimal: 1.2110000000002617, + normalizedImplied: 0.825763831544, + }, + ], + proof: [ + "0xe103ca3ce7269243d9d18ae2a04db51b8e7fb50bd8d115a417c4f03f3e2972b7", + "0x79c79f9c9f88f6d6e6639f2a80ad8f00ccab074cbcfea2e9f72dfbe11586bfcb", + "0xbab21ed9bc880df2a3ec9c602117c0f32ed61c0ffa6093dbebd340b18dc0a41b", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10111, + type: "firstPeriodTotalHomeTeam", + line: 0.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 100, + decimal: 2, + normalizedImplied: 0.5, + }, + { + american: -130.03901170333189, + decimal: 1.7690000000010596, + normalizedImplied: 0.565291124929, + }, + ], + proof: [ + "0x406ae5632f0b400f385c5f5734c2c1e6725001e385e8359afb2e690b8f876e08", + "0x1d88e13647612c4a228c9282c4f44a2bbc7e599d67bacd69bcfe52da81caeeb2", + "0xd45a4a312389ad51596f6cb4201f93239e88ce8fb1f39946b10733af41f015c3", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10022, + type: "secondPeriodWinner", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: 100, + decimal: 2, + normalizedImplied: 0.5, + }, + { + american: 550.00000000065, + decimal: 6.5000000000065, + normalizedImplied: 0.153846153846, + }, + { + american: 110.00000000021002, + decimal: 2.1000000000021, + normalizedImplied: 0.47619047619, + }, + ], + proof: [ + "0x57f6e3cbd8bd9b5b829da0be5d008ccf7daadd25941ceb019440fe8ac35af658", + "0xbd90ea6dae2dab412cc848436d2d4bf56c5fc7ca5c88b496b733e86669bf4bd2", + "0x0a0b5f4680d47a31ab818f4c3acd0590285f2c14b28e21217a872b06109cb996", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10082, + type: "secondPeriodTotalOddEven", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 110.00000000021002, + decimal: 2.1000000000021, + normalizedImplied: 0.47619047619, + }, + { + american: -144.92753623166753, + decimal: 1.690000000001031, + normalizedImplied: 0.591715976331, + }, + ], + proof: [ + "0x228c4a334fabf6e1564d33555eaf2c920dbe3b8d67641dbe462a43d46538a927", + "0xd3c87285cfe1ade1f0314f631cb9281468231020978b52c7077aeea83365c2ee", + "0x0a2bbfeb4acd33b0c0f30ecc5ef8955c96ac2752be7a6783ede6b24cac6e9803", + "0x69fb0641a9af71ad51ca7cd4e90357bf5c374cb1f007c0b2a97071582ed89bd1", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10102, + type: "secondPeriodBothTeamsToScore", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 400, + decimal: 5, + normalizedImplied: 0.2, + }, + { + american: -1408.4507042308767, + decimal: 1.0709999999997216, + normalizedImplied: 0.9337068160600001, + }, + ], + proof: [ + "0xfb9a1b5c3bcb3e1840508fc707b03abdcebaab121aec62147e72794009a2c40c", + "0xd89cb5bf3d969c645c40ba916c157ad2a4ed6d4e102c667a303976ec499192b4", + "0xbab21ed9bc880df2a3ec9c602117c0f32ed61c0ffa6093dbebd340b18dc0a41b", + "0x8a131eefbd49e92f4ec4c7a85e61040be349e8820e3d38d618781501a0dd1b17", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10015, + type: "firstPeriodDoubleChance", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -3358.490566071738, + decimal: 1.029775280898575, + normalizedImplied: 0.971085651937, + }, + { + american: -131.69014084519933, + decimal: 1.7593582887693103, + normalizedImplied: 0.568389057751, + }, + { + american: -220.93546773361818, + decimal: 1.4526208536176273, + normalizedImplied: 0.6884108799, + }, + ], + proof: [ + "0x6892ccb5832e5e6f68c9cd82c876d489535c3c3ab32fdc0ef39647b8ee79c74b", + "0x62368fa87862a2ad4f3ee6a02e3badb7829d4a7db8cbd1f9347c3b54620cd8b0", + "0x5767bbef0b78fe9d9279a154fc4db249ebb61a3e4430a7b1e0faff80480437c6", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10016, + type: "secondPeriodDoubleChance", + line: 0, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 0, + isOpen: true, + isResolved: false, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], [], []], + odds: [ + { + american: -4099.999999916014, + decimal: 1.0243902439029387, + normalizedImplied: 0.97619047619, + }, + { + american: -188.8888888887605, + decimal: 1.5294117647062422, + normalizedImplied: 0.653846153846, + }, + { + american: -170.29702970250995, + decimal: 1.5872093023271688, + normalizedImplied: 0.630036630036, + }, + ], + proof: [ + "0x511ca875c3d3fe548dc9808fbc4ecd6df1afa2d6c33c9fadf28ecef4352b3132", + "0x047a5f5ff4847c96dcecf727de92c49823d08d37356be3467d2c09fe66d4b926", + "0x1d9651efdb6e76c6768bba51a8b1ebedb96837fedf450c60f40cbe8b04e7ae3d", + "0x33d2f4911a51b2580e7badc393381ef182ae1135d0bcbe3aadaf0b8aa780e3bc", + "0x9cd79ee17de09d16b9c0c9ce5529e23ca960e612a6ba4b02452af3bd6bce342d", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + { + gameId: "0x3742323834333746313245440000000000000000000000000000000000000000", + sport: "Soccer", + leagueId: 9806, + leagueName: "UEFA Nations League", + subLeagueId: 9806, + typeId: 10001, + type: "spread", + line: -3.5, + maturity: 1732045500, + maturityDate: "2024-11-19T19:45:00.000Z", + homeTeam: "Malta", + awayTeam: "Andorra", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x58d842dac31f45f8953ecddfb7c65d05b7cf76f49676bae331be8d8ff632d569", + "0xe77eb4dcd625839e9edc52be8f8bfc506f31f26d9c848eb269216292c4074789", + "0x0a0b5f4680d47a31ab818f4c3acd0590285f2c14b28e21217a872b06109cb996", + "0xe71cf8320128eed99b4f512a50998cd24718d7d2949100294dec138284c5e44b", + "0xe501851601b17422c731050f530b004077bdb3a705308c033e9b472a260a3071", + "0xca869186bcf53299dd56e7a722f746ac9f67169ed0ddf45bf2bd37cacba0e21a", + ], + }, + ], + statusCode: "ongoing", + }, + ], + [ + "0x3436373337323600000000000000000000000000000000000000000000000000", + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 0, + type: "winner", + line: 0, + maturity: 1731161400, + maturityDate: "2024-11-09T14:10:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 10, + isOpen: false, + isResolved: true, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: -165.01650165041085, + decimal: 1.6059999999990973, + normalizedImplied: 0.622665006227, + }, + { + american: 239.999999999796, + decimal: 3.3999999999979599, + normalizedImplied: 0.294117647059, + }, + ], + proof: [], + childMarkets: [ + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10001, + type: "spread", + line: 3.5, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x0f615af36c4c7e5fb75295c083bb7d2f2b3174b5b3242eb5fbac1d98f0307941", + "0xd2d7d2cbe44eaede4e644a921ffdebb7c0fea9fee93b160d48d1d3220d6d24ab", + "0x000f17fb9d1205afa282a2673fb6818a421f3f9437d3aa3edf0b06a6b03af1fe", + "0x9b26ac3b1f2834868e59227bdffbf6a6f0e351ffe1cc564b82cdbc960ec9a9cb", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10002, + type: "total", + line: 22.5, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0xddee00b005fec994ad0a2521dbf5d805ce20f3fa36bf12379784cf9188ecbf4d", + "0xfc85d579e0e3fed59f88331ee52c49e1c5a45403702cfa8730bfd40372c1f883", + "0x3a8fae7fb6010db551b22e53836afcce97ce940eb523b7a2dcfb29479cb495b1", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10021, + type: "firstPeriodWinner", + line: 0, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x787f961884f626ec14780c563f803d2e678444262171682793b49784bc14be09", + "0xf30ff2c1c63a7e87a928a0e527e0063c9ae4dad046eac10ea456aae9b3ebf389", + "0xcc412a8f08205fd2209148423787c01554f3370da5b2a040ad8bf49fdd5ce7fd", + "0x9b26ac3b1f2834868e59227bdffbf6a6f0e351ffe1cc564b82cdbc960ec9a9cb", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10041, + type: "firstPeriodSpread", + line: 1.5, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x71ea7e5c204efa95a2d194c8cea46db6a455898a5357159434b651919415f494", + "0xf30ff2c1c63a7e87a928a0e527e0063c9ae4dad046eac10ea456aae9b3ebf389", + "0xcc412a8f08205fd2209148423787c01554f3370da5b2a040ad8bf49fdd5ce7fd", + "0x9b26ac3b1f2834868e59227bdffbf6a6f0e351ffe1cc564b82cdbc960ec9a9cb", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10022, + type: "secondPeriodWinner", + line: 0, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0xf878d3817557eb9d8cc59312fa90b8ffb170af2ae79015d2392675c1dac6b2f6", + "0xfc85d579e0e3fed59f88331ee52c49e1c5a45403702cfa8730bfd40372c1f883", + "0x3a8fae7fb6010db551b22e53836afcce97ce940eb523b7a2dcfb29479cb495b1", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10014, + type: "total2", + line: 2.5, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x1809eee1c45eb0b186b14ecb79df59ddb9303be212ad86604aafdf27df8716e8", + "0x3a8fae7fb6010db551b22e53836afcce97ce940eb523b7a2dcfb29479cb495b1", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10013, + type: "spread2", + line: 1.5, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 10, + isOpen: false, + isResolved: true, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [], + statusCode: "resolved", + winningPositions: [1], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10013, + type: "spread2", + line: -1.5, + maturity: 1731161100, + maturityDate: "2024-11-09T14:05:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 10, + isOpen: false, + isResolved: true, + isCancelled: false, + isPaused: false, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [], + statusCode: "resolved", + winningPositions: [1], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10001, + type: "spread", + line: 2.5, + maturity: 1731160800, + maturityDate: "2024-11-09T14:00:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x306ddac1f2b029849299c99132195fcb881609f3bf977814e7425a02bddfc18a", + "0x0a026d487fac0df555342138c81f5959a7df6b11b8c3fb078a04db448ce88444", + "0x000f17fb9d1205afa282a2673fb6818a421f3f9437d3aa3edf0b06a6b03af1fe", + "0x9b26ac3b1f2834868e59227bdffbf6a6f0e351ffe1cc564b82cdbc960ec9a9cb", + ], + }, + { + gameId: "0x3436373337323600000000000000000000000000000000000000000000000000", + sport: "Tennis", + leagueId: 156, + leagueName: "ATP Events", + subLeagueId: 15648, + typeId: 10002, + type: "total", + line: 23.5, + maturity: 1731160800, + maturityDate: "2024-11-09T14:00:00.000Z", + homeTeam: "Hamad Medjedovic", + awayTeam: "Denis Shapovalov", + status: 1, + isOpen: false, + isResolved: false, + isCancelled: false, + isPaused: true, + isOneSideMarket: false, + isPlayerPropsMarket: false, + isOneSidePlayerPropsMarket: false, + isYesNoPlayerPropsMarket: false, + playerProps: { + playerId: 0, + playerName: "", + }, + combinedPositions: [[], []], + odds: [ + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + { + american: 0, + decimal: 0, + normalizedImplied: 0, + }, + ], + proof: [ + "0x9e4c30995308741e5366e15de9c2a8f13cfa85958d92ed743a0ad44d3467d2ed", + "0xe2b29a5b1eed0c7f21a860092f7dcfcbf454e754edbdb557f6e4d80283d182dd", + "0xcc412a8f08205fd2209148423787c01554f3370da5b2a040ad8bf49fdd5ce7fd", + "0x9b26ac3b1f2834868e59227bdffbf6a6f0e351ffe1cc564b82cdbc960ec9a9cb", + ], + }, + ], + statusCode: "ongoing", + winningPositions: [1], + homeScore: 0, + awayScore: 0, + homeScoreByPeriod: [], + awayScoreByPeriod: [], + isWholeGameResolved: false, + }, + ], +]; + +module.exports = { openMarkets }; diff --git a/overtimeV2Api/test/mockData/opticOdds/opticOddsApiFixtureOdds.js b/overtimeV2Api/test/mockData/opticOdds/opticOddsApiFixtureOdds.js new file mode 100644 index 00000000..3ae53b0c --- /dev/null +++ b/overtimeV2Api/test/mockData/opticOdds/opticOddsApiFixtureOdds.js @@ -0,0 +1,296 @@ +const liveApiFixtureOdds = [ + { + id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + start_date: "2024-11-19T19:45:00Z", + home_competitors: [ + { + id: "7DAC26FE4F9B", + name: "Montenegro", + abbreviation: "MNE", + logo: "https://cdn.opticodds.com/team-logos/soccer/6095.png", + }, + ], + away_competitors: [ + { + id: "2C7B844242F1", + name: "Türkiye", + abbreviation: "TUR", + logo: "https://cdn.opticodds.com/team-logos/soccer/6071.png", + }, + ], + home_team_display: "Montenegro", + away_team_display: "Türkiye", + status: "live", + is_live: true, + sport: { + id: "soccer", + name: "Soccer", + }, + league: { + id: "uefa_-_nations_league", + name: "UEFA - Nations League", + }, + tournament: null, + odds: [ + { + id: "41571-32765-2024-11-19:draftkings:moneyline:draw", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Draw", + is_main: true, + selection: "Draw", + normalized_selection: "draw", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: null, + price: 4.1, + timestamp: 1732046264.1645832, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602303_2", + android: "dksb://sb/addbet/0ML77602303_2", + desktop: "https://sportsbook.draftkings.com/event/31387659?outcomes=0ML77602303_2", + }, + limits: null, + }, + { + id: "41571-32765-2024-11-19:draftkings:moneyline:montenegro", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Montenegro", + is_main: true, + selection: "Montenegro", + normalized_selection: "montenegro", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: "7DAC26FE4F9B", + price: 6.0, + timestamp: 1732046264.1645832, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602303_1", + android: "dksb://sb/addbet/0ML77602303_1", + desktop: "https://sportsbook.draftkings.com/event/31387659?outcomes=0ML77602303_1", + }, + limits: null, + }, + { + id: "41571-32765-2024-11-19:draftkings:moneyline:t_rkiye", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Türkiye", + is_main: true, + selection: "Türkiye", + normalized_selection: "t_rkiye", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: "2C7B844242F1", + price: 1.5, + timestamp: 1732046264.1645832, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602303_3", + android: "dksb://sb/addbet/0ML77602303_3", + desktop: "https://sportsbook.draftkings.com/event/31387659?outcomes=0ML77602303_3", + }, + limits: null, + }, + ], + }, + { + id: "7B28437F12ED", + game_id: "18292-24011-2024-11-19", + start_date: "2024-11-19T19:45:00Z", + home_competitors: [ + { + id: "43C553083327", + name: "Malta", + abbreviation: "MLT", + logo: "https://cdn.opticodds.com/team-logos/soccer/6093.png", + }, + ], + away_competitors: [ + { + id: "0D9A76558077", + name: "Andorra", + abbreviation: "AND", + logo: "https://cdn.opticodds.com/team-logos/soccer/6073.png", + }, + ], + home_team_display: "Malta", + away_team_display: "Andorra", + status: "live", + is_live: true, + sport: { + id: "soccer", + name: "Soccer", + }, + league: { + id: "uefa_-_nations_league", + name: "UEFA - Nations League", + }, + tournament: null, + odds: [ + { + id: "18292-24011-2024-11-19:draftkings:moneyline:andorra", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Andorra", + is_main: true, + selection: "Andorra", + normalized_selection: "andorra", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: "0D9A76558077", + price: 7.0, + timestamp: 1732046217.3784602, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602383_3", + android: "dksb://sb/addbet/0ML77602383_3", + desktop: "https://sportsbook.draftkings.com/event/31388074?outcomes=0ML77602383_3", + }, + limits: null, + }, + { + id: "18292-24011-2024-11-19:draftkings:moneyline:draw", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Draw", + is_main: true, + selection: "Draw", + normalized_selection: "draw", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: null, + price: 3.1, + timestamp: 1732046217.3784602, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602383_2", + android: "dksb://sb/addbet/0ML77602383_2", + desktop: "https://sportsbook.draftkings.com/event/31388074?outcomes=0ML77602383_2", + }, + limits: null, + }, + { + id: "18292-24011-2024-11-19:draftkings:moneyline:malta", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Malta", + is_main: true, + selection: "Malta", + normalized_selection: "malta", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: "43C553083327", + price: 1.645, + timestamp: 1732046217.3784602, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602383_1", + android: "dksb://sb/addbet/0ML77602383_1", + desktop: "https://sportsbook.draftkings.com/event/31388074?outcomes=0ML77602383_1", + }, + limits: null, + }, + ], + }, + { + id: "4673726", + game_id: "98292-24011-2024-11-09", + start_date: "2024-11-09T14:10:00.000Z", + home_competitors: [ + { + id: "43C553083327", + name: "Hamad Medjedovic", + abbreviation: "HMD", + logo: "https://cdn.opticodds.com/team-logos/soccer/6093.png", + }, + ], + away_competitors: [ + { + id: "0D9A76558077", + name: "Denis Shapovalov", + abbreviation: "DSH", + logo: "https://cdn.opticodds.com/team-logos/soccer/6073.png", + }, + ], + home_team_display: "Hamad Medjedovic", + away_team_display: "Denis Shapovalov", + status: "live", + is_live: true, + sport: { + id: "tennis", + name: "Tennis", + }, + league: { + id: "atp", + name: "ATP", + }, + tournament: null, + odds: [ + { + id: "98292-24011-2024-11-09:draftkings:moneyline:denis_shapovalov", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Denis Shapovalov", + is_main: true, + selection: "Denis Shapovalov", + normalized_selection: "denis_shapovalov", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: "0D9A76558077", + price: 7.0, + timestamp: 1732046217.3784602, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602383_3", + android: "dksb://sb/addbet/0ML77602383_3", + desktop: "https://sportsbook.draftkings.com/event/31388074?outcomes=0ML77602383_3", + }, + limits: null, + }, + { + id: "98292-24011-2024-11-09:draftkings:moneyline:hamad_medjedovic", + sportsbook: "DraftKings", + market: "Moneyline", + name: "Hamad Medjedovic", + is_main: true, + selection: "Hamad Medjedovic", + normalized_selection: "hamad_medjedovic", + market_id: "moneyline", + selection_line: null, + player_id: null, + team_id: "43C553083327", + price: 1.645, + timestamp: 1732046217.3784602, + grouping_key: "default", + points: null, + deep_link: { + ios: "dksb://sb/addbet/0ML77602383_1", + android: "dksb://sb/addbet/0ML77602383_1", + desktop: "https://sportsbook.draftkings.com/event/31388074?outcomes=0ML77602383_1", + }, + limits: null, + }, + ], + }, +]; + +module.exports = { liveApiFixtureOdds }; diff --git a/overtimeV2Api/test/mockData/opticOdds/opticOddsApiFixtures.js b/overtimeV2Api/test/mockData/opticOdds/opticOddsApiFixtures.js new file mode 100644 index 00000000..6009054c --- /dev/null +++ b/overtimeV2Api/test/mockData/opticOdds/opticOddsApiFixtures.js @@ -0,0 +1,77 @@ +const liveApiFixtures = [ + { + id: "047DE4F72D90", + game_id: "15560-42607-2024-11-27", + start_date: "2024-11-27T10:00:00Z", + home_competitors: [ + { + id: "82662BA48A52", + name: "Yokohama F. Marinos", + abbreviation: "FMA", + logo: "https://cdn.opticodds.com/team-logos/soccer/2803.png", + }, + ], + away_competitors: [ + { + id: "C1A01D308894", + name: "FC Pohang Steelers", + abbreviation: "POH", + logo: "https://cdn.opticodds.com/team-logos/soccer/2767.png", + }, + ], + home_team_display: "Yokohama F. Marinos", + away_team_display: "FC Pohang Steelers", + status: "live", + is_live: true, + sport: { + id: "soccer", + name: "Soccer", + }, + league: { + id: "afc_-_champions_league", + name: "AFC - Champions League", + }, + home_starter: null, + home_record: null, + home_seed: null, + home_rotation_number: 30107, + away_starter: null, + away_record: null, + away_seed: null, + away_rotation_number: 30106, + tournament: null, + tournament_stage: null, + has_odds: true, + venue_name: "Nissan Stadium", + venue_location: null, + venue_neutral: false, + broadcast: null, + result: { + scores: { + home: { + total: 1.0, + }, + away: { + total: 0.0, + }, + }, + in_play_data: { + period: "2H", + clock: "49", + last_play: null, + }, + }, + lineups: { + home: [], + away: [], + }, + season_type: "League Stage", + season_year: "2024/2025", + season_week: "5", + weather: null, + weather_temp: null, + source_ids: {}, + }, +]; + +module.exports = { liveApiFixtures }; diff --git a/overtimeV2Api/test/mockData/opticOdds/opticOddsApiResults.js b/overtimeV2Api/test/mockData/opticOdds/opticOddsApiResults.js new file mode 100644 index 00000000..0e1daaed --- /dev/null +++ b/overtimeV2Api/test/mockData/opticOdds/opticOddsApiResults.js @@ -0,0 +1,866 @@ +const liveApiResults = [ + { + sport: { + id: "soccer", + name: "Soccer", + }, + league: { + id: "uefa_-_nations_league", + name: "UEFA - Nations League", + }, + fixture: { + id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + start_date: "2024-11-19T19:45:00Z", + home_competitors: [ + { + id: "7DAC26FE4F9B", + name: "Montenegro", + abbreviation: "MNE", + logo: "https://cdn.opticodds.com/team-logos/soccer/6095.png", + }, + ], + away_competitors: [ + { + id: "2C7B844242F1", + name: "Türkiye", + abbreviation: "TUR", + logo: "https://cdn.opticodds.com/team-logos/soccer/6071.png", + }, + ], + home_team_display: "Montenegro", + away_team_display: "Türkiye", + status: "live", + is_live: true, + }, + scores: { + home: { + total: 0.0, + periods: { + period_1: 0.0, + }, + aggregate: null, + }, + away: { + total: 0.0, + periods: { + period_1: 0.0, + }, + aggregate: null, + }, + }, + in_play: { + period: "1H", + clock: "13", + last_play: null, + time_min: null, + time_sec: null, + balls: null, + outs: null, + strikes: null, + runners: null, + batter: null, + pitcher: null, + possession: null, + down: null, + distance_to_go: null, + field_position: null, + }, + events: [], + stats: { + home: [ + { + period: "all", + stats: { + saves: "1", + touches: "54", + duel_won: "3", + fwd_pass: "13", + duel_lost: "5", + aerial_won: "1", + goal_kicks: "2", + saved_ibox: "1", + total_pass: "32", + won_tackle: "1", + aerial_lost: "1", + fk_foul_won: "1", + passes_left: "4", + put_through: "1", + total_cross: "3", + att_rf_total: "1", + blocked_pass: "1", + dispossessed: "1", + fk_foul_lost: "1", + lost_corners: "1", + passes_right: "5", + total_tackle: "1", + total_throws: "3", + accurate_pass: "26", + att_lg_centre: "1", + att_miss_left: "1", + att_obox_miss: "1", + attempts_obox: "1", + backward_pass: "6", + ball_recovery: "9", + crosses18yard: "1", + keeper_throws: "1", + leftside_pass: "7", + poss_lost_all: "13", + total_layoffs: "1", + accurate_cross: "1", + challenge_lost: "2", + formation_used: "352", + open_play_pass: "30", + poss_lost_ctrl: "13", + rightside_pass: "6", + accurate_throws: "3", + poss_won_def3rd: "5", + poss_won_mid3rd: "3", + shot_off_target: "1", + total_clearance: "1", + pen_area_entries: "2", + total_long_balls: "5", + att_freekick_miss: "1", + crosses18yardplus: "2", + total_scoring_att: "1", + att_freekick_total: "1", + total_chipped_pass: "2", + touches_in_opp_box: "1", + unsuccessful_touch: "4", + accurate_goal_kicks: "1", + accurate_long_balls: "3", + effective_clearance: "1", + final_third_entries: "4", + total_fwd_zone_pass: "22", + long_pass_own_to_opp: "6", + total_back_zone_pass: "13", + total_cross_nocorner: "3", + accurate_chipped_pass: "1", + attempted_tackle_foul: "1", + possession_percentage: "35.6", + accurate_fwd_zone_pass: "17", + accurate_keeper_throws: "1", + attempts_conceded_ibox: "2", + successful_put_through: "1", + accurate_back_zone_pass: "10", + accurate_cross_nocorner: "1", + total_final_third_passes: "7", + successful_open_play_pass: "25", + long_pass_own_to_opp_success: "4", + successful_final_third_passes: "7", + }, + }, + { + period: "period_1", + stats: { + saves: "1", + touches: "54", + duel_won: "3", + fwd_pass: "13", + duel_lost: "5", + aerial_won: "1", + goal_kicks: "2", + saved_ibox: "1", + total_pass: "32", + won_tackle: "1", + aerial_lost: "1", + fk_foul_won: "1", + passes_left: "4", + put_through: "1", + total_cross: "3", + att_rf_total: "1", + blocked_pass: "1", + dispossessed: "1", + fk_foul_lost: "1", + lost_corners: "1", + passes_right: "5", + total_tackle: "1", + total_throws: "3", + accurate_pass: "26", + att_lg_centre: "1", + att_miss_left: "1", + att_obox_miss: "1", + attempts_obox: "1", + backward_pass: "6", + ball_recovery: "9", + crosses18yard: "1", + keeper_throws: "1", + leftside_pass: "7", + poss_lost_all: "13", + total_layoffs: "1", + accurate_cross: "1", + challenge_lost: "2", + open_play_pass: "30", + poss_lost_ctrl: "13", + rightside_pass: "6", + accurate_throws: "3", + poss_won_def3rd: "5", + poss_won_mid3rd: "3", + shot_off_target: "1", + total_clearance: "1", + pen_area_entries: "2", + total_long_balls: "5", + att_freekick_miss: "1", + crosses18yardplus: "2", + total_scoring_att: "1", + att_freekick_total: "1", + total_chipped_pass: "2", + touches_in_opp_box: "1", + unsuccessful_touch: "4", + accurate_goal_kicks: "1", + accurate_long_balls: "3", + effective_clearance: "1", + final_third_entries: "4", + total_fwd_zone_pass: "22", + long_pass_own_to_opp: "6", + total_back_zone_pass: "13", + total_cross_nocorner: "3", + accurate_chipped_pass: "1", + attempted_tackle_foul: "1", + possession_percentage: "35.6", + accurate_fwd_zone_pass: "17", + accurate_keeper_throws: "1", + attempts_conceded_ibox: "2", + successful_put_through: "1", + accurate_back_zone_pass: "10", + accurate_cross_nocorner: "1", + total_final_third_passes: "7", + successful_open_play_pass: "25", + long_pass_own_to_opp_success: "4", + successful_final_third_passes: "7", + }, + }, + ], + away: [ + { + period: "all", + stats: { + touches: "84", + duel_won: "5", + fwd_pass: "17", + duel_lost: "3", + aerial_won: "1", + goal_kicks: "3", + total_pass: "61", + won_tackle: "1", + aerial_lost: "1", + att_hd_miss: "1", + fk_foul_won: "1", + passes_left: "12", + put_through: "1", + total_cross: "3", + won_contest: "2", + won_corners: "1", + att_bx_right: "1", + att_hd_total: "1", + att_openplay: "2", + att_rf_total: "1", + corner_taken: "1", + dispossessed: "1", + fk_foul_lost: "1", + passes_right: "8", + total_tackle: "1", + total_throws: "3", + accurate_pass: "48", + att_bx_centre: "1", + att_ibox_miss: "1", + att_miss_high: "1", + att_rf_target: "1", + attempts_ibox: "2", + backward_pass: "6", + ball_recovery: "5", + crosses18yard: "1", + keeper_throws: "1", + leftside_pass: "21", + poss_lost_all: "18", + total_contest: "2", + accurate_cross: "1", + formation_used: "4231", + freekick_cross: "1", + open_play_pass: "57", + poss_lost_ctrl: "18", + rightside_pass: "17", + accurate_throws: "3", + att_ibox_target: "1", + good_high_claim: "1", + poss_won_att3rd: "1", + poss_won_mid3rd: "3", + shot_off_target: "1", + total_clearance: "2", + outfielder_block: "1", + pen_area_entries: "4", + total_att_assist: "1", + total_high_claim: "1", + total_long_balls: "6", + att_sv_low_centre: "1", + total_scoring_att: "2", + fouled_final_third: "1", + total_chipped_pass: "4", + touches_in_opp_box: "6", + unsuccessful_touch: "2", + accurate_goal_kicks: "3", + accurate_long_balls: "4", + att_assist_openplay: "1", + effective_clearance: "2", + final_third_entries: "4", + total_fwd_zone_pass: "37", + long_pass_own_to_opp: "7", + offtarget_att_assist: "1", + ontarget_scoring_att: "1", + total_back_zone_pass: "27", + total_cross_nocorner: "2", + accurate_chipped_pass: "1", + attempted_tackle_foul: "1", + possession_percentage: "64.4", + total_corners_intobox: "1", + accurate_fwd_zone_pass: "24", + accurate_keeper_throws: "1", + attempts_conceded_obox: "1", + accurate_back_zone_pass: "25", + accurate_cross_nocorner: "1", + total_final_third_passes: "19", + successful_open_play_pass: "44", + long_pass_own_to_opp_success: "4", + successful_final_third_passes: "12", + }, + }, + { + period: "period_1", + stats: { + touches: "84", + duel_won: "5", + fwd_pass: "17", + duel_lost: "3", + aerial_won: "1", + goal_kicks: "3", + total_pass: "61", + won_tackle: "1", + aerial_lost: "1", + att_hd_miss: "1", + fk_foul_won: "1", + passes_left: "12", + put_through: "1", + total_cross: "3", + won_contest: "2", + won_corners: "1", + att_bx_right: "1", + att_hd_total: "1", + att_openplay: "2", + att_rf_total: "1", + corner_taken: "1", + dispossessed: "1", + fk_foul_lost: "1", + passes_right: "8", + total_tackle: "1", + total_throws: "3", + accurate_pass: "48", + att_bx_centre: "1", + att_ibox_miss: "1", + att_miss_high: "1", + att_rf_target: "1", + attempts_ibox: "2", + backward_pass: "6", + ball_recovery: "5", + crosses18yard: "1", + keeper_throws: "1", + leftside_pass: "21", + poss_lost_all: "18", + total_contest: "2", + accurate_cross: "1", + freekick_cross: "1", + open_play_pass: "57", + poss_lost_ctrl: "18", + rightside_pass: "17", + accurate_throws: "3", + att_ibox_target: "1", + good_high_claim: "1", + poss_won_att3rd: "1", + poss_won_mid3rd: "3", + shot_off_target: "1", + total_clearance: "2", + outfielder_block: "1", + pen_area_entries: "4", + total_att_assist: "1", + total_high_claim: "1", + total_long_balls: "6", + att_sv_low_centre: "1", + total_scoring_att: "2", + fouled_final_third: "1", + total_chipped_pass: "4", + touches_in_opp_box: "6", + unsuccessful_touch: "2", + accurate_goal_kicks: "3", + accurate_long_balls: "4", + att_assist_openplay: "1", + effective_clearance: "2", + final_third_entries: "4", + total_fwd_zone_pass: "37", + long_pass_own_to_opp: "7", + offtarget_att_assist: "1", + ontarget_scoring_att: "1", + total_back_zone_pass: "27", + total_cross_nocorner: "2", + accurate_chipped_pass: "1", + attempted_tackle_foul: "1", + possession_percentage: "64.4", + total_corners_intobox: "1", + accurate_fwd_zone_pass: "24", + accurate_keeper_throws: "1", + attempts_conceded_obox: "1", + accurate_back_zone_pass: "25", + accurate_cross_nocorner: "1", + total_final_third_passes: "19", + successful_open_play_pass: "44", + long_pass_own_to_opp_success: "4", + successful_final_third_passes: "12", + }, + }, + ], + }, + extra: { + decision: null, + decision_method: null, + }, + retirement_info: null, + }, + { + sport: { + id: "soccer", + name: "Soccer", + }, + league: { + id: "uefa_-_nations_league", + name: "UEFA - Nations League", + }, + fixture: { + id: "7B28437F12ED", + game_id: "18292-24011-2024-11-19", + start_date: "2024-11-19T19:45:00Z", + home_competitors: [ + { + id: "43C553083327", + name: "Malta", + abbreviation: "MLT", + logo: "https://cdn.opticodds.com/team-logos/soccer/6093.png", + }, + ], + away_competitors: [ + { + id: "0D9A76558077", + name: "Andorra", + abbreviation: "AND", + logo: "https://cdn.opticodds.com/team-logos/soccer/6073.png", + }, + ], + home_team_display: "Malta", + away_team_display: "Andorra", + status: "live", + is_live: true, + }, + scores: { + home: { + total: 0.0, + periods: { + period_1: 0.0, + }, + aggregate: null, + }, + away: { + total: 0.0, + periods: { + period_1: 0.0, + }, + aggregate: null, + }, + }, + in_play: { + period: "1H", + clock: "13", + last_play: null, + time_min: null, + time_sec: null, + balls: null, + outs: null, + strikes: null, + runners: null, + batter: null, + pitcher: null, + possession: null, + down: null, + distance_to_go: null, + field_position: null, + }, + events: [], + stats: { + home: [ + { + period: "all", + stats: { + touches: "112", + duel_won: "9", + fwd_pass: "30", + duel_lost: "4", + aerial_won: "4", + total_pass: "87", + aerial_lost: "3", + fk_foul_won: "2", + passes_left: "6", + put_through: "1", + total_cross: "1", + won_contest: "2", + blocked_pass: "1", + fk_foul_lost: "1", + interception: "1", + lost_corners: "1", + passes_right: "7", + total_tackle: "1", + total_throws: "4", + accurate_pass: "74", + backward_pass: "13", + ball_recovery: "4", + blocked_cross: "1", + leftside_pass: "25", + poss_lost_all: "18", + total_contest: "2", + total_layoffs: "2", + total_offside: "1", + formation_used: "3421", + head_clearance: "4", + open_play_pass: "83", + poss_lost_ctrl: "18", + rightside_pass: "19", + total_launches: "1", + accurate_throws: "4", + poss_won_def3rd: "2", + poss_won_mid3rd: "2", + total_clearance: "5", + accurate_layoffs: "2", + interception_won: "1", + pen_area_entries: "3", + total_long_balls: "11", + crosses18yardplus: "1", + total_chipped_pass: "8", + total_through_ball: "1", + unsuccessful_touch: "3", + accurate_long_balls: "6", + effective_clearance: "5", + final_third_entries: "9", + total_fwd_zone_pass: "33", + long_pass_own_to_opp: "14", + total_back_zone_pass: "55", + total_cross_nocorner: "1", + accurate_chipped_pass: "4", + possession_percentage: "76.5", + accurate_fwd_zone_pass: "25", + attempts_conceded_ibox: "1", + successful_put_through: "1", + accurate_back_zone_pass: "49", + effective_blocked_cross: "1", + effective_head_clearance: "4", + total_final_third_passes: "9", + successful_open_play_pass: "70", + long_pass_own_to_opp_success: "9", + successful_final_third_passes: "5", + }, + }, + { + period: "period_1", + stats: { + touches: "112", + duel_won: "9", + fwd_pass: "30", + duel_lost: "4", + aerial_won: "4", + total_pass: "87", + aerial_lost: "3", + fk_foul_won: "2", + passes_left: "6", + put_through: "1", + total_cross: "1", + won_contest: "2", + blocked_pass: "1", + fk_foul_lost: "1", + interception: "1", + lost_corners: "1", + passes_right: "7", + total_tackle: "1", + total_throws: "4", + accurate_pass: "74", + backward_pass: "13", + ball_recovery: "4", + blocked_cross: "1", + leftside_pass: "25", + poss_lost_all: "18", + total_contest: "2", + total_layoffs: "2", + total_offside: "1", + head_clearance: "4", + open_play_pass: "83", + poss_lost_ctrl: "18", + rightside_pass: "19", + total_launches: "1", + accurate_throws: "4", + poss_won_def3rd: "2", + poss_won_mid3rd: "2", + total_clearance: "5", + accurate_layoffs: "2", + interception_won: "1", + pen_area_entries: "3", + total_long_balls: "11", + crosses18yardplus: "1", + total_chipped_pass: "8", + total_through_ball: "1", + unsuccessful_touch: "3", + accurate_long_balls: "6", + effective_clearance: "5", + final_third_entries: "9", + total_fwd_zone_pass: "33", + long_pass_own_to_opp: "14", + total_back_zone_pass: "55", + total_cross_nocorner: "1", + accurate_chipped_pass: "4", + possession_percentage: "76.5", + accurate_fwd_zone_pass: "25", + attempts_conceded_ibox: "1", + successful_put_through: "1", + accurate_back_zone_pass: "49", + effective_blocked_cross: "1", + effective_head_clearance: "4", + total_final_third_passes: "9", + successful_open_play_pass: "70", + long_pass_own_to_opp_success: "9", + successful_final_third_passes: "5", + }, + }, + ], + away: [ + { + period: "all", + stats: { + touches: "39", + duel_won: "4", + fwd_pass: "15", + duel_lost: "9", + hand_ball: "1", + aerial_won: "3", + att_corner: "1", + total_pass: "25", + aerial_lost: "4", + fk_foul_won: "1", + passes_left: "3", + put_through: "2", + total_cross: "2", + won_corners: "1", + att_rf_total: "1", + corner_taken: "1", + dispossessed: "1", + fk_foul_lost: "3", + passes_right: "8", + total_throws: "2", + accurate_pass: "13", + att_bx_centre: "1", + att_ibox_miss: "1", + attempts_ibox: "1", + backward_pass: "1", + ball_recovery: "6", + crosses18yard: "1", + leftside_pass: "4", + poss_lost_all: "19", + challenge_lost: "2", + formation_used: "541", + head_clearance: "1", + open_play_pass: "22", + poss_lost_ctrl: "19", + rightside_pass: "5", + total_flick_on: "1", + total_launches: "4", + poss_won_mid3rd: "3", + shot_off_target: "1", + total_clearance: "2", + pen_area_entries: "2", + total_long_balls: "8", + accurate_launches: "1", + total_scoring_att: "1", + fouled_final_third: "1", + total_chipped_pass: "5", + touches_in_opp_box: "2", + unsuccessful_touch: "2", + accurate_long_balls: "4", + effective_clearance: "2", + final_third_entries: "12", + total_fwd_zone_pass: "22", + long_pass_own_to_opp: "8", + total_back_zone_pass: "5", + total_cross_nocorner: "1", + total_keeper_sweeper: "1", + accurate_chipped_pass: "2", + attempted_tackle_foul: "1", + possession_percentage: "23.5", + total_corners_intobox: "1", + accurate_fwd_zone_pass: "9", + accurate_back_zone_pass: "4", + accurate_keeper_sweeper: "1", + effective_head_clearance: "1", + total_final_third_passes: "17", + successful_open_play_pass: "10", + long_pass_own_to_opp_success: "3", + successful_final_third_passes: "7", + }, + }, + { + period: "period_1", + stats: { + touches: "39", + duel_won: "4", + fwd_pass: "15", + duel_lost: "9", + hand_ball: "1", + aerial_won: "3", + att_corner: "1", + total_pass: "25", + aerial_lost: "4", + fk_foul_won: "1", + passes_left: "3", + put_through: "2", + total_cross: "2", + won_corners: "1", + att_rf_total: "1", + corner_taken: "1", + dispossessed: "1", + fk_foul_lost: "3", + passes_right: "8", + total_throws: "2", + accurate_pass: "13", + att_bx_centre: "1", + att_ibox_miss: "1", + attempts_ibox: "1", + backward_pass: "1", + ball_recovery: "6", + crosses18yard: "1", + leftside_pass: "4", + poss_lost_all: "19", + challenge_lost: "2", + head_clearance: "1", + open_play_pass: "22", + poss_lost_ctrl: "19", + rightside_pass: "5", + total_flick_on: "1", + total_launches: "4", + poss_won_mid3rd: "3", + shot_off_target: "1", + total_clearance: "2", + pen_area_entries: "2", + total_long_balls: "8", + accurate_launches: "1", + total_scoring_att: "1", + fouled_final_third: "1", + total_chipped_pass: "5", + touches_in_opp_box: "2", + unsuccessful_touch: "2", + accurate_long_balls: "4", + effective_clearance: "2", + final_third_entries: "12", + total_fwd_zone_pass: "22", + long_pass_own_to_opp: "8", + total_back_zone_pass: "5", + total_cross_nocorner: "1", + total_keeper_sweeper: "1", + accurate_chipped_pass: "2", + attempted_tackle_foul: "1", + possession_percentage: "23.5", + total_corners_intobox: "1", + accurate_fwd_zone_pass: "9", + accurate_back_zone_pass: "4", + accurate_keeper_sweeper: "1", + effective_head_clearance: "1", + total_final_third_passes: "17", + successful_open_play_pass: "10", + long_pass_own_to_opp_success: "3", + successful_final_third_passes: "7", + }, + }, + ], + }, + extra: { + decision: null, + decision_method: null, + }, + retirement_info: null, + }, + { + sport: { + id: "tennis", + name: "Tennis", + }, + league: { + id: "atp", + name: "ATP", + }, + fixture: { + id: "4673726", + game_id: "98292-24011-2024-11-09", + start_date: "2024-11-09T14:10:00.000Z", + home_competitors: [ + { + id: "43C553083327", + name: "Hamad Medjedovic", + abbreviation: "HMD", + logo: "https://cdn.opticodds.com/team-logos/soccer/6093.png", + }, + ], + away_competitors: [ + { + id: "0D9A76558077", + name: "Denis Shapovalov", + abbreviation: "DSH", + logo: "https://cdn.opticodds.com/team-logos/soccer/6073.png", + }, + ], + home_team_display: "Hamad Medjedovic", + away_team_display: "Denis Shapovalov", + status: "live", + is_live: true, + }, + scores: { + home: { + total: 3.0, + periods: { + period_1: 3.0, + }, + aggregate: null, + }, + away: { + total: 3.0, + periods: { + period_1: 3.0, + }, + aggregate: null, + }, + }, + in_play: { + period: "1H", + clock: "13", + last_play: null, + time_min: null, + time_sec: null, + balls: null, + outs: null, + strikes: null, + runners: null, + batter: null, + pitcher: null, + possession: null, + down: null, + distance_to_go: null, + field_position: null, + }, + events: [], + extra: { + decision: null, + decision_method: null, + }, + retirement_info: null, + }, +]; + +module.exports = { liveApiResults }; diff --git a/overtimeV2Api/test/mockData/opticOdds/opticOddsStreamEventOdds.js b/overtimeV2Api/test/mockData/opticOdds/opticOddsStreamEventOdds.js new file mode 100644 index 00000000..ae3d6979 --- /dev/null +++ b/overtimeV2Api/test/mockData/opticOdds/opticOddsStreamEventOdds.js @@ -0,0 +1,111 @@ +const streamEventOdds = { + data: [ + { + deep_link: null, + fixture_id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + grouping_key: "default", + id: "41571-32765-2024-11-19:draftkings:moneyline:draw", + is_live: true, + is_main: true, + league: "UEFA - Nations League", + limits: null, + market: "Moneyline", + name: "Draw", + player_id: null, + points: null, + price: 4.8, + selection: "Draw", + selection_line: null, + selection_points: null, + sport: "soccer", + sportsbook: "DraftKings", + team_id: null, + timestamp: 1732045800.7847786, + }, + { + deep_link: null, + fixture_id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + grouping_key: "default", + id: "41571-32765-2024-11-19:draftkings:moneyline:montenegro", + is_live: true, + is_main: true, + league: "UEFA - Nations League", + limits: null, + market: "Moneyline", + name: "Montenegro", + player_id: null, + points: null, + price: 5.7, + selection: "Montenegro", + selection_line: null, + selection_points: null, + sport: "soccer", + sportsbook: "DraftKings", + team_id: null, + timestamp: 1732045800.7847786, + }, + { + deep_link: null, + fixture_id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + grouping_key: "default:2", + id: "41571-32765-2024-11-19:draftkings:total_points:over_2", + is_live: true, + is_main: true, + league: "UEFA - Nations League", + limits: null, + market: "Total Points", + name: "Over 2", + player_id: null, + points: 2, + price: 1.769, + selection: "", + selection_line: "over", + selection_points: 2, + sport: "soccer", + sportsbook: "DraftKings", + team_id: null, + timestamp: 1732045800.7847786, + }, + ], + entry_id: "1730079534820-2", + type: "odds", +}; + +const streamEventLockedOdds = { + data: [ + { + deep_link: null, + fixture_id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + grouping_key: "default:2", + id: "41571-32765-2024-11-19:draftkings:total_points:over_2", + is_live: true, + is_main: true, + league: "UEFA - Nations League", + limits: null, + market: "Total Points", + name: "Over 2", + player_id: null, + points: 2, + price: 1.769, + selection: "", + selection_line: "over", + selection_points: 2, + sport: "soccer", + sportsbook: "DraftKings", + team_id: null, + timestamp: 1732045800.7847786, + }, + ], + entry_id: "1730079534820-2", + type: "locked-odds", +}; + +// simulates multiple events +const streamOddsEvents = [streamEventOdds, streamEventLockedOdds]; +const streamOddsEventsData = [streamEventOdds.data, streamEventLockedOdds.data]; + +module.exports = { streamOddsEvents, streamOddsEventsData }; diff --git a/overtimeV2Api/test/mockData/opticOdds/opticOddsStreamEventResults.js b/overtimeV2Api/test/mockData/opticOdds/opticOddsStreamEventResults.js new file mode 100644 index 00000000..158951be --- /dev/null +++ b/overtimeV2Api/test/mockData/opticOdds/opticOddsStreamEventResults.js @@ -0,0 +1,92 @@ +const streamResultsEvent = { + data: { + fixture_id: "3DA34AEB6566", + is_live: true, + league: "UEFA - Nations League", + player_results: [], + score: { + sport: { + id: "soccer", + name: "Soccer", + }, + league: { + id: "uefa_-_nations_league", + name: "UEFA - Nations League", + }, + fixture: { + id: "3DA34AEB6566", + game_id: "41571-32765-2024-11-19", + start_date: "2024-11-19T19:45:00Z", + home_competitors: [ + { + id: "7DAC26FE4F9B", + name: "Montenegro", + abbreviation: "MNE", + logo: "https://cdn.opticodds.com/team-logos/soccer/6095.png", + }, + ], + away_competitors: [ + { + id: "2C7B844242F1", + name: "Türkiye", + abbreviation: "TUR", + logo: "https://cdn.opticodds.com/team-logos/soccer/6071.png", + }, + ], + home_team_display: "Montenegro", + away_team_display: "Türkiye", + status: "live", + is_live: true, + }, + scores: { + home: { + total: 3.0, + periods: { + period_1: 0.0, + period_2: 0.0, + }, + aggregate: null, + }, + away: { + total: 2.0, + periods: { + period_1: 0.0, + period_2: 0.0, + }, + aggregate: null, + }, + }, + in_play: { + period: "2H", + clock: "77", + last_play: null, + time_min: null, + time_sec: null, + balls: null, + outs: null, + strikes: null, + runners: null, + batter: null, + pitcher: null, + possession: null, + down: null, + distance_to_go: null, + field_position: null, + }, + events: [], + stats: null, + extra: { + decision: null, + decision_method: null, + }, + retirement_info: null, + }, + sport: "soccer", + }, + entry_id: "1722523617827-0", +}; + +// simulates multiple events +const streamResultsEvents = [streamResultsEvent]; + +module.exports = { streamResultsEvents }; diff --git a/overtimeV2Api/test/mockData/redis/streams.js b/overtimeV2Api/test/mockData/redis/streams.js new file mode 100644 index 00000000..6d2b0b01 --- /dev/null +++ b/overtimeV2Api/test/mockData/redis/streams.js @@ -0,0 +1,42 @@ +const { redisClient } = require("../../../../redis/client"); +const { + getRedisKeyForOpticOddsStreamEventOddsId, + getRedisKeyForOpticOddsStreamEventResults, +} = require("../../../utils/opticOdds/opticOddsStreamsConnector"); +const { streamOddsEvents } = require("../opticOdds/opticOddsStreamEventOdds"); +const { streamResultsEvents } = require("../opticOdds/opticOddsStreamEventResults"); + +const setRedisStreamOddsDataForGameId = (gameId, isTestnet) => { + const redisKeysForOdds = []; + + streamOddsEvents.forEach((streamOddsEvent) => { + const streamOddsDataArray = streamOddsEvent.data; + streamOddsDataArray.forEach((streamOddsData) => { + if (streamOddsData.fixture_id === gameId) { + if (streamOddsEvent.type === "locked-odds") { + streamOddsData.isLocked = true; + } + redisClient.set(streamOddsData.id, JSON.stringify(streamOddsData)); + redisKeysForOdds.push(streamOddsData.id); + } + }); + }); + + if (redisKeysForOdds.length) { + const redisGameKey = getRedisKeyForOpticOddsStreamEventOddsId(gameId, isTestnet); + redisClient.set(redisGameKey, JSON.stringify(redisKeysForOdds)); + } +}; + +const setRedisStreamResultsDataForGameId = (gameId, isTestnet) => { + const resultsData = streamResultsEvents.find( + (streamResultsEvent) => streamResultsEvent.data.fixture_id === gameId, + )?.data; + + if (resultsData) { + const redisGameKey = getRedisKeyForOpticOddsStreamEventResults(gameId, isTestnet); + redisClient.set(redisGameKey, JSON.stringify(resultsData)); + } +}; + +module.exports = { setRedisStreamOddsDataForGameId, setRedisStreamResultsDataForGameId }; diff --git a/overtimeV2Api/test/mockData/riskManagement/bookmakersData.js b/overtimeV2Api/test/mockData/riskManagement/bookmakersData.js new file mode 100644 index 00000000..c6229b2c --- /dev/null +++ b/overtimeV2Api/test/mockData/riskManagement/bookmakersData.js @@ -0,0 +1,187 @@ +const bookmakersData = [ + { + sportName: "Tennis Masters", + sportId: "156", + primaryBookmaker: "draftkings", + secondaryBookmaker: "", + tertiaryBookmaker: "", + }, + { + sportName: "Tennis Grand Slam", + sportId: "153", + primaryBookmaker: "draftkings", + secondaryBookmaker: "", + tertiaryBookmaker: "", + }, + { + sportName: "Tennis WTA", + sportId: "152", + primaryBookmaker: "draftkings", + secondaryBookmaker: "", + tertiaryBookmaker: "", + }, + { + sportName: "Brazil cup", + sportId: "20002", + primaryBookmaker: "bovada", + secondaryBookmaker: "", + tertiaryBookmaker: "", + }, + { + sportName: "MLS", + sportId: "10", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "EPL", + sportId: "11", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "FRA1", + sportId: "12", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "GER1", + sportId: "13", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "La Liga", + sportId: "14", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "Seria A", + sportId: "15", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "UEFA champions League", + sportId: "16", + primaryBookmaker: "draftkings", + secondaryBookmaker: "", + tertiaryBookmaker: "", + }, + { + sportName: "UEFA Europa League", + sportId: "17", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "JPN1", + sportId: "19", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "Copa Libertadores", + sportId: "45", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "NET1", + sportId: "57", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "POR1", + sportId: "61", + primaryBookmaker: "bovada", + secondaryBookmaker: "pinnacle", + tertiaryBookmaker: "", + }, + { sportName: "Brazil", sportId: "268", primaryBookmaker: "bovada", secondaryBookmaker: "", tertiaryBookmaker: "" }, + { + sportName: "Saudi League", + sportId: "536", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "UEFA Conference League", + sportId: "10216", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "UEFA Nations League", + sportId: "9806", + primaryBookmaker: "draftkings", + secondaryBookmaker: "", + tertiaryBookmaker: "", + }, + { + sportName: "FIFA WC", + sportId: "18", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "NFL", + sportId: "2", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "MLB", + sportId: "3", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "NHL", + sportId: "6", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "NBA", + sportId: "4", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "WNBA", + sportId: "8", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, + { + sportName: "Euroleague", + sportId: "399", + primaryBookmaker: "draftkings", + secondaryBookmaker: "bovada", + tertiaryBookmaker: "", + }, +]; + +module.exports = { bookmakersData }; diff --git a/overtimeV2Api/test/mockData/riskManagement/leaguesData.js b/overtimeV2Api/test/mockData/riskManagement/leaguesData.js new file mode 100644 index 00000000..90591cf6 --- /dev/null +++ b/overtimeV2Api/test/mockData/riskManagement/leaguesData.js @@ -0,0 +1,1584 @@ +const leaguesData = [ + { + name: "NCAAF", + sportId: "1", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NCAAF", + sportId: "1", + typeId: "10001", + marketName: "Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NCAAF", + sportId: "1", + typeId: "10002", + marketName: "Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10001", + marketName: "Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10002", + marketName: "Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10031", + marketName: "1st Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10032", + marketName: "2nd Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10033", + marketName: "3rd Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10034", + marketName: "4th Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10041", + marketName: "1st Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10042", + marketName: "2nd Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10043", + marketName: "3rd Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10044", + marketName: "4th Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10071", + marketName: "1st Half Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10072", + marketName: "2nd Half Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10061", + marketName: "1st Half Total Points Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NFL", + sportId: "2", + typeId: "10062", + marketName: "2nd Half Total Pointss", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "MLB", + sportId: "3", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "MLB", + sportId: "3", + typeId: "10001", + marketName: "Run Line", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "MLB", + sportId: "3", + typeId: "10002", + marketName: "Total Runs", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10001", + marketName: "Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10002", + marketName: "Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10031", + marketName: "1st Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10032", + marketName: "2nd Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10033", + marketName: "3rd Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10034", + marketName: "4th Quarter Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10041", + marketName: "1st Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10042", + marketName: "2nd Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10043", + marketName: "3rd Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10044", + marketName: "4th Quarter Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10071", + marketName: "1st Half Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10072", + marketName: "2nd Half Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10061", + marketName: "1st Half Total Points Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NBA", + sportId: "4", + typeId: "10062", + marketName: "2nd Half Total Pointss", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10001", + marketName: "Puck Line", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10031", + marketName: "1st Period Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10032", + marketName: "2nd Period Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10033", + marketName: "3rd Period Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10041", + marketName: "1st Period Puck Line", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10042", + marketName: "2nd Period Puck Line", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "NHL", + sportId: "6", + typeId: "10043", + marketName: "3rd Period Puck Line", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "WNBA", + sportId: "8", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "WNBA", + sportId: "8", + typeId: "10001", + marketName: "Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "WNBA", + sportId: "8", + typeId: "10002", + marketName: "Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "MLS", + sportId: "10", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "MLS", + sportId: "10", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "MLS", + sportId: "10", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EPL", + sportId: "11", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EPL", + sportId: "11", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EPL", + sportId: "11", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EPL", + sportId: "11", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EPL", + sportId: "11", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Ligue 1", + sportId: "12", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Ligue 1", + sportId: "12", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Ligue 1", + sportId: "12", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Ligue 1", + sportId: "12", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Ligue 1", + sportId: "12", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Bundesliga", + sportId: "13", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Bundesliga", + sportId: "13", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Bundesliga", + sportId: "13", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Bundesliga", + sportId: "13", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Bundesliga", + sportId: "13", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "La Liga", + sportId: "14", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "La Liga", + sportId: "14", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "La Liga", + sportId: "14", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "La Liga", + sportId: "14", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "La Liga", + sportId: "14", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Serie A", + sportId: "15", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Serie A", + sportId: "15", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Serie A", + sportId: "15", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Serie A", + sportId: "15", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Serie A", + sportId: "15", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Champions League", + sportId: "16", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Champions League", + sportId: "16", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Champions League", + sportId: "16", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Champions League", + sportId: "16", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Champions League", + sportId: "16", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Europa League", + sportId: "17", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Europa League", + sportId: "17", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Europa League", + sportId: "17", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Europa League", + sportId: "17", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Europa League", + sportId: "17", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "FIFA World Cup Qualifiers", + sportId: "18", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "FIFA World Cup Qualifiers", + sportId: "18", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "FIFA World Cup Qualifiers", + sportId: "18", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "FIFA World Cup Qualifiers", + sportId: "18", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "FIFA World Cup Qualifiers", + sportId: "18", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "J1 League", + sportId: "19", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "J1 League", + sportId: "19", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "J1 League", + sportId: "19", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa America", + sportId: "44", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa America", + sportId: "44", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa America", + sportId: "44", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa Libertadores", + sportId: "45", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa Libertadores", + sportId: "45", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa Libertadores", + sportId: "45", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa Libertadores", + sportId: "45", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa Libertadores", + sportId: "45", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA EURO 2024", + sportId: "50", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA EURO 2024", + sportId: "50", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA EURO 2024", + sportId: "50", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Eredivisie", + sportId: "57", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Eredivisie", + sportId: "57", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Eredivisie", + sportId: "57", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Primeira Liga", + sportId: "61", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Primeira Liga", + sportId: "61", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Primeira Liga", + sportId: "61", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "WTA Events", + sportId: "152", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "WTA Events", + sportId: "152", + typeId: "10001", + marketName: "Game Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "WTA Events", + sportId: "152", + typeId: "10002", + marketName: "Total Games", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Grand Slam", + sportId: "153", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Grand Slam", + sportId: "153", + typeId: "10001", + marketName: "Game Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Grand Slam", + sportId: "153", + typeId: "10002", + marketName: "Total Games", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "ATP Events", + sportId: "156", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "ATP Events", + sportId: "156", + typeId: "10001", + marketName: "Game Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "ATP Events", + sportId: "156", + typeId: "10002", + marketName: "Total Games", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Liga MX", + sportId: "230", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Liga MX", + sportId: "230", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Liga MX", + sportId: "230", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Brazil - Serie A", + sportId: "268", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Brazil - Serie A", + sportId: "268", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Brazil - Serie A", + sportId: "268", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Euroleague", + sportId: "399", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Euroleague", + sportId: "399", + typeId: "10001", + marketName: "Point Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Euroleague", + sportId: "399", + typeId: "10002", + marketName: "Total Points", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Saudi Professional League", + sportId: "536", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Saudi Professional League", + sportId: "536", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Saudi Professional League", + sportId: "536", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Nations League", + sportId: "9806", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Nations League", + sportId: "9806", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Nations League", + sportId: "9806", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Nations League", + sportId: "9806", + typeId: "10017", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Nations League", + sportId: "9806", + typeId: "10018", + marketName: "Team Total", + type: "Total", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Conference League", + sportId: "10216", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Conference League", + sportId: "10216", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Conference League", + sportId: "10216", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Super Cup", + sportId: "20001", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Super Cup", + sportId: "20001", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "UEFA Super Cup", + sportId: "20001", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa do Brasil", + sportId: "20002", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa do Brasil", + sportId: "20002", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "Copa do Brasil", + sportId: "20002", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EFL Championship", + sportId: "20011", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EFL Championship", + sportId: "20011", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "EFL Championship", + sportId: "20011", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "England - EFL Cup", + sportId: "20125", + typeId: "0", + marketName: "Moneyline", + type: "Moneyline", + enabled: "true", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "England - EFL Cup", + sportId: "20125", + typeId: "10001", + marketName: "Goal Spread", + type: "Spread", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, + { + name: "England - EFL Cup", + sportId: "20125", + typeId: "10002", + marketName: "Total Goals", + type: "Total", + enabled: "false", + minOdds: "0.75", + maxOdds: "0.25", + }, +]; + +module.exports = { leaguesData }; diff --git a/overtimeV2Api/test/mockData/riskManagement/spreadData.js b/overtimeV2Api/test/mockData/riskManagement/spreadData.js new file mode 100644 index 00000000..a1f6a305 --- /dev/null +++ b/overtimeV2Api/test/mockData/riskManagement/spreadData.js @@ -0,0 +1,96 @@ +const spreadData = [ + { sportName: "MLB", sportId: "3", typeId: "10002", minSpread: "5", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "11012", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "11019", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "11222", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10031", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10032", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10033", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10041", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10042", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10043", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10051", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10061", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "10071", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "MLB", sportId: "3", typeId: "11047", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "WTA", sportId: "152", typeId: "0", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "WTA", sportId: "152", typeId: "10001", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "WTA", sportId: "152", typeId: "10002", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "ATP GS", sportId: "153", typeId: "0", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "ATP GS", sportId: "153", typeId: "10001", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "ATP GS", sportId: "153", typeId: "10002", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "ATP", sportId: "156", typeId: "0", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "ATP", sportId: "156", typeId: "10001", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "ATP", sportId: "156", typeId: "10002", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Eurocup", sportId: "20200", typeId: "0", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "Eurocup", sportId: "20200", typeId: "10001", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "Eurocup", sportId: "20200", typeId: "10002", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "0", minSpread: "5", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "10001", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "10002", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11029", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11035", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11038", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11039", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11225", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11226", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "Euroleague", sportId: "399", typeId: "11227", minSpread: "9", targetSpread: "0", addedSpread: "0" }, + { sportName: "CSGO", sportId: "9977", typeId: "0", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "CSGO", sportId: "9977", typeId: "10001", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "CSGO", sportId: "9977", typeId: "10002", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "DOTA2", sportId: "9983", typeId: "0", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "DOTA2", sportId: "9983", typeId: "10001", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "DOTA2", sportId: "9983", typeId: "10002", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "LOL", sportId: "10138", typeId: "0", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "LOL", sportId: "10138", typeId: "10001", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "LOL", sportId: "10138", typeId: "10002", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NCAAF", sportId: "1", typeId: "0", minSpread: "5", targetSpread: "0", addedSpread: "0" }, + { sportName: "NCAAF", sportId: "1", typeId: "10001", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "NCAAF", sportId: "1", typeId: "10002", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10021", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10022", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10023", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10031", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10032", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10033", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10041", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10042", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NHL", sportId: "6", typeId: "10043", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "0", minSpread: "5", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10001", minSpread: "5", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10002", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10021", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10022", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10023", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10031", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10032", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10033", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10041", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10042", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10043", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10001", minSpread: "6", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10002", minSpread: "7", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10051", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10052", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10061", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10062", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10071", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "10072", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11029", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11035", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11038", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11039", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11225", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11226", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11227", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11228", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11229", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11230", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11231", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11087", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11088", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11097", minSpread: "8", targetSpread: "0", addedSpread: "0" }, + { sportName: "NBA", sportId: "4", typeId: "11098", minSpread: "8", targetSpread: "0", addedSpread: "0" }, +]; + +module.exports = { spreadData }; diff --git a/overtimeV2Api/test/mockData/riskManagement/teamsMap.js b/overtimeV2Api/test/mockData/riskManagement/teamsMap.js new file mode 100644 index 00000000..5f3205e6 --- /dev/null +++ b/overtimeV2Api/test/mockData/riskManagement/teamsMap.js @@ -0,0 +1,909 @@ +const teams = [ + ["luton town", "luton"], + ["ath.bilbao", "athletic bilbao"], + ["atl.madrid", "atletico madrid"], + ["fc porto", "porto"], + ["psv eindhoven", "psv"], + ["borussia dortmund", "dortmund"], + ["internazionale", "inter"], + ["fk qarabag", "qarabag"], + ["stade rennais", "rennes"], + ["ac milan", "milan"], + ["as roma", "roma"], + ["feyenoord rotterdam", "feyenoord"], + ["sporting cp", "sporting"], + ["olympique marseille", "marseille"], + ["shakhtar donetsk", "shakhtar"], + ["sparta prague", "sparta praha"], + ["bodoe/glimt", "bodo"], + ["ludogorets razgrad", "ludogorets"], + ["slovan bratislava", "slovan b."], + ["eintracht frankfurt", "eintracht"], + ["union st.gilloise", "st.gilloise"], + ["sturm graz", "sturm"], + ["legia warszawa", "legia"], + ["real betis", "real betis"], + ["bayer leverkusen", "leverkusen"], + ["olympique lyon", "lyon"], + ["manchester united", "man.utd"], + ["brighton & hove albion", "brighton"], + ["nottingham forest", "nott.forest"], + ["manchester city", "man.city"], + ["arsenal fc", "arsenal"], + ["newcastle united", "newcastle"], + ["brentford fc", "brentford"], + ["olympiakos", "olympiacos"], + ["real sociedad", "real sociedad"], + ["alavés", "alaves"], + ["almería", "almeria"], + ["villarreal", "villareal"], + ["borussia monchengladbach", "m' gladbach"], + ["vfl bochum", "bochum"], + ["vfb stuttgart", "stuttgart"], + ["fc cologne", "koln"], + ["werder bremen", "werder"], + ["sv darmstadt 98", "darmstadt"], + ["bayern munich", "bayern"], + ["1. fc heidenheim", "heidenheim"], + ["fc union berlin", "union berlin"], + ["fc utrecht", "utrecht"], + ["fortuna sittard", "fortuna s."], + ["pec zwolle", "zwolle"], + ["sparta rotterdam", "sparta"], + ["al-raed", "al raed"], + ["al-taawoun", "al taawon"], + ["al fateh fc", "al fateh"], + ["damac fc", "dhamk"], + ["al ahli jeddah", "al ahli"], + ["al hazem", "al hazm"], + ["inter miami cf", "inter miami"], + ["real salt lake", "salt lake"], + ["columbus crew", "columbus"], + ["atlanta united fc", "atlanta united"], + ["los angeles fc", "los angeles"], + ["seattle sounders", "seattle"], + ["liverpool fc", "liverpool"], + ["burnley fc", "burnley"], + ["everton fc", "everton"], + ["fulham fc", "fulham"], + ["afc bournemouth", "bournemouth"], + ["inter milano", "inter"], + ["ssc napoli", "napoli"], + ["fc barcelona", "barcelona"], + ["qarabag fk", "qarabag"], + ["sc braga", "braga"], + ["toulouse fc", "toulouse"], + ["sl benfica", "benfica"], + ["sc freiburg", "freiburg"], + ["rc lens", "lens"], + ["galatasaray istanbul", "galatasaray"], + ["young boys bern", "young boys"], + ["fc shakhtar donetsk", "shakhtar"], + ["stade rennes", "rennes"], + ["sporting lisbon", "sporting"], + ["kaa gent", "gent"], + ["maccabi haifa fc", "maccabi haifa"], + ["pfc ludogorets 1945 razgrad", "ludogorets"], + ["servette geneva", "servette"], + ["ajax amsterdam", "ajax"], + ["real betis seville", "betis"], + ["sk slovan bratislava", "slovan b."], + ["sk sturm graz", "sturm"], + ["union saint-gilloise", "st.gilloise"], + ["ferencvarosi budapest", "ferencvaros"], + ["olympiacos piraeus", "olympiacos"], + ["molde fk", "molde"], + ["orlando magic", "orlando"], + ["cleveland cavaliers", "cleveland"], + ["detroit pistons", "detroit"], + ["indiana pacers", "indiana"], + ["brooklyn nets", "brooklyn"], + ["toronto raptors", "toronto"], + ["phoenix suns", "phoenix"], + ["dallas mavericks", "dallas"], + ["oklahoma city thunder", "oklahoma"], + ["houston rockets", "houston"], + ["new orleans pelicans", "new orleans"], + ["boston celtics", "boston"], + ["chicago bulls", "chicago"], + ["charlotte hornets", "charlotte"], + ["utah jazz", "utah"], + ["los angeles lakers", "la lakers"], + ["los angeles clippers", "la clippers"], + ["la clippers", "la clippers"], + ["golden state warriors", "golden state"], + ["san antonio spurs", "san antonio"], + ["sacramento kings", "sacramento"], + ["inter milan", "inter"], + ["hellas verona", "verona"], + ["fc augsburg", "augsburg"], + ["tsg hoffenheim", "hoffenheim"], + ["paris saint-germain", "psg"], + ["paris saint-germain fc", "psg"], + ["lorient fc", "lorient"], + ["fc lorient", "lorient"], + ["lorient", "lorient"], + ["le havre ac", "le havre"], + ["as monaco", "monaco"], + ["clermont foot", "clermont"], + ["fc volendam", "volendam"], + ["sc heerenveen", "heerenveen"], + ["almere city fc", "almere"], + ["go ahead eagles", "go ahead"], + ["fc twente", "twente"], + ["al ittihad j.", "al ittihad"], + ["al-wehda", "al wahda"], + ["al-ettifaq", "al ettifaq"], + ["al shabab r.", "al shabab"], + ["al nassr fc", "al nassr"], + ["al nassr r.", "al nassr"], + ["philadelphia 76ers", "philadelphia"], + ["new york knicks", "new york"], + ["washington wizards", "washington"], + ["denver nuggets", "denver"], + ["al fayha", "al fayha"], + ["al tai", "al tai"], + ["al-fayha", "al fayha"], + ["al taee", "al tai"], + ["al hilal saudi fc", "al hilal"], + ["al fateh sc", "al fateh"], + ["us lecce", "lecce"], + ["udinese calcio", "udinese"], + ["acf fiorentina", "fiorentina"], + ["ac monza", "monza"], + ["lecce", "lecce"], + ["udinese", "udinese"], + ["urawa red diamonds", "urawa"], + ["kyoto sanga", "kyoto"], + ["kyoto sanga fc", "kyoto"], + ["gamba osaka", "gamba osaka"], + ["tokyo verdy 1969", "tokyo verdy"], + ["tokyo verdy", "tokyo verdy"], + ["nagoya grampus", "nagoya"], + ["fc tokyo", "tokyo"], + ["sanfrecce hiroshima", "hiroshima"], + ["kashima antlers", "kashima"], + ["fc machida zelvia", "machida zelvia"], + ["machida zelvia", "machida zelvia"], + ["cerezo osaka", "cerezo osaka"], + ["hokkaido consadole sapporo", "consadole sapporo"], + ["consadole sapporo", "consadole sapporo"], + ["júbilo iwata", "jubilo iwata"], + ["jubilo iwata", "jubilo iwata"], + ["kashiwa reysol", "kashiwa reysol"], + ["shonan bellmare", "shonan bellmare"], + ["sagan tosu", "sagan tosu"], + ["kawasaki frontale", "kawasaki frontale"], + ["vissel kobe", "vissel kobe"], + ["avispa fukuoka", "avispa fukuoka"], + ["albirex niigata", "albirex niigata"], + ["yokohama f. marinos", "yokohama f. marinos"], + ["osasuna", "osasuna"], + ["mallorca", "mallorca"], + ["ca osasuna", "osasuna"], + ["real club deportivo mallorca", "mallorca"], + ["villarreal cf", "villareal"], + ["real madrid cf", "real madrid"], + ["real madrid", "real madrid"], + ["ud almería", "almeria"], + ["cádiz cf", "cadiz"], + ["cádiz", "cadiz"], + ["ud las palmas", "las palmas"], + ["las palmas", "las palmas"], + ["athletic club bilbao", "athletic bilbao"], + ["athletic bilbao", "athletic bilbao"], + ["sevilla fc", "sevilla"], + ["sevilla", "sevilla"], + ["valencia cf", "valencia"], + ["valencia", "valencia"], + ["girona fc", "girona"], + ["girona", "girona"], + ["barcelona", "barcelona"], + ["rayo vallecano", "rayo vallecano"], + ["granada cf", "granada"], + ["granada", "granada"], + ["real club celta de vigo", "celta vigo"], + ["celta vigo", "celta vigo"], + ["real betis balompié", "real betis"], + ["real sociedad de fútbol", "real sociedad"], + ["club atlético de madrid", "atletico madrid"], + ["atletico madrid", "atletico madrid"], + ["deportivo alavés", "alaves"], + ["getafe cf", "getafe"], + ["getafe", "getafe"], + ["olympique lyonnais", "lyon"], + ["lyon", "lyon"], + ["rc strasbourg alsace", "strasbourg"], + ["strasbourg", "strasbourg"], + ["lille osc", "lille"], + ["lille", "lille"], + ["ogc nice côte d'azur", "nice"], + ["nice", "nice"], + ["fc metz", "metz"], + ["metz", "metz"], + ["stade de reims", "reims"], + ["stade rennais fc", "rennes"], + ["racing club de lens", "lens"], + ["lens", "lens"], + ["montpellier hsc", "montpellier"], + ["montpellier", "montpellier"], + ["toulouse", "toulouse"], + ["stade brestois 29", "brest"], + ["brest", "brest"], + ["clermont foot 63", "clermont"], + ["as monaco fc", "monaco"], + ["fc nantes", "nantes"], + ["nantes", "nantes"], + ["olympique de marseille", "marseille"], + ["marseille", "marseille"], + ["bologna fc 1909", "bologna"], + ["bologna", "bologna"], + ["juventus fc", "juventus"], + ["juventus", "juventus"], + ["us salernitana 1919", "salernitana"], + ["salernitana", "salernitana"], + ["hellas verona fc", "verona"], + ["genoa cfc", "genoa"], + ["genoa", "genoa"], + ["fc internazionale milano", "inter"], + ["ss lazio", "lazio"], + ["lazio", "lazio"], + ["monza", "monza"], + ["frosinone calcio", "frosinone"], + ["frosinone", "frosinone"], + ["empoli fc", "empoli"], + ["empoli", "empoli"], + ["us sassuolo calcio", "sassuolo"], + ["sassuolo", "sassuolo"], + ["cagliari calcio", "cagliari"], + ["cagliari", "cagliari"], + ["torino fc", "torino"], + ["torino", "torino"], + ["fiorentina", "fiorentina"], + ["napoli", "napoli"], + ["bayer 04 leverkusen", "leverkusen"], + ["sv werder bremen", "werder"], + ["vfl bochum 1848", "bochum"], + ["1. fc heidenheim 1846", "heidenheim"], + ["1. fc köln", "koln"], + ["vfb stuttgart 1893", "stuttgart"], + ["borussia vfl mönchengladbach", "m' gladbach"], + ["bv borussia 09 dortmund", "dortmund"], + ["sv darmstadt 1898", "darmstadt"], + ["vfl wolfsburg", "wolfsburg"], + ["1. fsv mainz 05", "mainz"], + ["mainz", "mainz"], + ["rasenballsport leipzig", "leipzig"], + ["rb leipzig", "leipzig"], + ["1. fc union berlin", "union berlin"], + ["tsg 1899 hoffenheim", "hoffenheim"], + ["fc bayern münchen", "bayern"], + ["chelsea fc", "chelsea"], + ["chelsea", "chelsea"], + ["bournemouth", "bournemouth"], + ["sheffield united fc", "sheffield"], + ["sheffield united", "sheffield"], + ["tottenham hotspur fc", "tottenham"], + ["tottenham hotspur", "tottenham"], + ["burnley", "burnley"], + ["nottingham forest fc", "nott.forest"], + ["crystal palace fc", "crystal palace"], + ["crystal palace", "crystal palace"], + ["aston villa fc", "aston villa"], + ["aston villa", "aston villa"], + ["liverpool", "liverpool"], + ["wolverhampton wanderers fc", "wolves"], + ["wolverhampton", "wolves"], + ["brighton & hove albion fc", "brighton"], + ["manchester united fc", "man.utd"], + ["newcastle united fc", "newcastle"], + ["manchester city fc", "man.city"], + ["west ham united fc", "west ham"], + ["west ham united", "west ham"], + ["luton town fc", "luton"], + ["fulham", "fulham"], + ["everton", "everton"], + ["atlanta braves", "atlanta braves"], + ["san diego padres", "san diego padres"], + ["minnesota twins", "minnesota twins"], + ["cleveland guardians", "cleveland guardians"], + ["st. louis cardinals", "st. louis cardinals"], + ["new york mets", "new york mets"], + ["baltimore orioles", "baltimore orioles"], + ["toronto blue jays", "toronto blue jays"], + ["los angeles dodgers", "los angeles dodgers"], + ["arizona diamondbacks", "arizona diamondbacks"], + ["oakland athletics", "oakland athletics"], + ["colorado rockies", "colorado rockies"], + ["houston astros", "houston astros"], + ["los angeles angels", "los angeles angels"], + ["chicago cubs", "chicago cubs"], + ["kansas city royals", "kansas city royals"], + ["detroit tigers", "detroit tigers"], + ["chicago white sox", "chicago white sox"], + ["new york yankees", "new york yankees"], + ["seattle mariners", "seattle mariners"], + ["tampa bay rays", "tampa bay rays"], + ["boston red sox", "boston red sox"], + ["washington nationals", "washington nationals"], + ["cincinnati reds", "cincinnati reds"], + ["pittsburgh pirates", "pittsburgh pirates"], + ["san francisco giants", "san francisco giants"], + ["philadelphia phillies", "philadelphia phillies"], + ["texas rangers", "texas rangers"], + ["miami marlins", "miami marlins"], + ["miami heat", "miami heat"], + ["milwaukee bucks", "milwaukee bucks"], + ["milwaukee brewers", "milwaukee brewers"], + ["switzerland", "switzerland"], + ["germany", "germany"], + ["belgium", "belgium"], + ["romania", "romania"], + ["türkiye", "turkey"], + ["turkey", "turkey"], + ["turkiye", "turkey"], + ["portugal", "portugal"], + ["georgia", "georgia"], + ["czechia", "czechia"], + ["netherlands", "netherlands"], + ["france", "france"], + ["poland", "poland"], + ["austria", "austria"], + ["slovakia", "slovakia"], + ["spain", "spain"], + ["italy", "italy"], + ["denmark", "denmark"], + ["england", "england"], + ["slovenia", "slovenia"], + ["serbia", "serbia"], + ["scotland", "scotland"], + ["albania", "albania"], + ["hungary", "hungary"], + ["croatia", "croatia"], + ["ukraine", "ukraine"], + ["xtreme gaming", "xtreme gaming"], + ["team falcons", "team falcons"], + ["betboom team", "betboom team"], + ["aurora", "aurora"], + ["heroic", "heroic"], + ["azure ray", "azure ray"], + ["team heroic", "heroic"], + ["olympiacos", "olympiacos"], + ["olympiacos b.c.", "olympiacos"], + ["panathinaikos", "panathinaikos"], + ["fenerbahce", "fenerbahce"], + ["panathinaikos opap", "panathinaikos"], + ["fenerbahce beko", "fenerbahce"], + ["deportivo alaves", "alaves"], + ["inter", "inter"], + ["tomas martin etcheverry", "tomas etcheverry"], + ["tomas etcheverry", "tomas etcheverry"], + ["arthur cazaux", "arthur cazaux"], + ["taylor fritz", "taylor fritz"], + ["federico coria", "federico coria"], + ["alexei popyrin", "alexei popyrin"], + ["thanasi kokkinakis", "thanasi kokkinakis"], + ["flavio cobolli", "flavio cobolli"], + ["hamad medjedovic", "hamad medjedovic"], + ["jan-lennard struff", "jan-lennard struff"], + ["roman andres burruchaga", "roman andres burruchaga"], + ["roberto carballes baena", "roberto carballes baena"], + ["constant lestienne", "constant lestienne"], + ["gregoire barrere", "gregoire barrere"], + ["alexander bublik", "alexander bublik"], + ["daniel evans", "daniel evans"], + ["holger rune", "holger rune"], + ["novak djokovic", "novak djokovic"], + ["pierre-hugues herbert", "pierre-hugues herbert"], + ["corentin moutet", "corentin moutet"], + ["alexander shevchenko", "alexander shevchenko"], + ["henri squire", "henri squire"], + ["felix auger-aliassime", "felix auger-aliassime"], + ["matteo arnaldi", "matteo arnaldi"], + ["alexandre muller", "alexandre muller"], + ["karen khachanov", "karen khachanov"], + ["jozef kovalik", "jozef kovalik"], + ["sebastian baez", "sebastian baez"], + ["sebastian ofner", "sebastian ofner"], + ["pavel kotov", "pavel kotov"], + ["stan wawrinka", "stan wawrinka"], + ["francisco cerundolo", "francisco cerundolo"], + ["filip misolic", "filip misolic"], + ["denis shapovalov", "denis shapovalov"], + ["frances tiafoe", "frances tiafoe"], + ["fabio fognini", "fabio fognini"], + ["tommy paul", "tommy paul"], + ["gael monfils", "gael monfils"], + ["lorenzo musetti", "lorenzo musetti"], + ["daniil medvedev", "daniil medvedev"], + ["miomir kecmanovic", "miomir kecmanovic"], + ["lorenzo sonego", "lorenzo sonego"], + ["zhizhen zhang", "zhizhen zhang"], + ["andrey rublev", "andrey rublev"], + ["pedro martinez", "pedro martinez"], + ["hubert hurkacz", "hubert hurkacz"], + ["brandon nakashima", "brandon nakashima"], + ["carlos alcaraz", "carlos alcaraz"], + ["jesper de jong", "jesper de jong"], + ["fabian marozsan", "fabian marozsan"], + ["grigor dimitrov", "grigor dimitrov"], + ["zizou bergs", "zizou bergs"], + ["maximilian marterer", "maximilian marterer"], + ["richard gasquet", "richard gasquet"], + ["jannik sinner", "jannik sinner"], + ["daniel altmaier", "daniel altmaier"], + ["stefanos tsitsipas", "stefanos tsitsipas"], + ["sebastian korda", "sebastian korda"], + ["soonwoo kwon", "soon-woo kwon"], + ["soon-woo kwon", "soon-woo kwon"], + ["coco gauff", "coco gauff"], + ["iga swiatek", "iga swiatek"], + ["donna vekic", "donna vekic"], + ["anna kalinskaya", "anna kalinskaya"], + ["cristina bucsa", "cristina bucsa"], + ["jelena ostapenko", "jelena ostapenko"], + ["camila osorio", "camila osorio"], + ["danielle collins", "danielle collins"], + ["ana bogdan", "ana bogdan"], + ["viktorija golubic", "viktorija golubic"], + ["yafan wang", "yafan wang"], + ["sofia kenin", "sofia kenin"], + ["xinyu wang", "xinyu wang"], + ["varvara gracheva", "varvara gracheva"], + ["rebecca sramkova", "rebecca sramkova"], + ["irina-camelia begu", "irina-camelia begu"], + ["jana fett", "jana fett"], + ["liudmila samsonova", "liudmila samsonova"], + ["katerina siniakova", "katerina siniakova"], + ["katie volynets", "katie volynets"], + ["hailey baptiste", "hailey baptiste"], + ["elina svitolina", "elina svitolina"], + ["irene burillo escorihuela", "irene burillo escorihuela"], + ["yulia putintseva", "yulia putintseva"], + ["zeynep sonmez", "zeynep sonmez"], + ["sara errani", "sara errani"], + ["katie boulter", "katie boulter"], + ["arantxa rus", "arantxa rus"], + ["yue yuan", "yue yuan"], + ["lucija ciric bagaric", "lucija ciric bagaric"], + ["mirra andreeva", "mirra andreeva"], + ["victoria azarenka", "victoria azarenka"], + ["madison keys", "madison keys"], + ["magdalena frech", "magdalena frech"], + ["erika andreeva", "erika andreeva"], + ["lin zhu", "lin zhu"], + ["ashlyn krueger", "ashlyn krueger"], + ["elise mertens", "elise mertens"], + ["petra martic", "petra martic"], + ["anna blinkova", "anna blinkova"], + ["tamara zidansek", "tamara zidansek"], + ["naomi osaka", "naomi osaka"], + ["marta kostyuk", "marta kostyuk"], + ["bianca andreescu", "bianca andreescu"], + ["elisabetta cocciaretto", "elisabetta cocciaretto"], + ["clara tauson", "clara tauson"], + ["ons jabeur", "ons jabeur"], + ["olga danilovic", "olga danilovic"], + ["anastasia pavlyuchenkova", "anastasia pavlyuchenkova"], + ["anastasia potapova", "anastasia potapova"], + ["dayana yastremska", "dayana yastremska"], + ["caroline garcia", "caroline garcia"], + ["viktoriya tomova", "viktoriya tomova"], + ["bernarda pera", "bernarda pera"], + ["linda noskova", "linda noskova"], + ["marie bouzkova", "marie bouzkova"], + ["amanda anisimova", "amanda anisimova"], + ["chloe paquet", "chloe paquet"], + ["marketa vondrousova", "marketa vondrousova"], + ["jasmine paolini", "jasmine paolini"], + ["diane parry", "diane parry"], + ["moyuka uchijima", "moyuka uchijima"], + ["sloane stephens", "sloane stephens"], + ["emma navarro", "emma navarro"], + ["anna karolina schmiedlova", "anna karolina schmiedlova"], + ["paula badosa", "paula badosa"], + ["angelique kerber", "angelique kerber"], + ["mayar sherif", "mayar sherif"], + ["peyton stearns", "peyton stearns"], + ["emina bektas", "emina bektas"], + ["nadia podoroska", "nadia podoroska"], + ["renata zarazua", "renata zarazua"], + ["daria kasatkina", "daria kasatkina"], + ["aryna sabalenka", "aryna sabalenka"], + ["elina avanesyan", "elina avanesyan"], + ["tamara korpatsch", "tamara korpatsch"], + ["maria lourdes carle", "maria lourdes carle"], + ["kristina mladenovic", "kristina mladenovic"], + ["sorana cirstea", "sorana cirstea"], + ["zarina diyas", "zarina diyas"], + ["mananchaya sawangkaew:", "mananchaya sawangkaew"], + ["xinyu gao", "xinyu gao"], + ["elena-gabriela ruse", "elena-gabriela ruse"], + ["gabriela ruse", "elena-gabriela ruse"], + ["sijia wei", "sijia wei"], + ["xinxin yao", "xinxin yao"], + ["arina rodionova", "arina rodionova"], + ["anna bondar", "anna bondar"], + ["jaqueline cristian", "jaqueline cristian"], + ["han shi", "han shi"], + ["meiling wang", "meiling wang"], + ["ajla tomljanovic", "ajla tomljanovic"], + ["yufei ren", "yufei ren"], + ["yulia starodubtseva", "yulia starodubtseva"], + ["shuai zhang", "shuai zhang"], + ["giulio zeppieri", "giulio zeppieri"], + ["tallon griekspoor", "tallon griekspoor"], + ["luciano darderi", "luciano darderi"], + ["alexander zverev", "alexander zverev"], + ["david goffin", "david goffin"], + ["alex de minaur", "alex de minaur"], + ["jaume munar", "jaume munar"], + ["mariano navone", "mariano navone"], + ["tomas machac", "tomas machac"], + ["dusan lajovic", "dusan lajovic"], + ["casper ruud", "casper ruud"], + ["alejandro davidovich fokina", "alejandro davidovich fokina"], + ["arthur rinderknech", "arthur rinderknech"], + ["grêmio fb porto alegrense", "gremio"], + ["ec juventude", "juventude"], + ["sc corinthians paulista", "corinthians"], + ["fluminense fc", "fluminense"], + ["cr flamengo", "flamengo"], + ["cruzeiro ec", "cruzeiro"], + ["cuiabá ec", "cuiaba"], + ["clube atlético mineiro", "atletico mineiro"], + ["criciuma ec", "criciuma"], + ["club athletico paranaense", "athletico paranaense"], + ["atlético goianiense", "atletico go"], + ["fortaleza ec", "fortaleza"], + ["ec bahia", "bahia"], + ["ec vitória", "vitoria"], + ["cr vasco da gama", "vasco da gama"], + ["se palmeiras", "palmeiras"], + ["sc internacional", "internacional"], + ["botafogo fr", "botafogo"], + ["são paulo fc", "sao paulo"], + ["gremio", "gremio"], + ["juventude", "juventude"], + ["red bull bragantino", "bragantino"], + ["corinthians", "corinthians"], + ["fluminense", "fluminense"], + ["flamengo", "flamengo"], + ["cruzeiro", "cruzeiro"], + ["cuiaba", "cuiaba"], + ["atletico mg", "atletico mineiro"], + ["criciuma", "criciuma"], + ["athletico paranaense", "athletico paranaense"], + ["atletico go", "atletico go"], + ["fortaleza", "fortaleza"], + ["bahia", "bahia"], + ["vitoria", "vitoria"], + ["vasco da gama", "vasco da gama"], + ["palmeiras", "palmeiras"], + ["internacional", "internacional"], + ["botafogo rj", "botafogo"], + ["sao paulo", "sao paulo"], + ["edmonton oilers", "edmonton oilers"], + ["florida panthers", "florida panthers"], + ["argentina", "argentina"], + ["peru", "peru"], + ["canada", "canada"], + ["chile", "chile"], + ["ecuador", "ecuador"], + ["venezuela", "venezuela"], + ["mexico", "mexico"], + ["jamaica", "jamaica"], + ["usa", "usa"], + ["united states", "usa"], + ["uruguay", "uruguay"], + ["bolivia", "bolivia"], + ["panama", "panama"], + ["costa rica", "costa rica"], + ["paraguay", "paraguay"], + ["brazil", "brazil"], + ["colombia", "colombia"], + ["ben shelton", "ben shelton"], + ["ugo humbert", "ugo humbert"], + ["alejandro tabilo", "alejandro tabilo"], + ["nicolas jarry", "nicolas jarry"], + ["adrian mannarino", "adrian mannarino"], + ["jiri lehecka", "jiri lehecka"], + ["jack draper", "jack draper"], + ["arthur fils", "arthur fils"], + ["jordan thompson", "jordan thompson"], + ["cameron norrie", "cameron norrie"], + ["roman safiullin", "roman safiullin"], + ["marcos giron", "marcos giron"], + ["nuno borges", "nuno borges"], + ["laslo djere", "laslo djere"], + ["alex michelsen", "alex michelsen"], + ["giovanni mpetshi perricard", "giovanni mpetshi perricard"], + ["mpetshi perricard", "mpetshi perricard"], + ["matteo berrettini", "matteo berrettini"], + ["christopher eubanks", "christopher eubanks"], + ["dominik koepfer", "dominik koepfer"], + ["pablo carreno busta", "pablo carreno busta"], + ["yunchaokete bu", "yunchaokete bu"], + ["facundo diaz acosta", "facundo acosta"], + ["facundo acosta", "facundo acosta"], + ["max purcell", "max purcell"], + ["aleksandar vukic", "aleksandar vukic"], + ["marton fucsovics", "marton fucsovics"], + ["hugo gaston", "hugo gaston"], + ["sumit nagal", "sumit nagal"], + ["thiago seyboth wild", "thiago seyboth wild"], + ["luca nardi", "luca nardi"], + ["rinky hijikata", "rinky hijikata"], + ["jakub mensik", "jakub mensik"], + ["christopher o'connell", "christopher o'connell"], + ["james duckworth", "james duckworth"], + ["taro daniel", "taro daniel"], + ["emil ruusuvuori", "emil ruusuvuori"], + ["thiago monteiro", "thiago monteiro"], + ["aleksandar kovacevic", "aleksandar kovacevic"], + ["borna coric", "borna coric"], + ["yoshihito nishioka", "yoshihito nishioka"], + ["juncheng shang", "juncheng shang"], + ["mackenzie mcdonald", "mackenzie mcdonald"], + ["botic van de zandschulp", "botic van de zandschulp"], + ["aslan karatsev", "aslan karatsev"], + ["camilo ugo carabelli", "camilo ugo carabelli"], + ["elena rybakina", "elena rybakina"], + ["jessica pegula", "jessica pegula"], + ["qinwen zheng", "qinwen zheng"], + ["maria sakkari", "maria sakkari"], + ["beatriz haddad maia", "beatriz haddad maia"], + ["ekaterina alexandrova", "ekaterina alexandrova"], + ["leylah fernandez", "leylah fernandez"], + ["diana shnaider", "diana shnaider"], + ["barbora krejcikova", "barbora krejcikova"], + ["karolina muchova", "karolina muchova"], + ["veronika kudermetova", "veronika kudermetova"], + ["magda linette", "magda linette"], + ["clara burel", "clara burel"], + ["anhelina kalinina", "anhelina kalinina"], + ["karolina pliskova", "karolina pliskova"], + ["caroline dolehide", "caroline dolehide"], + ["xiyu wang", "xiyu wang"], + ["laura siegemund", "laura siegemund"], + ["taylor townsend", "taylor townsend"], + ["oceane dodin", "oceane dodin"], + ["greet minnen", "greet minnen"], + ["lucia bronzetti", "lucia bronzetti"], + ["daria saville", "daria saville"], + ["jessica bouzas maneiro", "jessica bouzas maneiro"], + ["brenda fruhvirtova", "brenda fruhvirtova"], + ["martina trevisan", "martina trevisan"], + ["jule niemeier", "jule niemeier"], + ["caroline wozniacki", "caroline wozniacki"], + ["paula badosa ", "paula badosa"], + ["nao hibino", "nao hibino"], + ["zhuoxuan baz", "zhuoxuan baz"], + ["harriet dart", "harriet dart"], + ["sara sorribes tormo", "sara sorribes tormo"], + ["lesia tsurenko", "lesia tsurenko"], + ["deportivo toluca", "toluca"], + ["club universidad nacional", "club universidad nacional"], + ["querétaro fc", "queretaro fc"], + ["mazatlán fc", "mazatlan fc"], + ["club león", "leon"], + ["atlético de san luis", "atletico de san luis"], + ["cf pachuca", "pachuca"], + ["club tigres de la universidad autónoma de nuevo león", "tigres"], + ["cf cruz azul", "cruz azul"], + ["cf monterrey", "monterrey"], + ["club santos laguna", "santos laguna"], + ["club puebla", "puebla"], + ["fc juárez", "fc juarez"], + ["club necaxa", "necaxa"], + ["club de fútbol américa", "cf america"], + ["cd guadalajara", "cd guadalajara"], + ["atlas fc", "atlas"], + ["club tijuana xoloitzcuintles de caliente", "tijuana"], + ["puebla", "puebla"], + ["santos laguna", "santos laguna"], + ["tijuana", "tijuana"], + ["queretaro fc", "queretaro fc"], + ["atlas", "atlas"], + ["fc juarez", "fc juarez"], + ["cf america", "cf america"], + ["necaxa", "necaxa"], + ["tigres", "tigres"], + ["toluca", "toluca"], + ["mazatlan fc", "mazatlan fc"], + ["leon", "leon"], + ["monterrey", "monterrey"], + ["pachuca", "pachuca"], + ["atletico de san luis", "atletico de san luis"], + ["cruz azul", "cruz azul"], + ["united states u23", "usa"], + ["usa u23", "usa"], + ["anna-karolina schmiedlova", "anna karolina schmiedlova"], + ["rfs", "rfs"], + ["ue santa coloma", "ue santa coloma"], + ["dinamo minsk", "dinamo minsk"], + ["rapid wien", "rapid wien"], + ["trabzonspor", "trabzonspor"], + ["elfsborg", "elfsborg"], + ["rijeka", "rijeka"], + ["viktoria plzen", "viktoria plzen"], + ["kryvbas", "kryvbas"], + ["cercle brugge", "cercle brugge"], + ["molde", "molde"], + ["ajax", "ajax"], + ["maccabi tel aviv", "maccabi tel aviv"], + ["fk panevezys", "fk panevezys"], + ["lugano", "lugano"], + ["partizan beograd", "partizan beograd"], + ["servette", "servette"], + ["braga", "braga"], + ["borac banja luka", "borac banja luka"], + ["klaksvik", "klaksvik"], + ["shamrock rovers", "shamrock rovers"], + ["nk celje", "nk celje"], + ["fk rīgas futbola skola", "rfs"], + ["tic tapa ue santa coloma", "ue santa coloma"], + ["fc dinamo minsk", "dinamo minsk"], + ["lincoln red imps fc", "lincoln red imps fc"], + ["sk rapid", "rapid wien"], + ["trabzonspor kulübü", "trabzonspor"], + ["if elfsborg", "elfsborg"], + ["hnk rijeka", "rijeka"], + ["fc viktoria plzeň", "viktoria plzen"], + ["fk kryvbas kryvyi rih", "kryvbas"], + ["cercle brugge ksv", "cercle brugge"], + ["afc ajax", "ajax"], + ["panathinaikos fc", "panathinaikos"], + ["servette fc", "servette"], + ["sporting braga", "braga"], + ["maccabi tel aviv fc", "maccabi tel aviv"], + ["fk panevėžys", "fk panevezys"], + ["fc lugano", "lugano"], + ["fk partizan beograd", "partizan beograd"], + ["shamrock rovers fc", "shamrock rovers"], + ["fk borac banja luka", "borac banja luka"], + ["kí klaksvík", "klaksvik"], + ["fc astana", "astana"], + ["corvinul hunedoara", "corvinul hunedoara"], + ["fehervar fc", "fehervar fc"], + ["omonia nicosia", "omonia nicosia"], + ["flora tallinn", "flora tallinn"], + ["vikingur reykjavik", "vikingur reykjavik"], + ["pyunik", "pyunik"], + ["sabah fk", "sabah fk"], + ["st. patrick's athletic", "st. patrick's athletic"], + ["broendby if", "broendby if"], + ["zira", "zira"], + ["osijek", "osijek"], + ["hapoel beer sheva", "hapoel beer sheva"], + ["mlada boleslav", "mlada boleslav"], + ["tromsoe", "tromsoe"], + ["kilmarnock", "kilmarnock"], + ["brann", "brann"], + ["st. mirren", "st. mirren"], + ["pafos fc", "pafos fc"], + ["cska 1948", "cska 1948"], + ["djurgaarden", "djurgaarden"], + ["ilves", "ilves"], + ["cfr cluj", "cfr cluj"], + ["maccabi petach tikva", "maccabi petach tikva"], + ["banik ostrava", "banik ostrava"], + ["fc koebenhavn", "fc koebenhavn"], + ["fc sheriff", "fc sheriff"], + ["olimpija ljubljana", "olimpija ljubljana"], + ["aek athens", "aek athens"], + ["fc noah", "fc noah"], + ["istanbul basaksehir", "istanbul basaksehir"], + ["iberia 1999", "iberia 1999"], + ["vojvodina", "vojvodina"], + ["maribor", "maribor"], + ["drita", "drita"], + ["auda", "auda"], + ["zrinjski mostar", "zrinjski mostar"], + ["botev plovdiv", "botev plovdiv"], + ["ordabasy shymkent", "ordabasy shymkent"], + ["fk astana", "astana"], + ["sc corvinul 1921 hunedoara", "corvinul hunedoara"], + ["fehérvár fc", "fehervar fc"], + ["ac omonia nicosia", "omonia nicosia"], + ["st patrick's athletic fc", "st. patrick's athletic"], + ["fc flora tallinn", "flora tallinn"], + ["víkingur reykjavík", "vikingur reykjavik"], + ["brøndby if", "broendby if"], + ["kp legia warszawa", "legia warszawa"], + ["pyunik fc", "pyunik"], + ["fk ordabasy shymkent", "ordabasy shymkent"], + ["zira ik", "zira"], + ["nk osijek", "osijek"], + ["djurgårdens if", "djurgaarden"], + ["tampereen ilves", "ilves"], + ["scs cfr 1907 cluj", "cfr cluj"], + ["maccabi petah tikva fc", "maccabi petach tikva"], + ["hapoel be'er sheva fc", "hapoel beer sheva"], + ["fk mladá boleslav", "mlada boleslav"], + ["tromsø il", "tromsoe"], + ["kilmarnock fc", "kilmarnock"], + ["sk brann", "brann"], + ["saint mirren fc", "st. mirren"], + ["fk sheriff tiraspol", "fc sheriff"], + ["nk olimpija ljubljana", "olimpija ljubljana"], + ["fk cska 1948 sofia", "cska 1948"], + ["fc københavn", "fc koebenhavn"], + ["fc baník ostrava", "banik ostrava"], + ["aek athens fc", "aek athens"], + ["fc iberia 1999", "fc iberia 1999"], + ["medipol i̇stanbul başakşehir futbol kulübü", "istanbul basaksehir"], + ["kf drita", "drita"], + ["fk auda riga", "auda"], + ["pfk botev plovdiv", "botev plovdiv"], + ["hšk zrinjski mostar", "zrinjski mostar"], + ["fk vojvodina novi sad", "vojvodina"], + ["nk maribor", "maribor"], + ["gent", "gent"], + ["silkeborg", "silkeborg"], + ["slask wroclaw", "slask wroclaw"], + ["st. gallen", "st. gallen"], + ["silkeborg if", "silkeborg"], + ["wks śląsk wrocław", "slask wroclaw"], + ["fc st.gallen 1879", "st. gallen"], + ["dinamo zagreb", "dinamo zagreb"], + ["fk crvena zvezda", "crvena zvezda"], + ["young boys", "young boys"], + ["slavia prague", "slavia prague"], + ["galatasaray", "galatasaray"], + ["fc midtjylland", "midtjylland"], + ["malmoe ff", "malmoe"], + ["dynamo kyiv", "dynamo kyiv"], + ["salzburg", "salzburg"], + ["gnk dinamo zagreb", "dinamo zagreb"], + ["fk crvena zvezda beograd", "crvena zvezda"], + ["fk bodø / glimt", "bodo"], + ["bsc young boys", "young boys"], + ["qarabağ ağdam fk", "qarabag"], + ["sk slavia praha", "slavia prague"], + ["galatasaray spor kulübü", "galatasaray"], + ["šk slovan bratislava", "slovan b."], + ["malmö ff", "malmoe"], + ["ac sparta prague", "sparta praha"], + ["fc dynamo kyiv", "dynamo kyiv"], + ["fc salzburg", "salzburg"], + ["ruzomberok", "ruzomberok"], + ["vitoria de guimaraes", "vitoria de guimaraes"], + ["paksi se", "paksi se"], + ["tns", "tns"], + ["haecken", "haecken"], + ["puskas fc academy", "puskas academy fc"], + ["wisla krakow", "wisla krakow"], + ["hjk", "hjk"], + ["mfk ružomberok", "ruzomberok"], + ["vitória sc guimarães", "vitoria de guimaraes"], + ["paksi fc", "paksi se"], + ["the new saints fc", "tns"], + ["bk häcken", "haecken"], + ["puskás akadémia fc", "puskas academy fc"], + ["wisła kraków", "wisla krakow"], + ["helsingin jalkapalloklubi", "hjk"], + ["lask", "lask"], + ["fc fcsb", "fc fcsb"], + ["APOEL Nicosia", "APOEL nicosia"], + ["hearts", "hearts"], + ["CS Petrocub", "CS Petrocub"], + ["TSC Backa Topola", "TSC Backa Topola"], + ["PAOK Thessaloniki FC", "PAOK Thessaloniki"], + ["Besiktas", "Besiktas"], + ["Anderlecht", "Anderlecht"], + ["Jagiellonia Bialystok", "Jagiellonia Bialystok"], + ["Linzer Athletik Sport Klub", "lask"], + ["SC Fotbal Club FCSB SA", "fc fcsb"], + ["APOEL FC", "APOEL nicosia"], + ["Heart of Midlothian FC", "hearts"], + ["CS Petrocub Hînceşti", "CS Petrocub"], + ["FK TSC Bačka Topola", "TSC Backa Topola"], + ["Beşiktaş Jimnastik Kulübü", "Besiktas"], + ["RSC Anderlecht", "Anderlecht"], + ["SSA Jagiellonia Białystok", "Jagiellonia Bialystok"], +]; + +const teamsMap = new Map(teams); + +module.exports = { teamsMap }; diff --git a/overtimeV2Api/test/utils/liveMarketsUtils.test.js b/overtimeV2Api/test/utils/liveMarketsUtils.test.js new file mode 100644 index 00000000..79f143f1 --- /dev/null +++ b/overtimeV2Api/test/utils/liveMarketsUtils.test.js @@ -0,0 +1,259 @@ +const { League, TotalTypes } = require("overtime-live-trading-utils"); +const KEYS = require("../../../redis/redis-keys"); +const { liveApiFixtures } = require("../mockData/opticOdds/opticOddsApiFixtures"); +const { liveApiFixtureOdds } = require("../mockData/opticOdds/opticOddsApiFixtureOdds"); +const { liveMarkets } = require("../mockData/liveMarkets"); +const { MAX_ALLOWED_STALE_ODDS_DELAY } = require("../../constants/markets"); +const { millisecondsToSeconds, subDays } = require("date-fns"); +const { mapOpticOddsApiFixtureOdds } = require("../../utils/opticOdds/opticOddsFixtureOdds"); +const { NETWORK } = require("../../constants/networks"); + +describe("Check live markets utils", () => { + let axios; + + beforeAll(() => { + jest.mock("axios"); + axios = require("axios"); + }); + + it("checks get redis key", () => { + // GIVEN functions for getting redis keys + const { getRedisKeyForOpticOddsApiOdds, getRedisKeyForOpticOddsApiResults } = require("../../utils/liveMarkets"); + + // WHEN getting redis key some league ID for testnet + const leagueId = 1; + const isTestnet = true; + let redisKey = getRedisKeyForOpticOddsApiOdds(leagueId, isTestnet); + + // THEN redis key should match odds key + expect(redisKey).toBe(`${KEYS.TESTNET_OPTIC_ODDS_API_ODDS_BY_LEAGUE}${leagueId}`); + + // WHEN getting redis key some league ID for testnet + redisKey = getRedisKeyForOpticOddsApiResults(leagueId, isTestnet); + + // THEN redis key should match results key + expect(redisKey).toBe(`${KEYS.TESTNET_OPTIC_ODDS_API_RESULTS_BY_LEAGUE}${leagueId}`); + }); + + it("checks fetching risk management config", async () => { + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { fetchRiskManagementConfig } = require("../../utils/liveMarkets"); + + // GIVEN teams map array stored in Redis + const teams = [["luton town", "luton"]]; + await redisClient.set(KEYS.RISK_MANAGEMENT_TEAMS_MAP, JSON.stringify(teams)); + await redisClient.set(KEYS.RISK_MANAGEMENT_TEAMS_MAP_TESTNET, JSON.stringify(teams)); + + // WHEN fetch config on mainnet + let isTestnet = false; + let config = await fetchRiskManagementConfig(isTestnet); + + // THEN teams map should retrieved + expect(config.teamsMap.size).toBe(teams.length); + + // WHEN fetch config on testnet + isTestnet = true; + config = await fetchRiskManagementConfig(isTestnet); + + // THEN teams map should retrieved + expect(config.teamsMap.size).toBe(teams.length); + }); + + it("checks fetching Optic Odds games for league", async () => { + // GIVEN mocked active fixtures AFC data from Optic Odds API + axios.get.mockResolvedValue({ data: { data: liveApiFixtures } }); + + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + const { fetchOpticOddsGamesForLeague } = require("../../utils/liveMarkets"); + + // Scenario #1 + // WHEN fetch Optic Odds games for league AFC on mainnet + const leagueId = League.AFC_CHAMPIONS_LEAGUE; + let isTestnet = false; + let opticOddsGames = await fetchOpticOddsGamesForLeague(leagueId, isTestnet); + + // THEN mapped Optic Odds games are retrieved and cached to Redis + expect(opticOddsGames.length).toBe(liveApiFixtures.length); + expect(opticOddsGames[0].gameId).toBe(liveApiFixtures[0].id); + + // Scenario #2 + // WHEN fetch Optic Odds games for league AFC on testnet + isTestnet = true; + opticOddsGames = await fetchOpticOddsGamesForLeague(leagueId, isTestnet); + + // THEN mapped Optic Odds games are retrieved and cached to Redis + expect(opticOddsGames.length).toBe(liveApiFixtures.length); + expect(opticOddsGames[0].gameId).toBe(liveApiFixtures[0].id); + + // Scenario #3 + // WHEN no games are returned from API + axios.get.mockResolvedValue({ data: { data: [] } }); + opticOddsGames = await fetchOpticOddsGamesForLeague(leagueId, isTestnet); + + // THEN empty array is retrieved + expect(opticOddsGames.length).toBe(0); + + // Scenario #4 + // WHEN error is returned from API + axios.get.mockRejectedValue(new Error("Some axios error")); + opticOddsGames = await fetchOpticOddsGamesForLeague(leagueId, isTestnet); + + // THEN cached value is retrieved + expect(opticOddsGames.length).toBe(liveApiFixtures.length); + expect(opticOddsGames[0].gameId).toBe(liveApiFixtures[0].id); + + // Scenario #5 + // WHEN error is returned from API and no cached data + await redisClient.flushAll(); + axios.get.mockRejectedValue(new Error("Some axios error")); + opticOddsGames = await fetchOpticOddsGamesForLeague(leagueId, isTestnet); + + // THEN empty array is retrieved + expect(opticOddsGames.length).toBe(0); + + // Scenario #6 + // WHEN fetch is called for bad league ID + opticOddsGames = await fetchOpticOddsGamesForLeague(-1, isTestnet); + + // THEN empty array is retrieved + expect(opticOddsGames.length).toBe(0); + }); + + it("checks stale odds", () => { + // GIVEN function for checking stale odds + const { isOddsTimeStale } = require("../../utils/liveMarkets"); + + // WHEN odds timestamp is not a number + let timestamp = "2024-11-27T10:00:00Z"; + let isOddsStale = isOddsTimeStale(timestamp); + + // THEN odds time is stale + expect(isOddsStale).toBe(true); + + // WHEN odds timestamp is older than MAX_ALLOWED_STALE_ODDS_DELAY + const now = new Date(); + timestamp = millisecondsToSeconds(now.getTime() - MAX_ALLOWED_STALE_ODDS_DELAY); + isOddsStale = isOddsTimeStale(timestamp); + + // THEN odds time is stale + expect(isOddsStale).toBe(true); + + // WHEN odds timestamp is not older than MAX_ALLOWED_STALE_ODDS_DELAY + timestamp = millisecondsToSeconds(now.getTime()); + isOddsStale = isOddsTimeStale(timestamp); + + // THEN odds time is stale + expect(isOddsStale).toBe(false); + }); + + it("checks filtered stale odds", () => { + // GIVEN function for filtering stale odds + const { filterStaleOdds } = require("../../utils/liveMarkets"); + + // WHEN there are only moneyline odds + let gameOddsArray = mapOpticOddsApiFixtureOdds(liveApiFixtureOdds); + let nonStaledOdds = filterStaleOdds(gameOddsArray); + + // THEN return all odds + expect(nonStaledOdds.length).toBe(liveApiFixtureOdds.length); + + // WHEN there is one non moneyline stale odds + const oddsWithStaledNonMoneyline = gameOddsArray.map((gameOdds, index) => { + let odds = gameOdds.odds; + if (index === 0) { + odds = gameOdds.odds.map((data, i) => ({ + ...data, + marketName: i === 0 ? TotalTypes.TOTAL_GOALS.toLowerCase() : data.marketName, + })); + } + return { ...gameOdds, odds }; + }); + nonStaledOdds = filterStaleOdds(oddsWithStaledNonMoneyline); + + // THEN return odds without the staled one + expect(nonStaledOdds[0].odds.length).toBe(liveApiFixtureOdds[0].odds.length - 1); + + // WHEN odds are not present + gameOddsArray = gameOddsArray.map((data) => ({ ...data, odds: null })); + nonStaledOdds = filterStaleOdds(gameOddsArray); + + // THEN return initial odds + expect(nonStaledOdds[0].odds).toBe(gameOddsArray[0].odds); + }); + + it("checks market paused", () => { + // GIVEN function for foltering stale odds + const { isMarketPaused } = require("../../utils/liveMarkets"); + + // WHEN there are some odds + let isPaused = isMarketPaused(liveMarkets[0]); + + // THEN return as not paused + expect(isPaused).toBe(false); + + // WHEN there are no odds + const liveMarketsWithoutOdds = { ...liveMarkets[0], odds: [], childMarkets: [] }; + isPaused = isMarketPaused(liveMarketsWithoutOdds); + + // THEN return as paused + expect(isPaused).toBe(true); + }); + + it("checks error messages persist", async () => { + // This needs to be imported after mocks in order to work + const { redisClient } = require("../../../redis/client"); + + // GIVEN old error (2 days old) for persist function + const network = NETWORK.Optimism; + const errorsMap = new Map(); + const GAME_ID = "0x3030394130434633343445450000000000000000000000000000000000000000"; + const ERROR_MESSAGE = "Blocking game Liechtenstein - San Marino due to missing game result."; + errorsMap.set(GAME_ID, { + processingTime: subDays(new Date(), 2).toUTCString(), + errorTime: subDays(new Date(), 2).toUTCString(), + errorMessage: ERROR_MESSAGE, + }); + const { persistErrorMessages } = require("../../utils/liveMarkets"); + + // WHEN persists errors + await persistErrorMessages(errorsMap, network); + + // THEN error should be present in Redis + let errors = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[network]); + let storedErrorsMap = new Map(JSON.parse(errors)); + expect(storedErrorsMap.get(GAME_ID)[0].errorMessage).toBe(ERROR_MESSAGE); + + // WHEN there are 2 errors, old one again and new one + const GAME_ID_2 = "0x3742323834333746313245440000000000000000000000000000000000000000"; + const ERROR_MESSAGE_2 = "Blocking game Malta - Andorra due to missing game result."; + errorsMap.set(GAME_ID_2, { + processingTime: new Date().toUTCString(), + errorTime: new Date().toUTCString(), + errorMessage: ERROR_MESSAGE_2, + }); + await persistErrorMessages(errorsMap, network); + + // THEN there should be total 2 errors stored in Redis, not 3 + errors = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[network]); + storedErrorsMap = new Map(JSON.parse(errors)); + expect(storedErrorsMap.size).toBe(2); + + // WHEN previous error is older than 24h and there is new error + const errorsMapSecond = new Map(); + errorsMapSecond.set(GAME_ID_2, { + processingTime: new Date().toUTCString(), + errorTime: new Date().toUTCString(), + errorMessage: ERROR_MESSAGE_2, + }); + await persistErrorMessages(errorsMapSecond, network); + + // THEN old error should not be present and new error should be present in Redis + errors = await redisClient.get(KEYS.OVERTIME_V2_LIVE_MARKETS_API_ERROR_MESSAGES[network]); + storedErrorsMap = new Map(JSON.parse(errors)); + expect(storedErrorsMap.size).toBe(1); + expect(storedErrorsMap.get(GAME_ID)).toBe(undefined); + expect(storedErrorsMap.get(GAME_ID_2)[0].errorMessage).toBe(ERROR_MESSAGE_2); + }); +}); diff --git a/overtimeV2Api/test/utils/opticOdds/opticOddsFixtureOdds.test.js b/overtimeV2Api/test/utils/opticOdds/opticOddsFixtureOdds.test.js new file mode 100644 index 00000000..a29ed007 --- /dev/null +++ b/overtimeV2Api/test/utils/opticOdds/opticOddsFixtureOdds.test.js @@ -0,0 +1,54 @@ +const { streamOddsEvents } = require("../../mockData/opticOdds/opticOddsStreamEventOdds"); +const { liveApiFixtureOdds } = require("../../mockData/opticOdds/opticOddsApiFixtureOdds"); +const { liveSoccerGames } = require("../../mockData/liveGames"); + +describe("Check utils Optic Odds fixture odds", () => { + let axios; + + beforeAll(() => { + jest.mock("axios"); + axios = require("axios"); + }); + + it("checks mapping of stream odds events to existing games", () => { + // This needs to be imported after mocks in order to work + const { + mapOddsStreamEvents, + mapOpticOddsApiFixtureOdds, + } = require("../../../utils/opticOdds/opticOddsFixtureOdds"); + + // GIVEN initial games from API without odds + const initialOdds = mapOpticOddsApiFixtureOdds(liveApiFixtureOdds).map((data) => ({ ...data, odds: undefined })); + const streamEvents = streamOddsEvents.filter((data) => data.type === "odds")[0].data; + + // WHEN map stream events to initial odds + const oddsPerGame = mapOddsStreamEvents(streamEvents, initialOdds, []); + + // THEN odds should be the same as from stream + const gameId = initialOdds[0].gameId; + const homeTeam = initialOdds[0].homeTeam.toLowerCase(); + + const expectedHomeOdds = streamEvents.find( + (data) => data.fixture_id === gameId && data.name.toLowerCase() === homeTeam, + ).price; + const mappedHomeOdds = oddsPerGame + .find((data) => data.gameId === gameId) + .odds.find((data) => data.name.toLowerCase() === homeTeam).price; + + expect(mappedHomeOdds).toBe(expectedHomeOdds); + }); + + it("checks mapping of stream odds events for new games", () => { + // This needs to be imported after mocks in order to work + const { mapOddsStreamEvents } = require("../../../utils/opticOdds/opticOddsFixtureOdds"); + + // GIVEN no initial games + const streamEvents = streamOddsEvents.filter((data) => data.type === "odds")[0].data; + + // WHEN map stream events for new games + const oddsPerGame = mapOddsStreamEvents(streamEvents, [], liveSoccerGames); + + // THEN odds should be the same as from stream + console.log(oddsPerGame); + }); +}); diff --git a/overtimeV2Api/test/utils/opticOdds/opticOddsFixtures.test.js b/overtimeV2Api/test/utils/opticOdds/opticOddsFixtures.test.js new file mode 100644 index 00000000..8a2af12f --- /dev/null +++ b/overtimeV2Api/test/utils/opticOdds/opticOddsFixtures.test.js @@ -0,0 +1,87 @@ +const { format } = require("date-fns"); +const { League } = require("overtime-live-trading-utils"); +const { liveApiFixtures } = require("../../mockData/opticOdds/opticOddsApiFixtures"); +const { OPTIC_ODDS_API_TIMEOUT } = require("../../../constants/opticOdds"); + +describe("Check utils Optic Odds fixtures", () => { + let axios; + + beforeAll(() => { + jest.mock("axios"); + axios = require("axios"); + }); + + it("checks start date before and after params", () => { + // This needs to be imported after mocks in order to work + const { getStartDateBeforeAndAfter } = require("../../../utils/opticOdds/opticOddsFixtures"); + + // GIVEN start date as function param + const startDate = format(new Date("2024-11-06"), "yyyy-MM-dd"); + + // WHEN getting start date before and after + const dateRange = getStartDateBeforeAndAfter(startDate); + + // THEN range should be: + // startDateBefore: 2024-11-07T00:00:00Z + // startDateAfter: 2024-11-05T23:59:59Z + expect(dateRange.startDateBefore).toBe("2024-11-07T00:00:00Z"); + expect(dateRange.startDateAfter).toBe("2024-11-05T23:59:59Z"); + }); + + it("checks fetching Optic Odds fixtures", async () => { + // GIVEN mocked fixtures AFC data from Optic Odds API + axios.get.mockResolvedValue({ data: { data: liveApiFixtures } }); + const league = League.AFC_CHAMPIONS_LEAGUE; + const startDate = format(new Date("2024-11-06"), "yyyy-MM-dd"); + const page = 1; + + // This needs to be imported after mocks in order to work + const { fetchOpticOddsFixtures } = require("../../../utils/opticOdds/opticOddsFixtures"); + + // WHEN fetching fixtures + let fixturesResponseData = await fetchOpticOddsFixtures(league, startDate, page); + + // THEN it should retrieve the same ID + expect(fixturesResponseData.data.length).toBe(liveApiFixtures.length); + expect(fixturesResponseData.data[0].id).toBe(liveApiFixtures[0].id); + + // WHEN API returns error + axios.get.mockRejectedValue(new Error("Some axios error")); + fixturesResponseData = await fetchOpticOddsFixtures(league, startDate, page); + + // THEN it should return null + expect(fixturesResponseData).toBe(null); + }); + + it("checks fetching Optic Odds fixtures active", async () => { + // GIVEN mocked fixtures active AFC data from Optic Odds API + axios.get.mockResolvedValue({ data: { data: liveApiFixtures } }); + const leagueIds = [League.AFC_CHAMPIONS_LEAGUE]; + const isLive = true; + const startDate = format(new Date("2024-11-06"), "yyyy-MM-dd"); + const page = 1; + + // This needs to be imported after mocks in order to work + const { fetchOpticOddsFixturesActive } = require("../../../utils/opticOdds/opticOddsFixtures"); + + // WHEN fetching fixtures with all optional params + let fixturesResponseData = await fetchOpticOddsFixturesActive( + leagueIds, + isLive, + startDate, + page, + OPTIC_ODDS_API_TIMEOUT, + ); + + // THEN it should retrieve the same ID + expect(fixturesResponseData.data.length).toBe(liveApiFixtures.length); + expect(fixturesResponseData.data[0].id).toBe(liveApiFixtures[0].id); + + // WHEN fetching fixtures without optional params + fixturesResponseData = await fetchOpticOddsFixturesActive(leagueIds, isLive); + + // THEN it should retrieve the same ID + expect(fixturesResponseData.data.length).toBe(liveApiFixtures.length); + expect(fixturesResponseData.data[0].id).toBe(liveApiFixtures[0].id); + }); +}); diff --git a/overtimeV2Api/utils/markets.js b/overtimeV2Api/utils/markets.js index e1a26383..40370f9b 100644 --- a/overtimeV2Api/utils/markets.js +++ b/overtimeV2Api/utils/markets.js @@ -63,7 +63,7 @@ const convertFromBytes32 = (value) => { return result.replace(/\0/g, ""); }; -const packMarket = (market, isChild) => { +const packMarket = (market) => { const leagueId = `${market.sportId}`.startsWith("152") ? League.TENNIS_WTA : `${market.sportId}`.startsWith("153") @@ -124,10 +124,6 @@ const packMarket = (market, isChild) => { proof: market.proof, }; - if (!isChild) { - packedMarket.isV3 = !!market.isV3 || packedMarket.sport === Sport.TENNIS; - } - return packedMarket; }; diff --git a/overtimeV2Api/utils/opticOdds/opticOddsFixtures.js b/overtimeV2Api/utils/opticOdds/opticOddsFixtures.js index d1d4f216..e6e4ffe2 100644 --- a/overtimeV2Api/utils/opticOdds/opticOddsFixtures.js +++ b/overtimeV2Api/utils/opticOdds/opticOddsFixtures.js @@ -75,6 +75,7 @@ const fetchOpticOddsFixturesActive = async (leagues, isLive, startDate = null, p module.exports = { mapOpticOddsApiFixtures, + getStartDateBeforeAndAfter, fetchOpticOddsFixtures, fetchOpticOddsFixturesActive, }; diff --git a/package-lock.json b/package-lock.json index 86e7fd9b..3b1f4d8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.569.0", + "@types/jest": "^29.5.14", "axios": "^0.21.0", "bytes32": "^0.0.3", "compression": "^1.7.4", @@ -30,6 +31,7 @@ "node-fetch": "^2.6.1", "overtime-live-trading-utils": "^1.1.4", "redis": "4.7.0", + "redis-mock": "^0.56.3", "thales-data": "^3.0.17", "twitter-api-v2": "^1.4.1", "web3": "^1.5.2" @@ -3846,6 +3848,15 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -8694,6 +8705,14 @@ "@redis/time-series": "1.1.0" } }, + "node_modules/redis-mock": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/redis-mock/-/redis-mock-0.56.3.tgz", + "integrity": "sha512-ynaJhqk0Qf3Qajnwvy4aOjS4Mdf9IBkELWtjd+NYhpiqu4QCNq6Vf3Q7c++XRPGiKiwRj9HWr0crcwy7EiPjYQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", diff --git a/package.json b/package.json index c0ec0516..03a5c43d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "start": "node overtimeApi/s3test.js", "dev": "nodemon overtimeApi.js", - "test": "jest", + "test": "jest --silent", "test:unit": "jest unit" }, "keywords": [], @@ -14,6 +14,7 @@ "license": "ISC", "dependencies": { "@aws-sdk/client-s3": "^3.569.0", + "@types/jest": "^29.5.14", "axios": "^0.21.0", "bytes32": "^0.0.3", "compression": "^1.7.4", @@ -34,6 +35,7 @@ "node-fetch": "^2.6.1", "overtime-live-trading-utils": "^1.1.4", "redis": "4.7.0", + "redis-mock": "^0.56.3", "thales-data": "^3.0.17", "twitter-api-v2": "^1.4.1", "web3": "^1.5.2"