better-auth-harmony
Version:
Validation and normalization for better-auth
1 lines • 3.25 kB
JavaScript
;var api=require('better-auth/api'),E=require('mailchecker'),x=require('validator/lib/isEmail.js'),w=require('validator/lib/normalizeEmail.js'),max=require('libphonenumber-js/max');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var E__default=/*#__PURE__*/_interopDefault(E);var x__default=/*#__PURE__*/_interopDefault(x);var w__default=/*#__PURE__*/_interopDefault(w);var p=["/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"],y=new Set(p),g=new Set(p.slice(1,12)),c=({path:o})=>typeof o=="string"&&y.has(o),d=({path:o})=>typeof o=="string"&&g.has(o);var M=o=>x__default.default(o)&&E__default.default.isValid(o),h=o=>({email:o.body?.email??o.query?.email,container:o.body?"body":"query"}),q=({allowNormalizedSignin:o=false,validator:l=M,matchers:a={},schema:s,normalizer:m=w__default.default}={})=>({id:"harmony-email",init(){let t=async e=>{let{email:r,phoneNumber:i}=e;if(!r||i)return {data:e};let n=m(r);return n?{data:{...e,normalizedEmail:n}}:false};return {options:{databaseHooks:{user:{create:{before:t},update:{before:t}}}}}},schema:{user:{fields:{normalizedEmail:{type:"string",fieldName:s?.user.fields.normalizedEmail??"normalizedEmail",required:false,unique:true,input:false,returned:false}}}},hooks:{before:[{matcher:t=>a.validation?a.validation.some(e=>e(t)):c(t),handler:api.createAuthMiddleware(async t=>{let e=t.path==="/change-email"?t.body?.newEmail:h(t).email;if(typeof e!="string")return;if(!await l(e))throw new api.APIError("BAD_REQUEST",{message:"Invalid email"})})},{matcher:t=>o&&(a.signIn?a.signIn.some(e=>e(t)):d(t)),handler:api.createAuthMiddleware(async t=>{let{email:e,container:r}=h(t);if(typeof e!="string")return;let i=m(e);if(!i)return;let n=await t.context.adapter.findOne({model:"user",where:[{field:"normalizedEmail",value:i}]});if(!(!n||n.email===e))return r==="query"?{context:{...t,query:{...t.query,email:n.email,normalizedEmail:i}}}:{context:{...t,body:{...t.body,email:n.email,normalizedEmail:i}}}})}]}}),C=q;var P=new Set(["/sign-in/phone-number","/phone-number/request-password-reset","/phone-number/forget-password","/phone-number/reset-password","/phone-number/send-otp","/phone-number/verify"]),f=({path:o})=>typeof o=="string"&&P.has(o);var H=({defaultCountry:o,defaultCallingCode:l,extract:a=true,acceptRawInputOnError:s=false,matchers:m=[f],normalizer:t=e=>max.parsePhoneNumberWithError(e,{defaultCountry:o,defaultCallingCode:l,extract:a}).number}={})=>({id:"harmony-phone-number",hooks:{before:[{matcher:e=>m.some(r=>r(e)),handler:api.createAuthMiddleware(async e=>{let{phoneNumber:r}=e.body;if(typeof r!="string")return;let i=r;try{i=await t(r,e.request);}catch(n){if(!s&&n instanceof max.ParseError)throw new api.APIError("BAD_REQUEST",{message:n.message});if(s)i=r;else throw n}return {context:{...e,body:{...e.body,phoneNumber:i}}}})}]}}),S=H;/* v8 ignore if -- @preserve */exports.emailHarmony=C;exports.phoneHarmony=S;