{"version":3,"sources":["../src/core/errors.ts","../src/core/base-resource.ts","../src/core/query-builder.ts","../src/utils/validators.ts","../src/resources/leagues.ts","../src/resources/teams.ts","../src/resources/players.ts","../src/resources/standings.ts","../src/resources/livescores.ts","../src/resources/coaches.ts","../src/resources/referees.ts","../src/resources/transfers.ts","../src/resources/venues.ts","../src/resources/news.ts","../src/resources/fixtures.ts","../src/client.ts","../src/types/enums.ts","../src/types/sportmonks-syntax.ts","../src/utils/polling.ts","../src/utils/type-helpers.ts"],"names":["message","axios","LeagueType","LeagueSubType","FixtureStatus","EventTypeId","FixtureStatisticTypeId","PositionType","TeamType","Gender","LineupType","TransferTypeEnum","StandingRule","ScoreType","VenueSurface","SortOrder","PlayerStatisticType"],"mappings":"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","file":"index.mjs","sourcesContent":["export type ErrorType = 'AUTH_ERROR' | 'NETWORK_ERROR' | 'SERVER_ERROR' | 'CLIENT_ERROR' | 'RATE_LIMIT_ERROR'\n\n/**\n * SportMonks API Error class\n */\nexport class SportMonksError extends Error {\n  constructor(\n    message: string,\n    public statusCode?: number,\n    public apiMessage?: string,\n    public errors?: Record<string, unknown>,\n    public errorType?: ErrorType,\n  ) {\n    super(message)\n    this.name = 'SportMonksError'\n  }\n\n  /**\n   * Check if this is a network/connection error\n   */\n  isNetworkError(): boolean {\n    return this.errorType === 'NETWORK_ERROR'\n  }\n\n  /**\n   * Check if this is an authentication error\n   */\n  isAuthError(): boolean {\n    return this.errorType === 'AUTH_ERROR'\n  }\n\n  /**\n   * Check if this is a rate limit error\n   */\n  isRateLimitError(): boolean {\n    return this.errorType === 'RATE_LIMIT_ERROR'\n  }\n\n  /**\n   * Get a user-friendly error message\n   */\n  getUserMessage(): string {\n    switch (this.errorType) {\n      case 'AUTH_ERROR':\n        return 'Authentication failed. Please check your API key is valid and has the necessary permissions.'\n      case 'NETWORK_ERROR':\n        return 'Unable to connect to SportMonks API. Please check your network connection.'\n      case 'RATE_LIMIT_ERROR':\n        return 'API rate limit exceeded. Please wait before making more requests.'\n      case 'SERVER_ERROR':\n        return 'SportMonks API server error. Please try again later.'\n      case 'CLIENT_ERROR':\n        return this.message\n      default:\n        return 'An unexpected error occurred.'\n    }\n  }\n}\n","import axios, { AxiosInstance } from 'axios'\nimport { SportMonksError, ErrorType } from './errors'\nimport { QueryParameters, RetryOptions } from '../types/common'\n\n/**\n * Base resource class that all resource-specific classes extend\n */\nexport abstract class BaseResource {\n  protected client: AxiosInstance\n  protected basePath: string\n  protected includeSeparator: string\n  protected retryOptions: RetryOptions\n\n  constructor(\n    client: AxiosInstance,\n    basePath: string,\n    includeSeparator: string = ';',\n    retryOptions: RetryOptions = {},\n  ) {\n    this.client = client\n    this.basePath = basePath\n    this.includeSeparator = includeSeparator\n    this.retryOptions = {\n      maxRetries: retryOptions.maxRetries || 0,\n      retryDelay: retryOptions.retryDelay || 1000,\n      maxRetryDelay: retryOptions.maxRetryDelay || 30000,\n      retryOnRateLimit: retryOptions.retryOnRateLimit ?? true,\n      retryStatusCodes: retryOptions.retryStatusCodes || [502, 503, 504],\n    }\n  }\n\n  /**\n   * Make a request to the API with optional retry logic\n   */\n  protected async request<T>(endpoint: string, params: QueryParameters = {}): Promise<T> {\n    const url = `${this.basePath}${endpoint}`\n    let lastError: unknown\n\n    for (let attempt = 0; attempt <= this.retryOptions.maxRetries!; attempt++) {\n      try {\n        const response = await this.client.get(url, { params })\n\n        // The API returns rate_limit and subscription info in the response body\n        // No need to parse headers or enhance the response\n\n        return response.data as T\n      } catch (error) {\n        lastError = error\n\n        if (!this.shouldRetry(error, attempt)) {\n          throw this.handleError(error, url)\n        }\n\n        // Calculate delay with exponential backoff\n        const delay = Math.min(\n          this.retryOptions.retryDelay! * Math.pow(2, attempt),\n          this.retryOptions.maxRetryDelay!,\n        )\n\n        // If it's a rate limit error, use the reset time if available\n        if (axios.isAxiosError(error) && error.response?.status === 429) {\n          const responseData = error.response.data as Record<string, unknown> | undefined\n          const rateLimit = responseData?.rate_limit as Record<string, unknown> | undefined\n          const resetIn = rateLimit?.resets_in_seconds as number | undefined\n          if (resetIn) {\n            await this.sleep(resetIn * 1000)\n            continue\n          }\n        }\n\n        await this.sleep(delay)\n      }\n    }\n\n    throw this.handleError(lastError, url)\n  }\n\n  /**\n   * Determine if a request should be retried\n   */\n  private shouldRetry(error: unknown, attempt: number): boolean {\n    if (attempt >= this.retryOptions.maxRetries!) {\n      return false\n    }\n\n    if (!axios.isAxiosError(error)) {\n      return false\n    }\n\n    const status = error.response?.status\n    if (!status) {\n      // Network errors should be retried\n      return true\n    }\n\n    // Check rate limit retry\n    if (status === 429 && this.retryOptions.retryOnRateLimit) {\n      return true\n    }\n\n    // Check other status codes\n    return this.retryOptions.retryStatusCodes!.includes(status)\n  }\n\n  /**\n   * Handle and transform errors\n   */\n  private handleError(error: unknown, url: string): SportMonksError {\n    if (axios.isAxiosError(error)) {\n      const errorData = error.response?.data as Record<string, unknown> | undefined\n      const status = error.response?.status\n      let errorType: ErrorType | undefined\n\n      // Network errors (no response)\n      if (!error.response) {\n        errorType = 'NETWORK_ERROR'\n        let message = 'Network error'\n        \n        if (error.code === 'ECONNREFUSED') {\n          message = 'Connection refused. The server may be down or unreachable.'\n        } else if (error.code === 'ENOTFOUND') {\n          message = 'Server not found. Please check the API URL.'\n        } else if (error.code === 'ETIMEDOUT') {\n          message = 'Request timeout. The server is not responding.'\n        } else if (error.message) {\n          message = `Network error: ${error.message}`\n        }\n        \n        return new SportMonksError(message, undefined, undefined, undefined, errorType)\n      }\n\n      // HTTP errors with response\n      let message = (errorData?.message as string) || error.message\n      \n      if (status === 401 || status === 403) {\n        errorType = 'AUTH_ERROR'\n        message = (errorData?.message as string) || 'Authentication failed. Invalid or missing API key.'\n      } else if (status === 404) {\n        errorType = 'CLIENT_ERROR'\n        message = (errorData?.message as string) || `Resource not found: ${url}`\n      } else if (status === 429) {\n        errorType = 'RATE_LIMIT_ERROR'\n        const rateLimit = errorData?.rate_limit as Record<string, unknown> | undefined\n        const resetIn = rateLimit?.resets_in_seconds as number | undefined\n        message = resetIn\n          ? `Rate limit exceeded. Resets in ${resetIn} seconds.`\n          : 'Rate limit exceeded. Please wait before making more requests.'\n      } else if (status && status >= 500) {\n        errorType = 'SERVER_ERROR'\n        message = (errorData?.message as string) || 'Server error. Please try again later.'\n      } else if (status && status >= 400) {\n        errorType = 'CLIENT_ERROR'\n      }\n\n      return new SportMonksError(\n        message,\n        status,\n        errorData?.message as string | undefined,\n        errorData?.errors as Record<string, unknown> | undefined,\n        errorType,\n      )\n    }\n\n    return new SportMonksError(\n      (error as Error).message || 'Unknown error occurred',\n      undefined,\n      undefined,\n      undefined,\n      'CLIENT_ERROR',\n    )\n  }\n\n  /**\n   * Sleep for a specified number of milliseconds\n   */\n  private sleep(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms))\n  }\n}\n","import { BaseResource } from './base-resource'\nimport { QueryParameters } from '../types/common'\n\n/**\n * Advanced query builder for constructing API requests with method chaining\n */\nexport class QueryBuilder<T> {\n  protected resource: BaseResource\n  protected endpoint: string\n  protected queryParams: QueryParameters = {}\n  protected includeParams: string[] = []\n  protected selectFields: string[] = []\n  protected filterParams: Record<string, string | number | boolean> = {}\n  protected orderParams: string[] = []\n  protected hasParams: string[] = []\n\n  constructor(resource: BaseResource, endpoint: string) {\n    this.resource = resource\n    this.endpoint = endpoint\n  }\n\n  /**\n   * Include related resources in the response\n   * @param includes Array of relationship names, dot notation for nested includes, or field selection\n   * @example .include(['country', 'seasons.stages'])\n   * @example .include(['lineups:player_name', 'events:player_name,related_player_name,minute'])\n   * @example .include(['lineups;events;participants']) // Multiple includes with semicolon\n   */\n  include(includes: string[] | string): QueryBuilder<T> {\n    if (typeof includes === 'string') {\n      // Handle string input for complex includes\n      this.includeParams.push(includes)\n    } else {\n      this.includeParams = [...new Set([...this.includeParams, ...includes])]\n    }\n    return this\n  }\n\n  /**\n   * Include a relation with specific field selection\n   * @param relation The relation name\n   * @param fields Array of fields to select from the relation\n   * @example .includeFields('lineups', ['player_name', 'jersey_number'])\n   * @example .includeFields('events', ['player_name', 'related_player_name', 'minute'])\n   */\n  includeFields(relation: string, fields: string[]): QueryBuilder<T> {\n    const fieldsString = fields.join(',')\n    this.includeParams.push(`${relation}:${fieldsString}`)\n    return this\n  }\n\n  /**\n   * Select specific fields to include in the response\n   * @param fields Array of field names\n   * @example .select(['id', 'name', 'country_id'])\n   */\n  select(fields: string[]): QueryBuilder<T> {\n    this.selectFields = [...new Set([...this.selectFields, ...fields])]\n    return this\n  }\n\n  /**\n   * Add a filter parameter to the request\n   * @example .filter('name', 'Premier League')\n   * @example .filter('active', true)\n   * @example .filter('eventTypes', [15, 16]) // Multiple values\n   */\n  filter(key: string, value: string | number | boolean | (string | number)[]): QueryBuilder<T> {\n    if (Array.isArray(value)) {\n      // Join multiple values with comma for SportMonks syntax\n      this.filterParams[key] = value.join(',')\n    } else {\n      this.filterParams[key] = value\n    }\n    return this\n  }\n\n  /**\n   * Add multiple filters at once\n   * @example .filters({ active: true, country_id: 462 })\n   */\n  filters(filters: Record<string, string | number | boolean>): QueryBuilder<T> {\n    this.filterParams = { ...this.filterParams, ...filters }\n    return this\n  }\n\n  /**\n   * Add sorting to the results\n   * @param field Field name with optional - prefix for descending\n   * @example .orderBy('name') or .orderBy('-created_at')\n   */\n  orderBy(field: string): QueryBuilder<T> {\n    this.orderParams.push(field)\n    return this\n  }\n\n  /**\n   * Filter results that have specific relationships\n   * @param relationships Array of relationship names\n   * @example .has(['seasons'])\n   */\n  has(relationships: string[]): QueryBuilder<T> {\n    this.hasParams = [...new Set([...this.hasParams, ...relationships])]\n    return this\n  }\n\n  /**\n   * Set the page number for paginated results\n   */\n  page(page: number): QueryBuilder<T> {\n    this.queryParams.page = page\n    return this\n  }\n\n  /**\n   * Set the number of items per page\n   */\n  limit(limit: number): QueryBuilder<T> {\n    this.queryParams.limit = limit\n    return this\n  }\n\n  /**\n   * Set the number of items per page (alias for limit)\n   */\n  perPage(perPage: number): QueryBuilder<T> {\n    return this.limit(perPage)\n  }\n\n  /**\n   * Execute the API request and return the results\n   */\n  async get(): Promise<T> {\n    // Build query parameters\n    if (this.includeParams.length > 0) {\n      this.queryParams.include = this.includeParams.join(this.resource['includeSeparator'])\n    }\n\n    if (this.selectFields.length > 0) {\n      this.queryParams.select = this.selectFields.join(',')\n    }\n\n    // Build filters as a string (API v3 format)\n    if (Object.keys(this.filterParams).length > 0) {\n      const filterStrings = Object.entries(this.filterParams).map(([key, value]) => {\n        return `${key}:${value}`\n      })\n      this.queryParams.filters = filterStrings.join(';')\n    }\n\n    if (this.orderParams.length > 0) {\n      this.queryParams.order = this.orderParams.join(',')\n    }\n\n    if (this.hasParams.length > 0) {\n      this.queryParams.has = this.hasParams.join(',')\n    }\n\n    // Handle per_page vs limit\n    if (this.queryParams.limit) {\n      this.queryParams.per_page = this.queryParams.limit\n      delete this.queryParams.limit\n    }\n\n    return this.resource['request']<T>(this.endpoint, this.queryParams)\n  }\n\n  /**\n   * Build complex includes with SportMonks syntax\n   * @param includes Object defining includes with optional field selection\n   * @example .withIncludes({\n   *   lineups: ['player_name', 'jersey_number'],\n   *   events: ['player_name', 'related_player_name', 'minute'],\n   *   participants: true  // Include all fields\n   * })\n   */\n  withIncludes(includes: Record<string, string[] | boolean>): QueryBuilder<T> {\n    Object.entries(includes).forEach(([relation, fields]) => {\n      if (fields === true) {\n        // Include all fields\n        this.includeParams.push(relation)\n      } else if (Array.isArray(fields) && fields.length > 0) {\n        // Include specific fields\n        this.includeParams.push(`${relation}:${fields.join(',')}`)\n      }\n    })\n    return this\n  }\n\n  /**\n   * Get all pages of results (be careful with rate limits!)\n   */\n  async getAll(): Promise<T[]> {\n    const results: T[] = []\n    let currentPage = 1\n    let hasMore = true\n\n    while (hasMore) {\n      this.page(currentPage)\n      const response = await this.get() as unknown as { data?: T | T[]; pagination?: { has_more?: boolean } }\n\n      if (response.data) {\n        results.push(...(Array.isArray(response.data) ? response.data : [response.data]))\n      }\n\n      hasMore = response.pagination?.has_more || false\n      currentPage++\n    }\n\n    return results\n  }\n}\n","/**\n * Validation utilities for the SportMonks SDK\n */\n\n/**\n * Validate date format (YYYY-MM-DD)\n */\nexport function validateDateFormat(date: string): void {\n  const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/\n  if (!dateRegex.test(date)) {\n    throw new Error(`Invalid date format: ${date}. Expected YYYY-MM-DD`)\n  }\n\n  // Additional validation to ensure it's a valid date\n  const dateObj = new Date(date)\n  if (isNaN(dateObj.getTime())) {\n    throw new Error(`Invalid date: ${date}`)\n  }\n}\n\n/**\n * Validate date range\n */\nexport function validateDateRange(startDate: string, endDate: string): void {\n  validateDateFormat(startDate)\n  validateDateFormat(endDate)\n\n  const start = new Date(startDate)\n  const end = new Date(endDate)\n\n  if (start > end) {\n    throw new Error(`Invalid date range: start date (${startDate}) is after end date (${endDate})`)\n  }\n\n  // Check if range is too large (more than 1 year)\n  const oneYear = 365 * 24 * 60 * 60 * 1000\n  if (end.getTime() - start.getTime() > oneYear) {\n    throw new Error('Date range cannot exceed 1 year')\n  }\n}\n\n/**\n * Format date to YYYY-MM-DD\n */\nexport function formatDate(date: Date | string): string {\n  const dateObj = typeof date === 'string' ? new Date(date) : date\n\n  if (isNaN(dateObj.getTime())) {\n    throw new Error('Invalid date provided')\n  }\n\n  const year = dateObj.getFullYear()\n  const month = String(dateObj.getMonth() + 1).padStart(2, '0')\n  const day = String(dateObj.getDate()).padStart(2, '0')\n\n  return `${year}-${month}-${day}`\n}\n\n/**\n * Get today's date in YYYY-MM-DD format\n */\nexport function getToday(): string {\n  return formatDate(new Date())\n}\n\n/**\n * Get date N days from now\n */\nexport function getDaysFromNow(days: number): string {\n  const date = new Date()\n  date.setDate(date.getDate() + days)\n  return formatDate(date)\n}\n\n/**\n * Get date N days ago\n */\nexport function getDaysAgo(days: number): string {\n  return getDaysFromNow(-days)\n}\n\n/**\n * Validate numeric ID\n */\nexport function validateId(id: string | number, name: string = 'ID'): number {\n  const numId = typeof id === 'string' ? parseInt(id, 10) : id\n\n  if (isNaN(numId) || numId <= 0) {\n    throw new Error(`Invalid ${name}: ${id}. Must be a positive number`)\n  }\n\n  return numId\n}\n\n/**\n * Validate array of IDs\n */\nexport function validateIds(ids: (string | number)[], name: string = 'IDs'): number[] {\n  if (!Array.isArray(ids) || ids.length === 0) {\n    throw new Error(`${name} must be a non-empty array`)\n  }\n\n  return ids.map((id, index) => {\n    try {\n      return validateId(id, `${name}[${index}]`)\n    } catch {\n      throw new Error(`Invalid ${name}[${index}]: ${id}`)\n    }\n  })\n}\n\n/**\n * Validate search query\n */\nexport function validateSearchQuery(query: string, minLength: number = 3): string {\n  if (typeof query !== 'string') {\n    throw new Error('Search query must be a string')\n  }\n\n  const trimmed = query.trim()\n\n  if (trimmed.length === 0) {\n    throw new Error('Invalid search query')\n  }\n\n  if (trimmed.length < minLength) {\n    throw new Error(`Search query must be at least ${minLength} characters`)\n  }\n\n  return trimmed\n}\n\n/**\n * Validate pagination parameters\n */\nexport function validatePagination(page?: number, perPage?: number): void {\n  if (page !== undefined) {\n    if (!Number.isInteger(page) || page < 1) {\n      throw new Error('Page must be a positive integer')\n    }\n  }\n\n  if (perPage !== undefined) {\n    if (!Number.isInteger(perPage) || perPage < 1 || perPage > 100) {\n      throw new Error('Per page must be an integer between 1 and 100')\n    }\n  }\n}\n\n/**\n * Validate enum value\n */\nexport function validateEnum<T extends Record<string, unknown>>(\n  value: unknown,\n  enumObject: T,\n  name: string,\n): T[keyof T] {\n  const values = Object.values(enumObject)\n\n  if (!values.includes(value)) {\n    throw new Error(`Invalid ${name}: ${String(value)}. Must be one of: ${values.join(', ')}`)\n  }\n\n  return value as T[keyof T]\n}\n\n/**\n * Sanitize string for use in URLs\n */\nexport function sanitizeUrlParam(param: string): string {\n  return encodeURIComponent(param.trim())\n}\n\n/**\n * Parse and validate JSON response\n */\nexport function parseJsonSafely<T>(json: string): T {\n  try {\n    return JSON.parse(json) as T\n  } catch {\n    throw new Error('Invalid JSON response from API')\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, League } from '../types'\nimport { validateDateFormat } from '../utils/validators'\n\n/**\n * Leagues resource with all available endpoints\n */\nexport class LeaguesResource extends BaseResource {\n  /**\n   * Get all leagues\n   * @example\n   * const leagues = await api.leagues.all()\n   *   .include(['country', 'currentSeason'])\n   *   .filter('active', true)\n   *   .orderBy('name')\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<League>> {\n    return new QueryBuilder<PaginatedResponse<League>>(this, '')\n  }\n\n  /**\n   * Get a league by ID\n   * @param id The league ID\n   * @example\n   * const league = await api.leagues.byId(271)\n   *   .include(['country', 'seasons', 'stages'])\n   *   .get();\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<League>> {\n    return new QueryBuilder<SingleResponse<League>>(this, `/${id}`)\n  }\n\n  /**\n   * Get leagues by country ID\n   * @param countryId The country ID\n   * @example\n   * const leagues = await api.leagues.byCountry(462)\n   *   .filter('active', true)\n   *   .get();\n   */\n  byCountry(countryId: string | number): QueryBuilder<PaginatedResponse<League>> {\n    return new QueryBuilder<PaginatedResponse<League>>(this, `/countries/${countryId}`)\n  }\n\n  /**\n   * Search leagues by name\n   * @param query The search query\n   * @example\n   * const leagues = await api.leagues.search('premier')\n   *   .include(['country'])\n   *   .get();\n   */\n  search(query: string): QueryBuilder<PaginatedResponse<League>> {\n    const encodedQuery = encodeURIComponent(query)\n    return new QueryBuilder<PaginatedResponse<League>>(this, `/search/${encodedQuery}`)\n  }\n\n  /**\n   * Get leagues with live fixtures\n   * @example\n   * const liveLeagues = await api.leagues.live()\n   *   .include(['fixtures'])\n   *   .get();\n   */\n  live(): QueryBuilder<PaginatedResponse<League>> {\n    return new QueryBuilder<PaginatedResponse<League>>(this, '/live')\n  }\n\n  /**\n   * Get leagues by fixture date\n   * @param date Date in YYYY-MM-DD format\n   * @example\n   * const leagues = await api.leagues.byDate('2024-01-15')\n   *   .include(['fixtures'])\n   *   .get();\n   */\n  byDate(date: string): QueryBuilder<PaginatedResponse<League>> {\n    validateDateFormat(date)\n    return new QueryBuilder<PaginatedResponse<League>>(this, `/date/${date}`)\n  }\n\n  /**\n   * Get all leagues for a team (historical and current)\n   * @param teamId The team ID\n   * @example\n   * const leagues = await api.leagues.byTeam(1)\n   *   .include(['seasons'])\n   *   .get();\n   */\n  byTeam(teamId: string | number): QueryBuilder<PaginatedResponse<League>> {\n    return new QueryBuilder<PaginatedResponse<League>>(this, `/teams/${teamId}`)\n  }\n\n  /**\n   * Get current leagues for a team\n   * @param teamId The team ID\n   * @example\n   * const currentLeagues = await api.leagues.currentByTeam(1)\n   *   .include(['currentSeason'])\n   *   .get();\n   */\n  currentByTeam(teamId: string | number): QueryBuilder<PaginatedResponse<League>> {\n    return new QueryBuilder<PaginatedResponse<League>>(this, `/teams/${teamId}/current`)\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Team, SquadMember } from '../types'\n\n/**\n * Teams resource for SportMonks Football API\n * @see https://docs.sportmonks.com/football/endpoints-and-entities/endpoints/teams\n */\nexport class TeamsResource extends BaseResource {\n  /**\n   * Get all teams\n   * @returns QueryBuilder for chaining\n   */\n  all(): QueryBuilder<PaginatedResponse<Team>> {\n    return new QueryBuilder<PaginatedResponse<Team>>(this, '')\n  }\n\n  /**\n   * Get a team by ID\n   * @param id - The team ID\n   * @returns QueryBuilder for chaining\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<Team>> {\n    return new QueryBuilder<SingleResponse<Team>>(this, `/${id}`)\n  }\n\n  /**\n   * Get teams by country ID\n   * @param countryId - The country ID\n   * @returns QueryBuilder for chaining\n   */\n  byCountry(countryId: string | number): QueryBuilder<PaginatedResponse<Team>> {\n    return new QueryBuilder<PaginatedResponse<Team>>(this, `/countries/${countryId}`)\n  }\n\n  /**\n   * Get teams by season ID\n   * @param seasonId - The season ID\n   * @returns QueryBuilder for chaining\n   */\n  bySeason(seasonId: string | number): QueryBuilder<PaginatedResponse<Team>> {\n    return new QueryBuilder<PaginatedResponse<Team>>(this, `/seasons/${seasonId}`)\n  }\n\n  /**\n   * Search for teams by name\n   * @param searchQuery - The search query\n   * @returns QueryBuilder for chaining\n   */\n  search(searchQuery: string): QueryBuilder<PaginatedResponse<Team>> {\n    const encodedQuery = encodeURIComponent(searchQuery)\n    return new QueryBuilder<PaginatedResponse<Team>>(this, `/search/${encodedQuery}`)\n  }\n\n  /**\n   * Get squad for a team. If seasonId is provided, fetch squad for that season.\n   * @param teamId Team ID\n   * @param seasonId Optional season ID\n   * @example\n   * // Current squad\n   * const current = await client.teams.squad(1).include(['player']).get()\n   * // Squad for season 2023/24\n   * const historical = await client.teams.squad(1, 21646).include(['player']).get()\n   */\n  squad(\n    teamId: string | number,\n    seasonId?: string | number,\n  ): QueryBuilder<PaginatedResponse<SquadMember>> {\n    if (seasonId) {\n      return this.squadBySeason(seasonId, teamId)\n    }\n    // Override basePath to access squads endpoint\n    const squadResource = Object.create(this) as TeamsResource\n    squadResource.basePath = '/football'\n    return new QueryBuilder<PaginatedResponse<SquadMember>>(squadResource, `/squads/teams/${teamId}`)\n  }\n\n  /**\n   * Get squad for a team in a specific season.\n   * @param seasonId Season ID\n   * @param teamId Team ID\n   */\n  squadBySeason(\n    seasonId: string | number,\n    teamId: string | number,\n  ): QueryBuilder<PaginatedResponse<SquadMember>> {\n    // Override basePath to access squads endpoint\n    const squadResource = Object.create(this) as TeamsResource\n    squadResource.basePath = '/football'\n    return new QueryBuilder<PaginatedResponse<SquadMember>>(\n      squadResource,\n      `/squads/seasons/${seasonId}/teams/${teamId}`,\n    )\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Player, PlayerStatistic } from '../types'\nimport { validateId, validateSearchQuery } from '../utils/validators'\n\n/**\n * Players resource for SportMonks Football API\n * @see https://docs.sportmonks.com/football/endpoints-and-entities/endpoints/players\n */\nexport class PlayersResource extends BaseResource {\n  /**\n   * Get all players\n   * @returns QueryBuilder for chaining\n   */\n  all(): QueryBuilder<PaginatedResponse<Player>> {\n    return new QueryBuilder<PaginatedResponse<Player>>(this, '')\n  }\n\n  /**\n   * Get a player by ID\n   * @param id - The player ID\n   * @returns QueryBuilder for chaining\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<Player>> {\n    const validatedId = validateId(id, 'ID')\n    return new QueryBuilder<SingleResponse<Player>>(this, `/${validatedId}`)\n  }\n\n  /**\n   * Get players by country ID\n   * @param countryId - The country ID\n   * @returns QueryBuilder for chaining\n   */\n  byCountry(countryId: string | number): QueryBuilder<PaginatedResponse<Player>> {\n    const validatedId = validateId(countryId, 'Country ID')\n    return new QueryBuilder<PaginatedResponse<Player>>(this, `/countries/${validatedId}`)\n  }\n\n  /**\n   * Search for players by name\n   * @param searchQuery - The search query\n   * @returns QueryBuilder for chaining\n   */\n  search(searchQuery: string): QueryBuilder<PaginatedResponse<Player>> {\n    const validatedQuery = validateSearchQuery(searchQuery, 2)\n    const encodedQuery = encodeURIComponent(validatedQuery)\n    return new QueryBuilder<PaginatedResponse<Player>>(this, `/search/${encodedQuery}`)\n  }\n\n  /**\n   * Get the latest updated players\n   * @returns QueryBuilder for chaining\n   */\n  latest(): QueryBuilder<PaginatedResponse<Player>> {\n    return new QueryBuilder<PaginatedResponse<Player>>(this, '/latest')\n  }\n\n  /**\n   * Get statistics for a player.\n   * @param playerId Player ID\n   * @example\n   * const stats = await client.players.statistics(278).get()\n   */\n  statistics(playerId: string | number): QueryBuilder<PaginatedResponse<PlayerStatistic>> {\n    return new QueryBuilder<PaginatedResponse<PlayerStatistic>>(this, `/${playerId}/statistics`)\n  }\n\n  /**\n   * Get statistics for a player in a specific season.\n   * @param playerId Player ID\n   * @param seasonId Season ID\n   */\n  statisticsBySeason(\n    playerId: string | number,\n    seasonId: string | number,\n  ): QueryBuilder<PaginatedResponse<PlayerStatistic>> {\n    return this.statistics(playerId).filter('season_id', seasonId)\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, Standing, StandingCorrection } from '../types'\n\n/**\n * Standings resource with all available endpoints\n */\nexport class StandingsResource extends BaseResource {\n  /**\n   * Get all standings\n   * Note: This endpoint requires season_id filter\n   * @example\n   * const standings = await api.standings.all()\n   *   .filter('season_id', 19735)\n   *   .include(['participant', 'league'])\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<Standing>> {\n    return new QueryBuilder<PaginatedResponse<Standing>>(this, '')\n  }\n\n  /**\n   * Get standings by season ID\n   * @param seasonId The season ID\n   * @example\n   * const standings = await api.standings.bySeason(19735)\n   *   .include(['participant.country'])\n   *   .get();\n   */\n  bySeason(seasonId: string | number): QueryBuilder<PaginatedResponse<Standing>> {\n    return new QueryBuilder<PaginatedResponse<Standing>>(this, `/seasons/${seasonId}`)\n  }\n\n  /**\n   * Get standings by round ID\n   * @param roundId The round ID\n   * @example\n   * const standings = await api.standings.byRound(274719)\n   *   .include(['participant'])\n   *   .get();\n   */\n  byRound(roundId: string | number): QueryBuilder<PaginatedResponse<Standing>> {\n    return new QueryBuilder<PaginatedResponse<Standing>>(this, `/rounds/${roundId}`)\n  }\n\n  /**\n   * Get standing corrections by season ID\n   * @param seasonId The season ID\n   * @example\n   * const corrections = await api.standings.correctionsBySeason(19735)\n   *   .include(['participant'])\n   *   .get();\n   */\n  correctionsBySeason(\n    seasonId: string | number,\n  ): QueryBuilder<PaginatedResponse<StandingCorrection>> {\n    return new QueryBuilder<PaginatedResponse<StandingCorrection>>(\n      this,\n      `/corrections/seasons/${seasonId}`,\n    )\n  }\n\n  /**\n   * Get live standings by league ID\n   * @param leagueId The league ID\n   * @example\n   * const liveStandings = await api.standings.liveByLeague(8)\n   *   .include(['participant'])\n   *   .get();\n   */\n  liveByLeague(leagueId: string | number): QueryBuilder<PaginatedResponse<Standing>> {\n    return new QueryBuilder<PaginatedResponse<Standing>>(this, `/live/leagues/${leagueId}`)\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, Fixture } from '../types'\n\n/**\n * Livescores resource for real-time fixture data\n *\n * The Livescores endpoints provide access to real-time match data:\n * - Inplay fixtures (currently being played)\n * - Upcoming fixtures (15 minutes before start)\n * - Latest updates (fixtures updated within 10 seconds)\n */\nexport class LivescoresResource extends BaseResource {\n  /**\n   * Get all inplay fixtures (currently being played)\n   * @example\n   * const inplayMatches = await api.livescores.inplay()\n   *   .include(['league', 'participants', 'scores', 'state'])\n   *   .get();\n   */\n  inplay(): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, '/inplay')\n  }\n\n  /**\n   * Get all livescores (fixtures starting within 15 minutes)\n   * @example\n   * const upcomingMatches = await api.livescores.all()\n   *   .include(['league', 'participants', 'venue'])\n   *   .filter('leagues', '8,564') // Filter by league IDs\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, '')\n  }\n\n  /**\n   * Get latest updated livescores (updated within 10 seconds)\n   * @example\n   * const latestUpdates = await api.livescores.latest()\n   *   .include(['events.type', 'scores', 'participants'])\n   *   .get();\n   */\n  latest(): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, '/latest')\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Coach } from '../types'\n\n/**\n * Coaches resource with all available endpoints\n */\nexport class CoachesResource extends BaseResource {\n  /**\n   * Get all coaches\n   * @example\n   * const coaches = await api.coaches.all()\n   *   .include(['country', 'nationality', 'teams'])\n   *   .orderBy('name')\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<Coach>> {\n    return new QueryBuilder<PaginatedResponse<Coach>>(this, '')\n  }\n\n  /**\n   * Get a coach by ID\n   * @param id The coach ID\n   * @example\n   * const coach = await api.coaches.byId(123)\n   *   .include(['country', 'nationality', 'teams'])\n   *   .get();\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<Coach>> {\n    return new QueryBuilder<SingleResponse<Coach>>(this, `/${id}`)\n  }\n\n  /**\n   * Get coaches by country ID\n   * @param countryId The country ID\n   * @example\n   * const coaches = await api.coaches.byCountry(462)\n   *   .include(['teams'])\n   *   .get();\n   */\n  byCountry(countryId: string | number): QueryBuilder<PaginatedResponse<Coach>> {\n    return new QueryBuilder<PaginatedResponse<Coach>>(this, `/countries/${countryId}`)\n  }\n\n  /**\n   * Search coaches by name\n   * @param query The search query\n   * @example\n   * const coaches = await api.coaches.search('mourinho')\n   *   .include(['teams'])\n   *   .get();\n   */\n  search(query: string): QueryBuilder<PaginatedResponse<Coach>> {\n    const encodedQuery = encodeURIComponent(query)\n    return new QueryBuilder<PaginatedResponse<Coach>>(this, `/search/${encodedQuery}`)\n  }\n\n  /**\n   * Get last updated coaches (updated in the past two hours)\n   * @example\n   * const recentlyUpdated = await api.coaches.latest()\n   *   .include(['teams'])\n   *   .get();\n   */\n  latest(): QueryBuilder<PaginatedResponse<Coach>> {\n    return new QueryBuilder<PaginatedResponse<Coach>>(this, '/latest')\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Referee } from '../types'\n\n/**\n * Referees resource with all available endpoints\n */\nexport class RefereesResource extends BaseResource {\n  /**\n   * Get all referees\n   * @example\n   * const referees = await api.referees.all()\n   *   .include(['country'])\n   *   .page(1)\n   *   .limit(25)\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<Referee>> {\n    return new QueryBuilder<PaginatedResponse<Referee>>(this, '')\n  }\n\n  /**\n   * Get referee by ID\n   * @param refereeId The referee ID\n   * @example\n   * const referee = await api.referees.byId(1)\n   *   .include(['country', 'fixtures'])\n   *   .get();\n   */\n  byId(refereeId: string | number): QueryBuilder<SingleResponse<Referee>> {\n    return new QueryBuilder<SingleResponse<Referee>>(this, `/${refereeId}`)\n  }\n\n  /**\n   * Get referees by country ID\n   * @param countryId The country ID\n   * @example\n   * const referees = await api.referees.byCountry(1161)\n   *   .include(['country'])\n   *   .get();\n   */\n  byCountry(countryId: string | number): QueryBuilder<PaginatedResponse<Referee>> {\n    return new QueryBuilder<PaginatedResponse<Referee>>(this, `/countries/${countryId}`)\n  }\n\n  /**\n   * Get referees by season ID\n   * @param seasonId The season ID\n   * @example\n   * const referees = await api.referees.bySeason(19735)\n   *   .include(['country'])\n   *   .get();\n   */\n  bySeason(seasonId: string | number): QueryBuilder<PaginatedResponse<Referee>> {\n    return new QueryBuilder<PaginatedResponse<Referee>>(this, `/seasons/${seasonId}`)\n  }\n\n  /**\n   * Search referees by name\n   * @param searchQuery The search query (minimum 3 characters)\n   * @example\n   * const referees = await api.referees.search('Michael Oliver')\n   *   .include(['country'])\n   *   .get();\n   */\n  search(searchQuery: string): QueryBuilder<PaginatedResponse<Referee>> {\n    if (searchQuery.length < 3) {\n      throw new Error('Search query must be at least 3 characters long')\n    }\n    return new QueryBuilder<PaginatedResponse<Referee>>(\n      this,\n      `/search/${encodeURIComponent(searchQuery)}`,\n    )\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Transfer } from '../types'\n\n/**\n * Transfers resource for handling transfer-related API endpoints\n */\nexport class TransfersResource extends BaseResource {\n  /**\n   * Get all transfers\n   *\n   * @example\n   * ```typescript\n   * const transfers = await client.transfers.all()\n   *   .include(['player', 'fromteam', 'toteam', 'type'])\n   *   .limit(25)\n   *   .get();\n   * ```\n   */\n  all(): QueryBuilder<PaginatedResponse<Transfer>> {\n    return new QueryBuilder<PaginatedResponse<Transfer>>(this, '')\n  }\n\n  /**\n   * Get a transfer by ID\n   *\n   * @param id - The transfer ID\n   *\n   * @example\n   * ```typescript\n   * const transfer = await client.transfers.byId(123)\n   *   .include(['player', 'fromteam', 'toteam', 'type'])\n   *   .get();\n   * ```\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<Transfer>> {\n    return new QueryBuilder<SingleResponse<Transfer>>(this, `/${id}`)\n  }\n\n  /**\n   * Get latest transfers\n   *\n   * @example\n   * ```typescript\n   * const latestTransfers = await client.transfers.latest()\n   *   .include(['player', 'fromteam', 'toteam'])\n   *   .limit(50)\n   *   .get();\n   * ```\n   */\n  latest(): QueryBuilder<PaginatedResponse<Transfer>> {\n    return new QueryBuilder<PaginatedResponse<Transfer>>(this, '/latest')\n  }\n\n  /**\n   * Get transfers between a date range\n   *\n   * @param startDate - Start date in YYYY-MM-DD format\n   * @param endDate - End date in YYYY-MM-DD format\n   *\n   * @example\n   * ```typescript\n   * const transfers = await client.transfers.between('2024-01-01', '2024-01-31')\n   *   .include(['player', 'fromteam', 'toteam', 'type'])\n   *   .filter('completed', 1)\n   *   .get();\n   * ```\n   */\n  between(startDate: string, endDate: string): QueryBuilder<PaginatedResponse<Transfer>> {\n    // Validate date format\n    const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/\n    if (!dateRegex.test(startDate) || !dateRegex.test(endDate)) {\n      throw new Error('Dates must be in YYYY-MM-DD format')\n    }\n\n    return new QueryBuilder<PaginatedResponse<Transfer>>(this, `/between/${startDate}/${endDate}`)\n  }\n\n  /**\n   * Get transfers by team ID (both incoming and outgoing)\n   *\n   * @param teamId - The team ID\n   *\n   * @example\n   * ```typescript\n   * // Get all transfers for Manchester United\n   * const transfers = await client.transfers.byTeam(14)\n   *   .include(['player', 'fromteam', 'toteam', 'type'])\n   *   .filter('completed', 1)\n   *   .get();\n   * ```\n   */\n  byTeam(teamId: string | number): QueryBuilder<PaginatedResponse<Transfer>> {\n    return new QueryBuilder<PaginatedResponse<Transfer>>(this, `/teams/${teamId}`)\n  }\n\n  /**\n   * Get transfers by player ID\n   *\n   * @param playerId - The player ID\n   *\n   * @example\n   * ```typescript\n   * const playerTransfers = await client.transfers.byPlayer(12345)\n   *   .include(['fromteam', 'toteam', 'type'])\n   *   .get();\n   * ```\n   */\n  byPlayer(playerId: string | number): QueryBuilder<PaginatedResponse<Transfer>> {\n    return new QueryBuilder<PaginatedResponse<Transfer>>(this, `/players/${playerId}`)\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Venue } from '../types'\n\n/**\n * Venues resource for accessing stadium/venue information\n * @see https://docs.sportmonks.com/football/endpoints-and-entities/endpoints/venues\n */\nexport class VenuesResource extends BaseResource {\n  /**\n   * Get all venues\n   * @example\n   * const venues = await api.venues.all()\n   *   .include(['country'])\n   *   .page(1)\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<Venue>> {\n    return new QueryBuilder<PaginatedResponse<Venue>>(this, '')\n  }\n\n  /**\n   * Get a venue by ID\n   * @param id The venue ID\n   * @example\n   * const venue = await api.venues.byId(5)\n   *   .include(['country'])\n   *   .get();\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<Venue>> {\n    return new QueryBuilder<SingleResponse<Venue>>(this, `/${id}`)\n  }\n\n  /**\n   * Get venues by season ID\n   * Returns all venues used in a specific season\n   * @param seasonId The season ID\n   * @example\n   * const venues = await api.venues.bySeason(19735)\n   *   .include(['country'])\n   *   .get();\n   */\n  bySeason(seasonId: string | number): QueryBuilder<PaginatedResponse<Venue>> {\n    return new QueryBuilder<PaginatedResponse<Venue>>(this, `/seasons/${seasonId}`)\n  }\n\n  /**\n   * Search venues by name\n   * @param searchQuery The search query (minimum 3 characters)\n   * @example\n   * const venues = await api.venues.search('Old Trafford')\n   *   .include(['country'])\n   *   .get();\n   */\n  search(searchQuery: string): QueryBuilder<PaginatedResponse<Venue>> {\n    if (searchQuery.length < 3) {\n      throw new Error('Search query must be at least 3 characters long')\n    }\n    return new QueryBuilder<PaginatedResponse<Venue>>(\n      this,\n      `/search/${encodeURIComponent(searchQuery)}`,\n    )\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, NewsArticle } from '../types'\nimport { validateId } from '../utils/validators'\n\n/**\n * News resource for accessing pre-match and post-match articles.\n * @see https://docs.sportmonks.com/football/endpoints-and-entities/endpoints/news\n */\nexport class NewsResource extends BaseResource {\n  /**\n   * Get pre-match news articles.\n   * Supports standard filters (fixture_id, league_id, season_id).\n   * @example\n   * const news = await client.news.prematch().filter('league_id', 8).get()\n   */\n  prematch(): QueryBuilder<PaginatedResponse<NewsArticle>> {\n    return new QueryBuilder<PaginatedResponse<NewsArticle>>(this, '/pre-match')\n  }\n\n  /**\n   * Get post-match news articles.\n   * @example\n   * const news = await client.news.postmatch().filter('fixture_id', 18535482).get()\n   */\n  postmatch(): QueryBuilder<PaginatedResponse<NewsArticle>> {\n    return new QueryBuilder<PaginatedResponse<NewsArticle>>(this, '/post-match')\n  }\n\n  /**\n   * Get a single news article by ID.\n   * @param id News article ID\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<NewsArticle>> {\n    const validated = validateId(id, 'News ID')\n    return new QueryBuilder<SingleResponse<NewsArticle>>(this, `/${validated}`)\n  }\n}\n","import { BaseResource } from '../core/base-resource'\nimport { QueryBuilder } from '../core/query-builder'\nimport { PaginatedResponse, SingleResponse, Fixture } from '../types'\nimport {\n  validateDateFormat,\n  validateDateRange,\n  validateId,\n  validateSearchQuery,\n} from '../utils/validators'\n\n/**\n * Fixtures resource for accessing match/game information\n * @see https://docs.sportmonks.com/football/endpoints-and-entities/endpoints/fixtures\n */\nexport class FixturesResource extends BaseResource {\n  /**\n   * Get all fixtures\n   * @example\n   * const fixtures = await api.fixtures.all()\n   *   .include(['localteam', 'visitorteam'])\n   *   .page(1)\n   *   .get();\n   */\n  all(): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, '')\n  }\n\n  /**\n   * Get a fixture by ID\n   * @param id The fixture ID\n   * @example\n   * const fixture = await api.fixtures.byId(18535517)\n   *   .include(['localteam', 'visitorteam', 'venue', 'referee'])\n   *   .get();\n   */\n  byId(id: string | number): QueryBuilder<SingleResponse<Fixture>> {\n    return new QueryBuilder<SingleResponse<Fixture>>(this, `/${id}`)\n  }\n\n  /**\n   * Get fixtures by multiple IDs\n   * @param ids Array of fixture IDs\n   * @example\n   * const fixtures = await api.fixtures.byIds([18535517, 18535518])\n   *   .include(['localteam', 'visitorteam'])\n   *   .get();\n   */\n  byIds(ids: (string | number)[]): QueryBuilder<PaginatedResponse<Fixture>> {\n    const idsString = ids.join(',')\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, `/multi/${idsString}`)\n  }\n\n  /**\n   * Get fixtures by date\n   * @param date Date in YYYY-MM-DD format\n   * @example\n   * const fixtures = await api.fixtures.byDate('2024-01-15')\n   *   .include(['localteam', 'visitorteam'])\n   *   .get();\n   */\n  byDate(date: string): QueryBuilder<PaginatedResponse<Fixture>> {\n    validateDateFormat(date)\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, `/date/${date}`)\n  }\n\n  /**\n   * Get fixtures by date range\n   * @param startDate Start date in YYYY-MM-DD format\n   * @param endDate End date in YYYY-MM-DD format\n   * @example\n   * const fixtures = await api.fixtures.byDateRange('2024-01-01', '2024-01-31')\n   *   .include(['localteam', 'visitorteam'])\n   *   .get();\n   */\n  byDateRange(startDate: string, endDate: string): QueryBuilder<PaginatedResponse<Fixture>> {\n    validateDateRange(startDate, endDate)\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, `/between/${startDate}/${endDate}`)\n  }\n\n  /**\n   * Get fixtures by date range for a specific team\n   * @param teamId The team ID\n   * @param startDate Start date in YYYY-MM-DD format\n   * @param endDate End date in YYYY-MM-DD format\n   * @example\n   * const fixtures = await api.fixtures.byTeamAndDateRange(1, '2024-01-01', '2024-01-31')\n   *   .include(['localteam', 'visitorteam', 'venue'])\n   *   .get();\n   */\n  byTeamAndDateRange(\n    teamId: string | number,\n    startDate: string,\n    endDate: string,\n  ): QueryBuilder<PaginatedResponse<Fixture>> {\n    validateId(teamId, 'Team ID')\n    validateDateRange(startDate, endDate)\n    return new QueryBuilder<PaginatedResponse<Fixture>>(\n      this,\n      `/between/${startDate}/${endDate}/${teamId}`,\n    )\n  }\n\n  /**\n   * Get head-to-head fixtures between two teams\n   * @param team1Id First team ID\n   * @param team2Id Second team ID\n   * @example\n   * const h2h = await api.fixtures.headToHead(1, 14)\n   *   .include(['localteam', 'visitorteam', 'venue'])\n   *   .get();\n   */\n  headToHead(\n    team1Id: string | number,\n    team2Id: string | number,\n  ): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, `/head-to-head/${team1Id}/${team2Id}`)\n  }\n\n  /**\n   * Search fixtures by name\n   * @param searchQuery The search query\n   * @example\n   * const fixtures = await api.fixtures.search('Manchester United vs Liverpool')\n   *   .include(['localteam', 'visitorteam'])\n   *   .get();\n   */\n  search(searchQuery: string): QueryBuilder<PaginatedResponse<Fixture>> {\n    const query = validateSearchQuery(searchQuery)\n    return new QueryBuilder<PaginatedResponse<Fixture>>(\n      this,\n      `/search/${encodeURIComponent(query)}`,\n    )\n  }\n\n  /**\n   * Get upcoming fixtures by market ID\n   * @param marketId The market ID\n   * @example\n   * const fixtures = await api.fixtures.upcomingByMarket(1)\n   *   .include(['localteam', 'visitorteam'])\n   *   .get();\n   */\n  upcomingByMarket(marketId: string | number): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, `/upcoming/markets/${marketId}`)\n  }\n\n  /**\n   * Get upcoming fixtures by TV station ID\n   * @param tvStationId The TV station ID\n   * @example\n   * const fixtures = await api.fixtures.upcomingByTvStation(1)\n   *   .include(['localteam', 'visitorteam', 'tvstations'])\n   *   .get();\n   */\n  upcomingByTvStation(tvStationId: string | number): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(\n      this,\n      `/upcoming/tv-stations/${tvStationId}`,\n    )\n  }\n\n  /**\n   * Get past fixtures by TV station ID\n   * @param tvStationId The TV station ID\n   * @example\n   * const fixtures = await api.fixtures.pastByTvStation(1)\n   *   .include(['localteam', 'visitorteam', 'tvstations'])\n   *   .get();\n   */\n  pastByTvStation(tvStationId: string | number): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, `/past/tv-stations/${tvStationId}`)\n  }\n\n  /**\n   * Get latest updated fixtures\n   * Returns fixtures that have received updates within 10 seconds\n   * @example\n   * const fixtures = await api.fixtures.latest()\n   *   .include(['localteam', 'visitorteam'])\n   *   .get();\n   */\n  latest(): QueryBuilder<PaginatedResponse<Fixture>> {\n    return new QueryBuilder<PaginatedResponse<Fixture>>(this, '/latest')\n  }\n}\n","import axios, { AxiosInstance } from 'axios'\nimport { SportMonksClientOptions } from './types'\nimport {\n  LeaguesResource,\n  TeamsResource,\n  PlayersResource,\n  StandingsResource,\n  LivescoresResource,\n  CoachesResource,\n  RefereesResource,\n  TransfersResource,\n  VenuesResource,\n  FixturesResource,\n  NewsResource,\n} from './resources'\n\n/**\n * Main SportMonks client class\n */\nexport class SportMonksClient {\n  private client: AxiosInstance\n  private options: SportMonksClientOptions\n\n  // Resource instances\n  public leagues: LeaguesResource\n  public teams: TeamsResource\n  public players: PlayersResource\n  public standings: StandingsResource\n  public livescores: LivescoresResource\n  public coaches: CoachesResource\n  public referees: RefereesResource\n  public transfers: TransfersResource\n  public venues: VenuesResource\n  public fixtures: FixturesResource\n  public news: NewsResource\n\n  /**\n   * Create a new SportMonks API client\n   */\n  constructor(apiKey: string, options: SportMonksClientOptions = {}) {\n    this.options = {\n      baseUrl: 'https://api.sportmonks.com/v3',\n      timeout: 30000,\n      version: 'v3',\n      includeSeparator: ';',\n      ...options,\n    }\n\n    // Create axios instance\n    this.client = axios.create({\n      baseURL: this.options.baseUrl,\n      timeout: this.options.timeout,\n      params: {\n        api_token: apiKey,\n      },\n    })\n\n    // Add response interceptor for error handling\n    this.client.interceptors.response.use(\n      response => response,\n      (error: unknown) => {\n        // Enhanced error logging in development\n        if (process.env.NODE_ENV === 'development' && axios.isAxiosError(error) && error.response) {\n          const responseData = error.response.data as Record<string, unknown> | undefined\n          console.error('API Error:', {\n            status: error.response.status,\n            message: responseData?.message,\n            url: error.config?.url,\n          })\n        }\n        return Promise.reject(axios.isAxiosError(error) ? error : new Error(String(error)))\n      },\n    )\n\n    // Initialize resources\n    this.leagues = new LeaguesResource(\n      this.client,\n      '/football/leagues',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.teams = new TeamsResource(\n      this.client,\n      '/football/teams',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.players = new PlayersResource(\n      this.client,\n      '/football/players',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.standings = new StandingsResource(\n      this.client,\n      '/football/standings',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.livescores = new LivescoresResource(\n      this.client,\n      '/football/livescores',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.coaches = new CoachesResource(\n      this.client,\n      '/football/coaches',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.referees = new RefereesResource(\n      this.client,\n      '/football/referees',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.transfers = new TransfersResource(\n      this.client,\n      '/football/transfers',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.venues = new VenuesResource(\n      this.client,\n      '/football/venues',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.news = new NewsResource(\n      this.client,\n      '/football/news',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n    this.fixtures = new FixturesResource(\n      this.client,\n      '/football/fixtures',\n      this.options.includeSeparator,\n      this.options.retry,\n    )\n  }\n\n  /**\n   * Update the API key\n   */\n  setApiKey(apiKey: string): void {\n    if (!this.client.defaults.params) {\n      this.client.defaults.params = {}\n    }\n    ;(this.client.defaults.params as Record<string, unknown>).api_token = apiKey\n  }\n\n  /**\n   * Update the request timeout\n   */\n  setTimeout(timeout: number): void {\n    this.client.defaults.timeout = timeout\n  }\n}\n","import { RateLimit, Subscription } from './common'\n\n/**\n * League types\n */\nexport enum LeagueType {\n  LEAGUE = 'league',\n  CUP = 'cup',\n  SUPER_CUP = 'super_cup',\n  FRIENDLY = 'friendly',\n  DOMESTIC = 'domestic',\n  INTERNATIONAL = 'international',\n  PLAYOFFS = 'playoffs',\n}\n\n/**\n * League sub-types\n */\nexport enum LeagueSubType {\n  TOP_LEVEL = 'top_level',\n  SECOND_LEVEL = 'second_level',\n  THIRD_LEVEL = 'third_level',\n  FOURTH_LEVEL = 'fourth_level',\n  FIFTH_LEVEL = 'fifth_level',\n  PLAYOFF = 'playoff',\n  AMATEUR = 'amateur',\n  YOUTH = 'youth',\n  WOMEN = 'women',\n}\n\n/**\n * Fixture status/state enumeration\n */\nexport enum FixtureStatus {\n  NS = 1, // Not Started\n  LIVE = 2, // Live/In Progress\n  HT = 3, // Half Time\n  FT = 5, // Full Time\n  AET = 6, // After Extra Time\n  FT_PEN = 7, // Full Time after Penalties\n  CANC = 8, // Cancelled\n  POSTP = 9, // Postponed\n  INT = 10, // Interrupted\n  ABAN = 11, // Abandoned\n  SUSP = 12, // Suspended\n  AWARDED = 13, // Awarded\n  DELAYED = 14, // Delayed\n  TBA = 15, // To Be Announced\n  WO = 16, // Walk Over\n  AU = 17, // Awaiting Updates\n  AP = 18, // After Penalties\n}\n\n/**\n * Event types from SportMonks API\n */\nexport enum EventTypeId {\n  VAR = 10,\n  GOAL = 14,\n  OWNGOAL = 15,\n  PENALTY = 16,\n  MISSED_PENALTY = 17,\n  SUBSTITUTION = 18,\n  YELLOWCARD = 19,\n  REDCARD = 20,\n  YELLOWREDCARD = 21,\n  PENALTY_SHOOTOUT_MISS = 22,\n  PENALTY_SHOOTOUT_GOAL = 23,\n  CORNER = 126,\n  OFFSIDE = 568,\n  SHOT_ON_TARGET = 569,\n  SHOT_OFF_TARGET = 570,\n  VAR_CARD = 1697,\n  WOODWORK = 48995,\n}\n\n/**\n * Common fixture statistics type IDs\n */\nexport enum FixtureStatisticTypeId {\n  BALL_POSSESSION = 45,\n  SHOTS_ON_TARGET = 86,\n  SHOTS_TOTAL = 42,\n  SHOTS_OFF_TARGET = 41,\n  CORNERS = 34,\n  OFFSIDES = 51,\n  FOULS = 56,\n  YELLOWCARDS = 84,\n  REDCARDS = 83,\n  PASSES = 80,\n  SUCCESSFUL_PASSES = 81,\n  SUCCESSFUL_PASSES_PERCENTAGE = 82,\n  ATTACKS = 43,\n  DANGEROUS_ATTACKS = 44,\n  GOALS = 52,\n  SAVES = 57,\n  EXPECTED_GOALS = 5304, // xG\n  EXPECTED_GOALS_ON_TARGET = 5305, // xGoT\n}\n\n/**\n * Player position types\n */\nexport enum PositionType {\n  GOALKEEPER = 1,\n  DEFENDER = 2,\n  MIDFIELDER = 3,\n  ATTACKER = 4,\n}\n\n/**\n * Team type\n */\nexport enum TeamType {\n  DOMESTIC = 'domestic',\n  NATIONAL = 'national',\n}\n\n/**\n * Gender types\n */\nexport enum Gender {\n  MALE = 'male',\n  FEMALE = 'female',\n}\n\n/**\n * Lineup types\n */\nexport enum LineupType {\n  LINEUP = 11,\n  BENCH = 12,\n  SIDELINED = 13,\n  MISSING = 14,\n}\n\n/**\n * Transfer types\n */\nexport enum TransferTypeEnum {\n  TRANSFER = 'transfer',\n  LOAN = 'loan',\n  FREE = 'free',\n}\n\n/**\n * Standing rules\n */\nexport enum StandingRule {\n  POINTS = 1,\n  GOAL_DIFFERENCE = 2,\n  HEAD_TO_HEAD = 3,\n  GOALS_FOR = 4,\n  AWAY_GOALS = 5,\n  WINS = 6,\n  DRAWS = 7,\n  LOSSES = 8,\n}\n\n/**\n * Score types\n */\nexport enum ScoreType {\n  CURRENT = 1208,\n  HALFTIME = 1209,\n  NORMALTIME = 1456,\n  EXTRATIME = 1457,\n  PENALTIES = 1458,\n  AGGREGATED = 1713,\n}\n\n/**\n * Venue surface types\n */\nexport enum VenueSurface {\n  GRASS = 'grass',\n  ARTIFICIAL = 'artificial',\n  HYBRID = 'hybrid',\n  ASTROTURF = 'astroturf',\n  CONCRETE = 'concrete',\n  GRAVEL = 'gravel',\n}\n\n/**\n * Sort order\n */\nexport enum SortOrder {\n  ASC = 'asc',\n  DESC = 'desc',\n}\n\n/**\n * Player statistic detail types\n */\nexport enum PlayerStatisticType {\n  MINUTES_PLAYED = 90,\n  GOALS = 208,\n  ASSISTS = 209,\n  OFFSIDES = 210,\n  SHOTS_TOTAL = 211,\n  SHOTS_ON_TARGET = 217,\n  GOALS_CONCEDED = 220,\n  PENALTIES = 215,\n  PENALTIES_SCORED = 216,\n  PENALTIES_MISSED = 218,\n  PENALTIES_SAVED = 223,\n  SAVES = 214,\n  YELLOWCARDS = 212,\n  REDCARDS = 213,\n  HIT_WOODWORK = 602,\n  PASSES = 595,\n  PASSES_ACCURATE = 596,\n  CLEANSHEETS = 597,\n  TACKLES = 598,\n  FOULS_COMMITTED = 594,\n}\n\n/**\n * Response metadata interfaces\n */\nexport interface ResponseMetadata {\n  rate_limit?: RateLimit\n  subscription?: Subscription\n  plan?: {\n    name: string\n    features: string[]\n    request_limit: number\n    sport: string\n  }\n}\n\n/**\n * Error response structure\n */\nexport interface ErrorResponse {\n  message: string\n  error?: {\n    code: number\n    message: string\n  }\n  errors?: Record<string, string[]>\n}\n","/**\n * SportMonks API Syntax Types and Utilities\n *\n * This module provides type definitions and utilities for working with\n * SportMonks' specific query syntax.\n */\n\n/**\n * SportMonks Include Syntax\n *\n * Examples:\n * - Simple include: \"lineups\"\n * - Field selection: \"lineups:player_name\"\n * - Multiple fields: \"events:player_name,related_player_name,minute\"\n * - Multiple includes: \"lineups;events;participants\"\n * - Nested includes: \"league.country\"\n * - Combined: \"lineups:player_name;events:player_name,minute;participants\"\n */\nexport type SportMonksInclude = string\n\n/**\n * SportMonks Filter Syntax\n *\n * Examples:\n * - Single filter: \"eventTypes:15\"\n * - Multiple values: \"eventTypes:15,16,17\"\n * - Multiple filters: \"eventTypes:15;position:1\"\n */\nexport type SportMonksFilter = string\n\n/**\n * Include configuration for a relation\n */\nexport interface IncludeConfig {\n  /**\n   * Fields to select from the relation\n   * If true, includes all fields\n   * If array, includes only specified fields\n   */\n  fields?: string[] | boolean\n\n  /**\n   * Nested includes for this relation\n   */\n  nested?: Record<string, IncludeConfig>\n}\n\n/**\n * SportMonks query syntax configuration\n */\nexport interface SportMonksSyntax {\n  /**\n   * Include configuration\n   * @example\n   * {\n   *   lineups: { fields: ['player_name', 'jersey_number'] },\n   *   events: { fields: ['player_name', 'minute'] },\n   *   league: {\n   *     fields: true,\n   *     nested: { country: { fields: ['name', 'iso2'] } }\n   *   }\n   * }\n   */\n  includes?: Record<string, IncludeConfig | boolean>\n\n  /**\n   * Filter configuration\n   * @example\n   * {\n   *   eventTypes: [15, 16, 17],\n   *   position: 1\n   * }\n   */\n  filters?: Record<string, string | number | boolean | (string | number)[]>\n\n  /**\n   * Fields to select on the base entity\n   * @example ['id', 'name', 'country_id']\n   */\n  select?: string[]\n}\n\n/**\n * Helper to build SportMonks include syntax\n */\nexport class SportMonksSyntaxBuilder {\n  /**\n   * Build include string from configuration\n   */\n  static buildIncludes(config: Record<string, IncludeConfig | boolean>, separator = ';'): string {\n    const includes: string[] = []\n\n    Object.entries(config).forEach(([relation, settings]) => {\n      if (settings === true) {\n        includes.push(relation)\n      } else if (settings && typeof settings === 'object') {\n        let includeStr = relation\n\n        // Add field selection\n        if (Array.isArray(settings.fields) && settings.fields.length > 0) {\n          includeStr += ':' + settings.fields.join(',')\n        }\n\n        includes.push(includeStr)\n\n        // Handle nested includes\n        if (settings.nested) {\n          Object.entries(settings.nested).forEach(([nestedRelation, nestedSettings]) => {\n            let nestedStr = `${relation}.${nestedRelation}`\n            if (\n              nestedSettings &&\n              typeof nestedSettings === 'object' &&\n              Array.isArray(nestedSettings.fields)\n            ) {\n              nestedStr += ':' + nestedSettings.fields.join(',')\n            }\n            includes.push(nestedStr)\n          })\n        }\n      }\n    })\n\n    return includes.join(separator)\n  }\n\n  /**\n   * Build filter string from configuration\n   */\n  static buildFilters(filters: Record<string, string | number | boolean | (string | number)[]>): string {\n    return Object.entries(filters)\n      .map(([key, value]) => {\n        const filterValue = Array.isArray(value) ? value.join(',') : String(value)\n        return `${key}:${filterValue}`\n      })\n      .join(';')\n  }\n}\n\n/**\n * Common SportMonks filter types\n */\nexport const SportMonksFilters = {\n  /**\n   * Event type filters\n   */\n  EventTypes: {\n    GOAL: 14,\n    OWN_GOAL: 15,\n    PENALTY: 16,\n    MISSED_PENALTY: 17,\n    YELLOW_CARD: 19,\n    RED_CARD: 20,\n    SUBSTITUTION: 18,\n    VAR: 10,\n  },\n\n  /**\n   * Fixture status filters\n   */\n  Status: {\n    NOT_STARTED: 'NS',\n    LIVE: 'LIVE',\n    HALF_TIME: 'HT',\n    FULL_TIME: 'FT',\n    FINISHED: 'FT',\n    CANCELLED: 'CANCL',\n    POSTPONED: 'POSTP',\n  },\n} as const\n","import { PaginatedResponse } from '../types'\n\n/**\n * Options for polling configuration\n */\nexport interface PollingOptions {\n  /** Interval between polls in milliseconds */\n  interval: number\n  /** Maximum duration to poll in milliseconds */\n  maxDuration?: number\n  /** Callback when new data is received */\n  onData?: (data: unknown) => void\n  /** Callback when an error occurs */\n  onError?: (error: Error) => void\n  /** Whether to stop on error */\n  stopOnError?: boolean\n  /** Compare function to detect changes */\n  compareFunction?: (oldData: unknown, newData: unknown) => boolean\n}\n\n/**\n * Polling utility for real-time data updates\n */\nexport class Poller<T> {\n  private intervalId?: ReturnType<typeof setInterval>\n  private startTime?: number\n  private lastData?: T\n  private isPolling = false\n\n  constructor(\n    private fetchFunction: () => Promise<T>,\n    private options: PollingOptions,\n  ) {}\n\n  /**\n   * Start polling\n   */\n  start(): void {\n    if (this.isPolling) {\n      throw new Error('Polling is already active')\n    }\n\n    this.isPolling = true\n    this.startTime = Date.now()\n\n    // Fetch immediately\n    void this.fetch()\n\n    // Set up interval\n    this.intervalId = setInterval(() => {\n      // Check max duration\n      if (this.options.maxDuration && this.startTime) {\n        const elapsed = Date.now() - this.startTime\n        if (elapsed >= this.options.maxDuration) {\n          this.stop()\n          return\n        }\n      }\n\n      void this.fetch()\n    }, this.options.interval)\n  }\n\n  /**\n   * Stop polling\n   */\n  stop(): void {\n    if (this.intervalId) {\n      clearInterval(this.intervalId)\n      this.intervalId = undefined\n    }\n    this.isPolling = false\n  }\n\n  /**\n   * Check if currently polling\n   */\n  isActive(): boolean {\n    return this.isPolling\n  }\n\n  /**\n   * Fetch data and handle callbacks\n   */\n  private async fetch(): Promise<void> {\n    try {\n      const data = await this.fetchFunction()\n\n      // Check if data has changed\n      const hasChanged = this.hasDataChanged(data)\n\n      if (hasChanged && this.options.onData) {\n        this.options.onData(data)\n      }\n\n      this.lastData = data\n    } catch (error) {\n      if (this.options.onError) {\n        this.options.onError(error as Error)\n      }\n\n      if (this.options.stopOnError) {\n        this.stop()\n      }\n    }\n  }\n\n  /**\n   * Check if data has changed\n   */\n  private hasDataChanged(newData: T): boolean {\n    if (!this.lastData) {\n      return true\n    }\n\n    if (this.options.compareFunction) {\n      return this.options.compareFunction(this.lastData, newData)\n    }\n\n    // Default comparison for paginated responses\n    if (this.isPaginatedResponse(newData) && this.isPaginatedResponse(this.lastData)) {\n      // Compare by IDs\n      const oldIds = new Set(this.lastData.data.map((item: unknown) => (item as { id: number }).id))\n      const newIds = new Set(newData.data.map((item: unknown) => (item as { id: number }).id))\n\n      // Check if any new items\n      for (const id of newIds) {\n        if (!oldIds.has(id)) {\n          return true\n        }\n      }\n\n      // Check if any items removed\n      for (const id of oldIds) {\n        if (!newIds.has(id)) {\n          return true\n        }\n      }\n\n      return false\n    }\n\n    // Simple JSON comparison for other types\n    return JSON.stringify(this.lastData) !== JSON.stringify(newData)\n  }\n\n  /**\n   * Type guard for paginated response\n   */\n  private isPaginatedResponse(data: unknown): data is PaginatedResponse<unknown> {\n    return !!(\n      data &&\n      typeof data === 'object' &&\n      'data' in data &&\n      Array.isArray((data as { data: unknown }).data) &&\n      'pagination' in data\n    )\n  }\n}\n\n/**\n * Create a poller for livescores\n */\nexport function createLivescoresPoller(\n  fetchFunction: () => Promise<PaginatedResponse<unknown>>,\n  options: Partial<PollingOptions> = {},\n): Poller<PaginatedResponse<unknown>> {\n  const defaultOptions: PollingOptions = {\n    interval: 10000, // 10 seconds\n    maxDuration: 3600000, // 1 hour\n    stopOnError: false,\n    ...options,\n  }\n\n  return new Poller(fetchFunction, defaultOptions)\n}\n\n/**\n * Create a poller for transfer news\n */\nexport function createTransfersPoller(\n  fetchFunction: () => Promise<PaginatedResponse<unknown>>,\n  options: Partial<PollingOptions> = {},\n): Poller<PaginatedResponse<unknown>> {\n  const defaultOptions: PollingOptions = {\n    interval: 60000, // 1 minute\n    maxDuration: 86400000, // 24 hours\n    stopOnError: false,\n    compareFunction: (oldData: unknown, newData: unknown) => {\n      // For transfers, compare by latest transfer date\n      const oldPaginated = oldData as PaginatedResponse<{ date: string }>\n      const newPaginated = newData as PaginatedResponse<{ date: string }>\n      \n      if (!oldPaginated.data.length || !newPaginated.data.length) {\n        return true\n      }\n\n      const oldLatest = oldPaginated.data\n        .map((t) => new Date(t.date).getTime())\n        .sort((a: number, b: number) => b - a)[0]\n\n      const newLatest = newPaginated.data\n        .map((t) => new Date(t.date).getTime())\n        .sort((a: number, b: number) => b - a)[0]\n\n      return newLatest > oldLatest\n    },\n    ...options,\n  }\n\n  return new Poller(fetchFunction, defaultOptions)\n}\n","/**\n * Type helper utilities for working with SportMonks API responses\n */\n\nimport type {\n  League,\n  Team,\n  Player,\n  Fixture,\n  Venue,\n  SingleResponse,\n  PaginatedResponse,\n} from '../types'\n\n/**\n * Extract the data type from a response\n * @example\n * type TeamData = ExtractData<SingleResponse<Team>>; // Team\n * type TeamsData = ExtractData<PaginatedResponse<Team>>; // Team[]\n */\nexport type ExtractData<T> =\n  T extends SingleResponse<infer U> ? U : T extends PaginatedResponse<infer U> ? U[] : never\n\n/**\n * Make certain properties required when using includes\n * @example\n * // When including country, make it required in the type\n * type TeamWithCountry = WithRequired<Team, 'country'>;\n */\nexport type WithRequired<T, K extends keyof T> = T & Required<Pick<T, K>>\n\n/**\n * Common include combinations as type helpers\n */\nexport type LeagueWithCountry = WithRequired<League, 'country'>\nexport type LeagueWithSeasons = WithRequired<League, 'seasons'>\nexport type LeagueWithCountryAndSeasons = WithRequired<League, 'country' | 'seasons'>\n\nexport type TeamWithCountry = WithRequired<Team, 'country'>\nexport type TeamWithVenue = WithRequired<Team, 'venue'>\nexport type TeamWithCoach = WithRequired<Team, 'coach'>\nexport type TeamWithAll = WithRequired<Team, 'country' | 'venue' | 'coach'>\n\nexport type PlayerWithCountry = WithRequired<Player, 'country'>\nexport type PlayerWithNationality = WithRequired<Player, 'nationality'>\n\nexport type FixtureWithTeams = WithRequired<Fixture, 'localteam' | 'visitorteam'>\nexport type FixtureWithLeague = WithRequired<Fixture, 'league'>\nexport type FixtureWithVenue = WithRequired<Fixture, 'venue'>\nexport type FixtureWithEvents = WithRequired<Fixture, 'events'>\nexport type FixtureWithLineups = WithRequired<Fixture, 'lineups'>\n\n/**\n * Type guard to check if a property exists\n * @example\n * if (hasInclude(team, 'country')) {\n *   // TypeScript now knows team.country is defined\n *   console.log(team.country.name);\n * }\n */\nexport function hasInclude<T, K extends keyof T>(obj: T, key: K): obj is T & Required<Pick<T, K>> {\n  return obj[key] !== undefined && obj[key] !== null\n}\n\n/**\n * Type guard for response with data\n * @example\n * const response = await client.teams.byId(1).get();\n * if (hasData(response)) {\n *   // TypeScript knows response.data exists\n * }\n */\nexport function hasData<T>(response: unknown): response is { data: T } {\n  return (\n    response !== null &&\n    typeof response === 'object' &&\n    'data' in response &&\n    (response as { data?: unknown }).data !== undefined\n  )\n}\n\n/**\n * Type guard for paginated response\n */\nexport function isPaginatedResponse<T>(response: unknown): response is PaginatedResponse<T> {\n  return hasData(response) && Array.isArray((response as { data: unknown }).data)\n}\n\n/**\n * Type guard for single response\n */\nexport function isSingleResponse<T>(response: unknown): response is SingleResponse<T> {\n  return hasData(response) && !Array.isArray((response as { data: unknown }).data)\n}\n\n/**\n * Safely access nested includes\n * @example\n * const countryName = getNestedInclude(team, 'country', 'name');\n */\nexport function getNestedInclude<T, K extends keyof T>(\n  obj: T,\n  include: K,\n  property?: keyof NonNullable<T[K]>,\n): T[K] | undefined {\n  const included = obj[include]\n  if (!included) return undefined\n\n  if (property && typeof included === 'object' && included !== null) {\n    return (included as Record<string, unknown>)[property as string] as T[K]\n  }\n\n  return included\n}\n\n/**\n * Sort helpers with type safety\n */\nexport function sortByName<T extends { name: string }>(a: T, b: T): number {\n  return a.name.localeCompare(b.name)\n}\n\nexport function sortByCapacity(a: Venue, b: Venue): number {\n  return (b.capacity || 0) - (a.capacity || 0)\n}\n\n/**\n * Response transformer types\n */\nexport type ResponseTransformer<TIn, TOut> = (response: TIn) => TOut\n\n/**\n * Create a typed response transformer\n * @example\n * const toTeamNames = createTransformer<PaginatedResponse<Team>, string[]>(\n *   response => response.data.map(team => team.name)\n * );\n */\nexport function createTransformer<TIn, TOut>(\n  fn: ResponseTransformer<TIn, TOut>,\n): ResponseTransformer<TIn, TOut> {\n  return fn\n}\n"]}