UNPKG

esiil

Version:

Minimalist library for EVE Online's ESI

89 lines (81 loc) 3.43 kB
import fetch, {RequestInit, Response} from "node-fetch"; import Defaults from '../defaults' import ISendOpts from "../interfaces/SendOpts"; import {_cleanURL, _paramsToString} from './FetchdHelpers' import IExtraParametersWithSig from "../interfaces/ExtraParametersWithSig"; import ISendTokenOpts from "../interfaces/SendTokenOpts"; import IServiceResponse from "../interfaces/responses/ServiceResponse"; import ITokenServiceResponse from "../interfaces/responses/TokenServiceResponse"; import ICcpJwtServiceResponse from "../interfaces/responses/CcpJwtServiceResponse"; function _basicGet(path: string, extraParams: IExtraParametersWithSig): Promise<IServiceResponse> { const options = { method: 'GET', headers: { 'User-Agent': Defaults.userAgent } } const url = `${Defaults.domainAndVersion()}${_cleanURL(path)}${Defaults.queryParamStart()}${_paramsToString(extraParams)}` return doFetch(url, options) } function _sendPathRequest(path: string, extraParams: IExtraParametersWithSig, options: RequestInit, payload?: object): Promise<IServiceResponse> { const sendOpts: ISendOpts = { method: options.method || 'GET', headers: {...options.headers, ...{'User-Agent': Defaults.userAgent}}, } if (payload) sendOpts.body = JSON.stringify(payload) const url: string = `${Defaults.domainAndVersion()}${_cleanURL(path)}${Defaults.queryParamStart()}${_paramsToString(extraParams)}` return doFetch(url, sendOpts) } function _sendCustomRequest(url: string, options: RequestInit, payload: object = {}): Promise<IServiceResponse> { const sendOpts: ISendOpts = { method: options.method || 'GET', headers: {...options.headers, ...{'User-Agent': Defaults.userAgent}}, body: JSON.stringify(payload), } return doFetch(url, sendOpts) } async function _sendTokenRequest(url: string, options: RequestInit, payload: string): Promise<ITokenServiceResponse> { const sendOpts: ISendTokenOpts = { method: 'POST', headers: {...options.headers, ...{'User-Agent': Defaults.userAgent}}, body: payload, } return await doFetch(url, sendOpts) as ITokenServiceResponse } async function _jwtGet(): Promise<ICcpJwtServiceResponse> { const options = { method: 'GET', headers: { 'User-Agent': Defaults.userAgent } } return await doFetch('https://login.eveonline.com/oauth/jwks', options) as ICcpJwtServiceResponse } function doFetch(url: string, options: RequestInit): Promise<IServiceResponse> { const result = fetch(url, options) .then(async (resp: Response) => { const serviceResponse: IServiceResponse = { body: null, cacheExpires: resp.headers.get('expires') || '', headers: resp.headers.raw(), status: resp.status, statusText: resp.statusText, } if (resp.headers.get('Content-Type')?.toLowerCase() == 'application/json; charset=utf-8') { serviceResponse.body = await resp.json() return serviceResponse } else { serviceResponse.body = await resp.text() return serviceResponse } }) return result } export { _basicGet, _sendPathRequest, _sendCustomRequest, _sendTokenRequest, _jwtGet, doFetch }