import type {
GoogleDraftMessageRequest,
GoogleListMessagesResponse,
GoogleMessage,
GoogleMessageResponse,
} from "./types";
export const googleEndpoints = {
listMessages: "https://gmail.googleapis.com/gmail/v1/users/me/messages",
getMessage: "https://gmail.googleapis.com/gmail/v1/users/me/messages/",
postDraft: "https://gmail.googleapis.com/gmail/v1/users/me/drafts",
};
export async function getUnreadMessages(token: string) {
const url = new URL(googleEndpoints.listMessages);
url.searchParams.set("q", "is:unread");
const response = await fetch(url, {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
if (!response.ok) {
throw new Error(
`Failed to fetch unread emails: ${response.statusText}`,
);
}
const data = (await response.json()) as GoogleListMessagesResponse;
return data.messages;
}
export async function getEmail(token: string, id: string) {
const response = await fetch(
`${googleEndpoints.getMessage}${id}?format=full`,
{
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
},
);
if (!response.ok) {
throw new Error(`Failed to fetch email: ${response.statusText}`);
}
const data = (await response.json()) as GoogleMessageResponse;
return data;
}
export async function createDraft(
token: string,
message: GoogleDraftMessageRequest,
) {
const response = await fetch(googleEndpoints.postDraft, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify(message),
});
if (!response.ok) {
throw new Error(`Failed to create draft: ${response.statusText}`);
}
const data = (await response.json()) as GoogleMessage;
return data;
}