UNPKG

@shogun-sdk/money-legos

Version:

Shogun Money Legos: clients and types for quotes, memes, prices, balances, fees, validations, etc.

32 lines (27 loc) 875 B
import axios, { AxiosInstance } from 'axios'; import { handleApiError } from './errors.js'; import { RateLimiter } from './rateLimiter.js'; export class HttpApi { private client: AxiosInstance; private endpoint: string; private rateLimiter: RateLimiter; constructor(baseUrl: string, endpoint: string = '/', rateLimiter: RateLimiter) { this.endpoint = endpoint; this.client = axios.create({ baseURL: baseUrl, headers: { 'Content-Type': 'application/json', }, }); this.rateLimiter = rateLimiter; } async makeRequest<T>(payload: any, weight: number = 2, endpoint: string = this.endpoint): Promise<T> { try { await this.rateLimiter.waitForToken(weight); const response = await this.client.post(endpoint, payload); return response.data; } catch (error) { handleApiError(error); } } }