UNPKG

better-auth-harmony

Version:

Validation and normalization for better-auth

1 lines 2.25 kB
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('better-auth/api'),plugins=require('better-auth/plugins'),y=require('mailchecker'),E=require('validator/es/lib/isEmail.cjs'),b=require('validator/es/lib/normalizeEmail.cjs');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var y__default=/*#__PURE__*/_interopDefault(y);var E__default=/*#__PURE__*/_interopDefault(E);var b__default=/*#__PURE__*/_interopDefault(b);var m=["/sign-up/email","/email-otp/verify-email","/sign-in/email-otp","/sign-in/magic-link","/sign-in/email","/forget-password/email-otp","/email-otp/reset-password","/email-otp/create-verification-otp","/email-otp/get-verification-otp","/email-otp/send-verification-otp","/forget-password","/send-verification-email","/change-email"],g=new Set(m),u=new Set(m.slice(1,12)),s=({path:t})=>g.has(t),p=({path:t})=>u.has(t);var x=t=>E__default.default(t)&&y__default.default.isValid(t),d=t=>({email:t.body?.email??t.query?.email,container:t.body?"body":"query"}),M=({allowNormalizedSignin:t=false,validator:f=x,matchers:n={},normalizer:l=b__default.default}={})=>({id:"harmony-email",init(){let e=async i=>{let{email:r,phoneNumber:a}=i;if(!r||a)return {data:i};let o=l(r);return o?{data:{...i,normalizedEmail:o}}:false};return {options:{databaseHooks:{user:{create:{before:e},update:{before:e}}}}}},schema:{user:{fields:{normalizedEmail:{type:"string",required:false,unique:true,input:false,returned:false}}}},hooks:{before:[{matcher:e=>n.validation?n.validation.some(i=>i(e)):s(e),handler:plugins.createAuthMiddleware(async e=>{let i=e.path==="/change-email"?e.body?.newEmail:d(e).email;if(typeof i!="string")return;if(!await f(i))throw new api.APIError("BAD_REQUEST",{message:"Invalid email"})})},{matcher:e=>t&&(n.signIn?n.signIn.some(i=>i(e)):p(e)),handler:plugins.createAuthMiddleware(async e=>{let{email:i,container:r}=d(e);if(typeof i!="string")return;let a=l(i);if(a!==i){let o=await e.context.adapter.findOne({model:"user",where:[{field:"normalizedEmail",value:a}]});return o?r==="query"?{context:{...e,query:{...e.query,email:o.email,normalizedEmail:a}}}:{context:{...e,body:{...e.body,email:o.email,normalizedEmail:a}}}:void 0}})}]}}),O=M;exports.default=O;exports.validateEmail=x;