@candle-so/node
Version:
A library for interacting with the Candle API
77 lines (66 loc) • 2.24 kB
text/typescript
/// <reference types="node" />
import axios from "axios";
export interface iAxios {
url: string;
method?: "UPLOAD" | "GET" | "POST" | "PUT" | "DELETE";
data?: any;
file?: any;
apiKey: string;
accessToken?: string;
host?: string;
debug?: boolean;
}
export interface iAxiosResponse {
status: number;
data?: any;
error?: any;
}
function isServer() {
return typeof window === "undefined";
}
export const axiosWrapper = async ({ url, method = "GET", data = {}, file, apiKey, accessToken, host, debug }: iAxios): Promise<iAxiosResponse> => {
const CANDLE_API_URL = debug ? "http://localhost:5000" : host || "https://api.candle.so";
if (!url) throw new Error("url is not set");
if (!apiKey) throw new Error("apiKey is not set");
const KEY_SPLIT = apiKey.split("_");
if (KEY_SPLIT.length !== 3) throw new Error("apiKey is not valid");
const MODE = KEY_SPLIT[1];
const _url = `${CANDLE_API_URL}/v1/${url}`;
const headers: any = {
api_key: apiKey,
"Content-Type": "application/json",
mode: MODE,
};
if (accessToken) headers["authorization"] = `Bearer ${accessToken}`;
try {
let results: any = {};
if (method === "UPLOAD") {
const formData = new FormData();
formData.append("media", file);
const response = await axios.post(_url, formData, {
headers,
maxBodyLength: Infinity,
});
results = { status: response.status, data: response.data };
}
if (method === "GET") {
const response = await axios.get(_url, { headers });
results = { status: response.status, data: response.data };
}
if (method === "POST") {
const response = await axios.post(_url, data, { headers });
results = { status: response.status, data: response.data };
}
if (method === "PUT") {
const response = await axios.put(_url, data, { headers });
results = { status: response.status, data: response.data };
}
if (method === "DELETE") {
const response = await axios.delete(_url, { headers });
results = { status: response.status, data: response.data };
}
return results;
} catch (error: any) {
return { status: error.response.status, error: error.response.data };
}
};