UNPKG

better-auth-harmony

Version:

Validation and normalization for better-auth

1 lines 2.11 kB
import {createAuthMiddleware,APIError}from'better-auth/api';import E from'mailchecker';import w from'validator/lib/isEmail.js';import b from'validator/lib/normalizeEmail.js';var s=["/sign-up/email","/email-otp/verify-email","/sign-in/email-otp","/sign-in/magic-link","/sign-in/email","/forget-password/email-otp","/email-otp/request-password-reset","/email-otp/reset-password","/email-otp/create-verification-otp","/email-otp/get-verification-otp","/email-otp/send-verification-otp","/forget-password","/request-password-reset","/send-verification-email","/change-email"],g=new Set(s),h=new Set(s.slice(1,12)),m=({path:i})=>typeof i=="string"&&g.has(i),p=({path:i})=>typeof i=="string"&&h.has(i);var x=i=>w(i)&&E.isValid(i),d=i=>({email:i.body?.email??i.query?.email,container:i.body?"body":"query"}),M=({allowNormalizedSignin:i=false,validator:f=x,matchers:n={},schema:u,normalizer:l=b}={})=>({id:"harmony-email",init(){let e=async t=>{let{email:o,phoneNumber:r}=t;if(!o||r)return {data:t};let a=l(o);return a?{data:{...t,normalizedEmail:a}}:false};return {options:{databaseHooks:{user:{create:{before:e},update:{before:e}}}}}},schema:{user:{fields:{normalizedEmail:{type:"string",fieldName:u?.user.fields.normalizedEmail??"normalizedEmail",required:false,unique:true,input:false,returned:false}}}},hooks:{before:[{matcher:e=>n.validation?n.validation.some(t=>t(e)):m(e),handler:createAuthMiddleware(async e=>{let t=e.path==="/change-email"?e.body?.newEmail:d(e).email;if(typeof t!="string")return;if(!await f(t))throw new APIError("BAD_REQUEST",{message:"Invalid email"})})},{matcher:e=>i&&(n.signIn?n.signIn.some(t=>t(e)):p(e)),handler:createAuthMiddleware(async e=>{let{email:t,container:o}=d(e);if(typeof t!="string")return;let r=l(t);if(!r)return;let a=await e.context.adapter.findOne({model:"user",where:[{field:"normalizedEmail",value:r}]});if(!(!a||a.email===t))return o==="query"?{context:{...e,query:{...e.query,email:a.email,normalizedEmail:r}}}:{context:{...e,body:{...e.body,email:a.email,normalizedEmail:r}}}})}]}}),O=M;/* v8 ignore if -- @preserve */export{O as default,x as validateEmail};