import {z} from 'zod' export type GetApiV1EventsIdArgs = {id: number, groups?: boolean | undefined}; export type GetApiV1EventsIdOptions = {baseUrl?: string | undefined, XPMAccessKey?: string | undefined, XPMTimestamp?: string | undefined, XPMSignature?: string | undefined, fetch?: typeof fetch | undefined}; export const gatewayMarketV1MarketSideType = z.enum(["MARKET_SIDE_TYPE_ERC1155", "MARKET_SIDE_TYPE_INSTRUMENT"]); export const gatewayMarketV1Provider = z.enum(["PROVIDER_SPORTSDATAIO", "PROVIDER_SPORTRADAR", "PROVIDER_OPTICODDS", "PROVIDER_PANDASCORE", "PROVIDER_INFRONT", "PROVIDER_ENETPULSE", "PROVIDER_UFC"]); export const gatewayMarketV1SportsTeamProvider = z.object({provider: gatewayMarketV1Provider.optional(), providerId: z.string().optional()}); export const gatewayMarketV1ResolvedColor = z.object({light: z.string().optional(), dark: z.string().optional()}); export const gatewayMarketV1Team = z.object({id: z.number().int().optional(), name: z.string().optional(), abbreviation: z.string().optional(), league: z.string().optional(), record: z.string().optional(), logo: z.string().optional(), alias: z.string().optional(), safeName: z.string().optional(), homeIcon: z.string().nullable().optional(), awayIcon: z.string().nullable().optional(), colorPrimary: z.string().nullable().optional(), providerId: z.number().int().nullable().optional(), ordering: z.string().nullable().optional(), longIcon: z.string().nullable().optional(), shortIcon: z.string().nullable().optional(), displayAbbreviation: z.string().nullable().optional(), ranking: z.string().nullable().optional(), conference: z.string().nullable().optional(), providerIds: z.array(gatewayMarketV1SportsTeamProvider).optional(), longIconDark: z.string().nullable().optional(), shortIconDark: z.string().nullable().optional(), color: gatewayMarketV1ResolvedColor.optional()}); export const gatewayTypesV1Amount = z.object({value: z.string(), currency: z.string()}); export const gatewayMarketV1MarketSide = z.object({id: z.string().optional(), marketSideType: gatewayMarketV1MarketSideType.optional(), identifier: z.string().nullable().optional(), createdAt: z.string().nullable().optional(), updatedAt: z.string().nullable().optional(), description: z.string().nullable().optional(), price: z.string().nullable().optional(), marketId: z.number().int().optional(), long: z.boolean().nullable().optional(), teamId: z.number().int().nullable().optional(), team: gatewayMarketV1Team.optional(), quote: gatewayTypesV1Amount.optional(), tradable: z.boolean().nullable().optional()}); export const gatewayMarketV1SportsMarketType = z.enum(["SPORTS_MARKET_TYPE_MONEYLINE", "SPORTS_MARKET_TYPE_SPREAD", "SPORTS_MARKET_TYPE_TOTAL", "SPORTS_MARKET_TYPE_PROP", "SPORTS_MARKET_TYPE_FUTURE", "SPORTS_MARKET_TYPE_DRAWABLE_OUTCOME"]); export const gatewayTagsV1TagLeague = z.object({id: z.number().int().optional(), name: z.string().optional(), sportId: z.number().int().optional(), tagId: z.number().int().nullable().optional(), image: z.string().nullable().optional(), resolution: z.string().nullable().optional(), ordering: z.string().nullable().optional(), activeSeriesId: z.number().int().nullable().optional(), isOperational: z.boolean().nullable().optional(), automaticResolution: z.boolean().nullable().optional(), createdAt: z.string().nullable().optional(), slug: z.string().optional(), abbreviation: z.string().nullable().optional()}); export const gatewayTagsV1TagSport = z.object({id: z.number().int().optional(), name: z.string().optional(), tagId: z.number().int().nullable().optional(), createdAt: z.string().nullable().optional(), slug: z.string().optional(), image: z.string().nullable().optional()}); export const gatewayTagsV1Tag = z.object({id: z.string().optional(), label: z.string().nullable().optional(), slug: z.string().nullable().optional(), createdAt: z.string().nullable().optional(), updatedAt: z.string().nullable().optional(), image: z.string().nullable().optional(), tradable: z.boolean().nullable().optional(), league: gatewayTagsV1TagLeague.optional(), sport: gatewayTagsV1TagSport.optional(), parentId: z.number().int().nullable().optional(), subtags: z.array(z.object({})).optional()}); export const gatewayMarketV1Subject = z.object({id: z.number().int().optional(), name: z.string().optional(), displayName: z.string().nullable().optional(), description: z.string().nullable().optional(), subjectType: z.string().optional(), image: z.string().nullable().optional(), color: z.string().nullable().optional(), darkColor: z.string().nullable().optional(), createdAt: z.string().nullable().optional(), updatedAt: z.string().nullable().optional(), slug: z.string().nullable().optional()}); export const gatewayMarketV1Market = z.object({id: z.string().optional(), question: z.string().nullable().optional(), slug: z.string().nullable().optional(), endDate: z.string().nullable().optional(), category: z.string().nullable().optional(), startDate: z.string().nullable().optional(), image: z.string().nullable().optional(), description: z.string().nullable().optional(), active: z.boolean().nullable().optional(), marketType: z.string().nullable().optional(), closed: z.boolean().nullable().optional(), createdAt: z.string().nullable().optional(), updatedAt: z.string().nullable().optional(), archived: z.boolean().nullable().optional(), orderPriceMinTickSize: z.number().nullable().optional(), gameStartTime: z.string().nullable().optional(), manualActivation: z.boolean().nullable().optional(), sportsMarketType: z.string().nullable().optional(), line: z.number().nullable().optional(), marketSides: z.array(gatewayMarketV1MarketSide).optional(), outcomes: z.string().nullable().optional(), outcomePrices: z.string().nullable().optional(), ep3Status: z.string().nullable().optional(), sportsMarketTypeV2: gatewayMarketV1SportsMarketType.optional(), hidden: z.boolean().nullable().optional(), tags: z.array(gatewayTagsV1Tag).optional(), title: z.string().nullable().optional(), subtitle: z.string().nullable().optional(), color: z.string().nullable().optional(), darkColor: z.string().nullable().optional(), subjectId: z.number().int().nullable().optional(), subject: gatewayMarketV1Subject.optional(), feeCoefficient: z.number().nullable().optional(), spreadTotalSuffix: z.string().nullable().optional(), sortOrder: z.number().int().nullable().optional(), bestBidQuote: gatewayTypesV1Amount.optional(), bestAskQuote: gatewayTypesV1Amount.optional(), metadata: z.object({}).nullable().optional(), titleShort: z.string().nullable().optional(), ep3SyncedAt: z.string().nullable().optional(), minimumTradeQty: z.number().nullable().optional(), volume: z.number().nullable().optional(), volume24hr: z.number().nullable().optional(), volume1wk: z.number().nullable().optional(), volume1mo: z.number().nullable().optional(), volume1yr: z.number().nullable().optional(), rulesDisclaimer: z.string().nullable().optional()}); export const gatewayMarketV1FootballState = z.object({down: z.number().int().nullable().optional(), yard: z.number().int().nullable().optional(), possessionProviderId: z.string().nullable().optional()}); export const gatewayMarketV1UFCState = z.object({weightClass: z.string().nullable().optional(), cardSegment: z.string().nullable().optional(), eventLogo: z.string().nullable().optional(), rounds: z.number().int().nullable().optional(), order: z.number().int().nullable().optional()}); export const gatewayMarketV1TennisState = z.object({tournamentName: z.string().nullable().optional(), round: z.string().nullable().optional()}); export const gatewayMarketV1BaseballState = z.object({balls: z.number().int().nullable().optional(), strikes: z.number().int().nullable().optional(), outs: z.number().int().nullable().optional(), onFirst: z.boolean().nullable().optional(), onSecond: z.boolean().nullable().optional(), onThird: z.boolean().nullable().optional(), inningHalf: z.string().nullable().optional()}); export const gatewayMarketV1CricketInnings = z.object({number: z.number().int().nullable().optional(), battingTeamId: z.string().nullable().optional(), runs: z.number().int().nullable().optional(), wickets: z.number().int().nullable().optional(), oversCompleted: z.number().int().nullable().optional(), complete: z.boolean().nullable().optional(), ballsIntoOver: z.number().int().nullable().optional()}); export const gatewayMarketV1CricketChase = z.object({target: z.number().int().nullable().optional(), runsNeeded: z.number().int().nullable().optional(), ballsRemaining: z.number().int().nullable().optional(), currentRunRate: z.number().nullable().optional(), requiredRunRate: z.number().nullable().optional()}); export const gatewayMarketV1CricketState = z.object({innings: z.array(gatewayMarketV1CricketInnings).optional(), currentInnings: z.number().int().nullable().optional(), totalOvers: z.number().int().nullable().optional(), phase: z.string().nullable().optional(), chase: gatewayMarketV1CricketChase.optional()}); export const gatewayMarketV1SoccerPenaltyShootoutAttemptStatus = z.enum(["SOCCER_PENALTY_SHOOTOUT_ATTEMPT_STATUS_NOT_TAKEN_YET", "SOCCER_PENALTY_SHOOTOUT_ATTEMPT_STATUS_SCORED", "SOCCER_PENALTY_SHOOTOUT_ATTEMPT_STATUS_MISSED"]); export const gatewayMarketV1SoccerPenaltyShootoutAttempt = z.object({competitorId: z.string().optional(), status: gatewayMarketV1SoccerPenaltyShootoutAttemptStatus.optional(), playerId: z.string().optional(), playerName: z.string().optional()}); export const gatewayMarketV1SoccerState = z.object({shootoutAttempts: z.array(gatewayMarketV1SoccerPenaltyShootoutAttempt).optional()}); export const gatewayMarketV1MarketGroupStat = z.object({marketGroupId: z.string().optional(), line: z.number().nullable().optional(), current: z.number().nullable().optional()}); export const gatewayMarketV1EventState = z.object({id: z.number().int().optional(), gameId: z.number().int().nullable().optional(), sportradarGameId: z.string().nullable().optional(), type: z.string().optional(), createdAt: z.string().nullable().optional(), updatedAt: z.string().nullable().optional(), score: z.string().nullable().optional(), elapsed: z.string().nullable().optional(), period: z.string().nullable().optional(), live: z.boolean().nullable().optional(), ended: z.boolean().nullable().optional(), finishedTimestamp: z.string().nullable().optional(), footballState: gatewayMarketV1FootballState.optional(), ufcState: gatewayMarketV1UFCState.optional(), tennisState: gatewayMarketV1TennisState.optional(), baseballState: gatewayMarketV1BaseballState.optional(), cricketState: gatewayMarketV1CricketState.optional(), soccerState: gatewayMarketV1SoccerState.optional(), mainSpreadLine: z.number().nullable().optional(), mainTotalLine: z.number().nullable().optional(), marketGroupStats: z.array(gatewayMarketV1MarketGroupStat).optional()}); export const gatewayMarketV1GameUpdate = z.object({id: z.number().int().optional(), eventId: z.number().int().optional(), sportradarGameId: z.string().optional(), type: z.string().optional(), title: z.string().optional(), subtitle: z.string().nullable().optional(), subject: z.string().nullable().optional(), team: z.string().nullable().optional(), period: z.string().nullable().optional(), clock: z.string().nullable().optional(), highlightAt: z.string().nullable().optional(), createdAt: z.string().nullable().optional()}); export const gatewayMarketV1EventMetadata = z.object({gameState: gatewayMarketV1EventState.optional(), latestGameUpdate: gatewayMarketV1GameUpdate.optional()}); export const gatewayMarketV1EventMarketGroup = z.object({id: z.string().optional(), title: z.string().optional(), subtitle: z.string().nullable().optional(), parentId: z.string().nullable().optional(), order: z.number().int().optional(), marketIds: z.array(z.string()).optional(), line: z.number().nullable().optional(), current: z.number().nullable().optional(), searchable: z.boolean().nullable().optional(), showAllThreshold: z.number().int().nullable().optional(), showMarketImages: z.boolean().nullable().optional()}); export const gatewayMarketV1EventFeatureAvailability = z.object({lineups: z.boolean().optional(), timeline: z.boolean().optional()}); export const gatewayMarketV1Event = z.object({id: z.string().optional(), ticker: z.string().nullable().optional(), slug: z.string().nullable().optional(), title: z.string().nullable().optional(), subtitle: z.string().nullable().optional(), description: z.string().nullable().optional(), resolutionSource: z.string().nullable().optional(), startDate: z.string().nullable().optional(), creationDate: z.string().nullable().optional(), endDate: z.string().nullable().optional(), image: z.string().nullable().optional(), active: z.boolean().nullable().optional(), closed: z.boolean().nullable().optional(), archived: z.boolean().nullable().optional(), liquidity: z.number().nullable().optional(), volume: z.number().nullable().optional(), openInterest: z.number().nullable().optional(), category: z.string().nullable().optional(), subcategory: z.string().nullable().optional(), createdAt: z.string().nullable().optional(), updatedAt: z.string().nullable().optional(), volume24hr: z.number().nullable().optional(), volume1wk: z.number().nullable().optional(), volume1mo: z.number().nullable().optional(), volume1yr: z.number().nullable().optional(), closedTime: z.string().nullable().optional(), eventDate: z.string().nullable().optional(), startTime: z.string().nullable().optional(), seriesSlug: z.string().nullable().optional(), score: z.string().nullable().optional(), elapsed: z.string().nullable().optional(), period: z.string().nullable().optional(), live: z.boolean().nullable().optional(), ended: z.boolean().nullable().optional(), finishedTimestamp: z.string().nullable().optional(), featuredOrder: z.number().int().nullable().optional(), markets: z.array(gatewayMarketV1Market).optional(), gameId: z.number().int().nullable().optional(), rescheduledFromGameId: z.number().int().nullable().optional(), sportradarGameId: z.string().nullable().optional(), eventState: gatewayMarketV1EventState.optional(), hidden: z.boolean().nullable().optional(), tags: z.array(gatewayTagsV1Tag).optional(), teams: z.array(gatewayMarketV1Team).optional(), metadata: gatewayMarketV1EventMetadata.optional(), sortType: z.string().nullable().optional(), marketGroups: z.array(gatewayMarketV1EventMarketGroup).optional(), primaryTag: gatewayTagsV1Tag.optional(), secondaryTag: gatewayTagsV1Tag.optional(), primaryTagSlug: z.string().nullable().optional(), secondaryTagSlug: z.string().nullable().optional(), livestreamUrl: z.string().nullable().optional(), featureAvailability: gatewayMarketV1EventFeatureAvailability.optional()}); export const gatewayEventsV1GetEventsByIDResponse = z.object({event: gatewayMarketV1Event.optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get Event By ID * * GET /v1/events/{id} */ export const getApiV1EventsId = async (args: GetApiV1EventsIdArgs, options?: GetApiV1EventsIdOptions) => { const {baseUrl = "https://api.polymarket.us", fetch: fetchFn = fetch, XPMAccessKey, XPMTimestamp, XPMSignature} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.groups != null) query.append("groups", String(args.groups)) if (XPMAccessKey !== undefined) headers.set("X-PM-Access-Key", XPMAccessKey) if (XPMTimestamp !== undefined) headers.set("X-PM-Timestamp", XPMTimestamp) if (XPMSignature !== undefined) headers.set("X-PM-Signature", XPMSignature) const url = `${baseUrl.replace(/\/+$/, '')}/v1/events/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(gatewayEventsV1GetEventsByIDResponse, await res.json()) };