29 lines
893 B
TypeScript
29 lines
893 B
TypeScript
export async function twilioApiRequest<T = unknown>(params: {
|
|
baseUrl: string;
|
|
accountSid: string;
|
|
authToken: string;
|
|
endpoint: string;
|
|
body: Record<string, string>;
|
|
allowNotFound?: boolean;
|
|
}): Promise<T> {
|
|
const response = await fetch(`${params.baseUrl}${params.endpoint}`, {
|
|
method: "POST",
|
|
headers: {
|
|
Authorization: `Basic ${Buffer.from(`${params.accountSid}:${params.authToken}`).toString("base64")}`,
|
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
},
|
|
body: new URLSearchParams(params.body),
|
|
});
|
|
|
|
if (!response.ok) {
|
|
if (params.allowNotFound && response.status === 404) {
|
|
return undefined as T;
|
|
}
|
|
const errorText = await response.text();
|
|
throw new Error(`Twilio API error: ${response.status} ${errorText}`);
|
|
}
|
|
|
|
const text = await response.text();
|
|
return text ? (JSON.parse(text) as T) : (undefined as T);
|
|
}
|
|
|