82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
interface FetchTemplatesArgs {
|
|
apiKey?: string;
|
|
}
|
|
|
|
export const fetchTemplates =
|
|
({ apiKey }: FetchTemplatesArgs) =>
|
|
async () => {
|
|
if (!apiKey) {
|
|
console.warn(
|
|
"The SendGrid API key has not been set up yet. Skipping fetching available templates."
|
|
);
|
|
return [];
|
|
}
|
|
const response = await fetch(
|
|
"https://api.sendgrid.com/v3/templates?generations=dynamic&page_size=18",
|
|
{
|
|
method: "GET",
|
|
headers: {
|
|
Authorization: `Bearer ${apiKey}`,
|
|
},
|
|
}
|
|
);
|
|
|
|
if (!response.ok) {
|
|
console.error("Could not fetch available SendGrid templates");
|
|
return [];
|
|
}
|
|
try {
|
|
const resJson = (await response.json()) as {
|
|
result?: { id: string; name: string }[];
|
|
};
|
|
const templates =
|
|
resJson.result?.map((r) => ({
|
|
value: r.id.toString(),
|
|
label: r.name,
|
|
})) || [];
|
|
|
|
return templates;
|
|
} catch (e) {
|
|
console.error("Could not parse the response from SendGrid", e);
|
|
return [];
|
|
}
|
|
};
|
|
|
|
export const fetchSenders =
|
|
({ apiKey }: FetchTemplatesArgs) =>
|
|
async () => {
|
|
if (!apiKey) {
|
|
console.warn(
|
|
"The SendGrid API key has not been set up yet. Skipping fetching available senders ."
|
|
);
|
|
return [];
|
|
}
|
|
const response = await fetch("https://api.sendgrid.com/v3/verified_senders?page_size=18", {
|
|
method: "GET",
|
|
headers: {
|
|
Authorization: `Bearer ${apiKey}`,
|
|
},
|
|
});
|
|
|
|
if (!response.ok) {
|
|
console.error("Could not fetch available SendGrid senders");
|
|
return [];
|
|
}
|
|
try {
|
|
const resJson = (await response.json()) as {
|
|
results?: { id: string; nickname: string; from_email: string }[];
|
|
};
|
|
const senders =
|
|
resJson.results?.map((r) => ({
|
|
value: r.id.toString(),
|
|
label: `${r.nickname} (${r.from_email})`,
|
|
nickname: r.nickname,
|
|
from_email: r.from_email,
|
|
})) || [];
|
|
|
|
return senders;
|
|
} catch (e) {
|
|
console.error("Could not parse the response from SendGrid", e);
|
|
return [];
|
|
}
|
|
};
|