import {z} from 'zod' export type GetApiV1MarketIdIdArgs = {id: number}; export type GetApiV1MarketIdIdOptions = {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 gatewayMarketV1GetMarketsByIDResponse = z.object({market: gatewayMarketV1Market.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 Market By ID * * GET /v1/market/id/{id} */ export const getApiV1MarketIdId = async (args: GetApiV1MarketIdIdArgs, options?: GetApiV1MarketIdIdOptions) => { 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 (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/market/id/${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(gatewayMarketV1GetMarketsByIDResponse, await res.json()) };