import {z} from 'zod' export type GetApiV3EventsEventIdsStatesArgs = {event_ids: Array}; export type GetApiV3EventsEventIdsStatesOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV3EventsEventIdsStatesResponse = z.object({event_states: z.array(z.object({actual_end_datetime: z.string().nullable().optional(), actual_start_datetime: z.string().nullable().optional(), aggregate: z.array(z.number().int()).nullable().optional(), clock: z.object({match_time: z.string().optional(), remaining_time: z.string().optional(), remaining_time_in_period: z.string().optional(), stoppage_time: z.string().optional(), stoppage_time_announced: z.string().optional(), stopped: z.boolean().optional()}).nullable().optional(), has_league_table: z.boolean().optional(), hidden: z.boolean().nullable(), id: z.string(), info: z.object({}).nullable().optional(), instant_match: z.boolean(), match_period: z.enum(["unknown", "first_half", "second_half", "extra_time_first_half", "extra_time_second_half", "penalty_shootout", "half_time", "end_of_second_half", "extra_time_half_time", "end_of_extra_time", "full_time", "pre_match", "awaiting_sudden_death", "sudden_death", "end_of_sudden_death", "awaiting_extra_time", "awaiting_penalties", "end_of_penalty_shootout", "first_pause", "third_pause", "overtime", "extra_innings", "pre_toss", "post_toss", "suspended", "in_progress", "break", "first_break", "second_break", "super_over_1", "super_over_2", "awaiting_super_over", "awaiting_overtime", "awaiting_golden_set", "golden_set", "after_golden_set", "delayed", "abandoned", "finished", "at_the_post", "going_down", "off", "dormant", "photograph", "result", "weighed_in", "amended_result", "race_void", "going_behind", "false_start", "parading", "rerun", "app_traps", "start_delay", "going_in_traps", "hare_running", "hare_stopped", "stopped_for_safety", "traps_failed", "no_race", "frame_1", "frame_2", "frame_3", "frame_4", "frame_5", "frame_6", "frame_7", "frame_8", "frame_9", "frame_10", "frame_11", "frame_12", "frame_13", "frame_14", "frame_15", "frame_16", "frame_17", "frame_18", "frame_19", "frame_20", "frame_21", "frame_22", "frame_23", "frame_24", "frame_25", "frame_26", "frame_27", "frame_28", "frame_29", "frame_30", "frame_31", "frame_32", "frame_33", "frame_34", "frame_35", "innings_1", "innings_2", "innings_3", "innings_4", "inning_1", "inning_2", "inning_3", "inning_4", "inning_5", "inning_6", "inning_7", "inning_8", "inning_9", "quarter_1", "quarter_2", "quarter_3", "quarter_4", "set_1", "set_2", "set_3", "set_4", "set_5", "set_6", "set_7", "set_8", "set_9", "set_10", "set_11", "set_12", "set_13", "map_1", "map_2", "map_3", "map_4", "map_5", "map_6", "map_7", "break_1", "break_2", "break_3", "break_4", "break_5", "break_6", "period_1", "period_2", "period_3"]).optional(), probable_pitcher: z.object({away: z.object({id: z.string(), name: z.string(), team: z.string()}).optional(), home: z.object({id: z.string(), name: z.string(), team: z.string()}).optional()}).nullable().optional(), provider_metadata: z.object({}).nullable(), reversed: z.boolean().nullable().optional(), scores: z.union([z.object({current: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), half: z.array(z.number().int()).optional()}), z.object({current: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), game: z.array(z.number().int()).optional(), golden_set: z.array(z.number().int()).optional(), leg: z.array(z.number().int()).optional(), set_1: z.array(z.number().int()).optional(), set_10: z.array(z.number().int()).optional(), set_11: z.array(z.number().int()).optional(), set_12: z.array(z.number().int()).optional(), set_13: z.array(z.number().int()).optional(), set_2: z.array(z.number().int()).optional(), set_3: z.array(z.number().int()).optional(), set_4: z.array(z.number().int()).optional(), set_5: z.array(z.number().int()).optional(), set_6: z.array(z.number().int()).optional(), set_7: z.array(z.number().int()).optional(), set_8: z.array(z.number().int()).optional(), set_9: z.array(z.number().int()).optional(), sets: z.array(z.object({score_a: z.number().int(), score_b: z.number().int()})).optional(), tiebreak: z.array(z.number().int()).optional(), tiebreak_1: z.array(z.number().int()).optional(), tiebreak_2: z.array(z.number().int()).optional(), tiebreak_3: z.array(z.number().int()).optional(), tiebreak_4: z.array(z.number().int()).optional(), tiebreak_5: z.array(z.number().int()).optional()}), z.object({a_innings: z.array(z.string()).optional(), b_innings: z.array(z.string()).optional(), current: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), scorecard: z.object({commentary: z.string().nullable().optional(), innings_1: z.object({batsmen: z.array(z.object({active: z.boolean().optional(), balls: z.number().int().optional(), bowler_name: z.string().optional(), bowler_nid: z.string().optional(), description: z.string().optional(), did_not_bat: z.boolean().optional(), fielder_id: z.string().optional(), fielder_name: z.string().optional(), fours: z.number().int().optional(), name: z.string().optional(), on_strike: z.boolean().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), to_come: z.boolean().optional()})).nullable().optional(), bowlers: z.array(z.object({fours: z.number().int().optional(), is_active: z.boolean().optional(), maidens: z.number().int().optional(), name: z.string().optional(), no_balls: z.number().int().optional(), overs: z.number().int().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), wickets: z.number().int().optional(), wides: z.number().int().optional()})).nullable().optional(), competitor_id: z.string().nullable().optional(), competitor_name: z.string().nullable().optional(), conclusion: z.string().nullable().optional(), extras_summary: z.object({}).nullable().optional(), has_target: z.boolean().nullable().optional(), innings_number: z.number().int().optional(), is_final_innings: z.boolean().nullable().optional(), is_follow_on: z.boolean().nullable().optional(), overs: z.string().optional(), overs_available: z.number().int().optional(), runs: z.number().int().optional(), target: z.number().int().nullable().optional(), wickets: z.number().int().optional()}).nullable().optional(), innings_2: z.object({batsmen: z.array(z.object({active: z.boolean().optional(), balls: z.number().int().optional(), bowler_name: z.string().optional(), bowler_nid: z.string().optional(), description: z.string().optional(), did_not_bat: z.boolean().optional(), fielder_id: z.string().optional(), fielder_name: z.string().optional(), fours: z.number().int().optional(), name: z.string().optional(), on_strike: z.boolean().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), to_come: z.boolean().optional()})).nullable().optional(), bowlers: z.array(z.object({fours: z.number().int().optional(), is_active: z.boolean().optional(), maidens: z.number().int().optional(), name: z.string().optional(), no_balls: z.number().int().optional(), overs: z.number().int().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), wickets: z.number().int().optional(), wides: z.number().int().optional()})).nullable().optional(), competitor_id: z.string().nullable().optional(), competitor_name: z.string().nullable().optional(), conclusion: z.string().nullable().optional(), extras_summary: z.object({}).nullable().optional(), has_target: z.boolean().nullable().optional(), innings_number: z.number().int().optional(), is_final_innings: z.boolean().nullable().optional(), is_follow_on: z.boolean().nullable().optional(), overs: z.string().optional(), overs_available: z.number().int().optional(), runs: z.number().int().optional(), target: z.number().int().nullable().optional(), wickets: z.number().int().optional()}).nullable().optional(), innings_3: z.object({batsmen: z.array(z.object({active: z.boolean().optional(), balls: z.number().int().optional(), bowler_name: z.string().optional(), bowler_nid: z.string().optional(), description: z.string().optional(), did_not_bat: z.boolean().optional(), fielder_id: z.string().optional(), fielder_name: z.string().optional(), fours: z.number().int().optional(), name: z.string().optional(), on_strike: z.boolean().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), to_come: z.boolean().optional()})).nullable().optional(), bowlers: z.array(z.object({fours: z.number().int().optional(), is_active: z.boolean().optional(), maidens: z.number().int().optional(), name: z.string().optional(), no_balls: z.number().int().optional(), overs: z.number().int().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), wickets: z.number().int().optional(), wides: z.number().int().optional()})).nullable().optional(), competitor_id: z.string().nullable().optional(), competitor_name: z.string().nullable().optional(), conclusion: z.string().nullable().optional(), extras_summary: z.object({}).nullable().optional(), has_target: z.boolean().nullable().optional(), innings_number: z.number().int().optional(), is_final_innings: z.boolean().nullable().optional(), is_follow_on: z.boolean().nullable().optional(), overs: z.string().optional(), overs_available: z.number().int().optional(), runs: z.number().int().optional(), target: z.number().int().nullable().optional(), wickets: z.number().int().optional()}).nullable().optional(), innings_4: z.object({batsmen: z.array(z.object({active: z.boolean().optional(), balls: z.number().int().optional(), bowler_name: z.string().optional(), bowler_nid: z.string().optional(), description: z.string().optional(), did_not_bat: z.boolean().optional(), fielder_id: z.string().optional(), fielder_name: z.string().optional(), fours: z.number().int().optional(), name: z.string().optional(), on_strike: z.boolean().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), to_come: z.boolean().optional()})).nullable().optional(), bowlers: z.array(z.object({fours: z.number().int().optional(), is_active: z.boolean().optional(), maidens: z.number().int().optional(), name: z.string().optional(), no_balls: z.number().int().optional(), overs: z.number().int().optional(), player_id: z.string().optional(), runs: z.number().int().optional(), sixes: z.number().int().optional(), wickets: z.number().int().optional(), wides: z.number().int().optional()})).nullable().optional(), competitor_id: z.string().nullable().optional(), competitor_name: z.string().nullable().optional(), conclusion: z.string().nullable().optional(), extras_summary: z.object({}).nullable().optional(), has_target: z.boolean().nullable().optional(), innings_number: z.number().int().optional(), is_final_innings: z.boolean().nullable().optional(), is_follow_on: z.boolean().nullable().optional(), overs: z.string().optional(), overs_available: z.number().int().optional(), runs: z.number().int().optional(), target: z.number().int().nullable().optional(), wickets: z.number().int().optional()}).nullable().optional(), recent_overs: z.array(z.object({})).optional()}).optional(), winner: z.string().nullable().optional()}), z.object({current: z.array(z.number().int()).optional(), extra: z.array(z.number().int()).optional(), extra_innings: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), half: z.array(z.number().int()).optional(), inning_1: z.array(z.number().int()).optional(), inning_2: z.array(z.number().int()).optional(), inning_3: z.array(z.number().int()).optional(), inning_4: z.array(z.number().int()).optional(), inning_5: z.array(z.number().int()).optional(), inning_6: z.array(z.number().int()).optional(), inning_7: z.array(z.number().int()).optional(), inning_8: z.array(z.number().int()).optional(), inning_9: z.array(z.number().int()).optional(), map_1: z.array(z.number().int()).optional(), map_2: z.array(z.number().int()).optional(), map_3: z.array(z.number().int()).optional(), map_4: z.array(z.number().int()).optional(), map_5: z.array(z.number().int()).optional(), map_6: z.array(z.number().int()).optional(), map_7: z.array(z.number().int()).optional(), map_8: z.array(z.number().int()).optional(), map_9: z.array(z.number().int()).optional(), overtime: z.array(z.number().int()).optional(), part_1: z.array(z.number().int()).optional(), part_2: z.array(z.number().int()).optional(), part_3: z.array(z.number().int()).optional(), part_4: z.array(z.number().int()).optional(), part_5: z.array(z.number().int()).optional(), part_6: z.array(z.number().int()).optional(), part_7: z.array(z.number().int()).optional(), part_8: z.array(z.number().int()).optional(), part_9: z.array(z.number().int()).optional(), penalty: z.array(z.number().int()).optional(), period_1: z.array(z.number().int()).optional(), period_2: z.array(z.number().int()).optional(), period_3: z.array(z.number().int()).optional(), shootout: z.array(z.number().int()).optional(), total_score: z.number().int().optional(), winner: z.enum(["home", "away"]).optional()}), z.object({positions: z.object({}).optional()}), z.object({current: z.array(z.number().int()).optional(), first_half: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), overtime: z.array(z.number().int()).optional(), second_half: z.array(z.number().int()).optional()}), z.object({current: z.array(z.number().int()).optional(), first_half: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), over_time: z.array(z.number().int()).optional(), quarter_1: z.array(z.number().int()).optional(), quarter_2: z.array(z.number().int()).optional(), quarter_3: z.array(z.number().int()).optional(), quarter_4: z.array(z.number().int()).optional(), second_half: z.array(z.number().int()).optional()}), z.object({current: z.array(z.number().int()).optional(), extra_time: z.array(z.number().int()).optional(), extra_time_first_half: z.array(z.number().int()).optional(), extra_time_second_half: z.array(z.number().int()).optional(), first_half: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), normal_time: z.array(z.number().int()).optional(), penalties: z.array(z.number().int()).optional(), second_half: z.array(z.number().int()).optional()}), z.object({horse_results: z.object({beaten_distance: z.string().optional(), close_up: z.string().optional(), horse_id: z.string().optional(), name: z.string().optional(), position: z.string().optional()})}), z.object({greyhound_results: z.object({beaten_distance: z.string().optional(), greyhound_id: z.string().optional(), name: z.string().optional(), position: z.string().optional()})}), z.object({current: z.array(z.number().int()).optional(), frame_1: z.array(z.number().int()).optional(), frame_10: z.array(z.number().int()).optional(), frame_11: z.array(z.number().int()).optional(), frame_12: z.array(z.number().int()).optional(), frame_13: z.array(z.number().int()).optional(), frame_14: z.array(z.number().int()).optional(), frame_15: z.array(z.number().int()).optional(), frame_16: z.array(z.number().int()).optional(), frame_17: z.array(z.number().int()).optional(), frame_18: z.array(z.number().int()).optional(), frame_19: z.array(z.number().int()).optional(), frame_2: z.array(z.number().int()).optional(), frame_20: z.array(z.number().int()).optional(), frame_21: z.array(z.number().int()).optional(), frame_22: z.array(z.number().int()).optional(), frame_23: z.array(z.number().int()).optional(), frame_24: z.array(z.number().int()).optional(), frame_25: z.array(z.number().int()).optional(), frame_26: z.array(z.number().int()).optional(), frame_27: z.array(z.number().int()).optional(), frame_28: z.array(z.number().int()).optional(), frame_29: z.array(z.number().int()).optional(), frame_3: z.array(z.number().int()).optional(), frame_30: z.array(z.number().int()).optional(), frame_31: z.array(z.number().int()).optional(), frame_32: z.array(z.number().int()).optional(), frame_33: z.array(z.number().int()).optional(), frame_34: z.array(z.number().int()).optional(), frame_35: z.array(z.number().int()).optional(), frame_4: z.array(z.number().int()).optional(), frame_5: z.array(z.number().int()).optional(), frame_6: z.array(z.number().int()).optional(), frame_7: z.array(z.number().int()).optional(), frame_8: z.array(z.number().int()).optional(), frame_9: z.array(z.number().int()).optional(), full: z.array(z.number().int()).optional(), game: z.array(z.number().int()).optional(), sets: z.array(z.number().int()).optional()})]).nullable(), show_flags: z.boolean().nullable().optional(), state: z.enum(["new", "upcoming", "live", "ended", "settled", "cancelled", "suspended"]), tennis_server: z.enum(["a", "b"]).nullable(), visualization: z.boolean().nullable()}))}); 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 }; /** * Retrieve the current states for events by id. * * GET /v3/events/{event_ids}/states/ */ export const getApiV3EventsEventIdsStates = async (args: GetApiV3EventsEventIdsStatesArgs, options?: GetApiV3EventsEventIdsStatesOptions) => { const {baseUrl = "https://api.smarkets.com", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/v3/events/${encodeURIComponent(String(args.event_ids))}/states/${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(getApiV3EventsEventIdsStatesResponse, await res.json()) };