better-auth 0.8.4-beta.6 → 0.8.4-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/adapters/drizzle.d.cts +1 -1
  2. package/dist/adapters/drizzle.d.ts +1 -1
  3. package/dist/adapters/kysely.d.cts +1 -1
  4. package/dist/adapters/kysely.d.ts +1 -1
  5. package/dist/adapters/memory.d.cts +1 -1
  6. package/dist/adapters/memory.d.ts +1 -1
  7. package/dist/adapters/mongodb.d.cts +1 -1
  8. package/dist/adapters/mongodb.d.ts +1 -1
  9. package/dist/adapters/prisma.d.cts +1 -1
  10. package/dist/adapters/prisma.d.ts +1 -1
  11. package/dist/api.d.cts +1 -1
  12. package/dist/api.d.ts +1 -1
  13. package/dist/client/plugins.d.cts +3 -3
  14. package/dist/client/plugins.d.ts +3 -3
  15. package/dist/client.d.cts +1 -1
  16. package/dist/client.d.ts +1 -1
  17. package/dist/cookies.d.cts +1 -1
  18. package/dist/cookies.d.ts +1 -1
  19. package/dist/db.cjs +1 -1
  20. package/dist/db.d.cts +2 -2
  21. package/dist/db.d.ts +2 -2
  22. package/dist/db.js +1 -1
  23. package/dist/{index-BVsVqobF.d.cts → index-BD6Gi4uB.d.cts} +7 -7
  24. package/dist/{index-DY7Ai3Jp.d.ts → index-KAWRcjOC.d.ts} +7 -7
  25. package/dist/index.cjs +1 -1
  26. package/dist/index.d.cts +2 -2
  27. package/dist/index.d.ts +2 -2
  28. package/dist/index.js +1 -1
  29. package/dist/next-js.d.cts +1 -1
  30. package/dist/next-js.d.ts +1 -1
  31. package/dist/node.d.cts +1 -1
  32. package/dist/node.d.ts +1 -1
  33. package/dist/oauth2.d.cts +2 -2
  34. package/dist/oauth2.d.ts +2 -2
  35. package/dist/plugins.d.cts +9 -9
  36. package/dist/plugins.d.ts +9 -9
  37. package/dist/react.d.cts +1 -1
  38. package/dist/react.d.ts +1 -1
  39. package/dist/solid-start.d.cts +1 -1
  40. package/dist/solid-start.d.ts +1 -1
  41. package/dist/solid.d.cts +1 -1
  42. package/dist/solid.d.ts +1 -1
  43. package/dist/{state-ifN7k51A.d.cts → state-B06Cucct.d.cts} +1 -1
  44. package/dist/{state-CIrmeq4O.d.ts → state-DyQuVVEF.d.ts} +1 -1
  45. package/dist/svelte-kit.d.cts +1 -1
  46. package/dist/svelte-kit.d.ts +1 -1
  47. package/dist/svelte.d.cts +1 -1
  48. package/dist/svelte.d.ts +1 -1
  49. package/dist/types.d.cts +2 -2
  50. package/dist/types.d.ts +2 -2
  51. package/dist/vue.d.cts +1 -1
  52. package/dist/vue.d.ts +1 -1
  53. package/package.json +1 -1
  54. package/dist/{auth-CkfEl1lS.d.cts → auth-RxDdMH7n.d.cts} +84 -84
  55. package/dist/{auth-B3fUmyZo.d.ts → auth-aIfiqYkD.d.ts} +84 -84
