nhle-api 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/gamecenter/index.ts","../src/api/gamecenter/draft.ts","../src/config/env.ts","../src/errors/index.ts","../src/client/types.ts","../src/client/index.ts","../src/utils/date.ts","../src/constants/edge-adv.ts","../src/constants/edge-stats.ts","../src/constants/nhl.ts","../src/constants/index.ts","../src/utils/schemas.ts","../src/utils/utils.ts","../src/api/gamecenter/game.ts","../src/api/gamecenter/misc.ts","../src/api/gamecenter/player.ts","../src/api/gamecenter/score.ts","../src/api/gamecenter/team.ts"],"names":["type","route","_paths","landing","schedule"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * NHL API Endpoints\n * This file re-exports all the API endpoint functions\n */\nexport * as draft from './draft.ts';\nexport * as game from './game.ts';\nexport * as misc from './misc.ts';\nexport * as player from './player.ts';\nexport * from './score.ts';\nexport * as team from './team.ts';\n","/**\n * Draft-related API endpoints\n */\n\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n DraftPicks,\n DraftRankings,\n DraftRound,\n DraftTracker,\n Year,\n} from '#/types/index.ts';\nimport { getCurrentYear } from '#/utils/date.ts';\nimport {\n DraftParams,\n isParseError,\n Year as YearType,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\n\nconst _paths = {\n draftPicks: {\n byYearAndRound: 'draft/picks/{year}/{round}',\n byYear: 'draft/picks/{year}/all',\n },\n draftRankings: 'draft/rankings/{year}/{type}',\n draftTracker: 'draft-tracker/picks/now',\n};\n\nconst DraftRankingsEnum = {\n skatersNA: '1',\n skatersIntl: '2',\n goaliesNA: '3',\n goaliesIntl: '4',\n} as const;\n\n/**\n * Get draft picks for a specific year and round\n * @param year - The draft year\n * @param round - The draft round\n * @returns Promise resolving to draft picks for the specified year and round\n */\nexport const picks = (\n year?: Year,\n round?: DraftRound,\n): Promise<APIResponse<DraftPicks>> => {\n const parsed = DraftParams({ year, round });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.draftPicks.byYearAndRound,\n }),\n });\n }\n if (parsed.year && !parsed.round)\n return nhlClient.get(route(_paths.draftPicks.byYear, parsed));\n\n return nhlClient.get(route(_paths.draftPicks.byYearAndRound, parsed));\n};\n\n/**\n * Get current draft tracker information\n * @returns Promise resolving to current draft tracker data\n */\nexport const tracker = (): Promise<APIResponse<DraftTracker>> =>\n nhlClient.get(_paths.draftTracker);\n\n/**\n * Access draft rankings related endpoints\n */\nexport const rankings = (year?: Year) => {\n const getRankings = (\n type: '1' | '2' | '3' | '4',\n ): Promise<APIResponse<DraftRankings>> => {\n const parsedYear = YearType(year ?? getCurrentYear());\n if (isParseError(parsedYear)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedYear.summary, {\n endpoint: _paths.draftRankings,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.draftRankings, {\n year: parsedYear,\n type,\n }),\n );\n };\n\n return {\n skatersNA: (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.skatersNA),\n skatersIntl: (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.skatersIntl),\n goaliesNA: (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.goaliesNA),\n goaliesIntl: (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.goaliesIntl),\n all: (): Promise<APIResponse<DraftRankings>[]> =>\n Promise.all([\n getRankings(DraftRankingsEnum.skatersNA),\n getRankings(DraftRankingsEnum.skatersIntl),\n getRankings(DraftRankingsEnum.goaliesNA),\n getRankings(DraftRankingsEnum.goaliesIntl),\n ]),\n };\n};\n","/**\n * Environment Variable Configuration\n * Simple configuration system for NHL API client based on environment variables\n *\n * Supported environment variables:\n * - NHLE_API_TIMEOUT: Request timeout in milliseconds (default: 5000)\n * - NHLE_API_LANGUAGE: Language code 'en' or 'fr' (default: 'en')\n * - NHLE_API_LOGLEVEL: Logging level 'silent', 'error', 'warn', 'info', 'debug' (default: 'warn')\n *\n * @example\n * // In .env or shell\n * NHLE_API_TIMEOUT=10000\n * NHLE_API_LANGUAGE=fr\n * NHLE_API_LOGLEVEL=debug\n *\n * @module config/env\n */\n\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';\n\n/**\n * Parse timeout from environment variable\n * @internal\n */\nfunction parseTimeout(): number {\n const timeout = process.env.NHLE_API_TIMEOUT;\n if (!timeout) return 5000;\n\n const parsed = parseInt(timeout, 10);\n if (Number.isNaN(parsed) || parsed <= 0) {\n console.warn(\n `Invalid NHLE_API_TIMEOUT: \"${timeout}\". Using default 5000ms`,\n );\n return 5000;\n }\n return parsed;\n}\n\n/**\n * Parse language from environment variable\n * @internal\n */\nfunction parseLanguage(): 'en' | 'fr' {\n const language = process.env.NHLE_API_LANGUAGE?.toLowerCase();\n if (language === 'fr') return 'fr';\n if (language && language !== 'en') {\n console.warn(\n `Invalid NHLE_API_LANGUAGE: \"${language}\". Using default 'en'`,\n );\n }\n return 'en';\n}\n\n/**\n * Parse log level from environment variable\n * @internal\n */\nfunction parseLogLevel(): LogLevel {\n const logLevel = process.env.NHLE_API_LOGLEVEL?.toLowerCase();\n const validLevels: LogLevel[] = [\n 'silent',\n 'error',\n 'warn',\n 'info',\n 'debug',\n ];\n\n if (!logLevel) return 'warn';\n if (validLevels.includes(logLevel as LogLevel)) {\n return logLevel as LogLevel;\n }\n\n console.warn(\n `Invalid NHLE_API_LOGLEVEL: \"${logLevel}\". Valid options: ${validLevels.join(', ')}. Using default 'warn'`,\n );\n return 'warn';\n}\n\n/**\n * Environment-based configuration for NHL API client\n * Reads from process.env at initialization time\n */\nexport const envConfig = {\n /**\n * Request timeout in milliseconds\n * Set via NHLE_API_TIMEOUT environment variable\n * @default 5000\n */\n timeout: parseTimeout(),\n\n /**\n * Language code for API responses\n * Set via NHLE_API_LANGUAGE environment variable\n * @default 'en'\n */\n language: parseLanguage() as 'en' | 'fr',\n\n /**\n * Logging level for the client\n * Set via NHLE_API_LOGLEVEL environment variable\n * @default 'warn'\n */\n logLevel: parseLogLevel(),\n};\n\n/**\n * Log current environment configuration (useful for debugging)\n * Only logs if environment variables are explicitly set\n */\nexport function logEnvConfig(): void {\n const vars = {\n timeout: process.env.NHLE_API_TIMEOUT,\n language: process.env.NHLE_API_LANGUAGE,\n logLevel: process.env.NHLE_API_LOGLEVEL,\n };\n\n const configured = Object.entries(vars).filter(\n ([, v]) => v !== undefined,\n );\n if (configured.length > 0) {\n console.debug('NHL API Environment Configuration:', {\n ...Object.fromEntries(configured),\n resolvedTimeout: envConfig.timeout,\n resolvedLanguage: envConfig.language,\n resolvedLogLevel: envConfig.logLevel,\n });\n }\n}\n","/**\n * Error handling module for NHL Sports Data API wrapper\n * Provides structured error classification and logging for API interactions\n */\n\nexport const ErrorCategory = {\n /** Network-level errors (connection refused, timeout, etc.) */\n NETWORK: 'NETWORK',\n\n /** HTTP 4xx client errors (invalid params, not found, etc.) */\n CLIENT: 'CLIENT',\n\n /** HTTP 5xx server errors */\n SERVER: 'SERVER',\n\n /** Rate limiting (HTTP 429) */\n RATE_LIMIT: 'RATE_LIMIT',\n\n /** Valid HTTP response but with error payload */\n API_ERROR: 'API_ERROR',\n\n /** Response parsing/validation failures */\n PARSE: 'PARSE',\n\n /** Invalid user input or configuration */\n VALIDATION: 'VALIDATION',\n} as const;\n\nexport type ErrorCategory =\n (typeof ErrorCategory)[keyof typeof ErrorCategory];\n\nexport const LogLevel = {\n NONE: 0,\n ERROR: 1,\n WARN: 2,\n INFO: 3,\n DEBUG: 4,\n};\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface ErrorContext {\n /** HTTP status code if applicable */\n statusCode?: number;\n\n /** Original error object */\n cause?: unknown;\n\n /** Request URL or endpoint */\n endpoint?: string;\n\n /** Request method */\n method?: string;\n\n /** Request parameters */\n params?: Record<string, unknown>;\n\n /** Response body if available */\n responseBody?: unknown;\n\n /** Timestamp of error */\n timestamp?: Date;\n\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ErrorConfig {\n /** Logging level for error output */\n logLevel?: LogLevel;\n\n /** Custom logger function */\n logger?: (\n level: LogLevel,\n message: string,\n context?: ErrorContext,\n ) => void;\n\n /** Whether to include stack traces */\n includeStack?: boolean;\n}\n\n/**\n * Base error class for all NHL API errors\n */\nexport class NHLError extends Error {\n public readonly category: ErrorCategory;\n public readonly context: ErrorContext;\n\n constructor(\n message: string,\n category: ErrorCategory,\n context: ErrorContext = {},\n ) {\n super(message);\n this.name = this.constructor.name;\n this.category = category;\n this.context = {\n ...context,\n timestamp: context.timestamp || new Date(),\n };\n\n // Maintain proper stack trace\n Error.captureStackTrace?.(this, this.constructor);\n }\n\n /**\n * Serialize error to JSON\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n category: this.category,\n context: this.context,\n ...(this.stack && { stack: this.stack }),\n };\n }\n}\n\n/**\n * Network-level errors (timeouts, connection failures)\n */\nexport class NetworkError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.NETWORK, context);\n }\n}\n\n/**\n * HTTP 4xx client errors\n */\nexport class ClientError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.CLIENT, context);\n }\n}\n\n/**\n * HTTP 404 resource not found\n */\nexport class NotFoundError extends ClientError {\n constructor(\n message: string = 'Resource not found',\n context: ErrorContext = {},\n ) {\n super(message, { ...context, statusCode: context.statusCode || 404 });\n }\n}\n\n/**\n * HTTP 5xx server errors\n */\nexport class ServerError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.SERVER, context);\n }\n}\n\n/**\n * HTTP 429 rate limit errors\n */\nexport class RateLimitError extends NHLError {\n public readonly retryAfter?: number;\n\n constructor(\n message: string = 'Rate limit exceeded',\n context: ErrorContext = {},\n retryAfter?: number,\n ) {\n super(message, ErrorCategory.RATE_LIMIT, {\n ...context,\n statusCode: context.statusCode || 429,\n });\n this.retryAfter = retryAfter || 0;\n }\n}\n\n/**\n * API returned 200 but with error message in JSON payload\n */\nexport class APIError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.API_ERROR, context);\n }\n}\n\n/**\n * Response parsing or validation failures\n */\nexport class ParseError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.PARSE, context);\n }\n}\n\n/**\n * Invalid user input or configuration\n */\nexport class ValidationError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.VALIDATION, context);\n }\n}\n\n/**\n * Error handler utility class\n */\nexport class ErrorHandler {\n private config: Required<ErrorConfig>;\n\n constructor(config: ErrorConfig = {}) {\n this.config = {\n logLevel: config.logLevel ?? LogLevel.ERROR,\n logger: config.logger ?? this.defaultLogger.bind(this),\n includeStack: config.includeStack ?? true,\n };\n }\n\n /**\n * Default console-based logger\n */\n private defaultLogger(\n level: LogLevel,\n message: string,\n context?: ErrorContext,\n ): void {\n if (level > this.config.logLevel) return;\n\n const logFn =\n level === LogLevel.ERROR\n ? console.error\n : level === LogLevel.WARN\n ? console.warn\n : console.log;\n\n logFn(`[NHL API] ${message}`, context);\n }\n\n /**\n * Log an error based on configuration\n */\n log(error: NHLError): void {\n const level = this.getLogLevel(error.category);\n const context = this.config.includeStack\n ? { ...error.context, stack: error.stack }\n : error.context;\n\n this.config.logger(level, error.message, context);\n }\n\n /**\n * Determine log level based on error category\n */\n private getLogLevel(category: ErrorCategory): LogLevel {\n switch (category) {\n case ErrorCategory.NETWORK:\n case ErrorCategory.SERVER:\n return LogLevel.ERROR;\n case ErrorCategory.RATE_LIMIT:\n return LogLevel.WARN;\n case ErrorCategory.CLIENT:\n case ErrorCategory.API_ERROR:\n return LogLevel.INFO;\n case ErrorCategory.PARSE:\n case ErrorCategory.VALIDATION:\n return LogLevel.DEBUG;\n default:\n return LogLevel.ERROR;\n }\n }\n\n /**\n * Create error from HTTP response\n */\n async fromResponse(\n response: Response,\n context: Omit<ErrorContext, 'statusCode'> = {},\n ): Promise<NHLError> {\n const statusCode = response.status;\n const baseContext: ErrorContext = {\n ...context,\n statusCode,\n endpoint: context.endpoint || response.url,\n };\n\n // Try to parse response body\n let responseBody: unknown;\n try {\n const text = await response.text();\n responseBody = text ? JSON.parse(text) : null;\n baseContext.responseBody = responseBody;\n } catch {\n // Response body not parseable as JSON\n }\n\n // Extract error message from JSON response if available\n const errorMessage =\n responseBody &&\n typeof responseBody === 'object' &&\n 'message' in responseBody\n ? String(responseBody.message)\n : `HTTP ${statusCode}: ${response.statusText}`;\n\n // Classify by status code\n if (statusCode === 429) {\n const retryAfter = response.headers.get('Retry-After');\n return new RateLimitError(\n errorMessage,\n baseContext,\n retryAfter ? parseInt(retryAfter, 10) : undefined,\n );\n }\n\n if (statusCode === 404) {\n return new NotFoundError(errorMessage, baseContext);\n }\n\n if (statusCode >= 500) {\n return new ServerError(errorMessage, baseContext);\n }\n\n if (statusCode >= 400) {\n return new ClientError(errorMessage, baseContext);\n }\n\n // 200-level response with error in JSON body\n if (\n responseBody &&\n typeof responseBody === 'object' &&\n 'message' in responseBody\n ) {\n return new APIError(errorMessage, baseContext);\n }\n\n // Fallback\n return new NHLError(errorMessage, ErrorCategory.CLIENT, baseContext);\n }\n\n /**\n * Create error from caught exception\n */\n fromError(error: unknown, context: ErrorContext = {}): NHLError {\n if (error instanceof NHLError) {\n return error;\n }\n\n if (error instanceof Error) {\n // Network/fetch errors\n if (error.name === 'TypeError' || error.name === 'NetworkError') {\n return new NetworkError(error.message, {\n ...context,\n cause: error,\n });\n }\n\n // Generic error wrapper\n return new NHLError(error.message, ErrorCategory.NETWORK, {\n ...context,\n cause: error,\n });\n }\n\n // Unknown error type\n return new NHLError(\n 'An unknown error occurred',\n ErrorCategory.NETWORK,\n { ...context, cause: error },\n );\n }\n\n /**\n * Update configuration\n */\n configure(config: Partial<ErrorConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n\n/**\n * Default error handler instance\n */\nexport const defaultErrorHandler = new ErrorHandler();\n\n/**\n * Convenience function to create errors from responses\n */\nexport const fromResponse = (\n response: Response,\n context?: Omit<ErrorContext, 'statusCode'>,\n) => defaultErrorHandler.fromResponse(response, context);\n\n/**\n * Convenience function to create errors from exceptions\n */\nexport const fromError = (error: unknown, context?: ErrorContext) =>\n defaultErrorHandler.fromError(error, context);\n","/**\r\n * NHL API Client Type Definitions\r\n */\r\n\r\nimport type { NHLError } from '#/errors/index.ts';\r\n/**\r\n * Configuration options for the NHL API client\r\n */\r\nexport interface NHLClientConfig {\r\n /**\r\n * Base URL for the NHL API\r\n * @default 'https://api-web.nhle.com/v1'\r\n */\r\n baseUrl?: string;\r\n\r\n /**\r\n * Request timeout in milliseconds\r\n * @default 5000 (5 seconds)\r\n */\r\n timeout?: number;\r\n\r\n /**\r\n * Additional headers to include with every request\r\n */\r\n headers?: Record<string, string>;\r\n\r\n /**\r\n * Language code for localized responses\r\n * @default 'en' (English)\r\n */\r\n language?: 'en' | 'fr';\r\n}\r\n\r\n/**\r\n * Predefined API endpoints for different NHL services\r\n */\r\nexport type APIEndpoint = 'edge-adv' | 'edge-stats' | 'default';\r\n\r\n/**\r\n * Mapping of API endpoints to their base URLs\r\n */\r\nexport const API_BASE_URLS: Record<APIEndpoint, string> = {\r\n 'edge-adv': 'https://api-web.nhle.com/v1',\r\n 'edge-stats': 'https://api.nhle.com/stats/rest',\r\n default: 'https://api-web.nhle.com/v1',\r\n};\r\n\r\nexport interface NHLApiResponse<T> {\r\n data: T;\r\n status: number;\r\n statusText: string;\r\n headers: Record<string, string>;\r\n}\r\n\r\nexport type APIResponse<T> =\r\n | { status: 'success'; data: T }\r\n | { status: 'error'; error: NHLError };\r\n\r\n/**\r\n * NHL API error response structure\r\n * @deprecated Use NHLError class instead\r\n */\r\nexport interface NHLApiError {\r\n error: string;\r\n status: number;\r\n statusText: string;\r\n headers: Record<string, string>;\r\n}\r\n\r\n/**\r\n * NHL API client interface\r\n */\r\nexport interface NHLClient {\r\n /**\r\n * Send a GET request to the NHL API\r\n * @param endpoint - API endpoint path (will be appended to baseUrl)\r\n * @param params - Optional query parameters\r\n */\r\n get: <T = unknown>(\r\n endpoint: string,\r\n params?: Record<string, unknown>,\r\n ) => Promise<T>;\r\n}\r\n","/**\n * NHL API Client implementation\n * Internal client for making API requests to the NHL API\n */\n\nimport { envConfig } from '#/config/env.ts';\nimport {\n ErrorCategory,\n type ErrorConfig,\n ErrorHandler,\n NHLError,\n} from '#/errors/index.ts';\nimport type { APIEndpoint, APIResponse, NHLClientConfig } from './types.ts';\nimport { API_BASE_URLS } from './types.ts';\n\n/**\n * Extended configuration for the NHL API client including error handling\n */\nexport interface NHLClientWithErrorConfig extends NHLClientConfig {\n /**\n * Error handling configuration\n */\n errorConfig?: ErrorConfig;\n}\n\n/**\n * Default configuration for the NHL API client\n * Uses environment variables if set, otherwise falls back to sensible defaults\n */\nconst DEFAULT_CONFIG: Required<NHLClientConfig> = {\n baseUrl: 'https://api-web.nhle.com/v1',\n timeout: envConfig.timeout,\n headers: {\n Accept: 'application/json',\n },\n language: envConfig.language,\n};\n\n/**\n * NHL API Client class for making API requests to the NHL API\n * Provides methods for sending GET requests to the NHL API with automatic\n * URL construction, query parameter handling, timeout management, and\n * comprehensive error handling using the ErrorHandler utility.\n */\nexport class NHLClient {\n private config: Required<NHLClientConfig>;\n private errorHandler: ErrorHandler;\n\n /**\n * Creates a new NHL API client instance\n * @param baseURL - Optional custom base URL or predefined API endpoint key\n * @param errorConfig - Optional error handling configuration\n */\n constructor(baseURL?: string | APIEndpoint, errorConfig?: ErrorConfig) {\n this.config = { ...DEFAULT_CONFIG };\n\n // Check if baseURL is a predefined endpoint key\n if (baseURL && baseURL in API_BASE_URLS) {\n this.config.baseUrl = API_BASE_URLS[baseURL as APIEndpoint];\n } else if (baseURL) {\n this.config.baseUrl = baseURL;\n }\n\n // Initialize error handler with provided config\n this.errorHandler = new ErrorHandler(errorConfig);\n }\n\n /**\n * Helper to build URL with query parameters\n * @private\n */\n private buildUrl(\n endpoint: string,\n params?: Record<string, unknown>,\n ): string {\n // Ensure endpoint doesn't have leading slash for URL construction\n const cleanEndpoint = endpoint.startsWith('/')\n ? endpoint.slice(1)\n : endpoint;\n const url = new URL(cleanEndpoint, `${this.config.baseUrl}/`);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n return url.toString();\n }\n\n /**\n * Send a GET request to the NHL API\n * @param endpoint - API endpoint path\n * @param params - Optional query parameters\n * @returns Promise resolving to an APIResponse containing either data or error\n */\n async get<T = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n ): Promise<APIResponse<T>> {\n const url = this.buildUrl(endpoint, params);\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.config.timeout,\n );\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.config.headers,\n 'Accept-Language': this.config.language,\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = await this.errorHandler.fromResponse(response, {\n endpoint: url,\n });\n this.errorHandler.log(error);\n return { status: 'error', error };\n }\n\n return { data: (await response.json()) as T, status: 'success' };\n } catch (error) {\n clearTimeout(timeoutId);\n\n // If it's already an NHLError, return it\n if (error instanceof NHLError) {\n this.errorHandler.log(error);\n return { status: 'error', error };\n }\n\n // Handle AbortError (timeout)\n let nhlError: NHLError;\n if (error instanceof Error && error.name === 'AbortError') {\n nhlError = new NHLError(\n 'Request timeout',\n ErrorCategory.CLIENT,\n {\n endpoint,\n },\n );\n } else {\n // Convert other errors using ErrorHandler\n nhlError = this.errorHandler.fromError(error, {\n endpoint,\n method: 'GET',\n });\n }\n\n this.errorHandler.log(nhlError);\n return { status: 'error', error: nhlError };\n }\n }\n\n /**\n * Configure error handling behavior\n * @param config - Error configuration options\n */\n configureErrorHandling(config: Partial<ErrorConfig>): void {\n this.errorHandler.configure(config);\n }\n}\n\n/**\n * Factory function for backward compatibility\n * Creates a new NHL API client instance\n *\n * @param baseURL - Optional custom base URL or predefined API endpoint key\n * @param errorConfig - Optional error handling configuration\n * @returns A new NHL API client instance\n */\nexport function createNHLClient(\n baseURL?: string | APIEndpoint,\n errorConfig?: ErrorConfig,\n): NHLClient {\n return new NHLClient(baseURL, errorConfig);\n}\n\n/**\n * Default client instance for edge-adv API endpoints\n */\nconst nhlClient = createNHLClient('default');\n\n/**\n * Client instance for edge-stats API endpoints\n */\nconst edgeStatsClient = createNHLClient('edge-stats');\n\nexport default nhlClient;\nexport { edgeStatsClient };\n","/**\r\n * Date utility functions for NHL API\r\n * Provides functions for formatting dates and handling seasons\r\n */\r\n\r\nexport const NHL_TIMEZONE = 'America/New_York';\r\nexport const NHL_START_DATE = new Date('1916-12-19'); // 1 year prior to the first NHL game\r\nexport const NHL_END_DATE = new Date('2026-04-17'); // 1 year after the last game of the 2024-2025 season\r\n\r\n/**\r\n * Formats a date object into a string in the format YYYY-MM-DD\r\n * @param date - The date object to format\r\n * @returns The formatted date string\r\n */\r\nexport const getDate = (date: Date): string =>\r\n new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n }).format(date);\r\n/**\r\n * Returns the current date formatted as YYYY-MM-DD.\r\n * This is a convenience method that calls getDate with the current date.\r\n * @returns The current date formatted as YYYY-MM-DD\r\n */\r\nexport const getCurrentDate = (): string => getDate(new Date());\r\n\r\n/**\r\n * Formats a date object into a string representing the month in YYYY-MM format\r\n * @param date - The date object to format\r\n * @returns The formatted month string\r\n */\r\nexport const getMonth = (date: Date): string => {\r\n return new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n month: '2-digit',\r\n }).format(date);\r\n};\r\n\r\n/**\r\n * Returns the current month formatted as YYYY-MM\r\n * This is a convenience method that calls getMonth with the current date\r\n * @returns The current month formatted as YYYY-MM\r\n */\r\nexport const getCurrentMonth = (): string => getMonth(new Date());\r\n\r\n/**\r\n * Formats a date object into a string representing the year in YYYY format\r\n * @param date - The date object to format\r\n * @returns The formatted year string\r\n */\r\nexport const getYear = (date: Date): string =>\r\n new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n }).format(date);\r\n/**\r\n * Returns the current year formatted as YYYY\r\n * This is a convenience method that calls getYear with the current date\r\n * @returns The current year formatted as YYYY\r\n */\r\nexport const getCurrentYear = (): string => getYear(new Date());\r\n/**\r\n * Returns the season associated with the specified date in the format yyyyYYYY (e.g., 20232024)\r\n * @param date - The date object to parse the season from\r\n * @returns The current season formatted as yyyyYYYY\\\r\n * @throws Error if the provided date is invalid\r\n */\r\nexport const getSeason = (date: string | Date): string => {\r\n const format = new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n month: 'numeric',\r\n }).formatToParts(date instanceof Date ? date : new Date(date));\r\n const month = format.find((part) => part.type === 'month')?.value;\r\n const year = format.find((part) => part.type === 'year')?.value;\r\n if (!year) {\r\n throw new Error('Invalid date provided, could not extract year');\r\n }\r\n if (month && parseInt(month, 10) < 7) {\r\n console.log(month, parseInt(month, 10) < 7);\r\n return `${parseInt(year, 10) - 1}${year}`;\r\n }\r\n return `${year}${parseInt(year, 10) + 1}`;\r\n};\r\n/**\r\n * Returns the current season in the format yyyyYYYY (e.g., 20232024)\r\n * This is a convenience method that calls getSeason with the current date\r\n * @returns The current season formatted as yyyyYYYY\r\n */\r\nexport const getCurrentSeason = (): string => getSeason(new Date());\r\n","/** Categories for save location top-10 list */\nexport const SaveLocationCategoryEnum = {\n /** Save Percentage */\n 'SV%': 'save-pctg',\n /** Saves */\n SV: 'saves',\n /** Shots Against */\n SA: 'shots-against',\n /** Goals Against */\n GA: 'goals-against',\n} as const;\n\n/** Sort options for shot location top-10 list */\nexport const ShotLocationSortEnum = {\n /** All shot locations */\n ALL: 'all',\n /** High-danger (i.e. close-range) shot locations */\n HIGH: 'high',\n /** Mid-range shot locations */\n MID: 'mid',\n /** Long-range shot locations */\n LONG: 'long',\n} as const;\n\n/** Alias for ShotLocationSortEnum */\nexport const SaveLocationSortEnum = ShotLocationSortEnum;\n\n/** Sort options for 5v5 save percentage top-10 list */\nexport const SavePercentage5v5SortEnum = {\n /**5v5 Save %: The percentage of shots a goalie stops at even strength (5-on-5). */\n '5v5-SV%': 'save-pctg',\n /**5v5 Save % in Close Situations: A “close situation” is the time during which a game is tied in the first or second period, or within one goal in the third period. This stats helps how goalies perform in high-pressure situations.*/\n '5v5-SV%-Close': 'save-pctg-close',\n /**5v5 Shots Against: The total number of shots a goalie faces at even strength (5-on-5).*/\n '5v5-SA': 'shots',\n /**5v5 Shots Against per 60 Minutes: The total number of shots a goalie faces at even strength (5-on-5) normalized to a 60-minute game. */\n '5v5-SA/60': 'shots-per-60',\n} as const;\n\n/** Sort options for save percentage top-10 list */\nexport const SavePercentageSortEnum = {\n /** Starts above .900 */\n GAMES: 'games',\n /** Percentage of starts above .900 */\n PCTG: 'pctg',\n} as const;\n\n/** Filter options for player positions */\nexport const PositionFilterEnum = {\n /** Center */\n ALL: 'all',\n /** Left Wing */\n FWD: 'forwards',\n /** Right Wing */\n DEF: 'defense',\n} as const;\n\n/** Categories for skater strength */\nexport const SkatersStrengthEnum = {\n /** All strengths */\n ALL: 'all',\n /** Even strength */\n ES: 'es',\n /** Power play */\n PP: 'pp',\n /** Short-handed */\n PK: 'pk',\n} as const;\n\n/** Sorting options for shot speed top-10 list */\nexport const ShotSpeedSortEnum = {\n /** Hardest shot recorded by player */\n MAX: 'max',\n /** Shots over 100 mph */\n 'OVER-100': 'over-100',\n /** Shots between 90 and 99 mph */\n '90-99': '90-99',\n /** Shots between 80 and 89 mph */\n '80-89': '80-89',\n /** Shots between 70 and 79 mph */\n '70-79': '70-79',\n} as const;\n\n/** Sorting options for skating speed top-10 list */\nexport const SkatingSpeedSortEnum = {\n /** Fastest skating speed recorded by player */\n TOP: 'max',\n /** Speed bursts recorded over 22 mph */\n 'OVER-22': 'over-22',\n /** Speed bursts recorded between 20 and 22 mph */\n '20-22': '20-22',\n /** Speed bursts recorded between 18 and 20 mph */\n '18-20': '18-20',\n} as const;\n\n/** Sorting options for skating distance top-10 list */\nexport const SkatingDistanceSortEnum = {\n /** Total distance skated */\n TOTAL: 'total',\n /** Average distance skated per 60 minutes */\n 'PER-60': 'per-60',\n /** Maximum distance skated in a single period */\n 'MAX-PERIOD': 'max-period',\n /** Maximum distance skated in a single game */\n 'MAX-GAME': 'max-game',\n};\n\n/** Categories for shot location top-10 list */\nexport const ShotLocationCategoryEnum = {\n /** Total shots on goal */\n SOG: 'sog',\n /** Total goals */\n G: 'goals',\n /** Shooting percentage */\n 'SH%': 'shooting-pctg',\n} as const;\n\n/** Sorting options for zone time top-10 lists. */\nexport const ZoneTimeSortEnum = {\n /** Percentage of time spent in the offensive zone */\n OZ: 'offensive',\n /** Percentage of time spent in the defensive zone */\n DZ: 'defensive',\n /** Percentage of time spent in the neutral zone */\n NZ: 'neutral',\n} as const;\n","","// Values are based on the NHL API documentation and other sources.\r\n// Last updated: 2025-10-23\r\n\r\n/**\r\n * All valid NHL team abbreviations and their corresponding team IDs.\r\n */\r\nexport const TeamsEnum = {\r\n /** Anaheim Ducks */\r\n ANA: 24,\r\n /** Boston Bruins */\r\n BOS: 6,\r\n /** Buffalo Sabres */\r\n BUF: 7,\r\n /** Calgary Flames */\r\n CGY: 20,\r\n /** Carolina Hurricanes */\r\n CAR: 12,\r\n /** Chicago Blackhawks */\r\n CHI: 16,\r\n /** Colorado Avalanche */\r\n COL: 21,\r\n /** Columbus Blue Jackets */\r\n CBJ: 29,\r\n /** Dallas Stars */\r\n DAL: 25,\r\n /** Detroit Red Wings */\r\n DET: 17,\r\n /** Edmonton Oilers */\r\n EDM: 22,\r\n /** Florida Panthers */\r\n FLA: 13,\r\n /** Los Angeles Kings */\r\n LAK: 26,\r\n /** Minnesota Wild*/\r\n MIN: 30,\r\n /** Montreal Canadiens */\r\n MTL: 8,\r\n /** New Jersey Devils */\r\n NJD: 1,\r\n /** Nashville Predators */\r\n NSH: 18,\r\n /** New York Islanders */\r\n NYI: 2,\r\n /** New York Rangers */\r\n NYR: 3,\r\n /** Ottawa Senators */\r\n OTT: 9,\r\n /** Philadelphia Flyers */\r\n PHI: 4,\r\n /** Pittsburgh Penguins */\r\n PIT: 5,\r\n /** San Jose Sharks */\r\n SJS: 28,\r\n /** Seattle Kraken */\r\n SEA: 55,\r\n /** St. Louis Blues */\r\n STL: 19,\r\n /** Tampa Bay Lightning */\r\n TBL: 14,\r\n /** Toronto Maple Leafs */\r\n TOR: 10,\r\n /** Utah Hockey Club */\r\n UTA: 59,\r\n /** Vancouver Canucks */\r\n VAN: 23,\r\n /** Vegas Golden Knights */\r\n VGK: 54,\r\n /** Winnipeg Jets */\r\n WPG: 52,\r\n /** Washington Capitals */\r\n WSH: 15,\r\n} as const;\r\n\r\nexport const TeamsReverseEnum = Object.fromEntries(\r\n Object.entries(TeamsEnum).map(([key, value]) => [value, key]),\r\n) as Record<\r\n (typeof TeamsEnum)[keyof typeof TeamsEnum],\r\n keyof typeof TeamsEnum\r\n>;\r\n\r\n/**\r\n * All inactive NHL teams and their corresponding team IDs.\r\n */\r\nexport const InactiveTeamsEnum = {\r\n /** Atlanta Flames (not active) */\r\n AFM: 47,\r\n /** Arizona Coyotes (not active) */\r\n ARI: 53,\r\n /** Atlanta Thrashers (not active) */\r\n ATL: 11,\r\n /** Brooklyn Americans - (not active) */\r\n BRK: 51,\r\n /** California Golden Seals (aka Bay Area Seals) - (not active) */\r\n CGS: 56,\r\n /** Cleveland Barons - (not active) */\r\n CLE: 49,\r\n /** Colorado Rockies - (not active) */\r\n CLR: 35,\r\n /** Detroit Cougars - (not active) */\r\n DCG: 40,\r\n /** Detroit Falcons - (not active) */\r\n DFL: 50,\r\n /** Hamilton Tigers - (not active) */\r\n HAM: 37,\r\n /** Hartford Whalers - (not active) */\r\n HFD: 34,\r\n /** Kansas City Scouts - (not active) */\r\n KCS: 48,\r\n /** Montreal Maroons - (not active) */\r\n MMR: 43,\r\n /** Minnesota North Stars - (not active) */\r\n MNS: 31,\r\n /** Montreal Wanderers - (not active) */\r\n MWN: 41,\r\n /** New York Americans - (not active) */\r\n NYA: 44,\r\n /** California Seals (aka Oakland Seals) - (not active) */\r\n OAK: 46,\r\n /** Phoenix Coyotes - (not active) */\r\n PHX: 27,\r\n /** Pittsburgh Pirates - (not active) */\r\n PIR: 38,\r\n /** Quebec Bulldogs - (not active) */\r\n QBD: 42,\r\n /** Philadelphia Quakers - (not active) */\r\n QUA: 39,\r\n /** Quebec Nordiques - (not active) */\r\n QUE: 32,\r\n /** Ottawa Senators (original franchise) - (not active) */\r\n SEN: 36,\r\n /** St. Louis Eagles - (not active) */\r\n SLE: 45,\r\n /** Toronto Hockey Club (aka Toronto Arenas) - (not active) */\r\n TAN: 57,\r\n /** Toronto St. Patricks - (not active) */\r\n TSP: 58,\r\n /** Winnipeg Jets (original franchise) - (not active) */\r\n WIN: 33,\r\n} as const;\r\n\r\nexport const InactiveTeamsReverseEnum = Object.fromEntries(\r\n Object.entries(InactiveTeamsEnum).map(([key, value]) => [value, key]),\r\n) as Record<\r\n (typeof InactiveTeamsEnum)[keyof typeof InactiveTeamsEnum],\r\n keyof typeof InactiveTeamsEnum\r\n>;\r\n/**\r\n * All valid NHL seasons in yyyyYYYY format.\r\n */\r\nexport const SeasonsArray = [\r\n 19171918, 19181919, 19191920, 19201921, 19211922, 19221923, 19231924,\r\n 19241925, 19251926, 19261927, 19271928, 19281929, 19291930, 19301931,\r\n 19311932, 19321933, 19331934, 19341935, 19351936, 19361937, 19371938,\r\n 19381939, 19391940, 19401941, 19411942, 19421943, 19431944, 19441945,\r\n 19451946, 19461947, 19471948, 19481949, 19491950, 19501951, 19511952,\r\n 19521953, 19531954, 19541955, 19551956, 19561957, 19571958, 19581959,\r\n 19591960, 19601961, 19611962, 19621963, 19631964, 19641965, 19651966,\r\n 19661967, 19671968, 19681969, 19691970, 19701971, 19711972, 19721973,\r\n 19731974, 19741975, 19751976, 19761977, 19771978, 19781979, 19791980,\r\n 19801981, 19811982, 19821983, 19831984, 19841985, 19851986, 19861987,\r\n 19871988, 19881989, 19891990, 19901991, 19911992, 19921993, 19931994,\r\n 19941995, 19951996, 19961997, 19971998, 19981999, 19992000, 20002001,\r\n 20012002, 20022003, 20032004, 20052006, 20062007, 20072008, 20082009,\r\n 20092010, 20102011, 20112012, 20122013, 20132014, 20142015, 20152016,\r\n 20162017, 20172018, 20182019, 20192020, 20202021, 20212022, 20222023,\r\n 20232024, 20242025, 20252026,\r\n] as const;\r\n\r\n/**\r\n * All valid NHL playoff series letters.\r\n */\r\nexport const SeriesLetterEnum = {\r\n /** Atlantic Division Round 1: D1 vs WC# */\r\n A: 'A',\r\n /** Atlantic Division Round 1: D2 vs D3 */\r\n B: 'B',\r\n /** Metropolitan Division Round 1: D1 vs WC# */\r\n C: 'C',\r\n /** Metropolitan Division Round 1: D2 vs D3 */\r\n D: 'D',\r\n /** Central Division Round 1: D1 vs WC# */\r\n E: 'E',\r\n /** Central Division Round 1: D2 vs D3 */\r\n F: 'F',\r\n /** Pacific Division Round 1: D1 vs WC# */\r\n G: 'G',\r\n /** Pacific Division Round 1: D2 vs D3 */\r\n H: 'H',\r\n /** Atlantic Division Round 2: Aw vs Bw */\r\n I: 'I',\r\n /** Metropolitan Division Round 2: Cw vs Dw */\r\n J: 'J',\r\n /** Central Division Round 2: Ew vs Fw */\r\n K: 'K',\r\n /** Pacific Division Round 2: Gw vs Hw */\r\n L: 'L',\r\n /** Eastern Conference Finals */\r\n M: 'M',\r\n /** Western Conference Finals*/\r\n N: 'N',\r\n /** Stanley Cup Finals */\r\n O: 'O',\r\n} as const;\r\n\r\n/**\r\n * All valid NHL playoff series letters grouped by round.\r\n */\r\nexport const SeriesLetterByRound = {\r\n R1: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],\r\n R2: ['I', 'J', 'K', 'L'],\r\n CF: ['M', 'N'],\r\n SCF: ['O'],\r\n};\r\n/**\r\n * All valid NHL playoff series letters mapped to human-readable names.\r\n */\r\nexport const PlayoffSeriesEnum = {\r\n Atlantic_R1_D1_vs_WC: 'A',\r\n Atlantic_R1_D2_vs_D3: 'B',\r\n Metropolitan_R1_D1_vs_WC: 'C',\r\n Metropolitan_R1_D2_vs_D3: 'D',\r\n Central_R1_D1_vs_WC: 'E',\r\n Central_R1_D2_vs_D3: 'F',\r\n Pacific_R1_D1_vs_WC: 'G',\r\n Pacific_R1_D2_vs_D3: 'H',\r\n Atlantic_R2_Aw_vs_Bw: 'I',\r\n Metropolitan_R2_Cw_vs_Dw: 'J',\r\n Central_R2_Ew_vs_Fw: 'K',\r\n Pacific_R2_Gw_vs_Hw: 'L',\r\n Eastern_Conference_Finals: 'M',\r\n Western_Conference_Finals: 'N',\r\n Stanley_Cup_Finals: 'O',\r\n};\r\n\r\n/**\r\n * All valid NHL game states.\r\n */\r\nexport const GameStateEnum = {\r\n /** Future */\r\n FUT: 'FUT',\r\n /** Live */\r\n LIV: 'LIV',\r\n /** Finished */\r\n FIN: 'FIN',\r\n} as const;\r\n\r\n/**\r\n * All valid NHL period types.\r\n */\r\nexport const PeriodTypeEnum = {\r\n /** Regulation */\r\n REG: 'REG',\r\n /** Overtime */\r\n OT: 'OT',\r\n /** Shootout */\r\n SO: 'SO',\r\n} as const;\r\n\r\n/**\r\n * All valid NHL game types.\r\n */\r\nexport const GameTypeEnum = {\r\n /** Pre-season */\r\n PRE: 1,\r\n /** Regular season */\r\n REG: 2,\r\n /** Post-season (aka playoffs) */\r\n POST: 3,\r\n /** All-Star Game (unconfirmed) */\r\n ASG: 4,\r\n /** International (unconfirmed) */\r\n INTL: 19,\r\n} as const;\r\n\r\n/** */\r\nexport const SEASON_RANGE = {\r\n START: SeasonsArray[0] as number,\r\n END: SeasonsArray.at(-1) as number,\r\n};\r\n/** */\r\nexport const START_SEASON = SEASON_RANGE.START;\r\n/** */\r\nexport const END_SEASON = SEASON_RANGE.END;\r\n/** */\r\nexport const YEAR_RANGE = {\r\n START: parseInt(SEASON_RANGE.START.toString().slice(0, 4), 10),\r\n END: parseInt(SEASON_RANGE.END.toString().slice(4, 8), 10),\r\n};\r\n/** */\r\nexport const START_YEAR = YEAR_RANGE.START;\r\n/** */\r\nexport const END_YEAR = YEAR_RANGE.END;\r\n/** */\r\nexport const CURRENT = {\r\n SEASON: SEASON_RANGE.END,\r\n YEAR: YEAR_RANGE.END,\r\n};\r\n/** */\r\nexport const PLAYER_ID_RANGE = { MIN: 8444000, MAX: 8489999 } as const;\r\n/** */\r\nexport const TEAM_ID_RANGE = { MIN: 1, MAX: 59 } as const;\r\n// export const TEAM_ID_RANGE = {\r\n// MIN: Object.values(TeamsEnum).reduce(\r\n// (min, team) => Math.min(min, team),\r\n// Infinity,\r\n// ),\r\n// MAX: Object.values(TeamsEnum).reduce(\r\n// (max, team) => Math.max(max, team),\r\n// -Infinity,\r\n// ),\r\n// } as const;\r\n","import * as EA from './edge-adv.ts';\nimport * as ES from './edge-stats.ts';\n\nexport const EDGE = { ...EA, ...ES };\nexport * as NHL from './nhl.ts';\n","import { type } from 'arktype';\nimport { EDGE, NHL } from '#/constants/index.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport { getCurrentDate } from '#/utils/date.ts';\n\nexport function isParseError(value: unknown): value is type.errors {\n return value instanceof type.errors;\n}\n\nexport function createValidationError(\n parsed: unknown,\n path: string,\n): ValidationError | null {\n if (parsed instanceof type.errors) {\n return new ValidationError(parsed.summary, { endpoint: path });\n }\n return null;\n}\n\nexport const Year = type(`${NHL.START_YEAR} <= number <= ${NHL.END_YEAR}`)\n .or(\n type('string.numeric.parse').narrow((v) => {\n return v >= NHL.START_YEAR && v <= NHL.END_YEAR;\n }),\n )\n .describe(`a valid year from ${NHL.START_YEAR} to ${NHL.END_YEAR}`);\n\nexport const Season = type('number.integer | string.numeric.parse')\n .narrow((v): v is number => {\n const yr = Math.trunc(v / 10000);\n return typeof Year(yr) === 'number' && yr + 1 === v % 10000;\n })\n .pipe((v) => v.toString())\n .describe(`a valid NHL season, e.g. ${NHL.CURRENT.SEASON}`);\n\nexport const TeamAbbrev = type\n .enumerated(\n ...(Object.keys(NHL.TeamsEnum) as (keyof typeof NHL.TeamsEnum)[]),\n ...(Object.keys(\n NHL.InactiveTeamsEnum,\n ) as (keyof typeof NHL.InactiveTeamsEnum)[]),\n )\n .describe('a valid NHL team abbreviation');\n\nexport const TeamId = type\n .enumerated(...Object.values(NHL.TeamsEnum))\n .describe('a valid NHL team ID');\n\nexport const GameType = type\n .enumerated(\n ...(Object.keys(\n NHL.GameTypeEnum,\n ) as (keyof typeof NHL.GameTypeEnum)[]),\n )\n .pipe((v) => NHL.GameTypeEnum[v])\n .or(type('1|2|3|4|19|\"1\"|\"2\"|\"3\"|\"4\"|\"19\"'))\n .describe('a valid NHL game type (e.g., REG, PRE, POST)');\n\nexport const GameNumber = type('number')\n .atLeast(1)\n .atMost((82 * 32) / 2) // Max possible games in a season - need to bump to 84 per team in 2026-27\n .or(\n type('string.numeric.parse').narrow((v) => {\n return v >= 1 && v <= (82 * 32) / 2;\n }),\n )\n .pipe((v) => v.toString())\n .describe('a valid NHL game number between 1 and 1312');\n\nexport const DraftRound = type('1 <= number <= 7')\n .or(type(/^(1|2|3|4|5|6|7)$/))\n .pipe((v) => (typeof v === 'number' ? v.toString() : v))\n .describe('a valid NHL draft round (1-7)');\n\nexport const PlayoffRound = type('1 <= number <= 4')\n .or(type(/^(1|2|3|4)$/))\n .pipe((v) => (typeof v === 'number' ? v.toString() : v))\n .describe('a valid NHL playoff round (1-4)');\n\nexport const EventId = type('number.integer | string.numeric.parse')\n .narrow((v): v is number => Number.isInteger(v) && v > 0)\n .describe('a positive integer representing an NHL event ID');\n\nexport const NHLDate = type('Date | string.date.iso')\n .pipe((v) =>\n typeof v === 'string'\n ? new Date(v).toISOString().slice(0, 10)\n : v.toISOString().slice(0, 10),\n )\n .describe(\n 'a valid date, either as a string (ISO date string) or a Date object',\n );\nexport const NHLMonth = type('Date | string')\n .narrow((v) => {\n if (typeof v === 'string') {\n return /^\\d{4}-\\d{2}$/.test(v);\n } else if (v instanceof Date) {\n return true;\n }\n return false;\n })\n .pipe((v) => (typeof v === 'string' ? v : v.toISOString().slice(0, 7)))\n .describe(\n 'a valid month, either as a string (formatted as YYYY-MM) or a Date object',\n );\n\nexport const GameTypeCode = type('1|2|3|4|19').describe(\n 'a valid NHL game type code (1=PRE, 2=REG, 3=POST, 4=ASG, 19=INTL)',\n);\n\nconst parseGameIdParts = type({\n year: Year,\n gameType: GameType,\n gameNumber: GameNumber,\n});\n\nexport const GameId = type('number.integer | string.numeric.parse')\n .narrow((v) => {\n if (Number.isInteger(v) && v < 0) return false;\n const year = Math.trunc(v / 1e6); // remove last 6 digits\n const gameType = Math.trunc(v / 1e4) % 1e2; // remove last 4 digits, then get last 2 digits\n const gameNumber = v % 1e4; // get last 4 digits\n const valid = !(\n parseGameIdParts({ year, gameType, gameNumber }) instanceof\n type.errors\n );\n return valid;\n })\n .describe('a positive integer representing an NHL game ID');\n\nexport const SeriesLetter = type\n .enumerated(...Object.values(NHL.SeriesLetterEnum))\n .describe('a valid NHL playoff series letter (A-O)');\n\nexport const GameState = type\n .enumerated(...Object.values(NHL.GameStateEnum))\n .describe('a valid NHL game state');\n\nexport const CountryCode = type(/^[a-zA-Z]{2}$/)\n .pipe((v) => v.toLowerCase())\n .describe('a valid ISO 3166-1 alpha-2 country code, e.g. US, CA, RU');\n\nexport const PostalCode = type(/^[a-zA-Z]\\d[a-zA-Z] \\d[a-zA-Z]\\d$/)\n .or(type(/^\\d{5}$/))\n .describe(\n 'a valid postal code, either US ZIP code (5 digit) or Canadian postal code (A1A 1A1 format; space required)',\n );\n\nexport const PlayerId = type('number')\n .atLeast(NHL.PLAYER_ID_RANGE.MIN)\n .atMost(NHL.PLAYER_ID_RANGE.MAX)\n .or(\n type('string.numeric.parse').narrow((v) => {\n return (\n v >= NHL.PLAYER_ID_RANGE.MIN && v <= NHL.PLAYER_ID_RANGE.MAX\n );\n }),\n )\n .pipe((v) => v.toString())\n .describe('a valid NHL player ID');\n\nexport const SaveLocationCategory = type\n .enumerated(\n ...(Object.keys(\n EDGE.SaveLocationCategoryEnum,\n ) as (keyof typeof EDGE.SaveLocationCategoryEnum)[]),\n )\n .pipe((v) => EDGE.SaveLocationCategoryEnum[v]);\n\nexport const ShotLocationSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.ShotLocationSortEnum,\n ) as (keyof typeof EDGE.ShotLocationSortEnum)[]),\n )\n .pipe((v) => EDGE.ShotLocationSortEnum[v]);\n\nexport const SaveLocationSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SaveLocationSortEnum,\n ) as (keyof typeof EDGE.SaveLocationSortEnum)[]),\n )\n .pipe((v) => EDGE.SaveLocationSortEnum[v]);\n\nexport const SavePercentage5v5Sort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SavePercentage5v5SortEnum,\n ) as (keyof typeof EDGE.SavePercentage5v5SortEnum)[]),\n )\n .pipe((v) => EDGE.SavePercentage5v5SortEnum[v]);\n\nexport const SavePercentageSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SavePercentageSortEnum,\n ) as (keyof typeof EDGE.SavePercentageSortEnum)[]),\n )\n .pipe((v) => EDGE.SavePercentageSortEnum[v]);\n\nexport const PositionFilter = type\n .enumerated(\n ...(Object.keys(\n EDGE.PositionFilterEnum,\n ) as (keyof typeof EDGE.PositionFilterEnum)[]),\n )\n .pipe((v) => EDGE.PositionFilterEnum[v]);\n\nexport const SkatersStrength = type\n .enumerated(\n ...(Object.keys(\n EDGE.SkatersStrengthEnum,\n ) as (keyof typeof EDGE.SkatersStrengthEnum)[]),\n )\n .pipe((v) => EDGE.SkatersStrengthEnum[v]);\n\nexport const ShotSpeedSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.ShotSpeedSortEnum,\n ) as (keyof typeof EDGE.ShotSpeedSortEnum)[]),\n )\n .pipe((v) => EDGE.ShotSpeedSortEnum[v]);\n\nexport const SkatingSpeedSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SkatingSpeedSortEnum,\n ) as (keyof typeof EDGE.SkatingSpeedSortEnum)[]),\n )\n .pipe((v) => EDGE.SkatingSpeedSortEnum[v]);\n\nexport const SkatingDistanceSort = type.enumerated(\n ...(Object.keys(\n EDGE.SkatingDistanceSortEnum,\n ) as (keyof typeof EDGE.SkatingDistanceSortEnum)[]),\n);\n// .pipe((v) => C.SkatingDistanceSortEnum[v]);\n\nexport const ShotLocationCategory = type\n .enumerated(\n ...(Object.keys(\n EDGE.ShotLocationCategoryEnum,\n ) as (keyof typeof EDGE.ShotLocationCategoryEnum)[]),\n )\n .pipe((v) => EDGE.ShotLocationCategoryEnum[v]);\n\nexport const ZoneTimeSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.ZoneTimeSortEnum,\n ) as (keyof typeof EDGE.ZoneTimeSortEnum)[]),\n )\n .pipe((v) => EDGE.ZoneTimeSortEnum[v]);\n\n/** utility types */\n\nexport const BaseParams = type({\n season: Season.or('undefined').pipe((v) => v ?? NHL.CURRENT.SEASON),\n gameType: GameType.or('undefined').pipe(\n (v) => v ?? NHL.GameTypeEnum.REG,\n ),\n});\n\nexport const SeasonAndGameType = type({\n season: Season.or('undefined').optional(),\n gameType: GameType.or('undefined').optional(),\n});\n\nexport const PlayerParams = BaseParams.merge({\n playerId: PlayerId,\n season: Season,\n});\n\nexport const TeamParams = BaseParams.merge({\n teamId: TeamId,\n});\n\nexport const top10Params = BaseParams.merge({\n position: PositionFilter.default('ALL'),\n strength: SkatersStrength.default('ALL'),\n});\n\nexport const DraftParams = type({\n year: Year.or('undefined').pipe((v) => v ?? NHL.CURRENT.YEAR),\n round: DraftRound.or('undefined').optional(),\n});\n\nexport const GameIdAndEventId = type({\n gameId: GameId,\n eventId: EventId,\n});\n\nexport const TeamAndSeasonParams = type({\n team: TeamAbbrev,\n season: Season.or('undefined').pipe((v) => v ?? NHL.CURRENT.SEASON),\n});\n\nexport const SeriesAndSeasonParams = type({\n seriesLetter: SeriesLetter,\n season: Season.or('undefined').pipe((v) => v ?? NHL.CURRENT.SEASON),\n});\n\nexport const SeriesParams = type({\n seriesLetter: SeriesLetter,\n year: Year.or('undefined').pipe((v) => v ?? NHL.CURRENT.YEAR),\n});\n\nexport const ScheduleParams = type({\n team: TeamAbbrev,\n date: NHLDate.or('undefined').pipe((v) => v ?? getCurrentDate()),\n period: type('\"week\" | \"month\" | undefined').pipe((v) => v ?? 'week'),\n});\n","/**\n * Helper to construct API path with parameters\n */\nexport function route(\n template: string,\n params: Record<string, string | number | undefined>,\n): string {\n let route = template;\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n route = route.replace(`{${key}}`, String(value));\n }\n return route;\n}\n","/**\n * Game-related API endpoints\n */\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n GamecenterBoxscore,\n GamecenterLanding,\n GamecenterPlayByPlay,\n GamecenterReports,\n LeagueSchedule,\n NetworkTVSchedule,\n PlayoffBracket,\n PlayoffSeries,\n PlayoffSeriesSchedule,\n PPTReplayEvent,\n PPTReplayGoal,\n ScheduleCalendar,\n WhereToWatch,\n WSCGameStory,\n WSCPlayByPlay,\n} from '#/types/responses/gamecenter/index.ts';\nimport {\n getCurrentDate,\n getCurrentSeason,\n getCurrentYear,\n} from '#/utils/date.ts';\nimport {\n GameId,\n GameIdAndEventId,\n isParseError,\n NHLDate,\n Season,\n SeriesAndSeasonParams,\n Year,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\n\nconst _paths = {\n schedule: 'schedule/{date}',\n scheduleCalendar: 'schedule-calendar/{date}',\n playoffBracket: 'playoff-bracket/{year}',\n playoffSeries: 'playoff-series/{season}',\n playoffSeriesSchedule: 'schedule/playoff-series/{season}/{seriesLetter}',\n gamecenter: {\n playByPlay: 'gamecenter/{gameId}/play-by-play',\n reports: 'gamecenter/{gameId}/right-rail',\n landing: 'gamecenter/{gameId}/landing',\n boxscore: 'gamecenter/{gameId}/boxscore',\n },\n wsc: {\n gameStory: 'wsc/game-story/{gameId}',\n playByPlay: 'wsc/play-by-play/{gameId}',\n },\n pptReplay: {\n goal: 'ppt-replay/{gameId}/goal/{eventId}',\n event: 'ppt-replay/{date}',\n },\n whereToWatch: 'where-to-watch',\n networkTVSchedule: 'network/tv-schedule/{date}',\n};\n\n/**\n * Get play-by-play data for a specific game\n * @param gameId - The unique identifier for the game\n * @returns Promise resolving to play-by-play data\n */\nexport const playByPlay = (\n gameId: string | number,\n): Promise<APIResponse<GamecenterPlayByPlay>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.playByPlay,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.gamecenter.playByPlay, { gameId: parsedGameId }),\n );\n};\n\n/**\n * Get reports data for a specific game\n * @param gameId - The unique identifier for the game\n * @returns Promise resolving to reports data\n * @note The official endpoint name is 'right-rail', as it is used\n * to populate the right rail UI component of the NHL website. The\n * function has been renamed to 'reports' for clarity.\n */\nexport const reports = (\n gameId: string | number,\n): Promise<APIResponse<GamecenterReports>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.reports,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.gamecenter.reports, { gameId: parsedGameId }),\n );\n};\n/**\n * Get landing page data for a specific game\n * @param gameId - The unique identifier for the game\n * @returns Promise resolving to landing page data\n */\nexport const landing = (\n gameId: string | number,\n): Promise<APIResponse<GamecenterLanding>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.landing,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.gamecenter.landing, { gameId: parsedGameId }),\n );\n};\n/**\n * Get boxscore data for a specific game\n * @param gameId - The unique identifier for the game\n * @returns Promise resolving to boxscore data\n */\nexport const boxscore = (\n gameId: string | number,\n): Promise<APIResponse<GamecenterBoxscore>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.boxscore,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.gamecenter.boxscore, { gameId: parsedGameId }),\n );\n};\n\nexport const wsc = {\n /**\n * Get game story data for a specific game\n * @param gameId - The unique identifier for the game\n * @returns Promise resolving to game story data\n */\n gameStory: (\n gameId: number | string,\n ): Promise<APIResponse<WSCGameStory>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.wsc.gameStory,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.wsc.gameStory, { gameId: parsedGameId }),\n );\n },\n\n /**\n * Get play-by-play data for a specific game\n * @param gameId - The unique identifier for the game\n * @returns Promise resolving to play-by-play data\n */\n playByPlay: (\n gameId: number | string,\n ): Promise<APIResponse<WSCPlayByPlay>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.wsc.playByPlay,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.wsc.playByPlay, { gameId: parsedGameId }),\n );\n },\n};\n\n/**\n * Access PPT replay related endpoints\n */\nexport const pptReplay = {\n /**\n * Get goal replay data for a specific game and event\n * @param gameId - The unique identifier for the game\n * @param eventId - The unique identifier for the event\n * @returns Promise resolving to goal replay data\n */\n goal: (\n gameId: number | string,\n eventId: number | string,\n ): Promise<APIResponse<PPTReplayGoal>> => {\n const parsed = GameIdAndEventId({ gameId, eventId });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.pptReplay.goal,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.pptReplay.goal, { gameId, eventId }),\n );\n },\n\n /**\n * Get event replay data for a specific date\n * @param date - Date to get event replay data for (Date object or ISO date string)\n * @returns Promise resolving to event replay data\n */\n event: async (\n date: Date | string,\n ): Promise<APIResponse<PPTReplayEvent>> => {\n const parsedDate = NHLDate(date);\n if (isParseError(parsedDate)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.pptReplay.event,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.pptReplay.event, { date: parsedDate }),\n );\n },\n};\n\n/**\n * Access schedule related endpoints\n */\nexport const schedule = (\n date?: Date | string,\n): Promise<APIResponse<LeagueSchedule>> => {\n const parsedDate = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsedDate)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.schedule,\n }),\n });\n }\n return nhlClient.get(route(_paths.schedule, { date: parsedDate }));\n};\n\n/**\n * Access schedule calendar related endpoints\n */\nexport const scheduleCalendar = (\n date?: Date | string,\n): Promise<APIResponse<ScheduleCalendar>> => {\n const parsedDate = NHLDate(date);\n if (isParseError(parsedDate)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.scheduleCalendar,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.scheduleCalendar, { date: parsedDate }),\n );\n};\n\n/**\n * Access playoff bracket related endpoints\n */\nexport const playoffBracket = (\n year?: string,\n): Promise<APIResponse<PlayoffBracket>> => {\n const parsedYear = Year(year ?? getCurrentYear());\n if (isParseError(parsedYear)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedYear.summary, {\n endpoint: _paths.playoffBracket,\n }),\n });\n }\n return nhlClient.get(route(_paths.playoffBracket, { year: parsedYear }));\n};\n\n/**\n * Access playoff series related endpoints\n */\nexport const playoffSeries = (\n season?: string,\n): Promise<APIResponse<PlayoffSeries>> => {\n const parsedSeason = Season(season ?? getCurrentSeason());\n if (isParseError(parsedSeason)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedSeason.summary, {\n endpoint: _paths.playoffSeries,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.playoffSeries, { season: parsedSeason }),\n );\n};\n\n/**\n * Access playoff series schedule related endpoints\n */\nexport const playoffSeriesSchedule = (\n seriesLetter: string,\n season?: string,\n): Promise<APIResponse<PlayoffSeriesSchedule>> => {\n const parsed = SeriesAndSeasonParams({\n seriesLetter,\n season: season ?? getCurrentSeason(),\n });\n\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.playoffSeriesSchedule,\n }),\n });\n }\n // series letter is a single character from A to O (/[a-oA-O]/)\n // Are series letters assigned in a pre determined manner?\n return nhlClient.get(route(_paths.playoffSeriesSchedule, parsed));\n};\n\n/**\n * Access where-to-watch related endpoints\n */\nexport const whereToWatch = (): Promise<APIResponse<WhereToWatch>> =>\n nhlClient.get(_paths.whereToWatch);\n\n/**\n * Access network related endpoints\n */\n/**\n * Get TV schedule data for a specific date\n * @param date - Date to get TV schedule data for (optional)\n * @returns Promise resolving to TV schedule data\n */\nexport const networkTVSchedule = (\n date?: Date | string,\n): Promise<APIResponse<NetworkTVSchedule>> => {\n const parsedDate = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsedDate)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.networkTVSchedule,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.networkTVSchedule, { date: parsedDate }),\n );\n};\n","/**\n * @module api/misc\n * @description Miscellaneous NHL API endpoints for meta information, location data, and other utility functions\n */\n\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n GameMeta,\n LocationInfo,\n NHLSeasons,\n PartnerGameInfo,\n PlayoffSeriesMeta,\n PostalCodeInfo,\n} from '#/types/responses/gamecenter/index.ts';\nimport {\n CountryCode,\n GameId,\n isParseError,\n PostalCode,\n SeriesParams,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\n\nconst _paths = {\n season: 'season',\n metaPlayoffSeries: 'meta/playoff-series/{year}/{seriesLetter}',\n metaGame: 'meta/game/{gameId}',\n postalLookup: 'postal-lookup/{postalCode}',\n location: 'location',\n partnerGame: 'partner-game/{countryCode}/now',\n};\n\n// returns a basic array of all valid NHL seasons\nexport const seasons = (): Promise<APIResponse<NHLSeasons>> => {\n return nhlClient.get(_paths.season);\n};\n\nexport const meta = {\n /**\n * Get meta information for a playoff series\n *\n * @param year - The year in YYYY format\n * @param seriesLetter - Single letter identifier for the playoff series\n * @returns Promise resolving to playoff series meta information\n */\n playoffSeries: (\n seriesLetter: string,\n year?: number | string,\n ): Promise<APIResponse<PlayoffSeriesMeta>> => {\n const parsed = SeriesParams({ year, seriesLetter });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.metaPlayoffSeries,\n }),\n });\n }\n return nhlClient.get(route(_paths.metaPlayoffSeries, parsed));\n },\n\n /**\n * Get meta information for a specific game\n *\n * @param gameId - The unique game identifier\n * @returns Promise resolving to game meta information\n */\n game: (gameId: string | number): Promise<APIResponse<GameMeta>> => {\n const parsedGameId = GameId(gameId);\n if (isParseError(parsedGameId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.metaGame,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.metaGame, { gameId: parsedGameId }),\n );\n },\n};\n\n/**\n * Lookup information based on postal code\n *\n * @param postalCode - The postal/zip code to lookup\n * @returns Promise resolving to postal code information\n */\nexport const postalLookup = (\n postalCode: string,\n): Promise<APIResponse<PostalCodeInfo>> => {\n const parsedPostalCode = PostalCode(postalCode);\n if (isParseError(parsedPostalCode)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedPostalCode.summary, {\n endpoint: _paths.postalLookup,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.postalLookup, { postalCode: parsedPostalCode }),\n );\n};\n\n/**\n * Get location information\n *\n * @returns Promise resolving to the location determined by the API\n * (assumed to be based on the user's IP address)\n */\nexport const location = (): Promise<APIResponse<LocationInfo>> => {\n return nhlClient.get(_paths.location);\n};\n\n/**\n * Get partner game information for a specific country\n *\n * @param countryCode - The two-letter country code (e.g. 'ca', 'se', 'cz', etc.)\n * @returns Promise resolving to partner game information\n */\nexport const partnerGame = (\n countryCode: string,\n): Promise<APIResponse<PartnerGameInfo>> => {\n const parsedCountryCode = CountryCode(countryCode);\n if (isParseError(parsedCountryCode)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedCountryCode.summary, {\n endpoint: _paths.partnerGame,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.partnerGame, { countryCode: parsedCountryCode }),\n );\n};\n","/**\n *\n */\n\nimport nhlClient, { createNHLClient } from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n GoalieStatsLeaders,\n PlayerGameLog,\n PlayerLanding,\n PlayerSearchResult,\n PlayerSpotlight,\n SkaterStatsLeaders,\n} from '#/types/responses/gamecenter/index.ts';\nimport { BaseParams, isParseError, PlayerId } from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\n\nconst _paths = {\n landing: 'player/{playerId}/landing',\n gameLog: 'player/{playerId}/game-log/{season}/{gameType}',\n spotlight: 'player-spotlight',\n statsLeaders: {\n skaters: 'skater-stats-leaders/{season}/{gameType}',\n goalies: 'goalie-stats-leaders/{season}/{gameType}',\n },\n playerSearch: 'https://search.d3.nhle.com/api/v1/search/player',\n};\n\nconst nhlPlayerSearch = createNHLClient(_paths.playerSearch);\nconst searchUrlParams = { culture: 'en', q: '' };\n\n/**\n * Get player landing information\n * @param playerId - The unique player identifier\n * @returns Promise resolving to player landing information\n */\nexport const landing = (\n playerId: number | string,\n): Promise<APIResponse<PlayerLanding>> => {\n const parsedPlayerId = PlayerId(playerId);\n if (isParseError(parsedPlayerId)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsedPlayerId.summary, {\n endpoint: _paths.landing,\n }),\n });\n }\n return nhlClient.get(\n route(_paths.landing, { playerId: parsedPlayerId }),\n );\n};\n\nexport const gameLog = (\n playerId: number | string,\n season?: number | string,\n gameType?: number | string,\n): Promise<APIResponse<PlayerGameLog>> => {\n const Parser = BaseParams.merge({\n playerId: PlayerId,\n });\n const parsed = Parser({ playerId, season, gameType });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.gameLog,\n }),\n });\n }\n return nhlClient.get(route(_paths.gameLog, parsed));\n};\n\nexport const spotlight = (): Promise<APIResponse<PlayerSpotlight>> => {\n return nhlClient.get(_paths.spotlight);\n};\n\nexport const search = (\n query: string,\n): Promise<APIResponse<PlayerSearchResult>> => {\n return nhlPlayerSearch.get('', {\n ...searchUrlParams,\n q: query,\n });\n};\n\n/**\n * Access stats leaders related endpoints\n */\nexport const statsLeaders = {\n /**\n * Get skater stats leaders\n * @param season - The season identifier (optional)\n * @param gameType - The game type identifier (optional)\n * @returns Promise resolving to skater stats leaders\n */\n skaters: (\n season?: number | string,\n gameType?: number | string,\n ): Promise<APIResponse<SkaterStatsLeaders>> => {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.statsLeaders.skaters,\n }),\n });\n }\n return nhlClient.get(route(_paths.statsLeaders.skaters, parsed));\n },\n\n /**\n * Get goalie stats leaders\n * @param season - The season identifier (optional)\n * @param gameType - The game type identifier (optional)\n * @returns Promise resolving to goalie stats leaders\n */\n goalies: (\n season?: number | string,\n gameType?: number | string,\n ): Promise<APIResponse<GoalieStatsLeaders>> => {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.statsLeaders.goalies,\n }),\n });\n }\n return nhlClient.get(route(_paths.statsLeaders.goalies, parsed));\n },\n};\n","import nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type { NHLScore, NHLScoreboard, TeamAbbrev } from '#/types/index.ts';\nimport { getCurrentDate } from '#/utils/date.ts';\nimport {\n isParseError,\n NHLDate,\n TeamAbbrev as Team,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\n\nconst _paths = {\n score: 'score/{date}',\n scoreboard: {\n now: 'scoreboard/now',\n byTeam: 'scoreboard/{team}/now',\n byDate: 'scoreboard/{date}',\n },\n};\n\n/**\n * Access score related endpoints\n */\n/**\n * Get scores for a specific date\n * @param date - Date to get scores for (Date object or ISO date string)\n * @returns Promise resolving to scores for the specified date\n */\nexport const score = (\n date?: Date | string,\n): Promise<APIResponse<NHLScore>> => {\n const parsed = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.score,\n }),\n });\n }\n return nhlClient.get(route(_paths.score, { date: parsed }));\n};\n\n/**\n * Access scoreboard related endpoints\n */\n\nexport const scoreboard = (): Promise<APIResponse<NHLScoreboard>> =>\n nhlClient.get<NHLScoreboard>(_paths.scoreboard.now);\n/**\n * Get scoreboard data for a specific team\n * @param team - The team abbreviation\n * @returns Promise resolving to scoreboard data for the specified team\n */\nscoreboard.team = async (\n team: TeamAbbrev,\n): Promise<APIResponse<NHLScoreboard>> => {\n const parsed = Team(team);\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.scoreboard.byTeam,\n }),\n });\n }\n return nhlClient.get<NHLScoreboard>(\n route(_paths.scoreboard.byTeam, { team: parsed }),\n );\n};\n/**\n * Get scoreboard data for a specific date\n * @param date - Date to get scoreboard data for (Date object or ISO date string)\n * @returns Promise resolving to scoreboard data for the specified date\n */\nscoreboard.date = async (\n date: Date | string,\n): Promise<APIResponse<NHLScoreboard>> => {\n const parsed = NHLDate(date);\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.scoreboard.byDate,\n }),\n });\n }\n return nhlClient.get<NHLScoreboard>(\n route(_paths.scoreboard.byDate, { date: parsed }),\n );\n};\n","import nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n NHLMonth,\n NHLStandings,\n NHLStandingsSeason,\n TeamProspects,\n TeamRoster,\n TeamRosterSeasons,\n TeamScheduleMonth,\n TeamScheduleSeason,\n TeamScheduleWeek,\n TeamStats,\n TeamStatsSeason,\n} from '#/types/index.ts';\nimport { getCurrentDate } from '#/utils/date.ts';\nimport {\n BaseParams,\n isParseError,\n NHLDate,\n ScheduleParams,\n TeamAbbrev,\n TeamAndSeasonParams,\n} from '#/utils/schemas.ts';\nimport { route } from '../../utils/utils.ts';\n\nconst paths = {\n rosterSeasons: 'roster-season/{team}',\n roster: 'roster/{team}/{season}',\n prospects: 'prospects/{team}',\n clubStats: 'club-stats/{team}/{season}/{gameType}',\n clubStatsSeason: 'club-stats-season/{team}',\n standings: 'standings/{date}',\n standingsSeason: 'standings-season',\n clubSchedule: 'club-schedule/{team}/{period}/{date}',\n clubScheduleSeason: 'club-schedule-season/{team}/{season}',\n};\n\n/**\n * Access roster seasons related endpoints\n */\nexport const rosterSeasons = (\n team: string,\n): Promise<APIResponse<TeamRosterSeasons>> => {\n const parsed = TeamAbbrev(team);\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.rosterSeasons,\n }),\n });\n }\n return nhlClient.get(route(paths.rosterSeasons, { team: parsed }));\n};\n\n/**\n * Access roster related endpoints\n */\nexport const roster = (\n team: string,\n season?: string | number,\n): Promise<APIResponse<TeamRoster>> => {\n const parsed = TeamAndSeasonParams({ team, season });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.roster,\n }),\n });\n }\n return nhlClient.get(route(paths.roster, parsed));\n};\n\n/**\n * Access prospects related endpoints\n */\nexport const prospects = (\n team: string,\n): Promise<APIResponse<TeamProspects>> => {\n const parsed = TeamAbbrev(team);\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.prospects,\n }),\n });\n }\n return nhlClient.get(route(paths.prospects, { team: parsed }));\n};\n\n/**\n * Access club stats related endpoints\n */\nexport const clubStats = (\n team: string,\n season?: string | number,\n gameType?: string | number,\n): Promise<APIResponse<TeamStats>> => {\n const Parser = BaseParams.merge({\n team: TeamAbbrev,\n });\n const parsed = Parser({ team, season, gameType });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.clubStats,\n }),\n });\n }\n return nhlClient.get(route(paths.clubStats, parsed));\n};\n\n/**\n * Access club stats season related endpoints\n */\nexport const clubStatsSeason = (\n team: string,\n): Promise<APIResponse<TeamStatsSeason>> => {\n const parsed = TeamAbbrev(team);\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.clubStatsSeason,\n }),\n });\n }\n return nhlClient.get(route(paths.clubStatsSeason, { team: parsed }));\n};\n\n/**\n * Access standings related endpoints\n */\nexport const standings = (\n date?: Date | string,\n): Promise<APIResponse<NHLStandings>> => {\n const parsed = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.standings,\n }),\n });\n }\n return nhlClient.get(route(paths.standings, { date: parsed }));\n};\n\n/**\n * Access standings season related endpoints\n */\nexport const standingsSeason = (): Promise<\n APIResponse<NHLStandingsSeason>\n> => {\n return nhlClient.get(paths.standingsSeason);\n};\n\n/**\n * Access club schedule related endpoints\n */\nconst clubSchedule = (\n team: string,\n date?: Date | string,\n period?: 'week' | 'month',\n): Promise<APIResponse<TeamScheduleWeek | TeamScheduleMonth>> => {\n const parsed = ScheduleParams({ team, date, period });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.clubSchedule,\n }),\n });\n }\n if (period === 'month') {\n parsed.date = parsed.date?.slice(0, 7); // 'YYYY-MM'\n }\n return nhlClient.get(route(paths.clubSchedule, parsed));\n};\n\n/**\n * Access club schedule season related endpoints\n */\nconst clubScheduleSeason = (\n team: string,\n season?: number,\n): Promise<APIResponse<TeamScheduleSeason>> => {\n const parsed = TeamAndSeasonParams({ team, season });\n if (isParseError(parsed)) {\n return Promise.resolve({\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: paths.clubScheduleSeason,\n }),\n });\n }\n return nhlClient.get(route(paths.clubScheduleSeason, parsed));\n};\n\nexport const schedule = {\n /** Returns the full season schedule for the provided team and season\n * @param team - The team abbreviation for the desired team\n * @param season - The specific season (e.g. 20222023); if not provided, defaults to the current season.\n * @returns A promise that resolves to the full season schedule for the specified team and season\n * @example\n * ```ts\n * // Get the full season schedule for the Boston Bruins for the 2022-2023 season\n * schedule.season('BOS', 20222023).then((data) => {\n * console.log(data);\n * });\n * ```\n */\n season: clubScheduleSeason,\n\n /**\n * Get the team schedule for any seven-day period\n * @param team - The team abbreviation\n * @param date - The date indicating the start of the seven-day period.\n * If not provided, defaults to the current date. format: 'YYYY-MM'\n * @returns A promise that resolves to the club schedule for the specified week\n *\n * @example\n * ```ts\n * import { schedule } from 'nhle-api';\n *\n * // Get the schedule for the Chicago Blackhawks for the week of November 4, 2023\n * // This returns the schedule from November 4 to November 10, 2023\n * schedule.week('CHI', '2023-11-04').then((data) => {\n * console.log(data);\n * });\n * ```\n */\n week: (\n team: string,\n date?: Date | string,\n ): Promise<APIResponse<TeamScheduleWeek>> =>\n clubSchedule(team, date, 'week'),\n\n /**\n * Get the team schedule for any month\n * @param team - The team abbreviation\n * @param date - The date indicating the month to get the schedule for.\n * If not provided, defaults to the current month. format: 'YYYY-MM'\n * @returns A promise that resolves to the club schedule for the specified month\n *\n * @example\n * ```ts\n * import { schedule } from 'nhle-api';\n *\n * // Get the schedule for the Toronto Maple Leafs for November 2023\n * schedule.month('TOR', '2023-11').then((data) => {\n * console.log(data);\n * });\n * ```\n */\n month: (\n team: string,\n date?: NHLMonth,\n ): Promise<APIResponse<TeamScheduleMonth>> =>\n clubSchedule(team, date, 'month'),\n};\n"]}
1
+ {"version":3,"sources":["../src/api/gamecenter/index.ts","../src/api/gamecenter/draft.ts","../src/config/env.ts","../src/errors/index.ts","../src/client/types.ts","../src/client/index.ts","../src/utils/date.ts","../src/constants/edge-adv.ts","../src/constants/edge-stats.ts","../src/constants/nhl.ts","../src/constants/index.ts","../src/utils/schemas.ts","../src/utils/utils.ts","../src/api/gamecenter/_paths.ts","../src/api/gamecenter/game.ts","../src/api/gamecenter/misc.ts","../src/api/gamecenter/player.ts","../src/api/gamecenter/score.ts","../src/api/gamecenter/team.ts"],"names":["type","route","landing","schedule"],"mappings":";;;;;;;;;;;AAAA,IAAA,kBAAA,GAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,KAAA,EAAA,MAAA,aAAA;AAAA,EAAA,IAAA,EAAA,MAAA,YAAA;AAAA,EAAA,IAAA,EAAA,MAAA,YAAA;AAAA,EAAA,MAAA,EAAA,MAAA,cAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,IAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACwBA,SAAS,YAAA,GAAuB;AAC7B,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,gBAAA;AAC5B,EAAA,IAAI,CAAC,SAAS,OAAO,GAAA;AAErB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AACnC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,IAAK,UAAU,CAAA,EAAG;AACtC,IAAA,OAAA,CAAQ,IAAA;AAAA,MACL,8BAA8B,OAAO,CAAA,uBAAA;AAAA,KACxC;AACA,IAAA,OAAO,GAAA;AAAA,EACV;AACA,EAAA,OAAO,MAAA;AACV;AAMA,SAAS,aAAA,GAA6B;AACnC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB,WAAA,EAAY;AAC5D,EAAA,IAAI,QAAA,KAAa,MAAM,OAAO,IAAA;AAC9B,EAAA,IAAI,QAAA,IAAY,aAAa,IAAA,EAAM;AAChC,IAAA,OAAA,CAAQ,IAAA;AAAA,MACL,+BAA+B,QAAQ,CAAA,qBAAA;AAAA,KAC1C;AAAA,EACH;AACA,EAAA,OAAO,IAAA;AACV;AAMA,SAAS,aAAA,GAA0B;AAChC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB,WAAA,EAAY;AAC5D,EAAA,MAAM,WAAA,GAA0B;AAAA,IAC7B,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACH;AAEA,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,IAAI,WAAA,CAAY,QAAA,CAAS,QAAoB,CAAA,EAAG;AAC7C,IAAA,OAAO,QAAA;AAAA,EACV;AAEA,EAAA,OAAA,CAAQ,IAAA;AAAA,IACL,+BAA+B,QAAQ,CAAA,kBAAA,EAAqB,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,sBAAA;AAAA,GACrF;AACA,EAAA,OAAO,MAAA;AACV;AAMO,IAAM,SAAA,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtB,SAAS,YAAA,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtB,UAAU,aAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,UAAU,aAAA;AACb;AAMO,SAAS,YAAA,GAAqB;AAClC,EAAA,MAAM,IAAA,GAAO;AAAA,IACV,OAAA,EAAS,QAAQ,GAAA,CAAI,gBAAA;AAAA,IACrB,QAAA,EAAU,QAAQ,GAAA,CAAI,iBAAA;AAAA,IACtB,QAAA,EAAU,QAAQ,GAAA,CAAI;AAAA,GACzB;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA;AAAA,IACrC,CAAC,GAAG,CAAC,MAAM,CAAA,KAAM;AAAA,GACpB;AACA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,MAAM,oCAAA,EAAsC;AAAA,MACjD,GAAG,MAAA,CAAO,WAAA,CAAY,UAAU,CAAA;AAAA,MAChC,iBAAiB,SAAA,CAAU,OAAA;AAAA,MAC3B,kBAAkB,SAAA,CAAU,QAAA;AAAA,MAC5B,kBAAkB,SAAA,CAAU;AAAA,KAC9B,CAAA;AAAA,EACJ;AACH;;;AC1HO,IAAM,aAAA,GAAgB;AAAA;AAAA,EAE1B,OAAA,EAAS,SAAA;AAAA;AAAA,EAGT,MAAA,EAAQ,QAAA;AAAA;AAAA,EAGR,MAAA,EAAQ,QAAA;AAAA;AAAA,EAGR,UAAA,EAAY,YAAA;AAAA;AAAA,EAGZ,SAAA,EAAW,WAAA;AAAA;AAAA,EAGX,KAAA,EAAO,OAAA;AAAA;AAAA,EAGP,UAAA,EAAY;AACf,CAAA;AAKO,IAAM,QAAA,GAAW;AAAA,EAErB,KAAA,EAAO,CAAA;AAAA,EACP,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO;AACV,CAAA;AAgDO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EACjB,QAAA;AAAA,EACA,OAAA;AAAA,EAEhB,WAAA,CACG,OAAA,EACA,QAAA,EACA,OAAA,GAAwB,EAAC,EAC1B;AACC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC7B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACZ,GAAG,OAAA;AAAA,MACH,SAAA,EAAW,OAAA,CAAQ,SAAA,oBAAa,IAAI,IAAA;AAAK,KAC5C;AAGA,IAAA,KAAA,CAAM,iBAAA,GAAoB,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAS;AACN,IAAA,OAAO;AAAA,MACJ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,GAAI,IAAA,CAAK,KAAA,IAAS,EAAE,KAAA,EAAO,KAAK,KAAA;AAAM,KACzC;AAAA,EACH;AACH,CAAA;AAKO,IAAM,YAAA,GAAN,cAA2B,QAAA,CAAS;AAAA,EACxC,WAAA,CAAY,OAAA,EAAiB,OAAA,GAAwB,EAAC,EAAG;AACtD,IAAA,KAAA,CAAM,OAAA,EAAS,aAAA,CAAc,OAAA,EAAS,OAAO,CAAA;AAAA,EAChD;AACH,CAAA;AAKO,IAAM,WAAA,GAAN,cAA0B,QAAA,CAAS;AAAA,EACvC,WAAA,CAAY,OAAA,EAAiB,OAAA,GAAwB,EAAC,EAAG;AACtD,IAAA,KAAA,CAAM,OAAA,EAAS,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC/C;AACH,CAAA;AAKO,IAAM,aAAA,GAAN,cAA4B,WAAA,CAAY;AAAA,EAC5C,WAAA,CACG,OAAA,GAAkB,oBAAA,EAClB,OAAA,GAAwB,EAAC,EAC1B;AACC,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,YAAY,OAAA,CAAQ,UAAA,IAAc,KAAK,CAAA;AAAA,EACvE;AACH,CAAA;AAKO,IAAM,WAAA,GAAN,cAA0B,QAAA,CAAS;AAAA,EACvC,WAAA,CAAY,OAAA,EAAiB,OAAA,GAAwB,EAAC,EAAG;AACtD,IAAA,KAAA,CAAM,OAAA,EAAS,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC/C;AACH,CAAA;AAKO,IAAM,cAAA,GAAN,cAA6B,QAAA,CAAS;AAAA,EAC1B,UAAA;AAAA,EAEhB,YACG,OAAA,GAAkB,qBAAA,EAClB,OAAA,GAAwB,IACxB,UAAA,EACD;AACC,IAAA,KAAA,CAAM,OAAA,EAAS,cAAc,UAAA,EAAY;AAAA,MACtC,GAAG,OAAA;AAAA,MACH,UAAA,EAAY,QAAQ,UAAA,IAAc;AAAA,KACpC,CAAA;AACD,IAAA,IAAA,CAAK,aAAa,UAAA,IAAc,CAAA;AAAA,EACnC;AACH,CAAA;AAKO,IAAM,QAAA,GAAN,cAAuB,QAAA,CAAS;AAAA,EACpC,WAAA,CAAY,OAAA,EAAiB,OAAA,GAAwB,EAAC,EAAG;AACtD,IAAA,KAAA,CAAM,OAAA,EAAS,aAAA,CAAc,SAAA,EAAW,OAAO,CAAA;AAAA,EAClD;AACH,CAAA;AAcO,IAAM,eAAA,GAAN,cAA8B,QAAA,CAAS;AAAA,EAC3C,WAAA,CAAY,OAAA,EAAiB,OAAA,GAAwB,EAAC,EAAG;AACtD,IAAA,KAAA,CAAM,OAAA,EAAS,aAAA,CAAc,UAAA,EAAY,OAAO,CAAA;AAAA,EACnD;AACH,CAAA;AAKO,IAAM,eAAN,MAAmB;AAAA,EACf,MAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAsB,EAAC,EAAG;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACX,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,QAAA,CAAS,KAAA;AAAA,MACtC,QAAQ,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,MACrD,YAAA,EAAc,OAAO,YAAA,IAAgB;AAAA,KACxC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CACL,KAAA,EACA,OAAA,EACA,OAAA,EACK;AACL,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU;AAElC,IAAA,MAAM,KAAA,GACH,KAAA,KAAU,QAAA,CAAS,KAAA,GACd,OAAA,CAAQ,KAAA,GACR,KAAA,KAAU,QAAA,CAAS,IAAA,GACjB,OAAA,CAAQ,IAAA,GACR,OAAA,CAAQ,GAAA;AAElB,IAAA,KAAA,CAAM,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAA,EAAuB;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,YAAA,GACvB,EAAE,GAAG,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM,GACvC,KAAA,CAAM,OAAA;AAEX,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,QAAA,EAAmC;AACpD,IAAA,QAAQ,QAAA;AAAU,MACf,KAAK,aAAA,CAAc,OAAA;AAAA,MACnB,KAAK,aAAA,CAAc,MAAA;AAChB,QAAA,OAAO,QAAA,CAAS,KAAA;AAAA,MACnB,KAAK,aAAA,CAAc,UAAA;AAChB,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MACnB,KAAK,aAAA,CAAc,MAAA;AAAA,MACnB,KAAK,aAAA,CAAc,SAAA;AAChB,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MACnB,KAAK,aAAA,CAAc,KAAA;AAAA,MACnB,KAAK,aAAA,CAAc,UAAA;AAChB,QAAA,OAAO,QAAA,CAAS,KAAA;AAAA,MACnB;AACG,QAAA,OAAO,QAAA,CAAS,KAAA;AAAA;AACtB,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACH,QAAA,EACA,OAAA,GAA4C,EAAC,EAC3B;AAClB,IAAA,MAAM,aAAa,QAAA,CAAS,MAAA;AAC5B,IAAA,MAAM,WAAA,GAA4B;AAAA,MAC/B,GAAG,OAAA;AAAA,MACH,UAAA;AAAA,MACA,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,QAAA,CAAS;AAAA,KAC1C;AAGA,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI;AACD,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,YAAA,GAAe,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AACzC,MAAA,WAAA,CAAY,YAAA,GAAe,YAAA;AAAA,IAC9B,CAAA,CAAA,MAAQ;AAAA,IAER;AAGA,IAAA,MAAM,YAAA,GACH,YAAA,IACA,OAAO,YAAA,KAAiB,YACxB,SAAA,IAAa,YAAA,GACR,MAAA,CAAO,YAAA,CAAa,OAAO,CAAA,GAC3B,CAAA,KAAA,EAAQ,UAAU,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA,CAAA;AAGlD,IAAA,IAAI,eAAe,GAAA,EAAK;AACrB,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AACrD,MAAA,OAAO,IAAI,cAAA;AAAA,QACR,YAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA,GAAa,QAAA,CAAS,UAAA,EAAY,EAAE,CAAA,GAAI;AAAA,OAC3C;AAAA,IACH;AAEA,IAAA,IAAI,eAAe,GAAA,EAAK;AACrB,MAAA,OAAO,IAAI,aAAA,CAAc,YAAA,EAAc,WAAW,CAAA;AAAA,IACrD;AAEA,IAAA,IAAI,cAAc,GAAA,EAAK;AACpB,MAAA,OAAO,IAAI,WAAA,CAAY,YAAA,EAAc,WAAW,CAAA;AAAA,IACnD;AAEA,IAAA,IAAI,cAAc,GAAA,EAAK;AACpB,MAAA,OAAO,IAAI,WAAA,CAAY,YAAA,EAAc,WAAW,CAAA;AAAA,IACnD;AAGA,IAAA,IACG,YAAA,IACA,OAAO,YAAA,KAAiB,QAAA,IACxB,aAAa,YAAA,EACd;AACC,MAAA,OAAO,IAAI,QAAA,CAAS,YAAA,EAAc,WAAW,CAAA;AAAA,IAChD;AAGA,IAAA,OAAO,IAAI,QAAA,CAAS,YAAA,EAAc,aAAA,CAAc,QAAQ,WAAW,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,CAAU,KAAA,EAAgB,OAAA,GAAwB,EAAC,EAAa;AAC7D,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC5B,MAAA,OAAO,KAAA;AAAA,IACV;AAEA,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAEzB,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,SAAS,cAAA,EAAgB;AAC9D,QAAA,OAAO,IAAI,YAAA,CAAa,KAAA,CAAM,OAAA,EAAS;AAAA,UACpC,GAAG,OAAA;AAAA,UACH,KAAA,EAAO;AAAA,SACT,CAAA;AAAA,MACJ;AAGA,MAAA,OAAO,IAAI,QAAA,CAAS,KAAA,CAAM,OAAA,EAAS,cAAc,OAAA,EAAS;AAAA,QACvD,GAAG,OAAA;AAAA,QACH,KAAA,EAAO;AAAA,OACT,CAAA;AAAA,IACJ;AAGA,IAAA,OAAO,IAAI,QAAA;AAAA,MACR,2BAAA;AAAA,MACA,aAAA,CAAc,OAAA;AAAA,MACd,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,KAAA;AAAM,KAC9B;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,MAAA,EAAoC;AAC3C,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,MAAA,EAAO;AAAA,EAC7C;AACH,CAAA;AAKmC,IAAI,YAAA;;;ACrVhC,IAAM,aAAA,GAA6C;AAAA,EACvD,UAAA,EAAY,6BAAA;AAAA,EACZ,YAAA,EAAc,iCAAA;AAAA,EACd,OAAA,EAAS;AACZ,CAAA;;;AChBA,IAAM,cAAA,GAA4C;AAAA,EAC/C,OAAA,EAAS,6BAAA;AAAA,EACT,SAAS,SAAA,CAAU,OAAA;AAAA,EACnB,OAAA,EAAS;AAAA,IACN,MAAA,EAAQ;AAAA,GACX;AAAA,EACA,UAAU,SAAA,CAAU;AACvB,CAAA;AAQO,IAAM,YAAN,MAAgB;AAAA,EACZ,MAAA;AAAA,EACA,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,WAAA,CAAY,SAAgC,WAAA,EAA2B;AACpE,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,cAAA,EAAe;AAGlC,IAAA,IAAI,OAAA,IAAW,WAAW,aAAA,EAAe;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA,GAAU,aAAA,CAAc,OAAsB,CAAA;AAAA,IAC7D,WAAW,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAO,OAAA,GAAU,OAAA;AAAA,IACzB;AAGA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,YAAA,CAAa,WAAW,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,QAAA,CACL,UACA,MAAA,EACO;AAEP,IAAA,MAAM,aAAA,GAAgB,SAAS,UAAA,CAAW,GAAG,IACxC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,GAChB,QAAA;AACL,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,aAAA,EAAe,GAAG,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,CAAA,CAAG,CAAA;AAC5D,IAAA,IAAI,MAAA,EAAQ;AACT,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC9C,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACxC,UAAA,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC7C;AAAA,MACH,CAAC,CAAA;AAAA,IACJ;AACA,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,GAAA,CACH,QAAA,EACA,MAAA,EACwB;AACxB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,MAAM,CAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,SAAA,GAAY,UAAA;AAAA,MACf,MAAM,WAAW,KAAA,EAAM;AAAA,MACvB,KAAK,MAAA,CAAO;AAAA,KACf;AAEA,IAAA,IAAI;AACD,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC/B,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACN,GAAG,KAAK,MAAA,CAAO,OAAA;AAAA,UACf,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,SAClC;AAAA,QACA,QAAQ,UAAA,CAAW;AAAA,OACrB,CAAA;AAED,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACf,QAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,YAAA,CAAa,aAAa,QAAA,EAAU;AAAA,UAC1D,QAAA,EAAU;AAAA,SACZ,CAAA;AACD,QAAA,IAAA,CAAK,YAAA,CAAa,IAAI,KAAK,CAAA;AAC3B,QAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,MACnC;AAEA,MAAA,OAAO,EAAE,IAAA,EAAO,MAAM,SAAS,IAAA,EAAK,EAAS,QAAQ,SAAA,EAAU;AAAA,IAClE,SAAS,KAAA,EAAO;AACb,MAAA,YAAA,CAAa,SAAS,CAAA;AAGtB,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC5B,QAAA,IAAA,CAAK,YAAA,CAAa,IAAI,KAAK,CAAA;AAC3B,QAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,MACnC;AAGA,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACxD,QAAA,QAAA,GAAW,IAAI,QAAA;AAAA,UACZ,iBAAA;AAAA,UACA,aAAA,CAAc,MAAA;AAAA,UACd;AAAA,YACG;AAAA;AACH,SACH;AAAA,MACH,CAAA,MAAO;AAEJ,QAAA,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,KAAA,EAAO;AAAA,UAC3C,QAAA;AAAA,UACA,MAAA,EAAQ;AAAA,SACV,CAAA;AAAA,MACJ;AAEA,MAAA,IAAA,CAAK,YAAA,CAAa,IAAI,QAAQ,CAAA;AAC9B,MAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,QAAA,EAAS;AAAA,IAC7C;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAuB,MAAA,EAAoC;AACxD,IAAA,IAAA,CAAK,YAAA,CAAa,UAAU,MAAM,CAAA;AAAA,EACrC;AACH,CAAA;AAUO,SAAS,eAAA,CACb,SACA,WAAA,EACU;AACV,EAAA,OAAO,IAAI,SAAA,CAAU,OAAA,EAAS,WAAW,CAAA;AAC5C;AAKA,IAAM,SAAA,GAAY,gBAAgB,SAAS,CAAA;AAKnB,gBAAgB,YAAY;AAEpD,IAAO,cAAA,GAAQ,SAAA;;;AC7LR,IAAM,YAAA,GAAe,kBAAA;AAOrB,IAAM,UAAU,CAAC,IAAA,KACrB,IAAI,IAAA,CAAK,eAAe,OAAA,EAAS;AAAA,EAC9B,QAAA,EAAU,YAAA;AAAA,EACV,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EACP,GAAA,EAAK;AACR,CAAC,CAAA,CAAE,OAAO,IAAI,CAAA;AAMV,IAAM,cAAA,GAAiB,MAAc,OAAA,iBAAQ,IAAI,MAAM,CAAA;AA2BvD,IAAM,UAAU,CAAC,IAAA,KACrB,IAAI,IAAA,CAAK,eAAe,OAAA,EAAS;AAAA,EAC9B,QAAA,EAAU,YAAA;AAAA,EACV,IAAA,EAAM;AACT,CAAC,CAAA,CAAE,OAAO,IAAI,CAAA;AAMV,IAAM,cAAA,GAAiB,MAAc,OAAA,iBAAQ,IAAI,MAAM,CAAA;AAOvD,IAAM,SAAA,GAAY,CAAC,IAAA,KAAgC;AACvD,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS;AAAA,IAC7C,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT,EAAE,aAAA,CAAc,IAAA,YAAgB,OAAO,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,IAAA,KAAS,OAAO,CAAA,EAAG,KAAA;AAC5D,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,IAAA,KAAS,MAAM,CAAA,EAAG,KAAA;AAC1D,EAAA,IAAI,CAAC,IAAA,EAAM;AACR,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,KAAA,IAAS,QAAA,CAAS,KAAA,EAAO,EAAE,IAAI,CAAA,EAAG;AACnC,IAAA,OAAA,CAAQ,IAAI,KAAA,EAAO,QAAA,CAAS,KAAA,EAAO,EAAE,IAAI,CAAC,CAAA;AAC1C,IAAA,OAAO,GAAG,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA,GAAI,CAAC,GAAG,IAAI,CAAA,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,GAAG,IAAI,CAAA,EAAG,SAAS,IAAA,EAAM,EAAE,IAAI,CAAC,CAAA,CAAA;AAC1C,CAAA;AAMO,IAAM,gBAAA,GAAmB,MAAc,SAAA,iBAAU,IAAI,MAAM,CAAA;AAGtC,gBAAA,IAAI,IAAA;AAAA,EAC7B,GAAG,gBAAA,EAAiB,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,MAAA;AACpC;;;AC/FA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AACO,IAAM,wBAAA,GAA2B;AAAA;AAAA,EAErC,KAAA,EAAO,WAAA;AAAA;AAAA,EAEP,EAAA,EAAI,OAAA;AAAA;AAAA,EAEJ,EAAA,EAAI,eAAA;AAAA;AAAA,EAEJ,EAAA,EAAI;AACP,CAAA;AAGO,IAAM,oBAAA,GAAuB;AAAA;AAAA,EAEjC,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,IAAA,EAAM,MAAA;AAAA;AAAA,EAEN,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,IAAA,EAAM;AACT,CAAA;AAGO,IAAM,oBAAA,GAAuB,oBAAA;AAG7B,IAAM,yBAAA,GAA4B;AAAA;AAAA,EAEtC,SAAA,EAAW,WAAA;AAAA;AAAA,EAEX,eAAA,EAAiB,iBAAA;AAAA;AAAA,EAEjB,QAAA,EAAU,OAAA;AAAA;AAAA,EAEV,WAAA,EAAa;AAChB,CAAA;AAGO,IAAM,sBAAA,GAAyB;AAAA;AAAA,EAEnC,KAAA,EAAO,OAAA;AAAA;AAAA,EAEP,IAAA,EAAM;AACT,CAAA;AAGO,IAAM,kBAAA,GAAqB;AAAA;AAAA,EAE/B,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,GAAA,EAAK,UAAA;AAAA;AAAA,EAEL,GAAA,EAAK;AACR,CAAA;AAGO,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEhC,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,EAAA,EAAI,IAAA;AAAA;AAAA,EAEJ,EAAA,EAAI,IAAA;AAAA;AAAA,EAEJ,EAAA,EAAI;AACP,CAAA;AAGO,IAAM,iBAAA,GAAoB;AAAA;AAAA,EAE9B,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,UAAA,EAAY,UAAA;AAAA;AAAA,EAEZ,OAAA,EAAS,OAAA;AAAA;AAAA,EAET,OAAA,EAAS,OAAA;AAAA;AAAA,EAET,OAAA,EAAS;AACZ,CAAA;AAGO,IAAM,oBAAA,GAAuB;AAAA;AAAA,EAEjC,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,SAAA,EAAW,SAAA;AAAA;AAAA,EAEX,OAAA,EAAS,OAAA;AAAA;AAAA,EAET,OAAA,EAAS;AACZ,CAAA;AAGO,IAAM,uBAAA,GAA0B;AAAA;AAAA,EAEpC,KAAA,EAAO,OAAA;AAAA;AAAA,EAEP,QAAA,EAAU,QAAA;AAAA;AAAA,EAEV,YAAA,EAAc,YAAA;AAAA;AAAA,EAEd,UAAA,EAAY;AACf,CAAA;AAGO,IAAM,wBAAA,GAA2B;AAAA;AAAA,EAErC,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,CAAA,EAAG,OAAA;AAAA;AAAA,EAEH,KAAA,EAAO;AACV,CAAA;AAGO,IAAM,gBAAA,GAAmB;AAAA;AAAA,EAE7B,EAAA,EAAI,WAAA;AAAA;AAAA,EAEJ,EAAA,EAAI,WAAA;AAAA;AAAA,EAEJ,EAAA,EAAI;AACP,CAAA;;;AC7HA,IAAA,kBAAA,GAAA,EAAA;;;ACAA,IAAA,WAAA,GAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAMO,IAAM,SAAA,GAAY;AAAA;AAAA,EAEtB,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,CAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK;AACR,CAAA;AAEO,IAAM,mBAAmB,MAAA,CAAO,WAAA;AAAA,EACpC,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,KAAA,EAAO,GAAG,CAAC;AAC/D,CAAA;AAQO,IAAM,iBAAA,GAAoB;AAAA;AAAA,EAE9B,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK,EAAA;AAAA;AAAA,EAEL,GAAA,EAAK;AACR,CAAA;AAEO,IAAM,2BAA2B,MAAA,CAAO,WAAA;AAAA,EAC5C,MAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,KAAA,EAAO,GAAG,CAAC;AACvE,CAAA;AAOO,IAAM,YAAA,GAAe;AAAA,EACzB,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,OAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU;AACvB,CAAA;AAKO,IAAM,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","file":"index.cjs","sourcesContent":["/**\n * Game Center API exports\n * NHL Game Center API endpoints for accessing game, player, team, draft, and miscellaneous information\n */\nexport * as draft from './draft.ts';\nexport * as game from './game.ts';\nexport * as misc from './misc.ts';\nexport * as player from './player.ts';\nexport * from './score.ts';\nexport * as team from './team.ts';\n","/**\n * @module api/gamecenter/draft\n * @description Draft-related API endpoints for accessing NHL draft picks, rankings, and tracker information\n */\n\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { type NHLError, ValidationError } from '#/errors/index.ts';\nimport type {\n DraftPicks,\n DraftRankings,\n DraftRound,\n DraftTracker,\n Year,\n} from '#/types/index.ts';\nimport { getCurrentYear } from '#/utils/date.ts';\nimport {\n DraftParams,\n isParseError,\n Year as YearType,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\nimport { _draftPaths as _paths } from './_paths.ts';\n\n/**\n * Get draft picks for a specific year and round, or all picks for a year\n * @param year - The draft year (defaults to current year if not provided)\n * @param round - The draft round (1-7). If omitted, returns the first round picks for the year\n * @returns Promise resolving to draft picks for the specified year and round\n * @example\n * ```ts\n * // Get all draft picks for 2023\n * picks(2023).then((data) => console.log(data));\n *\n * // Get first round picks for 2023\n * picks(2023, 1).then((data) => console.log(data));\n * ```\n */\nexport async function picks(\n year?: Year,\n round?: DraftRound,\n): Promise<APIResponse<DraftPicks>> {\n const parsed = DraftParams({ year, round });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.draftPicks.byYearAndRound,\n }),\n };\n }\n if (parsed.year && !parsed.round)\n return nhlClient.get(route(_paths.draftPicks.byYear, parsed));\n\n return nhlClient.get(route(_paths.draftPicks.byYearAndRound, parsed));\n}\n\n/**\n * Get current draft tracker information for live draft coverage\n * @returns Promise resolving to current draft tracker data, including live pick information\n * @example\n * ```ts\n * tracker().then((data) => console.log(data));\n * ```\n */\nexport async function tracker(): Promise<APIResponse<DraftTracker>> {\n return nhlClient.get(_paths.draftTracker);\n}\n/**\n * Access draft rankings by category (skaters/goalies, NA/International)\n * @param year - The draft year (defaults to current year if not provided)\n * @returns Object with methods to get rankings by category\n * @example\n * ```ts\n * // Get North American skater rankings for 2024\n * rankings(2024).skatersNA().then((data) => console.log(data));\n *\n * // Get all rankings for 2024\n * rankings(2024).all().then((allRankings) => console.log(allRankings));\n * ```\n */\nexport function rankings(year?: Year): {\n skatersNA: () => Promise<APIResponse<DraftRankings>>;\n skatersIntl: () => Promise<APIResponse<DraftRankings>>;\n goaliesNA: () => Promise<APIResponse<DraftRankings>>;\n goaliesIntl: () => Promise<APIResponse<DraftRankings>>;\n all: () => Promise<APIResponse<DraftRankings[]>>;\n} {\n const DraftRankingsEnum = {\n skatersNA: '1',\n skatersIntl: '2',\n goaliesNA: '3',\n goaliesIntl: '4',\n } as const;\n const getRankings = async (\n type: '1' | '2' | '3' | '4',\n ): Promise<APIResponse<DraftRankings>> => {\n const parsedYear = YearType(year ?? getCurrentYear());\n if (isParseError(parsedYear)) {\n return {\n status: 'error',\n error: new ValidationError(parsedYear.summary, {\n endpoint: _paths.draftRankings,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.draftRankings, {\n year: parsedYear,\n type,\n }),\n );\n };\n\n return {\n /**\n * Get North American skater draft rankings\n * @returns Promise resolving to NA skater rankings\n */\n skatersNA: async (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.skatersNA),\n /**\n * Get International skater draft rankings\n * @returns Promise resolving to International skater rankings\n */\n skatersIntl: async (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.skatersIntl),\n /**\n * Get North American goalie draft rankings\n * @returns Promise resolving to NA goalie rankings\n */\n goaliesNA: async (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.goaliesNA),\n /**\n * Get International goalie draft rankings\n * @returns Promise resolving to International goalie rankings\n */\n goaliesIntl: async (): Promise<APIResponse<DraftRankings>> =>\n getRankings(DraftRankingsEnum.goaliesIntl),\n /**\n * Get all draft rankings (NA/Intl skaters and goalies)\n * @returns Promise resolving to array of all rankings\n */\n all: async (): Promise<APIResponse<DraftRankings[]>> => {\n const unwrapAPIResponse = (\n apiResponse: APIResponse<unknown>,\n ): DraftRankings => {\n if (apiResponse.status === 'success') {\n return apiResponse.data as DraftRankings;\n }\n throw apiResponse.error;\n };\n\n const response = await Promise.all([\n getRankings(DraftRankingsEnum.skatersNA),\n getRankings(DraftRankingsEnum.skatersIntl),\n getRankings(DraftRankingsEnum.goaliesNA),\n getRankings(DraftRankingsEnum.goaliesIntl),\n ]);\n try {\n const dataOnly = response.map((r) => unwrapAPIResponse(r));\n const newResponse: APIResponse<DraftRankings[]> = {\n status: 'success',\n data: dataOnly,\n };\n return newResponse;\n } catch (error) {\n return {\n status: 'error',\n error: error as NHLError,\n };\n }\n },\n };\n}\n","/**\n * Environment Variable Configuration\n * Simple configuration system for NHL API client based on environment variables\n *\n * Supported environment variables:\n * - NHLE_API_TIMEOUT: Request timeout in milliseconds (default: 5000)\n * - NHLE_API_LANGUAGE: Language code 'en' or 'fr' (default: 'en')\n * - NHLE_API_LOGLEVEL: Logging level 'silent', 'error', 'warn', 'info', 'debug' (default: 'warn')\n *\n * @example\n * // In .env or shell\n * NHLE_API_TIMEOUT=10000\n * NHLE_API_LANGUAGE=fr\n * NHLE_API_LOGLEVEL=debug\n *\n * @module config/env\n */\n\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';\n\n/**\n * Parse timeout from environment variable\n * @internal\n */\nfunction parseTimeout(): number {\n const timeout = process.env.NHLE_API_TIMEOUT;\n if (!timeout) return 5000;\n\n const parsed = parseInt(timeout, 10);\n if (Number.isNaN(parsed) || parsed <= 0) {\n console.warn(\n `Invalid NHLE_API_TIMEOUT: \"${timeout}\". Using default 5000ms`,\n );\n return 5000;\n }\n return parsed;\n}\n\n/**\n * Parse language from environment variable\n * @internal\n */\nfunction parseLanguage(): 'en' | 'fr' {\n const language = process.env.NHLE_API_LANGUAGE?.toLowerCase();\n if (language === 'fr') return 'fr';\n if (language && language !== 'en') {\n console.warn(\n `Invalid NHLE_API_LANGUAGE: \"${language}\". Using default 'en'`,\n );\n }\n return 'en';\n}\n\n/**\n * Parse log level from environment variable\n * @internal\n */\nfunction parseLogLevel(): LogLevel {\n const logLevel = process.env.NHLE_API_LOGLEVEL?.toLowerCase();\n const validLevels: LogLevel[] = [\n 'silent',\n 'error',\n 'warn',\n 'info',\n 'debug',\n ];\n\n if (!logLevel) return 'warn';\n if (validLevels.includes(logLevel as LogLevel)) {\n return logLevel as LogLevel;\n }\n\n console.warn(\n `Invalid NHLE_API_LOGLEVEL: \"${logLevel}\". Valid options: ${validLevels.join(', ')}. Using default 'warn'`,\n );\n return 'warn';\n}\n\n/**\n * Environment-based configuration for NHL API client\n * Reads from process.env at initialization time\n */\nexport const envConfig = {\n /**\n * Request timeout in milliseconds\n * Set via NHLE_API_TIMEOUT environment variable\n * @default 5000\n */\n timeout: parseTimeout(),\n\n /**\n * Language code for API responses\n * Set via NHLE_API_LANGUAGE environment variable\n * @default 'en'\n */\n language: parseLanguage() as 'en' | 'fr',\n\n /**\n * Logging level for the client\n * Set via NHLE_API_LOGLEVEL environment variable\n * @default 'warn'\n */\n logLevel: parseLogLevel(),\n};\n\n/**\n * Log current environment configuration (useful for debugging)\n * Only logs if environment variables are explicitly set\n */\nexport function logEnvConfig(): void {\n const vars = {\n timeout: process.env.NHLE_API_TIMEOUT,\n language: process.env.NHLE_API_LANGUAGE,\n logLevel: process.env.NHLE_API_LOGLEVEL,\n };\n\n const configured = Object.entries(vars).filter(\n ([, v]) => v !== undefined,\n );\n if (configured.length > 0) {\n console.debug('NHL API Environment Configuration:', {\n ...Object.fromEntries(configured),\n resolvedTimeout: envConfig.timeout,\n resolvedLanguage: envConfig.language,\n resolvedLogLevel: envConfig.logLevel,\n });\n }\n}\n","/**\n * Error handling module for NHL Sports Data API wrapper\n * Provides structured error classification and logging for API interactions\n */\n\nexport const ErrorCategory = {\n /** Network-level errors (connection refused, timeout, etc.) */\n NETWORK: 'NETWORK',\n\n /** HTTP 4xx client errors (invalid params, not found, etc.) */\n CLIENT: 'CLIENT',\n\n /** HTTP 5xx server errors */\n SERVER: 'SERVER',\n\n /** Rate limiting (HTTP 429) */\n RATE_LIMIT: 'RATE_LIMIT',\n\n /** Valid HTTP response but with error payload */\n API_ERROR: 'API_ERROR',\n\n /** Response parsing/validation failures */\n PARSE: 'PARSE',\n\n /** Invalid user input or configuration */\n VALIDATION: 'VALIDATION',\n} as const;\n\nexport type ErrorCategory =\n (typeof ErrorCategory)[keyof typeof ErrorCategory];\n\nexport const LogLevel = {\n NONE: 0,\n ERROR: 1,\n WARN: 2,\n INFO: 3,\n DEBUG: 4,\n};\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\nexport interface ErrorContext {\n /** HTTP status code if applicable */\n statusCode?: number;\n\n /** Original error object */\n cause?: unknown;\n\n /** Request URL or endpoint */\n endpoint?: string;\n\n /** Request method */\n method?: string;\n\n /** Request parameters */\n params?: Record<string, unknown>;\n\n /** Response body if available */\n responseBody?: unknown;\n\n /** Timestamp of error */\n timestamp?: Date;\n\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ErrorConfig {\n /** Logging level for error output */\n logLevel?: LogLevel;\n\n /** Custom logger function */\n logger?: (\n level: LogLevel,\n message: string,\n context?: ErrorContext,\n ) => void;\n\n /** Whether to include stack traces */\n includeStack?: boolean;\n}\n\n/**\n * Base error class for all NHL API errors\n */\nexport class NHLError extends Error {\n public readonly category: ErrorCategory;\n public readonly context: ErrorContext;\n\n constructor(\n message: string,\n category: ErrorCategory,\n context: ErrorContext = {},\n ) {\n super(message);\n this.name = this.constructor.name;\n this.category = category;\n this.context = {\n ...context,\n timestamp: context.timestamp || new Date(),\n };\n\n // Maintain proper stack trace\n Error.captureStackTrace?.(this, this.constructor);\n }\n\n /**\n * Serialize error to JSON\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n category: this.category,\n context: this.context,\n ...(this.stack && { stack: this.stack }),\n };\n }\n}\n\n/**\n * Network-level errors (timeouts, connection failures)\n */\nexport class NetworkError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.NETWORK, context);\n }\n}\n\n/**\n * HTTP 4xx client errors\n */\nexport class ClientError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.CLIENT, context);\n }\n}\n\n/**\n * HTTP 404 resource not found\n */\nexport class NotFoundError extends ClientError {\n constructor(\n message: string = 'Resource not found',\n context: ErrorContext = {},\n ) {\n super(message, { ...context, statusCode: context.statusCode || 404 });\n }\n}\n\n/**\n * HTTP 5xx server errors\n */\nexport class ServerError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.SERVER, context);\n }\n}\n\n/**\n * HTTP 429 rate limit errors\n */\nexport class RateLimitError extends NHLError {\n public readonly retryAfter?: number;\n\n constructor(\n message: string = 'Rate limit exceeded',\n context: ErrorContext = {},\n retryAfter?: number,\n ) {\n super(message, ErrorCategory.RATE_LIMIT, {\n ...context,\n statusCode: context.statusCode || 429,\n });\n this.retryAfter = retryAfter || 0;\n }\n}\n\n/**\n * API returned 200 but with error message in JSON payload\n */\nexport class APIError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.API_ERROR, context);\n }\n}\n\n/**\n * Response parsing or validation failures\n */\nexport class ParseError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.PARSE, context);\n }\n}\n\n/**\n * Invalid user input or configuration\n */\nexport class ValidationError extends NHLError {\n constructor(message: string, context: ErrorContext = {}) {\n super(message, ErrorCategory.VALIDATION, context);\n }\n}\n\n/**\n * Error handler utility class\n */\nexport class ErrorHandler {\n private config: Required<ErrorConfig>;\n\n constructor(config: ErrorConfig = {}) {\n this.config = {\n logLevel: config.logLevel ?? LogLevel.ERROR,\n logger: config.logger ?? this.defaultLogger.bind(this),\n includeStack: config.includeStack ?? true,\n };\n }\n\n /**\n * Default console-based logger\n */\n private defaultLogger(\n level: LogLevel,\n message: string,\n context?: ErrorContext,\n ): void {\n if (level > this.config.logLevel) return;\n\n const logFn =\n level === LogLevel.ERROR\n ? console.error\n : level === LogLevel.WARN\n ? console.warn\n : console.log;\n\n logFn(`[NHL API] ${message}`, context);\n }\n\n /**\n * Log an error based on configuration\n */\n log(error: NHLError): void {\n const level = this.getLogLevel(error.category);\n const context = this.config.includeStack\n ? { ...error.context, stack: error.stack }\n : error.context;\n\n this.config.logger(level, error.message, context);\n }\n\n /**\n * Determine log level based on error category\n */\n private getLogLevel(category: ErrorCategory): LogLevel {\n switch (category) {\n case ErrorCategory.NETWORK:\n case ErrorCategory.SERVER:\n return LogLevel.ERROR;\n case ErrorCategory.RATE_LIMIT:\n return LogLevel.WARN;\n case ErrorCategory.CLIENT:\n case ErrorCategory.API_ERROR:\n return LogLevel.INFO;\n case ErrorCategory.PARSE:\n case ErrorCategory.VALIDATION:\n return LogLevel.DEBUG;\n default:\n return LogLevel.ERROR;\n }\n }\n\n /**\n * Create error from HTTP response\n */\n async fromResponse(\n response: Response,\n context: Omit<ErrorContext, 'statusCode'> = {},\n ): Promise<NHLError> {\n const statusCode = response.status;\n const baseContext: ErrorContext = {\n ...context,\n statusCode,\n endpoint: context.endpoint || response.url,\n };\n\n // Try to parse response body\n let responseBody: unknown;\n try {\n const text = await response.text();\n responseBody = text ? JSON.parse(text) : null;\n baseContext.responseBody = responseBody;\n } catch {\n // Response body not parseable as JSON\n }\n\n // Extract error message from JSON response if available\n const errorMessage =\n responseBody &&\n typeof responseBody === 'object' &&\n 'message' in responseBody\n ? String(responseBody.message)\n : `HTTP ${statusCode}: ${response.statusText}`;\n\n // Classify by status code\n if (statusCode === 429) {\n const retryAfter = response.headers.get('Retry-After');\n return new RateLimitError(\n errorMessage,\n baseContext,\n retryAfter ? parseInt(retryAfter, 10) : undefined,\n );\n }\n\n if (statusCode === 404) {\n return new NotFoundError(errorMessage, baseContext);\n }\n\n if (statusCode >= 500) {\n return new ServerError(errorMessage, baseContext);\n }\n\n if (statusCode >= 400) {\n return new ClientError(errorMessage, baseContext);\n }\n\n // 200-level response with error in JSON body\n if (\n responseBody &&\n typeof responseBody === 'object' &&\n 'message' in responseBody\n ) {\n return new APIError(errorMessage, baseContext);\n }\n\n // Fallback\n return new NHLError(errorMessage, ErrorCategory.CLIENT, baseContext);\n }\n\n /**\n * Create error from caught exception\n */\n fromError(error: unknown, context: ErrorContext = {}): NHLError {\n if (error instanceof NHLError) {\n return error;\n }\n\n if (error instanceof Error) {\n // Network/fetch errors\n if (error.name === 'TypeError' || error.name === 'NetworkError') {\n return new NetworkError(error.message, {\n ...context,\n cause: error,\n });\n }\n\n // Generic error wrapper\n return new NHLError(error.message, ErrorCategory.NETWORK, {\n ...context,\n cause: error,\n });\n }\n\n // Unknown error type\n return new NHLError(\n 'An unknown error occurred',\n ErrorCategory.NETWORK,\n { ...context, cause: error },\n );\n }\n\n /**\n * Update configuration\n */\n configure(config: Partial<ErrorConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n\n/**\n * Default error handler instance\n */\nexport const defaultErrorHandler = new ErrorHandler();\n\n/**\n * Convenience function to create errors from responses\n */\nexport const fromResponse = (\n response: Response,\n context?: Omit<ErrorContext, 'statusCode'>,\n) => defaultErrorHandler.fromResponse(response, context);\n\n/**\n * Convenience function to create errors from exceptions\n */\nexport const fromError = (error: unknown, context?: ErrorContext) =>\n defaultErrorHandler.fromError(error, context);\n","/**\r\n * NHL API Client Type Definitions\r\n */\r\n\r\nimport type { NHLError } from '#/errors/index.ts';\r\n/**\r\n * Configuration options for the NHL API client\r\n */\r\nexport interface NHLClientConfig {\r\n /**\r\n * Base URL for the NHL API\r\n * @default 'https://api-web.nhle.com/v1'\r\n */\r\n baseUrl?: string;\r\n\r\n /**\r\n * Request timeout in milliseconds\r\n * @default 5000 (5 seconds)\r\n */\r\n timeout?: number;\r\n\r\n /**\r\n * Additional headers to include with every request\r\n */\r\n headers?: Record<string, string>;\r\n\r\n /**\r\n * Language code for localized responses\r\n * @default 'en' (English)\r\n */\r\n language?: 'en' | 'fr';\r\n}\r\n\r\n/**\r\n * Predefined API endpoints for different NHL services\r\n */\r\nexport type APIEndpoint = 'edge-adv' | 'edge-stats' | 'default';\r\n\r\n/**\r\n * Mapping of API endpoints to their base URLs\r\n */\r\nexport const API_BASE_URLS: Record<APIEndpoint, string> = {\r\n 'edge-adv': 'https://api-web.nhle.com/v1',\r\n 'edge-stats': 'https://api.nhle.com/stats/rest',\r\n default: 'https://api-web.nhle.com/v1',\r\n};\r\n\r\nexport interface NHLApiResponse<T> {\r\n data: T;\r\n status: number;\r\n statusText: string;\r\n headers: Record<string, string>;\r\n}\r\n\r\nexport type APIResponse<T> =\r\n | { status: 'success'; data: T }\r\n | { status: 'error'; error: NHLError };\r\n\r\n/**\r\n * NHL API error response structure\r\n * @deprecated Use NHLError class instead\r\n */\r\nexport interface NHLApiError {\r\n error: string;\r\n status: number;\r\n statusText: string;\r\n headers: Record<string, string>;\r\n}\r\n\r\n/**\r\n * NHL API client interface\r\n */\r\nexport interface NHLClient {\r\n /**\r\n * Send a GET request to the NHL API\r\n * @param endpoint - API endpoint path (will be appended to baseUrl)\r\n * @param params - Optional query parameters\r\n */\r\n get: <T = unknown>(\r\n endpoint: string,\r\n params?: Record<string, unknown>,\r\n ) => Promise<T>;\r\n}\r\n","/**\n * NHL API Client implementation\n * Internal client for making API requests to the NHL API\n */\n\nimport { envConfig } from '#/config/env.ts';\nimport {\n ErrorCategory,\n type ErrorConfig,\n ErrorHandler,\n NHLError,\n} from '#/errors/index.ts';\nimport type { APIEndpoint, APIResponse, NHLClientConfig } from './types.ts';\nimport { API_BASE_URLS } from './types.ts';\n\n/**\n * Extended configuration for the NHL API client including error handling\n */\nexport interface NHLClientWithErrorConfig extends NHLClientConfig {\n /**\n * Error handling configuration\n */\n errorConfig?: ErrorConfig;\n}\n\n/**\n * Default configuration for the NHL API client\n * Uses environment variables if set, otherwise falls back to sensible defaults\n */\nconst DEFAULT_CONFIG: Required<NHLClientConfig> = {\n baseUrl: 'https://api-web.nhle.com/v1',\n timeout: envConfig.timeout,\n headers: {\n Accept: 'application/json',\n },\n language: envConfig.language,\n};\n\n/**\n * NHL API Client class for making API requests to the NHL API\n * Provides methods for sending GET requests to the NHL API with automatic\n * URL construction, query parameter handling, timeout management, and\n * comprehensive error handling using the ErrorHandler utility.\n */\nexport class NHLClient {\n private config: Required<NHLClientConfig>;\n private errorHandler: ErrorHandler;\n\n /**\n * Creates a new NHL API client instance\n * @param baseURL - Optional custom base URL or predefined API endpoint key\n * @param errorConfig - Optional error handling configuration\n */\n constructor(baseURL?: string | APIEndpoint, errorConfig?: ErrorConfig) {\n this.config = { ...DEFAULT_CONFIG };\n\n // Check if baseURL is a predefined endpoint key\n if (baseURL && baseURL in API_BASE_URLS) {\n this.config.baseUrl = API_BASE_URLS[baseURL as APIEndpoint];\n } else if (baseURL) {\n this.config.baseUrl = baseURL;\n }\n\n // Initialize error handler with provided config\n this.errorHandler = new ErrorHandler(errorConfig);\n }\n\n /**\n * Helper to build URL with query parameters\n * @private\n */\n private buildUrl(\n endpoint: string,\n params?: Record<string, unknown>,\n ): string {\n // Ensure endpoint doesn't have leading slash for URL construction\n const cleanEndpoint = endpoint.startsWith('/')\n ? endpoint.slice(1)\n : endpoint;\n const url = new URL(cleanEndpoint, `${this.config.baseUrl}/`);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n return url.toString();\n }\n\n /**\n * Send a GET request to the NHL API\n * @param endpoint - API endpoint path\n * @param params - Optional query parameters\n * @returns Promise resolving to an APIResponse containing either data or error\n */\n async get<T = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n ): Promise<APIResponse<T>> {\n const url = this.buildUrl(endpoint, params);\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.config.timeout,\n );\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...this.config.headers,\n 'Accept-Language': this.config.language,\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = await this.errorHandler.fromResponse(response, {\n endpoint: url,\n });\n this.errorHandler.log(error);\n return { status: 'error', error };\n }\n\n return { data: (await response.json()) as T, status: 'success' };\n } catch (error) {\n clearTimeout(timeoutId);\n\n // If it's already an NHLError, return it\n if (error instanceof NHLError) {\n this.errorHandler.log(error);\n return { status: 'error', error };\n }\n\n // Handle AbortError (timeout)\n let nhlError: NHLError;\n if (error instanceof Error && error.name === 'AbortError') {\n nhlError = new NHLError(\n 'Request timeout',\n ErrorCategory.CLIENT,\n {\n endpoint,\n },\n );\n } else {\n // Convert other errors using ErrorHandler\n nhlError = this.errorHandler.fromError(error, {\n endpoint,\n method: 'GET',\n });\n }\n\n this.errorHandler.log(nhlError);\n return { status: 'error', error: nhlError };\n }\n }\n\n /**\n * Configure error handling behavior\n * @param config - Error configuration options\n */\n configureErrorHandling(config: Partial<ErrorConfig>): void {\n this.errorHandler.configure(config);\n }\n}\n\n/**\n * Factory function for backward compatibility\n * Creates a new NHL API client instance\n *\n * @param baseURL - Optional custom base URL or predefined API endpoint key\n * @param errorConfig - Optional error handling configuration\n * @returns A new NHL API client instance\n */\nexport function createNHLClient(\n baseURL?: string | APIEndpoint,\n errorConfig?: ErrorConfig,\n): NHLClient {\n return new NHLClient(baseURL, errorConfig);\n}\n\n/**\n * Default client instance for edge-adv API endpoints\n */\nconst nhlClient = createNHLClient('default');\n\n/**\n * Client instance for edge-stats API endpoints\n */\nconst edgeStatsClient = createNHLClient('edge-stats');\n\nexport default nhlClient;\nexport { edgeStatsClient };\n","/**\r\n * Date utility functions for NHL API\r\n * Provides functions for formatting dates and handling seasons\r\n */\r\n\r\nexport const NHL_TIMEZONE = 'America/New_York';\r\n\r\n/**\r\n * Formats a date object into a string in the format YYYY-MM-DD\r\n * @param date - The date object to format\r\n * @returns The formatted date string\r\n */\r\nexport const getDate = (date: Date): string =>\r\n new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n }).format(date);\r\n/**\r\n * Returns the current date formatted as YYYY-MM-DD.\r\n * This is a convenience method that calls getDate with the current date.\r\n * @returns The current date formatted as YYYY-MM-DD\r\n */\r\nexport const getCurrentDate = (): string => getDate(new Date());\r\n\r\n/**\r\n * Formats a date object into a string representing the month in YYYY-MM format\r\n * @param date - The date object to format\r\n * @returns The formatted month string\r\n */\r\nexport const getMonth = (date: Date): string => {\r\n return new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n month: '2-digit',\r\n }).format(date);\r\n};\r\n\r\n/**\r\n * Returns the current month formatted as YYYY-MM\r\n * This is a convenience method that calls getMonth with the current date\r\n * @returns The current month formatted as YYYY-MM\r\n */\r\nexport const getCurrentMonth = (): string => getMonth(new Date());\r\n\r\n/**\r\n * Formats a date object into a string representing the year in YYYY format\r\n * @param date - The date object to format\r\n * @returns The formatted year string\r\n */\r\nexport const getYear = (date: Date): string =>\r\n new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n }).format(date);\r\n/**\r\n * Returns the current year formatted as YYYY\r\n * This is a convenience method that calls getYear with the current date\r\n * @returns The current year formatted as YYYY\r\n */\r\nexport const getCurrentYear = (): string => getYear(new Date());\r\n/**\r\n * Returns the season associated with the specified date in the format yyyyYYYY (e.g., 20232024)\r\n * @param date - The date object to parse the season from\r\n * @returns The current season formatted as yyyyYYYY\\\r\n * @throws Error if the provided date is invalid\r\n */\r\nexport const getSeason = (date: string | Date): string => {\r\n const format = new Intl.DateTimeFormat('en-CA', {\r\n timeZone: NHL_TIMEZONE,\r\n year: 'numeric',\r\n month: 'numeric',\r\n }).formatToParts(date instanceof Date ? date : new Date(date));\r\n const month = format.find((part) => part.type === 'month')?.value;\r\n const year = format.find((part) => part.type === 'year')?.value;\r\n if (!year) {\r\n throw new Error('Invalid date provided, could not extract year');\r\n }\r\n if (month && parseInt(month, 10) < 7) {\r\n console.log(month, parseInt(month, 10) < 7);\r\n return `${parseInt(year, 10) - 1}${year}`;\r\n }\r\n return `${year}${parseInt(year, 10) + 1}`;\r\n};\r\n/**\r\n * Returns the current season in the format yyyyYYYY (e.g., 20232024)\r\n * This is a convenience method that calls getSeason with the current date\r\n * @returns The current season formatted as yyyyYYYY\r\n */\r\nexport const getCurrentSeason = (): string => getSeason(new Date());\r\n\r\nexport const NHL_START_DATE = new Date('1917-12-01');\r\nexport const NHL_END_DATE = new Date(\r\n `${getCurrentSeason().slice(4, 8)}-06-30`,\r\n);\r\n","/** Categories for save location top-10 list */\nexport const SaveLocationCategoryEnum = {\n /** Save Percentage */\n 'SV%': 'save-pctg',\n /** Saves */\n SV: 'saves',\n /** Shots Against */\n SA: 'shots-against',\n /** Goals Against */\n GA: 'goals-against',\n} as const;\n\n/** Sort options for shot location top-10 list */\nexport const ShotLocationSortEnum = {\n /** All shot locations */\n ALL: 'all',\n /** High-danger (i.e. close-range) shot locations */\n HIGH: 'high',\n /** Mid-range shot locations */\n MID: 'mid',\n /** Long-range shot locations */\n LONG: 'long',\n} as const;\n\n/** Alias for ShotLocationSortEnum */\nexport const SaveLocationSortEnum = ShotLocationSortEnum;\n\n/** Sort options for 5v5 save percentage top-10 list */\nexport const SavePercentage5v5SortEnum = {\n /**5v5 Save %: The percentage of shots a goalie stops at even strength (5-on-5). */\n '5v5-SV%': 'save-pctg',\n /**5v5 Save % in Close Situations: A “close situation” is the time during which a game is tied in the first or second period, or within one goal in the third period. This stats helps how goalies perform in high-pressure situations.*/\n '5v5-SV%-Close': 'save-pctg-close',\n /**5v5 Shots Against: The total number of shots a goalie faces at even strength (5-on-5).*/\n '5v5-SA': 'shots',\n /**5v5 Shots Against per 60 Minutes: The total number of shots a goalie faces at even strength (5-on-5) normalized to a 60-minute game. */\n '5v5-SA/60': 'shots-per-60',\n} as const;\n\n/** Sort options for save percentage top-10 list */\nexport const SavePercentageSortEnum = {\n /** Starts above .900 */\n GAMES: 'games',\n /** Percentage of starts above .900 */\n PCTG: 'pctg',\n} as const;\n\n/** Filter options for player positions */\nexport const PositionFilterEnum = {\n /** Center */\n ALL: 'all',\n /** Left Wing */\n FWD: 'forwards',\n /** Right Wing */\n DEF: 'defense',\n} as const;\n\n/** Categories for skater strength */\nexport const SkatersStrengthEnum = {\n /** All strengths */\n ALL: 'all',\n /** Even strength */\n ES: 'es',\n /** Power play */\n PP: 'pp',\n /** Short-handed */\n PK: 'pk',\n} as const;\n\n/** Sorting options for shot speed top-10 list */\nexport const ShotSpeedSortEnum = {\n /** Hardest shot recorded by player */\n MAX: 'max',\n /** Shots over 100 mph */\n 'OVER-100': 'over-100',\n /** Shots between 90 and 99 mph */\n '90-99': '90-99',\n /** Shots between 80 and 89 mph */\n '80-89': '80-89',\n /** Shots between 70 and 79 mph */\n '70-79': '70-79',\n} as const;\n\n/** Sorting options for skating speed top-10 list */\nexport const SkatingSpeedSortEnum = {\n /** Fastest skating speed recorded by player */\n TOP: 'max',\n /** Speed bursts recorded over 22 mph */\n 'OVER-22': 'over-22',\n /** Speed bursts recorded between 20 and 22 mph */\n '20-22': '20-22',\n /** Speed bursts recorded between 18 and 20 mph */\n '18-20': '18-20',\n} as const;\n\n/** Sorting options for skating distance top-10 list */\nexport const SkatingDistanceSortEnum = {\n /** Total distance skated */\n TOTAL: 'total',\n /** Average distance skated per 60 minutes */\n 'PER-60': 'per-60',\n /** Maximum distance skated in a single period */\n 'MAX-PERIOD': 'max-period',\n /** Maximum distance skated in a single game */\n 'MAX-GAME': 'max-game',\n};\n\n/** Categories for shot location top-10 list */\nexport const ShotLocationCategoryEnum = {\n /** Total shots on goal */\n SOG: 'sog',\n /** Total goals */\n G: 'goals',\n /** Shooting percentage */\n 'SH%': 'shooting-pctg',\n} as const;\n\n/** Sorting options for zone time top-10 lists. */\nexport const ZoneTimeSortEnum = {\n /** Percentage of time spent in the offensive zone */\n OZ: 'offensive',\n /** Percentage of time spent in the defensive zone */\n DZ: 'defensive',\n /** Percentage of time spent in the neutral zone */\n NZ: 'neutral',\n} as const;\n","","// Values are based on the NHL API documentation and other sources.\r\n// Last updated: 2025-10-23\r\n\r\n/**\r\n * All valid NHL team abbreviations and their corresponding team IDs.\r\n */\r\nexport const TeamsEnum = {\r\n /** Anaheim Ducks */\r\n ANA: 24,\r\n /** Boston Bruins */\r\n BOS: 6,\r\n /** Buffalo Sabres */\r\n BUF: 7,\r\n /** Calgary Flames */\r\n CGY: 20,\r\n /** Carolina Hurricanes */\r\n CAR: 12,\r\n /** Chicago Blackhawks */\r\n CHI: 16,\r\n /** Colorado Avalanche */\r\n COL: 21,\r\n /** Columbus Blue Jackets */\r\n CBJ: 29,\r\n /** Dallas Stars */\r\n DAL: 25,\r\n /** Detroit Red Wings */\r\n DET: 17,\r\n /** Edmonton Oilers */\r\n EDM: 22,\r\n /** Florida Panthers */\r\n FLA: 13,\r\n /** Los Angeles Kings */\r\n LAK: 26,\r\n /** Minnesota Wild*/\r\n MIN: 30,\r\n /** Montreal Canadiens */\r\n MTL: 8,\r\n /** New Jersey Devils */\r\n NJD: 1,\r\n /** Nashville Predators */\r\n NSH: 18,\r\n /** New York Islanders */\r\n NYI: 2,\r\n /** New York Rangers */\r\n NYR: 3,\r\n /** Ottawa Senators */\r\n OTT: 9,\r\n /** Philadelphia Flyers */\r\n PHI: 4,\r\n /** Pittsburgh Penguins */\r\n PIT: 5,\r\n /** San Jose Sharks */\r\n SJS: 28,\r\n /** Seattle Kraken */\r\n SEA: 55,\r\n /** St. Louis Blues */\r\n STL: 19,\r\n /** Tampa Bay Lightning */\r\n TBL: 14,\r\n /** Toronto Maple Leafs */\r\n TOR: 10,\r\n /** Utah Hockey Club */\r\n UTA: 59,\r\n /** Vancouver Canucks */\r\n VAN: 23,\r\n /** Vegas Golden Knights */\r\n VGK: 54,\r\n /** Winnipeg Jets */\r\n WPG: 52,\r\n /** Washington Capitals */\r\n WSH: 15,\r\n} as const;\r\n\r\nexport const TeamsReverseEnum = Object.fromEntries(\r\n Object.entries(TeamsEnum).map(([key, value]) => [value, key]),\r\n) as Record<\r\n (typeof TeamsEnum)[keyof typeof TeamsEnum],\r\n keyof typeof TeamsEnum\r\n>;\r\n\r\n/**\r\n * All inactive NHL teams and their corresponding team IDs.\r\n */\r\nexport const InactiveTeamsEnum = {\r\n /** Atlanta Flames (not active) */\r\n AFM: 47,\r\n /** Arizona Coyotes (not active) */\r\n ARI: 53,\r\n /** Atlanta Thrashers (not active) */\r\n ATL: 11,\r\n /** Brooklyn Americans - (not active) */\r\n BRK: 51,\r\n /** California Golden Seals (aka Bay Area Seals) - (not active) */\r\n CGS: 56,\r\n /** Cleveland Barons - (not active) */\r\n CLE: 49,\r\n /** Colorado Rockies - (not active) */\r\n CLR: 35,\r\n /** Detroit Cougars - (not active) */\r\n DCG: 40,\r\n /** Detroit Falcons - (not active) */\r\n DFL: 50,\r\n /** Hamilton Tigers - (not active) */\r\n HAM: 37,\r\n /** Hartford Whalers - (not active) */\r\n HFD: 34,\r\n /** Kansas City Scouts - (not active) */\r\n KCS: 48,\r\n /** Montreal Maroons - (not active) */\r\n MMR: 43,\r\n /** Minnesota North Stars - (not active) */\r\n MNS: 31,\r\n /** Montreal Wanderers - (not active) */\r\n MWN: 41,\r\n /** New York Americans - (not active) */\r\n NYA: 44,\r\n /** California Seals (aka Oakland Seals) - (not active) */\r\n OAK: 46,\r\n /** Phoenix Coyotes - (not active) */\r\n PHX: 27,\r\n /** Pittsburgh Pirates - (not active) */\r\n PIR: 38,\r\n /** Quebec Bulldogs - (not active) */\r\n QBD: 42,\r\n /** Philadelphia Quakers - (not active) */\r\n QUA: 39,\r\n /** Quebec Nordiques - (not active) */\r\n QUE: 32,\r\n /** Ottawa Senators (original franchise) - (not active) */\r\n SEN: 36,\r\n /** St. Louis Eagles - (not active) */\r\n SLE: 45,\r\n /** Toronto Hockey Club (aka Toronto Arenas) - (not active) */\r\n TAN: 57,\r\n /** Toronto St. Patricks - (not active) */\r\n TSP: 58,\r\n /** Winnipeg Jets (original franchise) - (not active) */\r\n WIN: 33,\r\n} as const;\r\n\r\nexport const InactiveTeamsReverseEnum = Object.fromEntries(\r\n Object.entries(InactiveTeamsEnum).map(([key, value]) => [value, key]),\r\n) as Record<\r\n (typeof InactiveTeamsEnum)[keyof typeof InactiveTeamsEnum],\r\n keyof typeof InactiveTeamsEnum\r\n>;\r\n/**\r\n * All valid NHL seasons in yyyyYYYY format.\r\n */\r\nexport const SeasonsArray = [\r\n 19171918, 19181919, 19191920, 19201921, 19211922, 19221923, 19231924,\r\n 19241925, 19251926, 19261927, 19271928, 19281929, 19291930, 19301931,\r\n 19311932, 19321933, 19331934, 19341935, 19351936, 19361937, 19371938,\r\n 19381939, 19391940, 19401941, 19411942, 19421943, 19431944, 19441945,\r\n 19451946, 19461947, 19471948, 19481949, 19491950, 19501951, 19511952,\r\n 19521953, 19531954, 19541955, 19551956, 19561957, 19571958, 19581959,\r\n 19591960, 19601961, 19611962, 19621963, 19631964, 19641965, 19651966,\r\n 19661967, 19671968, 19681969, 19691970, 19701971, 19711972, 19721973,\r\n 19731974, 19741975, 19751976, 19761977, 19771978, 19781979, 19791980,\r\n 19801981, 19811982, 19821983, 19831984, 19841985, 19851986, 19861987,\r\n 19871988, 19881989, 19891990, 19901991, 19911992, 19921993, 19931994,\r\n 19941995, 19951996, 19961997, 19971998, 19981999, 19992000, 20002001,\r\n 20012002, 20022003, 20032004, 20052006, 20062007, 20072008, 20082009,\r\n 20092010, 20102011, 20112012, 20122013, 20132014, 20142015, 20152016,\r\n 20162017, 20172018, 20182019, 20192020, 20202021, 20212022, 20222023,\r\n 20232024, 20242025, 20252026,\r\n] as const;\r\n\r\n/**\r\n * All valid NHL playoff series letters.\r\n */\r\nexport const SeriesLetterEnum = {\r\n /** Atlantic Division Round 1: D1 vs WC# */\r\n A: 'A',\r\n /** Atlantic Division Round 1: D2 vs D3 */\r\n B: 'B',\r\n /** Metropolitan Division Round 1: D1 vs WC# */\r\n C: 'C',\r\n /** Metropolitan Division Round 1: D2 vs D3 */\r\n D: 'D',\r\n /** Central Division Round 1: D1 vs WC# */\r\n E: 'E',\r\n /** Central Division Round 1: D2 vs D3 */\r\n F: 'F',\r\n /** Pacific Division Round 1: D1 vs WC# */\r\n G: 'G',\r\n /** Pacific Division Round 1: D2 vs D3 */\r\n H: 'H',\r\n /** Atlantic Division Round 2: Aw vs Bw */\r\n I: 'I',\r\n /** Metropolitan Division Round 2: Cw vs Dw */\r\n J: 'J',\r\n /** Central Division Round 2: Ew vs Fw */\r\n K: 'K',\r\n /** Pacific Division Round 2: Gw vs Hw */\r\n L: 'L',\r\n /** Eastern Conference Finals */\r\n M: 'M',\r\n /** Western Conference Finals*/\r\n N: 'N',\r\n /** Stanley Cup Finals */\r\n O: 'O',\r\n} as const;\r\n\r\n/**\r\n * All valid NHL playoff series letters grouped by round.\r\n */\r\nexport const SeriesLetterByRound = {\r\n R1: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],\r\n R2: ['I', 'J', 'K', 'L'],\r\n CF: ['M', 'N'],\r\n SCF: ['O'],\r\n};\r\n/**\r\n * All valid NHL playoff series letters mapped to human-readable names.\r\n */\r\nexport const PlayoffSeriesEnum = {\r\n Atlantic_R1_D1_vs_WC: 'A',\r\n Atlantic_R1_D2_vs_D3: 'B',\r\n Metropolitan_R1_D1_vs_WC: 'C',\r\n Metropolitan_R1_D2_vs_D3: 'D',\r\n Central_R1_D1_vs_WC: 'E',\r\n Central_R1_D2_vs_D3: 'F',\r\n Pacific_R1_D1_vs_WC: 'G',\r\n Pacific_R1_D2_vs_D3: 'H',\r\n Atlantic_R2_Aw_vs_Bw: 'I',\r\n Metropolitan_R2_Cw_vs_Dw: 'J',\r\n Central_R2_Ew_vs_Fw: 'K',\r\n Pacific_R2_Gw_vs_Hw: 'L',\r\n Eastern_Conference_Finals: 'M',\r\n Western_Conference_Finals: 'N',\r\n Stanley_Cup_Finals: 'O',\r\n};\r\n\r\n/**\r\n * All valid NHL game states.\r\n */\r\nexport const GameStateEnum = {\r\n /** Future */\r\n FUT: 'FUT',\r\n /** Live */\r\n LIV: 'LIV',\r\n /** Finished */\r\n FIN: 'FIN',\r\n} as const;\r\n\r\n/**\r\n * All valid NHL period types.\r\n */\r\nexport const PeriodTypeEnum = {\r\n /** Regulation */\r\n REG: 'REG',\r\n /** Overtime */\r\n OT: 'OT',\r\n /** Shootout */\r\n SO: 'SO',\r\n} as const;\r\n\r\n/**\r\n * All valid NHL game types.\r\n */\r\nexport const GameTypeEnum = {\r\n /** Pre-season */\r\n PRE: 1,\r\n /** Regular season */\r\n REG: 2,\r\n /** Post-season (aka playoffs) */\r\n POST: 3,\r\n /** All-Star Game (unconfirmed) */\r\n ASG: 4,\r\n /** International (unconfirmed) */\r\n INTL: 19,\r\n} as const;\r\n\r\n/** */\r\nexport const SEASON_RANGE = {\r\n START: SeasonsArray[0] as number,\r\n END: SeasonsArray.at(-1) as number,\r\n};\r\n/** */\r\nexport const START_SEASON = SEASON_RANGE.START;\r\n/** */\r\nexport const END_SEASON = SEASON_RANGE.END;\r\n/** */\r\nexport const YEAR_RANGE = {\r\n START: parseInt(SEASON_RANGE.START.toString().slice(0, 4), 10),\r\n END: parseInt(SEASON_RANGE.END.toString().slice(4, 8), 10),\r\n};\r\n/** */\r\nexport const START_YEAR = YEAR_RANGE.START;\r\n/** */\r\nexport const END_YEAR = YEAR_RANGE.END;\r\n/** */\r\nexport const CURRENT = {\r\n SEASON: SEASON_RANGE.END,\r\n YEAR: YEAR_RANGE.END,\r\n};\r\n/** */\r\nexport const PLAYER_ID_RANGE = { MIN: 8444000, MAX: 8489999 } as const;\r\n/** */\r\nexport const TEAM_ID_RANGE = { MIN: 1, MAX: 59 } as const;\r\n// export const TEAM_ID_RANGE = {\r\n// MIN: Object.values(TeamsEnum).reduce(\r\n// (min, team) => Math.min(min, team),\r\n// Infinity,\r\n// ),\r\n// MAX: Object.values(TeamsEnum).reduce(\r\n// (max, team) => Math.max(max, team),\r\n// -Infinity,\r\n// ),\r\n// } as const;\r\n","import * as EA from './edge-adv.ts';\nimport * as ES from './edge-stats.ts';\n\nexport const EDGE = { ...EA, ...ES };\nexport * as NHL from './nhl.ts';\n","import { type } from 'arktype';\nimport { EDGE, NHL } from '#/constants/index.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport { getCurrentDate } from '#/utils/date.ts';\n\nexport function isParseError(value: unknown): value is type.errors {\n return value instanceof type.errors;\n}\n\nexport function createValidationError(\n parsed: unknown,\n path: string,\n): ValidationError | null {\n if (parsed instanceof type.errors) {\n return new ValidationError(parsed.summary, { endpoint: path });\n }\n return null;\n}\n\nexport const Year = type(`${NHL.START_YEAR} <= number <= ${NHL.END_YEAR}`)\n .or(\n type('string.numeric.parse').narrow((v) => {\n return v >= NHL.START_YEAR && v <= NHL.END_YEAR;\n }),\n )\n .describe(`a valid year from ${NHL.START_YEAR} to ${NHL.END_YEAR}`);\n\nexport const NHLMonth = type('Date | string')\n .narrow((v) => {\n if (typeof v === 'string') {\n return /^\\d{4}-\\d{2}$/.test(v);\n } else if (v instanceof Date) {\n return true;\n }\n return false;\n })\n .pipe((v) => (typeof v === 'string' ? v : v.toISOString().slice(0, 7)))\n .describe(\n 'a valid month, either as a string (formatted as YYYY-MM) or a Date object',\n );\n\nexport const NHLDate = type('Date | string.date.iso')\n .pipe((v) =>\n typeof v === 'string'\n ? new Date(v).toISOString().slice(0, 10)\n : v.toISOString().slice(0, 10),\n )\n .describe(\n 'a valid date, either as a string (ISO date string) or a Date object',\n );\n\nexport const Season = type('number.integer | string.numeric.parse')\n .narrow((v): v is number => {\n const yr = Math.trunc(v / 10000);\n return typeof Year(yr) === 'number' && yr + 1 === v % 10000;\n })\n .pipe((v) => v.toString())\n .describe(`a valid NHL season, e.g. ${NHL.CURRENT.SEASON}`);\n\nexport const TeamAbbrev = type\n .enumerated(\n ...(Object.keys(NHL.TeamsEnum) as (keyof typeof NHL.TeamsEnum)[]),\n ...(Object.keys(\n NHL.InactiveTeamsEnum,\n ) as (keyof typeof NHL.InactiveTeamsEnum)[]),\n )\n .describe('a valid NHL team abbreviation');\n\nexport const TeamId = type\n .enumerated(\n ...Object.values(NHL.TeamsEnum),\n ...Object.values(NHL.InactiveTeamsEnum),\n )\n .describe('a valid NHL team ID');\n\nexport const GameType = type\n .enumerated(\n ...(Object.keys(\n NHL.GameTypeEnum,\n ) as (keyof typeof NHL.GameTypeEnum)[]),\n )\n .pipe((v) => NHL.GameTypeEnum[v])\n .or(type('1|2|3|4|19'))\n .describe('a valid NHL game type (e.g., REG, PRE, POST)');\n\nexport const GameNumber = type('number')\n .atLeast(1)\n .atMost((82 * 32) / 2) // Max possible games in a season - need to bump to 84 per team in 2026-27\n .or(\n type('string.numeric.parse').narrow((v) => {\n return v >= 1 && v <= (82 * 32) / 2;\n }),\n )\n .pipe((v) => v.toString())\n .describe('a valid NHL game number between 1 and 1312');\n\nexport const DraftRound = type('1 <= number <= 7')\n .or(type(/^(1|2|3|4|5|6|7)$/))\n .pipe((v) => (typeof v === 'number' ? v.toString() : v))\n .describe('a valid NHL draft round (1-7)');\n\nexport const PlayoffRound = type('1 <= number <= 4')\n .or(type(/^(1|2|3|4)$/))\n .pipe((v) => (typeof v === 'number' ? v.toString() : v))\n .describe('a valid NHL playoff round (1-4)');\n\nexport const EventId = type('number.integer | string.numeric.parse')\n .narrow((v): v is number => Number.isInteger(v) && v > 0)\n .describe('a positive integer representing an NHL event ID');\n\nexport const GameTypeCode = type('1|2|3|4|19').describe(\n 'a valid NHL game type code (1=PRE, 2=REG, 3=POST, 4=ASG, 19=INTL)',\n);\n\nconst parseGameIdParts = type({\n year: Year,\n gameType: GameType,\n gameNumber: GameNumber,\n});\n\nexport const GameId = type('number.integer | string.numeric.parse')\n .narrow((v) => {\n if (Number.isInteger(v) && v < 0) return false;\n const year = Math.trunc(v / 1e6); // remove last 6 digits\n const gameType = Math.trunc(v / 1e4) % 1e2; // remove last 4 digits, then get last 2 digits\n const gameNumber = v % 1e4; // get last 4 digits\n const valid = !(\n parseGameIdParts({ year, gameType, gameNumber }) instanceof\n type.errors\n );\n return valid;\n })\n .describe('a positive integer representing an NHL game ID');\n\nexport const SeriesLetter = type\n .enumerated(...Object.values(NHL.SeriesLetterEnum))\n .describe('a valid NHL playoff series letter (A-O)');\n\nexport const GameState = type\n .enumerated(...Object.values(NHL.GameStateEnum))\n .describe('a valid NHL game state');\n\nexport const CountryCode = type(/^[a-zA-Z]{2}$/)\n .pipe((v) => v.toLowerCase())\n .describe('a valid ISO 3166-1 alpha-2 country code, e.g. US, CA, RU');\n\nexport const PostalCode = type(/^[a-zA-Z]\\d[a-zA-Z][ -]?\\d[a-zA-Z]\\d$/)\n .or(type(/^\\d{5}$/))\n .describe(\n 'a valid postal code, either US ZIP code (5 digit) or Canadian postal code (A1A 1A1 format; space required)',\n );\n\nexport const PlayerId = type('number')\n .atLeast(NHL.PLAYER_ID_RANGE.MIN)\n .atMost(NHL.PLAYER_ID_RANGE.MAX)\n .or(\n type('string.numeric.parse').narrow((v) => {\n return (\n v >= NHL.PLAYER_ID_RANGE.MIN && v <= NHL.PLAYER_ID_RANGE.MAX\n );\n }),\n )\n .pipe((v) => v.toString())\n .describe('a valid NHL player ID');\n\nexport const SaveLocationCategory = type\n .enumerated(\n ...(Object.keys(\n EDGE.SaveLocationCategoryEnum,\n ) as (keyof typeof EDGE.SaveLocationCategoryEnum)[]),\n )\n .pipe((v) => EDGE.SaveLocationCategoryEnum[v]);\n\nexport const ShotLocationSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.ShotLocationSortEnum,\n ) as (keyof typeof EDGE.ShotLocationSortEnum)[]),\n )\n .pipe((v) => EDGE.ShotLocationSortEnum[v]);\n\nexport const SaveLocationSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SaveLocationSortEnum,\n ) as (keyof typeof EDGE.SaveLocationSortEnum)[]),\n )\n .pipe((v) => EDGE.SaveLocationSortEnum[v]);\n\nexport const SavePercentage5v5Sort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SavePercentage5v5SortEnum,\n ) as (keyof typeof EDGE.SavePercentage5v5SortEnum)[]),\n )\n .pipe((v) => EDGE.SavePercentage5v5SortEnum[v]);\n\nexport const SavePercentageSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SavePercentageSortEnum,\n ) as (keyof typeof EDGE.SavePercentageSortEnum)[]),\n )\n .pipe((v) => EDGE.SavePercentageSortEnum[v]);\n\nexport const PositionFilter = type\n .enumerated(\n ...(Object.keys(\n EDGE.PositionFilterEnum,\n ) as (keyof typeof EDGE.PositionFilterEnum)[]),\n )\n .pipe((v) => EDGE.PositionFilterEnum[v]);\n\nexport const SkatersStrength = type\n .enumerated(\n ...(Object.keys(\n EDGE.SkatersStrengthEnum,\n ) as (keyof typeof EDGE.SkatersStrengthEnum)[]),\n )\n .pipe((v) => EDGE.SkatersStrengthEnum[v]);\n\nexport const ShotSpeedSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.ShotSpeedSortEnum,\n ) as (keyof typeof EDGE.ShotSpeedSortEnum)[]),\n )\n .pipe((v) => EDGE.ShotSpeedSortEnum[v]);\n\nexport const SkatingSpeedSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.SkatingSpeedSortEnum,\n ) as (keyof typeof EDGE.SkatingSpeedSortEnum)[]),\n )\n .pipe((v) => EDGE.SkatingSpeedSortEnum[v]);\n\nexport const SkatingDistanceSort = type.enumerated(\n ...(Object.keys(\n EDGE.SkatingDistanceSortEnum,\n ) as (keyof typeof EDGE.SkatingDistanceSortEnum)[]),\n);\n// .pipe((v) => C.SkatingDistanceSortEnum[v]);\n\nexport const ShotLocationCategory = type\n .enumerated(\n ...(Object.keys(\n EDGE.ShotLocationCategoryEnum,\n ) as (keyof typeof EDGE.ShotLocationCategoryEnum)[]),\n )\n .pipe((v) => EDGE.ShotLocationCategoryEnum[v]);\n\nexport const ZoneTimeSort = type\n .enumerated(\n ...(Object.keys(\n EDGE.ZoneTimeSortEnum,\n ) as (keyof typeof EDGE.ZoneTimeSortEnum)[]),\n )\n .pipe((v) => EDGE.ZoneTimeSortEnum[v]);\n\n/** utility types */\n\nexport const BaseParams = type({\n season: Season.or('undefined').pipe((v) => v ?? NHL.CURRENT.SEASON),\n gameType: GameType.or('undefined').pipe(\n (v) => v ?? NHL.GameTypeEnum.REG,\n ),\n});\n\nexport const PlayerParams = BaseParams.merge({\n playerId: PlayerId,\n season: Season,\n});\n\nexport const TeamParams = BaseParams.merge({\n teamId: TeamId,\n});\n\nexport const top10Params = BaseParams.merge({\n position: PositionFilter.default('ALL'),\n strength: SkatersStrength.default('ALL'),\n});\n\nexport const DraftParams = type({\n year: Year.or('undefined').pipe((v) => v ?? NHL.CURRENT.YEAR),\n round: DraftRound.or('undefined').optional(),\n});\n\nexport const GameIdAndEventId = type({\n gameId: GameId,\n eventId: EventId,\n});\n\nexport const TeamAndSeasonParams = type({\n team: TeamAbbrev,\n season: Season.or('undefined').pipe((v) => v ?? NHL.CURRENT.SEASON),\n});\n\nexport const SeriesAndSeasonParams = type({\n seriesLetter: SeriesLetter,\n season: Season.or('undefined').pipe((v) => v ?? NHL.CURRENT.SEASON),\n});\n\nexport const SeriesParams = type({\n seriesLetter: SeriesLetter,\n year: Year.or('undefined').pipe((v) => v ?? NHL.CURRENT.YEAR),\n});\n\nexport const ScheduleParams = type({\n team: TeamAbbrev,\n date: NHLDate.or('undefined').pipe((v) => v ?? getCurrentDate()),\n month: NHLMonth.or('undefined').pipe(\n (v) => v ?? getCurrentDate().slice(0, 7),\n ),\n});\n","/**\n * Helper to construct API path with parameters\n */\nexport function route(\n template: string,\n params: Record<string, string | number | undefined>,\n): string {\n let route = template;\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n route = route.replace(`{${key}}`, String(value));\n }\n return route;\n}\n","export const _teamPaths = {\n rosterSeasons: 'roster-season/{team}',\n roster: 'roster/{team}/{season}',\n prospects: 'prospects/{team}',\n clubStats: 'club-stats/{team}/{season}/{gameType}',\n clubStatsSeason: 'club-stats-season/{team}',\n standings: 'standings/{date}',\n standingsSeason: 'standings-season',\n clubSchedule: {\n season: 'club-schedule-season/{team}/{season}',\n month: 'club-schedule/{team}/month/{month}',\n week: 'club-schedule/{team}/week/{date}',\n },\n};\n\nexport const _scorePaths = {\n score: 'score/{date}',\n scoreboard: {\n now: 'scoreboard/now',\n byTeam: 'scoreboard/{team}/now',\n byDate: 'scoreboard/{date}',\n },\n};\n\nexport const _playerPaths = {\n landing: 'player/{playerId}/landing',\n gameLog: 'player/{playerId}/game-log/{season}/{gameType}',\n spotlight: 'player-spotlight',\n statsLeaders: {\n skaters: 'skater-stats-leaders/{season}/{gameType}',\n goalies: 'goalie-stats-leaders/{season}/{gameType}',\n },\n playerSearch: 'https://search.d3.nhle.com/api/v1/search/player',\n};\n\nexport const _miscPaths = {\n season: 'season',\n metaPlayoffSeries: 'meta/playoff-series/{year}/{seriesLetter}',\n metaGame: 'meta/game/{gameId}',\n postalLookup: 'postal-lookup/{postalCode}',\n location: 'location',\n partnerGame: 'partner-game/{countryCode}/now',\n};\n\nexport const _gamePaths = {\n schedule: 'schedule/{date}',\n scheduleCalendar: 'schedule-calendar/{date}',\n playoffBracket: 'playoff-bracket/{year}',\n playoffSeries: 'playoff-series/{season}',\n playoffSeriesSchedule: 'schedule/playoff-series/{season}/{seriesLetter}',\n gamecenter: {\n playByPlay: 'gamecenter/{gameId}/play-by-play',\n reports: 'gamecenter/{gameId}/right-rail',\n landing: 'gamecenter/{gameId}/landing',\n boxscore: 'gamecenter/{gameId}/boxscore',\n },\n wsc: {\n gameStory: 'wsc/game-story/{gameId}',\n playByPlay: 'wsc/play-by-play/{gameId}',\n },\n pptReplay: {\n goal: 'ppt-replay/goal/{gameId}/{eventId}',\n event: 'ppt-replay/{gameId}/{eventId}',\n },\n whereToWatch: 'where-to-watch',\n networkTVSchedule: 'network/tv-schedule/{date}',\n};\n\nexport const _draftPaths = {\n draftPicks: {\n byYearAndRound: 'draft/picks/{year}/{round}',\n byYear: 'draft/picks/{year}/all',\n },\n draftRankings: 'draft/rankings/{year}/{type}',\n draftTracker: 'draft-tracker/picks/now',\n};\n","/**\n * @module api/gamecenter/game\n * @description Game-related API endpoints for schedules, play-by-play, boxscores, playoffs, and game information\n */\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n GamecenterBoxscore,\n GamecenterLanding,\n GamecenterPlayByPlay,\n GamecenterReports,\n LeagueSchedule,\n NetworkTVSchedule,\n PlayoffBracket,\n PlayoffSeries,\n PlayoffSeriesSchedule,\n PPTReplayEvent,\n PPTReplayGoal,\n ScheduleCalendar,\n WhereToWatch,\n WSCGameStory,\n WSCPlayByPlay,\n} from '#/types/responses/gamecenter/index.ts';\nimport type { GameId, Season, SeriesLetter, Year } from '#/types/types.ts';\nimport {\n getCurrentDate,\n getCurrentSeason,\n getCurrentYear,\n} from '#/utils/date.ts';\nimport {\n GameIdAndEventId,\n GameId as GameIdAT,\n isParseError,\n NHLDate,\n Season as SeasonAT,\n SeriesAndSeasonParams,\n Year as YearAT,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\nimport { _gamePaths as _paths } from './_paths.ts';\n\n/**\n * Get play-by-play data for a specific game\n * @param gameId - The unique identifier for the game (10-digit format)\n * @returns Promise resolving to play-by-play data including all game events\n * @example\n * ```ts\n * playByPlay(2023020001).then((data) => console.log(data));\n * ```\n */\nexport async function playByPlay(\n gameId: GameId,\n): Promise<APIResponse<GamecenterPlayByPlay>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.playByPlay,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.gamecenter.playByPlay, { gameId: parsedGameId }),\n );\n}\n\n/**\n * Get comprehensive game data including stats, reports, and game information\n *\n * Includes:\n * - **Season Series**: Head-to-head games between the two teams\n * - **Game Info**: Officials (referees, linesmen), coaches, scratches\n * - **Game Video**: Recap and condensed game video IDs\n * - **Line Score**: Period-by-period scoring\n * - **Shots by Period**: Shot totals for each period\n * - **Team Game Stats**: SOG, faceoffs, power play, PIM, hits, blocks, giveaways, takeaways\n * - **Game Reports**: Links to official NHL reports:\n * - Game Summary\n * - Event Summary\n * - Play-by-Play\n * - Faceoff Summary & Comparison\n * - Rosters\n * - Shot Summary\n * - Shift Chart\n * - Time on Ice (both teams)\n *\n * @param gameId - The unique identifier for the game (10-digit format)\n * @returns Promise resolving to comprehensive game data with stats, reports, and metadata\n * @note The official endpoint name is 'right-rail', as it is used\n * to populate the right rail UI component of the NHL Gamecenter website. The\n * function has been renamed to 'reports' for clarity.\n * @example\n * ```ts\n * reports(2023020001).then((data) => console.log(data));\n * ```\n */\nexport async function reports(\n gameId: GameId,\n): Promise<APIResponse<GamecenterReports>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.reports,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.gamecenter.reports, { gameId: parsedGameId }),\n );\n}\n/**\n * Get landing page data for a specific game\n * @param gameId - The unique identifier for the game (10-digit format)\n * @returns Promise resolving to landing page data with game summary and key information\n * @example\n * ```ts\n * landing(2023020001).then((data) => console.log(data));\n * ```\n */\nexport async function landing(\n gameId: GameId,\n): Promise<APIResponse<GamecenterLanding>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.landing,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.gamecenter.landing, { gameId: parsedGameId }),\n );\n}\n/**\n * Get boxscore data for a specific game\n * @param gameId - The unique identifier for the game (10-digit format)\n * @returns Promise resolving to boxscore data with player stats and game summary\n * @example\n * ```ts\n * boxscore(2023020001).then((data) => console.log(data));\n * ```\n */\nexport async function boxscore(\n gameId: GameId,\n): Promise<APIResponse<GamecenterBoxscore>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.gamecenter.boxscore,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.gamecenter.boxscore, { gameId: parsedGameId }),\n );\n}\n\n/**\n * Access WSC Sports related game content endpoints\n * @description Alternative data source for game information\n */\nexport const wsc = {\n gameStory: wscGameStory,\n playByPlay: wscPlayByPlay,\n};\n\n/**\n * Get game story data for a specific game\n * @param gameId - The unique identifier for the game (10-digit format)\n * @returns Promise resolving to game story data with narrative content\n * @example\n * ```ts\n * wsc.gameStory(2023020001).then((data) => console.log(data));\n * ```\n */\nasync function wscGameStory(\n gameId: GameId,\n): Promise<APIResponse<WSCGameStory>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.wsc.gameStory,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.wsc.gameStory, { gameId: parsedGameId }),\n );\n}\n\n/**\n * Get WSC play-by-play data for a specific game\n * @param gameId - The unique identifier for the game (10-digit format)\n * @returns Promise resolving to play-by-play data from WSC source\n * @example\n * ```ts\n * wsc.playByPlay(2023020001).then((data) => console.log(data));\n * ```\n */\nasync function wscPlayByPlay(\n gameId: GameId,\n): Promise<APIResponse<WSCPlayByPlay>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.wsc.playByPlay,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.wsc.playByPlay, { gameId: parsedGameId }),\n );\n}\n\n/**\n * Access PPT (Player and Puck Tracking) visualization data endpoints\n * @description Endpoints for accessing player and puck tracking data used for replay visualizations\n */\nexport const pptReplay = {\n goal: pptReplayGoal,\n event: pptReplayEvent,\n};\n\n/**\n * Get player and puck tracking visualization data for a specific goal event\n * @param gameId - The unique identifier for the game (10-digit format)\n * @param eventId - The unique identifier for the goal event\n * @returns Promise resolving to tracking data used for goal replay visualization\n * @example\n * ```ts\n * pptReplay.goal(2023020001, 42).then((data) => console.log(data));\n * ```\n */\nasync function pptReplayGoal(\n gameId: GameId,\n eventId: number | string,\n): Promise<APIResponse<PPTReplayGoal>> {\n const parsed = GameIdAndEventId({ gameId, eventId });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.pptReplay.goal,\n }),\n };\n }\n return nhlClient.get(route(_paths.pptReplay.goal, { gameId, eventId }));\n}\n\n/**\n * Get player and puck tracking visualization data for a specific event\n * @param gameId - The unique identifier for the game (10-digit format)\n * @param eventId - The unique identifier for the event\n * @returns Promise resolving to tracking data used for event replay visualization\n * @example\n * ```ts\n * pptReplay.event(2023020001, 42).then((data) => console.log(data));\n * ```\n */\nasync function pptReplayEvent(\n gameId: GameId,\n eventId: number | string,\n): Promise<APIResponse<PPTReplayEvent>> {\n const parsed = GameIdAndEventId({ gameId, eventId });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.pptReplay.event,\n }),\n };\n }\n return nhlClient.get(route(_paths.pptReplay.event, { gameId, eventId }));\n}\n\n/**\n * Get the league schedule for a specific date\n * @param date - Date to get schedule for (Date object or ISO date string 'YYYY-MM-DD'). Defaults to current date\n * @returns Promise resolving to league-wide schedule data for the specified date\n * @example\n * ```ts\n * // Get today's schedule\n * schedule().then((data) => console.log(data));\n *\n * // Get schedule for a specific date\n * schedule('2023-11-15').then((data) => console.log(data));\n * ```\n */\nexport async function schedule(\n date?: Date | string,\n): Promise<APIResponse<LeagueSchedule>> {\n const parsedDate = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsedDate)) {\n return {\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.schedule,\n }),\n };\n }\n return nhlClient.get(route(_paths.schedule, { date: parsedDate }));\n}\n\n/**\n * Get schedule calendar data for a specific date\n * @param date - Date to get calendar data for (Date object or ISO date string 'YYYY-MM-DD'). Defaults to current date\n * @returns Promise resolving to schedule calendar data showing game availability\n * @example\n * ```ts\n * scheduleCalendar('2023-11-15').then((data) => console.log(data));\n * ```\n */\nexport async function scheduleCalendar(\n date?: Date | string,\n): Promise<APIResponse<ScheduleCalendar>> {\n const parsedDate = NHLDate(date);\n if (isParseError(parsedDate)) {\n return {\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.scheduleCalendar,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.scheduleCalendar, { date: parsedDate }),\n );\n}\n\n/**\n * Get playoff bracket data for a specific year\n * @param year - The playoff year (YYYY format). Defaults to current year\n * @returns Promise resolving to playoff bracket structure with all series\n * @example\n * ```ts\n * playoffBracket(2023).then((data) => console.log(data));\n * ```\n */\nexport async function playoffBracket(\n year?: Year,\n): Promise<APIResponse<PlayoffBracket>> {\n const parsedYear = YearAT(year ?? getCurrentYear());\n if (isParseError(parsedYear)) {\n return {\n status: 'error',\n error: new ValidationError(parsedYear.summary, {\n endpoint: _paths.playoffBracket,\n }),\n };\n }\n return nhlClient.get(route(_paths.playoffBracket, { year: parsedYear }));\n}\n\n/**\n * Get playoff series information for a season\n * @param season - The season identifier (8-digit format: YYYYYYYY, e.g., 20232024). Defaults to current season\n * @returns Promise resolving to all playoff series data for the season\n * @example\n * ```ts\n * playoffSeries(20232024).then((data) => console.log(data));\n * ```\n */\nexport async function playoffSeries(\n season?: Season,\n): Promise<APIResponse<PlayoffSeries>> {\n const parsedSeason = SeasonAT(season ?? getCurrentSeason());\n if (isParseError(parsedSeason)) {\n return {\n status: 'error',\n error: new ValidationError(parsedSeason.summary, {\n endpoint: _paths.playoffSeries,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.playoffSeries, { season: parsedSeason }),\n );\n}\n\n/**\n * Get schedule for a specific playoff series\n * @param seriesLetter - Single letter identifier for the playoff series (A-O)\n * @param season - The season identifier (8-digit format: YYYYYYYY). Defaults to current season\n * @returns Promise resolving to schedule for the specified playoff series\n * @example\n * ```ts\n * playoffSeriesSchedule('A', 20232024).then((data) => console.log(data));\n * ```\n */\nexport async function playoffSeriesSchedule(\n seriesLetter: SeriesLetter,\n season?: Season,\n): Promise<APIResponse<PlayoffSeriesSchedule>> {\n const parsed = SeriesAndSeasonParams({\n seriesLetter,\n season: season ?? getCurrentSeason(),\n });\n\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.playoffSeriesSchedule,\n }),\n };\n }\n // series letter is a single character from A to O (/[a-oA-O]/)\n // Are series letters assigned in a pre determined manner?\n return nhlClient.get(route(_paths.playoffSeriesSchedule, parsed));\n}\n\n/**\n * Get information about where games are available to watch\n * @returns Promise resolving to streaming and broadcast availability information\n * @example\n * ```ts\n * whereToWatch().then((data) => console.log(data));\n * ```\n */\nexport async function whereToWatch(): Promise<APIResponse<WhereToWatch>> {\n return nhlClient.get(_paths.whereToWatch);\n}\n\n/**\n * Get TV network schedule for a specific date\n * @param date - Date to get TV schedule for (Date object or ISO date string 'YYYY-MM-DD'). Defaults to current date\n * @returns Promise resolving to TV schedule data with network broadcast information\n * @example\n * ```ts\n * networkTVSchedule('2023-11-15').then((data) => console.log(data));\n * ```\n */\nexport async function networkTVSchedule(\n date?: Date | string,\n): Promise<APIResponse<NetworkTVSchedule>> {\n const parsedDate = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsedDate)) {\n return {\n status: 'error',\n error: new ValidationError(parsedDate.summary, {\n endpoint: _paths.networkTVSchedule,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.networkTVSchedule, { date: parsedDate }),\n );\n}\n","/**\n * @module api/gamecenter/misc\n * @description Miscellaneous NHL API endpoints for meta information, location data, and utility functions\n */\n\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n CountryCode,\n GameId,\n PostalCode,\n SeriesLetter,\n Year,\n} from '#/types/index.ts';\nimport type {\n GameMeta,\n LocationInfo,\n NHLSeasons,\n PartnerGameInfo,\n PlayoffSeriesMeta,\n PostalCodeInfo,\n} from '#/types/responses/gamecenter/index.ts';\nimport {\n CountryCode as CountryCodeAT,\n GameId as GameIdAT,\n isParseError,\n PostalCode as PostalCodeAT,\n SeriesParams,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\nimport { _miscPaths as _paths } from './_paths.ts';\n\n/**\n * Get list of all valid NHL seasons\n * @returns Promise resolving to array of all NHL seasons\n * @example\n * ```ts\n * seasons().then((data) => console.log(data));\n * ```\n */\nexport async function seasons(): Promise<APIResponse<NHLSeasons>> {\n return nhlClient.get(_paths.season);\n}\n\n/**\n * Access meta information endpoints\n * @description Get metadata about playoff series and games\n */\nexport const meta = {\n game: metaGame,\n playoffSeries: metaPlayoffSeries,\n};\n\n/**\n * Get meta information for a specific game\n *\n * @param gameId - The unique game identifier (10-digit format)\n * @returns Promise resolving to game meta information\n * @example\n * ```ts\n * meta.game(2023020001).then((data) => console.log(data));\n * ```\n */\nasync function metaGame(gameId: GameId): Promise<APIResponse<GameMeta>> {\n const parsedGameId = GameIdAT(gameId);\n if (isParseError(parsedGameId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedGameId.summary, {\n endpoint: _paths.metaGame,\n }),\n };\n }\n return nhlClient.get(route(_paths.metaGame, { gameId: parsedGameId }));\n}\n\n/**\n * Get meta information for a playoff series\n *\n * @param seriesLetter - Single letter identifier for the playoff series (A-O)\n * @param year - The year in YYYY format. Defaults to current year\n * @returns Promise resolving to playoff series meta information\n * @example\n * ```ts\n * meta.playoffSeries('A', 2023).then((data) => console.log(data));\n * ```\n */\nasync function metaPlayoffSeries(\n seriesLetter: SeriesLetter,\n year?: Year,\n): Promise<APIResponse<PlayoffSeriesMeta>> {\n const parsed = SeriesParams({ year, seriesLetter });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.metaPlayoffSeries,\n }),\n };\n }\n return nhlClient.get(route(_paths.metaPlayoffSeries, parsed));\n}\n\n/**\n * Lookup information based on postal/zip code\n *\n * @param postalCode - The postal/zip code to lookup (US or Canadian format)\n * @returns Promise resolving to location information including lat/long coordinates\n * @example\n * ```ts\n * postalLookup('10001').then((data) => console.log(data)); // US zip\n * postalLookup('M5H 2N2').then((data) => console.log(data)); // Canadian postal\n * ```\n */\nexport async function postalLookup(\n postalCode: PostalCode,\n): Promise<APIResponse<PostalCodeInfo>> {\n const parsedPostalCode = PostalCodeAT(postalCode);\n if (isParseError(parsedPostalCode)) {\n return {\n status: 'error',\n error: new ValidationError(parsedPostalCode.summary, {\n endpoint: _paths.postalLookup,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.postalLookup, { postalCode: parsedPostalCode }),\n );\n}\n\n/**\n * Get location information based on IP address\n *\n * @returns Promise resolving to the location determined by the API\n * (based on the user's IP address)\n * @example\n * ```ts\n * location().then((data) => console.log(data));\n * ```\n */\nexport async function location(): Promise<APIResponse<LocationInfo>> {\n return nhlClient.get(_paths.location);\n}\n\n/**\n * Get partner game information for a specific country\n *\n * @param countryCode - The three-letter country code (e.g., 'USA', 'CAN', 'SWE')\n * @returns Promise resolving to partner game information for the country\n * @example\n * ```ts\n * partnerGame('USA').then((data) => console.log(data));\n * ```\n */\nexport async function partnerGame(\n countryCode: CountryCode,\n): Promise<APIResponse<PartnerGameInfo>> {\n const parsedCountryCode = CountryCodeAT(countryCode);\n if (isParseError(parsedCountryCode)) {\n return {\n status: 'error',\n error: new ValidationError(parsedCountryCode.summary, {\n endpoint: _paths.partnerGame,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.partnerGame, { countryCode: parsedCountryCode }),\n );\n}\n","/**\n * @module api/gamecenter/player\n * @description Player-related API endpoints for player information, stats, game logs, and search\n */\n\nimport nhlClient, { createNHLClient } from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n GoalieStatsLeaders,\n PlayerGameLog,\n PlayerLanding,\n PlayerSearchResult,\n PlayerSpotlight,\n SkaterStatsLeaders,\n} from '#/types/responses/gamecenter/index.ts';\nimport type { GameType, Season } from '#/types/types.ts';\nimport { BaseParams, isParseError, PlayerId } from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\nimport { _playerPaths as _paths } from './_paths.ts';\n\nconst nhlPlayerSearch = createNHLClient(_paths.playerSearch);\nconst searchUrlParams = { culture: 'en', q: '' };\n\n/**\n * Get player landing page information\n * @param playerId - The unique player identifier (NHL player ID number)\n * @returns Promise resolving to player landing information with career stats and bio\n * @example\n * ```ts\n * landing(8478402).then((data) => console.log(data)); // Connor McDavid\n * ```\n */\nexport async function landing(\n playerId: number | string,\n): Promise<APIResponse<PlayerLanding>> {\n const parsedPlayerId = PlayerId(playerId);\n if (isParseError(parsedPlayerId)) {\n return {\n status: 'error',\n error: new ValidationError(parsedPlayerId.summary, {\n endpoint: _paths.landing,\n }),\n };\n }\n return nhlClient.get(\n route(_paths.landing, { playerId: parsedPlayerId }),\n );\n}\n\n/**\n * Get player game log for a specific season\n * @param playerId - The unique player identifier (NHL player ID number)\n * @param season - The season identifier (8-digit format: YYYYYYYY). Defaults to current season\n * @param gameType - The game type (2 = regular season, 3 = playoffs). Defaults to regular season\n * @returns Promise resolving to player game-by-game statistics\n * @example\n * ```ts\n * gameLog(8478402, 20232024, 2).then((data) => console.log(data));\n * ```\n */\nexport async function gameLog(\n playerId: number | string,\n season?: Season,\n gameType?: GameType,\n): Promise<APIResponse<PlayerGameLog>> {\n const Parser = BaseParams.merge({\n playerId: PlayerId,\n });\n const parsed = Parser({ playerId, season, gameType });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.gameLog,\n }),\n };\n }\n return nhlClient.get(route(_paths.gameLog, parsed));\n}\n\n/**\n * Get player spotlight featuring highlighted players\n * @returns Promise resolving to featured/spotlight players\n * @example\n * ```ts\n * spotlight().then((data) => console.log(data));\n * ```\n */\nexport async function spotlight(): Promise<APIResponse<PlayerSpotlight>> {\n return nhlClient.get(_paths.spotlight);\n}\n\n/**\n * Search for players by name\n * @param query - The search query string (player name)\n * @returns Promise resolving to player search results\n * @example\n * ```ts\n * search('McDavid').then((data) => console.log(data));\n * ```\n */\nexport async function search(\n query: string,\n): Promise<APIResponse<PlayerSearchResult>> {\n return nhlPlayerSearch.get('', {\n ...searchUrlParams,\n q: query,\n });\n}\n\n/**\n * Access stats leaders endpoints for skaters and goalies\n * @description Get statistical leaders across various categories\n */\nexport const statsLeaders = {\n skaters: statsLeadersSkaters,\n goalies: statsLeadersGoalies,\n};\n/**\n * Get skater stats leaders\n * @param season - The season identifier (8-digit format: YYYYYYYY). Defaults to current season\n * @param gameType - The game type (2 = regular season, 3 = playoffs). Defaults to regular season\n * @returns Promise resolving to skater statistical leaders\n * @example\n * ```ts\n * statsLeaders.skaters(20232024, 2).then((data) => console.log(data));\n * ```\n */\nasync function statsLeadersSkaters(\n season?: Season,\n gameType?: GameType,\n): Promise<APIResponse<SkaterStatsLeaders>> {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.statsLeaders.skaters,\n }),\n };\n }\n return nhlClient.get(route(_paths.statsLeaders.skaters, parsed));\n}\n\n/**\n * Get goalie stats leaders\n * @param season - The season identifier (8-digit format: YYYYYYYY). Defaults to current season\n * @param gameType - The game type (2 = regular season, 3 = playoffs). Defaults to regular season\n * @returns Promise resolving to goalie statistical leaders\n * @example\n * ```ts\n * statsLeaders.goalies(20232024, 2).then((data) => console.log(data));\n * ```\n */\nasync function statsLeadersGoalies(\n season?: Season,\n gameType?: GameType,\n): Promise<APIResponse<GoalieStatsLeaders>> {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.statsLeaders.goalies,\n }),\n };\n }\n return nhlClient.get(route(_paths.statsLeaders.goalies, parsed));\n}\n","/**\n * @module api/gamecenter/score\n * @description Score and scoreboard endpoints for accessing game scores and live score information\n */\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type { NHLScore, NHLScoreboard, TeamAbbrev } from '#/types/index.ts';\nimport { getCurrentDate } from '#/utils/date.ts';\nimport {\n isParseError,\n NHLDate,\n TeamAbbrev as Team,\n} from '#/utils/schemas.ts';\nimport { route } from '#/utils/utils.ts';\nimport { _scorePaths as _paths } from './_paths.ts';\n\n/**\n * Get scores for a specific date\n * @param date - Date to get scores for (Date object or ISO date string 'YYYY-MM-DD'). Defaults to current date\n * @returns Promise resolving to all game scores for the specified date\n * @example\n * ```ts\n * // Get today's scores\n * score().then((data) => console.log(data));\n *\n * // Get scores for a specific date\n * score('2023-11-15').then((data) => console.log(data));\n * ```\n */\nexport async function score(\n date?: Date | string,\n): Promise<APIResponse<NHLScore>> {\n const parsed = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.score,\n }),\n };\n }\n return nhlClient.get(route(_paths.score, { date: parsed }));\n}\n\n/**\n * Get current scoreboard information\n * @returns Promise resolving to current scoreboard with live and recent game data\n * @example\n * ```ts\n * scoreboard().then((data) => console.log(data));\n * ```\n */\nexport async function scoreboard(): Promise<APIResponse<NHLScoreboard>> {\n return nhlClient.get<NHLScoreboard>(_paths.scoreboard.now);\n}\n\n/**\n * Get scoreboard data for a specific team\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @returns Promise resolving to scoreboard data for the specified team\n * @example\n * ```ts\n * scoreboard.team('TOR').then((data) => console.log(data));\n * ```\n */\nscoreboard.team = async (\n team: TeamAbbrev,\n): Promise<APIResponse<NHLScoreboard>> => {\n const parsed = Team(team);\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.scoreboard.byTeam,\n }),\n };\n }\n return nhlClient.get<NHLScoreboard>(\n route(_paths.scoreboard.byTeam, { team: parsed }),\n );\n};\n\n/**\n * Get scoreboard data for a specific date\n * @param date - Date to get scoreboard data for (Date object or ISO date string 'YYYY-MM-DD')\n * @returns Promise resolving to scoreboard data for the specified date\n * @example\n * ```ts\n * scoreboard.date('2023-11-15').then((data) => console.log(data));\n * ```\n */\nscoreboard.date = async (\n date: Date | string,\n): Promise<APIResponse<NHLScoreboard>> => {\n const parsed = NHLDate(date);\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.scoreboard.byDate,\n }),\n };\n }\n return nhlClient.get<NHLScoreboard>(\n route(_paths.scoreboard.byDate, { date: parsed }),\n );\n};\n","/**\n * @module api/gamecenter/team\n * @description Team-related API endpoints for rosters, schedules, stats, standings, and prospects\n */\nimport nhlClient from '#/client/index.ts';\nimport type { APIResponse } from '#/client/types.ts';\nimport { ValidationError } from '#/errors/index.ts';\nimport type {\n GameType,\n NHLStandings,\n NHLStandingsSeason,\n Season,\n TeamAbbrev,\n TeamProspects,\n TeamRoster,\n TeamRosterSeasons,\n TeamScheduleMonth,\n TeamScheduleSeason,\n TeamScheduleWeek,\n TeamStats,\n TeamStatsSeason,\n} from '#/types/index.ts';\nimport { getCurrentDate } from '#/utils/date.ts';\nimport {\n BaseParams,\n isParseError,\n NHLDate,\n ScheduleParams,\n TeamAbbrev as TeamAbbrevAT,\n TeamAndSeasonParams,\n} from '#/utils/schemas.ts';\nimport { route } from '../../utils/utils.ts';\nimport { _teamPaths as _paths } from './_paths.ts';\n\n/**\n * Get available roster seasons for a team\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @returns Promise resolving to list of seasons with roster data available\n * @example\n * ```ts\n * rosterSeasons('TOR').then((data) => console.log(data));\n * ```\n */\nexport async function rosterSeasons(\n team: TeamAbbrev,\n): Promise<APIResponse<TeamRosterSeasons>> {\n const parsed = TeamAbbrevAT(team);\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.rosterSeasons,\n }),\n };\n }\n return nhlClient.get(route(_paths.rosterSeasons, { team: parsed }));\n}\n\n/**\n * Get team roster for a specific season\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @param season - The season identifier (8-digit format: YYYYYYYY). Defaults to current season\n * @returns Promise resolving to team roster with player information\n * @example\n * ```ts\n * roster('TOR', 20232024).then((data) => console.log(data));\n * ```\n */\nexport async function roster(\n team: string,\n season?: string | number,\n): Promise<APIResponse<TeamRoster>> {\n const parsed = TeamAndSeasonParams({ team, season });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.roster,\n }),\n };\n }\n return nhlClient.get(route(_paths.roster, parsed));\n}\n\n/**\n * Get team prospects information\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @returns Promise resolving to team prospects and draft picks\n * @example\n * ```ts\n * prospects('TOR').then((data) => console.log(data));\n * ```\n */\nexport async function prospects(\n team: TeamAbbrev,\n): Promise<APIResponse<TeamProspects>> {\n const parsed = TeamAbbrevAT(team);\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.prospects,\n }),\n };\n }\n return nhlClient.get(route(_paths.prospects, { team: parsed }));\n}\n\n/**\n * Get team statistics for a specific season\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @param season - The season identifier (8-digit format: YYYYYYYY). Defaults to current season\n * @param gameType - The game type ('REG' or 2, 'POST' or 3, etc.). Defaults to regular season\n * @returns Promise resolving to team statistics\n * @example\n * ```ts\n * stats('TOR', 20232024, 'REG').then((data) => console.log(data));\n * ```\n */\nexport async function stats(\n team: TeamAbbrev,\n season?: Season,\n gameType?: GameType,\n): Promise<APIResponse<TeamStats>> {\n const Parser = BaseParams.merge({\n team: TeamAbbrevAT,\n });\n const parsed = Parser({ team, season, gameType });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.clubStats,\n }),\n };\n }\n return nhlClient.get(route(_paths.clubStats, parsed));\n}\n\n/**\n * Get valid season and game type options for a team's statistics\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @returns Promise resolving to available season and game type combinations for the team.\n * Only includes seasons and game types where the team actually played (e.g., excludes playoff game types\n * for seasons where the team didn't make the playoffs)\n * @example\n * ```ts\n * statsSeason('TOR').then((data) => console.log(data));\n * ```\n */\nexport async function statsSeason(\n team: TeamAbbrev,\n): Promise<APIResponse<TeamStatsSeason>> {\n const parsed = TeamAbbrevAT(team);\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.clubStatsSeason,\n }),\n };\n }\n return nhlClient.get(route(_paths.clubStatsSeason, { team: parsed }));\n}\n\n/**\n * Get league standings for a specific date\n * @param date - Date to get standings for (Date object or ISO date string 'YYYY-MM-DD'). Defaults to current date\n * @returns Promise resolving to league standings\n * @example\n * ```ts\n * standings('2023-11-15').then((data) => console.log(data));\n * ```\n */\nexport async function standings(\n date?: Date | string,\n): Promise<APIResponse<NHLStandings>> {\n const parsed = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.standings,\n }),\n };\n }\n return nhlClient.get(route(_paths.standings, { date: parsed }));\n}\n\n/**\n * Get current season standings information\n * @returns Promise resolving to current season standings with detailed team records\n * @example\n * ```ts\n * standingsSeason().then((data) => console.log(data));\n * ```\n */\nexport async function standingsSeason(): Promise<\n APIResponse<NHLStandingsSeason>\n> {\n return nhlClient.get(_paths.standingsSeason);\n}\n\n/**\n * Get the team schedule for any seven-day period\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @param date - The date indicating the start of the seven-day period (Date object or ISO date string 'YYYY-MM-DD').\n * Defaults to current date\n * @returns A promise that resolves to the club schedule for the specified week\n *\n * @example\n * ```ts\n * // Get the schedule for the Chicago Blackhawks for the week of November 4, 2023\n * // This returns the schedule from November 4 to November 10, 2023\n * gc.team.schedule.week('CHI', '2023-11-04').then((data) => {\n * console.log(data);\n * });\n * ```\n */\nasync function scheduleWeek(\n team: TeamAbbrev,\n date?: Date | string,\n): Promise<APIResponse<TeamScheduleWeek>>;\nasync function scheduleWeek(\n team: string,\n date?: Date | string,\n): Promise<APIResponse<TeamScheduleWeek>>;\nasync function scheduleWeek(\n team: TeamAbbrev | string,\n date?: Date | string,\n): Promise<APIResponse<TeamScheduleWeek>> {\n const parsed = ScheduleParams({ team, date, month: undefined });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.clubSchedule.week,\n }),\n };\n }\n return nhlClient.get(route(_paths.clubSchedule.week, parsed));\n}\n\n/**\n * Get the team schedule for any month\n * @param team - The team abbreviation (e.g., 'TOR', 'MTL', 'NYR')\n * @param date - The date indicating the month to get the schedule for (ISO date string 'YYYY-MM').\n * Defaults to current month\n * @returns A promise that resolves to the club schedule for the specified month\n *\n * @example\n * ```ts\n * // Get the schedule for the Toronto Maple Leafs for November 2023\n * gc.team.schedule.month('TOR', '2023-11').then((data) => {\n * console.log(data);\n * });\n * ```\n */\nasync function scheduleMonth(\n team: TeamAbbrev,\n date?: Date | string,\n): Promise<APIResponse<TeamScheduleMonth>>;\nasync function scheduleMonth(\n team: string,\n date?: Date | string,\n): Promise<APIResponse<TeamScheduleMonth>>;\nasync function scheduleMonth(\n team: TeamAbbrev | string,\n date?: Date | string,\n): Promise<APIResponse<TeamScheduleMonth>> {\n const parsed = ScheduleParams({ team, month: date, date: undefined });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.clubSchedule.month,\n }),\n };\n }\n return nhlClient.get(route(_paths.clubSchedule.month, parsed));\n}\n\n/**\n * Returns the full season schedule for the provided team and season\n * @param team - The team abbreviation for the desired team (e.g., 'TOR', 'MTL', 'NYR')\n * @param season - The specific season (8-digit format: YYYYYYYY, e.g., 20232024). Defaults to current season\n * @returns A promise that resolves to the full season schedule for the specified team and season\n * @example\n * ```ts\n * // Get the full season schedule for the Boston Bruins for the 2022-2023 season\n * gc.team.schedule.season('BOS', 20222023).then((data) => {\n * console.log(data);\n * });\n * ```\n */\nasync function scheduleSeason(\n team: TeamAbbrev,\n season?: Season,\n): Promise<APIResponse<TeamScheduleSeason>>;\nasync function scheduleSeason(\n team: string,\n season?: Season,\n): Promise<APIResponse<TeamScheduleSeason>>;\nasync function scheduleSeason(\n team: TeamAbbrev | string,\n season?: Season,\n): Promise<APIResponse<TeamScheduleSeason>> {\n const parsed = TeamAndSeasonParams({ team, season });\n if (isParseError(parsed)) {\n return {\n status: 'error',\n error: new ValidationError(parsed.summary, {\n endpoint: _paths.clubSchedule.season,\n }),\n };\n }\n return nhlClient.get(route(_paths.clubSchedule.season, parsed));\n}\n\n/**\n * Access team schedule endpoints for different time periods\n * @description Get team schedules by season, week, or month\n */\nexport const schedule = {\n season: scheduleSeason,\n week: scheduleWeek,\n month: scheduleMonth,\n};\n"]}