UNPKG

authrix

Version:

Lightweight, flexible authentication library for Node.js and TypeScript.

2 lines 1.75 kB
function c(){let o=process.env.GOOGLE_CLIENT_ID,e=process.env.GOOGLE_CLIENT_SECRET,t=process.env.GOOGLE_REDIRECT_URI;if(!o||!e||!t)throw new Error("Missing Google OAuth environment variables. Please set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REDIRECT_URI in your environment file. These are only required when using Google OAuth functionality.");return {GOOGLE_CLIENT_ID:o,GOOGLE_CLIENT_SECRET:e,REDIRECT_URI:t}}function O(o){let{GOOGLE_CLIENT_ID:e,REDIRECT_URI:t}=c();return `https://accounts.google.com/o/oauth2/v2/auth?${new URLSearchParams({client_id:e,redirect_uri:t,response_type:"code",scope:"openid profile email",access_type:"offline",prompt:"consent",state:o}).toString()}`}async function d(o){let{GOOGLE_CLIENT_ID:e,GOOGLE_CLIENT_SECRET:t,REDIRECT_URI:i}=c();try{let r=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({code:o,client_id:e,client_secret:t,redirect_uri:i,grant_type:"authorization_code"}).toString()});if(!r.ok)throw new Error(`Google OAuth token request failed: ${r.statusText}`);let E=await r.json(),{id_token:a}=E;if(!a)throw new Error("Google OAuth failed: no id_token");let n=await fetch(`https://oauth2.googleapis.com/tokeninfo?id_token=${a}`);if(!n.ok)throw new Error(`Google OAuth user info request failed: ${n.statusText}`);let s=await n.json(),{sub:u,email:l,name:_,picture:h,email_verified:G}=s;if(s.aud!==e)throw new Error("Google OAuth failed: token audience mismatch.");if(G!==!0)throw new Error("Google OAuth failed: email not verified.");return {id:u,email:l,name:_,avatar:h,provider:"google"}}catch{throw new Error("An error occurred during Google authentication.")}} export{O as a,d as b};