nhle-api 0.5.3 → 0.5.4

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/_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":"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AA;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/carousel/{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 GameId,\n LeagueSchedule,\n NetworkTVSchedule,\n PlayoffBracket,\n PlayoffSeries,\n PlayoffSeriesSchedule,\n PPTReplayEvent,\n PPTReplayGoal,\n ScheduleCalendar,\n Season,\n SeriesLetter,\n WhereToWatch,\n WSCGameStory,\n WSCPlayByPlay,\n Year,\n} from '#/types/index.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/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 { Score, Scoreboard, 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<Score>> {\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<Scoreboard>> {\n return nhlClient.get<Scoreboard>(_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<Scoreboard>> => {\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<Scoreboard>(\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<Scoreboard>> => {\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<Scoreboard>(\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"]}
1
+ {"version":3,"sources":["../src/api/edge-adv/index.ts","../src/api/edge-adv/goalies.ts","../src/config/env.ts","../src/errors/index.ts","../src/client/index.ts","../src/constants/edge-adv.ts","../src/constants/edge-stats.ts","../src/constants/nhl.ts","../src/constants/index.ts","../src/utils/date.ts","../src/utils/schemas.ts","../src/utils/utils.ts","../src/api/edge-adv/paths.ts","../src/api/edge-adv/skaters.ts","../src/api/edge-adv/summary.ts","../src/api/edge-adv/teams.ts","../src/api/gamecenter/index.ts","../src/api/gamecenter/draft.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":["edge_adv_exports","type","leaders","top10","compare","shotLocation","shotSpeed","skatingDistance","skatingSpeed","zoneTime","top10ShotLocation","top10ShotSpeed","top10ZoneTime","landing","schedule","stats"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ========================================================================\n * NHL Edge Advanced Stats API Module Exports\n * Base URL: https://api.nhle.com/stats/rest\n * ========================================================================\n * Complete NHL Edge Advanced Stats API implementation with modules for:\n * - Players (skaters, goalies)\n * - Teams and franchises\n * - Advanced statistical numbers\n * ========================================================================\n */\n\nexport * as goalies from './goalies.ts';\nexport * as skaters from './skaters.ts';\nexport * from './summary.ts';\nexport * as teams from './teams.ts';\n","/**\n * ======================================================================\n * API endpoints for goalie-related data.\n * Base url: api-web.nhle.com/v1/edge\n *\n * Notes:\n * - Convenience endpoints using 'now' for season have been\n * excluded in favor of using calculated current season. You can optionally\n * configure the switch over date for how current season is calculated.\n * See README for details.\n * - There is an extra endpoint that appears to duplicate\n * the functionality of /skater-detail at `v1/cat/edge/skater-detail`\n * As such, it has been excluded from this implementation.\n * ======================================================================\n */\n\nimport { nhlClient } from '#/client/index.ts';\nimport { NHLError } from '#/errors/index.ts';\nimport {\n BaseParams,\n isParseError,\n PlayerParams,\n SaveLocationCategory as SaveLocationCategorySchema,\n SaveLocationSort as SaveLocationSortSchema,\n SavePercentage5v5Sort as SavePercentage5v5SortSchema,\n SavePercentageSort as SavePercentageSortSchema,\n} from '#/utils/schemas.ts';\nimport type {\n GameType,\n PlayerId,\n SaveLocationCategory,\n SaveLocationSort,\n SavePercentage5v5Sort,\n SavePercentageSort,\n Season,\n} from '../../types/types.ts';\nimport { resolvePath } from '../../utils/utils.ts';\nimport { goaliesPaths as p } from './paths.ts';\n\n/**\n * Goalie Edge Advanced Stats API helpers.\n *\n * Lightweight wrapper exposing functions that call the underlying nhlClient\n * for goalie-related endpoints. Each method returns the raw Promise from the\n * client.get call.\n */\n\n/**\n * Get goalie detail for a player.\n * @param playerId - The player's numeric id.\n * @param season - Optional season (numeric season format or 'now' via argParse).\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nexport async function player(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.player,\n }),\n );\n const path = resolvePath(p.player, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get goalie comparison data for a player.\n * @param playerId - The player's numeric id.\n * @param season - Optional season (numeric season format or 'now' via argParse).\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nexport async function compare(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.compare,\n }),\n );\n const path = resolvePath(p.compare, parsed);\n return nhlClient.get(path);\n}\n/**\n * Get goalie landing / leaders for a season.\n * @param season - Optional season (numeric season format or 'now' via argParse).\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nexport async function leaders(\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.leaders,\n }),\n );\n const path = resolvePath(p.leaders, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get 5v5 save percentage details for a goalie.\n * @param playerId - The player's numeric id.\n * @param season - Optional season (numeric season format or 'now' via argParse).\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nexport async function savePercentage5v5(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.savePercentage5v5,\n }),\n );\n const path = resolvePath(p.savePercentage5v5, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get save percentage details for a goalie.\n * @param playerId - The player's numeric id.\n * @param season - Optional season (numeric season format or 'now' via argParse).\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nexport async function savePercentage(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.savePercentage,\n }),\n );\n const path = resolvePath(p.savePercentage, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get save location details for a goalie.\n * @param playerId - The player's numeric id.\n * @param season - Optional season (numeric season format or 'now' via argParse).\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nexport async function saveLocation(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.saveLocation,\n }),\n );\n const path = resolvePath(p.saveLocation, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Accessor for top-10 leaderboards.\n * @returns Object with methods to fetch various top-10 lists.\n */\nexport const top10 = {\n savePercentage: top10SavePercentage,\n savePercentage5v5: top10SavePercentage5v5,\n saveLocation: top10SaveLocation,\n};\n/**\n * Top-10 edge save percentage lists.\n * @param sortBy - Sorting key for the leaderboard.\n * @param season - Optional season (numeric or 'now').\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nasync function top10SavePercentage(\n season?: Season,\n gameType?: GameType,\n sortBy?: SavePercentageSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n sortBy: SavePercentageSortSchema.default('GAMES'),\n });\n const parsed = Parser({ season, gameType, sortBy });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.SavePercentage,\n }),\n );\n const path = resolvePath(p.top10.SavePercentage, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Top-10 5v5 save percentage lists.\n * @param sortBy - Sorting key for the leaderboard.\n * @param season - Optional season (numeric or 'now').\n * @param gameType - Optional game type id.\n * @returns Promise resolving to the raw API response.\n */\nasync function top10SavePercentage5v5(\n season?: Season,\n gameType?: GameType,\n sortBy?: SavePercentage5v5Sort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n sortBy: SavePercentage5v5SortSchema.default('5v5-SV%'),\n });\n const parsed = Parser({ season, gameType, sortBy });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.SavePercentage5v5,\n }),\n );\n const path = resolvePath(p.top10.SavePercentage5v5, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Top-10 save location lists.\n * @param category - Category key (see SaveLocationCategoryEnum).\n * @param sortBy - Sorting key for the leaderboard (see SaveLocationSortEnum).\n * @param season - Optional season (e.g. 20242025).\n * @param gameType - Optional game type.\n * @returns Promise resolving to the raw API response.\n */\nasync function top10SaveLocation(\n season?: Season,\n gameType?: GameType,\n category?: SaveLocationCategory,\n sortBy?: SaveLocationSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n category: SaveLocationCategorySchema.default('SV%'),\n sortBy: SaveLocationSortSchema.default('ALL'),\n });\n const parsed = Parser({\n season,\n gameType,\n category,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.SaveLocation,\n }),\n );\n const path = resolvePath(p.top10.SaveLocation, parsed);\n return nhlClient.get(path);\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","/**\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 { APIResponse, NHLClientConfig } 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\nconst BASE_URLS = {\n gamecenter: 'https://api-web.nhle.com/v1',\n edgeStats: 'https://api.nhle.com/stats/rest',\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: BASE_URLS.gamecenter,\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, errorConfig?: ErrorConfig) {\n this.config = { ...DEFAULT_CONFIG };\n if (baseURL) this.config.baseUrl = baseURL;\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 { success: false, error };\n }\n\n return { data: (await response.json()) as T, success: true };\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 { success: false, 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 { success: false, 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,\n errorConfig?: ErrorConfig,\n): NHLClient {\n return new NHLClient(baseURL, errorConfig);\n}\n\n/**\n * Default client instance for gamecenter and edge-adv APIs\n */\nconst nhlClient = createNHLClient(BASE_URLS.gamecenter);\n\n/**\n * Client instance for edge-stats APIs\n */\nconst edgeStatsClient = createNHLClient(BASE_URLS.edgeStats);\n\nexport { nhlClient, edgeStatsClient };\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","/**\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 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","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 * Resolves a path template by replacing placeholders with actual values from the params object.\n * Placeholders in the template should be in the format `{key}` where `key` corresponds to a key in the params object.\n * If a value in params is undefined, the placeholder will not be replaced.\n *\n * @param template - The path template containing placeholders (e.g., '/teams/{team}/stats')\n * @param params - An object mapping placeholder keys to their replacement values (e.g., { team: 'TOR' })\n * @returns The resolved path with placeholders replaced by actual values (e.g., '/teams/TOR/stats')\n *\n * @example\n * const pathTemplate = '/teams/{team}/stats';\n * const params = { team: 'TOR' };\n * const resolvedPath = resolvePath(pathTemplate, params);\n * console.log(resolvedPath); // Output: '/teams/TOR/stats'\n */\nexport function resolvePath(\n template: string,\n params: Record<string, string | number | undefined>,\n): string {\n let resolvedPath = template;\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n resolvedPath = resolvedPath.replace(`{${key}}`, String(value));\n }\n return resolvedPath;\n}\n","/**\n * ======================================================================\n * NHL Edge Advanced API - Endpoint Paths\n * Base URL: https://api-web.nhle.com/v1\n * ======================================================================\n * This module defines the endpoint paths for the NHL Edge Advanced API,\n * organized by category (goalies, skaters, teams, and summary).\n * Each path includes placeholders for dynamic parameters such as player ID,\n * team ID, season, game type, position, strength, sort criteria, etc.\n */\n\n/** API endpoint paths for goalie-related advanced statistics. */\nexport const goaliesPaths = {\n /** Goalie detail page. */\n player: 'edge/goalie-detail/{playerId}/{season}/{gameType}',\n /** Goalie comparison data. */\n compare: 'edge/goalie-comparison/{playerId}/{season}/{gameType}',\n /** Goalie leaders landing page. */\n leaders: 'edge/goalie-landing/{season}/{gameType}',\n /** Goalie 5v5 save percentage statistics. */\n savePercentage5v5:\n 'edge/goalie-5v5-detail/{playerId}/{season}/{gameType}',\n /** Goalie save percentage statistics. */\n savePercentage:\n 'edge/goalie-save-percentage-detail/{playerId}/{season}/{gameType}',\n /** Goalie shot location analysis. */\n saveLocation:\n 'edge/goalie-shot-location-detail/{playerId}/{season}/{gameType}',\n /** Goalie top 10 leaders. */\n top10: {\n /** Top 10 goalies by save percentage. */\n SavePercentage: 'edge/goalie-5v5-top-10/{sortBy}/{season}/{gameType}',\n /** Top 10 goalies by 5v5 save percentage. */\n SavePercentage5v5:\n 'edge/goalie-edge-save-pctg-top-10/{sortBy}/{season}/{gameType}',\n /** Top 10 goalies by shot location. */\n SaveLocation:\n 'edge/goalie-shot-location-top-10/{category}/{sortBy}/{season}/{gameType}',\n },\n};\n\n/** API endpoint paths for skater-related advanced statistics. */\nexport const skatersPaths = {\n /** Skater detail page. */\n player: 'skater-detail/{playerId}/{season}/{gameType}',\n /** Skater comparison data. */\n compare: 'skater-comparison/{playerId}/{season}/{gameType}',\n /** Skater leaders landing page. */\n leaders: 'skater-landing/{season}/{gameType}',\n /** Skater shot location analysis. */\n shotLocation:\n 'skater-shot-location-detail/{playerId}/{season}/{gameType}',\n /** Skater shot speed analysis. */\n shotSpeed: 'skater-shot-speed-detail/{playerId}/{season}/{gameType}',\n /** Skater skating distance analysis. */\n skatingDistance:\n 'skater-skating-distance-detail/{playerId}/{season}/{gameType}',\n /** Skater skating speed analysis. */\n skatingSpeed:\n 'skater-skating-speed-detail/{playerId}/{season}/{gameType}',\n /** Skater zone time analysis. */\n zoneTime: 'skater-zone-time/{playerId}/{season}/{gameType}',\n /** Skater top 10 leaders. */\n top10: {\n /** Top 10 skaters by shot location. */\n shotLocation:\n 'skater-shot-location-top-10/{position}/{category}/{sortBy}/{season}/{gameType}',\n /** Top 10 skaters by shot speed. */\n shotSpeed:\n 'skater-shot-speed-top-10/{position}/{sortBy}/{season}/{gameType}',\n /** Top 10 skaters by skating distance. */\n skatingDistance:\n 'skater-distance-top-10/{position}/{strength}/{sortBy}/{season}/{gameType}',\n /** Top 10 skaters by skating speed. */\n skatingSpeed:\n 'skater-speed-top-10/{position}/{sortBy}/{season}/{gameType}',\n /** Top 10 skaters by zone time. */\n zoneTime:\n 'skater-zone-time-top-10/{position}/{strength}/{sortBy}/{season}/{gameType}',\n },\n};\n\n/** API endpoint paths for team-related advanced statistics. */\nexport const teamsPaths = {\n /** Team statistics detail page. */\n stats: 'edge/team-comparison/{teamId}/{season}/{gameType}',\n /** Team comparison data. */\n compare: 'edge/team-detail/{teamId}/{season}/{gameType}',\n /** Team leaders landing page. */\n leaders: 'edge/team-landing/{season}/{gameType}',\n /** Team shot location analysis. */\n shotLocation:\n 'edge/team-shot-location-detail/{teamId}/{season}/{gameType}',\n /** Team shot speed analysis. */\n shotSpeed:\n 'edge/team-shot-location-top-10/{position}/{category}/{sortBy}/{season}/{gameType}',\n /** Team skating distance analysis. */\n skatingDistance:\n 'edge/team-shot-speed-detail/{teamId}/{season}/{gameType}',\n /** Team skating speed analysis. */\n skatingSpeed:\n 'edge/team-shot-speed-top-10/{position}/{sortBy}/{season}/{gameType}',\n /** Team zone time analysis. */\n zoneTime:\n 'edge/team-skating-distance-detail/{teamId}/{season}/{gameType}',\n /** Team top 10 leaders. */\n top10: {\n /** Top 10 teams by shot location. */\n shotLocation:\n 'edge/team-skating-distance-top-10/{position}/{strength}/{sortBy}/{season}/{gameType}',\n /** Top 10 teams by shot speed. */\n shotSpeed:\n 'edge/team-skating-speed-detail/{teamId}/{season}/{gameType}',\n /** Top 10 teams by skating distance. */\n skatingDistance:\n 'edge/team-skating-speed-top-10/{position}/{sortBy}/{season}/{gameType}',\n /** Top 10 teams by skating speed. */\n skatingSpeed:\n 'edge/team-zone-time-details/{teamId}/{season}/{gameType}',\n /** Top 10 teams by zone time. */\n zoneTime:\n 'edge/team-zone-time-top-10/{strength}/{sortBy}/{season}/{gameType}',\n },\n};\n\n/** API endpoint paths for edge home page data. */\nexport const summaryPaths = {\n /** By the numbers summary. */\n byTheNumbers: 'edge/by-the-numbers/now',\n};\n","/**\n * ======================================================================\n * API endpoints for skater-related data.\n * Base url: api-web.nhle.com/v1/edge\n *\n * Notes:\n * - Convenience endpoints using 'now' for season have been\n * excluded in favor of using calculated current season. You can optionally\n * configure the switch over date for how current season is calculated.\n * See README for details.\n * - There is an extra endpoint that appears to duplicate\n * the functionality of /skater-detail at `v1/cat/edge/skater-detail`\n * As such, it has been excluded from this implementation.\n * =====================================================================\n */\n\nimport { nhlClient } from '#/client/index.ts';\nimport { NHLError } from '#/errors/index.ts';\nimport {\n BaseParams,\n isParseError,\n PlayerParams,\n ShotLocationCategory as ShotLocationCategorySchema,\n ShotLocationSort as ShotLocationSortSchema,\n ShotSpeedSort as ShotSpeedSortSchema,\n SkatingDistanceSort as SkatingDistanceSortSchema,\n SkatingSpeedSort as SkatingSpeedSortSchema,\n top10Params,\n ZoneTimeSort as ZoneTimeSortSchema,\n} from '#/utils/schemas.ts';\nimport type {\n GameType,\n PlayerId,\n PositionFilter,\n Season,\n ShotLocationCategory,\n ShotLocationSort,\n ShotSpeedSort,\n SkatersStrength,\n SkatingDistanceSort,\n SkatingSpeedSort,\n ZoneTimeSort,\n} from '../../types/types.ts';\nimport { resolvePath } from '../../utils/utils.ts';\nimport { skatersPaths as p } from './paths.ts';\n\n/**\n * Skater Edge Advanced Stats API helpers.\n *\n * Lightweight wrapper exposing functions that call the underlying nhlClient\n * for skater-related endpoints. Each method returns the raw Promise from the\n * client.get call.\n */\n\n/** Get skater detail for a player. */\nexport async function detail(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.player,\n }),\n );\n const path = resolvePath(p.player, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater shot location details for a player. */\nexport async function shotLocation(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.shotLocation,\n }),\n );\n const path = resolvePath(p.shotLocation, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater shot speed details for a player. */\nexport async function shotSpeed(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.shotSpeed,\n }),\n );\n const path = resolvePath(p.shotSpeed, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater skating distance details for a player. */\nexport async function skatingDistance(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.skatingDistance,\n }),\n );\n const path = resolvePath(p.skatingDistance, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater skating speed details for a player. */\nexport async function skatingSpeed(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.skatingSpeed,\n }),\n );\n const path = resolvePath(p.skatingSpeed, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater zone time for a player. */\nexport async function zoneTime(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.zoneTime,\n }),\n );\n const path = resolvePath(p.zoneTime, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater comparison data for a player. */\nexport async function comparison(\n playerId: PlayerId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = PlayerParams({ playerId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.compare,\n }),\n );\n const path = resolvePath(p.compare, parsed);\n return nhlClient.get(path);\n}\n\n/** Get skater landing / leaders for a season. */\nexport async function leaders(\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.leaders,\n }),\n );\n const path = resolvePath(p.leaders, parsed);\n return nhlClient.get(path);\n}\n\nexport const top10 = {\n distance: top10Distance,\n shotLocation: top10ShotLocation,\n shotSpeed: top10ShotSpeed,\n speed: top10Speed,\n zoneTime: top10ZoneTime,\n};\n\n/** Top-10 skating distance lists. */\nasync function top10Distance(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n strength?: SkatersStrength,\n sortBy?: SkatingDistanceSort,\n): Promise<unknown> {\n const parsed = top10Params.merge({\n sortBy: SkatingDistanceSortSchema.default('TOTAL'),\n })({\n season,\n gameType,\n position,\n strength,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.skatingDistance,\n }),\n );\n const path = resolvePath(p.top10.skatingDistance, parsed);\n return nhlClient.get(path);\n}\n/** Top-10 shot location lists. */\nasync function top10ShotLocation(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n category?: ShotLocationCategory,\n sortBy?: ShotLocationSort,\n): Promise<unknown> {\n const parsed = top10Params.merge({\n category: ShotLocationCategorySchema.default('G'),\n sortBy: ShotLocationSortSchema.default('ALL'),\n })({\n season,\n gameType,\n position,\n category,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.shotLocation,\n }),\n );\n const path = resolvePath(p.top10.shotLocation, parsed);\n return nhlClient.get(path);\n}\n/** Top-10 shot speed lists. */\nasync function top10ShotSpeed(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n sortBy?: ShotSpeedSort,\n): Promise<unknown> {\n const parsed = top10Params.merge({\n sortBy: ShotSpeedSortSchema.default('MAX'),\n })({\n season,\n gameType,\n position,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.shotSpeed,\n }),\n );\n const path = resolvePath(p.top10.shotSpeed, parsed);\n return nhlClient.get(path);\n}\n/** Top-10 skating speed lists. */\nasync function top10Speed(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n sortBy?: SkatingSpeedSort,\n): Promise<unknown> {\n const parsed = top10Params.merge({\n sortBy: SkatingSpeedSortSchema.default('TOP'),\n })({\n season,\n gameType,\n position,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.skatingSpeed,\n }),\n );\n const path = resolvePath(p.top10.skatingSpeed, parsed);\n return nhlClient.get(path);\n}\n/** Top-10 zone time lists. */\nasync function top10ZoneTime(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n strength?: SkatersStrength,\n sortBy?: ZoneTimeSort,\n): Promise<unknown> {\n const parsed = top10Params.merge({\n sortBy: ZoneTimeSortSchema.default('OZ'),\n })({\n season,\n gameType,\n position,\n strength,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.top10.zoneTime,\n }),\n );\n const path = resolvePath(p.top10.zoneTime, parsed);\n return nhlClient.get(path);\n}\n","/**\n * ======================================================================\n * API endpoints for the edge home page, updated daily with\n * insights from the previous days games.\n * Base url: api-web.nhle.com/v1/edge\n * Available endpoints: see `edge.paths`\n * ======================================================================\n */\nimport { nhlClient } from '#/client/index.ts';\nimport { summaryPaths as p } from './paths.ts';\n\n/**\n * Edge Advanced Stats API helpers.\n *\n * Lightweight wrapper exposing functions that call the underlying nhlClient\n * for related endpoints. Each method returns the raw Promise from the\n * client.get call.\n */\n\n/**\n * Get the \"by the numbers\" data for the current day, updated daily with\n * insights from the previous days games.\n * @returns A promise that resolves to the \"by the numbers\" data.\n */\nexport async function byTheNumbers() {\n return nhlClient.get(p.byTheNumbers);\n}\n","/**\n * ======================================================================\n * API endpoints for team-related data.\n * Base url: api-web.nhle.com/v1/edge\n *\n * note: the season and game-type params on any endpoint can\n * be replaced with 'now' to get current season data.\n * ex. `/team-detail/{team-id}/now`\n * ======================================================================\n */\n\nimport { nhlClient } from '#/client/index.ts';\nimport { NHLError } from '#/errors/index.ts';\nimport {\n BaseParams,\n isParseError,\n PositionFilter as PositionFilterSchema,\n ShotLocationCategory as ShotLocationCategorySchema,\n ShotLocationSort as ShotLocationSortSchema,\n ShotSpeedSort as ShotSpeedSortSchema,\n SkatersStrength as SkatersStrengthSchema,\n SkatingDistanceSort as SkatingDistanceSortSchema,\n SkatingSpeedSort as SkatingSpeedSortSchema,\n TeamParams,\n ZoneTimeSort as ZoneTimeSortSchema,\n} from '#/utils/schemas.ts';\nimport type {\n GameType,\n PositionFilter,\n Season,\n ShotLocationCategory,\n ShotLocationSort,\n ShotSpeedSort,\n SkatersStrength,\n SkatingDistanceSort,\n SkatingSpeedSort,\n TeamId,\n ZoneTimeSort,\n} from '../../types/types.ts';\nimport { resolvePath } from '../../utils/utils.ts';\nimport { teamsPaths as p } from './paths.ts';\n\n/**\n * Team Edge Advanced Stats API helpers.\n *\n * Lightweight wrapper exposing functions that call the underlying nhlClient\n * for team-related endpoints. Each method returns the raw Promise from the\n * client.get call.\n */\n\n/**\n * Get team detail stats for a team.\n * @param teamId - Team numeric id.\n * @param season - Optional season (numeric season format or 'now').\n * @param gameType - Optional game type id (defaults to Regular Season).\n */\nexport async function stats(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.stats,\n }),\n );\n const path = resolvePath(p.stats, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get team comparison data for a single team.\n */\nexport async function compare(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n gameType ??= 'REG';\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.compare,\n }),\n );\n const path = resolvePath(p.compare, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get team landing/leaders for a season.\n */\nexport async function leaders(\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = BaseParams({ season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.leaders,\n }),\n );\n const path = resolvePath(p.leaders, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get shot location details for a team.\n */\nexport async function shotLocation(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.shotLocation,\n }),\n );\n const path = resolvePath(p.shotLocation, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get shot speed details for a team.\n */\nexport async function shotSpeed(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.shotSpeed,\n }),\n );\n const path = resolvePath(p.shotSpeed, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get skating distance details for a team.\n */\nexport async function skatingDistance(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.skatingDistance,\n }),\n );\n const path = resolvePath(p.skatingDistance, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get skating speed details for a team.\n */\nexport async function skatingSpeed(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.skatingSpeed,\n }),\n );\n const path = resolvePath(p.skatingSpeed, parsed);\n return nhlClient.get(path);\n}\n\n/**\n * Get zone time details for a team.\n */\nexport async function zoneTime(\n teamId: TeamId,\n season?: Season,\n gameType?: GameType,\n): Promise<unknown> {\n const parsed = TeamParams({ teamId, season, gameType });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.zoneTime,\n }),\n );\n const path = resolvePath(p.zoneTime, parsed);\n return nhlClient.get(path);\n}\n\nexport const top10 = {\n shotLocation: top10ShotLocation,\n shotSpeed: top10ShotSpeed,\n skatingDistance: top10SkatingDistance,\n skatingSpeed: top10SkatingSpeed,\n zoneTime: top10ZoneTime,\n};\n/**\n * Top-10 team shot location lists.\n */\nasync function top10ShotLocation(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n category?: ShotLocationCategory,\n sortBy?: ShotLocationSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n position: PositionFilterSchema.default('ALL'),\n category: ShotLocationCategorySchema.default('G'),\n sortBy: ShotLocationSortSchema.default('ALL'),\n });\n const parsed = Parser({\n season,\n gameType,\n position,\n category,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.shotLocation,\n }),\n );\n const path = resolvePath(p.top10.shotLocation, parsed);\n return nhlClient.get(path);\n}\n/**\n * Top-10 team shot speed lists.\n */\nasync function top10ShotSpeed(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n sortBy?: ShotSpeedSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n position: PositionFilterSchema.default('ALL'),\n sortBy: ShotSpeedSortSchema.default('MAX'),\n });\n const parsed = Parser({\n season,\n gameType,\n position,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.shotSpeed,\n }),\n );\n const path = resolvePath(p.top10.shotSpeed, parsed);\n return nhlClient.get(path);\n}\n/**\n * Top-10 team skating distance lists.\n */\nasync function top10SkatingDistance(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n strength?: SkatersStrength,\n sortBy?: SkatingDistanceSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n position: PositionFilterSchema.default('ALL'),\n strength: SkatersStrengthSchema.default('ALL'),\n sortBy: SkatingDistanceSortSchema.default('TOTAL'),\n });\n const parsed = Parser({\n season,\n gameType,\n position,\n strength,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.skatingDistance,\n }),\n );\n const path = resolvePath(p.top10.skatingDistance, parsed);\n return nhlClient.get(path);\n}\n/**\n * Top-10 team skating speed lists.\n */\nasync function top10SkatingSpeed(\n season?: Season,\n gameType?: GameType,\n position?: PositionFilter,\n sortBy?: SkatingSpeedSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n position: PositionFilterSchema.default('ALL'),\n sortBy: SkatingSpeedSortSchema.default('TOP'),\n });\n const parsed = Parser({\n season,\n gameType,\n position,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.skatingSpeed,\n }),\n );\n const path = resolvePath(p.top10.skatingSpeed, parsed);\n return nhlClient.get(path);\n}\n/**\n * Top-10 team zone time lists.\n */\nasync function top10ZoneTime(\n season?: Season,\n gameType?: GameType,\n strength?: SkatersStrength,\n sortBy?: ZoneTimeSort,\n): Promise<unknown> {\n const Parser = BaseParams.merge({\n strength: SkatersStrengthSchema.default('ALL'),\n sortBy: ZoneTimeSortSchema.default('OZ'),\n });\n const parsed = Parser({\n season,\n gameType,\n strength,\n sortBy,\n });\n if (isParseError(parsed))\n return Promise.reject(\n new NHLError(parsed.summary, 'VALIDATION', {\n endpoint: p.zoneTime,\n }),\n );\n const path = resolvePath(p.top10.zoneTime, parsed);\n return nhlClient.get(path);\n}\n","/**\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 { resolvePath } from '#/utils/utils.ts';\nimport { draftPaths as p } 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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.draftPicks.byYearAndRound,\n }),\n };\n }\n let path = '';\n if (parsed.year && !parsed.round) {\n path = resolvePath(p.draftPicks.byYear, parsed);\n } else {\n path = resolvePath(p.draftPicks.byYearAndRound, parsed);\n }\n return nhlClient.get(path);\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(p.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 success: false,\n error: new ValidationError(parsedYear.summary, {\n endpoint: p.draftRankings,\n }),\n };\n }\n const path = resolvePath(p.draftRankings, { year: parsedYear, type });\n return nhlClient.get(path);\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.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 success: true,\n data: dataOnly,\n };\n return newResponse;\n } catch (error) {\n return {\n success: false,\n error: error as NHLError,\n };\n }\n },\n };\n}\n","/**\n * ======================================================================\n * NHL GameCenter API - Endpoint Paths\n * Base URL: https://api-web.nhle.com/v1\n * ======================================================================\n * This module defines the endpoint paths for the NHL GameCenter API,\n * organized by category (teams, scores, players, games, drafts, and misc).\n * Each path includes placeholders for dynamic parameters such as team ID,\n * player ID, game ID, date, season, game type, year, series letter, etc.\n */\n\n/** API endpoint paths for team-related data. */\nexport const teamPaths = {\n /** Team roster seasons. */\n rosterSeasons: 'roster-season/{team}',\n /** Team roster for a specific season. */\n roster: 'roster/{team}/{season}',\n /** Team prospects. */\n prospects: 'prospects/{team}',\n /** Team club statistics for a specific season and game type. */\n clubStats: 'club-stats/{team}/{season}/{gameType}',\n /** Team club statistics summary for a season. */\n clubStatsSeason: 'club-stats-season/{team}',\n /** League standings for a specific date. */\n standings: 'standings/{date}',\n /** League standings summary for a season. */\n standingsSeason: 'standings-season',\n /** Team schedule data. */\n clubSchedule: {\n /** Team schedule for a season. */\n season: 'club-schedule-season/{team}/{season}',\n /** Team schedule for a specific month. */\n month: 'club-schedule/{team}/month/{month}',\n /** Team schedule for a specific week. */\n week: 'club-schedule/{team}/week/{date}',\n },\n};\n\n/** API endpoint paths for game score data. */\nexport const scorePaths = {\n /** Game scores for a specific date. */\n score: 'score/{date}',\n /** Scoreboard data. */\n scoreboard: {\n /** Current scoreboard. */\n now: 'scoreboard/now',\n /** Scoreboard for a specific team. */\n byTeam: 'scoreboard/{team}/now',\n /** Scoreboard for a specific date. */\n byDate: 'scoreboard/{date}',\n },\n};\n\n/** API endpoint paths for player-related data. */\nexport const playerPaths = {\n /** Player landing page data. */\n landing: 'player/{playerId}/landing',\n /** Player game log for a season and game type. */\n gameLog: 'player/{playerId}/game-log/{season}/{gameType}',\n /** Current player spotlight. */\n spotlight: 'player-spotlight',\n /** Player statistics leaders. */\n statsLeaders: {\n /** Skater statistics leaders. */\n skaters: 'skater-stats-leaders/{season}/{gameType}',\n /** Goalie statistics leaders. */\n goalies: 'goalie-stats-leaders/{season}/{gameType}',\n },\n /** Player search functionality. */\n playerSearch: 'https://search.d3.nhle.com/api/v1/search/player',\n};\n\n/** API endpoint paths for miscellaneous data. */\nexport const miscPaths = {\n /** Current season information. */\n season: 'season',\n /** Playoff series metadata for a specific year and series. */\n metaPlayoffSeries: 'meta/playoff-series/{year}/{seriesLetter}',\n /** Game metadata. */\n metaGame: 'meta/game/{gameId}',\n /** Location lookup by postal code. */\n postalLookup: 'postal-lookup/{postalCode}',\n /** Location information. */\n location: 'location',\n /** Partner game for a specific country. */\n partnerGame: 'partner-game/{countryCode}/now',\n};\n\n/** API endpoint paths for game-related data. */\nexport const gamePaths = {\n /** Game schedule for a specific date. */\n schedule: 'schedule/{date}',\n /** Game schedule calendar for a specific date. */\n scheduleCalendar: 'schedule-calendar/{date}',\n /** Playoff bracket for a specific year. */\n playoffBracket: 'playoff-bracket/{year}',\n /** Playoff series carousel for a season. */\n playoffSeries: 'playoff-series/carousel/{season}',\n /** Playoff series schedule. */\n playoffSeriesSchedule: 'schedule/playoff-series/{season}/{seriesLetter}',\n /** Game center data with multiple views. */\n gamecenter: {\n /** Play-by-play data for a game. */\n playByPlay: 'gamecenter/{gameId}/play-by-play',\n /** Right rail reports for a game. */\n reports: 'gamecenter/{gameId}/right-rail',\n /** Game landing page. */\n landing: 'gamecenter/{gameId}/landing',\n /** Game box score. */\n boxscore: 'gamecenter/{gameId}/boxscore',\n },\n /** Web Stat Center (WSC) data. */\n wsc: {\n /** Game story from WSC. */\n gameStory: 'wsc/game-story/{gameId}',\n /** Play-by-play from WSC. */\n playByPlay: 'wsc/play-by-play/{gameId}',\n },\n /** PPT replay data. */\n pptReplay: {\n /** Goal replay. */\n goal: 'ppt-replay/goal/{gameId}/{eventId}',\n /** Event replay. */\n event: 'ppt-replay/{gameId}/{eventId}',\n },\n /** Where to watch information. */\n whereToWatch: 'where-to-watch',\n /** Network TV schedule for a specific date. */\n networkTVSchedule: 'network/tv-schedule/{date}',\n};\n\n/** API endpoint paths for draft-related data. */\nexport const draftPaths = {\n /** Draft picks data. */\n draftPicks: {\n /** Draft picks by year and round. */\n byYearAndRound: 'draft/picks/{year}/{round}',\n /** All draft picks for a year. */\n byYear: 'draft/picks/{year}/all',\n },\n /** Draft rankings for a year and type. */\n draftRankings: 'draft/rankings/{year}/{type}',\n /** Current draft tracker. */\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 GameId,\n LeagueSchedule,\n NetworkTVSchedule,\n PlayoffBracket,\n PlayoffSeries,\n PlayoffSeriesSchedule,\n PPTReplayEvent,\n PPTReplayGoal,\n ScheduleCalendar,\n Season,\n SeriesLetter,\n WhereToWatch,\n WSCGameStory,\n WSCPlayByPlay,\n Year,\n} from '#/types/index.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 { resolvePath } from '#/utils/utils.ts';\nimport { gamePaths as p } 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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.gamecenter.playByPlay,\n }),\n };\n }\n const path = resolvePath(p.gamecenter.playByPlay, {\n gameId: parsedGameId,\n });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.gamecenter.reports,\n }),\n };\n }\n const path = resolvePath(p.gamecenter.reports, { gameId: parsedGameId });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.gamecenter.landing,\n }),\n };\n }\n const path = resolvePath(p.gamecenter.landing, { gameId: parsedGameId });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.gamecenter.boxscore,\n }),\n };\n }\n const path = resolvePath(p.gamecenter.boxscore, {\n gameId: parsedGameId,\n });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.wsc.gameStory,\n }),\n };\n }\n const path = resolvePath(p.wsc.gameStory, { gameId: parsedGameId });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.wsc.playByPlay,\n }),\n };\n }\n const path = resolvePath(p.wsc.playByPlay, { gameId: parsedGameId });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.pptReplay.goal,\n }),\n };\n }\n const path = resolvePath(p.pptReplay.goal, { gameId, eventId });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.pptReplay.event,\n }),\n };\n }\n const path = resolvePath(p.pptReplay.event, { gameId, eventId });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedDate.summary, {\n endpoint: p.schedule,\n }),\n };\n }\n const path = resolvePath(p.schedule, { date: parsedDate });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedDate.summary, {\n endpoint: p.scheduleCalendar,\n }),\n };\n }\n const path = resolvePath(p.scheduleCalendar, { date: parsedDate });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedYear.summary, {\n endpoint: p.playoffBracket,\n }),\n };\n }\n const path = resolvePath(p.playoffBracket, { year: parsedYear });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedSeason.summary, {\n endpoint: p.playoffSeries,\n }),\n };\n }\n const path = resolvePath(p.playoffSeries, { season: parsedSeason });\n return nhlClient.get(path);\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 */\n\nexport async function playoffSeriesSchedule(\n seriesLetter: SeriesLetter,\n season?: Season,\n): Promise<APIResponse<PlayoffSeriesSchedule>>;\nexport async function playoffSeriesSchedule(\n seriesLetter: string,\n season?: Season,\n): Promise<APIResponse<PlayoffSeriesSchedule>>;\nexport async function playoffSeriesSchedule(\n seriesLetter: SeriesLetter | string,\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.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 const path = resolvePath(p.playoffSeriesSchedule, parsed);\n return nhlClient.get(path);\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 const path = resolvePath(p.whereToWatch, {});\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedDate.summary, {\n endpoint: p.networkTVSchedule,\n }),\n };\n }\n const path = resolvePath(p.networkTVSchedule, { date: parsedDate });\n return nhlClient.get(path);\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 { resolvePath } from '#/utils/utils.ts';\nimport { miscPaths as p } 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(p.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 success: false,\n error: new ValidationError(parsedGameId.summary, {\n endpoint: p.metaGame,\n }),\n };\n }\n const path = resolvePath(p.metaGame, { gameId: parsedGameId });\n return nhlClient.get(path);\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>>;\nasync function metaPlayoffSeries(\n seriesLetter: string,\n year?: Year,\n): Promise<APIResponse<PlayoffSeriesMeta>>;\nasync function metaPlayoffSeries(\n seriesLetter: SeriesLetter | string,\n year?: Year,\n): Promise<APIResponse<PlayoffSeriesMeta>> {\n const parsed = SeriesParams({ year, seriesLetter });\n if (isParseError(parsed)) {\n return {\n success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.metaPlayoffSeries,\n }),\n };\n }\n const path = resolvePath(p.metaPlayoffSeries, parsed);\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsedPostalCode.summary, {\n endpoint: p.postalLookup,\n }),\n };\n }\n const path = resolvePath(p.postalLookup, {\n postalCode: parsedPostalCode,\n });\n return nhlClient.get(path);\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(p.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 success: false,\n error: new ValidationError(parsedCountryCode.summary, {\n endpoint: p.partnerGame,\n }),\n };\n }\n const path = resolvePath(p.partnerGame, {\n countryCode: parsedCountryCode,\n });\n return nhlClient.get(path);\n}\n","/**\n * @module api/gamecenter/player\n * @description Player-related API endpoints for player information, stats, game logs, and search\n */\n\nimport { createNHLClient, nhlClient } 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/index.ts';\nimport type { GameType, Season } from '#/types/types.ts';\nimport { BaseParams, isParseError, PlayerId } from '#/utils/schemas.ts';\nimport { resolvePath } from '#/utils/utils.ts';\nimport { playerPaths as p } from './paths.ts';\n\nconst nhlPlayerSearch = createNHLClient(p.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 success: false,\n error: new ValidationError(parsedPlayerId.summary, {\n endpoint: p.landing,\n }),\n };\n }\n const path = resolvePath(p.landing, { playerId: parsedPlayerId });\n return nhlClient.get(path);\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>>;\nexport async function gameLog(\n playerId: number | string,\n season?: Season,\n gameType?: number | string,\n): Promise<APIResponse<PlayerGameLog>>;\nexport async function gameLog(\n playerId: number | string,\n season?: Season,\n gameType?: 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 {\n success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.gameLog,\n }),\n };\n }\n const path = resolvePath(p.gameLog, parsed);\n return nhlClient.get(path);\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(p.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 * @deprecated This endpoint is deprecated and may be removed in future versions. Use the NHL Stats API player endpoint instead.\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[] | undefined>> {\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.statsLeaders.skaters,\n }),\n };\n }\n const path = resolvePath(p.statsLeaders.skaters, parsed);\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.statsLeaders.goalies,\n }),\n };\n }\n const path = resolvePath(p.statsLeaders.goalies, parsed);\n return nhlClient.get(path);\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 { Score, Scoreboard, 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 { resolvePath } from '#/utils/utils.ts';\nimport { scorePaths as p } 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<Score>> {\n const parsed = NHLDate(date ?? getCurrentDate());\n if (isParseError(parsed)) {\n return {\n success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.score,\n }),\n };\n }\n const path = resolvePath(p.score, { date: parsed });\n return nhlClient.get(path);\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<Scoreboard>> {\n return nhlClient.get(p.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<Scoreboard>> => {\n const parsed = Team(team);\n if (isParseError(parsed)) {\n return {\n success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.scoreboard.byTeam,\n }),\n };\n }\n const path = resolvePath(p.scoreboard.byTeam, { team: parsed });\n return nhlClient.get(path);\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<Scoreboard>> => {\n const parsed = NHLDate(date);\n if (isParseError(parsed)) {\n return {\n success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.scoreboard.byDate,\n }),\n };\n }\n const path = resolvePath(p.scoreboard.byDate, { date: parsed });\n return nhlClient.get(path);\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 { resolvePath } from '../../utils/utils.ts';\nimport { teamPaths as p } 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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.rosterSeasons,\n }),\n };\n }\n const path = resolvePath(p.rosterSeasons, { team: parsed });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.roster,\n }),\n };\n }\n const path = resolvePath(p.roster, parsed);\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.prospects,\n }),\n };\n }\n const path = resolvePath(p.prospects, { team: parsed });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.clubStats,\n }),\n };\n }\n const path = resolvePath(p.clubStats, parsed);\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.clubStatsSeason,\n }),\n };\n }\n const path = resolvePath(p.clubStatsSeason, { team: parsed });\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.standings,\n }),\n };\n }\n const path = resolvePath(p.standings, { date: parsed });\n return nhlClient.get(path);\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(p.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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.clubSchedule.week,\n }),\n };\n }\n const path = resolvePath(p.clubSchedule.week, parsed);\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.clubSchedule.month,\n }),\n };\n }\n const path = resolvePath(p.clubSchedule.month, parsed);\n return nhlClient.get(path);\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 success: false,\n error: new ValidationError(parsed.summary, {\n endpoint: p.clubSchedule.season,\n }),\n };\n }\n const path = resolvePath(p.clubSchedule.season, parsed);\n return nhlClient.get(path);\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"]}