UNPKG

@xboxreplay/xboxlive-auth

Version:

A lightweight, zero-dependency Xbox Network (Xbox Live) authentication library for Node.js with OAuth 2.0 support.

157 lines (156 loc) 7.25 kB
/** * Copyright 2025 Alexis Bize * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import FetchClientException from './Exceptions/XRFetchClientException'; import type { FetchRequestConfig, FetchResponse } from './Fetch.types'; export declare const MIN_TIMEOUT = 1000; export declare const MAX_TIMEOUT = 30000; export declare const DEFAULT_TIMEOUT = 10000; export declare const DEFAULT_OPTIONS: Partial<FetchRequestConfig['options']>; /** * Base fetch client for making HTTP requests * Can be extended for specialized API clients */ declare abstract class XRFetch { /** * Default user agent used during requests */ protected static USER_AGENT: string; /** * Makes a GET request to an endpoint * @template T - The expected response data type * @param {string} url - The URL to make the request to * @param {Omit<FetchRequestConfig, 'method' | 'body'>} [config={}] - Request config excluding method and body * @returns {Promise<FetchResponse<T>>} A promise that resolves to the response data * @throws {FetchClientException} If the request fails */ static get<T = any>(url: string, init?: Omit<FetchRequestConfig, 'method' | 'body'>): Promise<FetchResponse<T>>; /** * Makes a POST request to an endpoint * @template T - The expected response data type * @param {string} url - The URL to make the request to * @param {any} [body] - The request body (will be automatically stringified if an object) * @param {Omit<FetchRequestConfig, 'method' | 'body'>} [init={}] - Request config excluding method and body * @returns {Promise<FetchResponse<T>>} A promise that resolves to the response data * @throws {FetchClientException} If the request fails */ static post<T = any>(url: string, body?: any, init?: Omit<FetchRequestConfig, 'method' | 'body'>): Promise<FetchResponse<T>>; /** * Makes a PUT request to an endpoint * @template T - The expected response data type * @param {string} url - The URL to make the request to * @param {any} [body] - The request body (will be automatically stringified if an object) * @param {Omit<FetchRequestConfig, 'method' | 'body'>} [config={}] - Request config excluding method and body * @returns {Promise<FetchResponse<T>>} A promise that resolves to the response data * @throws {FetchClientException} If the request fails */ static put<T = any>(url: string, body?: any, init?: Omit<FetchRequestConfig, 'method' | 'body'>): Promise<FetchResponse<T>>; /** * Makes a DELETE request to an endpoint * @template T - The expected response data type * @param {string} url - The URL to make the request to * @param {Omit<FetchRequestConfig, 'method'>} [init={}] - Request config excluding method * @returns {Promise<FetchResponse<T>>} A promise that resolves to the response data * @throws {FetchClientException} If the request fails */ static delete<T = any>(url: string, init?: Omit<FetchRequestConfig, 'method'>): Promise<FetchResponse<T>>; /** * Runs a fetch request * @template T - The expected response data type * @param {string} url - The URL to request * @param {FetchRequestConfig} [config={}] - Fetch options * @returns {Promise<FetchResponse<T>>} Promise resolving to the response data * @throws {FetchClientException} If the request fails */ static fetch<T = any>(url: string, config?: FetchRequestConfig): Promise<FetchResponse<T>>; /** * Merges provided options with defaults * @param {FetchRequestConfig['options']} [options={}] - The options to merge * @returns {FetchRequestConfig['options']} Merged options * @protected */ protected static mergeOptions(options?: FetchRequestConfig['options']): NonNullable<FetchRequestConfig['options']>; /** * Creates headers for the request * @param {FetchRequestConfig} config - The request config * @returns {Headers} The headers object * @protected */ protected static createHeaders(config: FetchRequestConfig): Headers; /** * Processes the request body * @param {any} body - The request body * @returns {any} The processed body * @protected */ protected static processBody(body: any): any; /** * Calculates the appropriate timeout value * @param {number} [timeout] - The provided timeout * @returns {number|undefined} The calculated timeout * @protected */ protected static calculateTimeout(timeout?: number): number | undefined; /** * Performs the actual fetch request * @param {string} url - The URL to fetch * @param {RequestInit} init - The fetch request config * @returns {Promise<Response>} The fetch response * @protected */ protected static performFetch(url: string, init: RequestInit): Promise<Response>; /** * Extracts headers from the response * @param {Response} response - The fetch response * @returns {Record<string, string>} The headers as an object * @protected */ protected static extractHeaders(response: Response): Record<string, string>; /** * Creates an error from a failed response * @param {Response} response - The fetch response * @returns {Promise<FetchClientException>} The created error * @protected */ protected static createErrorFromResponse(response: Response): Promise<FetchClientException>; /** * Creates an error from a network error * @param {any} error - The original error * @param {string} url - The request URL * @returns {FetchClientException} The created error * @protected */ protected static createErrorFromNetworkError(error: any, url: string): FetchClientException; /** * Parses the response data based on content type * @template T - The expected data type * @param {Response} response - The fetch response * @param {FetchRequestConfig['options']} [options={}] - The fetch options * @returns {Promise<T>} The parsed data * @protected */ protected static parseResponseData<T>(response: Response, options?: FetchRequestConfig['options']): Promise<T>; /** * Creates the final response object * @template T - The expected data type * @param {T} data - The response data * @param {Response} response - The original fetch response * @param {Record<string, string>} headers - The extracted headers * @returns {FetchResponse<T>} The final response object * @protected */ protected static createResponse<T>(data: T, response: Response, headers: Record<string, string>): FetchResponse<T>; } export default XRFetch;