UNPKG

authrix

Version:

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

2 lines 1.8 kB
function E(){let t=process.env.GITHUB_CLIENT_ID,e=process.env.GITHUB_CLIENT_SECRET,r=process.env.GITHUB_REDIRECT_URI;if(!t||!e||!r)throw new Error("Missing GitHub OAuth environment variables. Please set GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, and GITHUB_REDIRECT_URI in your environment file. These are only required when using GitHub OAuth functionality.");return {GITHUB_CLIENT_ID:t,GITHUB_CLIENT_SECRET:e,REDIRECT_URI:r}}function l(t){let{GITHUB_CLIENT_ID:e,REDIRECT_URI:r}=E();return `https://github.com/login/oauth/authorize?${new URLSearchParams({client_id:e,redirect_uri:r,scope:"read:user user:email",state:t}).toString()}`}async function _(t){let{GITHUB_CLIENT_ID:e,GITHUB_CLIENT_SECRET:r,REDIRECT_URI:u}=E();try{let i=await fetch("https://github.com/login/oauth/access_token",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({client_id:e,client_secret:r,code:t,redirect_uri:u})});if(!i.ok)throw new Error(`GitHub OAuth token request failed: ${i.statusText}`);let a=(await i.json()).access_token;if(!a)throw new Error("GitHub OAuth failed: no access token");let n=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`}});if(!n.ok)throw new Error(`GitHub OAuth user request failed: ${n.statusText}`);let o=await fetch("https://api.github.com/user/emails",{headers:{Authorization:`Bearer ${a}`}});if(!o.ok)throw new Error(`GitHub OAuth email request failed: ${o.statusText}`);let s=await n.json(),c=(await o.json()).find(h=>h.primary&&h.verified)?.email;if(!c)throw new Error("GitHub OAuth failed: no verified primary email found.");return {id:s.id.toString(),email:c,name:s.name,avatar:s.avatar_url,provider:"github"}}catch{throw new Error("An error occurred during GitHub authentication.")}} export{l as a,_ as b};