@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
text/typescript
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);
}
}
}