2025-01-22 14:44:40 +05:30
|
|
|
import { RequestKeys } from "@universal-call-sdk/adapter-ameyo/lib/types";
|
2025-01-23 16:16:45 +05:30
|
|
|
import { ContentType, METHODS, Request, RequestType } from "../types/Request";
|
2025-01-22 14:44:40 +05:30
|
|
|
|
|
|
|
|
const getFetchResponse = async(
|
2025-01-20 15:26:30 +05:30
|
|
|
url: string,
|
|
|
|
|
method: string,
|
|
|
|
|
data: any,
|
|
|
|
|
requestType: RequestType,
|
2025-01-22 14:44:40 +05:30
|
|
|
headers: Record<string, string>
|
|
|
|
|
): Promise<any> => {
|
|
|
|
|
const fetchOptions: RequestInit = {
|
2025-01-20 15:26:30 +05:30
|
|
|
method,
|
|
|
|
|
headers: {
|
|
|
|
|
"Content-Type":
|
2025-01-23 16:16:45 +05:30
|
|
|
requestType === RequestType.JSON ? ContentType.JSON : ContentType.TEXT,
|
2025-01-20 15:26:30 +05:30
|
|
|
...headers,
|
|
|
|
|
},
|
|
|
|
|
...(method !== METHODS.GET && { body: data }),
|
|
|
|
|
};
|
2025-01-22 14:44:40 +05:30
|
|
|
|
2025-01-20 15:26:30 +05:30
|
|
|
try {
|
|
|
|
|
const res = await fetch(url, fetchOptions);
|
2025-01-22 14:44:40 +05:30
|
|
|
|
2025-01-20 15:26:30 +05:30
|
|
|
if (!res.ok) {
|
2025-01-23 16:16:45 +05:30
|
|
|
return {
|
|
|
|
|
error: res,
|
|
|
|
|
};
|
2025-01-20 15:26:30 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const contentType = res.headers.get("Content-Type") || "";
|
|
|
|
|
|
2025-01-23 16:16:45 +05:30
|
|
|
if (contentType.includes(ContentType.JSON)) {
|
2025-01-20 15:26:30 +05:30
|
|
|
return await res.json();
|
2025-01-23 16:16:45 +05:30
|
|
|
} else if (contentType.includes(ContentType.TEXT)) {
|
2025-01-20 15:26:30 +05:30
|
|
|
return await res.text();
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(`Unsupported Content-Type: ${contentType}`);
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
2025-01-23 16:16:45 +05:30
|
|
|
console.error("Fetch error:", err);
|
|
|
|
|
return {
|
|
|
|
|
error: err,
|
|
|
|
|
};
|
2025-01-20 15:26:30 +05:30
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-01-22 14:44:40 +05:30
|
|
|
export const apiHelper = async({
|
2025-01-20 15:26:30 +05:30
|
|
|
url,
|
|
|
|
|
method,
|
|
|
|
|
requestKey,
|
|
|
|
|
requestType = RequestType.JSON,
|
2025-01-22 14:44:40 +05:30
|
|
|
headers = {},
|
2025-01-20 15:26:30 +05:30
|
|
|
data = {},
|
|
|
|
|
}: Request) => {
|
|
|
|
|
const requestPayload =
|
|
|
|
|
requestType === RequestType.RAW ? data : JSON.stringify(data);
|
2025-01-22 14:44:40 +05:30
|
|
|
|
2025-01-20 15:26:30 +05:30
|
|
|
try {
|
2025-01-22 14:44:40 +05:30
|
|
|
if (requestKey === RequestKeys.GET_AGENTS_FOR_CALL_TRANSFER) {
|
|
|
|
|
return getFetchResponse(
|
|
|
|
|
url,
|
|
|
|
|
method,
|
|
|
|
|
requestPayload,
|
|
|
|
|
requestType,
|
|
|
|
|
headers || {}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-27 15:26:54 +05:30
|
|
|
const requestStartTime = Date.now();
|
2025-01-20 15:26:30 +05:30
|
|
|
const response = await getFetchResponse(
|
|
|
|
|
url,
|
|
|
|
|
method,
|
|
|
|
|
requestPayload,
|
|
|
|
|
requestType,
|
|
|
|
|
headers || {}
|
|
|
|
|
);
|
2025-03-27 15:26:54 +05:30
|
|
|
const requestEndTime = Date.now();
|
2025-01-23 16:16:45 +05:30
|
|
|
if (response?.error) {
|
|
|
|
|
return {
|
|
|
|
|
data: {
|
|
|
|
|
requestKey,
|
|
|
|
|
err: response,
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-20 15:26:30 +05:30
|
|
|
return {
|
|
|
|
|
data: {
|
2025-01-22 14:44:40 +05:30
|
|
|
requestKey,
|
|
|
|
|
response,
|
2025-03-27 15:26:54 +05:30
|
|
|
time: requestEndTime - requestStartTime,
|
2025-01-23 16:16:45 +05:30
|
|
|
}
|
2025-01-20 15:26:30 +05:30
|
|
|
};
|
|
|
|
|
} catch (error) {
|
2025-01-23 16:16:45 +05:30
|
|
|
console.error("Response error:", error);
|
|
|
|
|
return {
|
|
|
|
|
data: {
|
|
|
|
|
requestKey,
|
|
|
|
|
err: error,
|
|
|
|
|
}
|
|
|
|
|
};
|
2025-01-20 15:26:30 +05:30
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-01-22 14:44:40 +05:30
|
|
|
export default apiHelper;
|