package/dist/index.cjs CHANGED
@@ -81,4 +81,4 @@ Error: `,a),e.redirect(`${e.context.baseURL}/error?error=internal_server_error`)
81
81
  <div class="error-code">Error Code: <span id="errorCode">${e}</span></div>
82
82
  </div>
83
83
  </body>
84
- </html>`,er=b("/error",{method:"GET",metadata:G},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(Fr(t),{headers:{"Content-Type":"text/html"}})});var tr=b("/ok",{method:"GET",metadata:G},async e=>e.json({ok:!0}));var Q=require("zod");var F=require("better-call");var rr=()=>b("/sign-up/email",{method:"POST",query:Q.z.object({currentURL:Q.z.string().optional()}).optional(),body:Q.z.record(Q.z.string(),Q.z.any())},async e=>{if(!e.context.options.emailAndPassword?.enabled)throw new F.APIError("BAD_REQUEST",{message:"Email and password sign up is not enabled"});let t=e.body,{name:r,email:n,password:o,image:i,callbackURL:c,...a}=t;if(!Q.z.string().email().safeParse(n).success)throw new F.APIError("BAD_REQUEST",{message:"Invalid email"});let d=e.context.password.config.minPasswordLength;if(o.length<d)throw e.context.logger.error("Password is too short"),new F.APIError("BAD_REQUEST",{message:"Password is too short"});let u=e.context.password.config.maxPasswordLength;if(o.length>u)throw e.context.logger.error("Password is too long"),new F.APIError("BAD_REQUEST",{message:"Password is too long"});if((await e.context.internalAdapter.findUserByEmail(n))?.user)throw e.context.logger.info(`Sign-up attempt for existing email: ${n}`),new F.APIError("UNPROCESSABLE_ENTITY",{message:"User with this email already exists"});let p=Re(e.context.options,a),l;try{if(l=await e.context.internalAdapter.createUser({email:n.toLowerCase(),name:r,image:i,...p,emailVerified:!1}),!l)throw new F.APIError("BAD_REQUEST",{message:"Failed to create user"})}catch(g){throw w.error("Failed to create user",g),new F.APIError("UNPROCESSABLE_ENTITY",{message:"Failed to create user",details:g})}if(!l)throw new F.APIError("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let m=await e.context.password.hash(o);if(await e.context.internalAdapter.linkAccount({userId:l.id,providerId:"credential",accountId:l.id,password:m,expiresAt:_(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let g=await N(e.context.secret,l.email),y=`${e.context.baseURL}/verify-email?token=${g}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.({user:l,url:y,token:g},e.request)}if(!e.context.options.emailAndPassword.autoSignIn||e.context.options.emailAndPassword.requireEmailVerification)return e.json({user:l,session:null},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:l,session:null}});let h=await e.context.internalAdapter.createSession(l.id,e.request);if(!h)throw new F.APIError("BAD_REQUEST",{message:"Failed to create session"});return await I(e,{session:h,user:l}),e.json({user:l,session:h})});var J=require("zod");var Ve=require("better-call");var nr=b("/list-accounts",{method:"GET",use:[L]},async e=>{let t=e.context.session,r=await e.context.internalAdapter.findAccounts(t.user.id);return e.json(r.map(n=>({id:n.id,provider:n.providerId})))}),or=b("/link-social",{method:"POST",requireHeaders:!0,query:J.z.object({currentURL:J.z.string().optional()}).optional(),body:J.z.object({callbackURL:J.z.string().optional(),provider:J.z.enum(ye)}),use:[L]},async e=>{let t=e.context.session;if((await e.context.internalAdapter.findAccounts(t.user.id)).find(a=>a.providerId===e.body.provider))throw new Ve.APIError("BAD_REQUEST",{message:"Social Account is already linked."});let o=e.context.socialProviders.find(a=>a.id===e.body.provider);if(!o)throw e.context.logger.error("Provider not found. Make sure to add the provider in your auth config",{provider:e.body.provider}),new Ve.APIError("NOT_FOUND",{message:"Provider not found"});let i=await re(e,{userId:t.user.id,email:t.user.email}),c=await o.createAuthorizationURL({state:i.state,codeVerifier:i.codeVerifier,redirectURI:`${e.context.baseURL}/callback/${o.id}`});return e.json({url:c.toString(),redirect:!0})});function xe(e,t){if(t.advanced?.ipAddress?.disableIpTracking)return null;let r="127.0.0.1";if(Ke)return r;let o=t.advanced?.ipAddress?.ipAddressHeaders||["x-client-ip","x-forwarded-for","cf-connecting-ip","fastly-client-ip","x-real-ip","x-cluster-client-ip","x-forwarded","forwarded-for","forwarded"],i=e instanceof Request?e.headers:e;for(let c of o){let a=i.get(c);if(typeof a=="string"){let s=a.split(",")[0].trim();if(s)return s}}return null}function Vr(e,t,r){let n=Date.now(),o=t*1e3;return n-r.lastRequest<o&&r.count>=e}function Nr(e){return new Response(JSON.stringify({message:"Too many requests. Please try again later."}),{status:429,statusText:"Too Many Requests",headers:{"X-Retry-After":e.toString()}})}function qr(e,t){let r=Date.now(),n=t*1e3;return Math.ceil((e+n-r)/1e3)}function $r(e,t){let r=t??"rateLimit",n=e.adapter;return{get:async o=>await n.findOne({model:r,where:[{field:"key",value:o}]}),set:async(o,i,c)=>{try{c?await n.update({model:t??"rateLimit",where:[{field:"key",value:o}],update:{count:i.count,lastRequest:i.lastRequest}}):await n.create({model:t??"rateLimit",data:{key:o,count:i.count,lastRequest:i.lastRequest}})}catch(a){w.error("Error setting rate limit",a)}}}}var ir=new Map;function jr(e){return e.rateLimit.storage==="secondary-storage"?{get:async r=>{let n=await e.options.secondaryStorage?.get(r);return n?JSON.parse(n):void 0},set:async(r,n)=>{await e.options.secondaryStorage?.set?.(r,JSON.stringify(n))}}:e.rateLimit.storage==="memory"?{async get(r){return ir.get(r)},async set(r,n,o){ir.set(r,n)}}:$r(e,e.rateLimit.tableName)}async function sr(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,n=e.url.replace(r,""),o=t.rateLimit.window,i=t.rateLimit.max,c=xe(e,t.options)+n,s=zr().find(p=>p.pathMatcher(n));s&&(o=s.window,i=s.max);for(let p of t.options.plugins||[])if(p.rateLimit){let l=p.rateLimit.find(m=>m.pathMatcher(n));if(l){o=l.window,i=l.max;break}}if(t.rateLimit.customRules){let p=t.rateLimit.customRules[n];p&&(o=p.window,i=p.max)}let d=jr(t),u=await d.get(c),f=Date.now();if(!u)await d.set(c,{key:c,count:1,lastRequest:f});else{let p=f-u.lastRequest;if(Vr(i,o,u)){let l=qr(u.lastRequest,o);return Nr(l)}else p>o*1e3?await d.set(c,{...u,count:1,lastRequest:f}):await d.set(c,{...u,count:u.count+1,lastRequest:f})}}function zr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")||t.startsWith("/change-password")||t.startsWith("/change-email")},window:10,max:3}]}var Mr=require("better-call");function Ne(e,t){let r=t.plugins?.reduce((a,s)=>({...a,...s.endpoints}),{}),n=t.plugins?.map(a=>a.middlewares?.map(s=>{let d=async u=>s.middleware({...u,context:{...e,...u.context}});return d.path=s.path,d.options=s.middleware.options,d.headers=s.middleware.headers,{path:s.path,middleware:d}})).filter(a=>a!==void 0).flat()||[],i={...{signInSocial:Nt,callbackOAuth:jt,getSession:Be(),signOut:Mt,signUpEmail:rr(),signInEmail:qt,forgetPassword:Gt,resetPassword:Qt,verifyEmail:Vt,sendVerificationEmail:Ft,changeEmail:Xt,changePassword:Wt,setPassword:Jt,updateUser:Zt(),deleteUser:Yt,forgetPasswordCallback:Kt,listSessions:_t(),revokeSession:Lt,revokeSessions:Ct,revokeOtherSessions:Bt,linkSocialAccount:or,listUserAccounts:nr},...r,ok:tr,error:er},c={};for(let[a,s]of Object.entries(i))c[a]=async(d={})=>{let u=await e;for(let l of t.plugins||[])if(l.hooks?.before)for(let m of l.hooks.before){let h={...s,...d,context:{...u,...d?.context}};if(m.matcher(h)){let y=await m.handler(h);y&&"context"in y&&(d={...y,...d})}}let f;try{f=await s({...d,context:{...u,...d.context}})}catch(l){if(l instanceof z.APIError){let m=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!m?.length)throw l;let h=new Response(JSON.stringify(l.body),{status:z.statusCode[l.status],headers:l.headers}),g;for(let y of m||[])if(y.matcher(d)){u.returned=h;let M={...s,...d,context:u},ve=await y.handler(M);ve&&"response"in ve&&(g=ve.response)}if(g instanceof Response)return g;throw l}throw l}let p=f;for(let l of t.plugins||[])if(l.hooks?.after)for(let m of l.hooks.after){let h={...d,context:{...u,...d.context,endpoint:s,returned:p}};if(m.matcher(h)){let y=await m.handler(h);y&&"response"in y&&(p=y.response)}}return p},c[a].path=s.path,c[a].method=s.method,c[a].options=s.options,c[a].headers=s.headers;return{api:c,middlewares:n}}var ar=(e,t)=>{let{api:r,middlewares:n}=Ne(e,t),o=new URL(e.baseURL).pathname;return(0,z.createRouter)(r,{extraContext:e,basePath:o,routerMiddleware:[{path:"/**",middleware:Je},...n],async onRequest(i){for(let c of e.options.plugins||[])if(c.onRequest){let a=await c.onRequest(i,e);if(a&&"response"in a)return a.response}return sr(i,e)},async onResponse(i){for(let c of e.options.plugins||[])if(c.onResponse){let a=await c.onResponse(i,e);if(a)return a.response}return i},onError(i){if(i instanceof z.APIError&&i.status==="NOT_FOUND")return;if(t.onAPIError?.throw)throw i;if(t.onAPIError?.onError){t.onAPIError.onError(i,e);return}let c=t.logger?.verboseLogging?w:void 0;t.logger?.disabled!==!0&&(i instanceof z.APIError?(i.status==="INTERNAL_SERVER_ERROR"&&w.error(i),c?.error(i.message)):w?.error(i))}})};var se=e=>{let t=e.plugins?.reduce((s,d)=>{let u=d.schema;if(!u)return s;for(let[f,p]of Object.entries(u))s[f]={fields:{...s[f]?.fields,...p.fields},tableName:p.tableName||f};return s},{}),r=e.rateLimit?.storage==="database",n={rateLimit:{tableName:e.rateLimit?.tableName||"rateLimit",fields:{key:{type:"string",fieldName:e.rateLimit?.fields?.key||"key"},count:{type:"number",fieldName:e.rateLimit?.fields?.count||"count"},lastRequest:{type:"number",fieldName:e.rateLimit?.fields?.lastRequest||"lastRequest"}}}},{user:o,session:i,account:c,...a}=t||{};return{user:{tableName:e.user?.modelName||"user",fields:{name:{type:"string",required:!0,fieldName:e.user?.fields?.name||"name"},email:{type:"string",unique:!0,required:!0,fieldName:e.user?.fields?.email||"email"},emailVerified:{type:"boolean",defaultValue:()=>!1,required:!0,fieldName:e.user?.fields?.emailVerified||"emailVerified"},image:{type:"string",required:!1,fieldName:e.user?.fields?.image||"image"},createdAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.createdAt||"createdAt"},updatedAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.updatedAt||"updatedAt"},...o?.fields,...e.user?.additionalFields},order:1},session:{tableName:e.session?.modelName||"session",fields:{expiresAt:{type:"date",required:!0,fieldName:e.session?.fields?.expiresAt||"expiresAt"},ipAddress:{type:"string",required:!1,fieldName:e.session?.fields?.ipAddress||"ipAddress"},userAgent:{type:"string",required:!1,fieldName:e.session?.fields?.userAgent||"userAgent"},userId:{type:"string",fieldName:e.session?.fields?.userId||"userId",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0},...i?.fields,...e.session?.additionalFields},order:2},account:{tableName:e.account?.modelName||"account",fields:{accountId:{type:"string",required:!0,fieldName:e.account?.fields?.accountId||"accountId"},providerId:{type:"string",required:!0,fieldName:e.account?.fields?.providerId||"providerId"},userId:{type:"string",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0,fieldName:e.account?.fields?.userId||"userId"},accessToken:{type:"string",required:!1,fieldName:e.account?.fields?.accessToken||"accessToken"},refreshToken:{type:"string",required:!1,fieldName:e.account?.fields?.refreshToken||"refreshToken"},idToken:{type:"string",required:!1,fieldName:e.account?.fields?.idToken||"idToken"},expiresAt:{type:"date",required:!1,fieldName:e.account?.fields?.expiresAt||"expiresAt"},password:{type:"string",required:!1,fieldName:e.account?.fields?.password||"password"},...c?.fields},order:3},verification:{tableName:e.verification?.modelName||"verification",fields:{identifier:{type:"string",required:!0,fieldName:e.verification?.fields?.identifier||"identifier"},value:{type:"string",required:!0,fieldName:e.verification?.fields?.value||"value"},expiresAt:{type:"date",required:!0,fieldName:e.verification?.fields?.expiresAt||"expiresAt"}},order:4},...a,...r?n:{}}};var ae=require("kysely"),q=require("kysely");function dr(e){if("dialect"in e)return dr(e.dialect);if("createDriver"in e){if(e instanceof q.SqliteDialect)return"sqlite";if(e instanceof q.MysqlDialect)return"mysql";if(e instanceof q.PostgresDialect)return"postgres";if(e instanceof ae.MssqlDialect)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var qe=async e=>{let t=e.database;if("db"in t)return{kysely:t.db,databaseType:t.type};if("dialect"in t)return{kysely:new ae.Kysely({dialect:t.dialect}),databaseType:t.type};let r,n=dr(t);return"createDriver"in t&&(r=t),"aggregate"in t&&(r=new q.SqliteDialect({database:t})),"getConnection"in t&&(r=new q.MysqlDialect(t)),"connect"in t&&(r=new q.PostgresDialect({pool:t})),{kysely:r?new ae.Kysely({dialect:r}):null,databaseType:n}};function cr(e,t){let r=t.hooks;async function n(i,c,a){let s=i;for(let f of r||[]){let p=f[c]?.create?.before;if(p){let l=await p(i);if(l===!1)return null;typeof l=="object"&&"data"in l&&(s=l.data)}}let d=a?await a.fn(s):null,u=!a||a.executeMainFn?await e.create({model:c,data:s}):d;for(let f of r||[]){let p=f[c]?.create?.after;p&&await p(u)}return u}async function o(i,c,a,s){let d=i;for(let p of r||[]){let l=p[a]?.update?.before;if(l){let m=await l(i);if(m===!1)return null;d=typeof m=="object"?m.data:m}}let u=s?await s.fn(d):null,f=!s||s.executeMainFn?await e.update({model:a,update:d,where:c}):u;for(let p of r||[]){let l=p[a]?.update?.after;l&&await l(f)}return f}return{createWithHooks:n,updateWithHooks:o}}var $e=(e,t)=>{let r=t.options,n=r.secondaryStorage,o=r.session?.expiresIn||60*60*24*7,{createWithHooks:i,updateWithHooks:c}=cr(e,t);return{createOAuthUser:async(a,s)=>{try{let d=await i({id:P(),createdAt:new Date,updatedAt:new Date,...a},"user"),u=await i({id:P(),...s,userId:d.id||a.id},"account");return{user:d,account:u}}catch(d){return console.log(d),null}},createUser:async a=>await i({id:P(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...a},"user"),createAccount:async a=>await i({id:P(),createdAt:new Date,updatedAt:new Date,...a},"account"),listSessions:async a=>{if(n){let d=await n.get(`active-sessions-${a}`);if(!d)return[];let u=ne(d)||[],f=Date.now(),p=u.filter(m=>m.expiresAt>f),l=[];for(let m of p){let h=await n.get(m.id);if(h){let g=JSON.parse(h),y=ke(t.options,{...g.session,expiresAt:new Date(g.session.expiresAt)});l.push(y)}}return l}return await e.findMany({model:"session",where:[{field:"userId",value:a}]})},listUsers:async(a,s,d,u)=>await e.findMany({model:"user",limit:a,offset:s,sortBy:d,where:u}),deleteUser:async a=>{await e.deleteMany({model:"session",where:[{field:"userId",value:a}]}),await e.deleteMany({model:"account",where:[{field:"userId",value:a}]}),await e.delete({model:"user",where:[{field:"id",value:a}]})},createSession:async(a,s,d,u)=>{let f=s instanceof Request?s.headers:s,p={id:P(32),userId:a,expiresAt:d?_(60*60*24,"sec"):_(o,"sec"),ipAddress:s&&xe(s,t.options)||"",userAgent:f?.get("user-agent")||"",...u};return await i(p,"session",n?{fn:async m=>{let h=await e.findOne({model:"user",where:[{field:"id",value:a}]});n.set(m.id,JSON.stringify({session:m,user:h}),o);let g=await n.get(`active-sessions-${a}`),y=[],k=Date.now();return g&&(y=ne(g)||[],y=y.filter(M=>M.expiresAt>k)),y.push({id:m.id,expiresAt:k+o*1e3}),await n.set(`active-sessions-${a}`,JSON.stringify(y),o),m},executeMainFn:r.session?.storeSessionInDatabase}:void 0)},findSession:async a=>{if(n){let f=await n.get(a);if(f){let p=JSON.parse(f),l=ke(t.options,{...p.session,expiresAt:new Date(p.session.expiresAt)}),m=Fe(t.options,{...p.user,createdAt:new Date(p.user.createdAt),updatedAt:new Date(p.user.updatedAt)});return{session:l,user:m}}}let s=await e.findOne({model:"session",where:[{value:a,field:"id"}]});if(!s)return null;let d=await e.findOne({model:"user",where:[{value:s.userId,field:"id"}]});if(!d)return null;let u=Fe(t.options,d);return{session:ke(t.options,s),user:u}},findSessions:async a=>{if(n){let f=[];for(let p of a){let l=await n.get(p);if(l){let m=JSON.parse(l),h={session:{...m.session,expiresAt:new Date(m.session.expiresAt)},user:{...m.user,createdAt:new Date(m.user.createdAt),updatedAt:new Date(m.user.updatedAt)}};f.push(h)}}return f}let s=await e.findMany({model:"session",where:[{field:"id",value:a,operator:"in"}]}),d=s.map(f=>f.userId);if(!d.length)return[];let u=await e.findMany({model:"user",where:[{field:"id",value:d,operator:"in"}]});return s.map(f=>{let p=u.find(l=>l.id===f.userId);return p?{session:f,user:p}:null})},updateSession:async(a,s)=>await c(s,[{field:"id",value:a}],"session",n?{async fn(u){let f=await n.get(a),p=null;if(f){let l=JSON.parse(f);p={...l.session,...u},await n.set(a,JSON.stringify({session:p,user:l.user}),l.session.expiresAt?Math.floor((l.session.expiresAt.getTime()-Date.now())/1e3):o)}else return null},executeMainFn:r.session?.storeSessionInDatabase}:void 0),deleteSession:async a=>{if(n){await n.delete(a),r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"id",value:a}]});return}await e.delete({model:"session",where:[{field:"id",value:a}]})},deleteSessions:async a=>{if(n){let s=await e.findMany({model:"session",where:[{field:"userId",value:a}]});for(let d of s)await n.delete(d.id);r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"userId",value:a}]});return}await e.deleteMany({model:"session",where:[{field:"userId",value:a}]})},findUserByEmail:async(a,s)=>{let d=await e.findOne({model:"user",where:[{value:a.toLowerCase(),field:"email"}]});if(!d)return null;if(s?.includeAccounts){let u=await e.findMany({model:"account",where:[{value:d.id,field:"userId"}]});return{user:d,accounts:u}}return{user:d,accounts:[]}},findUserById:async a=>await e.findOne({model:"user",where:[{field:"id",value:a}]}),linkAccount:async a=>await i({id:P(),...a},"account"),updateUser:async(a,s)=>await c(s,[{field:"id",value:a}],"user"),updateUserByEmail:async(a,s)=>await c(s,[{field:"email",value:a}],"user"),updatePassword:async(a,s)=>await c({password:s},[{field:"userId",value:a},{field:"providerId",value:"credential"}],"account"),findAccounts:async a=>await e.findMany({model:"account",where:[{field:"userId",value:a}]}),findAccount:async a=>await e.findOne({model:"account",where:[{field:"accountId",value:a}]}),updateAccount:async(a,s)=>await c(s,[{field:"id",value:a}],"account"),createVerificationValue:async a=>await i({id:P(),...a},"verification"),findVerificationValue:async a=>{let s=await e.findMany({model:"verification",where:[{field:"identifier",value:a}],sortBy:{direction:"desc",field:"createdAt"},limit:100}),d=s.pop();return s.length>0&&await e.deleteMany({model:"verification",where:[{operator:"in",field:"id",value:s.map(u=>u.id)}]}),d},deleteVerificationValue:async a=>{await e.delete({model:"verification",where:[{field:"id",value:a}]})},updateVerificationValue:async(a,s)=>await c(s,[{field:"id",value:a}],"verification")}};var Hr=require("zod");var Gr=(e,t,r)=>{let n=se(t);function o(s,d){if(d==="id")return d;let u=n[s].fields[d];return u||console.log("Field not found",s,d),u.fieldName||d}function i(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"?s?1:0:p.type==="date"&&s?s.toISOString():s}function c(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"&&s!==null?s===1:p.type==="date"&&s?new Date(s):s}let a=r?.generateId!==!1;return{transformInput(s,d){let u=s.id&&a?{id:r?.generateId?r.generateId():s.id}:{};for(let f in s){let p=n[d].fields[f];p&&(u[p.fieldName||f]=i(s[f],d,f))}return u},transformOutput(s,d,u=[]){if(!s)return null;let f=s.id?u.length===0||u.includes("id")?{id:s.id}:{}:{},p=n[d].fields;for(let l in p){if(u.length&&!u.includes(l))continue;let m=p[l];m&&(f[l]=c(s[m.fieldName||l],d,l))}return f},convertWhereClause(s,d){if(!d)return{and:null,or:null};let u={and:[],or:[]};return d.forEach(f=>{let{field:p,value:l,operator:m="=",connector:h="AND"}=f,g=o(s,p),y=k=>m.toLowerCase()==="in"?k(g,"in",Array.isArray(l)?l:[l]):m==="contains"?k(g,"like",`%${l}%`):m==="starts_with"?k(g,"like",`${l}%`):m==="ends_with"?k(g,"like",`%${l}`):m==="eq"?k(g,"=",l):m==="ne"?k(g,"<>",l):m==="gt"?k(g,">",l):m==="gte"?k(g,">=",l):m==="lt"?k(g,"<",l):m==="lte"?k(g,"<=",l):k(g,m,l);h==="OR"?u.or.push(y):u.and.push(y)}),{and:u.and.length?u.and:null,or:u.or.length?u.or:null}},async withReturning(s,d,u){let f;if(r?.type!=="mysql")f=await d.returningAll().executeTakeFirst();else{await d.execute();let p="id",l=s[p];f=await e.selectFrom(this.getModelName(u)).selectAll().where(p,"=",l).executeTakeFirst()}return f},getModelName(s){return n[s].tableName}}},ur=(e,t)=>r=>{let{transformInput:n,withReturning:o,transformOutput:i,convertWhereClause:c,getModelName:a}=Gr(e,r,t);return{id:"kysely",async create(s){let{model:d,data:u,select:f}=s,p=n(u,d),l=e.insertInto(a(d)).values(p);return i(await o(p,l,d),d,f)},async findOne(s){let{model:d,where:u,select:f}=s,{and:p,or:l}=c(d,u),m=e.selectFrom(a(d)).selectAll();p&&(m=m.where(g=>g.and(p.map(y=>y(g))))),l&&(m=m.where(g=>g.or(l.map(y=>y(g)))));let h=await m.executeTakeFirst();return h?i(h,d,f):null},async findMany(s){let{model:d,where:u,limit:f,offset:p,sortBy:l}=s,{and:m,or:h}=c(d,u),g=e.selectFrom(a(d)).selectAll();m&&(g=g.where(k=>k.and(m.map(M=>M(k))))),h&&(g=g.where(k=>k.or(h.map(M=>M(k))))),g=g.limit(f||100),p&&(g=g.offset(p)),l&&(g=g.orderBy(l.field,l.direction));let y=await g.selectAll().execute();return y?y.map(k=>i(k,d)):[]},async update(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(g=>g.and(p.map(y=>y(g))))),l&&(h=h.where(g=>g.or(l.map(y=>y(g))))),i(await o(m,h,d),d)},async updateMany(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(y=>y.and(p.map(k=>k(y))))),l&&(h=h.where(y=>y.or(l.map(k=>k(y))))),(await h.execute()).length},async delete(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),await l.execute()},async deleteMany(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));return f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),(await l.execute()).length},options:t}};async function lr(e){if(!e.database)throw new O("Database configuration is required");if(typeof e.database=="function")return e.database(e);let{kysely:t,databaseType:r}=await qe(e);if(!t)throw new O("Failed to initialize database adapter");return ur(t,{generateId:"generateId"in e.database?e.database.generateId:void 0,type:r||"sqlite"})(e)}var de=require("oslo/encoding");var pr=require("@noble/hashes/scrypt"),fr=require("uncrypto"),Y={N:16384,r:16,p:1,dkLen:64};async function mr(e,t){return await(0,pr.scryptAsync)(e.normalize("NFKC"),t,{N:Y.N,p:Y.p,r:Y.r,dkLen:Y.dkLen,maxmem:128*Y.N*Y.r*2})}var gr=async e=>{let t=(0,de.encodeHex)((0,fr.getRandomValues)(new Uint8Array(16))),r=await mr(e,t);return`${t}:${(0,de.encodeHex)(r)}`},hr=async(e,t)=>{let[r,n]=e.split(":"),o=await mr(t,r);return Pe(o,(0,de.decodeHex)(n))};var wr=require("defu");var je="better-auth-secret-123456789";var ze=require("better-call");async function yr(e,t){let n=(await t.context.internalAdapter.findAccounts(e))?.find(c=>c.providerId==="credential"),o=n?.password;if(!n||!o)throw new ze.APIError("BAD_REQUEST",{message:"No password credential found"});if(!await t.context.password.verify(o,t.body.password))throw new ze.APIError("BAD_REQUEST",{message:"Invalid password"});return!0}var br=async e=>{let t=await lr(e),r=e.plugins||[],n=Qr(e),o=te(e.baseURL,e.basePath),i=e.secret||S.BETTER_AUTH_SECRET||S.AUTH_SECRET||je;i===je&&ee&&w.error("You are using the default secret. Please set `BETTER_AUTH_SECRET` in your environment variables or pass `secret` in your auth config."),e={...e,secret:i,baseURL:o?new URL(o).origin:"",basePath:e.basePath||"/api/auth",plugins:r.concat(n),emailAndPassword:{...e.emailAndPassword,enabled:e.emailAndPassword?.enabled??!1,autoSignIn:e.emailAndPassword?.autoSignIn??!0}};let c=Se(e),a=se(e),s=Object.keys(e.socialProviders||{}).map(f=>{let p=e.socialProviders?.[f];return p.enabled===!1?null:((!p.clientId||!p.clientSecret)&&w.warn(`Social provider ${f} is missing clientId or clientSecret`),Ce[f](p))}).filter(f=>f!==null),d={appName:e.appName||"Better Auth",socialProviders:s,options:e,tables:a,trustedOrigins:Zr(e),baseURL:o||"",sessionConfig:{updateAge:e.session?.updateAge||24*60*60,expiresIn:e.session?.expiresIn||60*60*24*7},secret:i,rateLimit:{...e.rateLimit,enabled:e.rateLimit?.enabled??ee,window:e.rateLimit?.window||10,max:e.rateLimit?.max||100,storage:e.rateLimit?.storage||e.secondaryStorage?"secondary-storage":"memory"},authCookies:c,logger:fe({disabled:e.logger?.disabled||!1}),uuid:P,secondaryStorage:e.secondaryStorage,password:{hash:e.emailAndPassword?.password?.hash||gr,verify:e.emailAndPassword?.password?.verify||hr,config:{minPasswordLength:e.emailAndPassword?.minPasswordLength||8,maxPasswordLength:e.emailAndPassword?.maxPasswordLength||128},checkPassword:yr},adapter:t,internalAdapter:$e(t,{options:e,hooks:e.databaseHooks?[e.databaseHooks]:[]}),createAuthCookie:he(e)},{context:u}=Kr(d);return u};function Kr(e){let t=e.options,r=t.plugins||[],n=e,o=[];for(let i of r)if(i.init){let c=i.init(e);typeof c=="object"&&(c.options&&(c.options.databaseHooks&&o.push(c.options.databaseHooks),t=(0,wr.defu)(t,c.options)),c.context&&(n={...n,...c.context}))}return o.push(t.databaseHooks),n.internalAdapter=$e(e.adapter,{options:t,hooks:o.filter(i=>i!==void 0)}),n.options=t,{context:n}}function Qr(e){let t=[];return e.advanced?.crossSubDomainCookies?.enabled,t}function Zr(e){let t=te(e.baseURL,e.basePath);if(!t)return[];let r=[new URL(t).origin];e.trustedOrigins&&r.push(...e.trustedOrigins);let n=S.BETTER_AUTH_TRUSTED_ORIGINS;return n&&r.push(...n.split(",")),r}var Wr=e=>{let t=br(e),{api:r}=Ne(t,e);return{handler:async n=>{let o=await t,i=o.options.basePath||"/api/auth",c=new URL(n.url);if(!o.options.baseURL){let s=te(void 0,i)||`${c.origin}${i}`;o.options.baseURL=s,o.baseURL=s}if(o.trustedOrigins=[c.origin,...o.options.trustedOrigins||[]],!o.options.baseURL)return new Response("Base URL not set",{status:400});if(c.pathname===i||c.pathname===`${i}/`)return new Response("Welcome to BetterAuth",{status:200});let{handler:a}=ar(o,e);return a(n)},api:r,options:e,$context:t,$Infer:{}}};0&&(module.exports={BetterAuthError,HIDE_METADATA,MissingDependencyError,betterAuth,capitalizeFirstLetter,createCookieGetter,createLogger,deleteSessionCookie,generateId,generateState,getCookies,logger,parseCookies,parseSetCookieHeader,parseState,setSessionCookie});
84
+ </html>`,er=b("/error",{method:"GET",metadata:G},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(Fr(t),{headers:{"Content-Type":"text/html"}})});var tr=b("/ok",{method:"GET",metadata:G},async e=>e.json({ok:!0}));var Q=require("zod");var F=require("better-call");var rr=()=>b("/sign-up/email",{method:"POST",query:Q.z.object({currentURL:Q.z.string().optional()}).optional(),body:Q.z.record(Q.z.string(),Q.z.any())},async e=>{if(!e.context.options.emailAndPassword?.enabled)throw new F.APIError("BAD_REQUEST",{message:"Email and password sign up is not enabled"});let t=e.body,{name:r,email:n,password:o,image:i,callbackURL:c,...a}=t;if(!Q.z.string().email().safeParse(n).success)throw new F.APIError("BAD_REQUEST",{message:"Invalid email"});let d=e.context.password.config.minPasswordLength;if(o.length<d)throw e.context.logger.error("Password is too short"),new F.APIError("BAD_REQUEST",{message:"Password is too short"});let u=e.context.password.config.maxPasswordLength;if(o.length>u)throw e.context.logger.error("Password is too long"),new F.APIError("BAD_REQUEST",{message:"Password is too long"});if((await e.context.internalAdapter.findUserByEmail(n))?.user)throw e.context.logger.info(`Sign-up attempt for existing email: ${n}`),new F.APIError("UNPROCESSABLE_ENTITY",{message:"User with this email already exists"});let p=Re(e.context.options,a),l;try{if(l=await e.context.internalAdapter.createUser({email:n.toLowerCase(),name:r,image:i,...p,emailVerified:!1}),!l)throw new F.APIError("BAD_REQUEST",{message:"Failed to create user"})}catch(g){throw w.error("Failed to create user",g),new F.APIError("UNPROCESSABLE_ENTITY",{message:"Failed to create user",details:g})}if(!l)throw new F.APIError("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let m=await e.context.password.hash(o);if(await e.context.internalAdapter.linkAccount({userId:l.id,providerId:"credential",accountId:l.id,password:m,expiresAt:_(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let g=await N(e.context.secret,l.email),y=`${e.context.baseURL}/verify-email?token=${g}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.({user:l,url:y,token:g},e.request)}if(!e.context.options.emailAndPassword.autoSignIn||e.context.options.emailAndPassword.requireEmailVerification)return e.json({user:l,session:null},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:l,session:null}});let h=await e.context.internalAdapter.createSession(l.id,e.request);if(!h)throw new F.APIError("BAD_REQUEST",{message:"Failed to create session"});return await I(e,{session:h,user:l}),e.json({user:l,session:h})});var J=require("zod");var Ve=require("better-call");var nr=b("/list-accounts",{method:"GET",use:[L]},async e=>{let t=e.context.session,r=await e.context.internalAdapter.findAccounts(t.user.id);return e.json(r.map(n=>({id:n.id,provider:n.providerId})))}),or=b("/link-social",{method:"POST",requireHeaders:!0,query:J.z.object({currentURL:J.z.string().optional()}).optional(),body:J.z.object({callbackURL:J.z.string().optional(),provider:J.z.enum(ye)}),use:[L]},async e=>{let t=e.context.session;if((await e.context.internalAdapter.findAccounts(t.user.id)).find(a=>a.providerId===e.body.provider))throw new Ve.APIError("BAD_REQUEST",{message:"Social Account is already linked."});let o=e.context.socialProviders.find(a=>a.id===e.body.provider);if(!o)throw e.context.logger.error("Provider not found. Make sure to add the provider in your auth config",{provider:e.body.provider}),new Ve.APIError("NOT_FOUND",{message:"Provider not found"});let i=await re(e,{userId:t.user.id,email:t.user.email}),c=await o.createAuthorizationURL({state:i.state,codeVerifier:i.codeVerifier,redirectURI:`${e.context.baseURL}/callback/${o.id}`});return e.json({url:c.toString(),redirect:!0})});function xe(e,t){if(t.advanced?.ipAddress?.disableIpTracking)return null;let r="127.0.0.1";if(Ke)return r;let o=t.advanced?.ipAddress?.ipAddressHeaders||["x-client-ip","x-forwarded-for","cf-connecting-ip","fastly-client-ip","x-real-ip","x-cluster-client-ip","x-forwarded","forwarded-for","forwarded"],i=e instanceof Request?e.headers:e;for(let c of o){let a=i.get(c);if(typeof a=="string"){let s=a.split(",")[0].trim();if(s)return s}}return null}function Vr(e,t,r){let n=Date.now(),o=t*1e3;return n-r.lastRequest<o&&r.count>=e}function Nr(e){return new Response(JSON.stringify({message:"Too many requests. Please try again later."}),{status:429,statusText:"Too Many Requests",headers:{"X-Retry-After":e.toString()}})}function qr(e,t){let r=Date.now(),n=t*1e3;return Math.ceil((e+n-r)/1e3)}function $r(e,t){let r=t??"rateLimit",n=e.adapter;return{get:async o=>await n.findOne({model:r,where:[{field:"key",value:o}]}),set:async(o,i,c)=>{try{c?await n.update({model:t??"rateLimit",where:[{field:"key",value:o}],update:{count:i.count,lastRequest:i.lastRequest}}):await n.create({model:t??"rateLimit",data:{key:o,count:i.count,lastRequest:i.lastRequest}})}catch(a){w.error("Error setting rate limit",a)}}}}var ir=new Map;function jr(e){return e.rateLimit.storage==="secondary-storage"?{get:async r=>{let n=await e.options.secondaryStorage?.get(r);return n?JSON.parse(n):void 0},set:async(r,n)=>{await e.options.secondaryStorage?.set?.(r,JSON.stringify(n))}}:e.rateLimit.storage==="memory"?{async get(r){return ir.get(r)},async set(r,n,o){ir.set(r,n)}}:$r(e,e.rateLimit.tableName)}async function sr(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,n=e.url.replace(r,""),o=t.rateLimit.window,i=t.rateLimit.max,c=xe(e,t.options)+n,s=zr().find(p=>p.pathMatcher(n));s&&(o=s.window,i=s.max);for(let p of t.options.plugins||[])if(p.rateLimit){let l=p.rateLimit.find(m=>m.pathMatcher(n));if(l){o=l.window,i=l.max;break}}if(t.rateLimit.customRules){let p=t.rateLimit.customRules[n];p&&(o=p.window,i=p.max)}let d=jr(t),u=await d.get(c),f=Date.now();if(!u)await d.set(c,{key:c,count:1,lastRequest:f});else{let p=f-u.lastRequest;if(Vr(i,o,u)){let l=qr(u.lastRequest,o);return Nr(l)}else p>o*1e3?await d.set(c,{...u,count:1,lastRequest:f}):await d.set(c,{...u,count:u.count+1,lastRequest:f})}}function zr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")||t.startsWith("/change-password")||t.startsWith("/change-email")},window:10,max:3}]}var Mr=require("better-call");function Ne(e,t){let r=t.plugins?.reduce((a,s)=>({...a,...s.endpoints}),{}),n=t.plugins?.map(a=>a.middlewares?.map(s=>{let d=async u=>s.middleware({...u,context:{...e,...u.context}});return d.path=s.path,d.options=s.middleware.options,d.headers=s.middleware.headers,{path:s.path,middleware:d}})).filter(a=>a!==void 0).flat()||[],i={...{signInSocial:Nt,callbackOAuth:jt,getSession:Be(),signOut:Mt,signUpEmail:rr(),signInEmail:qt,forgetPassword:Gt,resetPassword:Qt,verifyEmail:Vt,sendVerificationEmail:Ft,changeEmail:Xt,changePassword:Wt,setPassword:Jt,updateUser:Zt(),deleteUser:Yt,forgetPasswordCallback:Kt,listSessions:_t(),revokeSession:Lt,revokeSessions:Ct,revokeOtherSessions:Bt,linkSocialAccount:or,listUserAccounts:nr},...r,ok:tr,error:er},c={};for(let[a,s]of Object.entries(i))c[a]=async(d={})=>{let u=await e;for(let l of t.plugins||[])if(l.hooks?.before)for(let m of l.hooks.before){let h={...s,...d,context:{...u,...d?.context}};if(m.matcher(h)){let y=await m.handler(h);y&&"context"in y&&(d={...y,...d})}}let f;try{f=await s({...d,context:{...u,...d.context}})}catch(l){if(l instanceof z.APIError){let m=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!m?.length)throw l;let h=new Response(JSON.stringify(l.body),{status:z.statusCode[l.status],headers:l.headers}),g;for(let y of m||[])if(y.matcher(d)){u.returned=h;let M={...s,...d,context:u},ve=await y.handler(M);ve&&"response"in ve&&(g=ve.response)}if(g instanceof Response)return g;throw l}throw l}let p=f;for(let l of t.plugins||[])if(l.hooks?.after)for(let m of l.hooks.after){let h={...d,context:{...u,...d.context,endpoint:s,returned:p}};if(m.matcher(h)){let y=await m.handler(h);y&&"response"in y&&(p=y.response)}}return p},c[a].path=s.path,c[a].method=s.method,c[a].options=s.options,c[a].headers=s.headers;return{api:c,middlewares:n}}var ar=(e,t)=>{let{api:r,middlewares:n}=Ne(e,t),o=new URL(e.baseURL).pathname;return(0,z.createRouter)(r,{extraContext:e,basePath:o,routerMiddleware:[{path:"/**",middleware:Je},...n],async onRequest(i){for(let c of e.options.plugins||[])if(c.onRequest){let a=await c.onRequest(i,e);if(a&&"response"in a)return a.response}return sr(i,e)},async onResponse(i){for(let c of e.options.plugins||[])if(c.onResponse){let a=await c.onResponse(i,e);if(a)return a.response}return i},onError(i){if(i instanceof z.APIError&&i.status==="NOT_FOUND")return;if(t.onAPIError?.throw)throw i;if(t.onAPIError?.onError){t.onAPIError.onError(i,e);return}let c=t.logger?.verboseLogging?w:void 0;t.logger?.disabled!==!0&&(i instanceof z.APIError?(i.status==="INTERNAL_SERVER_ERROR"&&w.error(i),c?.error(i.message)):w?.error(i))}})};var se=e=>{let t=e.plugins?.reduce((s,d)=>{let u=d.schema;if(!u)return s;for(let[f,p]of Object.entries(u))s[f]={fields:{...s[f]?.fields,...p.fields},tableName:p.tableName||f};return s},{}),r=e.rateLimit?.storage==="database",n={rateLimit:{tableName:e.rateLimit?.tableName||"rateLimit",fields:{key:{type:"string",fieldName:e.rateLimit?.fields?.key||"key"},count:{type:"number",fieldName:e.rateLimit?.fields?.count||"count"},lastRequest:{type:"number",fieldName:e.rateLimit?.fields?.lastRequest||"lastRequest"}}}},{user:o,session:i,account:c,...a}=t||{};return{user:{tableName:e.user?.modelName||"user",fields:{name:{type:"string",required:!0,fieldName:e.user?.fields?.name||"name"},email:{type:"string",unique:!0,required:!0,fieldName:e.user?.fields?.email||"email"},emailVerified:{type:"boolean",defaultValue:()=>!1,required:!0,fieldName:e.user?.fields?.emailVerified||"emailVerified"},image:{type:"string",required:!1,fieldName:e.user?.fields?.image||"image"},createdAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.createdAt||"createdAt"},updatedAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.updatedAt||"updatedAt"},...o?.fields,...e.user?.additionalFields},order:1},session:{tableName:e.session?.modelName||"session",fields:{expiresAt:{type:"date",required:!0,fieldName:e.session?.fields?.expiresAt||"expiresAt"},ipAddress:{type:"string",required:!1,fieldName:e.session?.fields?.ipAddress||"ipAddress"},userAgent:{type:"string",required:!1,fieldName:e.session?.fields?.userAgent||"userAgent"},userId:{type:"string",fieldName:e.session?.fields?.userId||"userId",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0},...i?.fields,...e.session?.additionalFields},order:2},account:{tableName:e.account?.modelName||"account",fields:{accountId:{type:"string",required:!0,fieldName:e.account?.fields?.accountId||"accountId"},providerId:{type:"string",required:!0,fieldName:e.account?.fields?.providerId||"providerId"},userId:{type:"string",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0,fieldName:e.account?.fields?.userId||"userId"},accessToken:{type:"string",required:!1,fieldName:e.account?.fields?.accessToken||"accessToken"},refreshToken:{type:"string",required:!1,fieldName:e.account?.fields?.refreshToken||"refreshToken"},idToken:{type:"string",required:!1,fieldName:e.account?.fields?.idToken||"idToken"},expiresAt:{type:"date",required:!1,fieldName:e.account?.fields?.expiresAt||"expiresAt"},password:{type:"string",required:!1,fieldName:e.account?.fields?.password||"password"},...c?.fields},order:3},verification:{tableName:e.verification?.modelName||"verification",fields:{identifier:{type:"string",required:!0,fieldName:e.verification?.fields?.identifier||"identifier"},value:{type:"string",required:!0,fieldName:e.verification?.fields?.value||"value"},expiresAt:{type:"date",required:!0,fieldName:e.verification?.fields?.expiresAt||"expiresAt"}},order:4},...a,...r?n:{}}};var ae=require("kysely"),q=require("kysely");function dr(e){if("dialect"in e)return dr(e.dialect);if("createDriver"in e){if(e instanceof q.SqliteDialect)return"sqlite";if(e instanceof q.MysqlDialect)return"mysql";if(e instanceof q.PostgresDialect)return"postgres";if(e instanceof ae.MssqlDialect)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var qe=async e=>{let t=e.database;if("db"in t)return{kysely:t.db,databaseType:t.type};if("dialect"in t)return{kysely:new ae.Kysely({dialect:t.dialect}),databaseType:t.type};let r,n=dr(t);return"createDriver"in t&&(r=t),"aggregate"in t&&(r=new q.SqliteDialect({database:t})),"getConnection"in t&&(r=new q.MysqlDialect(t)),"connect"in t&&(r=new q.PostgresDialect({pool:t})),{kysely:r?new ae.Kysely({dialect:r}):null,databaseType:n}};function cr(e,t){let r=t.hooks;async function n(i,c,a){let s=i;for(let f of r||[]){let p=f[c]?.create?.before;if(p){let l=await p(i);if(l===!1)return null;typeof l=="object"&&"data"in l&&(s=l.data)}}let d=a?await a.fn(s):null,u=!a||a.executeMainFn?await e.create({model:c,data:s}):d;for(let f of r||[]){let p=f[c]?.create?.after;p&&await p(u)}return u}async function o(i,c,a,s){let d=i;for(let p of r||[]){let l=p[a]?.update?.before;if(l){let m=await l(i);if(m===!1)return null;d=typeof m=="object"?m.data:m}}let u=s?await s.fn(d):null,f=!s||s.executeMainFn?await e.update({model:a,update:d,where:c}):u;for(let p of r||[]){let l=p[a]?.update?.after;l&&await l(f)}return f}return{createWithHooks:n,updateWithHooks:o}}var $e=(e,t)=>{let r=t.options,n=r.secondaryStorage,o=r.session?.expiresIn||60*60*24*7,{createWithHooks:i,updateWithHooks:c}=cr(e,t);return{createOAuthUser:async(a,s)=>{try{let d=await i({id:P(),createdAt:new Date,updatedAt:new Date,...a},"user"),u=await i({id:P(),...s,userId:d.id||a.id},"account");return{user:d,account:u}}catch(d){return console.log(d),null}},createUser:async a=>await i({id:P(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...a},"user"),createAccount:async a=>await i({id:P(),createdAt:new Date,updatedAt:new Date,...a},"account"),listSessions:async a=>{if(n){let d=await n.get(`active-sessions-${a}`);if(!d)return[];let u=ne(d)||[],f=Date.now(),p=u.filter(m=>m.expiresAt>f),l=[];for(let m of p){let h=await n.get(m.id);if(h){let g=JSON.parse(h),y=ke(t.options,{...g.session,expiresAt:new Date(g.session.expiresAt)});l.push(y)}}return l}return await e.findMany({model:"session",where:[{field:"userId",value:a}]})},listUsers:async(a,s,d,u)=>await e.findMany({model:"user",limit:a,offset:s,sortBy:d,where:u}),deleteUser:async a=>{await e.deleteMany({model:"session",where:[{field:"userId",value:a}]}),await e.deleteMany({model:"account",where:[{field:"userId",value:a}]}),await e.delete({model:"user",where:[{field:"id",value:a}]})},createSession:async(a,s,d,u)=>{let f=s instanceof Request?s.headers:s,p={id:P(32),userId:a,expiresAt:d?_(60*60*24,"sec"):_(o,"sec"),ipAddress:s&&xe(s,t.options)||"",userAgent:f?.get("user-agent")||"",...u};return await i(p,"session",n?{fn:async m=>{let h=await e.findOne({model:"user",where:[{field:"id",value:a}]});n.set(m.id,JSON.stringify({session:m,user:h}),o);let g=await n.get(`active-sessions-${a}`),y=[],k=Date.now();return g&&(y=ne(g)||[],y=y.filter(M=>M.expiresAt>k)),y.push({id:m.id,expiresAt:k+o*1e3}),await n.set(`active-sessions-${a}`,JSON.stringify(y),o),m},executeMainFn:r.session?.storeSessionInDatabase}:void 0)},findSession:async a=>{if(n){let f=await n.get(a);if(f){let p=JSON.parse(f),l=ke(t.options,{...p.session,expiresAt:new Date(p.session.expiresAt)}),m=Fe(t.options,{...p.user,createdAt:new Date(p.user.createdAt),updatedAt:new Date(p.user.updatedAt)});return{session:l,user:m}}}let s=await e.findOne({model:"session",where:[{value:a,field:"id"}]});if(!s)return null;let d=await e.findOne({model:"user",where:[{value:s.userId,field:"id"}]});if(!d)return null;let u=Fe(t.options,d);return{session:ke(t.options,s),user:u}},findSessions:async a=>{if(n){let f=[];for(let p of a){let l=await n.get(p);if(l){let m=JSON.parse(l),h={session:{...m.session,expiresAt:new Date(m.session.expiresAt)},user:{...m.user,createdAt:new Date(m.user.createdAt),updatedAt:new Date(m.user.updatedAt)}};f.push(h)}}return f}let s=await e.findMany({model:"session",where:[{field:"id",value:a,operator:"in"}]}),d=s.map(f=>f.userId);if(!d.length)return[];let u=await e.findMany({model:"user",where:[{field:"id",value:d,operator:"in"}]});return s.map(f=>{let p=u.find(l=>l.id===f.userId);return p?{session:f,user:p}:null})},updateSession:async(a,s)=>await c(s,[{field:"id",value:a}],"session",n?{async fn(u){let f=await n.get(a),p=null;if(f){let l=JSON.parse(f);p={...l.session,...u},await n.set(a,JSON.stringify({session:p,user:l.user}),l.session.expiresAt?Math.floor((l.session.expiresAt.getTime()-Date.now())/1e3):o)}else return null},executeMainFn:r.session?.storeSessionInDatabase}:void 0),deleteSession:async a=>{if(n){await n.delete(a),r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"id",value:a}]});return}await e.delete({model:"session",where:[{field:"id",value:a}]})},deleteSessions:async a=>{if(n){let s=await e.findMany({model:"session",where:[{field:"userId",value:a}]});for(let d of s)await n.delete(d.id);r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"userId",value:a}]});return}await e.deleteMany({model:"session",where:[{field:"userId",value:a}]})},findUserByEmail:async(a,s)=>{let d=await e.findOne({model:"user",where:[{value:a.toLowerCase(),field:"email"}]});if(!d)return null;if(s?.includeAccounts){let u=await e.findMany({model:"account",where:[{value:d.id,field:"userId"}]});return{user:d,accounts:u}}return{user:d,accounts:[]}},findUserById:async a=>await e.findOne({model:"user",where:[{field:"id",value:a}]}),linkAccount:async a=>await i({id:P(),...a},"account"),updateUser:async(a,s)=>await c(s,[{field:"id",value:a}],"user"),updateUserByEmail:async(a,s)=>await c(s,[{field:"email",value:a}],"user"),updatePassword:async(a,s)=>await c({password:s},[{field:"userId",value:a},{field:"providerId",value:"credential"}],"account"),findAccounts:async a=>await e.findMany({model:"account",where:[{field:"userId",value:a}]}),findAccount:async a=>await e.findOne({model:"account",where:[{field:"accountId",value:a}]}),updateAccount:async(a,s)=>await c(s,[{field:"id",value:a}],"account"),createVerificationValue:async a=>await i({id:P(),...a},"verification"),findVerificationValue:async a=>{let s=await e.findMany({model:"verification",where:[{field:"identifier",value:a}],limit:100}),d=s.pop();return s.length>0&&await e.deleteMany({model:"verification",where:[{operator:"in",field:"id",value:s.map(u=>u.id)}]}),d},deleteVerificationValue:async a=>{await e.delete({model:"verification",where:[{field:"id",value:a}]})},updateVerificationValue:async(a,s)=>await c(s,[{field:"id",value:a}],"verification")}};var Hr=require("zod");var Gr=(e,t,r)=>{let n=se(t);function o(s,d){if(d==="id")return d;let u=n[s].fields[d];return u||console.log("Field not found",s,d),u.fieldName||d}function i(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"?s?1:0:p.type==="date"&&s?s.toISOString():s}function c(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"&&s!==null?s===1:p.type==="date"&&s?new Date(s):s}let a=r?.generateId!==!1;return{transformInput(s,d){let u=s.id&&a?{id:r?.generateId?r.generateId():s.id}:{};for(let f in s){let p=n[d].fields[f];p&&(u[p.fieldName||f]=i(s[f],d,f))}return u},transformOutput(s,d,u=[]){if(!s)return null;let f=s.id?u.length===0||u.includes("id")?{id:s.id}:{}:{},p=n[d].fields;for(let l in p){if(u.length&&!u.includes(l))continue;let m=p[l];m&&(f[l]=c(s[m.fieldName||l],d,l))}return f},convertWhereClause(s,d){if(!d)return{and:null,or:null};let u={and:[],or:[]};return d.forEach(f=>{let{field:p,value:l,operator:m="=",connector:h="AND"}=f,g=o(s,p),y=k=>m.toLowerCase()==="in"?k(g,"in",Array.isArray(l)?l:[l]):m==="contains"?k(g,"like",`%${l}%`):m==="starts_with"?k(g,"like",`${l}%`):m==="ends_with"?k(g,"like",`%${l}`):m==="eq"?k(g,"=",l):m==="ne"?k(g,"<>",l):m==="gt"?k(g,">",l):m==="gte"?k(g,">=",l):m==="lt"?k(g,"<",l):m==="lte"?k(g,"<=",l):k(g,m,l);h==="OR"?u.or.push(y):u.and.push(y)}),{and:u.and.length?u.and:null,or:u.or.length?u.or:null}},async withReturning(s,d,u){let f;if(r?.type!=="mysql")f=await d.returningAll().executeTakeFirst();else{await d.execute();let p="id",l=s[p];f=await e.selectFrom(this.getModelName(u)).selectAll().where(p,"=",l).executeTakeFirst()}return f},getModelName(s){return n[s].tableName}}},ur=(e,t)=>r=>{let{transformInput:n,withReturning:o,transformOutput:i,convertWhereClause:c,getModelName:a}=Gr(e,r,t);return{id:"kysely",async create(s){let{model:d,data:u,select:f}=s,p=n(u,d),l=e.insertInto(a(d)).values(p);return i(await o(p,l,d),d,f)},async findOne(s){let{model:d,where:u,select:f}=s,{and:p,or:l}=c(d,u),m=e.selectFrom(a(d)).selectAll();p&&(m=m.where(g=>g.and(p.map(y=>y(g))))),l&&(m=m.where(g=>g.or(l.map(y=>y(g)))));let h=await m.executeTakeFirst();return h?i(h,d,f):null},async findMany(s){let{model:d,where:u,limit:f,offset:p,sortBy:l}=s,{and:m,or:h}=c(d,u),g=e.selectFrom(a(d)).selectAll();m&&(g=g.where(k=>k.and(m.map(M=>M(k))))),h&&(g=g.where(k=>k.or(h.map(M=>M(k))))),g=g.limit(f||100),p&&(g=g.offset(p)),l&&(g=g.orderBy(l.field,l.direction));let y=await g.selectAll().execute();return y?y.map(k=>i(k,d)):[]},async update(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(g=>g.and(p.map(y=>y(g))))),l&&(h=h.where(g=>g.or(l.map(y=>y(g))))),i(await o(m,h,d),d)},async updateMany(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(y=>y.and(p.map(k=>k(y))))),l&&(h=h.where(y=>y.or(l.map(k=>k(y))))),(await h.execute()).length},async delete(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),await l.execute()},async deleteMany(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));return f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),(await l.execute()).length},options:t}};async function lr(e){if(!e.database)throw new O("Database configuration is required");if(typeof e.database=="function")return e.database(e);let{kysely:t,databaseType:r}=await qe(e);if(!t)throw new O("Failed to initialize database adapter");return ur(t,{generateId:"generateId"in e.database?e.database.generateId:void 0,type:r||"sqlite"})(e)}var de=require("oslo/encoding");var pr=require("@noble/hashes/scrypt"),fr=require("uncrypto"),Y={N:16384,r:16,p:1,dkLen:64};async function mr(e,t){return await(0,pr.scryptAsync)(e.normalize("NFKC"),t,{N:Y.N,p:Y.p,r:Y.r,dkLen:Y.dkLen,maxmem:128*Y.N*Y.r*2})}var gr=async e=>{let t=(0,de.encodeHex)((0,fr.getRandomValues)(new Uint8Array(16))),r=await mr(e,t);return`${t}:${(0,de.encodeHex)(r)}`},hr=async(e,t)=>{let[r,n]=e.split(":"),o=await mr(t,r);return Pe(o,(0,de.decodeHex)(n))};var wr=require("defu");var je="better-auth-secret-123456789";var ze=require("better-call");async function yr(e,t){let n=(await t.context.internalAdapter.findAccounts(e))?.find(c=>c.providerId==="credential"),o=n?.password;if(!n||!o)throw new ze.APIError("BAD_REQUEST",{message:"No password credential found"});if(!await t.context.password.verify(o,t.body.password))throw new ze.APIError("BAD_REQUEST",{message:"Invalid password"});return!0}var br=async e=>{let t=await lr(e),r=e.plugins||[],n=Qr(e),o=te(e.baseURL,e.basePath),i=e.secret||S.BETTER_AUTH_SECRET||S.AUTH_SECRET||je;i===je&&ee&&w.error("You are using the default secret. Please set `BETTER_AUTH_SECRET` in your environment variables or pass `secret` in your auth config."),e={...e,secret:i,baseURL:o?new URL(o).origin:"",basePath:e.basePath||"/api/auth",plugins:r.concat(n),emailAndPassword:{...e.emailAndPassword,enabled:e.emailAndPassword?.enabled??!1,autoSignIn:e.emailAndPassword?.autoSignIn??!0}};let c=Se(e),a=se(e),s=Object.keys(e.socialProviders||{}).map(f=>{let p=e.socialProviders?.[f];return p.enabled===!1?null:((!p.clientId||!p.clientSecret)&&w.warn(`Social provider ${f} is missing clientId or clientSecret`),Ce[f](p))}).filter(f=>f!==null),d={appName:e.appName||"Better Auth",socialProviders:s,options:e,tables:a,trustedOrigins:Zr(e),baseURL:o||"",sessionConfig:{updateAge:e.session?.updateAge||24*60*60,expiresIn:e.session?.expiresIn||60*60*24*7},secret:i,rateLimit:{...e.rateLimit,enabled:e.rateLimit?.enabled??ee,window:e.rateLimit?.window||10,max:e.rateLimit?.max||100,storage:e.rateLimit?.storage||e.secondaryStorage?"secondary-storage":"memory"},authCookies:c,logger:fe({disabled:e.logger?.disabled||!1}),uuid:P,secondaryStorage:e.secondaryStorage,password:{hash:e.emailAndPassword?.password?.hash||gr,verify:e.emailAndPassword?.password?.verify||hr,config:{minPasswordLength:e.emailAndPassword?.minPasswordLength||8,maxPasswordLength:e.emailAndPassword?.maxPasswordLength||128},checkPassword:yr},adapter:t,internalAdapter:$e(t,{options:e,hooks:e.databaseHooks?[e.databaseHooks]:[]}),createAuthCookie:he(e)},{context:u}=Kr(d);return u};function Kr(e){let t=e.options,r=t.plugins||[],n=e,o=[];for(let i of r)if(i.init){let c=i.init(e);typeof c=="object"&&(c.options&&(c.options.databaseHooks&&o.push(c.options.databaseHooks),t=(0,wr.defu)(t,c.options)),c.context&&(n={...n,...c.context}))}return o.push(t.databaseHooks),n.internalAdapter=$e(e.adapter,{options:t,hooks:o.filter(i=>i!==void 0)}),n.options=t,{context:n}}function Qr(e){let t=[];return e.advanced?.crossSubDomainCookies?.enabled,t}function Zr(e){let t=te(e.baseURL,e.basePath);if(!t)return[];let r=[new URL(t).origin];e.trustedOrigins&&r.push(...e.trustedOrigins);let n=S.BETTER_AUTH_TRUSTED_ORIGINS;return n&&r.push(...n.split(",")),r}var Wr=e=>{let t=br(e),{api:r}=Ne(t,e);return{handler:async n=>{let o=await t,i=o.options.basePath||"/api/auth",c=new URL(n.url);if(!o.options.baseURL){let s=te(void 0,i)||`${c.origin}${i}`;o.options.baseURL=s,o.baseURL=s}if(o.trustedOrigins=[c.origin,...o.options.trustedOrigins||[]],!o.options.baseURL)return new Response("Base URL not set",{status:400});if(c.pathname===i||c.pathname===`${i}/`)return new Response("Welcome to BetterAuth",{status:200});let{handler:a}=ar(o,e);return a(n)},api:r,options:e,$context:t,$Infer:{}}};0&&(module.exports={BetterAuthError,HIDE_METADATA,MissingDependencyError,betterAuth,capitalizeFirstLetter,createCookieGetter,createLogger,deleteSessionCookie,generateId,generateState,getCookies,logger,parseCookies,parseSetCookieHeader,parseState,setSessionCookie});
package/dist/index.d.cts CHANGED
@@ -1,8 +1,8 @@
1
- export { k as Adapter, l as AdapterInstance, d as AdditionalSessionFieldsInput, e as AdditionalSessionFieldsOutput, a as AdditionalUserFieldsInput, c as AdditionalUserFieldsOutput, A as Auth, h as AuthContext, p as BetterAuthCookies, B as BetterAuthOptions, j as BetterAuthPlugin, E as EligibleCookies, G as GenericEndpointContext, H as HookEndpointContext, g as InferPluginTypes, f as InferSession, I as InferUser, P as PluginSchema, R as RateLimit, m as SecondaryStorage, S as Session, U as User, W as Where, b as betterAuth, n as createCookieGetter, u as createLogger, q as deleteSessionCookie, o as getCookies, i as init, v as logger, r as parseCookies, t as parseSetCookieHeader, s as setSessionCookie } from './auth-CkfEl1lS.cjs';
1
+ export { k as Adapter, l as AdapterInstance, d as AdditionalSessionFieldsInput, e as AdditionalSessionFieldsOutput, a as AdditionalUserFieldsInput, c as AdditionalUserFieldsOutput, A as Auth, h as AuthContext, p as BetterAuthCookies, B as BetterAuthOptions, j as BetterAuthPlugin, E as EligibleCookies, G as GenericEndpointContext, H as HookEndpointContext, g as InferPluginTypes, f as InferSession, I as InferUser, P as PluginSchema, R as RateLimit, m as SecondaryStorage, S as Session, U as User, W as Where, b as betterAuth, n as createCookieGetter, u as createLogger, q as deleteSessionCookie, o as getCookies, i as init, v as logger, r as parseCookies, t as parseSetCookieHeader, s as setSessionCookie } from './auth-RxDdMH7n.cjs';
2
2
  export { D as DeepPartial, H as HasRequiredKeys, L as LiteralString, a as LiteralUnion, P as Prettify, R as RequiredKeysOf, S as StripEmptyObjects, U as UnionToIntersection, W as WithoutEmpty } from './helper-DPDj8Nix.cjs';
3
3
  export { AtomListener, BetterAuthClientPlugin, ClientOptions, InferActions, InferAdditionalFromClient, InferClientAPI, InferPluginsFromClient, InferSessionFromClient, InferUserFromClient, IsSignal, Store } from './types.cjs';
4
4
  export { H as HIDE_METADATA } from './hide-metadata-DEHJp1rk.cjs';
5
- export { g as generateState, p as parseState } from './state-ifN7k51A.cjs';
5
+ export { g as generateState, p as parseState } from './state-B06Cucct.cjs';
6
6
  import 'kysely';
7
7
  import 'zod';
8
8
  import 'better-call';
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { k as Adapter, l as AdapterInstance, d as AdditionalSessionFieldsInput, e as AdditionalSessionFieldsOutput, a as AdditionalUserFieldsInput, c as AdditionalUserFieldsOutput, A as Auth, h as AuthContext, p as BetterAuthCookies, B as BetterAuthOptions, j as BetterAuthPlugin, E as EligibleCookies, G as GenericEndpointContext, H as HookEndpointContext, g as InferPluginTypes, f as InferSession, I as InferUser, P as PluginSchema, R as RateLimit, m as SecondaryStorage, S as Session, U as User, W as Where, b as betterAuth, n as createCookieGetter, u as createLogger, q as deleteSessionCookie, o as getCookies, i as init, v as logger, r as parseCookies, t as parseSetCookieHeader, s as setSessionCookie } from './auth-B3fUmyZo.js';
1
+ export { k as Adapter, l as AdapterInstance, d as AdditionalSessionFieldsInput, e as AdditionalSessionFieldsOutput, a as AdditionalUserFieldsInput, c as AdditionalUserFieldsOutput, A as Auth, h as AuthContext, p as BetterAuthCookies, B as BetterAuthOptions, j as BetterAuthPlugin, E as EligibleCookies, G as GenericEndpointContext, H as HookEndpointContext, g as InferPluginTypes, f as InferSession, I as InferUser, P as PluginSchema, R as RateLimit, m as SecondaryStorage, S as Session, U as User, W as Where, b as betterAuth, n as createCookieGetter, u as createLogger, q as deleteSessionCookie, o as getCookies, i as init, v as logger, r as parseCookies, t as parseSetCookieHeader, s as setSessionCookie } from './auth-aIfiqYkD.js';
2
2
  export { D as DeepPartial, H as HasRequiredKeys, L as LiteralString, a as LiteralUnion, P as Prettify, R as RequiredKeysOf, S as StripEmptyObjects, U as UnionToIntersection, W as WithoutEmpty } from './helper-DPDj8Nix.js';
3
3
  export { AtomListener, BetterAuthClientPlugin, ClientOptions, InferActions, InferAdditionalFromClient, InferClientAPI, InferPluginsFromClient, InferSessionFromClient, InferUserFromClient, IsSignal, Store } from './types.js';
4
4
  export { H as HIDE_METADATA } from './hide-metadata-DEHJp1rk.js';
5
- export { g as generateState, p as parseState } from './state-CIrmeq4O.js';
5
+ export { g as generateState, p as parseState } from './state-DyQuVVEF.js';
6
6
  import 'kysely';
7
7
  import 'zod';
8
8
  import 'better-call';
package/dist/index.js CHANGED
@@ -81,4 +81,4 @@ Error: `,a),e.redirect(`${e.context.baseURL}/error?error=internal_server_error`)
81
81
  <div class="error-code">Error Code: <span id="errorCode">${e}</span></div>
82
82
  </div>
83
83
  </body>
84
- </html>`,At=w("/error",{method:"GET",metadata:M},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(_r(t),{headers:{"Content-Type":"text/html"}})});var kt=w("/ok",{method:"GET",metadata:M},async e=>e.json({ok:!0}));import{z as H}from"zod";import{APIError as V}from"better-call";var Rt=()=>w("/sign-up/email",{method:"POST",query:H.object({currentURL:H.string().optional()}).optional(),body:H.record(H.string(),H.any())},async e=>{if(!e.context.options.emailAndPassword?.enabled)throw new V("BAD_REQUEST",{message:"Email and password sign up is not enabled"});let t=e.body,{name:r,email:n,password:o,image:i,callbackURL:c,...a}=t;if(!H.string().email().safeParse(n).success)throw new V("BAD_REQUEST",{message:"Invalid email"});let d=e.context.password.config.minPasswordLength;if(o.length<d)throw e.context.logger.error("Password is too short"),new V("BAD_REQUEST",{message:"Password is too short"});let u=e.context.password.config.maxPasswordLength;if(o.length>u)throw e.context.logger.error("Password is too long"),new V("BAD_REQUEST",{message:"Password is too long"});if((await e.context.internalAdapter.findUserByEmail(n))?.user)throw e.context.logger.info(`Sign-up attempt for existing email: ${n}`),new V("UNPROCESSABLE_ENTITY",{message:"User with this email already exists"});let p=ce(e.context.options,a),l;try{if(l=await e.context.internalAdapter.createUser({email:n.toLowerCase(),name:r,image:i,...p,emailVerified:!1}),!l)throw new V("BAD_REQUEST",{message:"Failed to create user"})}catch(g){throw b.error("Failed to create user",g),new V("UNPROCESSABLE_ENTITY",{message:"Failed to create user",details:g})}if(!l)throw new V("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let m=await e.context.password.hash(o);if(await e.context.internalAdapter.linkAccount({userId:l.id,providerId:"credential",accountId:l.id,password:m,expiresAt:S(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let g=await F(e.context.secret,l.email),y=`${e.context.baseURL}/verify-email?token=${g}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.({user:l,url:y,token:g},e.request)}if(!e.context.options.emailAndPassword.autoSignIn||e.context.options.emailAndPassword.requireEmailVerification)return e.json({user:l,session:null},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:l,session:null}});let h=await e.context.internalAdapter.createSession(l.id,e.request);if(!h)throw new V("BAD_REQUEST",{message:"Failed to create session"});return await I(e,{session:h,user:l}),e.json({user:l,session:h})});import{z as Y}from"zod";import{APIError as xt}from"better-call";var vt=w("/list-accounts",{method:"GET",use:[_]},async e=>{let t=e.context.session,r=await e.context.internalAdapter.findAccounts(t.user.id);return e.json(r.map(n=>({id:n.id,provider:n.providerId})))}),Ut=w("/link-social",{method:"POST",requireHeaders:!0,query:Y.object({currentURL:Y.string().optional()}).optional(),body:Y.object({callbackURL:Y.string().optional(),provider:Y.enum(ie)}),use:[_]},async e=>{let t=e.context.session;if((await e.context.internalAdapter.findAccounts(t.user.id)).find(a=>a.providerId===e.body.provider))throw new xt("BAD_REQUEST",{message:"Social Account is already linked."});let o=e.context.socialProviders.find(a=>a.id===e.body.provider);if(!o)throw e.context.logger.error("Provider not found. Make sure to add the provider in your auth config",{provider:e.body.provider}),new xt("NOT_FOUND",{message:"Provider not found"});let i=await ne(e,{userId:t.user.id,email:t.user.email}),c=await o.createAuthorizationURL({state:i.state,codeVerifier:i.codeVerifier,redirectURI:`${e.context.baseURL}/callback/${o.id}`});return e.json({url:c.toString(),redirect:!0})});function pe(e,t){if(t.advanced?.ipAddress?.disableIpTracking)return null;let r="127.0.0.1";if(Se)return r;let o=t.advanced?.ipAddress?.ipAddressHeaders||["x-client-ip","x-forwarded-for","cf-connecting-ip","fastly-client-ip","x-real-ip","x-cluster-client-ip","x-forwarded","forwarded-for","forwarded"],i=e instanceof Request?e.headers:e;for(let c of o){let a=i.get(c);if(typeof a=="string"){let s=a.split(",")[0].trim();if(s)return s}}return null}function Lr(e,t,r){let n=Date.now(),o=t*1e3;return n-r.lastRequest<o&&r.count>=e}function Cr(e){return new Response(JSON.stringify({message:"Too many requests. Please try again later."}),{status:429,statusText:"Too Many Requests",headers:{"X-Retry-After":e.toString()}})}function Br(e,t){let r=Date.now(),n=t*1e3;return Math.ceil((e+n-r)/1e3)}function Dr(e,t){let r=t??"rateLimit",n=e.adapter;return{get:async o=>await n.findOne({model:r,where:[{field:"key",value:o}]}),set:async(o,i,c)=>{try{c?await n.update({model:t??"rateLimit",where:[{field:"key",value:o}],update:{count:i.count,lastRequest:i.lastRequest}}):await n.create({model:t??"rateLimit",data:{key:o,count:i.count,lastRequest:i.lastRequest}})}catch(a){b.error("Error setting rate limit",a)}}}}var Tt=new Map;function Fr(e){return e.rateLimit.storage==="secondary-storage"?{get:async r=>{let n=await e.options.secondaryStorage?.get(r);return n?JSON.parse(n):void 0},set:async(r,n)=>{await e.options.secondaryStorage?.set?.(r,JSON.stringify(n))}}:e.rateLimit.storage==="memory"?{async get(r){return Tt.get(r)},async set(r,n,o){Tt.set(r,n)}}:Dr(e,e.rateLimit.tableName)}async function Et(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,n=e.url.replace(r,""),o=t.rateLimit.window,i=t.rateLimit.max,c=pe(e,t.options)+n,s=Vr().find(p=>p.pathMatcher(n));s&&(o=s.window,i=s.max);for(let p of t.options.plugins||[])if(p.rateLimit){let l=p.rateLimit.find(m=>m.pathMatcher(n));if(l){o=l.window,i=l.max;break}}if(t.rateLimit.customRules){let p=t.rateLimit.customRules[n];p&&(o=p.window,i=p.max)}let d=Fr(t),u=await d.get(c),f=Date.now();if(!u)await d.set(c,{key:c,count:1,lastRequest:f});else{let p=f-u.lastRequest;if(Lr(i,o,u)){let l=Br(u.lastRequest,o);return Cr(l)}else p>o*1e3?await d.set(c,{...u,count:1,lastRequest:f}):await d.set(c,{...u,count:u.count+1,lastRequest:f})}}function Vr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")||t.startsWith("/change-password")||t.startsWith("/change-email")},window:10,max:3}]}import{APIError as Ga}from"better-call";function ve(e,t){let r=t.plugins?.reduce((a,s)=>({...a,...s.endpoints}),{}),n=t.plugins?.map(a=>a.middlewares?.map(s=>{let d=async u=>s.middleware({...u,context:{...e,...u.context}});return d.path=s.path,d.options=s.middleware.options,d.headers=s.middleware.headers,{path:s.path,middleware:d}})).filter(a=>a!==void 0).flat()||[],i={...{signInSocial:st,callbackOAuth:ct,getSession:Ae(),signOut:ut,signUpEmail:Rt(),signInEmail:at,forgetPassword:pt,resetPassword:mt,verifyEmail:it,sendVerificationEmail:ot,changeEmail:bt,changePassword:ht,setPassword:yt,updateUser:gt(),deleteUser:wt,forgetPasswordCallback:ft,listSessions:et(),revokeSession:tt,revokeSessions:rt,revokeOtherSessions:nt,linkSocialAccount:Ut,listUserAccounts:vt},...r,ok:kt,error:At},c={};for(let[a,s]of Object.entries(i))c[a]=async(d={})=>{let u=await e;for(let l of t.plugins||[])if(l.hooks?.before)for(let m of l.hooks.before){let h={...s,...d,context:{...u,...d?.context}};if(m.matcher(h)){let y=await m.handler(h);y&&"context"in y&&(d={...y,...d})}}let f;try{f=await s({...d,context:{...u,...d.context}})}catch(l){if(l instanceof xe){let m=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!m?.length)throw l;let h=new Response(JSON.stringify(l.body),{status:qr[l.status],headers:l.headers}),g;for(let y of m||[])if(y.matcher(d)){u.returned=h;let q={...s,...d,context:u},fe=await y.handler(q);fe&&"response"in fe&&(g=fe.response)}if(g instanceof Response)return g;throw l}throw l}let p=f;for(let l of t.plugins||[])if(l.hooks?.after)for(let m of l.hooks.after){let h={...d,context:{...u,...d.context,endpoint:s,returned:p}};if(m.matcher(h)){let y=await m.handler(h);y&&"response"in y&&(p=y.response)}}return p},c[a].path=s.path,c[a].method=s.method,c[a].options=s.options,c[a].headers=s.headers;return{api:c,middlewares:n}}var It=(e,t)=>{let{api:r,middlewares:n}=ve(e,t),o=new URL(e.baseURL).pathname;return Nr(r,{extraContext:e,basePath:o,routerMiddleware:[{path:"/**",middleware:De},...n],async onRequest(i){for(let c of e.options.plugins||[])if(c.onRequest){let a=await c.onRequest(i,e);if(a&&"response"in a)return a.response}return Et(i,e)},async onResponse(i){for(let c of e.options.plugins||[])if(c.onResponse){let a=await c.onResponse(i,e);if(a)return a.response}return i},onError(i){if(i instanceof xe&&i.status==="NOT_FOUND")return;if(t.onAPIError?.throw)throw i;if(t.onAPIError?.onError){t.onAPIError.onError(i,e);return}let c=t.logger?.verboseLogging?b:void 0;t.logger?.disabled!==!0&&(i instanceof xe?(i.status==="INTERNAL_SERVER_ERROR"&&b.error(i),c?.error(i.message)):b?.error(i))}})};var X=e=>{let t=e.plugins?.reduce((s,d)=>{let u=d.schema;if(!u)return s;for(let[f,p]of Object.entries(u))s[f]={fields:{...s[f]?.fields,...p.fields},tableName:p.tableName||f};return s},{}),r=e.rateLimit?.storage==="database",n={rateLimit:{tableName:e.rateLimit?.tableName||"rateLimit",fields:{key:{type:"string",fieldName:e.rateLimit?.fields?.key||"key"},count:{type:"number",fieldName:e.rateLimit?.fields?.count||"count"},lastRequest:{type:"number",fieldName:e.rateLimit?.fields?.lastRequest||"lastRequest"}}}},{user:o,session:i,account:c,...a}=t||{};return{user:{tableName:e.user?.modelName||"user",fields:{name:{type:"string",required:!0,fieldName:e.user?.fields?.name||"name"},email:{type:"string",unique:!0,required:!0,fieldName:e.user?.fields?.email||"email"},emailVerified:{type:"boolean",defaultValue:()=>!1,required:!0,fieldName:e.user?.fields?.emailVerified||"emailVerified"},image:{type:"string",required:!1,fieldName:e.user?.fields?.image||"image"},createdAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.createdAt||"createdAt"},updatedAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.updatedAt||"updatedAt"},...o?.fields,...e.user?.additionalFields},order:1},session:{tableName:e.session?.modelName||"session",fields:{expiresAt:{type:"date",required:!0,fieldName:e.session?.fields?.expiresAt||"expiresAt"},ipAddress:{type:"string",required:!1,fieldName:e.session?.fields?.ipAddress||"ipAddress"},userAgent:{type:"string",required:!1,fieldName:e.session?.fields?.userAgent||"userAgent"},userId:{type:"string",fieldName:e.session?.fields?.userId||"userId",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0},...i?.fields,...e.session?.additionalFields},order:2},account:{tableName:e.account?.modelName||"account",fields:{accountId:{type:"string",required:!0,fieldName:e.account?.fields?.accountId||"accountId"},providerId:{type:"string",required:!0,fieldName:e.account?.fields?.providerId||"providerId"},userId:{type:"string",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0,fieldName:e.account?.fields?.userId||"userId"},accessToken:{type:"string",required:!1,fieldName:e.account?.fields?.accessToken||"accessToken"},refreshToken:{type:"string",required:!1,fieldName:e.account?.fields?.refreshToken||"refreshToken"},idToken:{type:"string",required:!1,fieldName:e.account?.fields?.idToken||"idToken"},expiresAt:{type:"date",required:!1,fieldName:e.account?.fields?.expiresAt||"expiresAt"},password:{type:"string",required:!1,fieldName:e.account?.fields?.password||"password"},...c?.fields},order:3},verification:{tableName:e.verification?.modelName||"verification",fields:{identifier:{type:"string",required:!0,fieldName:e.verification?.fields?.identifier||"identifier"},value:{type:"string",required:!0,fieldName:e.verification?.fields?.value||"value"},expiresAt:{type:"date",required:!0,fieldName:e.verification?.fields?.expiresAt||"expiresAt"}},order:4},...a,...r?n:{}}};import{Kysely as Ot,MssqlDialect as $r}from"kysely";import{MysqlDialect as Pt,PostgresDialect as St,SqliteDialect as _t}from"kysely";function Lt(e){if("dialect"in e)return Lt(e.dialect);if("createDriver"in e){if(e instanceof _t)return"sqlite";if(e instanceof Pt)return"mysql";if(e instanceof St)return"postgres";if(e instanceof $r)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var Ue=async e=>{let t=e.database;if("db"in t)return{kysely:t.db,databaseType:t.type};if("dialect"in t)return{kysely:new Ot({dialect:t.dialect}),databaseType:t.type};let r,n=Lt(t);return"createDriver"in t&&(r=t),"aggregate"in t&&(r=new _t({database:t})),"getConnection"in t&&(r=new Pt(t)),"connect"in t&&(r=new St({pool:t})),{kysely:r?new Ot({dialect:r}):null,databaseType:n}};function Ct(e,t){let r=t.hooks;async function n(i,c,a){let s=i;for(let f of r||[]){let p=f[c]?.create?.before;if(p){let l=await p(i);if(l===!1)return null;typeof l=="object"&&"data"in l&&(s=l.data)}}let d=a?await a.fn(s):null,u=!a||a.executeMainFn?await e.create({model:c,data:s}):d;for(let f of r||[]){let p=f[c]?.create?.after;p&&await p(u)}return u}async function o(i,c,a,s){let d=i;for(let p of r||[]){let l=p[a]?.update?.before;if(l){let m=await l(i);if(m===!1)return null;d=typeof m=="object"?m.data:m}}let u=s?await s.fn(d):null,f=!s||s.executeMainFn?await e.update({model:a,update:d,where:c}):u;for(let p of r||[]){let l=p[a]?.update?.after;l&&await l(f)}return f}return{createWithHooks:n,updateWithHooks:o}}var Te=(e,t)=>{let r=t.options,n=r.secondaryStorage,o=r.session?.expiresIn||60*60*24*7,{createWithHooks:i,updateWithHooks:c}=Ct(e,t);return{createOAuthUser:async(a,s)=>{try{let d=await i({id:L(),createdAt:new Date,updatedAt:new Date,...a},"user"),u=await i({id:L(),...s,userId:d.id||a.id},"account");return{user:d,account:u}}catch(d){return console.log(d),null}},createUser:async a=>await i({id:L(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...a},"user"),createAccount:async a=>await i({id:L(),createdAt:new Date,updatedAt:new Date,...a},"account"),listSessions:async a=>{if(n){let d=await n.get(`active-sessions-${a}`);if(!d)return[];let u=W(d)||[],f=Date.now(),p=u.filter(m=>m.expiresAt>f),l=[];for(let m of p){let h=await n.get(m.id);if(h){let g=JSON.parse(h),y=de(t.options,{...g.session,expiresAt:new Date(g.session.expiresAt)});l.push(y)}}return l}return await e.findMany({model:"session",where:[{field:"userId",value:a}]})},listUsers:async(a,s,d,u)=>await e.findMany({model:"user",limit:a,offset:s,sortBy:d,where:u}),deleteUser:async a=>{await e.deleteMany({model:"session",where:[{field:"userId",value:a}]}),await e.deleteMany({model:"account",where:[{field:"userId",value:a}]}),await e.delete({model:"user",where:[{field:"id",value:a}]})},createSession:async(a,s,d,u)=>{let f=s instanceof Request?s.headers:s,p={id:L(32),userId:a,expiresAt:d?S(60*60*24,"sec"):S(o,"sec"),ipAddress:s&&pe(s,t.options)||"",userAgent:f?.get("user-agent")||"",...u};return await i(p,"session",n?{fn:async m=>{let h=await e.findOne({model:"user",where:[{field:"id",value:a}]});n.set(m.id,JSON.stringify({session:m,user:h}),o);let g=await n.get(`active-sessions-${a}`),y=[],k=Date.now();return g&&(y=W(g)||[],y=y.filter(q=>q.expiresAt>k)),y.push({id:m.id,expiresAt:k+o*1e3}),await n.set(`active-sessions-${a}`,JSON.stringify(y),o),m},executeMainFn:r.session?.storeSessionInDatabase}:void 0)},findSession:async a=>{if(n){let f=await n.get(a);if(f){let p=JSON.parse(f),l=de(t.options,{...p.session,expiresAt:new Date(p.session.expiresAt)}),m=Re(t.options,{...p.user,createdAt:new Date(p.user.createdAt),updatedAt:new Date(p.user.updatedAt)});return{session:l,user:m}}}let s=await e.findOne({model:"session",where:[{value:a,field:"id"}]});if(!s)return null;let d=await e.findOne({model:"user",where:[{value:s.userId,field:"id"}]});if(!d)return null;let u=Re(t.options,d);return{session:de(t.options,s),user:u}},findSessions:async a=>{if(n){let f=[];for(let p of a){let l=await n.get(p);if(l){let m=JSON.parse(l),h={session:{...m.session,expiresAt:new Date(m.session.expiresAt)},user:{...m.user,createdAt:new Date(m.user.createdAt),updatedAt:new Date(m.user.updatedAt)}};f.push(h)}}return f}let s=await e.findMany({model:"session",where:[{field:"id",value:a,operator:"in"}]}),d=s.map(f=>f.userId);if(!d.length)return[];let u=await e.findMany({model:"user",where:[{field:"id",value:d,operator:"in"}]});return s.map(f=>{let p=u.find(l=>l.id===f.userId);return p?{session:f,user:p}:null})},updateSession:async(a,s)=>await c(s,[{field:"id",value:a}],"session",n?{async fn(u){let f=await n.get(a),p=null;if(f){let l=JSON.parse(f);p={...l.session,...u},await n.set(a,JSON.stringify({session:p,user:l.user}),l.session.expiresAt?Math.floor((l.session.expiresAt.getTime()-Date.now())/1e3):o)}else return null},executeMainFn:r.session?.storeSessionInDatabase}:void 0),deleteSession:async a=>{if(n){await n.delete(a),r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"id",value:a}]});return}await e.delete({model:"session",where:[{field:"id",value:a}]})},deleteSessions:async a=>{if(n){let s=await e.findMany({model:"session",where:[{field:"userId",value:a}]});for(let d of s)await n.delete(d.id);r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"userId",value:a}]});return}await e.deleteMany({model:"session",where:[{field:"userId",value:a}]})},findUserByEmail:async(a,s)=>{let d=await e.findOne({model:"user",where:[{value:a.toLowerCase(),field:"email"}]});if(!d)return null;if(s?.includeAccounts){let u=await e.findMany({model:"account",where:[{value:d.id,field:"userId"}]});return{user:d,accounts:u}}return{user:d,accounts:[]}},findUserById:async a=>await e.findOne({model:"user",where:[{field:"id",value:a}]}),linkAccount:async a=>await i({id:L(),...a},"account"),updateUser:async(a,s)=>await c(s,[{field:"id",value:a}],"user"),updateUserByEmail:async(a,s)=>await c(s,[{field:"email",value:a}],"user"),updatePassword:async(a,s)=>await c({password:s},[{field:"userId",value:a},{field:"providerId",value:"credential"}],"account"),findAccounts:async a=>await e.findMany({model:"account",where:[{field:"userId",value:a}]}),findAccount:async a=>await e.findOne({model:"account",where:[{field:"accountId",value:a}]}),updateAccount:async(a,s)=>await c(s,[{field:"id",value:a}],"account"),createVerificationValue:async a=>await i({id:L(),...a},"verification"),findVerificationValue:async a=>{let s=await e.findMany({model:"verification",where:[{field:"identifier",value:a}],sortBy:{direction:"desc",field:"createdAt"},limit:100}),d=s.pop();return s.length>0&&await e.deleteMany({model:"verification",where:[{operator:"in",field:"id",value:s.map(u=>u.id)}]}),d},deleteVerificationValue:async a=>{await e.delete({model:"verification",where:[{field:"id",value:a}]})},updateVerificationValue:async(a,s)=>await c(s,[{field:"id",value:a}],"verification")}};import{z as ad}from"zod";var jr=(e,t,r)=>{let n=X(t);function o(s,d){if(d==="id")return d;let u=n[s].fields[d];return u||console.log("Field not found",s,d),u.fieldName||d}function i(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"?s?1:0:p.type==="date"&&s?s.toISOString():s}function c(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"&&s!==null?s===1:p.type==="date"&&s?new Date(s):s}let a=r?.generateId!==!1;return{transformInput(s,d){let u=s.id&&a?{id:r?.generateId?r.generateId():s.id}:{};for(let f in s){let p=n[d].fields[f];p&&(u[p.fieldName||f]=i(s[f],d,f))}return u},transformOutput(s,d,u=[]){if(!s)return null;let f=s.id?u.length===0||u.includes("id")?{id:s.id}:{}:{},p=n[d].fields;for(let l in p){if(u.length&&!u.includes(l))continue;let m=p[l];m&&(f[l]=c(s[m.fieldName||l],d,l))}return f},convertWhereClause(s,d){if(!d)return{and:null,or:null};let u={and:[],or:[]};return d.forEach(f=>{let{field:p,value:l,operator:m="=",connector:h="AND"}=f,g=o(s,p),y=k=>m.toLowerCase()==="in"?k(g,"in",Array.isArray(l)?l:[l]):m==="contains"?k(g,"like",`%${l}%`):m==="starts_with"?k(g,"like",`${l}%`):m==="ends_with"?k(g,"like",`%${l}`):m==="eq"?k(g,"=",l):m==="ne"?k(g,"<>",l):m==="gt"?k(g,">",l):m==="gte"?k(g,">=",l):m==="lt"?k(g,"<",l):m==="lte"?k(g,"<=",l):k(g,m,l);h==="OR"?u.or.push(y):u.and.push(y)}),{and:u.and.length?u.and:null,or:u.or.length?u.or:null}},async withReturning(s,d,u){let f;if(r?.type!=="mysql")f=await d.returningAll().executeTakeFirst();else{await d.execute();let p="id",l=s[p];f=await e.selectFrom(this.getModelName(u)).selectAll().where(p,"=",l).executeTakeFirst()}return f},getModelName(s){return n[s].tableName}}},Bt=(e,t)=>r=>{let{transformInput:n,withReturning:o,transformOutput:i,convertWhereClause:c,getModelName:a}=jr(e,r,t);return{id:"kysely",async create(s){let{model:d,data:u,select:f}=s,p=n(u,d),l=e.insertInto(a(d)).values(p);return i(await o(p,l,d),d,f)},async findOne(s){let{model:d,where:u,select:f}=s,{and:p,or:l}=c(d,u),m=e.selectFrom(a(d)).selectAll();p&&(m=m.where(g=>g.and(p.map(y=>y(g))))),l&&(m=m.where(g=>g.or(l.map(y=>y(g)))));let h=await m.executeTakeFirst();return h?i(h,d,f):null},async findMany(s){let{model:d,where:u,limit:f,offset:p,sortBy:l}=s,{and:m,or:h}=c(d,u),g=e.selectFrom(a(d)).selectAll();m&&(g=g.where(k=>k.and(m.map(q=>q(k))))),h&&(g=g.where(k=>k.or(h.map(q=>q(k))))),g=g.limit(f||100),p&&(g=g.offset(p)),l&&(g=g.orderBy(l.field,l.direction));let y=await g.selectAll().execute();return y?y.map(k=>i(k,d)):[]},async update(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(g=>g.and(p.map(y=>y(g))))),l&&(h=h.where(g=>g.or(l.map(y=>y(g))))),i(await o(m,h,d),d)},async updateMany(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(y=>y.and(p.map(k=>k(y))))),l&&(h=h.where(y=>y.or(l.map(k=>k(y))))),(await h.execute()).length},async delete(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),await l.execute()},async deleteMany(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));return f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),(await l.execute()).length},options:t}};async function Dt(e){if(!e.database)throw new P("Database configuration is required");if(typeof e.database=="function")return e.database(e);let{kysely:t,databaseType:r}=await Ue(e);if(!t)throw new P("Failed to initialize database adapter");return Bt(t,{generateId:"generateId"in e.database?e.database.generateId:void 0,type:r||"sqlite"})(e)}import{decodeHex as zr,encodeHex as Ft}from"oslo/encoding";import{scryptAsync as Mr}from"@noble/hashes/scrypt";import{getRandomValues as Hr}from"uncrypto";var G={N:16384,r:16,p:1,dkLen:64};async function Vt(e,t){return await Mr(e.normalize("NFKC"),t,{N:G.N,p:G.p,r:G.r,dkLen:G.dkLen,maxmem:128*G.N*G.r*2})}var Nt=async e=>{let t=Ft(Hr(new Uint8Array(16))),r=await Vt(e,t);return`${t}:${Ft(r)}`},qt=async(e,t)=>{let[r,n]=e.split(":"),o=await Vt(t,r);return he(o,zr(n))};import{defu as Gr}from"defu";var Ee="better-auth-secret-123456789";import{APIError as $t}from"better-call";async function jt(e,t){let n=(await t.context.internalAdapter.findAccounts(e))?.find(c=>c.providerId==="credential"),o=n?.password;if(!n||!o)throw new $t("BAD_REQUEST",{message:"No password credential found"});if(!await t.context.password.verify(o,t.body.password))throw new $t("BAD_REQUEST",{message:"Invalid password"});return!0}var zt=async e=>{let t=await Dt(e),r=e.plugins||[],n=Qr(e),o=Z(e.baseURL,e.basePath),i=e.secret||O.BETTER_AUTH_SECRET||O.AUTH_SECRET||Ee;i===Ee&&Q&&b.error("You are using the default secret. Please set `BETTER_AUTH_SECRET` in your environment variables or pass `secret` in your auth config."),e={...e,secret:i,baseURL:o?new URL(o).origin:"",basePath:e.basePath||"/api/auth",plugins:r.concat(n),emailAndPassword:{...e.emailAndPassword,enabled:e.emailAndPassword?.enabled??!1,autoSignIn:e.emailAndPassword?.autoSignIn??!0}};let c=Ve(e),a=X(e),s=Object.keys(e.socialProviders||{}).map(f=>{let p=e.socialProviders?.[f];return p.enabled===!1?null:((!p.clientId||!p.clientSecret)&&b.warn(`Social provider ${f} is missing clientId or clientSecret`),be[f](p))}).filter(f=>f!==null),d={appName:e.appName||"Better Auth",socialProviders:s,options:e,tables:a,trustedOrigins:Zr(e),baseURL:o||"",sessionConfig:{updateAge:e.session?.updateAge||24*60*60,expiresIn:e.session?.expiresIn||60*60*24*7},secret:i,rateLimit:{...e.rateLimit,enabled:e.rateLimit?.enabled??Q,window:e.rateLimit?.window||10,max:e.rateLimit?.max||100,storage:e.rateLimit?.storage||e.secondaryStorage?"secondary-storage":"memory"},authCookies:c,logger:ge({disabled:e.logger?.disabled||!1}),uuid:L,secondaryStorage:e.secondaryStorage,password:{hash:e.emailAndPassword?.password?.hash||Nt,verify:e.emailAndPassword?.password?.verify||qt,config:{minPasswordLength:e.emailAndPassword?.minPasswordLength||8,maxPasswordLength:e.emailAndPassword?.maxPasswordLength||128},checkPassword:jt},adapter:t,internalAdapter:Te(t,{options:e,hooks:e.databaseHooks?[e.databaseHooks]:[]}),createAuthCookie:ye(e)},{context:u}=Kr(d);return u};function Kr(e){let t=e.options,r=t.plugins||[],n=e,o=[];for(let i of r)if(i.init){let c=i.init(e);typeof c=="object"&&(c.options&&(c.options.databaseHooks&&o.push(c.options.databaseHooks),t=Gr(t,c.options)),c.context&&(n={...n,...c.context}))}return o.push(t.databaseHooks),n.internalAdapter=Te(e.adapter,{options:t,hooks:o.filter(i=>i!==void 0)}),n.options=t,{context:n}}function Qr(e){let t=[];return e.advanced?.crossSubDomainCookies?.enabled,t}function Zr(e){let t=Z(e.baseURL,e.basePath);if(!t)return[];let r=[new URL(t).origin];e.trustedOrigins&&r.push(...e.trustedOrigins);let n=O.BETTER_AUTH_TRUSTED_ORIGINS;return n&&r.push(...n.split(",")),r}var cc=e=>{let t=zt(e),{api:r}=ve(t,e);return{handler:async n=>{let o=await t,i=o.options.basePath||"/api/auth",c=new URL(n.url);if(!o.options.baseURL){let s=Z(void 0,i)||`${c.origin}${i}`;o.options.baseURL=s,o.baseURL=s}if(o.trustedOrigins=[c.origin,...o.options.trustedOrigins||[]],!o.options.baseURL)return new Response("Base URL not set",{status:400});if(c.pathname===i||c.pathname===`${i}/`)return new Response("Welcome to BetterAuth",{status:200});let{handler:a}=It(o,e);return a(n)},api:r,options:e,$context:t,$Infer:{}}};export{P as BetterAuthError,M as HIDE_METADATA,_e as MissingDependencyError,cc as betterAuth,Yr as capitalizeFirstLetter,ye as createCookieGetter,ge as createLogger,D as deleteSessionCookie,L as generateId,ne as generateState,Ve as getCookies,b as logger,zn as parseCookies,Cn as parseSetCookieHeader,Be as parseState,I as setSessionCookie};
84
+ </html>`,At=w("/error",{method:"GET",metadata:M},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(_r(t),{headers:{"Content-Type":"text/html"}})});var kt=w("/ok",{method:"GET",metadata:M},async e=>e.json({ok:!0}));import{z as H}from"zod";import{APIError as V}from"better-call";var Rt=()=>w("/sign-up/email",{method:"POST",query:H.object({currentURL:H.string().optional()}).optional(),body:H.record(H.string(),H.any())},async e=>{if(!e.context.options.emailAndPassword?.enabled)throw new V("BAD_REQUEST",{message:"Email and password sign up is not enabled"});let t=e.body,{name:r,email:n,password:o,image:i,callbackURL:c,...a}=t;if(!H.string().email().safeParse(n).success)throw new V("BAD_REQUEST",{message:"Invalid email"});let d=e.context.password.config.minPasswordLength;if(o.length<d)throw e.context.logger.error("Password is too short"),new V("BAD_REQUEST",{message:"Password is too short"});let u=e.context.password.config.maxPasswordLength;if(o.length>u)throw e.context.logger.error("Password is too long"),new V("BAD_REQUEST",{message:"Password is too long"});if((await e.context.internalAdapter.findUserByEmail(n))?.user)throw e.context.logger.info(`Sign-up attempt for existing email: ${n}`),new V("UNPROCESSABLE_ENTITY",{message:"User with this email already exists"});let p=ce(e.context.options,a),l;try{if(l=await e.context.internalAdapter.createUser({email:n.toLowerCase(),name:r,image:i,...p,emailVerified:!1}),!l)throw new V("BAD_REQUEST",{message:"Failed to create user"})}catch(g){throw b.error("Failed to create user",g),new V("UNPROCESSABLE_ENTITY",{message:"Failed to create user",details:g})}if(!l)throw new V("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let m=await e.context.password.hash(o);if(await e.context.internalAdapter.linkAccount({userId:l.id,providerId:"credential",accountId:l.id,password:m,expiresAt:S(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let g=await F(e.context.secret,l.email),y=`${e.context.baseURL}/verify-email?token=${g}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.({user:l,url:y,token:g},e.request)}if(!e.context.options.emailAndPassword.autoSignIn||e.context.options.emailAndPassword.requireEmailVerification)return e.json({user:l,session:null},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:l,session:null}});let h=await e.context.internalAdapter.createSession(l.id,e.request);if(!h)throw new V("BAD_REQUEST",{message:"Failed to create session"});return await I(e,{session:h,user:l}),e.json({user:l,session:h})});import{z as Y}from"zod";import{APIError as xt}from"better-call";var vt=w("/list-accounts",{method:"GET",use:[_]},async e=>{let t=e.context.session,r=await e.context.internalAdapter.findAccounts(t.user.id);return e.json(r.map(n=>({id:n.id,provider:n.providerId})))}),Ut=w("/link-social",{method:"POST",requireHeaders:!0,query:Y.object({currentURL:Y.string().optional()}).optional(),body:Y.object({callbackURL:Y.string().optional(),provider:Y.enum(ie)}),use:[_]},async e=>{let t=e.context.session;if((await e.context.internalAdapter.findAccounts(t.user.id)).find(a=>a.providerId===e.body.provider))throw new xt("BAD_REQUEST",{message:"Social Account is already linked."});let o=e.context.socialProviders.find(a=>a.id===e.body.provider);if(!o)throw e.context.logger.error("Provider not found. Make sure to add the provider in your auth config",{provider:e.body.provider}),new xt("NOT_FOUND",{message:"Provider not found"});let i=await ne(e,{userId:t.user.id,email:t.user.email}),c=await o.createAuthorizationURL({state:i.state,codeVerifier:i.codeVerifier,redirectURI:`${e.context.baseURL}/callback/${o.id}`});return e.json({url:c.toString(),redirect:!0})});function pe(e,t){if(t.advanced?.ipAddress?.disableIpTracking)return null;let r="127.0.0.1";if(Se)return r;let o=t.advanced?.ipAddress?.ipAddressHeaders||["x-client-ip","x-forwarded-for","cf-connecting-ip","fastly-client-ip","x-real-ip","x-cluster-client-ip","x-forwarded","forwarded-for","forwarded"],i=e instanceof Request?e.headers:e;for(let c of o){let a=i.get(c);if(typeof a=="string"){let s=a.split(",")[0].trim();if(s)return s}}return null}function Lr(e,t,r){let n=Date.now(),o=t*1e3;return n-r.lastRequest<o&&r.count>=e}function Cr(e){return new Response(JSON.stringify({message:"Too many requests. Please try again later."}),{status:429,statusText:"Too Many Requests",headers:{"X-Retry-After":e.toString()}})}function Br(e,t){let r=Date.now(),n=t*1e3;return Math.ceil((e+n-r)/1e3)}function Dr(e,t){let r=t??"rateLimit",n=e.adapter;return{get:async o=>await n.findOne({model:r,where:[{field:"key",value:o}]}),set:async(o,i,c)=>{try{c?await n.update({model:t??"rateLimit",where:[{field:"key",value:o}],update:{count:i.count,lastRequest:i.lastRequest}}):await n.create({model:t??"rateLimit",data:{key:o,count:i.count,lastRequest:i.lastRequest}})}catch(a){b.error("Error setting rate limit",a)}}}}var Tt=new Map;function Fr(e){return e.rateLimit.storage==="secondary-storage"?{get:async r=>{let n=await e.options.secondaryStorage?.get(r);return n?JSON.parse(n):void 0},set:async(r,n)=>{await e.options.secondaryStorage?.set?.(r,JSON.stringify(n))}}:e.rateLimit.storage==="memory"?{async get(r){return Tt.get(r)},async set(r,n,o){Tt.set(r,n)}}:Dr(e,e.rateLimit.tableName)}async function Et(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,n=e.url.replace(r,""),o=t.rateLimit.window,i=t.rateLimit.max,c=pe(e,t.options)+n,s=Vr().find(p=>p.pathMatcher(n));s&&(o=s.window,i=s.max);for(let p of t.options.plugins||[])if(p.rateLimit){let l=p.rateLimit.find(m=>m.pathMatcher(n));if(l){o=l.window,i=l.max;break}}if(t.rateLimit.customRules){let p=t.rateLimit.customRules[n];p&&(o=p.window,i=p.max)}let d=Fr(t),u=await d.get(c),f=Date.now();if(!u)await d.set(c,{key:c,count:1,lastRequest:f});else{let p=f-u.lastRequest;if(Lr(i,o,u)){let l=Br(u.lastRequest,o);return Cr(l)}else p>o*1e3?await d.set(c,{...u,count:1,lastRequest:f}):await d.set(c,{...u,count:u.count+1,lastRequest:f})}}function Vr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")||t.startsWith("/change-password")||t.startsWith("/change-email")},window:10,max:3}]}import{APIError as Ga}from"better-call";function ve(e,t){let r=t.plugins?.reduce((a,s)=>({...a,...s.endpoints}),{}),n=t.plugins?.map(a=>a.middlewares?.map(s=>{let d=async u=>s.middleware({...u,context:{...e,...u.context}});return d.path=s.path,d.options=s.middleware.options,d.headers=s.middleware.headers,{path:s.path,middleware:d}})).filter(a=>a!==void 0).flat()||[],i={...{signInSocial:st,callbackOAuth:ct,getSession:Ae(),signOut:ut,signUpEmail:Rt(),signInEmail:at,forgetPassword:pt,resetPassword:mt,verifyEmail:it,sendVerificationEmail:ot,changeEmail:bt,changePassword:ht,setPassword:yt,updateUser:gt(),deleteUser:wt,forgetPasswordCallback:ft,listSessions:et(),revokeSession:tt,revokeSessions:rt,revokeOtherSessions:nt,linkSocialAccount:Ut,listUserAccounts:vt},...r,ok:kt,error:At},c={};for(let[a,s]of Object.entries(i))c[a]=async(d={})=>{let u=await e;for(let l of t.plugins||[])if(l.hooks?.before)for(let m of l.hooks.before){let h={...s,...d,context:{...u,...d?.context}};if(m.matcher(h)){let y=await m.handler(h);y&&"context"in y&&(d={...y,...d})}}let f;try{f=await s({...d,context:{...u,...d.context}})}catch(l){if(l instanceof xe){let m=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!m?.length)throw l;let h=new Response(JSON.stringify(l.body),{status:qr[l.status],headers:l.headers}),g;for(let y of m||[])if(y.matcher(d)){u.returned=h;let q={...s,...d,context:u},fe=await y.handler(q);fe&&"response"in fe&&(g=fe.response)}if(g instanceof Response)return g;throw l}throw l}let p=f;for(let l of t.plugins||[])if(l.hooks?.after)for(let m of l.hooks.after){let h={...d,context:{...u,...d.context,endpoint:s,returned:p}};if(m.matcher(h)){let y=await m.handler(h);y&&"response"in y&&(p=y.response)}}return p},c[a].path=s.path,c[a].method=s.method,c[a].options=s.options,c[a].headers=s.headers;return{api:c,middlewares:n}}var It=(e,t)=>{let{api:r,middlewares:n}=ve(e,t),o=new URL(e.baseURL).pathname;return Nr(r,{extraContext:e,basePath:o,routerMiddleware:[{path:"/**",middleware:De},...n],async onRequest(i){for(let c of e.options.plugins||[])if(c.onRequest){let a=await c.onRequest(i,e);if(a&&"response"in a)return a.response}return Et(i,e)},async onResponse(i){for(let c of e.options.plugins||[])if(c.onResponse){let a=await c.onResponse(i,e);if(a)return a.response}return i},onError(i){if(i instanceof xe&&i.status==="NOT_FOUND")return;if(t.onAPIError?.throw)throw i;if(t.onAPIError?.onError){t.onAPIError.onError(i,e);return}let c=t.logger?.verboseLogging?b:void 0;t.logger?.disabled!==!0&&(i instanceof xe?(i.status==="INTERNAL_SERVER_ERROR"&&b.error(i),c?.error(i.message)):b?.error(i))}})};var X=e=>{let t=e.plugins?.reduce((s,d)=>{let u=d.schema;if(!u)return s;for(let[f,p]of Object.entries(u))s[f]={fields:{...s[f]?.fields,...p.fields},tableName:p.tableName||f};return s},{}),r=e.rateLimit?.storage==="database",n={rateLimit:{tableName:e.rateLimit?.tableName||"rateLimit",fields:{key:{type:"string",fieldName:e.rateLimit?.fields?.key||"key"},count:{type:"number",fieldName:e.rateLimit?.fields?.count||"count"},lastRequest:{type:"number",fieldName:e.rateLimit?.fields?.lastRequest||"lastRequest"}}}},{user:o,session:i,account:c,...a}=t||{};return{user:{tableName:e.user?.modelName||"user",fields:{name:{type:"string",required:!0,fieldName:e.user?.fields?.name||"name"},email:{type:"string",unique:!0,required:!0,fieldName:e.user?.fields?.email||"email"},emailVerified:{type:"boolean",defaultValue:()=>!1,required:!0,fieldName:e.user?.fields?.emailVerified||"emailVerified"},image:{type:"string",required:!1,fieldName:e.user?.fields?.image||"image"},createdAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.createdAt||"createdAt"},updatedAt:{type:"date",defaultValue:()=>new Date,required:!0,fieldName:e.user?.fields?.updatedAt||"updatedAt"},...o?.fields,...e.user?.additionalFields},order:1},session:{tableName:e.session?.modelName||"session",fields:{expiresAt:{type:"date",required:!0,fieldName:e.session?.fields?.expiresAt||"expiresAt"},ipAddress:{type:"string",required:!1,fieldName:e.session?.fields?.ipAddress||"ipAddress"},userAgent:{type:"string",required:!1,fieldName:e.session?.fields?.userAgent||"userAgent"},userId:{type:"string",fieldName:e.session?.fields?.userId||"userId",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0},...i?.fields,...e.session?.additionalFields},order:2},account:{tableName:e.account?.modelName||"account",fields:{accountId:{type:"string",required:!0,fieldName:e.account?.fields?.accountId||"accountId"},providerId:{type:"string",required:!0,fieldName:e.account?.fields?.providerId||"providerId"},userId:{type:"string",references:{model:e.user?.modelName||"user",field:"id",onDelete:"cascade"},required:!0,fieldName:e.account?.fields?.userId||"userId"},accessToken:{type:"string",required:!1,fieldName:e.account?.fields?.accessToken||"accessToken"},refreshToken:{type:"string",required:!1,fieldName:e.account?.fields?.refreshToken||"refreshToken"},idToken:{type:"string",required:!1,fieldName:e.account?.fields?.idToken||"idToken"},expiresAt:{type:"date",required:!1,fieldName:e.account?.fields?.expiresAt||"expiresAt"},password:{type:"string",required:!1,fieldName:e.account?.fields?.password||"password"},...c?.fields},order:3},verification:{tableName:e.verification?.modelName||"verification",fields:{identifier:{type:"string",required:!0,fieldName:e.verification?.fields?.identifier||"identifier"},value:{type:"string",required:!0,fieldName:e.verification?.fields?.value||"value"},expiresAt:{type:"date",required:!0,fieldName:e.verification?.fields?.expiresAt||"expiresAt"}},order:4},...a,...r?n:{}}};import{Kysely as Ot,MssqlDialect as $r}from"kysely";import{MysqlDialect as Pt,PostgresDialect as St,SqliteDialect as _t}from"kysely";function Lt(e){if("dialect"in e)return Lt(e.dialect);if("createDriver"in e){if(e instanceof _t)return"sqlite";if(e instanceof Pt)return"mysql";if(e instanceof St)return"postgres";if(e instanceof $r)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var Ue=async e=>{let t=e.database;if("db"in t)return{kysely:t.db,databaseType:t.type};if("dialect"in t)return{kysely:new Ot({dialect:t.dialect}),databaseType:t.type};let r,n=Lt(t);return"createDriver"in t&&(r=t),"aggregate"in t&&(r=new _t({database:t})),"getConnection"in t&&(r=new Pt(t)),"connect"in t&&(r=new St({pool:t})),{kysely:r?new Ot({dialect:r}):null,databaseType:n}};function Ct(e,t){let r=t.hooks;async function n(i,c,a){let s=i;for(let f of r||[]){let p=f[c]?.create?.before;if(p){let l=await p(i);if(l===!1)return null;typeof l=="object"&&"data"in l&&(s=l.data)}}let d=a?await a.fn(s):null,u=!a||a.executeMainFn?await e.create({model:c,data:s}):d;for(let f of r||[]){let p=f[c]?.create?.after;p&&await p(u)}return u}async function o(i,c,a,s){let d=i;for(let p of r||[]){let l=p[a]?.update?.before;if(l){let m=await l(i);if(m===!1)return null;d=typeof m=="object"?m.data:m}}let u=s?await s.fn(d):null,f=!s||s.executeMainFn?await e.update({model:a,update:d,where:c}):u;for(let p of r||[]){let l=p[a]?.update?.after;l&&await l(f)}return f}return{createWithHooks:n,updateWithHooks:o}}var Te=(e,t)=>{let r=t.options,n=r.secondaryStorage,o=r.session?.expiresIn||60*60*24*7,{createWithHooks:i,updateWithHooks:c}=Ct(e,t);return{createOAuthUser:async(a,s)=>{try{let d=await i({id:L(),createdAt:new Date,updatedAt:new Date,...a},"user"),u=await i({id:L(),...s,userId:d.id||a.id},"account");return{user:d,account:u}}catch(d){return console.log(d),null}},createUser:async a=>await i({id:L(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...a},"user"),createAccount:async a=>await i({id:L(),createdAt:new Date,updatedAt:new Date,...a},"account"),listSessions:async a=>{if(n){let d=await n.get(`active-sessions-${a}`);if(!d)return[];let u=W(d)||[],f=Date.now(),p=u.filter(m=>m.expiresAt>f),l=[];for(let m of p){let h=await n.get(m.id);if(h){let g=JSON.parse(h),y=de(t.options,{...g.session,expiresAt:new Date(g.session.expiresAt)});l.push(y)}}return l}return await e.findMany({model:"session",where:[{field:"userId",value:a}]})},listUsers:async(a,s,d,u)=>await e.findMany({model:"user",limit:a,offset:s,sortBy:d,where:u}),deleteUser:async a=>{await e.deleteMany({model:"session",where:[{field:"userId",value:a}]}),await e.deleteMany({model:"account",where:[{field:"userId",value:a}]}),await e.delete({model:"user",where:[{field:"id",value:a}]})},createSession:async(a,s,d,u)=>{let f=s instanceof Request?s.headers:s,p={id:L(32),userId:a,expiresAt:d?S(60*60*24,"sec"):S(o,"sec"),ipAddress:s&&pe(s,t.options)||"",userAgent:f?.get("user-agent")||"",...u};return await i(p,"session",n?{fn:async m=>{let h=await e.findOne({model:"user",where:[{field:"id",value:a}]});n.set(m.id,JSON.stringify({session:m,user:h}),o);let g=await n.get(`active-sessions-${a}`),y=[],k=Date.now();return g&&(y=W(g)||[],y=y.filter(q=>q.expiresAt>k)),y.push({id:m.id,expiresAt:k+o*1e3}),await n.set(`active-sessions-${a}`,JSON.stringify(y),o),m},executeMainFn:r.session?.storeSessionInDatabase}:void 0)},findSession:async a=>{if(n){let f=await n.get(a);if(f){let p=JSON.parse(f),l=de(t.options,{...p.session,expiresAt:new Date(p.session.expiresAt)}),m=Re(t.options,{...p.user,createdAt:new Date(p.user.createdAt),updatedAt:new Date(p.user.updatedAt)});return{session:l,user:m}}}let s=await e.findOne({model:"session",where:[{value:a,field:"id"}]});if(!s)return null;let d=await e.findOne({model:"user",where:[{value:s.userId,field:"id"}]});if(!d)return null;let u=Re(t.options,d);return{session:de(t.options,s),user:u}},findSessions:async a=>{if(n){let f=[];for(let p of a){let l=await n.get(p);if(l){let m=JSON.parse(l),h={session:{...m.session,expiresAt:new Date(m.session.expiresAt)},user:{...m.user,createdAt:new Date(m.user.createdAt),updatedAt:new Date(m.user.updatedAt)}};f.push(h)}}return f}let s=await e.findMany({model:"session",where:[{field:"id",value:a,operator:"in"}]}),d=s.map(f=>f.userId);if(!d.length)return[];let u=await e.findMany({model:"user",where:[{field:"id",value:d,operator:"in"}]});return s.map(f=>{let p=u.find(l=>l.id===f.userId);return p?{session:f,user:p}:null})},updateSession:async(a,s)=>await c(s,[{field:"id",value:a}],"session",n?{async fn(u){let f=await n.get(a),p=null;if(f){let l=JSON.parse(f);p={...l.session,...u},await n.set(a,JSON.stringify({session:p,user:l.user}),l.session.expiresAt?Math.floor((l.session.expiresAt.getTime()-Date.now())/1e3):o)}else return null},executeMainFn:r.session?.storeSessionInDatabase}:void 0),deleteSession:async a=>{if(n){await n.delete(a),r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"id",value:a}]});return}await e.delete({model:"session",where:[{field:"id",value:a}]})},deleteSessions:async a=>{if(n){let s=await e.findMany({model:"session",where:[{field:"userId",value:a}]});for(let d of s)await n.delete(d.id);r.session?.storeSessionInDatabase&&await e.delete({model:"session",where:[{field:"userId",value:a}]});return}await e.deleteMany({model:"session",where:[{field:"userId",value:a}]})},findUserByEmail:async(a,s)=>{let d=await e.findOne({model:"user",where:[{value:a.toLowerCase(),field:"email"}]});if(!d)return null;if(s?.includeAccounts){let u=await e.findMany({model:"account",where:[{value:d.id,field:"userId"}]});return{user:d,accounts:u}}return{user:d,accounts:[]}},findUserById:async a=>await e.findOne({model:"user",where:[{field:"id",value:a}]}),linkAccount:async a=>await i({id:L(),...a},"account"),updateUser:async(a,s)=>await c(s,[{field:"id",value:a}],"user"),updateUserByEmail:async(a,s)=>await c(s,[{field:"email",value:a}],"user"),updatePassword:async(a,s)=>await c({password:s},[{field:"userId",value:a},{field:"providerId",value:"credential"}],"account"),findAccounts:async a=>await e.findMany({model:"account",where:[{field:"userId",value:a}]}),findAccount:async a=>await e.findOne({model:"account",where:[{field:"accountId",value:a}]}),updateAccount:async(a,s)=>await c(s,[{field:"id",value:a}],"account"),createVerificationValue:async a=>await i({id:L(),...a},"verification"),findVerificationValue:async a=>{let s=await e.findMany({model:"verification",where:[{field:"identifier",value:a}],limit:100}),d=s.pop();return s.length>0&&await e.deleteMany({model:"verification",where:[{operator:"in",field:"id",value:s.map(u=>u.id)}]}),d},deleteVerificationValue:async a=>{await e.delete({model:"verification",where:[{field:"id",value:a}]})},updateVerificationValue:async(a,s)=>await c(s,[{field:"id",value:a}],"verification")}};import{z as ad}from"zod";var jr=(e,t,r)=>{let n=X(t);function o(s,d){if(d==="id")return d;let u=n[s].fields[d];return u||console.log("Field not found",s,d),u.fieldName||d}function i(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"?s?1:0:p.type==="date"&&s?s.toISOString():s}function c(s,d,u){let{type:f="sqlite"}=r||{},p=n[d].fields[u];return p.type==="boolean"&&f==="sqlite"&&s!==null?s===1:p.type==="date"&&s?new Date(s):s}let a=r?.generateId!==!1;return{transformInput(s,d){let u=s.id&&a?{id:r?.generateId?r.generateId():s.id}:{};for(let f in s){let p=n[d].fields[f];p&&(u[p.fieldName||f]=i(s[f],d,f))}return u},transformOutput(s,d,u=[]){if(!s)return null;let f=s.id?u.length===0||u.includes("id")?{id:s.id}:{}:{},p=n[d].fields;for(let l in p){if(u.length&&!u.includes(l))continue;let m=p[l];m&&(f[l]=c(s[m.fieldName||l],d,l))}return f},convertWhereClause(s,d){if(!d)return{and:null,or:null};let u={and:[],or:[]};return d.forEach(f=>{let{field:p,value:l,operator:m="=",connector:h="AND"}=f,g=o(s,p),y=k=>m.toLowerCase()==="in"?k(g,"in",Array.isArray(l)?l:[l]):m==="contains"?k(g,"like",`%${l}%`):m==="starts_with"?k(g,"like",`${l}%`):m==="ends_with"?k(g,"like",`%${l}`):m==="eq"?k(g,"=",l):m==="ne"?k(g,"<>",l):m==="gt"?k(g,">",l):m==="gte"?k(g,">=",l):m==="lt"?k(g,"<",l):m==="lte"?k(g,"<=",l):k(g,m,l);h==="OR"?u.or.push(y):u.and.push(y)}),{and:u.and.length?u.and:null,or:u.or.length?u.or:null}},async withReturning(s,d,u){let f;if(r?.type!=="mysql")f=await d.returningAll().executeTakeFirst();else{await d.execute();let p="id",l=s[p];f=await e.selectFrom(this.getModelName(u)).selectAll().where(p,"=",l).executeTakeFirst()}return f},getModelName(s){return n[s].tableName}}},Bt=(e,t)=>r=>{let{transformInput:n,withReturning:o,transformOutput:i,convertWhereClause:c,getModelName:a}=jr(e,r,t);return{id:"kysely",async create(s){let{model:d,data:u,select:f}=s,p=n(u,d),l=e.insertInto(a(d)).values(p);return i(await o(p,l,d),d,f)},async findOne(s){let{model:d,where:u,select:f}=s,{and:p,or:l}=c(d,u),m=e.selectFrom(a(d)).selectAll();p&&(m=m.where(g=>g.and(p.map(y=>y(g))))),l&&(m=m.where(g=>g.or(l.map(y=>y(g)))));let h=await m.executeTakeFirst();return h?i(h,d,f):null},async findMany(s){let{model:d,where:u,limit:f,offset:p,sortBy:l}=s,{and:m,or:h}=c(d,u),g=e.selectFrom(a(d)).selectAll();m&&(g=g.where(k=>k.and(m.map(q=>q(k))))),h&&(g=g.where(k=>k.or(h.map(q=>q(k))))),g=g.limit(f||100),p&&(g=g.offset(p)),l&&(g=g.orderBy(l.field,l.direction));let y=await g.selectAll().execute();return y?y.map(k=>i(k,d)):[]},async update(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(g=>g.and(p.map(y=>y(g))))),l&&(h=h.where(g=>g.or(l.map(y=>y(g))))),i(await o(m,h,d),d)},async updateMany(s){let{model:d,where:u,update:f}=s,{and:p,or:l}=c(d,u),m=n(f,d),h=e.updateTable(a(d)).set(m);return p&&(h=h.where(y=>y.and(p.map(k=>k(y))))),l&&(h=h.where(y=>y.or(l.map(k=>k(y))))),(await h.execute()).length},async delete(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),await l.execute()},async deleteMany(s){let{model:d,where:u}=s,{and:f,or:p}=c(d,u),l=e.deleteFrom(a(d));return f&&(l=l.where(m=>m.and(f.map(h=>h(m))))),p&&(l=l.where(m=>m.or(p.map(h=>h(m))))),(await l.execute()).length},options:t}};async function Dt(e){if(!e.database)throw new P("Database configuration is required");if(typeof e.database=="function")return e.database(e);let{kysely:t,databaseType:r}=await Ue(e);if(!t)throw new P("Failed to initialize database adapter");return Bt(t,{generateId:"generateId"in e.database?e.database.generateId:void 0,type:r||"sqlite"})(e)}import{decodeHex as zr,encodeHex as Ft}from"oslo/encoding";import{scryptAsync as Mr}from"@noble/hashes/scrypt";import{getRandomValues as Hr}from"uncrypto";var G={N:16384,r:16,p:1,dkLen:64};async function Vt(e,t){return await Mr(e.normalize("NFKC"),t,{N:G.N,p:G.p,r:G.r,dkLen:G.dkLen,maxmem:128*G.N*G.r*2})}var Nt=async e=>{let t=Ft(Hr(new Uint8Array(16))),r=await Vt(e,t);return`${t}:${Ft(r)}`},qt=async(e,t)=>{let[r,n]=e.split(":"),o=await Vt(t,r);return he(o,zr(n))};import{defu as Gr}from"defu";var Ee="better-auth-secret-123456789";import{APIError as $t}from"better-call";async function jt(e,t){let n=(await t.context.internalAdapter.findAccounts(e))?.find(c=>c.providerId==="credential"),o=n?.password;if(!n||!o)throw new $t("BAD_REQUEST",{message:"No password credential found"});if(!await t.context.password.verify(o,t.body.password))throw new $t("BAD_REQUEST",{message:"Invalid password"});return!0}var zt=async e=>{let t=await Dt(e),r=e.plugins||[],n=Qr(e),o=Z(e.baseURL,e.basePath),i=e.secret||O.BETTER_AUTH_SECRET||O.AUTH_SECRET||Ee;i===Ee&&Q&&b.error("You are using the default secret. Please set `BETTER_AUTH_SECRET` in your environment variables or pass `secret` in your auth config."),e={...e,secret:i,baseURL:o?new URL(o).origin:"",basePath:e.basePath||"/api/auth",plugins:r.concat(n),emailAndPassword:{...e.emailAndPassword,enabled:e.emailAndPassword?.enabled??!1,autoSignIn:e.emailAndPassword?.autoSignIn??!0}};let c=Ve(e),a=X(e),s=Object.keys(e.socialProviders||{}).map(f=>{let p=e.socialProviders?.[f];return p.enabled===!1?null:((!p.clientId||!p.clientSecret)&&b.warn(`Social provider ${f} is missing clientId or clientSecret`),be[f](p))}).filter(f=>f!==null),d={appName:e.appName||"Better Auth",socialProviders:s,options:e,tables:a,trustedOrigins:Zr(e),baseURL:o||"",sessionConfig:{updateAge:e.session?.updateAge||24*60*60,expiresIn:e.session?.expiresIn||60*60*24*7},secret:i,rateLimit:{...e.rateLimit,enabled:e.rateLimit?.enabled??Q,window:e.rateLimit?.window||10,max:e.rateLimit?.max||100,storage:e.rateLimit?.storage||e.secondaryStorage?"secondary-storage":"memory"},authCookies:c,logger:ge({disabled:e.logger?.disabled||!1}),uuid:L,secondaryStorage:e.secondaryStorage,password:{hash:e.emailAndPassword?.password?.hash||Nt,verify:e.emailAndPassword?.password?.verify||qt,config:{minPasswordLength:e.emailAndPassword?.minPasswordLength||8,maxPasswordLength:e.emailAndPassword?.maxPasswordLength||128},checkPassword:jt},adapter:t,internalAdapter:Te(t,{options:e,hooks:e.databaseHooks?[e.databaseHooks]:[]}),createAuthCookie:ye(e)},{context:u}=Kr(d);return u};function Kr(e){let t=e.options,r=t.plugins||[],n=e,o=[];for(let i of r)if(i.init){let c=i.init(e);typeof c=="object"&&(c.options&&(c.options.databaseHooks&&o.push(c.options.databaseHooks),t=Gr(t,c.options)),c.context&&(n={...n,...c.context}))}return o.push(t.databaseHooks),n.internalAdapter=Te(e.adapter,{options:t,hooks:o.filter(i=>i!==void 0)}),n.options=t,{context:n}}function Qr(e){let t=[];return e.advanced?.crossSubDomainCookies?.enabled,t}function Zr(e){let t=Z(e.baseURL,e.basePath);if(!t)return[];let r=[new URL(t).origin];e.trustedOrigins&&r.push(...e.trustedOrigins);let n=O.BETTER_AUTH_TRUSTED_ORIGINS;return n&&r.push(...n.split(",")),r}var cc=e=>{let t=zt(e),{api:r}=ve(t,e);return{handler:async n=>{let o=await t,i=o.options.basePath||"/api/auth",c=new URL(n.url);if(!o.options.baseURL){let s=Z(void 0,i)||`${c.origin}${i}`;o.options.baseURL=s,o.baseURL=s}if(o.trustedOrigins=[c.origin,...o.options.trustedOrigins||[]],!o.options.baseURL)return new Response("Base URL not set",{status:400});if(c.pathname===i||c.pathname===`${i}/`)return new Response("Welcome to BetterAuth",{status:200});let{handler:a}=It(o,e);return a(n)},api:r,options:e,$context:t,$Infer:{}}};export{P as BetterAuthError,M as HIDE_METADATA,_e as MissingDependencyError,cc as betterAuth,Yr as capitalizeFirstLetter,ye as createCookieGetter,ge as createLogger,D as deleteSessionCookie,L as generateId,ne as generateState,Ve as getCookies,b as logger,zn as parseCookies,Cn as parseSetCookieHeader,Be as parseState,I as setSessionCookie};
@@ -1,5 +1,5 @@
1
1
  import * as better_call from 'better-call';
2
- import { H as HookEndpointContext } from './auth-CkfEl1lS.cjs';
2
+ import { H as HookEndpointContext } from './auth-RxDdMH7n.cjs';
3
3
  import 'kysely';
4
4
  import 'zod';
5
5
  import './helper-DPDj8Nix.cjs';
package/dist/next-js.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as better_call from 'better-call';
2
- import { H as HookEndpointContext } from './auth-B3fUmyZo.js';
2
+ import { H as HookEndpointContext } from './auth-aIfiqYkD.js';
3
3
  import 'kysely';
4
4
  import 'zod';
5
5
  import './helper-DPDj8Nix.js';
package/dist/node.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as http from 'http';
2
2
  import { IncomingHttpHeaders } from 'http';
3
- import { A as Auth } from './auth-CkfEl1lS.cjs';
3
+ import { A as Auth } from './auth-RxDdMH7n.cjs';
4
4
  import 'kysely';
5
5
  import 'zod';
6
6
  import 'better-call';
package/dist/node.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as http from 'http';
2
2
  import { IncomingHttpHeaders } from 'http';
3
- import { A as Auth } from './auth-B3fUmyZo.js';
3
+ import { A as Auth } from './auth-aIfiqYkD.js';
4
4
  import 'kysely';
5
5
  import 'zod';
6
6
  import 'better-call';
package/dist/oauth2.d.cts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { P as ProviderOptions, O as OAuth2Tokens } from './index-cqC7BcV_.cjs';
2
2
  export { a as OAuthProvider } from './index-cqC7BcV_.cjs';
3
- export { g as generateState, p as parseState } from './state-ifN7k51A.cjs';
3
+ export { g as generateState, p as parseState } from './state-B06Cucct.cjs';
4
4
  import './helper-DPDj8Nix.cjs';
5
5
  import 'zod';
6
6
  import 'jose';
7
- import './auth-CkfEl1lS.cjs';
7
+ import './auth-RxDdMH7n.cjs';
8
8
  import 'kysely';
9
9
  import 'better-call';
10
10
  import 'better-sqlite3';
package/dist/oauth2.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { P as ProviderOptions, O as OAuth2Tokens } from './index-DN9ozDRm.js';
2
2
  export { a as OAuthProvider } from './index-DN9ozDRm.js';
3
- export { g as generateState, p as parseState } from './state-CIrmeq4O.js';
3
+ export { g as generateState, p as parseState } from './state-DyQuVVEF.js';
4
4
  import './helper-DPDj8Nix.js';
5
5
  import 'zod';
6
6
  import 'jose';
7
- import './auth-B3fUmyZo.js';
7
+ import './auth-aIfiqYkD.js';
8
8
  import 'kysely';
9
9
  import 'better-call';
10
10
  import 'better-sqlite3';
@@ -1,6 +1,6 @@
1
- export { A as AnonymousOptions, J as JwtOptions, O as OrganizationOptions, b as Passkey, P as PasskeyOptions, e as UserWithAnonymous, U as UserWithPhoneNumber, h as UserWithRole, i as admin, f as anonymous, n as emailOTP, j as genericOAuth, g as getPasskeyActions, k as jwt, m as magicLink, l as multiSession, o as organization, p as passkey, c as passkeyClient, d as phoneNumber, t as twoFactor, a as twoFactorClient, u as username } from './index-BVsVqobF.cjs';
2
- import { H as HookEndpointContext } from './auth-CkfEl1lS.cjs';
3
- export { z as AuthEndpoint, C as AuthMiddleware, j as BetterAuthPlugin, P as PluginSchema, y as createAuthEndpoint, x as createAuthMiddleware, w as optionsMiddleware } from './auth-CkfEl1lS.cjs';
1
+ export { A as AnonymousOptions, J as JwtOptions, O as OrganizationOptions, b as Passkey, P as PasskeyOptions, e as UserWithAnonymous, U as UserWithPhoneNumber, h as UserWithRole, i as admin, f as anonymous, n as emailOTP, j as genericOAuth, g as getPasskeyActions, k as jwt, m as magicLink, l as multiSession, o as organization, p as passkey, c as passkeyClient, d as phoneNumber, t as twoFactor, a as twoFactorClient, u as username } from './index-BD6Gi4uB.cjs';
2
+ import { H as HookEndpointContext } from './auth-RxDdMH7n.cjs';
3
+ export { z as AuthEndpoint, C as AuthMiddleware, j as BetterAuthPlugin, P as PluginSchema, y as createAuthEndpoint, x as createAuthMiddleware, w as optionsMiddleware } from './auth-RxDdMH7n.cjs';
4
4
  export { H as HIDE_METADATA } from './hide-metadata-DEHJp1rk.cjs';
5
5
  import * as better_call from 'better-call';
6
6
  import { z } from 'zod';
@@ -86,13 +86,13 @@ declare const oneTap: (options?: OneTapOptions) => {
86
86
  };
87
87
  accounts: {
88
88
  id: string;
89
- userId: string;
90
89
  providerId: string;
91
90
  accountId: string;
92
- expiresAt?: Date | null | undefined;
91
+ userId: string;
93
92
  accessToken?: string | null | undefined;
94
93
  refreshToken?: string | null | undefined;
95
94
  idToken?: string | null | undefined;
95
+ expiresAt?: Date | null | undefined;
96
96
  password?: string | null | undefined;
97
97
  }[];
98
98
  };
@@ -140,11 +140,11 @@ declare const oAuthProxy: (opts?: OAuthProxyOptions) => {
140
140
  callbackURL: z.ZodString;
141
141
  cookies: z.ZodString;
142
142
  }, "strip", z.ZodTypeAny, {
143
- cookies: string;
144
143
  callbackURL: string;
145
- }, {
146
144
  cookies: string;
145
+ }, {
147
146
  callbackURL: string;
147
+ cookies: string;
148
148
  }>;
149
149
  }>]>(...ctx: C): Promise<C extends [{
150
150
  asResponse: true;
@@ -156,11 +156,11 @@ declare const oAuthProxy: (opts?: OAuthProxyOptions) => {
156
156
  callbackURL: z.ZodString;
157
157
  cookies: z.ZodString;
158
158
  }, "strip", z.ZodTypeAny, {
159
- cookies: string;
160
159
  callbackURL: string;
161
- }, {
162
160
  cookies: string;
161
+ }, {
163
162
  callbackURL: string;
163
+ cookies: string;
164
164
  }>;
165
165
  };
166
166
  method: better_call.Method | better_call.Method[];
package/dist/plugins.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { A as AnonymousOptions, J as JwtOptions, O as OrganizationOptions, b as Passkey, P as PasskeyOptions, e as UserWithAnonymous, U as UserWithPhoneNumber, h as UserWithRole, i as admin, f as anonymous, n as emailOTP, j as genericOAuth, g as getPasskeyActions, k as jwt, m as magicLink, l as multiSession, o as organization, p as passkey, c as passkeyClient, d as phoneNumber, t as twoFactor, a as twoFactorClient, u as username } from './index-DY7Ai3Jp.js';
2
- import { H as HookEndpointContext } from './auth-B3fUmyZo.js';
3
- export { z as AuthEndpoint, C as AuthMiddleware, j as BetterAuthPlugin, P as PluginSchema, y as createAuthEndpoint, x as createAuthMiddleware, w as optionsMiddleware } from './auth-B3fUmyZo.js';
1
+ export { A as AnonymousOptions, J as JwtOptions, O as OrganizationOptions, b as Passkey, P as PasskeyOptions, e as UserWithAnonymous, U as UserWithPhoneNumber, h as UserWithRole, i as admin, f as anonymous, n as emailOTP, j as genericOAuth, g as getPasskeyActions, k as jwt, m as magicLink, l as multiSession, o as organization, p as passkey, c as passkeyClient, d as phoneNumber, t as twoFactor, a as twoFactorClient, u as username } from './index-KAWRcjOC.js';
2
+ import { H as HookEndpointContext } from './auth-aIfiqYkD.js';
3
+ export { z as AuthEndpoint, C as AuthMiddleware, j as BetterAuthPlugin, P as PluginSchema, y as createAuthEndpoint, x as createAuthMiddleware, w as optionsMiddleware } from './auth-aIfiqYkD.js';
4
4
  export { H as HIDE_METADATA } from './hide-metadata-DEHJp1rk.js';
5
5
  import * as better_call from 'better-call';
6
6
  import { z } from 'zod';
@@ -86,13 +86,13 @@ declare const oneTap: (options?: OneTapOptions) => {
86
86
  };
87
87
  accounts: {
88
88
  id: string;
89
- userId: string;
90
89
  providerId: string;
91
90
  accountId: string;
92
- expiresAt?: Date | null | undefined;
91
+ userId: string;
93
92
  accessToken?: string | null | undefined;
94
93
  refreshToken?: string | null | undefined;
95
94
  idToken?: string | null | undefined;
95
+ expiresAt?: Date | null | undefined;
96
96
  password?: string | null | undefined;
97
97
  }[];
98
98
  };
@@ -140,11 +140,11 @@ declare const oAuthProxy: (opts?: OAuthProxyOptions) => {
140
140
  callbackURL: z.ZodString;
141
141
  cookies: z.ZodString;
142
142
  }, "strip", z.ZodTypeAny, {
143
- cookies: string;
144
143
  callbackURL: string;
145
- }, {
146
144
  cookies: string;
145
+ }, {
147
146
  callbackURL: string;
147
+ cookies: string;
148
148
  }>;
149
149
  }>]>(...ctx: C): Promise<C extends [{
150
150
  asResponse: true;
@@ -156,11 +156,11 @@ declare const oAuthProxy: (opts?: OAuthProxyOptions) => {
156
156
  callbackURL: z.ZodString;
157
157
  cookies: z.ZodString;
158
158
  }, "strip", z.ZodTypeAny, {
159
- cookies: string;
160
159
  callbackURL: string;
161
- }, {
162
160
  cookies: string;
161
+ }, {
163
162
  callbackURL: string;
163
+ cookies: string;
164
164
  }>;
165
165
  };
166
166
  method: better_call.Method | better_call.Method[];
package/dist/react.d.cts CHANGED
@@ -6,7 +6,7 @@ import { BetterFetchError } from '@better-fetch/fetch';
6
6
  import { ClientOptions, InferClientAPI, InferActions, InferSessionFromClient, InferUserFromClient, BetterAuthClientPlugin, IsSignal } from './types.cjs';
7
7
  import { U as UnionToIntersection } from './helper-DPDj8Nix.cjs';
8
8
  import { DependencyList } from 'react';
9
- import './auth-CkfEl1lS.cjs';
9
+ import './auth-RxDdMH7n.cjs';
10
10
  import 'kysely';
11
11
  import 'better-call';
12
12
  import './index-cqC7BcV_.cjs';
package/dist/react.d.ts CHANGED
@@ -6,7 +6,7 @@ import { BetterFetchError } from '@better-fetch/fetch';
6
6
  import { ClientOptions, InferClientAPI, InferActions, InferSessionFromClient, InferUserFromClient, BetterAuthClientPlugin, IsSignal } from './types.js';
7
7
  import { U as UnionToIntersection } from './helper-DPDj8Nix.js';
8
8
  import { DependencyList } from 'react';
9
- import './auth-B3fUmyZo.js';
9
+ import './auth-aIfiqYkD.js';
10
10
  import 'kysely';
11
11
  import 'better-call';
12
12
  import './index-DN9ozDRm.js';
@@ -1,4 +1,4 @@
1
- import { A as Auth } from './auth-CkfEl1lS.cjs';
1
+ import { A as Auth } from './auth-RxDdMH7n.cjs';
2
2
  import 'kysely';
3
3
  import 'zod';
4
4
  import 'better-call';
@@ -1,4 +1,4 @@
1
- import { A as Auth } from './auth-B3fUmyZo.js';
1
+ import { A as Auth } from './auth-aIfiqYkD.js';
2
2
  import 'kysely';
3
3
  import 'zod';
4
4
  import 'better-call';
package/dist/solid.d.cts CHANGED
@@ -4,7 +4,7 @@ import { BetterFetchError } from '@better-fetch/fetch';
4
4
  import { ClientOptions, InferClientAPI, InferActions, InferSessionFromClient, InferUserFromClient, BetterAuthClientPlugin, IsSignal } from './types.cjs';
5
5
  import { Accessor } from 'solid-js';
6
6
  import { U as UnionToIntersection } from './helper-DPDj8Nix.cjs';
7
- import './auth-CkfEl1lS.cjs';
7
+ import './auth-RxDdMH7n.cjs';
8
8
  import 'kysely';
9
9
  import 'better-call';
10
10
  import './index-cqC7BcV_.cjs';
package/dist/solid.d.ts CHANGED
@@ -4,7 +4,7 @@ import { BetterFetchError } from '@better-fetch/fetch';
4
4
  import { ClientOptions, InferClientAPI, InferActions, InferSessionFromClient, InferUserFromClient, BetterAuthClientPlugin, IsSignal } from './types.js';
5
5
  import { Accessor } from 'solid-js';
6
6
  import { U as UnionToIntersection } from './helper-DPDj8Nix.js';
7
- import './auth-B3fUmyZo.js';
7
+ import './auth-aIfiqYkD.js';
8
8
  import 'kysely';
9
9
  import 'better-call';
10
10
  import './index-DN9ozDRm.js';
@@ -1,4 +1,4 @@
1
- import { G as GenericEndpointContext } from './auth-CkfEl1lS.cjs';
1
+ import { G as GenericEndpointContext } from './auth-RxDdMH7n.cjs';
2
2
 
3
3
  declare function generateState(c: GenericEndpointContext, link?: {
4
4
  email: string;
@@ -1,4 +1,4 @@
1
- import { G as GenericEndpointContext } from './auth-B3fUmyZo.js';
1
+ import { G as GenericEndpointContext } from './auth-aIfiqYkD.js';
2
2
 
3
3
  declare function generateState(c: GenericEndpointContext, link?: {
4
4
  email: string;
@@ -1,4 +1,4 @@
1
- import { B as BetterAuthOptions } from './auth-CkfEl1lS.cjs';
1
+ import { B as BetterAuthOptions } from './auth-RxDdMH7n.cjs';
2
2
  import 'kysely';
3
3
  import 'zod';
4
4
  import 'better-call';
@@ -1,4 +1,4 @@
1
- import { B as BetterAuthOptions } from './auth-B3fUmyZo.js';
1
+ import { B as BetterAuthOptions } from './auth-aIfiqYkD.js';
2
2
  import 'kysely';
3
3
  import 'zod';
4
4
  import 'better-call';
package/dist/svelte.d.cts CHANGED
@@ -5,7 +5,7 @@ import * as _better_fetch_fetch from '@better-fetch/fetch';
5
5
  import { BetterFetchError } from '@better-fetch/fetch';
6
6
  import { ClientOptions, InferClientAPI, InferActions, InferSessionFromClient, InferUserFromClient, BetterAuthClientPlugin, IsSignal } from './types.cjs';
7
7
  import { U as UnionToIntersection } from './helper-DPDj8Nix.cjs';
8
- import './auth-CkfEl1lS.cjs';
8
+ import './auth-RxDdMH7n.cjs';
9
9
  import 'kysely';
10
10
  import 'better-call';
11
11
  import './index-cqC7BcV_.cjs';
package/dist/svelte.d.ts CHANGED
@@ -5,7 +5,7 @@ import * as _better_fetch_fetch from '@better-fetch/fetch';
5
5
  import { BetterFetchError } from '@better-fetch/fetch';
6
6
  import { ClientOptions, InferClientAPI, InferActions, InferSessionFromClient, InferUserFromClient, BetterAuthClientPlugin, IsSignal } from './types.js';
7
7
  import { U as UnionToIntersection } from './helper-DPDj8Nix.js';
8
- import './auth-B3fUmyZo.js';
8
+ import './auth-aIfiqYkD.js';
9
9
  import 'kysely';
10
10
  import 'better-call';
11
11
  import './index-DN9ozDRm.js';