UNPKG

rivalsjs

Version:

<h1 align="center"> Rivals JS </h1>

1 lines 8.96 kB
{"version":3,"file":"index.cjs","sources":["../src/logger.ts","../src/index.ts"],"sourcesContent":["import pino from \"pino\";\n\nexport const logger = pino({\n name: \"rivalsjs\",\n level:\n process.env.NODE_ENV === \"production\"\n ? process.env.LOG_LEVEL || \"info\"\n : \"debug\",\n transport:\n process.env.NODE_ENV === \"production\"\n ? undefined\n : {\n target: \"pino-pretty\",\n options: {\n colorize: true,\n },\n },\n});\n","import axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport camelcaseKeys from \"camelcase-keys\";\nimport { BASE_API_URL } from \"./constants\";\nimport { logger } from \"./logger\";\nimport type { ClientConfig } from \"./types\";\n\nexport type Client = ReturnType<typeof buildAxios>;\n\n/**\n * Create an Axios client to be used with RivalsJS.\n *\n * @export\n * @param {ClientConfig} config\n * @returns {Client}\n */\nexport function createRivalsClient(config: ClientConfig): Client {\n if (!config.apiKey) {\n throw new Error(\"API key is required to create a client.\");\n }\n\n if (\n config.retryOnRateLimit === undefined ||\n config.retryOnRateLimit === null\n ) {\n logger.warn(\n \"`retryOnRateLimit` is not set. Defaulting to `false`. Will throw an error on rate limit exceeded.\",\n );\n config.retryOnRateLimit = false;\n }\n\n if (\n config.verifyRateLimitHeader === undefined ||\n config.verifyRateLimitHeader === null\n ) {\n logger.warn(\n \"`verifyRateLimitHeader` is not set. Defaulting to `true`. Bad cache headers will throw error.\",\n );\n config.verifyRateLimitHeader = true;\n }\n\n const client = buildAxios(config);\n\n return client;\n}\n\nfunction buildAxios(config: ClientConfig) {\n const version = process.env.__PACKAGE_VERSION__ ?? \"dev\";\n\n logger.debug(\"Using RivalsJS version %s\", version);\n\n const client = axios.create({\n baseURL: BASE_API_URL,\n headers: {\n \"X-API-Key\": config.apiKey,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"User-Agent\": `RivalsJS/${version}`,\n },\n });\n\n client.interceptors.request.use(\n (config) => {\n logger.debug(\n \"Requesting %s %s\",\n config.method?.toUpperCase(),\n config.url,\n );\n return config;\n },\n (error) => {\n logger.error(\"Request error:\", error);\n return Promise.reject(error);\n },\n );\n\n // Dev shit\n client.interceptors.response.use(\n (response) => {\n const rateLimitRemaining = response.headers[\"x-ratelimit-remaining\"];\n\n // TODO: Find a better way to handle the healthcheck endpoint\n if (!rateLimitRemaining) {\n // This is a fallback for when the header is not present assuming it's the healthcheck endpoint\n return response;\n }\n\n logger.debug(\n \"Received %d response from %s %s\",\n response.status,\n response.config.method?.toUpperCase(),\n response.config.url,\n );\n\n logger.debug(\"Rate limit remaining: %s\", rateLimitRemaining);\n\n if (config.verifyRateLimitHeader) {\n if (\n String(rateLimitRemaining).toLowerCase() !== \"cache\" &&\n Number.isNaN(Number(rateLimitRemaining))\n ) {\n logger.error(\"Invalid rate limit header: %s\", rateLimitRemaining);\n\n return Promise.reject(\"Invalid rate limit header\");\n }\n }\n\n return response;\n },\n (error) => {\n if (error.response) {\n logger.error(\n \"Response error: %s %d - %s\",\n error.response.config.url,\n error.response.status,\n error.response.statusText,\n );\n logger.debug(\"Response data:\", error.response.data);\n } else {\n logger.error(\"Network or request error:\", error.message);\n }\n return Promise.reject(error);\n },\n );\n\n // Camelcase transformer\n client.interceptors.response.use(\n (response) => {\n const cleanedData = camelcaseKeys(response.data, { deep: true });\n\n return {\n ...response,\n data: cleanedData,\n };\n },\n (error) => Promise.reject(error),\n );\n\n // Retry section\n if (config.retryOnRateLimit) {\n axiosRetry(client, {\n retries: 2,\n retryCondition: (error) => {\n return (\n axiosRetry.isNetworkOrIdempotentRequestError(error) ||\n error.response?.status === 429\n );\n },\n retryDelay: (retryCount, error) => {\n const resetHeader = error.response?.headers[\"x-ratelimit-reset\"];\n\n if (error.response?.status === 429 && resetHeader) {\n const resetTimestamp = parseInt(resetHeader, 10) * 1000;\n const delay = Math.max(0, resetTimestamp - Date.now());\n logger.debug(\"Rate limit exceeded, retrying after %d ms\", delay);\n return delay;\n }\n\n return axiosRetry.exponentialDelay(retryCount, error);\n },\n });\n }\n\n return client;\n}\n"],"names":["BASE_API_URL"],"mappings":"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"}