export const googleLoginActions = {
getAuthUrl: () => {
const query = {
client_id: oauth_google.client_id,
redirect_url: oauth_google.redirect_url,
response_type: "code",
scope: oauth_google.scopes,
};
const url = new URL(oauth_google.endpoint);
url.search = new URLSearchParams(query).toString();
return url.toString();
},
verifyGoogleCode: async ({ code }: { code: string }) => {
log.info({ code }, "verifying google auth code");
try {
const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
client_id: oauth_google.client_id,
client_secret: oauth_google.client_secret,
code,
grant_type: "authorization_code",
redirect_url: oauth_google.redirect_url,
}),
});
const tokenData = (await tokenResponse.json()) as { id_token: string };
const ticket = await client.verifyIdToken({
idToken: tokenData.id_token,
audience: oauth_google.client_id,
});
const userData = ticket.getPayload();
log.info({ userData }, "google auth successful");
return userData;
} catch (error) {
log.error({ error }, "failed to verify google auth code");
throw new Error("Failed to verify Google authentication");
}
},
};