saleor-apps-redis_apl/apps/emails-and-messages/src/modules/sendgrid/sendgrid-api.ts

83 lines
2.1 KiB
TypeScript
Raw Normal View History

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 [];
}
};