better-auth 0.5.2-beta.1 → 0.5.2-beta.2
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.
- package/dist/adapters/prisma.d.ts +1 -1
- package/dist/adapters/prisma.js +1 -1
- package/dist/db.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import '../social.js';
|
|
|
9
9
|
import 'better-sqlite3';
|
|
10
10
|
import 'mysql2';
|
|
11
11
|
|
|
12
|
-
declare const prismaAdapter: (prisma: any,
|
|
12
|
+
declare const prismaAdapter: (prisma: any, options: {
|
|
13
13
|
provider: "sqlite" | "cockroachdb" | "mysql" | "postgresql" | "sqlserver" | "mongodb";
|
|
14
14
|
/**
|
|
15
15
|
* Custom generateId function.
|
package/dist/adapters/prisma.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function l(
|
|
1
|
+
function l(o){if(!o)return{};if(o.length===1){let e=o[0];return e?{[e.field]:e.operator==="eq"||!e.operator?e.value:{[e.operator]:e.value}}:void 0}let c=o.filter(e=>e.connector==="AND"||!e.connector),a=o.filter(e=>e.connector==="OR"),i=c.map(e=>({[e.field]:e.operator==="eq"||!e.operator?e.value:{[e.operator]:e.value}})),t=a.map(e=>({[e.field]:{[e.operator||"eq"]:e.value}}));return{AND:i.length?i:void 0,OR:t.length?t:void 0}}var y=(o,c)=>{let a=o,i=c.generateId;return{id:"prisma",async create(t){let{model:e,data:n,select:r}=t;return i!==void 0&&(n.id=i?i():void 0),await a[e].create({data:n,...r?.length?{select:r.reduce((d,s)=>({...d,[s]:!0}),{})}:{}})},async findOne(t){let{model:e,where:n,select:r}=t,d=l(n);return await a[e].findFirst({where:d,...r?.length?{select:r.reduce((s,u)=>({...s,[u]:!0}),{})}:{}})},async findMany(t){let{model:e,where:n,limit:r,offset:d,sortBy:s}=t,u=l(n);return await a[e].findMany({where:u,take:r||100,skip:d||0,orderBy:s?.field?{[s.field]:s.direction==="desc"?"desc":"asc"}:void 0})},async update(t){let{model:e,where:n,update:r}=t,d=l(n);return n.length===1?await a[e].update({where:d,data:r}):await a[e].updateMany({where:d,data:r})},async delete(t){let{model:e,where:n}=t,r=l(n);return await a[e].delete({where:r})},async deleteMany(t){let{model:e,where:n}=t,r=l(n);return await a[e].deleteMany({where:r})},options:c}};export{y as prismaAdapter};
|
package/dist/db.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var S=(e,r="ms")=>new Date(Date.now()+(r==="sec"?e*1e3:e));var h=e=>{let r=e.plugins?.reduce((t,s)=>{let o=s.schema;if(!o)return t;for(let[d,l]of Object.entries(o))t[d]={fields:{...t[d]?.fields,...l.fields},tableName:l.tableName||d};return t},{}),a=e.rateLimit?.storage==="database",i={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:u,session:n,account:c,...f}=r||{};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"},...u?.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},...n?.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},...f,...a?i:{}}};import{nanoid as P}from"nanoid";var A=e=>P(e);var F=class extends Error{constructor(r,a){super(r),this.name="BetterAuthError",this.message=r,this.cause=a,this.stack=""}};import{Kysely as D,MssqlDialect as L}from"kysely";import{MysqlDialect as R,PostgresDialect as B,SqliteDialect as V}from"kysely";function M(e){if("dialect"in e)return M(e.dialect);if("createDriver"in e){if(e instanceof V)return"sqlite";if(e instanceof R)return"mysql";if(e instanceof B)return"postgres";if(e instanceof L)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var k=async e=>{let r=e.database;if("db"in r)return{kysely:r.db,databaseType:r.type};if("dialect"in r)return{kysely:new D({dialect:r.dialect}),databaseType:r.type};let a,i=M(r);return"createDriver"in r&&(a=r),"aggregate"in r&&(a=new V({database:r})),"getConnection"in r&&(a=new R({pool:r})),"connect"in r&&(a=new B({pool:r})),{kysely:a?new D({dialect:a}):null,databaseType:i}};function N(e){if(!e)return{and:null,or:null};let r={and:[],or:[]};return e.forEach(a=>{let{field:i,value:u,operator:n="=",connector:c="AND"}=a,f=t=>n.toLowerCase()==="in"?t(i,"in",Array.isArray(u)?u:[u]):t(i,n,u);c==="OR"?r.or.push(f):r.and.push(f)}),{and:r.and.length?r.and:null,or:r.or.length?r.or:null}}function v(e,r,a){for(let i in e)e[i]===0&&r[i]?.type==="boolean"&&a?.boolean&&(e[i]=!1),e[i]===1&&r[i]?.type==="boolean"&&a?.boolean&&(e[i]=!0),r[i]?.type==="date"&&(e[i]instanceof Date||(e[i]=new Date(e[i])));return e}function U(e,r){for(let a in e)typeof e[a]=="boolean"&&r?.boolean&&(e[a]=e[a]?1:0),e[a]instanceof Date&&(e[a]=e[a].toISOString());return e}var K=(e,r)=>({id:"kysely",async create(a){let{model:i,data:u,select:n}=a;r?.transform&&(u=U(u,r.transform)),r?.generateId!==void 0&&(u.id=r.generateId?r.generateId():void 0);let c=await e.insertInto(i).values(u).returningAll().executeTakeFirst();if(r?.transform){let f=r.transform.schema[i];c=f?v(u,f,r.transform):c}return n?.length&&(c=c?n.reduce((t,s)=>c?.[s]?{...t,[s]:c[s]}:t,{}):null),c},async findOne(a){let{model:i,where:u,select:n}=a,{and:c,or:f}=N(u),t=e.selectFrom(i).selectAll();c&&(t=t.where(o=>o.and(c.map(d=>d(o))))),f&&(t=t.where(o=>o.or(f.map(d=>d(o)))));let s=await t.executeTakeFirst();if(n?.length&&(s=s?n.reduce((d,l)=>s?.[l]?{...d,[l]:s[l]}:d,{}):null),r?.transform){let o=r.transform.schema[i];return s=s&&o?v(s,o,r.transform):s,s||null}return s||null},async findMany(a){let{model:i,where:u,limit:n,offset:c,sortBy:f}=a,t=e.selectFrom(i),{and:s,or:o}=N(u);s&&(t=t.where(l=>l.and(s.map(m=>m(l))))),o&&(t=t.where(l=>l.or(o.map(m=>m(l))))),t=t.limit(n||100),c&&(t=t.offset(c)),f&&(t=t.orderBy(f.field,f.direction));let d=await t.selectAll().execute();if(r?.transform){let l=r.transform.schema[i];return l?d.map(m=>v(m,l,r.transform)):d}return d},async update(a){let{model:i,where:u,update:n}=a,{and:c,or:f}=N(u);r?.transform&&(n=U(n,r.transform));let t=e.updateTable(i).set(n);c&&(t=t.where(o=>o.and(c.map(d=>d(o))))),f&&(t=t.where(o=>o.or(f.map(d=>d(o)))));let s=await t.returningAll().executeTakeFirst()||null;if(r?.transform){let o=r.transform.schema[i];return o?v(s,o,r.transform):s}return s},async delete(a){let{model:i,where:u}=a,{and:n,or:c}=N(u),f=e.deleteFrom(i);n&&(f=f.where(t=>t.and(n.map(s=>s(t))))),c&&(f=f.where(t=>t.or(c.map(s=>s(t))))),await f.execute()},async deleteMany(a){let{model:i,where:u}=a,{and:n,or:c}=N(u),f=e.deleteFrom(i);n&&(f=f.where(t=>t.and(n.map(s=>s(t))))),c&&(f=f.where(t=>t.or(c.map(s=>s(t))))),await f.execute()}});async function be(e){if(!e.database)throw new F("Database configuration is required");if("create"in e.database)return e.database;let{kysely:r,databaseType:a}=await k(e);if(!r)throw new F("Failed to initialize database adapter");let i=h(e),u={};for(let n of Object.values(i))u[n.tableName]=n.fields;return K(r,{transform:{schema:u,date:!0,boolean:a==="sqlite"},generateId:"generateId"in e.database?e.database.generateId:void 0})}function q(e,r){let a={id:r.id};for(let i in e){let u=e[i],n=r[i];a[u.fieldName||i]=n}return a}function g(e,r){if(!r)return null;let a={id:r.id};for(let[i,u]of Object.entries(e))a[i]=r[u.fieldName||i];return a}function C(e,r){let a=r.hooks,i=h(r.options);async function u(c,f,t){let s=c,o=i[f];for(let m of a||[]){let p=m[f]?.create?.before;if(p){let y=await p(c);if(y===!1)return null;typeof y=="object"&&"data"in y&&(s=y.data)}}let d=t?await t.fn(s):null,l=!t||t.executeMainFn?await e.create({model:o.tableName,data:{id:A(),...q(o.fields,s)}}):d;for(let m of a||[]){let p=m[f]?.create?.after;p&&await p(l)}return g(o.fields,l)}async function n(c,f,t,s){let o=c;for(let m of a||[]){let p=m[t]?.update?.before;if(p){let y=await p(c);if(y===!1)return null;o=typeof y=="object"?y.data:y}}let d=s?await s.fn(o):null,l=!s||s.executeMainFn?await e.update({model:i[t].tableName,update:q(i[t].fields,o),where:f}):d;for(let m of a||[]){let p=m[t]?.update?.after;p&&await p(l)}return g(i[t].fields,l)}return{createWithHooks:u,updateWithHooks:n}}function E(e){let r="127.0.0.1";if(process.env.NODE_ENV==="test")return r;let a=["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 u of a){let n=i.get(u);if(typeof n=="string"){let c=n.split(",")[0].trim();if(c)return c}}return null}var Se=(e,r)=>{let a=r.options,i=a.secondaryStorage,u=a.session?.expiresIn||60*60*24*7,n=h(a),{createWithHooks:c,updateWithHooks:f}=C(e,r);return{createOAuthUser:async(t,s)=>{try{let o=await c(t,"user"),d=await c(s,"account");return{user:o,account:{...d,userId:o.id||t.id}}}catch(o){return console.log(o),null}},createUser:async t=>await c({id:A(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...t},"user"),createAccount:async t=>await c({id:A(),createdAt:new Date,updatedAt:new Date,...t},"account"),listSessions:async t=>await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]}),listUsers:async(t,s,o,d)=>(await e.findMany({model:n.user.tableName,limit:t,offset:s,sortBy:o,where:d})).map(m=>g(n.user.fields,m)),deleteUser:async t=>{await e.delete({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:t}]}),await e.deleteMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]}),await e.deleteMany({model:n.user.tableName,where:[{field:"id",value:t}]})},createSession:async(t,s,o,d)=>{let l=s instanceof Request?s.headers:s,m={id:A(),userId:t,expiresAt:o?S(60*60*24,"sec"):S(u,"sec"),ipAddress:s&&E(s)||"",userAgent:l?.get("user-agent")||"",...d};return await c(m,"session",i?{fn:async y=>{let b=await e.findOne({model:n.user.tableName,where:[{field:"id",value:t}]});return i.set(y.id,JSON.stringify({session:y,user:b}),u),y},executeMainFn:a.session?.storeSessionInDatabase}:void 0)},findSession:async t=>{if(i){let d=await i.get(t);if(d){let l=JSON.parse(d);return{session:{...l.session,expiresAt:new Date(l.session.expiresAt)},user:{...l.user,createdAt:new Date(l.user.createdAt),updatedAt:new Date(l.user.updatedAt)}}}}let s=await e.findOne({model:n.session.tableName,where:[{value:t,field:"id"}]});if(!s)return null;let o=await e.findOne({model:n.user.tableName,where:[{value:s.userId,field:"id"}]});return o?{session:g(n.session.fields,s),user:g(n.user.fields,o)}:null},findSessions:async t=>{if(i){let l=[];for(let m of t){let p=await i.get(m);if(p){let y=JSON.parse(p),b={session:{...y.session,expiresAt:new Date(y.session.expiresAt)},user:{...y.user,createdAt:new Date(y.user.createdAt),updatedAt:new Date(y.user.updatedAt)}};l.push(b)}}return l}let s=await e.findMany({model:n.session.tableName,where:[{field:"id",value:t,operator:"in"}]}),o=s.map(l=>l.userId),d=await e.findMany({model:n.user.tableName,where:[{field:"id",value:o,operator:"in"}]});return s.map(l=>{let m=d.find(p=>p.id===l.userId);return m?{session:g(n.session.fields,l),user:g(n.user.fields,m)}:null})},updateSession:async(t,s)=>await f(s,[{field:"id",value:t}],"session",i?{async fn(d){let l=await i.get(t),m=null;if(l){let p=JSON.parse(l);m={...p.session,...d},await i.set(t,JSON.stringify({session:m,user:p.user}),p.session.expiresAt?new Date(p.session.expiresAt).getTime():void 0)}else return null},executeMainFn:a.session?.storeSessionInDatabase}:void 0),deleteSession:async t=>{if(i){await i.delete(t),a.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:"id",value:t}]});return}await e.delete({model:n.session.tableName,where:[{field:"id",value:t}]})},deleteSessions:async t=>{if(i){let s=await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]});for(let o of s)await i.delete(o.id);a.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]});return}await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]})},findUserByEmail:async(t,s)=>{let o=await e.findOne({model:n.user.tableName,where:[{value:t.toLowerCase(),field:n.user.fields.email.fieldName||"email"}]});if(!o)return null;if(s?.includeAccounts){let d=await e.findMany({model:n.account.tableName,where:[{value:o.id,field:n.account.fields.userId.fieldName||"userId"}]});return{user:g(n.user.fields,o),accounts:d.map(l=>g(n.account.fields,l))}}return{user:g(n.user.fields,o),accounts:[]}},findUserById:async t=>await e.findOne({model:n.user.tableName,where:[{field:"id",value:t}]}),linkAccount:async t=>await c({id:A(),...t},"account"),updateUser:async(t,s)=>await f(s,[{field:"id",value:t}],"user"),updateUserByEmail:async(t,s)=>await f(s,[{field:n.user.fields.email.fieldName||"email",value:t}],"user"),updatePassword:async(t,s)=>await f({password:s},[{field:n.account.fields.userId.fieldName||"userId",value:t},{field:n.account.fields.providerId.fieldName||"providerId",value:"credential"}],"account"),findAccounts:async t=>(await e.findMany({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:t}]})).map(o=>g(n.account.fields,o)),updateAccount:async(t,s)=>await f(s,[{field:"id",value:t}],"account"),createVerificationValue:async t=>await c({id:A(),...t},"verification"),findVerificationValue:async t=>{let s=await e.findOne({model:n.verification.tableName,where:[{field:n.verification.fields.identifier.fieldName||"identifier",value:t}]});return g(n.verification.fields,s)},deleteVerificationValue:async t=>{await e.delete({model:n.verification.tableName,where:[{field:"id",value:t}]})},updateVerificationValue:async(t,s)=>await f(s,[{field:"id",value:t}],"verification")}};var De=(e,r)=>({type:e,...r});import{z as I}from"zod";function Ve(e){return I.object({...Object.keys(e).reduce((a,i)=>{let u=e[i];if(!u)return a;if(u.type==="string[]"||u.type==="number[]")return{...a,[i]:I.array(u.type==="string[]"?I.string():I.number())};let n=I[u.type]();return u?.required===!1&&(n=n.optional()),u?.returned===!1?a:{...a,[i]:n}},{})})}import"kysely";import{createConsola as W}from"consola";var w=W({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),H=e=>({log:(...r)=>{!e?.disabled&&w.log("",...r)},error:(...r)=>{!e?.disabled&&w.error("",...r)},warn:(...r)=>{!e?.disabled&&w.warn("",...r)},info:(...r)=>{!e?.disabled&&w.info("",...r)},debug:(...r)=>{!e?.disabled&&w.debug("",...r)},box:(...r)=>{!e?.disabled&&w.box("",...r)},success:(...r)=>{!e?.disabled&&w.success("",...r)},break:(...r)=>{!e?.disabled&&console.log(`
|
|
1
|
+
var S=(e,r="ms")=>new Date(Date.now()+(r==="sec"?e*1e3:e));var h=e=>{let r=e.plugins?.reduce((t,s)=>{let o=s.schema;if(!o)return t;for(let[d,l]of Object.entries(o))t[d]={fields:{...t[d]?.fields,...l.fields},tableName:l.tableName||d};return t},{}),a=e.rateLimit?.storage==="database",i={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:u,session:n,account:c,...f}=r||{};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"},...u?.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},...n?.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},...f,...a?i:{}}};import{nanoid as P}from"nanoid";var A=e=>P(e);var F=class extends Error{constructor(r,a){super(r),this.name="BetterAuthError",this.message=r,this.cause=a,this.stack=""}};import{Kysely as D,MssqlDialect as L}from"kysely";import{MysqlDialect as R,PostgresDialect as B,SqliteDialect as V}from"kysely";function M(e){if("dialect"in e)return M(e.dialect);if("createDriver"in e){if(e instanceof V)return"sqlite";if(e instanceof R)return"mysql";if(e instanceof B)return"postgres";if(e instanceof L)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var k=async e=>{let r=e.database;if("db"in r)return{kysely:r.db,databaseType:r.type};if("dialect"in r)return{kysely:new D({dialect:r.dialect}),databaseType:r.type};let a,i=M(r);return"createDriver"in r&&(a=r),"aggregate"in r&&(a=new V({database:r})),"getConnection"in r&&(a=new R({pool:r})),"connect"in r&&(a=new B({pool:r})),{kysely:a?new D({dialect:a}):null,databaseType:i}};function N(e){if(!e)return{and:null,or:null};let r={and:[],or:[]};return e.forEach(a=>{let{field:i,value:u,operator:n="=",connector:c="AND"}=a,f=t=>n.toLowerCase()==="in"?t(i,"in",Array.isArray(u)?u:[u]):t(i,n,u);c==="OR"?r.or.push(f):r.and.push(f)}),{and:r.and.length?r.and:null,or:r.or.length?r.or:null}}function v(e,r,a){for(let i in e)e[i]===0&&r[i]?.type==="boolean"&&a?.boolean&&(e[i]=!1),e[i]===1&&r[i]?.type==="boolean"&&a?.boolean&&(e[i]=!0),r[i]?.type==="date"&&(e[i]instanceof Date||(e[i]=new Date(e[i])));return e}function U(e,r){for(let a in e)typeof e[a]=="boolean"&&r?.boolean&&(e[a]=e[a]?1:0),e[a]instanceof Date&&(e[a]=e[a].toISOString());return e}var K=(e,r)=>({id:"kysely",async create(a){let{model:i,data:u,select:n}=a;r?.transform&&(u=U(u,r.transform)),r?.generateId!==void 0&&(u.id=r.generateId?r.generateId():void 0);let c=await e.insertInto(i).values(u).returningAll().executeTakeFirst();if(r?.transform){let f=r.transform.schema[i];c=f?v(u,f,r.transform):c}return n?.length&&(c=c?n.reduce((t,s)=>c?.[s]?{...t,[s]:c[s]}:t,{}):null),c},async findOne(a){let{model:i,where:u,select:n}=a,{and:c,or:f}=N(u),t=e.selectFrom(i).selectAll();c&&(t=t.where(o=>o.and(c.map(d=>d(o))))),f&&(t=t.where(o=>o.or(f.map(d=>d(o)))));let s=await t.executeTakeFirst();if(n?.length&&(s=s?n.reduce((d,l)=>s?.[l]?{...d,[l]:s[l]}:d,{}):null),r?.transform){let o=r.transform.schema[i];return s=s&&o?v(s,o,r.transform):s,s||null}return s||null},async findMany(a){let{model:i,where:u,limit:n,offset:c,sortBy:f}=a,t=e.selectFrom(i),{and:s,or:o}=N(u);s&&(t=t.where(l=>l.and(s.map(m=>m(l))))),o&&(t=t.where(l=>l.or(o.map(m=>m(l))))),t=t.limit(n||100),c&&(t=t.offset(c)),f&&(t=t.orderBy(f.field,f.direction));let d=await t.selectAll().execute();if(r?.transform){let l=r.transform.schema[i];return l?d.map(m=>v(m,l,r.transform)):d}return d},async update(a){let{model:i,where:u,update:n}=a,{and:c,or:f}=N(u);r?.transform&&(n=U(n,r.transform));let t=e.updateTable(i).set(n);c&&(t=t.where(o=>o.and(c.map(d=>d(o))))),f&&(t=t.where(o=>o.or(f.map(d=>d(o)))));let s=await t.returningAll().executeTakeFirst()||null;if(r?.transform){let o=r.transform.schema[i];return o?v(s,o,r.transform):s}return s},async delete(a){let{model:i,where:u}=a,{and:n,or:c}=N(u),f=e.deleteFrom(i);n&&(f=f.where(t=>t.and(n.map(s=>s(t))))),c&&(f=f.where(t=>t.or(c.map(s=>s(t))))),await f.execute()},async deleteMany(a){let{model:i,where:u}=a,{and:n,or:c}=N(u),f=e.deleteFrom(i);n&&(f=f.where(t=>t.and(n.map(s=>s(t))))),c&&(f=f.where(t=>t.or(c.map(s=>s(t))))),await f.execute()}});async function be(e){if(!e.database)throw new F("Database configuration is required");if("create"in e.database)return e.database;let{kysely:r,databaseType:a}=await k(e);if(!r)throw new F("Failed to initialize database adapter");let i=h(e),u={};for(let n of Object.values(i))u[n.tableName]=n.fields;return K(r,{transform:{schema:u,date:!0,boolean:a==="sqlite"},generateId:"generateId"in e.database?e.database.generateId:void 0})}function q(e,r){let a={id:r.id};for(let i in e){let u=e[i],n=r[i];a[u.fieldName||i]=n}return a}function g(e,r){if(!r)return null;let a={id:r.id};for(let[i,u]of Object.entries(e))a[i]=r[u.fieldName||i];return a}function C(e,r){let a=r.hooks,i=h(r.options);async function u(c,f,t){let s=c,o=i[f];for(let m of a||[]){let p=m[f]?.create?.before;if(p){let y=await p(c);if(y===!1)return null;typeof y=="object"&&"data"in y&&(s=y.data)}}let d=t?await t.fn(s):null,l=!t||t.executeMainFn?await e.create({model:o.tableName,data:{id:s.id||A(),...q(o.fields,s)}}):d;for(let m of a||[]){let p=m[f]?.create?.after;p&&await p(l)}return g(o.fields,l)}async function n(c,f,t,s){let o=c;for(let m of a||[]){let p=m[t]?.update?.before;if(p){let y=await p(c);if(y===!1)return null;o=typeof y=="object"?y.data:y}}let d=s?await s.fn(o):null,l=!s||s.executeMainFn?await e.update({model:i[t].tableName,update:q(i[t].fields,o),where:f}):d;for(let m of a||[]){let p=m[t]?.update?.after;p&&await p(l)}return g(i[t].fields,l)}return{createWithHooks:u,updateWithHooks:n}}function E(e){let r="127.0.0.1";if(process.env.NODE_ENV==="test")return r;let a=["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 u of a){let n=i.get(u);if(typeof n=="string"){let c=n.split(",")[0].trim();if(c)return c}}return null}var Se=(e,r)=>{let a=r.options,i=a.secondaryStorage,u=a.session?.expiresIn||60*60*24*7,n=h(a),{createWithHooks:c,updateWithHooks:f}=C(e,r);return{createOAuthUser:async(t,s)=>{try{let o=await c(t,"user"),d=await c({...s,userId:o.id||t.id},"account");return{user:o,account:d}}catch(o){return console.log(o),null}},createUser:async t=>await c({id:A(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...t},"user"),createAccount:async t=>await c({id:A(),createdAt:new Date,updatedAt:new Date,...t},"account"),listSessions:async t=>await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]}),listUsers:async(t,s,o,d)=>(await e.findMany({model:n.user.tableName,limit:t,offset:s,sortBy:o,where:d})).map(m=>g(n.user.fields,m)),deleteUser:async t=>{await e.delete({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:t}]}),await e.deleteMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]}),await e.deleteMany({model:n.user.tableName,where:[{field:"id",value:t}]})},createSession:async(t,s,o,d)=>{let l=s instanceof Request?s.headers:s,m={id:A(),userId:t,expiresAt:o?S(60*60*24,"sec"):S(u,"sec"),ipAddress:s&&E(s)||"",userAgent:l?.get("user-agent")||"",...d};return await c(m,"session",i?{fn:async y=>{let b=await e.findOne({model:n.user.tableName,where:[{field:"id",value:t}]});return i.set(y.id,JSON.stringify({session:y,user:b}),u),y},executeMainFn:a.session?.storeSessionInDatabase}:void 0)},findSession:async t=>{if(i){let d=await i.get(t);if(d){let l=JSON.parse(d);return{session:{...l.session,expiresAt:new Date(l.session.expiresAt)},user:{...l.user,createdAt:new Date(l.user.createdAt),updatedAt:new Date(l.user.updatedAt)}}}}let s=await e.findOne({model:n.session.tableName,where:[{value:t,field:"id"}]});if(!s)return null;let o=await e.findOne({model:n.user.tableName,where:[{value:s.userId,field:"id"}]});return o?{session:g(n.session.fields,s),user:g(n.user.fields,o)}:null},findSessions:async t=>{if(i){let l=[];for(let m of t){let p=await i.get(m);if(p){let y=JSON.parse(p),b={session:{...y.session,expiresAt:new Date(y.session.expiresAt)},user:{...y.user,createdAt:new Date(y.user.createdAt),updatedAt:new Date(y.user.updatedAt)}};l.push(b)}}return l}let s=await e.findMany({model:n.session.tableName,where:[{field:"id",value:t,operator:"in"}]}),o=s.map(l=>l.userId),d=await e.findMany({model:n.user.tableName,where:[{field:"id",value:o,operator:"in"}]});return s.map(l=>{let m=d.find(p=>p.id===l.userId);return m?{session:g(n.session.fields,l),user:g(n.user.fields,m)}:null})},updateSession:async(t,s)=>await f(s,[{field:"id",value:t}],"session",i?{async fn(d){let l=await i.get(t),m=null;if(l){let p=JSON.parse(l);m={...p.session,...d},await i.set(t,JSON.stringify({session:m,user:p.user}),p.session.expiresAt?new Date(p.session.expiresAt).getTime():void 0)}else return null},executeMainFn:a.session?.storeSessionInDatabase}:void 0),deleteSession:async t=>{if(i){await i.delete(t),a.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:"id",value:t}]});return}await e.delete({model:n.session.tableName,where:[{field:"id",value:t}]})},deleteSessions:async t=>{if(i){let s=await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]});for(let o of s)await i.delete(o.id);a.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]});return}await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:t}]})},findUserByEmail:async(t,s)=>{let o=await e.findOne({model:n.user.tableName,where:[{value:t.toLowerCase(),field:n.user.fields.email.fieldName||"email"}]});if(!o)return null;if(s?.includeAccounts){let d=await e.findMany({model:n.account.tableName,where:[{value:o.id,field:n.account.fields.userId.fieldName||"userId"}]});return{user:g(n.user.fields,o),accounts:d.map(l=>g(n.account.fields,l))}}return{user:g(n.user.fields,o),accounts:[]}},findUserById:async t=>await e.findOne({model:n.user.tableName,where:[{field:"id",value:t}]}),linkAccount:async t=>await c({id:A(),...t},"account"),updateUser:async(t,s)=>await f(s,[{field:"id",value:t}],"user"),updateUserByEmail:async(t,s)=>await f(s,[{field:n.user.fields.email.fieldName||"email",value:t}],"user"),updatePassword:async(t,s)=>await f({password:s},[{field:n.account.fields.userId.fieldName||"userId",value:t},{field:n.account.fields.providerId.fieldName||"providerId",value:"credential"}],"account"),findAccounts:async t=>(await e.findMany({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:t}]})).map(o=>g(n.account.fields,o)),updateAccount:async(t,s)=>await f(s,[{field:"id",value:t}],"account"),createVerificationValue:async t=>await c({id:A(),...t},"verification"),findVerificationValue:async t=>{let s=await e.findOne({model:n.verification.tableName,where:[{field:n.verification.fields.identifier.fieldName||"identifier",value:t}]});return g(n.verification.fields,s)},deleteVerificationValue:async t=>{await e.delete({model:n.verification.tableName,where:[{field:"id",value:t}]})},updateVerificationValue:async(t,s)=>await f(s,[{field:"id",value:t}],"verification")}};var De=(e,r)=>({type:e,...r});import{z as I}from"zod";function Ve(e){return I.object({...Object.keys(e).reduce((a,i)=>{let u=e[i];if(!u)return a;if(u.type==="string[]"||u.type==="number[]")return{...a,[i]:I.array(u.type==="string[]"?I.string():I.number())};let n=I[u.type]();return u?.required===!1&&(n=n.optional()),u?.returned===!1?a:{...a,[i]:n}},{})})}import"kysely";import{createConsola as W}from"consola";var w=W({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),H=e=>({log:(...r)=>{!e?.disabled&&w.log("",...r)},error:(...r)=>{!e?.disabled&&w.error("",...r)},warn:(...r)=>{!e?.disabled&&w.warn("",...r)},info:(...r)=>{!e?.disabled&&w.info("",...r)},debug:(...r)=>{!e?.disabled&&w.debug("",...r)},box:(...r)=>{!e?.disabled&&w.box("",...r)},success:(...r)=>{!e?.disabled&&w.success("",...r)},break:(...r)=>{!e?.disabled&&console.log(`
|
|
2
2
|
`)}}),O=H();function j(e){let r=h(e),a={};for(let i in r){let u=r[i],n=u.fields,c={};if(Object.entries(n).forEach(([f,t])=>{c[t.fieldName||f]=t}),a[u.tableName]){a[u.tableName].fields={...a[u.tableName].fields,...c};continue}a[u.tableName]={fields:c,order:u.order||1/0}}return a}var $={string:["character varying","text"],number:["int4","integer","bigint","smallint","numeric","real","double precision"],boolean:["bool","boolean"],date:["timestamp","date"]},Z={string:["varchar","text"],number:["integer","int","bigint","smallint","decimal","float","double"],boolean:["boolean"],date:["date","datetime"]},z={string:["TEXT"],number:["INTEGER","REAL"],boolean:["INTEGER","BOOLEAN"],date:["DATE","INTEGER"]},J={string:["nvarchar","varchar"],number:["int","bigint","smallint","decimal","float","double"],boolean:["bit","boolean"],date:["datetime","date"]},G={postgres:$,mysql:Z,sqlite:z,mssql:J};function _(e,r,a){return r==="string[]"||r==="number[]"?e.toLowerCase().includes("json"):G[a][r].map(c=>c.toLowerCase()).includes(e.toLowerCase())}async function He(e){let r=j(e),{kysely:a,databaseType:i}=await k(e);i||(O.warn("Could not determine database type, defaulting to sqlite. Please provide a type in the database options to avoid this."),i="sqlite"),a||(O.error("Only kysely adapter is supported for migrations. You can use `generate` command to generate the schema, if you're using a different adapter."),process.exit(1));let u=await a.introspection.getTables(),n=[],c=[];for(let[d,l]of Object.entries(r)){let m=u.find(y=>y.name===d);if(!m){let y=n.findIndex(T=>T.table===d),b={table:d,fields:l.fields,order:l.order||1/0},x=n.findIndex(T=>(T.order||1/0)>b.order);x===-1?y===-1?n.push(b):n[y].fields={...n[y].fields,...l.fields}:n.splice(x,0,b);continue}let p={};for(let[y,b]of Object.entries(l.fields)){let x=m.columns.find(T=>T.name===y);if(!x){p[y]=b;continue}_(x.dataType,b.type,i)||O.warn(`Field ${y} in table ${d} has a different type in the database. Expected ${b.type} but got ${x.dataType}.`)}Object.keys(p).length>0&&c.push({table:d,fields:p,order:l.order||1/0})}let f=[];function t(d){let l={string:"text",boolean:"boolean",number:"integer",date:"date"};return i==="mysql"&&d==="string"?"varchar(255)":i==="sqlite"&&(d==="string[]"||d==="number[]")?"text":d==="string[]"||d==="number[]"?"jsonb":l[d]}if(c.length)for(let d of c)for(let[l,m]of Object.entries(d.fields)){let p=t(m.type),y=a.schema.alterTable(d.table).addColumn(l,p,b=>(b=m.required!==!1?b.notNull():b,m.references&&(b=b.references(`${m.references.model}.${m.references.field}`)),b));f.push(y)}if(n.length)for(let d of n){let l=a.schema.createTable(d.table).addColumn("id",t("string"),m=>m.primaryKey().notNull());for(let[m,p]of Object.entries(d.fields)){let y=t(p.type);l=l.addColumn(m,y,b=>(b=p.required!==!1?b.notNull():b,p.references&&(b=b.references(`${p.references.model}.${p.references.field}`)),p.unique&&(b=b.unique()),b))}f.push(l)}async function s(){for(let d of f)await d.execute()}async function o(){return f.map(l=>l.compile().sql).join(`;
|
|
3
3
|
|
|
4
4
|
`)}return{toBeCreated:n,toBeAdded:c,runMigrations:s,compileMigrations:o}}export{g as convertFromDB,q as convertToDB,De as createFieldAttribute,Se as createInternalAdapter,be as getAdapter,h as getAuthTables,He as getMigrations,j as getSchema,C as getWithHooks,_ as matchType,Ve as toZodSchema};
|
package/dist/index.js
CHANGED
|
@@ -80,4 +80,4 @@ Error: `,m),e.redirect(`${e.context.baseURL}/error?error=internal_server_error`)
|
|
|
80
80
|
<div class="error-code">Error Code: <span id="errorCode">${e}</span></div>
|
|
81
81
|
</div>
|
|
82
82
|
</body>
|
|
83
|
-
</html>`,ht=h("/error",{method:"GET",metadata:N},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(lr(t),{headers:{"Content-Type":"text/html"}})});var yt=h("/ok",{method:"GET",metadata:N},async e=>e.json({ok:!0}));import{z as M}from"zod";import{APIError as V}from"better-call";var wt=()=>h("/sign-up/email",{method:"POST",query:M.object({currentURL:M.string().optional()}).optional(),body:M.record(M.string(),M.any()),use:[x]},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:o,password:s,image:n,callbackURL:a,...c}=t;if(!M.string().email().safeParse(o).success)throw new V("BAD_REQUEST",{message:"Invalid email"});let d=e.context.password.config.minPasswordLength;if(s.length<d)throw e.context.logger.error("Password is too short"),new V("BAD_REQUEST",{message:"Password is too short"});let l=e.context.password.config.maxPasswordLength;if(s.length>l)throw e.context.logger.error("Password is too long"),new V("BAD_REQUEST",{message:"Password is too long"});if((await e.context.internalAdapter.findUserByEmail(o))?.user)throw e.context.logger.info(`Sign-up attempt for existing email: ${o}`),new V("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let u=nt(e.context.options,c),f=await e.context.internalAdapter.createUser({email:o.toLowerCase(),name:r,image:n,...u,emailVerified:!1});if(!f)throw new V("BAD_REQUEST",{message:"Failed to create user"});let m=await e.context.password.hash(s);if(await e.context.internalAdapter.linkAccount({userId:f.id,providerId:"credential",accountId:f.id,password:m,expiresAt:q(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let y=await B(e.context.secret,f.email),k=`${e.context.baseURL}/verify-email?token=${y}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.(f,k,y)}if(!e.context.options.emailAndPassword.autoSignIn)return e.json({user:f,session:null},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:f,session:null}});let g=await e.context.internalAdapter.createSession(f.id,e.request);if(!g)throw new V("BAD_REQUEST",{message:"Failed to create session"});return await P(e,g.id),e.json({user:f,session:g},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:f,session:g}})});function te(e){let t="127.0.0.1";if(process.env.NODE_ENV==="test")return t;let r=["x-client-ip","x-forwarded-for","cf-connecting-ip","fastly-client-ip","x-real-ip","x-cluster-client-ip","x-forwarded","forwarded-for","forwarded"],o=e instanceof Request?e.headers:e;for(let s of r){let n=o.get(s);if(typeof n=="string"){let a=n.split(",")[0].trim();if(a)return a}}return null}function ur(e,t,r){let o=Date.now(),s=t*1e3;return o-r.lastRequest<s&&r.count>=e}function pr(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 fr(e,t){let r=Date.now(),o=t*1e3;return Math.ceil((e+o-r)/1e3)}function mr(e,t){let r=t??"rateLimit",o=e.adapter;return{get:async s=>await o.findOne({model:r,where:[{field:"key",value:s}]}),set:async(s,n,a)=>{try{a?await o.update({model:t??"rateLimit",where:[{field:"key",value:s}],update:{count:n.count,lastRequest:n.lastRequest}}):await o.create({model:t??"rateLimit",data:{key:s,count:n.count,lastRequest:n.lastRequest}})}catch(c){b.error("Error setting rate limit",c)}}}}var bt=new Map;function gr(e){return e.rateLimit.storage==="secondary-storage"?{get:async r=>{let o=await e.options.secondaryStorage?.get(r);return o?JSON.parse(o):void 0},set:async(r,o)=>{await e.options.secondaryStorage?.set?.(r,JSON.stringify(o))}}:e.rateLimit.storage==="memory"?{async get(r){return bt.get(r)},async set(r,o,s){bt.set(r,o)}}:mr(e,e.rateLimit.tableName)}async function At(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,o=e.url.replace(r,""),s=t.rateLimit.window,n=t.rateLimit.max,a=te(e)+o,i=hr().find(u=>u.pathMatcher(o));i&&(s=i.window,n=i.max);for(let u of t.options.plugins||[])if(u.rateLimit){let f=u.rateLimit.find(m=>m.pathMatcher(o));if(f){s=f.window,n=f.max;break}}if(t.rateLimit.customRules){let u=t.rateLimit.customRules[o];u&&(s=u.window,n=u.max)}let d=gr(t),l=await d.get(a),p=Date.now();if(!l)await d.set(a,{key:a,count:1,lastRequest:p});else{let u=p-l.lastRequest;if(ur(n,s,l)){let f=fr(l.lastRequest,s);return pr(f)}else u>s*1e3?await d.set(a,{...l,count:1,lastRequest:p}):await d.set(a,{...l,count:l.count+1,lastRequest:p})}}function hr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")},window:10,max:7}]}import{APIError as wa}from"better-call";function pe(e,t){let r=t.plugins?.reduce((c,i)=>({...c,...i.endpoints}),{}),o=t.plugins?.map(c=>c.middlewares?.map(i=>{let d=async l=>i.middleware({...l,context:{...e,...l.context}});return d.path=i.path,d.options=i.middleware.options,d.headers=i.middleware.headers,{path:i.path,middleware:d}})).filter(c=>c!==void 0).flat()||[],n={...{signInOAuth:tt,callbackOAuth:st,getCSRFToken:gt,getSession:le(),signOut:it,signUpEmail:wt(),signInEmail:rt,forgetPassword:at,resetPassword:ct,verifyEmail:et,sendVerificationEmail:Ye,changeEmail:mt,changePassword:ut,setPassword:pt,updateUser:lt,deleteUser:ft,forgetPasswordCallback:dt,listSessions:Ze(),revokeSession:Je,revokeSessions:Xe},...r,ok:yt,error:ht},a={};for(let[c,i]of Object.entries(n))a[c]=async(d={})=>{let l=await e;for(let f of t.plugins||[])if(f.hooks?.before){for(let m of f.hooks.before)if(m.matcher({...i,...d,context:l})){let y=await m.handler({...d,context:{...l,...d?.context}});y&&"context"in y&&(l={...l,...y.context})}}let p;try{p=await i({...d,context:{...l,...d.context}})}catch(f){if(f instanceof Rt){let m=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!m?.length)throw f;let g=new Response(JSON.stringify(f.body),{status:wr[f.status],headers:f.headers});for(let y of m||[])if(y.matcher(d)){let he=Object.assign(d,{context:{...e,returned:g}}),oe=await y.handler(he);oe&&"response"in oe&&(g=oe.response)}return g}throw f}let u=p;for(let f of t.plugins||[])if(f.hooks?.after){for(let m of f.hooks.after)if(m.matcher(d)){let y=Object.assign(d,{context:{...e,returned:u}}),k=await m.handler(y);k&&"response"in k&&(u=k.response)}}return u},a[c].path=i.path,a[c].method=i.method,a[c].options=i.options,a[c].headers=i.headers;return{api:a,middlewares:o}}var kt=(e,t)=>{let{api:r,middlewares:o}=pe(e,t),s=new URL(e.baseURL).pathname;return yr(r,{extraContext:e,basePath:s,routerMiddleware:[{path:"/**",middleware:ve},...o],async onRequest(n){for(let a of e.options.plugins||[])if(a.onRequest){let c=await a.onRequest(n,e);if(c)return c}return At(n,e)},async onResponse(n){for(let a of e.options.plugins||[])if(a.onResponse){let c=await a.onResponse(n,e);if(c)return c.response}return n},onError(n){if(t.onAPIError?.throw)throw n;if(t.onAPIError?.onError){t.onAPIError.onError(n,e);return}let a=t.logger?.verboseLogging?b:void 0;t.logger?.disabled!==!0&&(n instanceof Rt?(n.status==="INTERNAL_SERVER_ERROR"&&b.error(n),a?.error(n.message)):b?.error(n))}})};var D=e=>{let t=e.plugins?.reduce((i,d)=>{let l=d.schema;if(!l)return i;for(let[p,u]of Object.entries(l))i[p]={fields:{...i[p]?.fields,...u.fields},tableName:u.tableName||p};return i},{}),r=e.rateLimit?.storage==="database",o={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:s,session:n,account:a,...c}=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"},...s?.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},...n?.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"},...a?.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},...c,...r?o:{}}};import{Kysely as Ut,MssqlDialect as br}from"kysely";import{MysqlDialect as xt,PostgresDialect as Tt,SqliteDialect as Et}from"kysely";function vt(e){if("dialect"in e)return vt(e.dialect);if("createDriver"in e){if(e instanceof Et)return"sqlite";if(e instanceof xt)return"mysql";if(e instanceof Tt)return"postgres";if(e instanceof br)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var Q=async e=>{let t=e.database;if("db"in t)return{kysely:t.db,databaseType:t.type};if("dialect"in t)return{kysely:new Ut({dialect:t.dialect}),databaseType:t.type};let r,o=vt(t);return"createDriver"in t&&(r=t),"aggregate"in t&&(r=new Et({database:t})),"getConnection"in t&&(r=new xt({pool:t})),"connect"in t&&(r=new Tt({pool:t})),{kysely:r?new Ut({dialect:r}):null,databaseType:o}};function W(e){if(!e)return{and:null,or:null};let t={and:[],or:[]};return e.forEach(r=>{let{field:o,value:s,operator:n="=",connector:a="AND"}=r,c=i=>n.toLowerCase()==="in"?i(o,"in",Array.isArray(s)?s:[s]):i(o,n,s);a==="OR"?t.or.push(c):t.and.push(c)}),{and:t.and.length?t.and:null,or:t.or.length?t.or:null}}function re(e,t,r){for(let o in e)e[o]===0&&t[o]?.type==="boolean"&&r?.boolean&&(e[o]=!1),e[o]===1&&t[o]?.type==="boolean"&&r?.boolean&&(e[o]=!0),t[o]?.type==="date"&&(e[o]instanceof Date||(e[o]=new Date(e[o])));return e}function It(e,t){for(let r in e)typeof e[r]=="boolean"&&t?.boolean&&(e[r]=e[r]?1:0),e[r]instanceof Date&&(e[r]=e[r].toISOString());return e}var St=(e,t)=>({id:"kysely",async create(r){let{model:o,data:s,select:n}=r;t?.transform&&(s=It(s,t.transform)),t?.generateId!==void 0&&(s.id=t.generateId?t.generateId():void 0);let a=await e.insertInto(o).values(s).returningAll().executeTakeFirst();if(t?.transform){let c=t.transform.schema[o];a=c?re(s,c,t.transform):a}return n?.length&&(a=a?n.reduce((i,d)=>a?.[d]?{...i,[d]:a[d]}:i,{}):null),a},async findOne(r){let{model:o,where:s,select:n}=r,{and:a,or:c}=W(s),i=e.selectFrom(o).selectAll();a&&(i=i.where(l=>l.and(a.map(p=>p(l))))),c&&(i=i.where(l=>l.or(c.map(p=>p(l)))));let d=await i.executeTakeFirst();if(n?.length&&(d=d?n.reduce((p,u)=>d?.[u]?{...p,[u]:d[u]}:p,{}):null),t?.transform){let l=t.transform.schema[o];return d=d&&l?re(d,l,t.transform):d,d||null}return d||null},async findMany(r){let{model:o,where:s,limit:n,offset:a,sortBy:c}=r,i=e.selectFrom(o),{and:d,or:l}=W(s);d&&(i=i.where(u=>u.and(d.map(f=>f(u))))),l&&(i=i.where(u=>u.or(l.map(f=>f(u))))),i=i.limit(n||100),a&&(i=i.offset(a)),c&&(i=i.orderBy(c.field,c.direction));let p=await i.selectAll().execute();if(t?.transform){let u=t.transform.schema[o];return u?p.map(f=>re(f,u,t.transform)):p}return p},async update(r){let{model:o,where:s,update:n}=r,{and:a,or:c}=W(s);t?.transform&&(n=It(n,t.transform));let i=e.updateTable(o).set(n);a&&(i=i.where(l=>l.and(a.map(p=>p(l))))),c&&(i=i.where(l=>l.or(c.map(p=>p(l)))));let d=await i.returningAll().executeTakeFirst()||null;if(t?.transform){let l=t.transform.schema[o];return l?re(d,l,t.transform):d}return d},async delete(r){let{model:o,where:s}=r,{and:n,or:a}=W(s),c=e.deleteFrom(o);n&&(c=c.where(i=>i.and(n.map(d=>d(i))))),a&&(c=c.where(i=>i.or(a.map(d=>d(i))))),await c.execute()},async deleteMany(r){let{model:o,where:s}=r,{and:n,or:a}=W(s),c=e.deleteFrom(o);n&&(c=c.where(i=>i.and(n.map(d=>d(i))))),a&&(c=c.where(i=>i.or(a.map(d=>d(i))))),await c.execute()}});async function Ot(e){if(!e.database)throw new R("Database configuration is required");if("create"in e.database)return e.database;let{kysely:t,databaseType:r}=await Q(e);if(!t)throw new R("Failed to initialize database adapter");let o=D(e),s={};for(let n of Object.values(o))s[n.tableName]=n.fields;return St(t,{transform:{schema:s,date:!0,boolean:r==="sqlite"},generateId:"generateId"in e.database?e.database.generateId:void 0})}function fe(e,t){let r={id:t.id};for(let o in e){let s=e[o],n=t[o];r[s.fieldName||o]=n}return r}function v(e,t){if(!t)return null;let r={id:t.id};for(let[o,s]of Object.entries(e))r[o]=t[s.fieldName||o];return r}function Pt(e,t){let r=t.hooks,o=D(t.options);async function s(a,c,i){let d=a,l=o[c];for(let f of r||[]){let m=f[c]?.create?.before;if(m){let g=await m(a);if(g===!1)return null;typeof g=="object"&&"data"in g&&(d=g.data)}}let p=i?await i.fn(d):null,u=!i||i.executeMainFn?await e.create({model:l.tableName,data:{id:I(),...fe(l.fields,d)}}):p;for(let f of r||[]){let m=f[c]?.create?.after;m&&await m(u)}return v(l.fields,u)}async function n(a,c,i,d){let l=a;for(let f of r||[]){let m=f[i]?.update?.before;if(m){let g=await m(a);if(g===!1)return null;l=typeof g=="object"?g.data:g}}let p=d?await d.fn(l):null,u=!d||d.executeMainFn?await e.update({model:o[i].tableName,update:fe(o[i].fields,l),where:c}):p;for(let f of r||[]){let m=f[i]?.update?.after;m&&await m(u)}return v(o[i].fields,u)}return{createWithHooks:s,updateWithHooks:n}}var me=(e,t)=>{let r=t.options,o=r.secondaryStorage,s=r.session?.expiresIn||60*60*24*7,n=D(r),{createWithHooks:a,updateWithHooks:c}=Pt(e,t);return{createOAuthUser:async(i,d)=>{try{let l=await a(i,"user"),p=await a(d,"account");return{user:l,account:{...p,userId:l.id||i.id}}}catch(l){return console.log(l),null}},createUser:async i=>await a({id:I(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...i},"user"),createAccount:async i=>await a({id:I(),createdAt:new Date,updatedAt:new Date,...i},"account"),listSessions:async i=>await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]}),listUsers:async(i,d,l,p)=>(await e.findMany({model:n.user.tableName,limit:i,offset:d,sortBy:l,where:p})).map(f=>v(n.user.fields,f)),deleteUser:async i=>{await e.delete({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:i}]}),await e.deleteMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]}),await e.deleteMany({model:n.user.tableName,where:[{field:"id",value:i}]})},createSession:async(i,d,l,p)=>{let u=d instanceof Request?d.headers:d,f={id:I(),userId:i,expiresAt:l?q(60*60*24,"sec"):q(s,"sec"),ipAddress:d&&te(d)||"",userAgent:u?.get("user-agent")||"",...p};return await a(f,"session",o?{fn:async g=>{let y=await e.findOne({model:n.user.tableName,where:[{field:"id",value:i}]});return o.set(g.id,JSON.stringify({session:g,user:y}),s),g},executeMainFn:r.session?.storeSessionInDatabase}:void 0)},findSession:async i=>{if(o){let p=await o.get(i);if(p){let u=JSON.parse(p);return{session:{...u.session,expiresAt:new Date(u.session.expiresAt)},user:{...u.user,createdAt:new Date(u.user.createdAt),updatedAt:new Date(u.user.updatedAt)}}}}let d=await e.findOne({model:n.session.tableName,where:[{value:i,field:"id"}]});if(!d)return null;let l=await e.findOne({model:n.user.tableName,where:[{value:d.userId,field:"id"}]});return l?{session:v(n.session.fields,d),user:v(n.user.fields,l)}:null},findSessions:async i=>{if(o){let u=[];for(let f of i){let m=await o.get(f);if(m){let g=JSON.parse(m),y={session:{...g.session,expiresAt:new Date(g.session.expiresAt)},user:{...g.user,createdAt:new Date(g.user.createdAt),updatedAt:new Date(g.user.updatedAt)}};u.push(y)}}return u}let d=await e.findMany({model:n.session.tableName,where:[{field:"id",value:i,operator:"in"}]}),l=d.map(u=>u.userId),p=await e.findMany({model:n.user.tableName,where:[{field:"id",value:l,operator:"in"}]});return d.map(u=>{let f=p.find(m=>m.id===u.userId);return f?{session:v(n.session.fields,u),user:v(n.user.fields,f)}:null})},updateSession:async(i,d)=>await c(d,[{field:"id",value:i}],"session",o?{async fn(p){let u=await o.get(i),f=null;if(u){let m=JSON.parse(u);f={...m.session,...p},await o.set(i,JSON.stringify({session:f,user:m.user}),m.session.expiresAt?new Date(m.session.expiresAt).getTime():void 0)}else return null},executeMainFn:r.session?.storeSessionInDatabase}:void 0),deleteSession:async i=>{if(o){await o.delete(i),r.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:"id",value:i}]});return}await e.delete({model:n.session.tableName,where:[{field:"id",value:i}]})},deleteSessions:async i=>{if(o){let d=await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]});for(let l of d)await o.delete(l.id);r.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]});return}await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]})},findUserByEmail:async(i,d)=>{let l=await e.findOne({model:n.user.tableName,where:[{value:i.toLowerCase(),field:n.user.fields.email.fieldName||"email"}]});if(!l)return null;if(d?.includeAccounts){let p=await e.findMany({model:n.account.tableName,where:[{value:l.id,field:n.account.fields.userId.fieldName||"userId"}]});return{user:v(n.user.fields,l),accounts:p.map(u=>v(n.account.fields,u))}}return{user:v(n.user.fields,l),accounts:[]}},findUserById:async i=>await e.findOne({model:n.user.tableName,where:[{field:"id",value:i}]}),linkAccount:async i=>await a({id:I(),...i},"account"),updateUser:async(i,d)=>await c(d,[{field:"id",value:i}],"user"),updateUserByEmail:async(i,d)=>await c(d,[{field:n.user.fields.email.fieldName||"email",value:i}],"user"),updatePassword:async(i,d)=>await c({password:d},[{field:n.account.fields.userId.fieldName||"userId",value:i},{field:n.account.fields.providerId.fieldName||"providerId",value:"credential"}],"account"),findAccounts:async i=>(await e.findMany({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:i}]})).map(l=>v(n.account.fields,l)),updateAccount:async(i,d)=>await c(d,[{field:"id",value:i}],"account"),createVerificationValue:async i=>await a({id:I(),...i},"verification"),findVerificationValue:async i=>{let d=await e.findOne({model:n.verification.tableName,where:[{field:n.verification.fields.identifier.fieldName||"identifier",value:i}]});return v(n.verification.fields,d)},deleteVerificationValue:async i=>{await e.delete({model:n.verification.tableName,where:[{field:"id",value:i}]})},updateVerificationValue:async(i,d)=>await c(d,[{field:"id",value:i}],"verification")}};import{z as Ma}from"zod";import"kysely";import{defu as Ar}from"defu";var ge="better-auth-secret-123456789";var Lt=async e=>{let t=await Ot(e),r=e.plugins||[],o=kr(e),{kysely:s}=await Q(e),n=K(e.baseURL,e.basePath);if(!n)throw new R("Base URL can not be empty. Please add `BETTER_AUTH_URL` in your environment variables or pass it your auth config.");let a=e.secret||process.env.BETTER_AUTH_SECRET||process.env.AUTH_SECRET||ge;if(a===ge&&process.env.NODE_ENV==="production")throw new R("You are using the default secret. Please set `BETTER_AUTH_SECRET` or `AUTH_SECRET` in your environment variables or pass `secret` in your auth config.");e={...e,secret:a,baseURL:n?new URL(n).origin:"",basePath:e.basePath||"/api/auth",plugins:r.concat(o),emailAndPassword:{...e.emailAndPassword,enabled:e.emailAndPassword?.enabled??!1,autoSignIn:!0}};let c=_e(e),i=D(e),d=Object.keys(e.socialProviders||{}).map(u=>{let f=e.socialProviders?.[u];return f.enabled===!1?null:((!f.clientId||!f.clientSecret)&&b.warn(`Social provider ${u} is missing clientId or clientSecret`),ce[u](f))}).filter(u=>u!==null),l={appName:e.appName||"Better Auth",socialProviders:d,options:e,tables:i,trustedOrigins:Ur(e),baseURL:n,sessionConfig:{updateAge:e.session?.updateAge||24*60*60,expiresIn:e.session?.expiresIn||60*60*24*7},secret:a,rateLimit:{...e.rateLimit,enabled:e.rateLimit?.enabled??process.env.NODE_ENV!=="development",window:e.rateLimit?.window||60,max:e.rateLimit?.max||100,storage:e.rateLimit?.storage||e.secondaryStorage?"secondary-storage":"memory"},authCookies:c,logger:ie({disabled:e.logger?.disabled||!1}),db:s,uuid:I,secondaryStorage:e.secondaryStorage,password:{hash:e.emailAndPassword?.password?.hash||be,verify:e.emailAndPassword?.password?.verify||Ae,config:{minPasswordLength:e.emailAndPassword?.minPasswordLength||8,maxPasswordLength:e.emailAndPassword?.maxPasswordLength||128}},adapter:t,internalAdapter:me(t,{options:e,hooks:e.databaseHooks?[e.databaseHooks]:[]}),createAuthCookie:Ce(e)},{context:p}=Rr(l);return p};function Rr(e){let t=e.options,r=t.plugins||[],o=e,s=[];for(let n of r)if(n.init){let a=n.init(e);typeof a=="object"&&(a.options&&(a.options.databaseHooks&&s.push(a.options.databaseHooks),t=Ar(t,a.options)),a.context&&(o={...o,...a.context}))}return s.push(t.databaseHooks),o.internalAdapter=me(e.adapter,{options:t,hooks:s.filter(n=>n!==void 0)}),o.options=t,{context:o}}function kr(e){let t=[];return e.advanced?.crossSubDomainCookies?.enabled,t}function Ur(e){let t=K(e.baseURL,e.basePath);if(!t)throw new R("Base URL can not be empty. Please add `BETTER_AUTH_URL` in your environment variables or pass it in your auth config.");let r=[new URL(t).origin];e.trustedOrigins&&r.push(...e.trustedOrigins);let o=process.env.BETTER_AUTH_TRUSTED_ORIGINS;return o&&r.push(...o.split(",")),r}var Id=e=>{let t=Lt(e),{api:r}=pe(t,e);return{handler:async o=>{let s=await t,n=s.options.basePath||"/api/auth",a=new URL(o.url);if(!s.options.baseURL){let i=K(void 0,n)||`${a.origin}${n}`;s.options.baseURL=i,s.baseURL=i}if(!s.options.baseURL)return new Response("Base URL not set",{status:400});if(a.pathname===n||a.pathname===`${n}/`)return new Response("Welcome to BetterAuth",{status:200});let{handler:c}=kt(s,e);return c(o)},api:r,options:e,$Infer:{}}};export{R as BetterAuthError,N as HIDE_METADATA,Le as MissingDependencyError,Id as betterAuth,fn as capitalizeFirstLetter,Ce as createCookieGetter,ie as createLogger,H as deleteSessionCookie,I as generateId,Pe as generateState,_e as getCookies,b as logger,fo as parseCookies,po as parseSetCookieHeader,se as parseState,P as setSessionCookie};
|
|
83
|
+
</html>`,ht=h("/error",{method:"GET",metadata:N},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(lr(t),{headers:{"Content-Type":"text/html"}})});var yt=h("/ok",{method:"GET",metadata:N},async e=>e.json({ok:!0}));import{z as M}from"zod";import{APIError as V}from"better-call";var wt=()=>h("/sign-up/email",{method:"POST",query:M.object({currentURL:M.string().optional()}).optional(),body:M.record(M.string(),M.any()),use:[x]},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:o,password:s,image:n,callbackURL:a,...c}=t;if(!M.string().email().safeParse(o).success)throw new V("BAD_REQUEST",{message:"Invalid email"});let d=e.context.password.config.minPasswordLength;if(s.length<d)throw e.context.logger.error("Password is too short"),new V("BAD_REQUEST",{message:"Password is too short"});let l=e.context.password.config.maxPasswordLength;if(s.length>l)throw e.context.logger.error("Password is too long"),new V("BAD_REQUEST",{message:"Password is too long"});if((await e.context.internalAdapter.findUserByEmail(o))?.user)throw e.context.logger.info(`Sign-up attempt for existing email: ${o}`),new V("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let u=nt(e.context.options,c),f=await e.context.internalAdapter.createUser({email:o.toLowerCase(),name:r,image:n,...u,emailVerified:!1});if(!f)throw new V("BAD_REQUEST",{message:"Failed to create user"});let m=await e.context.password.hash(s);if(await e.context.internalAdapter.linkAccount({userId:f.id,providerId:"credential",accountId:f.id,password:m,expiresAt:q(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let y=await B(e.context.secret,f.email),k=`${e.context.baseURL}/verify-email?token=${y}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.(f,k,y)}if(!e.context.options.emailAndPassword.autoSignIn)return e.json({user:f,session:null},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:f,session:null}});let g=await e.context.internalAdapter.createSession(f.id,e.request);if(!g)throw new V("BAD_REQUEST",{message:"Failed to create session"});return await P(e,g.id),e.json({user:f,session:g},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:f,session:g}})});function te(e){let t="127.0.0.1";if(process.env.NODE_ENV==="test")return t;let r=["x-client-ip","x-forwarded-for","cf-connecting-ip","fastly-client-ip","x-real-ip","x-cluster-client-ip","x-forwarded","forwarded-for","forwarded"],o=e instanceof Request?e.headers:e;for(let s of r){let n=o.get(s);if(typeof n=="string"){let a=n.split(",")[0].trim();if(a)return a}}return null}function ur(e,t,r){let o=Date.now(),s=t*1e3;return o-r.lastRequest<s&&r.count>=e}function pr(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 fr(e,t){let r=Date.now(),o=t*1e3;return Math.ceil((e+o-r)/1e3)}function mr(e,t){let r=t??"rateLimit",o=e.adapter;return{get:async s=>await o.findOne({model:r,where:[{field:"key",value:s}]}),set:async(s,n,a)=>{try{a?await o.update({model:t??"rateLimit",where:[{field:"key",value:s}],update:{count:n.count,lastRequest:n.lastRequest}}):await o.create({model:t??"rateLimit",data:{key:s,count:n.count,lastRequest:n.lastRequest}})}catch(c){b.error("Error setting rate limit",c)}}}}var bt=new Map;function gr(e){return e.rateLimit.storage==="secondary-storage"?{get:async r=>{let o=await e.options.secondaryStorage?.get(r);return o?JSON.parse(o):void 0},set:async(r,o)=>{await e.options.secondaryStorage?.set?.(r,JSON.stringify(o))}}:e.rateLimit.storage==="memory"?{async get(r){return bt.get(r)},async set(r,o,s){bt.set(r,o)}}:mr(e,e.rateLimit.tableName)}async function At(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,o=e.url.replace(r,""),s=t.rateLimit.window,n=t.rateLimit.max,a=te(e)+o,i=hr().find(u=>u.pathMatcher(o));i&&(s=i.window,n=i.max);for(let u of t.options.plugins||[])if(u.rateLimit){let f=u.rateLimit.find(m=>m.pathMatcher(o));if(f){s=f.window,n=f.max;break}}if(t.rateLimit.customRules){let u=t.rateLimit.customRules[o];u&&(s=u.window,n=u.max)}let d=gr(t),l=await d.get(a),p=Date.now();if(!l)await d.set(a,{key:a,count:1,lastRequest:p});else{let u=p-l.lastRequest;if(ur(n,s,l)){let f=fr(l.lastRequest,s);return pr(f)}else u>s*1e3?await d.set(a,{...l,count:1,lastRequest:p}):await d.set(a,{...l,count:l.count+1,lastRequest:p})}}function hr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")},window:10,max:7}]}import{APIError as wa}from"better-call";function pe(e,t){let r=t.plugins?.reduce((c,i)=>({...c,...i.endpoints}),{}),o=t.plugins?.map(c=>c.middlewares?.map(i=>{let d=async l=>i.middleware({...l,context:{...e,...l.context}});return d.path=i.path,d.options=i.middleware.options,d.headers=i.middleware.headers,{path:i.path,middleware:d}})).filter(c=>c!==void 0).flat()||[],n={...{signInOAuth:tt,callbackOAuth:st,getCSRFToken:gt,getSession:le(),signOut:it,signUpEmail:wt(),signInEmail:rt,forgetPassword:at,resetPassword:ct,verifyEmail:et,sendVerificationEmail:Ye,changeEmail:mt,changePassword:ut,setPassword:pt,updateUser:lt,deleteUser:ft,forgetPasswordCallback:dt,listSessions:Ze(),revokeSession:Je,revokeSessions:Xe},...r,ok:yt,error:ht},a={};for(let[c,i]of Object.entries(n))a[c]=async(d={})=>{let l=await e;for(let f of t.plugins||[])if(f.hooks?.before){for(let m of f.hooks.before)if(m.matcher({...i,...d,context:l})){let y=await m.handler({...d,context:{...l,...d?.context}});y&&"context"in y&&(l={...l,...y.context})}}let p;try{p=await i({...d,context:{...l,...d.context}})}catch(f){if(f instanceof Rt){let m=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!m?.length)throw f;let g=new Response(JSON.stringify(f.body),{status:wr[f.status],headers:f.headers});for(let y of m||[])if(y.matcher(d)){let he=Object.assign(d,{context:{...e,returned:g}}),oe=await y.handler(he);oe&&"response"in oe&&(g=oe.response)}return g}throw f}let u=p;for(let f of t.plugins||[])if(f.hooks?.after){for(let m of f.hooks.after)if(m.matcher(d)){let y=Object.assign(d,{context:{...e,returned:u}}),k=await m.handler(y);k&&"response"in k&&(u=k.response)}}return u},a[c].path=i.path,a[c].method=i.method,a[c].options=i.options,a[c].headers=i.headers;return{api:a,middlewares:o}}var kt=(e,t)=>{let{api:r,middlewares:o}=pe(e,t),s=new URL(e.baseURL).pathname;return yr(r,{extraContext:e,basePath:s,routerMiddleware:[{path:"/**",middleware:ve},...o],async onRequest(n){for(let a of e.options.plugins||[])if(a.onRequest){let c=await a.onRequest(n,e);if(c)return c}return At(n,e)},async onResponse(n){for(let a of e.options.plugins||[])if(a.onResponse){let c=await a.onResponse(n,e);if(c)return c.response}return n},onError(n){if(t.onAPIError?.throw)throw n;if(t.onAPIError?.onError){t.onAPIError.onError(n,e);return}let a=t.logger?.verboseLogging?b:void 0;t.logger?.disabled!==!0&&(n instanceof Rt?(n.status==="INTERNAL_SERVER_ERROR"&&b.error(n),a?.error(n.message)):b?.error(n))}})};var D=e=>{let t=e.plugins?.reduce((i,d)=>{let l=d.schema;if(!l)return i;for(let[p,u]of Object.entries(l))i[p]={fields:{...i[p]?.fields,...u.fields},tableName:u.tableName||p};return i},{}),r=e.rateLimit?.storage==="database",o={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:s,session:n,account:a,...c}=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"},...s?.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},...n?.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"},...a?.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},...c,...r?o:{}}};import{Kysely as Ut,MssqlDialect as br}from"kysely";import{MysqlDialect as xt,PostgresDialect as Tt,SqliteDialect as Et}from"kysely";function vt(e){if("dialect"in e)return vt(e.dialect);if("createDriver"in e){if(e instanceof Et)return"sqlite";if(e instanceof xt)return"mysql";if(e instanceof Tt)return"postgres";if(e instanceof br)return"mssql"}return"aggregate"in e?"sqlite":"getConnection"in e?"mysql":"connect"in e?"postgres":null}var Q=async e=>{let t=e.database;if("db"in t)return{kysely:t.db,databaseType:t.type};if("dialect"in t)return{kysely:new Ut({dialect:t.dialect}),databaseType:t.type};let r,o=vt(t);return"createDriver"in t&&(r=t),"aggregate"in t&&(r=new Et({database:t})),"getConnection"in t&&(r=new xt({pool:t})),"connect"in t&&(r=new Tt({pool:t})),{kysely:r?new Ut({dialect:r}):null,databaseType:o}};function W(e){if(!e)return{and:null,or:null};let t={and:[],or:[]};return e.forEach(r=>{let{field:o,value:s,operator:n="=",connector:a="AND"}=r,c=i=>n.toLowerCase()==="in"?i(o,"in",Array.isArray(s)?s:[s]):i(o,n,s);a==="OR"?t.or.push(c):t.and.push(c)}),{and:t.and.length?t.and:null,or:t.or.length?t.or:null}}function re(e,t,r){for(let o in e)e[o]===0&&t[o]?.type==="boolean"&&r?.boolean&&(e[o]=!1),e[o]===1&&t[o]?.type==="boolean"&&r?.boolean&&(e[o]=!0),t[o]?.type==="date"&&(e[o]instanceof Date||(e[o]=new Date(e[o])));return e}function It(e,t){for(let r in e)typeof e[r]=="boolean"&&t?.boolean&&(e[r]=e[r]?1:0),e[r]instanceof Date&&(e[r]=e[r].toISOString());return e}var St=(e,t)=>({id:"kysely",async create(r){let{model:o,data:s,select:n}=r;t?.transform&&(s=It(s,t.transform)),t?.generateId!==void 0&&(s.id=t.generateId?t.generateId():void 0);let a=await e.insertInto(o).values(s).returningAll().executeTakeFirst();if(t?.transform){let c=t.transform.schema[o];a=c?re(s,c,t.transform):a}return n?.length&&(a=a?n.reduce((i,d)=>a?.[d]?{...i,[d]:a[d]}:i,{}):null),a},async findOne(r){let{model:o,where:s,select:n}=r,{and:a,or:c}=W(s),i=e.selectFrom(o).selectAll();a&&(i=i.where(l=>l.and(a.map(p=>p(l))))),c&&(i=i.where(l=>l.or(c.map(p=>p(l)))));let d=await i.executeTakeFirst();if(n?.length&&(d=d?n.reduce((p,u)=>d?.[u]?{...p,[u]:d[u]}:p,{}):null),t?.transform){let l=t.transform.schema[o];return d=d&&l?re(d,l,t.transform):d,d||null}return d||null},async findMany(r){let{model:o,where:s,limit:n,offset:a,sortBy:c}=r,i=e.selectFrom(o),{and:d,or:l}=W(s);d&&(i=i.where(u=>u.and(d.map(f=>f(u))))),l&&(i=i.where(u=>u.or(l.map(f=>f(u))))),i=i.limit(n||100),a&&(i=i.offset(a)),c&&(i=i.orderBy(c.field,c.direction));let p=await i.selectAll().execute();if(t?.transform){let u=t.transform.schema[o];return u?p.map(f=>re(f,u,t.transform)):p}return p},async update(r){let{model:o,where:s,update:n}=r,{and:a,or:c}=W(s);t?.transform&&(n=It(n,t.transform));let i=e.updateTable(o).set(n);a&&(i=i.where(l=>l.and(a.map(p=>p(l))))),c&&(i=i.where(l=>l.or(c.map(p=>p(l)))));let d=await i.returningAll().executeTakeFirst()||null;if(t?.transform){let l=t.transform.schema[o];return l?re(d,l,t.transform):d}return d},async delete(r){let{model:o,where:s}=r,{and:n,or:a}=W(s),c=e.deleteFrom(o);n&&(c=c.where(i=>i.and(n.map(d=>d(i))))),a&&(c=c.where(i=>i.or(a.map(d=>d(i))))),await c.execute()},async deleteMany(r){let{model:o,where:s}=r,{and:n,or:a}=W(s),c=e.deleteFrom(o);n&&(c=c.where(i=>i.and(n.map(d=>d(i))))),a&&(c=c.where(i=>i.or(a.map(d=>d(i))))),await c.execute()}});async function Ot(e){if(!e.database)throw new R("Database configuration is required");if("create"in e.database)return e.database;let{kysely:t,databaseType:r}=await Q(e);if(!t)throw new R("Failed to initialize database adapter");let o=D(e),s={};for(let n of Object.values(o))s[n.tableName]=n.fields;return St(t,{transform:{schema:s,date:!0,boolean:r==="sqlite"},generateId:"generateId"in e.database?e.database.generateId:void 0})}function fe(e,t){let r={id:t.id};for(let o in e){let s=e[o],n=t[o];r[s.fieldName||o]=n}return r}function v(e,t){if(!t)return null;let r={id:t.id};for(let[o,s]of Object.entries(e))r[o]=t[s.fieldName||o];return r}function Pt(e,t){let r=t.hooks,o=D(t.options);async function s(a,c,i){let d=a,l=o[c];for(let f of r||[]){let m=f[c]?.create?.before;if(m){let g=await m(a);if(g===!1)return null;typeof g=="object"&&"data"in g&&(d=g.data)}}let p=i?await i.fn(d):null,u=!i||i.executeMainFn?await e.create({model:l.tableName,data:{id:d.id||I(),...fe(l.fields,d)}}):p;for(let f of r||[]){let m=f[c]?.create?.after;m&&await m(u)}return v(l.fields,u)}async function n(a,c,i,d){let l=a;for(let f of r||[]){let m=f[i]?.update?.before;if(m){let g=await m(a);if(g===!1)return null;l=typeof g=="object"?g.data:g}}let p=d?await d.fn(l):null,u=!d||d.executeMainFn?await e.update({model:o[i].tableName,update:fe(o[i].fields,l),where:c}):p;for(let f of r||[]){let m=f[i]?.update?.after;m&&await m(u)}return v(o[i].fields,u)}return{createWithHooks:s,updateWithHooks:n}}var me=(e,t)=>{let r=t.options,o=r.secondaryStorage,s=r.session?.expiresIn||60*60*24*7,n=D(r),{createWithHooks:a,updateWithHooks:c}=Pt(e,t);return{createOAuthUser:async(i,d)=>{try{let l=await a(i,"user"),p=await a({...d,userId:l.id||i.id},"account");return{user:l,account:p}}catch(l){return console.log(l),null}},createUser:async i=>await a({id:I(),createdAt:new Date,updatedAt:new Date,emailVerified:!1,...i},"user"),createAccount:async i=>await a({id:I(),createdAt:new Date,updatedAt:new Date,...i},"account"),listSessions:async i=>await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]}),listUsers:async(i,d,l,p)=>(await e.findMany({model:n.user.tableName,limit:i,offset:d,sortBy:l,where:p})).map(f=>v(n.user.fields,f)),deleteUser:async i=>{await e.delete({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:i}]}),await e.deleteMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]}),await e.deleteMany({model:n.user.tableName,where:[{field:"id",value:i}]})},createSession:async(i,d,l,p)=>{let u=d instanceof Request?d.headers:d,f={id:I(),userId:i,expiresAt:l?q(60*60*24,"sec"):q(s,"sec"),ipAddress:d&&te(d)||"",userAgent:u?.get("user-agent")||"",...p};return await a(f,"session",o?{fn:async g=>{let y=await e.findOne({model:n.user.tableName,where:[{field:"id",value:i}]});return o.set(g.id,JSON.stringify({session:g,user:y}),s),g},executeMainFn:r.session?.storeSessionInDatabase}:void 0)},findSession:async i=>{if(o){let p=await o.get(i);if(p){let u=JSON.parse(p);return{session:{...u.session,expiresAt:new Date(u.session.expiresAt)},user:{...u.user,createdAt:new Date(u.user.createdAt),updatedAt:new Date(u.user.updatedAt)}}}}let d=await e.findOne({model:n.session.tableName,where:[{value:i,field:"id"}]});if(!d)return null;let l=await e.findOne({model:n.user.tableName,where:[{value:d.userId,field:"id"}]});return l?{session:v(n.session.fields,d),user:v(n.user.fields,l)}:null},findSessions:async i=>{if(o){let u=[];for(let f of i){let m=await o.get(f);if(m){let g=JSON.parse(m),y={session:{...g.session,expiresAt:new Date(g.session.expiresAt)},user:{...g.user,createdAt:new Date(g.user.createdAt),updatedAt:new Date(g.user.updatedAt)}};u.push(y)}}return u}let d=await e.findMany({model:n.session.tableName,where:[{field:"id",value:i,operator:"in"}]}),l=d.map(u=>u.userId),p=await e.findMany({model:n.user.tableName,where:[{field:"id",value:l,operator:"in"}]});return d.map(u=>{let f=p.find(m=>m.id===u.userId);return f?{session:v(n.session.fields,u),user:v(n.user.fields,f)}:null})},updateSession:async(i,d)=>await c(d,[{field:"id",value:i}],"session",o?{async fn(p){let u=await o.get(i),f=null;if(u){let m=JSON.parse(u);f={...m.session,...p},await o.set(i,JSON.stringify({session:f,user:m.user}),m.session.expiresAt?new Date(m.session.expiresAt).getTime():void 0)}else return null},executeMainFn:r.session?.storeSessionInDatabase}:void 0),deleteSession:async i=>{if(o){await o.delete(i),r.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:"id",value:i}]});return}await e.delete({model:n.session.tableName,where:[{field:"id",value:i}]})},deleteSessions:async i=>{if(o){let d=await e.findMany({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]});for(let l of d)await o.delete(l.id);r.session?.storeSessionInDatabase&&await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]});return}await e.delete({model:n.session.tableName,where:[{field:n.session.fields.userId.fieldName||"userId",value:i}]})},findUserByEmail:async(i,d)=>{let l=await e.findOne({model:n.user.tableName,where:[{value:i.toLowerCase(),field:n.user.fields.email.fieldName||"email"}]});if(!l)return null;if(d?.includeAccounts){let p=await e.findMany({model:n.account.tableName,where:[{value:l.id,field:n.account.fields.userId.fieldName||"userId"}]});return{user:v(n.user.fields,l),accounts:p.map(u=>v(n.account.fields,u))}}return{user:v(n.user.fields,l),accounts:[]}},findUserById:async i=>await e.findOne({model:n.user.tableName,where:[{field:"id",value:i}]}),linkAccount:async i=>await a({id:I(),...i},"account"),updateUser:async(i,d)=>await c(d,[{field:"id",value:i}],"user"),updateUserByEmail:async(i,d)=>await c(d,[{field:n.user.fields.email.fieldName||"email",value:i}],"user"),updatePassword:async(i,d)=>await c({password:d},[{field:n.account.fields.userId.fieldName||"userId",value:i},{field:n.account.fields.providerId.fieldName||"providerId",value:"credential"}],"account"),findAccounts:async i=>(await e.findMany({model:n.account.tableName,where:[{field:n.account.fields.userId.fieldName||"userId",value:i}]})).map(l=>v(n.account.fields,l)),updateAccount:async(i,d)=>await c(d,[{field:"id",value:i}],"account"),createVerificationValue:async i=>await a({id:I(),...i},"verification"),findVerificationValue:async i=>{let d=await e.findOne({model:n.verification.tableName,where:[{field:n.verification.fields.identifier.fieldName||"identifier",value:i}]});return v(n.verification.fields,d)},deleteVerificationValue:async i=>{await e.delete({model:n.verification.tableName,where:[{field:"id",value:i}]})},updateVerificationValue:async(i,d)=>await c(d,[{field:"id",value:i}],"verification")}};import{z as Ma}from"zod";import"kysely";import{defu as Ar}from"defu";var ge="better-auth-secret-123456789";var Lt=async e=>{let t=await Ot(e),r=e.plugins||[],o=kr(e),{kysely:s}=await Q(e),n=K(e.baseURL,e.basePath);if(!n)throw new R("Base URL can not be empty. Please add `BETTER_AUTH_URL` in your environment variables or pass it your auth config.");let a=e.secret||process.env.BETTER_AUTH_SECRET||process.env.AUTH_SECRET||ge;if(a===ge&&process.env.NODE_ENV==="production")throw new R("You are using the default secret. Please set `BETTER_AUTH_SECRET` or `AUTH_SECRET` in your environment variables or pass `secret` in your auth config.");e={...e,secret:a,baseURL:n?new URL(n).origin:"",basePath:e.basePath||"/api/auth",plugins:r.concat(o),emailAndPassword:{...e.emailAndPassword,enabled:e.emailAndPassword?.enabled??!1,autoSignIn:!0}};let c=_e(e),i=D(e),d=Object.keys(e.socialProviders||{}).map(u=>{let f=e.socialProviders?.[u];return f.enabled===!1?null:((!f.clientId||!f.clientSecret)&&b.warn(`Social provider ${u} is missing clientId or clientSecret`),ce[u](f))}).filter(u=>u!==null),l={appName:e.appName||"Better Auth",socialProviders:d,options:e,tables:i,trustedOrigins:Ur(e),baseURL:n,sessionConfig:{updateAge:e.session?.updateAge||24*60*60,expiresIn:e.session?.expiresIn||60*60*24*7},secret:a,rateLimit:{...e.rateLimit,enabled:e.rateLimit?.enabled??process.env.NODE_ENV!=="development",window:e.rateLimit?.window||60,max:e.rateLimit?.max||100,storage:e.rateLimit?.storage||e.secondaryStorage?"secondary-storage":"memory"},authCookies:c,logger:ie({disabled:e.logger?.disabled||!1}),db:s,uuid:I,secondaryStorage:e.secondaryStorage,password:{hash:e.emailAndPassword?.password?.hash||be,verify:e.emailAndPassword?.password?.verify||Ae,config:{minPasswordLength:e.emailAndPassword?.minPasswordLength||8,maxPasswordLength:e.emailAndPassword?.maxPasswordLength||128}},adapter:t,internalAdapter:me(t,{options:e,hooks:e.databaseHooks?[e.databaseHooks]:[]}),createAuthCookie:Ce(e)},{context:p}=Rr(l);return p};function Rr(e){let t=e.options,r=t.plugins||[],o=e,s=[];for(let n of r)if(n.init){let a=n.init(e);typeof a=="object"&&(a.options&&(a.options.databaseHooks&&s.push(a.options.databaseHooks),t=Ar(t,a.options)),a.context&&(o={...o,...a.context}))}return s.push(t.databaseHooks),o.internalAdapter=me(e.adapter,{options:t,hooks:s.filter(n=>n!==void 0)}),o.options=t,{context:o}}function kr(e){let t=[];return e.advanced?.crossSubDomainCookies?.enabled,t}function Ur(e){let t=K(e.baseURL,e.basePath);if(!t)throw new R("Base URL can not be empty. Please add `BETTER_AUTH_URL` in your environment variables or pass it in your auth config.");let r=[new URL(t).origin];e.trustedOrigins&&r.push(...e.trustedOrigins);let o=process.env.BETTER_AUTH_TRUSTED_ORIGINS;return o&&r.push(...o.split(",")),r}var Id=e=>{let t=Lt(e),{api:r}=pe(t,e);return{handler:async o=>{let s=await t,n=s.options.basePath||"/api/auth",a=new URL(o.url);if(!s.options.baseURL){let i=K(void 0,n)||`${a.origin}${n}`;s.options.baseURL=i,s.baseURL=i}if(!s.options.baseURL)return new Response("Base URL not set",{status:400});if(a.pathname===n||a.pathname===`${n}/`)return new Response("Welcome to BetterAuth",{status:200});let{handler:c}=kt(s,e);return c(o)},api:r,options:e,$Infer:{}}};export{R as BetterAuthError,N as HIDE_METADATA,Le as MissingDependencyError,Id as betterAuth,fn as capitalizeFirstLetter,Ce as createCookieGetter,ie as createLogger,H as deleteSessionCookie,I as generateId,Pe as generateState,_e as getCookies,b as logger,fo as parseCookies,po as parseSetCookieHeader,se as parseState,P as setSessionCookie};
|