better-auth-harmony
Version:
Validation and normalization for better-auth
1 lines • 2.42 kB
JavaScript
;Object.defineProperty(exports,'__esModule',{value:true});var api=require('better-auth/api'),E=require('mailchecker'),w=require('validator/lib/isEmail.js'),b=require('validator/lib/normalizeEmail.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var E__default=/*#__PURE__*/_interopDefault(E);var w__default=/*#__PURE__*/_interopDefault(w);var b__default=/*#__PURE__*/_interopDefault(b);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__default.default(i)&&E__default.default.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__default.default}={})=>({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:api.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 api.APIError("BAD_REQUEST",{message:"Invalid email"})})},{matcher:e=>i&&(n.signIn?n.signIn.some(t=>t(e)):p(e)),handler:api.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 */exports.default=O;exports.validateEmail=x;