import {z} from 'zod' export type GetApiV3NflStatsFormatTeamGameStatsFinalSeasonWeekArgs = {format: 'JSON' | 'XML', season: string, week: string}; export type GetApiV3NflStatsFormatTeamGameStatsFinalSeasonWeekOptions = {baseUrl?: string | undefined, apiKeyHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const teamGame = z.object({GameKey: z.string().nullable().optional(), Date: z.string().nullable().optional(), SeasonType: z.number().int().optional(), Season: z.number().int().optional(), Week: z.number().int().nullable().optional(), Team: z.string().nullable().optional(), Opponent: z.string().nullable().optional(), HomeOrAway: z.string().nullable().optional(), Score: z.number().int().optional(), OpponentScore: z.number().int().optional(), TotalScore: z.number().int().optional(), Stadium: z.string().nullable().optional(), PlayingSurface: z.string().nullable().optional(), Temperature: z.number().int().nullable().optional(), Humidity: z.number().int().nullable().optional(), WindSpeed: z.number().int().nullable().optional(), OverUnder: z.number().nullable().optional(), PointSpread: z.number().nullable().optional(), ScoreQuarter1: z.number().int().nullable().optional(), ScoreQuarter2: z.number().int().nullable().optional(), ScoreQuarter3: z.number().int().nullable().optional(), ScoreQuarter4: z.number().int().nullable().optional(), ScoreOvertime: z.number().int().optional(), TimeOfPossessionMinutes: z.number().int().nullable().optional(), TimeOfPossessionSeconds: z.number().int().nullable().optional(), TimeOfPossession: z.string().nullable().optional(), FirstDowns: z.number().int().nullable().optional(), FirstDownsByRushing: z.number().int().nullable().optional(), FirstDownsByPassing: z.number().int().nullable().optional(), FirstDownsByPenalty: z.number().int().nullable().optional(), OffensivePlays: z.number().int().optional(), OffensiveYards: z.number().int().optional(), OffensiveYardsPerPlay: z.number().optional(), Touchdowns: z.number().int().nullable().optional(), RushingAttempts: z.number().int().nullable().optional(), RushingYards: z.number().int().nullable().optional(), RushingYardsPerAttempt: z.number().optional(), RushingTouchdowns: z.number().int().nullable().optional(), PassingAttempts: z.number().int().nullable().optional(), PassingCompletions: z.number().int().nullable().optional(), PassingYards: z.number().int().nullable().optional(), PassingTouchdowns: z.number().int().nullable().optional(), PassingInterceptions: z.number().int().nullable().optional(), PassingYardsPerAttempt: z.number().optional(), PassingYardsPerCompletion: z.number().optional(), CompletionPercentage: z.number().optional(), PasserRating: z.number().nullable().optional(), ThirdDownAttempts: z.number().int().nullable().optional(), ThirdDownConversions: z.number().int().nullable().optional(), ThirdDownPercentage: z.number().nullable().optional(), FourthDownAttempts: z.number().int().nullable().optional(), FourthDownConversions: z.number().int().nullable().optional(), FourthDownPercentage: z.number().nullable().optional(), RedZoneAttempts: z.number().int().nullable().optional(), RedZoneConversions: z.number().int().nullable().optional(), GoalToGoAttempts: z.number().int().nullable().optional(), GoalToGoConversions: z.number().int().nullable().optional(), ReturnYards: z.number().int().nullable().optional(), Penalties: z.number().int().nullable().optional(), PenaltyYards: z.number().int().nullable().optional(), Fumbles: z.number().int().nullable().optional(), FumblesLost: z.number().int().nullable().optional(), TimesSacked: z.number().int().nullable().optional(), TimesSackedYards: z.number().int().nullable().optional(), QuarterbackHits: z.number().int().nullable().optional(), TacklesForLoss: z.number().int().nullable().optional(), Safeties: z.number().int().nullable().optional(), Punts: z.number().int().nullable().optional(), PuntYards: z.number().int().nullable().optional(), PuntAverage: z.number().optional(), Giveaways: z.number().int().optional(), Takeaways: z.number().int().optional(), TurnoverDifferential: z.number().int().optional(), OpponentScoreQuarter1: z.number().int().nullable().optional(), OpponentScoreQuarter2: z.number().int().nullable().optional(), OpponentScoreQuarter3: z.number().int().nullable().optional(), OpponentScoreQuarter4: z.number().int().nullable().optional(), OpponentScoreOvertime: z.number().int().optional(), OpponentTimeOfPossessionMinutes: z.number().int().nullable().optional(), OpponentTimeOfPossessionSeconds: z.number().int().nullable().optional(), OpponentTimeOfPossession: z.string().nullable().optional(), OpponentFirstDowns: z.number().int().nullable().optional(), OpponentFirstDownsByRushing: z.number().int().nullable().optional(), OpponentFirstDownsByPassing: z.number().int().nullable().optional(), OpponentFirstDownsByPenalty: z.number().int().nullable().optional(), OpponentOffensivePlays: z.number().int().optional(), OpponentOffensiveYards: z.number().int().optional(), OpponentOffensiveYardsPerPlay: z.number().optional(), OpponentTouchdowns: z.number().int().nullable().optional(), OpponentRushingAttempts: z.number().int().nullable().optional(), OpponentRushingYards: z.number().int().nullable().optional(), OpponentRushingYardsPerAttempt: z.number().optional(), OpponentRushingTouchdowns: z.number().int().nullable().optional(), OpponentPassingAttempts: z.number().int().nullable().optional(), OpponentPassingCompletions: z.number().int().nullable().optional(), OpponentPassingYards: z.number().int().nullable().optional(), OpponentPassingTouchdowns: z.number().int().nullable().optional(), OpponentPassingInterceptions: z.number().int().nullable().optional(), OpponentPassingYardsPerAttempt: z.number().optional(), OpponentPassingYardsPerCompletion: z.number().optional(), OpponentCompletionPercentage: z.number().optional(), OpponentPasserRating: z.number().nullable().optional(), OpponentThirdDownAttempts: z.number().int().nullable().optional(), OpponentThirdDownConversions: z.number().int().nullable().optional(), OpponentThirdDownPercentage: z.number().nullable().optional(), OpponentFourthDownAttempts: z.number().int().nullable().optional(), OpponentFourthDownConversions: z.number().int().nullable().optional(), OpponentFourthDownPercentage: z.number().nullable().optional(), OpponentRedZoneAttempts: z.number().int().nullable().optional(), OpponentRedZoneConversions: z.number().int().nullable().optional(), OpponentGoalToGoAttempts: z.number().int().nullable().optional(), OpponentGoalToGoConversions: z.number().int().nullable().optional(), OpponentReturnYards: z.number().int().nullable().optional(), OpponentPenalties: z.number().int().nullable().optional(), OpponentPenaltyYards: z.number().int().nullable().optional(), OpponentFumbles: z.number().int().nullable().optional(), OpponentFumblesLost: z.number().int().nullable().optional(), OpponentTimesSacked: z.number().int().nullable().optional(), OpponentTimesSackedYards: z.number().int().nullable().optional(), OpponentQuarterbackHits: z.number().int().nullable().optional(), OpponentTacklesForLoss: z.number().int().nullable().optional(), OpponentSafeties: z.number().int().nullable().optional(), OpponentPunts: z.number().int().nullable().optional(), OpponentPuntYards: z.number().int().nullable().optional(), OpponentPuntAverage: z.number().optional(), OpponentGiveaways: z.number().int().optional(), OpponentTakeaways: z.number().int().optional(), OpponentTurnoverDifferential: z.number().int().optional(), RedZonePercentage: z.number().nullable().optional(), GoalToGoPercentage: z.number().nullable().optional(), QuarterbackHitsDifferential: z.number().int().nullable().optional(), TacklesForLossDifferential: z.number().int().nullable().optional(), QuarterbackSacksDifferential: z.number().int().optional(), TacklesForLossPercentage: z.number().nullable().optional(), QuarterbackHitsPercentage: z.number().nullable().optional(), TimesSackedPercentage: z.number().optional(), OpponentRedZonePercentage: z.number().nullable().optional(), OpponentGoalToGoPercentage: z.number().nullable().optional(), OpponentQuarterbackHitsDifferential: z.number().int().nullable().optional(), OpponentTacklesForLossDifferential: z.number().int().nullable().optional(), OpponentQuarterbackSacksDifferential: z.number().int().nullable().optional(), OpponentTacklesForLossPercentage: z.number().nullable().optional(), OpponentQuarterbackHitsPercentage: z.number().nullable().optional(), OpponentTimesSackedPercentage: z.number().optional(), Kickoffs: z.number().int().nullable().optional(), KickoffsInEndZone: z.number().int().nullable().optional(), KickoffTouchbacks: z.number().int().nullable().optional(), PuntsHadBlocked: z.number().int().nullable().optional(), PuntNetAverage: z.number().nullable().optional(), ExtraPointKickingAttempts: z.number().int().nullable().optional(), ExtraPointKickingConversions: z.number().int().nullable().optional(), ExtraPointsHadBlocked: z.number().int().nullable().optional(), ExtraPointPassingAttempts: z.number().int().nullable().optional(), ExtraPointPassingConversions: z.number().int().nullable().optional(), ExtraPointRushingAttempts: z.number().int().nullable().optional(), ExtraPointRushingConversions: z.number().int().nullable().optional(), FieldGoalAttempts: z.number().int().nullable().optional(), FieldGoalsMade: z.number().int().nullable().optional(), FieldGoalsHadBlocked: z.number().int().nullable().optional(), PuntReturns: z.number().int().nullable().optional(), PuntReturnYards: z.number().int().nullable().optional(), KickReturns: z.number().int().nullable().optional(), KickReturnYards: z.number().int().nullable().optional(), InterceptionReturns: z.number().int().nullable().optional(), InterceptionReturnYards: z.number().int().nullable().optional(), OpponentKickoffs: z.number().int().nullable().optional(), OpponentKickoffsInEndZone: z.number().int().nullable().optional(), OpponentKickoffTouchbacks: z.number().int().nullable().optional(), OpponentPuntsHadBlocked: z.number().int().nullable().optional(), OpponentPuntNetAverage: z.number().nullable().optional(), OpponentExtraPointKickingAttempts: z.number().int().nullable().optional(), OpponentExtraPointKickingConversions: z.number().int().nullable().optional(), OpponentExtraPointsHadBlocked: z.number().int().nullable().optional(), OpponentExtraPointPassingAttempts: z.number().int().nullable().optional(), OpponentExtraPointPassingConversions: z.number().int().nullable().optional(), OpponentExtraPointRushingAttempts: z.number().int().nullable().optional(), OpponentExtraPointRushingConversions: z.number().int().nullable().optional(), OpponentFieldGoalAttempts: z.number().int().nullable().optional(), OpponentFieldGoalsMade: z.number().int().nullable().optional(), OpponentFieldGoalsHadBlocked: z.number().int().nullable().optional(), OpponentPuntReturns: z.number().int().nullable().optional(), OpponentPuntReturnYards: z.number().int().nullable().optional(), OpponentKickReturns: z.number().int().nullable().optional(), OpponentKickReturnYards: z.number().int().nullable().optional(), OpponentInterceptionReturns: z.number().int().nullable().optional(), OpponentInterceptionReturnYards: z.number().int().nullable().optional(), SoloTackles: z.number().int().nullable().optional(), AssistedTackles: z.number().int().nullable().optional(), Sacks: z.number().int().nullable().optional(), SackYards: z.number().int().nullable().optional(), PassesDefended: z.number().int().nullable().optional(), FumblesForced: z.number().int().nullable().optional(), FumblesRecovered: z.number().int().nullable().optional(), FumbleReturnYards: z.number().int().nullable().optional(), FumbleReturnTouchdowns: z.number().int().nullable().optional(), InterceptionReturnTouchdowns: z.number().int().nullable().optional(), BlockedKicks: z.number().int().nullable().optional(), PuntReturnTouchdowns: z.number().int().nullable().optional(), PuntReturnLong: z.number().int().nullable().optional(), KickReturnTouchdowns: z.number().int().nullable().optional(), KickReturnLong: z.number().int().nullable().optional(), BlockedKickReturnYards: z.number().int().nullable().optional(), BlockedKickReturnTouchdowns: z.number().int().nullable().optional(), FieldGoalReturnYards: z.number().int().nullable().optional(), FieldGoalReturnTouchdowns: z.number().int().nullable().optional(), PuntNetYards: z.number().int().nullable().optional(), OpponentSoloTackles: z.number().int().nullable().optional(), OpponentAssistedTackles: z.number().int().nullable().optional(), OpponentSacks: z.number().int().nullable().optional(), OpponentSackYards: z.number().int().nullable().optional(), OpponentPassesDefended: z.number().int().nullable().optional(), OpponentFumblesForced: z.number().int().nullable().optional(), OpponentFumblesRecovered: z.number().int().nullable().optional(), OpponentFumbleReturnYards: z.number().int().nullable().optional(), OpponentFumbleReturnTouchdowns: z.number().int().nullable().optional(), OpponentInterceptionReturnTouchdowns: z.number().int().nullable().optional(), OpponentBlockedKicks: z.number().int().nullable().optional(), OpponentPuntReturnTouchdowns: z.number().int().nullable().optional(), OpponentPuntReturnLong: z.number().int().nullable().optional(), OpponentKickReturnTouchdowns: z.number().int().nullable().optional(), OpponentKickReturnLong: z.number().int().nullable().optional(), OpponentBlockedKickReturnYards: z.number().int().nullable().optional(), OpponentBlockedKickReturnTouchdowns: z.number().int().nullable().optional(), OpponentFieldGoalReturnYards: z.number().int().nullable().optional(), OpponentFieldGoalReturnTouchdowns: z.number().int().nullable().optional(), OpponentPuntNetYards: z.number().int().nullable().optional(), IsGameOver: z.boolean().nullable().optional(), TeamName: z.string().nullable().optional(), DayOfWeek: z.string().nullable().optional(), PassingDropbacks: z.number().int().nullable().optional(), OpponentPassingDropbacks: z.number().int().nullable().optional(), TeamGameID: z.number().int().optional(), PointDifferential: z.number().int().nullable().optional(), PassingInterceptionPercentage: z.number().nullable().optional(), PuntReturnAverage: z.number().nullable().optional(), KickReturnAverage: z.number().nullable().optional(), ExtraPointPercentage: z.number().nullable().optional(), FieldGoalPercentage: z.number().nullable().optional(), OpponentPassingInterceptionPercentage: z.number().nullable().optional(), OpponentPuntReturnAverage: z.number().nullable().optional(), OpponentKickReturnAverage: z.number().nullable().optional(), OpponentExtraPointPercentage: z.number().nullable().optional(), OpponentFieldGoalPercentage: z.number().nullable().optional(), PenaltyYardDifferential: z.number().int().nullable().optional(), PuntReturnYardDifferential: z.number().int().nullable().optional(), KickReturnYardDifferential: z.number().int().nullable().optional(), TwoPointConversionReturns: z.number().int().nullable().optional(), OpponentTwoPointConversionReturns: z.number().int().nullable().optional(), TeamID: z.number().int().nullable().optional(), OpponentID: z.number().int().nullable().optional(), Day: z.string().nullable().optional(), DateTime: z.string().nullable().optional(), GlobalGameID: z.number().int().nullable().optional(), GlobalTeamID: z.number().int().nullable().optional(), GlobalOpponentID: z.number().int().nullable().optional(), ScoreID: z.number().int().optional()}); export const getApiV3NflStatsFormatTeamGameStatsFinalSeasonWeekResponse = z.array(teamGame); 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 }; /** * Team Game Stats - by Game [Final] * * GET /v3/nfl/stats/{format}/TeamGameStatsFinal/{season}/{week} * * Also accepts auth: apiKeyQuery */ export const getApiV3NflStatsFormatTeamGameStatsFinalSeasonWeek = async (args: GetApiV3NflStatsFormatTeamGameStatsFinalSeasonWeekArgs, options?: GetApiV3NflStatsFormatTeamGameStatsFinalSeasonWeekOptions) => { const {baseUrl = "https://api.sportsdata.io", fetch: fetchFn = fetch, apiKeyHeader} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (apiKeyHeader !== undefined) headers.set("Ocp-Apim-Subscription-Key", apiKeyHeader) const url = `${baseUrl.replace(/\/+$/, '')}/v3/nfl/stats/${encodeURIComponent(String(args.format))}/TeamGameStatsFinal/${encodeURIComponent(String(args.season))}/${encodeURIComponent(String(args.week))}${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(getApiV3NflStatsFormatTeamGameStatsFinalSeasonWeekResponse, await res.json()) };