better-auth 0.5.4-beta.9 → 0.6.0

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 (133) hide show
  1. package/dist/access.cjs +1 -0
  2. package/dist/access.d.cts +4 -0
  3. package/dist/access.js +1 -2
  4. package/dist/adapters/drizzle.cjs +1 -0
  5. package/dist/adapters/drizzle.d.cts +35 -0
  6. package/dist/adapters/drizzle.d.ts +3 -4
  7. package/dist/adapters/drizzle.js +1 -2
  8. package/dist/adapters/kysely.cjs +1 -0
  9. package/dist/adapters/kysely.d.cts +42 -0
  10. package/dist/adapters/kysely.d.ts +3 -4
  11. package/dist/adapters/kysely.js +1 -2
  12. package/dist/adapters/mongodb.cjs +1 -0
  13. package/dist/adapters/mongodb.d.cts +62 -0
  14. package/dist/adapters/mongodb.d.ts +3 -4
  15. package/dist/adapters/mongodb.js +1 -2
  16. package/dist/adapters/prisma.cjs +1 -0
  17. package/dist/adapters/prisma.d.cts +24 -0
  18. package/dist/adapters/prisma.d.ts +3 -4
  19. package/dist/adapters/prisma.js +1 -2
  20. package/dist/api.cjs +83 -0
  21. package/dist/api.d.cts +9 -0
  22. package/dist/api.d.ts +2 -3
  23. package/dist/api.js +4 -5
  24. package/dist/{auth-BCBgLbpW.d.ts → auth-B_JTmrax.d.ts} +767 -60
  25. package/dist/auth-CB4jyq2d.d.cts +7094 -0
  26. package/dist/client/plugins.cjs +1 -0
  27. package/dist/client/plugins.d.cts +279 -0
  28. package/dist/client/plugins.d.ts +4 -5
  29. package/dist/client/plugins.js +1 -2
  30. package/dist/client.cjs +1 -0
  31. package/dist/client.d.cts +242 -0
  32. package/dist/client.d.ts +2 -3
  33. package/dist/client.js +1 -2
  34. package/dist/cookies.cjs +1 -0
  35. package/dist/cookies.d.cts +9 -0
  36. package/dist/cookies.d.ts +2 -3
  37. package/dist/cookies.js +1 -2
  38. package/dist/crypto.cjs +1 -0
  39. package/dist/crypto.d.cts +30 -0
  40. package/dist/crypto.js +0 -1
  41. package/dist/db.cjs +4 -0
  42. package/dist/db.d.cts +53 -0
  43. package/dist/db.d.ts +4 -5
  44. package/dist/db.js +3 -4
  45. package/dist/helper-DPDj8Nix.d.cts +21 -0
  46. package/dist/hide-metadata-DEHJp1rk.d.cts +5 -0
  47. package/dist/index-BkNFhk9A.d.cts +24 -0
  48. package/dist/index-CVnbFb3t.d.cts +6297 -0
  49. package/dist/{index-CdRT9HUy.d.ts → index-m95EOBtf.d.ts} +2 -3
  50. package/dist/index.cjs +83 -0
  51. package/dist/index.d.cts +27 -0
  52. package/dist/index.d.ts +3 -4
  53. package/dist/index.js +4 -5
  54. package/dist/next-js.cjs +1 -0
  55. package/dist/next-js.d.cts +8 -0
  56. package/dist/next-js.d.ts +1 -28
  57. package/dist/next-js.js +1 -2
  58. package/dist/node.cjs +1 -0
  59. package/dist/node.d.cts +16 -0
  60. package/dist/node.d.ts +3 -4
  61. package/dist/node.js +0 -1
  62. package/dist/oauth2.cjs +1 -0
  63. package/dist/oauth2.d.cts +30 -0
  64. package/dist/oauth2.d.ts +3 -4
  65. package/dist/oauth2.js +1 -2
  66. package/dist/plugins.cjs +84 -0
  67. package/dist/plugins.d.cts +181 -0
  68. package/dist/plugins.d.ts +4 -5
  69. package/dist/plugins.js +5 -6
  70. package/dist/react.cjs +1 -0
  71. package/dist/react.d.cts +262 -0
  72. package/dist/react.d.ts +2 -3
  73. package/dist/react.js +1 -2
  74. package/dist/social.cjs +2 -0
  75. package/dist/social.d.cts +959 -0
  76. package/dist/social.d.ts +1 -2
  77. package/dist/social.js +2 -3
  78. package/dist/solid-start.cjs +1 -0
  79. package/dist/solid-start.d.cts +20 -0
  80. package/dist/solid-start.d.ts +3 -4
  81. package/dist/solid-start.js +0 -1
  82. package/dist/solid.cjs +1 -0
  83. package/dist/solid.d.cts +243 -0
  84. package/dist/solid.d.ts +2 -3
  85. package/dist/solid.js +1 -2
  86. package/dist/{state-BUSdcdLW.d.ts → state-DuyDp1Sf.d.cts} +12 -1
  87. package/dist/state-DuyDp1Sf.d.ts +28 -0
  88. package/dist/statement-Da_cxgTI.d.cts +81 -0
  89. package/dist/svelte-kit.cjs +1 -0
  90. package/dist/svelte-kit.d.cts +24 -0
  91. package/dist/svelte-kit.d.ts +3 -4
  92. package/dist/svelte-kit.js +0 -1
  93. package/dist/svelte.cjs +1 -0
  94. package/dist/svelte.d.cts +242 -0
  95. package/dist/svelte.d.ts +2 -3
  96. package/dist/svelte.js +1 -2
  97. package/dist/{schema-Dkt0LqYs.d.ts → types-BYWAbFsn.d.ts} +53 -1
  98. package/dist/types-DGbY_2Am.d.cts +157 -0
  99. package/dist/types.cjs +1 -0
  100. package/dist/types.d.cts +137 -0
  101. package/dist/types.d.ts +3 -4
  102. package/dist/types.js +0 -1
  103. package/dist/vue.cjs +1 -0
  104. package/dist/vue.d.cts +293 -0
  105. package/dist/vue.d.ts +2 -3
  106. package/dist/vue.js +1 -2
  107. package/package.json +120 -25
  108. package/dist/.DS_Store +0 -0
  109. package/dist/access.js.map +0 -1
  110. package/dist/adapters/drizzle.js.map +0 -1
  111. package/dist/adapters/kysely.js.map +0 -1
  112. package/dist/adapters/mongodb.js.map +0 -1
  113. package/dist/adapters/prisma.js.map +0 -1
  114. package/dist/api.js.map +0 -1
  115. package/dist/client/plugins.js.map +0 -1
  116. package/dist/client.js.map +0 -1
  117. package/dist/cookies.js.map +0 -1
  118. package/dist/crypto.js.map +0 -1
  119. package/dist/db.js.map +0 -1
  120. package/dist/index.js.map +0 -1
  121. package/dist/next-js.js.map +0 -1
  122. package/dist/node.js.map +0 -1
  123. package/dist/oauth2.js.map +0 -1
  124. package/dist/plugins.js.map +0 -1
  125. package/dist/react.js.map +0 -1
  126. package/dist/social.js.map +0 -1
  127. package/dist/solid-start.js.map +0 -1
  128. package/dist/solid.js.map +0 -1
  129. package/dist/svelte-kit.js.map +0 -1
  130. package/dist/svelte.js.map +0 -1
  131. package/dist/types-Xr2tzd3r.d.ts +0 -55
  132. package/dist/types.js.map +0 -1
  133. package/dist/vue.js.map +0 -1
@@ -0,0 +1 @@
1
+ "use strict";var p=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var h=(t,e)=>{for(var r in e)p(t,r,{get:e[r],enumerable:!0})},T=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of b(e))!w.call(t,s)&&s!==r&&p(t,s,{get:()=>e[s],enumerable:!(n=y(e,s))||n.enumerable});return t};var v=t=>T(p({},"__esModule",{value:!0}),t);var z={};h(z,{AccessControl:()=>c,ParsingError:()=>a,Role:()=>i,adminAc:()=>f,createAccessControl:()=>d,defaultAc:()=>m,defaultRoles:()=>A,defaultStatements:()=>S,memberAc:()=>g,ownerAc:()=>x,permissionFromString:()=>R});module.exports=v(z);var a=class extends Error{path;constructor(e,r){super(e),this.path=r}},c=class{constructor(e){this.s=e;this.statements=e}statements;newRole(e){return new i(e)}},i=class t{statements;constructor(e){this.statements=e}authorize(e,r){for(let[n,s]of Object.entries(e)){let o=this.statements[n];if(!o)return{success:!1,error:`You are not allowed to access resource: ${n}`};let l=r==="OR"?s.some(u=>o.includes(u)):s.every(u=>o.includes(u));return l?{success:l}:{success:!1,error:`unauthorized to access resource "${n}"`}}return{success:!1,error:"Not authorized"}}static fromString(e){let r=JSON.parse(e);if(typeof r!="object")throw new a("statements is not an object",".");for(let[n,s]of Object.entries(r)){if(typeof n!="string")throw new a("invalid resource identifier",n);if(!Array.isArray(s))throw new a("actions is not an array",n);for(let o=0;o<s.length;o++)if(typeof s[o]!="string")throw new a("action is not a string",`${n}[${o}]`)}return new t(r)}toString(){return JSON.stringify(this.statements)}};var d=t=>new c(t),S={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},m=d(S),f=m.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),x=m.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),g=m.newRole({organization:[],member:[],invitation:[]}),A={admin:f,owner:x,member:g};var R=t=>i.fromString(t??"");0&&(module.exports={AccessControl,ParsingError,Role,adminAc,createAccessControl,defaultAc,defaultRoles,defaultStatements,memberAc,ownerAc,permissionFromString});
@@ -0,0 +1,4 @@
1
+ export { A as AccessControl, a as AuthortizeResponse, P as ParsingError, R as Role, S as StatementsPrimitive, b as SubArray, c as Subset, d as adminAc, e as createAccessControl, f as defaultAc, g as defaultRoles, h as defaultStatements, m as memberAc, o as ownerAc } from './statement-Da_cxgTI.cjs';
2
+ export { p as permissionFromString } from './index-BkNFhk9A.cjs';
3
+ import './helper-DPDj8Nix.cjs';
4
+ import 'zod';
package/dist/access.js CHANGED
@@ -1,2 +1 @@
1
- var a=class extends Error{constructor(t,n){super(t),this.path=n}},c=class{constructor(t){this.s=t;this.statements=t}newRole(t){return new i(t)}},i=class e{constructor(t){this.statements=t}authorize(t,n){for(let[r,o]of Object.entries(t)){let s=this.statements[r];if(!s)return{success:!1,error:`You are not allowed to access resource: ${r}`};let p=n==="OR"?o.some(m=>s.includes(m)):o.every(m=>s.includes(m));return p?{success:p}:{success:!1,error:`unauthorized to access resource "${r}"`}}return{success:!1,error:"Not authorized"}}static fromString(t){let n=JSON.parse(t);if(typeof n!="object")throw new a("statements is not an object",".");for(let[r,o]of Object.entries(n)){if(typeof r!="string")throw new a("invalid resource identifier",r);if(!Array.isArray(o))throw new a("actions is not an array",r);for(let s=0;s<o.length;s++)if(typeof o[s]!="string")throw new a("action is not a string",`${r}[${s}]`)}return new e(n)}toString(){return JSON.stringify(this.statements)}};var l=e=>new c(e),d={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},u=l(d),S=u.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),f=u.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),x=u.newRole({organization:[],member:[],invitation:[]}),b={admin:S,owner:f,member:x};var T=e=>i.fromString(e!=null?e:"");export{c as AccessControl,a as ParsingError,i as Role,S as adminAc,l as createAccessControl,u as defaultAc,b as defaultRoles,d as defaultStatements,x as memberAc,f as ownerAc,T as permissionFromString};
2
- //# sourceMappingURL=access.js.map
1
+ var a=class extends Error{path;constructor(e,n){super(e),this.path=n}},c=class{constructor(e){this.s=e;this.statements=e}statements;newRole(e){return new i(e)}},i=class s{statements;constructor(e){this.statements=e}authorize(e,n){for(let[t,o]of Object.entries(e)){let r=this.statements[t];if(!r)return{success:!1,error:`You are not allowed to access resource: ${t}`};let p=n==="OR"?o.some(m=>r.includes(m)):o.every(m=>r.includes(m));return p?{success:p}:{success:!1,error:`unauthorized to access resource "${t}"`}}return{success:!1,error:"Not authorized"}}static fromString(e){let n=JSON.parse(e);if(typeof n!="object")throw new a("statements is not an object",".");for(let[t,o]of Object.entries(n)){if(typeof t!="string")throw new a("invalid resource identifier",t);if(!Array.isArray(o))throw new a("actions is not an array",t);for(let r=0;r<o.length;r++)if(typeof o[r]!="string")throw new a("action is not a string",`${t}[${r}]`)}return new s(n)}toString(){return JSON.stringify(this.statements)}};var l=s=>new c(s),d={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},u=l(d),S=u.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),f=u.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),x=u.newRole({organization:[],member:[],invitation:[]}),b={admin:S,owner:f,member:x};var T=s=>i.fromString(s??"");export{c as AccessControl,a as ParsingError,i as Role,S as adminAc,l as createAccessControl,u as defaultAc,b as defaultRoles,d as defaultStatements,x as memberAc,f as ownerAc,T as permissionFromString};
@@ -0,0 +1 @@
1
+ "use strict";var w=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var z=(t,r)=>{for(var s in r)w(t,s,{get:r[s],enumerable:!0})},A=(t,r,s,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of v(r))!P.call(t,n)&&n!==s&&w(t,n,{get:()=>r[n],enumerable:!(c=g(r,n))||c.enumerable});return t};var $=t=>A(w({},"__esModule",{value:!0}),t);var x={};z(x,{drizzleAdapter:()=>q});module.exports=$(x);var a=require("drizzle-orm");var f=class extends Error{constructor(r,s){super(r),this.name="BetterAuthError",this.message=r,this.cause=s}};function m(t,r){let s=r.schema;if(!s)throw new f("Drizzle adapter failed to initialize. Schema not found. Please provide a schema object in the adapter options object.");let c=r.usePlural?`${t}s`:t,n=s[c];if(!n)throw new f(`[# Drizzle Adapter]: The model "${t}" was not found in the schema object. Please pass the schema directly to the adapter options.`);return n}function p(t,r){if(!t)return[];if(t.length===1){let e=t[0];if(!e)return[];if(e.operator==="in"){if(!Array.isArray(e.value))throw new f(`The value for the field "${e.field}" must be an array when using the "in" operator.`);return[(0,a.inArray)(r[e.field],e.value)]}return e.operator==="contains"?[(0,a.like)(r[e.field],`%${e.value}%`)]:e.operator==="starts_with"?[(0,a.like)(r[e.field],`${e.value}%`)]:e.operator==="ends_with"?[(0,a.like)(r[e.field],`%${e.value}`)]:[(0,a.eq)(r[e.field],e.value)]}let s=t.filter(e=>e.connector==="AND"||!e.connector),c=t.filter(e=>e.connector==="OR"),n=(0,a.and)(...s.map(e=>{if(e.operator==="in"){if(!Array.isArray(e.value))throw new f(`The value for the field "${e.field}" must be an array when using the "in" operator.`);return(0,a.inArray)(r[e.field],e.value)}return(0,a.eq)(r[e.field],e.value)})),o=(0,a.or)(...c.map(e=>(0,a.eq)(r[e.field],e.value))),l=[];return s.length&&l.push(n),c.length&&l.push(o),l}var q=(t,r)=>{let s=r.schema||t._.fullSchema,c=r?.provider;return{id:"drizzle",async create(n){let{model:o,data:l}=n,e=m(o,{schema:s,usePlural:r.usePlural});r.generateId!==void 0&&(l.id=r.generateId?r.generateId():void 0);let i=t.insert(e).values(l);return c!=="mysql"?(await i.returning())[0]:(await i,(await t.select().from(e).where((0,a.eq)(e.id,n.data.id)))[0])},async findOne(n){let{model:o,where:l,select:e}=n,i=m(o,{schema:s,usePlural:r.usePlural}),d=p(l,i),u=null;return e?.length?u=await t.select(...e.map(h=>({[h]:i[h]}))).from(i).where(...d):u=await t.select().from(i).where(...d),u.length?u[0]:null},async findMany(n){let{model:o,where:l,limit:e,offset:i,sortBy:d}=n,u=m(o,{schema:s,usePlural:r.usePlural}),h=l?p(l,u):[],y=d?.direction==="desc"?a.desc:a.asc;return await t.select().from(u).limit(e||100).offset(i||0).orderBy(y(u[d?.field||"id"])).where(...h.length?h:[])},async update(n){let{model:o,where:l,update:e}=n,i=m(o,{schema:s,usePlural:r.usePlural});e.id&&(e.id=void 0);let d=p(l,i),u=t.update(i).set(e).where(...d);return c!=="mysql"?(await u.returning())[0]:(await u,(await t.select().from(i).where((0,a.eq)(i.id,n.update.id)))[0])},async delete(n){let{model:o,where:l}=n,e=m(o,{schema:s,usePlural:r.usePlural}),i=p(l,e);return(await t.delete(e).where(...i))[0]},async deleteMany(n){let{model:o,where:l}=n,e=m(o,{schema:s,usePlural:r.usePlural}),i=p(l,e);await t.delete(e).where(...i)},options:r}};0&&(module.exports={drizzleAdapter});
@@ -0,0 +1,35 @@
1
+ import { A as Adapter } from '../auth-CB4jyq2d.cjs';
2
+ import 'zod';
3
+ import 'kysely';
4
+ import '../types-DGbY_2Am.cjs';
5
+ import '../helper-DPDj8Nix.cjs';
6
+ import 'better-call';
7
+ import '../social.cjs';
8
+ import 'better-sqlite3';
9
+ import 'mysql2';
10
+
11
+ interface DrizzleAdapterOptions {
12
+ schema?: Record<string, any>;
13
+ provider: "pg" | "mysql" | "sqlite";
14
+ /**
15
+ * If the table names in the schema are plural
16
+ * set this to true. For example, if the schema
17
+ * has an object with a key "users" instead of "user"
18
+ */
19
+ usePlural?: boolean;
20
+ /**
21
+ * Custom generateId function.
22
+ *
23
+ * If not provided, nanoid will be used.
24
+ * If set to false, the database's auto generated id will be used.
25
+ *
26
+ * @default nanoid
27
+ */
28
+ generateId?: ((size?: number) => string) | false;
29
+ }
30
+ interface DB {
31
+ [key: string]: any;
32
+ }
33
+ declare const drizzleAdapter: (db: DB, options: DrizzleAdapterOptions) => Adapter;
34
+
35
+ export { type DrizzleAdapterOptions, drizzleAdapter };
@@ -1,10 +1,9 @@
1
- import { A as Adapter } from '../auth-BCBgLbpW.js';
1
+ import { A as Adapter } from '../auth-B_JTmrax.js';
2
2
  import 'zod';
3
3
  import 'kysely';
4
- import '../schema-Dkt0LqYs.js';
5
- import 'better-call';
6
- import '../types-Xr2tzd3r.js';
4
+ import '../types-BYWAbFsn.js';
7
5
  import '../helper-DPDj8Nix.js';
6
+ import 'better-call';
8
7
  import '../social.js';
9
8
  import 'better-sqlite3';
10
9
  import 'mysql2';
@@ -1,2 +1 @@
1
- import{and as v,asc as P,desc as z,eq as w,or as A,inArray as g,like as p}from"drizzle-orm";var d=class extends Error{constructor(r,l){super(r),this.name="BetterAuthError",this.message=r,this.cause=l}};function h(t,r){let l=r.schema;if(!l)throw new d("Drizzle adapter failed to initialize. Schema not found. Please provide a schema object in the adapter options object.");let c=r.usePlural?`${t}s`:t,a=l[c];if(!a)throw new d(`[# Drizzle Adapter]: The model "${t}" was not found in the schema object. Please pass the schema directly to the adapter options.`);return a}function m(t,r){if(!t)return[];if(t.length===1){let e=t[0];if(!e)return[];if(e.operator==="in"){if(!Array.isArray(e.value))throw new d(`The value for the field "${e.field}" must be an array when using the "in" operator.`);return[g(r[e.field],e.value)]}return e.operator==="contains"?[p(r[e.field],`%${e.value}%`)]:e.operator==="starts_with"?[p(r[e.field],`${e.value}%`)]:e.operator==="ends_with"?[p(r[e.field],`%${e.value}`)]:[w(r[e.field],e.value)]}let l=t.filter(e=>e.connector==="AND"||!e.connector),c=t.filter(e=>e.connector==="OR"),a=v(...l.map(e=>{if(e.operator==="in"){if(!Array.isArray(e.value))throw new d(`The value for the field "${e.field}" must be an array when using the "in" operator.`);return g(r[e.field],e.value)}return w(r[e.field],e.value)})),i=A(...c.map(e=>w(r[e.field],e.value))),s=[];return l.length&&s.push(a),c.length&&s.push(i),s}var T=(t,r)=>{let l=r.schema||t._.fullSchema,c=r==null?void 0:r.provider;return{id:"drizzle",async create(a){let{model:i,data:s}=a,e=h(i,{schema:l,usePlural:r.usePlural});r.generateId!==void 0&&(s.id=r.generateId?r.generateId():void 0);let n=t.insert(e).values(s);return c!=="mysql"?(await n.returning())[0]:(await n,(await t.select().from(e).where(w(e.id,a.data.id)))[0])},async findOne(a){let{model:i,where:s,select:e}=a,n=h(i,{schema:l,usePlural:r.usePlural}),u=m(s,n),o=null;return e!=null&&e.length?o=await t.select(...e.map(f=>({[f]:n[f]}))).from(n).where(...u):o=await t.select().from(n).where(...u),o.length?o[0]:null},async findMany(a){let{model:i,where:s,limit:e,offset:n,sortBy:u}=a,o=h(i,{schema:l,usePlural:r.usePlural}),f=s?m(s,o):[],y=(u==null?void 0:u.direction)==="desc"?z:P;return await t.select().from(o).limit(e||100).offset(n||0).orderBy(y(o[(u==null?void 0:u.field)||"id"])).where(...f.length?f:[])},async update(a){let{model:i,where:s,update:e}=a,n=h(i,{schema:l,usePlural:r.usePlural});e.id&&(e.id=void 0);let u=m(s,n),o=t.update(n).set(e).where(...u);return c!=="mysql"?(await o.returning())[0]:(await o,(await t.select().from(n).where(w(n.id,a.update.id)))[0])},async delete(a){let{model:i,where:s}=a,e=h(i,{schema:l,usePlural:r.usePlural}),n=m(s,e);return(await t.delete(e).where(...n))[0]},async deleteMany(a){let{model:i,where:s}=a,e=h(i,{schema:l,usePlural:r.usePlural}),n=m(s,e);await t.delete(e).where(...n)},options:r}};export{T as drizzleAdapter};
2
- //# sourceMappingURL=drizzle.js.map
1
+ import{and as v,asc as P,desc as z,eq as p,or as A,inArray as y,like as w}from"drizzle-orm";var d=class extends Error{constructor(r,i){super(r),this.name="BetterAuthError",this.message=r,this.cause=i}};function h(t,r){let i=r.schema;if(!i)throw new d("Drizzle adapter failed to initialize. Schema not found. Please provide a schema object in the adapter options object.");let c=r.usePlural?`${t}s`:t,n=i[c];if(!n)throw new d(`[# Drizzle Adapter]: The model "${t}" was not found in the schema object. Please pass the schema directly to the adapter options.`);return n}function m(t,r){if(!t)return[];if(t.length===1){let e=t[0];if(!e)return[];if(e.operator==="in"){if(!Array.isArray(e.value))throw new d(`The value for the field "${e.field}" must be an array when using the "in" operator.`);return[y(r[e.field],e.value)]}return e.operator==="contains"?[w(r[e.field],`%${e.value}%`)]:e.operator==="starts_with"?[w(r[e.field],`${e.value}%`)]:e.operator==="ends_with"?[w(r[e.field],`%${e.value}`)]:[p(r[e.field],e.value)]}let i=t.filter(e=>e.connector==="AND"||!e.connector),c=t.filter(e=>e.connector==="OR"),n=v(...i.map(e=>{if(e.operator==="in"){if(!Array.isArray(e.value))throw new d(`The value for the field "${e.field}" must be an array when using the "in" operator.`);return y(r[e.field],e.value)}return p(r[e.field],e.value)})),l=A(...c.map(e=>p(r[e.field],e.value))),s=[];return i.length&&s.push(n),c.length&&s.push(l),s}var S=(t,r)=>{let i=r.schema||t._.fullSchema,c=r?.provider;return{id:"drizzle",async create(n){let{model:l,data:s}=n,e=h(l,{schema:i,usePlural:r.usePlural});r.generateId!==void 0&&(s.id=r.generateId?r.generateId():void 0);let a=t.insert(e).values(s);return c!=="mysql"?(await a.returning())[0]:(await a,(await t.select().from(e).where(p(e.id,n.data.id)))[0])},async findOne(n){let{model:l,where:s,select:e}=n,a=h(l,{schema:i,usePlural:r.usePlural}),u=m(s,a),o=null;return e?.length?o=await t.select(...e.map(f=>({[f]:a[f]}))).from(a).where(...u):o=await t.select().from(a).where(...u),o.length?o[0]:null},async findMany(n){let{model:l,where:s,limit:e,offset:a,sortBy:u}=n,o=h(l,{schema:i,usePlural:r.usePlural}),f=s?m(s,o):[],g=u?.direction==="desc"?z:P;return await t.select().from(o).limit(e||100).offset(a||0).orderBy(g(o[u?.field||"id"])).where(...f.length?f:[])},async update(n){let{model:l,where:s,update:e}=n,a=h(l,{schema:i,usePlural:r.usePlural});e.id&&(e.id=void 0);let u=m(s,a),o=t.update(a).set(e).where(...u);return c!=="mysql"?(await o.returning())[0]:(await o,(await t.select().from(a).where(p(a.id,n.update.id)))[0])},async delete(n){let{model:l,where:s}=n,e=h(l,{schema:i,usePlural:r.usePlural}),a=m(s,e);return(await t.delete(e).where(...a))[0]},async deleteMany(n){let{model:l,where:s}=n,e=h(l,{schema:i,usePlural:r.usePlural}),a=m(s,e);await t.delete(e).where(...a)},options:r}};export{S as drizzleAdapter};
@@ -0,0 +1 @@
1
+ "use strict";var A=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var F=(t,e)=>{for(var a in e)A(t,a,{get:e[a],enumerable:!0})},T=(t,e,a,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of q(e))!x.call(t,s)&&s!==a&&A(t,s,{get:()=>e[s],enumerable:!(n=g(e,s))||n.enumerable});return t};var K=t=>T(A({},"__esModule",{value:!0}),t);var I={};F(I,{createKyselyAdapter:()=>C,kyselyAdapter:()=>O});module.exports=K(I);var p=require("kysely"),c=require("kysely");function D(t){if("dialect"in t)return D(t.dialect);if("createDriver"in t){if(t instanceof c.SqliteDialect)return"sqlite";if(t instanceof c.MysqlDialect)return"mysql";if(t instanceof c.PostgresDialect)return"postgres";if(t instanceof p.MssqlDialect)return"mssql"}return"aggregate"in t?"sqlite":"getConnection"in t?"mysql":"connect"in t?"postgres":null}var C=async t=>{let e=t.database;if("db"in e)return{kysely:e.db,databaseType:e.type};if("dialect"in e)return{kysely:new p.Kysely({dialect:e.dialect}),databaseType:e.type};let a,n=D(e);return"createDriver"in e&&(a=e),"aggregate"in e&&(a=new c.SqliteDialect({database:e})),"getConnection"in e&&(a=new c.MysqlDialect({pool:e})),"connect"in e&&(a=new c.PostgresDialect({pool:e})),{kysely:a?new p.Kysely({dialect:a}):null,databaseType:n}};function h(t){if(!t)return{and:null,or:null};let e={and:[],or:[]};return t.forEach(a=>{let{field:n,value:s,operator:l="=",connector:f="AND"}=a,i=r=>l.toLowerCase()==="in"?r(n,"in",Array.isArray(s)?s:[s]):l==="contains"?r(n,"like",`%${s}%`):l==="starts_with"?r(n,"like",`${s}%`):l==="ends_with"?r(n,"like",`%${s}`):r(n,l,s);f==="OR"?e.or.push(i):e.and.push(i)}),{and:e.and.length?e.and:null,or:e.or.length?e.or:null}}function w(t,e,a){for(let n in t){let s=e[n]||Object.values(e).find(l=>l.fieldName===n);t[n]===0&&s.type==="boolean"&&a?.boolean&&(t[n]=!1),t[n]===1&&s?.type==="boolean"&&a?.boolean&&(t[n]=!0),s?.type==="date"&&(t[n]instanceof Date||(t[n]=new Date(t[n])))}return t}function k(t,e){for(let a in t)typeof t[a]=="boolean"&&e?.boolean&&(t[a]=t[a]?1:0),t[a]instanceof Date&&(t[a]=t[a].toISOString());return t}var O=(t,e)=>({id:"kysely",async create(a){let{model:n,data:s,select:l}=a;e?.transform&&(s=k(s,e.transform)),e?.generateId!==void 0&&(s.id=e.generateId?e.generateId():void 0);let f=await t.insertInto(n).values(s).returningAll().executeTakeFirst();if(e?.transform){let i=e.transform.schema[n];f=i?w(s,i,e.transform):f}return l?.length&&(f=f?l.reduce((r,o)=>f?.[o]?{...r,[o]:f[o]}:r,{}):null),f},async findOne(a){let{model:n,where:s,select:l}=a,{and:f,or:i}=h(s),r=t.selectFrom(n).selectAll();f&&(r=r.where(y=>y.and(f.map(d=>d(y))))),i&&(r=r.where(y=>y.or(i.map(d=>d(y)))));let o=await r.executeTakeFirst();if(l?.length&&(o=o?l.reduce((d,u)=>o?.[u]?{...d,[u]:o[u]}:d,{}):null),e?.transform){let y=e.transform.schema[n];return o=o&&y?w(o,y,e.transform):o,o||null}return o||null},async findMany(a){let{model:n,where:s,limit:l,offset:f,sortBy:i}=a,r=t.selectFrom(n),{and:o,or:y}=h(s);o&&(r=r.where(u=>u.and(o.map(m=>m(u))))),y&&(r=r.where(u=>u.or(y.map(m=>m(u))))),r=r.limit(l||100),f&&(r=r.offset(f)),i&&(r=r.orderBy(i.field,i.direction));let d=await r.selectAll().execute();if(e?.transform){let u=e.transform.schema[n];return u?d.map(m=>w(m,u,e.transform)):d}return d},async update(a){let{model:n,where:s,update:l}=a,{and:f,or:i}=h(s);e?.transform&&(l=k(l,e.transform)),l.id&&(l.id=void 0);let r=t.updateTable(n).set(l);f&&(r=r.where(y=>y.and(f.map(d=>d(y))))),i&&(r=r.where(y=>y.or(i.map(d=>d(y)))));let o=await r.returningAll().executeTakeFirst()||null;if(e?.transform){let y=e.transform.schema[n];return y?w(o,y,e.transform):o}return o},async delete(a){let{model:n,where:s}=a,{and:l,or:f}=h(s),i=t.deleteFrom(n);l&&(i=i.where(r=>r.and(l.map(o=>o(r))))),f&&(i=i.where(r=>r.or(f.map(o=>o(r))))),await i.execute()},async deleteMany(a){let{model:n,where:s}=a,{and:l,or:f}=h(s),i=t.deleteFrom(n);l&&(i=i.where(r=>r.and(l.map(o=>o(r))))),f&&(i=i.where(r=>r.or(f.map(o=>o(r))))),await i.execute()}});0&&(module.exports={createKyselyAdapter,kyselyAdapter});
@@ -0,0 +1,42 @@
1
+ import { Kysely } from 'kysely';
2
+ import { B as BetterAuthOptions, K as KyselyDatabaseType, F as FieldAttribute, A as Adapter } from '../auth-CB4jyq2d.cjs';
3
+ import 'zod';
4
+ import '../types-DGbY_2Am.cjs';
5
+ import '../helper-DPDj8Nix.cjs';
6
+ import 'better-call';
7
+ import '../social.cjs';
8
+ import 'better-sqlite3';
9
+ import 'mysql2';
10
+
11
+ declare const createKyselyAdapter: (config: BetterAuthOptions) => Promise<{
12
+ kysely: Kysely<any>;
13
+ databaseType: KyselyDatabaseType;
14
+ } | {
15
+ kysely: Kysely<unknown> | null;
16
+ databaseType: KyselyDatabaseType | null;
17
+ }>;
18
+
19
+ interface KyselyAdapterConfig {
20
+ /**
21
+ * Transform dates and booleans for sqlite.
22
+ */
23
+ transform?: {
24
+ schema: {
25
+ [table: string]: Record<string, FieldAttribute>;
26
+ };
27
+ boolean: boolean;
28
+ date: boolean;
29
+ };
30
+ /**
31
+ * Custom generateId function.
32
+ *
33
+ * If not provided, nanoid will be used.
34
+ * If set to false, the database's auto generated id will be used.
35
+ *
36
+ * @default nanoid
37
+ */
38
+ generateId?: ((size?: number) => string) | false;
39
+ }
40
+ declare const kyselyAdapter: (db: Kysely<any>, config?: KyselyAdapterConfig) => Adapter;
41
+
42
+ export { type KyselyAdapterConfig, KyselyDatabaseType, createKyselyAdapter, kyselyAdapter };
@@ -1,10 +1,9 @@
1
1
  import { Kysely } from 'kysely';
2
- import { B as BetterAuthOptions, K as KyselyDatabaseType, F as FieldAttribute, A as Adapter } from '../auth-BCBgLbpW.js';
2
+ import { B as BetterAuthOptions, K as KyselyDatabaseType, F as FieldAttribute, A as Adapter } from '../auth-B_JTmrax.js';
3
3
  import 'zod';
4
- import '../schema-Dkt0LqYs.js';
5
- import 'better-call';
6
- import '../types-Xr2tzd3r.js';
4
+ import '../types-BYWAbFsn.js';
7
5
  import '../helper-DPDj8Nix.js';
6
+ import 'better-call';
8
7
  import '../social.js';
9
8
  import 'better-sqlite3';
10
9
  import 'mysql2';
@@ -1,2 +1 @@
1
- import{Kysely as h,MssqlDialect as x}from"kysely";import{MysqlDialect as w,PostgresDialect as A,SqliteDialect as D}from"kysely";function k(r){if("dialect"in r)return k(r.dialect);if("createDriver"in r){if(r instanceof D)return"sqlite";if(r instanceof w)return"mysql";if(r instanceof A)return"postgres";if(r instanceof x)return"mssql"}return"aggregate"in r?"sqlite":"getConnection"in r?"mysql":"connect"in r?"postgres":null}var K=async r=>{let e=r.database;if("db"in e)return{kysely:e.db,databaseType:e.type};if("dialect"in e)return{kysely:new h({dialect:e.dialect}),databaseType:e.type};let a,n=k(e);return"createDriver"in e&&(a=e),"aggregate"in e&&(a=new D({database:e})),"getConnection"in e&&(a=new w({pool:e})),"connect"in e&&(a=new A({pool:e})),{kysely:a?new h({dialect:a}):null,databaseType:n}};function f(r){if(!r)return{and:null,or:null};let e={and:[],or:[]};return r.forEach(a=>{let{field:n,value:s,operator:i="=",connector:y="AND"}=a,l=t=>i.toLowerCase()==="in"?t(n,"in",Array.isArray(s)?s:[s]):i==="contains"?t(n,"like",`%${s}%`):i==="starts_with"?t(n,"like",`${s}%`):i==="ends_with"?t(n,"like",`%${s}`):t(n,i,s);y==="OR"?e.or.push(l):e.and.push(l)}),{and:e.and.length?e.and:null,or:e.or.length?e.or:null}}function c(r,e,a){for(let n in r){let s=e[n]||Object.values(e).find(i=>i.fieldName===n);r[n]===0&&s.type==="boolean"&&(a!=null&&a.boolean)&&(r[n]=!1),r[n]===1&&(s==null?void 0:s.type)==="boolean"&&(a!=null&&a.boolean)&&(r[n]=!0),(s==null?void 0:s.type)==="date"&&(r[n]instanceof Date||(r[n]=new Date(r[n])))}return r}function q(r,e){for(let a in r)typeof r[a]=="boolean"&&(e!=null&&e.boolean)&&(r[a]=r[a]?1:0),r[a]instanceof Date&&(r[a]=r[a].toISOString());return r}var O=(r,e)=>({id:"kysely",async create(a){let{model:n,data:s,select:i}=a;e!=null&&e.transform&&(s=q(s,e.transform)),(e==null?void 0:e.generateId)!==void 0&&(s.id=e.generateId?e.generateId():void 0);let y=await r.insertInto(n).values(s).returningAll().executeTakeFirst();if(e!=null&&e.transform){let l=e.transform.schema[n];y=l?c(s,l,e.transform):y}return i!=null&&i.length&&(y=y?i.reduce((t,o)=>y!=null&&y[o]?{...t,[o]:y[o]}:t,{}):null),y},async findOne(a){let{model:n,where:s,select:i}=a,{and:y,or:l}=f(s),t=r.selectFrom(n).selectAll();y&&(t=t.where(u=>u.and(y.map(d=>d(u))))),l&&(t=t.where(u=>u.or(l.map(d=>d(u)))));let o=await t.executeTakeFirst();if(i!=null&&i.length&&(o=o?i.reduce((d,p)=>o!=null&&o[p]?{...d,[p]:o[p]}:d,{}):null),e!=null&&e.transform){let u=e.transform.schema[n];return o=o&&u?c(o,u,e.transform):o,o||null}return o||null},async findMany(a){let{model:n,where:s,limit:i,offset:y,sortBy:l}=a,t=r.selectFrom(n),{and:o,or:u}=f(s);o&&(t=t.where(p=>p.and(o.map(m=>m(p))))),u&&(t=t.where(p=>p.or(u.map(m=>m(p))))),t=t.limit(i||100),y&&(t=t.offset(y)),l&&(t=t.orderBy(l.field,l.direction));let d=await t.selectAll().execute();if(e!=null&&e.transform){let p=e.transform.schema[n];return p?d.map(m=>c(m,p,e.transform)):d}return d},async update(a){let{model:n,where:s,update:i}=a,{and:y,or:l}=f(s);e!=null&&e.transform&&(i=q(i,e.transform)),i.id&&(i.id=void 0);let t=r.updateTable(n).set(i);y&&(t=t.where(u=>u.and(y.map(d=>d(u))))),l&&(t=t.where(u=>u.or(l.map(d=>d(u)))));let o=await t.returningAll().executeTakeFirst()||null;if(e!=null&&e.transform){let u=e.transform.schema[n];return u?c(o,u,e.transform):o}return o},async delete(a){let{model:n,where:s}=a,{and:i,or:y}=f(s),l=r.deleteFrom(n);i&&(l=l.where(t=>t.and(i.map(o=>o(t))))),y&&(l=l.where(t=>t.or(y.map(o=>o(t))))),await l.execute()},async deleteMany(a){let{model:n,where:s}=a,{and:i,or:y}=f(s),l=r.deleteFrom(n);i&&(l=l.where(t=>t.and(i.map(o=>o(t))))),y&&(l=l.where(t=>t.or(y.map(o=>o(t))))),await l.execute()}});export{K as createKyselyAdapter,O as kyselyAdapter};
2
- //# sourceMappingURL=kysely.js.map
1
+ import{Kysely as h,MssqlDialect as q}from"kysely";import{MysqlDialect as w,PostgresDialect as A,SqliteDialect as D}from"kysely";function k(r){if("dialect"in r)return k(r.dialect);if("createDriver"in r){if(r instanceof D)return"sqlite";if(r instanceof w)return"mysql";if(r instanceof A)return"postgres";if(r instanceof q)return"mssql"}return"aggregate"in r?"sqlite":"getConnection"in r?"mysql":"connect"in r?"postgres":null}var T=async r=>{let e=r.database;if("db"in e)return{kysely:e.db,databaseType:e.type};if("dialect"in e)return{kysely:new h({dialect:e.dialect}),databaseType:e.type};let a,n=k(e);return"createDriver"in e&&(a=e),"aggregate"in e&&(a=new D({database:e})),"getConnection"in e&&(a=new w({pool:e})),"connect"in e&&(a=new A({pool:e})),{kysely:a?new h({dialect:a}):null,databaseType:n}};function m(r){if(!r)return{and:null,or:null};let e={and:[],or:[]};return r.forEach(a=>{let{field:n,value:i,operator:l="=",connector:f="AND"}=a,o=t=>l.toLowerCase()==="in"?t(n,"in",Array.isArray(i)?i:[i]):l==="contains"?t(n,"like",`%${i}%`):l==="starts_with"?t(n,"like",`${i}%`):l==="ends_with"?t(n,"like",`%${i}`):t(n,l,i);f==="OR"?e.or.push(o):e.and.push(o)}),{and:e.and.length?e.and:null,or:e.or.length?e.or:null}}function p(r,e,a){for(let n in r){let i=e[n]||Object.values(e).find(l=>l.fieldName===n);r[n]===0&&i.type==="boolean"&&a?.boolean&&(r[n]=!1),r[n]===1&&i?.type==="boolean"&&a?.boolean&&(r[n]=!0),i?.type==="date"&&(r[n]instanceof Date||(r[n]=new Date(r[n])))}return r}function g(r,e){for(let a in r)typeof r[a]=="boolean"&&e?.boolean&&(r[a]=r[a]?1:0),r[a]instanceof Date&&(r[a]=r[a].toISOString());return r}var C=(r,e)=>({id:"kysely",async create(a){let{model:n,data:i,select:l}=a;e?.transform&&(i=g(i,e.transform)),e?.generateId!==void 0&&(i.id=e.generateId?e.generateId():void 0);let f=await r.insertInto(n).values(i).returningAll().executeTakeFirst();if(e?.transform){let o=e.transform.schema[n];f=o?p(i,o,e.transform):f}return l?.length&&(f=f?l.reduce((t,s)=>f?.[s]?{...t,[s]:f[s]}:t,{}):null),f},async findOne(a){let{model:n,where:i,select:l}=a,{and:f,or:o}=m(i),t=r.selectFrom(n).selectAll();f&&(t=t.where(y=>y.and(f.map(d=>d(y))))),o&&(t=t.where(y=>y.or(o.map(d=>d(y)))));let s=await t.executeTakeFirst();if(l?.length&&(s=s?l.reduce((d,u)=>s?.[u]?{...d,[u]:s[u]}:d,{}):null),e?.transform){let y=e.transform.schema[n];return s=s&&y?p(s,y,e.transform):s,s||null}return s||null},async findMany(a){let{model:n,where:i,limit:l,offset:f,sortBy:o}=a,t=r.selectFrom(n),{and:s,or:y}=m(i);s&&(t=t.where(u=>u.and(s.map(c=>c(u))))),y&&(t=t.where(u=>u.or(y.map(c=>c(u))))),t=t.limit(l||100),f&&(t=t.offset(f)),o&&(t=t.orderBy(o.field,o.direction));let d=await t.selectAll().execute();if(e?.transform){let u=e.transform.schema[n];return u?d.map(c=>p(c,u,e.transform)):d}return d},async update(a){let{model:n,where:i,update:l}=a,{and:f,or:o}=m(i);e?.transform&&(l=g(l,e.transform)),l.id&&(l.id=void 0);let t=r.updateTable(n).set(l);f&&(t=t.where(y=>y.and(f.map(d=>d(y))))),o&&(t=t.where(y=>y.or(o.map(d=>d(y)))));let s=await t.returningAll().executeTakeFirst()||null;if(e?.transform){let y=e.transform.schema[n];return y?p(s,y,e.transform):s}return s},async delete(a){let{model:n,where:i}=a,{and:l,or:f}=m(i),o=r.deleteFrom(n);l&&(o=o.where(t=>t.and(l.map(s=>s(t))))),f&&(o=o.where(t=>t.or(f.map(s=>s(t))))),await o.execute()},async deleteMany(a){let{model:n,where:i}=a,{and:l,or:f}=m(i),o=r.deleteFrom(n);l&&(o=o.where(t=>t.and(l.map(s=>s(t))))),f&&(o=o.where(t=>t.or(f.map(s=>s(t))))),await o.execute()}});export{T as createKyselyAdapter,C as kyselyAdapter};
@@ -0,0 +1 @@
1
+ "use strict";var w=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var h=(a,s)=>{for(var o in s)w(a,o,{get:s[o],enumerable:!0})},y=(a,s,o,i)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of m(s))!p.call(a,t)&&t!==o&&w(a,t,{get:()=>s[t],enumerable:!(i=g(s,t))||i.enumerable});return a};var b=a=>y(w({},"__esModule",{value:!0}),a);var A={};h(A,{mongodbAdapter:()=>k});module.exports=b(A);function u(a){if(!a)return{};let s=a.map(r=>{let{field:n,value:e,operator:d="eq",connector:l="AND"}=r,c;switch(d.toLowerCase()){case"eq":c={[n]:e};break;case"in":c={[n]:{$in:Array.isArray(e)?e:[e]}};break;case"gt":c={[n]:{$gt:e}};break;case"gte":c={[n]:{$gte:e}};break;case"lt":c={[n]:{$lt:e}};break;case"lte":c={[n]:{$lte:e}};break;case"ne":c={[n]:{$ne:e}};break;case"contains":c={[n]:{$regex:`.*${e}.*`}};break;case"starts_with":c={[n]:{$regex:`${e}.*`}};break;case"ends_with":c={[n]:{$regex:`.*${e}`}};break;default:throw new Error(`Unsupported operator: ${d}`)}return{condition:c,connector:l}}),o=s.filter(r=>r.connector==="AND").map(r=>r.condition),i=s.filter(r=>r.connector==="OR").map(r=>r.condition),t={};return o.length&&(t={...t,$and:o}),i.length&&(t={...t,$or:i}),t}function f(a){let{_id:s,...o}=a;return o}function $(a){return a.reduce((o,i)=>(o[i]=1,o),{})}var k=(a,s)=>{let o=a,i=t=>s?.usePlural?`${t}s`:t;return{id:"mongodb",async create(t){let{model:r,data:n}=t;s?.generateId!==void 0&&(n.id=s.generateId?s.generateId():void 0);let d=(await o.collection(i(r)).insertOne({...n})).insertedId,l={...n,id:d};return f(l)},async findOne(t){let{model:r,where:n,select:e}=t,d=u(n),l={};e&&(l=$(e));let c=await o.collection(i(r)).findOne(d,{projection:l});return c?f(c):null},async findMany(t){let{model:r,where:n,limit:e,offset:d,sortBy:l}=t,c=u(n);return(await o.collection(i(r)).find(c).skip(d||0).limit(e||100).sort(l?.field||"id",l?.direction==="desc"?-1:1).toArray()).map(f)},async update(t){let{model:r,where:n,update:e}=t,d=u(n);if(e.id&&(e.id=void 0),n.length===1){let c=await o.collection(i(r)).findOneAndUpdate(d,{$set:e},{returnDocument:"after"});return f(c)}let l=await o.collection(i(r)).updateMany(d,{$set:e});return{}},async delete(t){let{model:r,where:n}=t,e=u(n),d=await o.collection(i(r)).findOneAndDelete(e)},async deleteMany(t){let{model:r,where:n}=t,e=u(n),d=await o.collection(i(r)).deleteMany(e)}}};0&&(module.exports={mongodbAdapter});
@@ -0,0 +1,62 @@
1
+ import { Db } from 'mongodb';
2
+ import { W as Where } from '../auth-CB4jyq2d.cjs';
3
+ import 'zod';
4
+ import 'kysely';
5
+ import '../types-DGbY_2Am.cjs';
6
+ import '../helper-DPDj8Nix.cjs';
7
+ import 'better-call';
8
+ import '../social.cjs';
9
+ import 'better-sqlite3';
10
+ import 'mysql2';
11
+
12
+ declare const mongodbAdapter: (mongo: Db, opts?: {
13
+ usePlural?: boolean;
14
+ /**
15
+ * Custom generateId function.
16
+ *
17
+ * If not provided, nanoid will be used.
18
+ * If set to false, the database's auto generated id will be used.
19
+ *
20
+ * @default nanoid
21
+ */
22
+ generateId?: ((size?: number) => string) | false;
23
+ }) => {
24
+ id: string;
25
+ create<T extends {
26
+ id?: string;
27
+ } & Record<string, any>, R = T>(data: {
28
+ model: string;
29
+ data: T;
30
+ select?: string[];
31
+ }): Promise<any>;
32
+ findOne<T>(data: {
33
+ model: string;
34
+ where: Where[];
35
+ select?: string[];
36
+ }): Promise<any>;
37
+ findMany<T>(data: {
38
+ model: string;
39
+ where?: Where[];
40
+ limit?: number;
41
+ sortBy?: {
42
+ field: string;
43
+ direction: "asc" | "desc";
44
+ };
45
+ offset?: number;
46
+ }): Promise<any[]>;
47
+ update<T>(data: {
48
+ model: string;
49
+ where: Where[];
50
+ update: Record<string, any>;
51
+ }): Promise<any>;
52
+ delete<T>(data: {
53
+ model: string;
54
+ where: Where[];
55
+ }): Promise<void>;
56
+ deleteMany(data: {
57
+ model: string;
58
+ where: Where[];
59
+ }): Promise<void>;
60
+ };
61
+
62
+ export { mongodbAdapter };
@@ -1,11 +1,10 @@
1
1
  import { Db } from 'mongodb';
2
- import { W as Where } from '../auth-BCBgLbpW.js';
2
+ import { W as Where } from '../auth-B_JTmrax.js';
3
3
  import 'zod';
4
4
  import 'kysely';
5
- import '../schema-Dkt0LqYs.js';
6
- import 'better-call';
7
- import '../types-Xr2tzd3r.js';
5
+ import '../types-BYWAbFsn.js';
8
6
  import '../helper-DPDj8Nix.js';
7
+ import 'better-call';
9
8
  import '../social.js';
10
9
  import 'better-sqlite3';
11
10
  import 'mysql2';
@@ -1,2 +1 @@
1
- function u(l){if(!l)return{};let a=l.map(t=>{let{field:n,value:e,operator:i="eq",connector:s="AND"}=t,o;switch(i.toLowerCase()){case"eq":o={[n]:e};break;case"in":o={[n]:{$in:Array.isArray(e)?e:[e]}};break;case"gt":o={[n]:{$gt:e}};break;case"gte":o={[n]:{$gte:e}};break;case"lt":o={[n]:{$lt:e}};break;case"lte":o={[n]:{$lte:e}};break;case"ne":o={[n]:{$ne:e}};break;case"contains":o={[n]:{$regex:`.*${e}.*`}};break;case"starts_with":o={[n]:{$regex:`${e}.*`}};break;case"ends_with":o={[n]:{$regex:`.*${e}`}};break;default:throw new Error(`Unsupported operator: ${i}`)}return{condition:o,connector:s}}),c=a.filter(t=>t.connector==="AND").map(t=>t.condition),d=a.filter(t=>t.connector==="OR").map(t=>t.condition),r={};return c.length&&(r={...r,$and:c}),d.length&&(r={...r,$or:d}),r}function f(l){let{_id:a,...c}=l;return c}function w(l){return l.reduce((c,d)=>(c[d]=1,c),{})}var m=(l,a)=>{let c=l,d=r=>a!=null&&a.usePlural?`${r}s`:r;return{id:"mongodb",async create(r){let{model:t,data:n}=r;(a==null?void 0:a.generateId)!==void 0&&(n.id=a.generateId?a.generateId():void 0);let i=(await c.collection(d(t)).insertOne({...n})).insertedId,s={...n,id:i};return f(s)},async findOne(r){let{model:t,where:n,select:e}=r,i=u(n),s={};e&&(s=w(e));let o=await c.collection(d(t)).findOne(i,{projection:s});return o?f(o):null},async findMany(r){let{model:t,where:n,limit:e,offset:i,sortBy:s}=r,o=u(n);return(await c.collection(d(t)).find(o).skip(i||0).limit(e||100).sort((s==null?void 0:s.field)||"id",(s==null?void 0:s.direction)==="desc"?-1:1).toArray()).map(f)},async update(r){let{model:t,where:n,update:e}=r,i=u(n);if(e.id&&(e.id=void 0),n.length===1){let o=await c.collection(d(t)).findOneAndUpdate(i,{$set:e},{returnDocument:"after"});return f(o)}let s=await c.collection(d(t)).updateMany(i,{$set:e});return{}},async delete(r){let{model:t,where:n}=r,e=u(n),i=await c.collection(d(t)).findOneAndDelete(e)},async deleteMany(r){let{model:t,where:n}=r,e=u(n),i=await c.collection(d(t)).deleteMany(e)}}};export{m as mongodbAdapter};
2
- //# sourceMappingURL=mongodb.js.map
1
+ function u(l){if(!l)return{};let d=l.map(n=>{let{field:t,value:e,operator:c="eq",connector:i="AND"}=n,o;switch(c.toLowerCase()){case"eq":o={[t]:e};break;case"in":o={[t]:{$in:Array.isArray(e)?e:[e]}};break;case"gt":o={[t]:{$gt:e}};break;case"gte":o={[t]:{$gte:e}};break;case"lt":o={[t]:{$lt:e}};break;case"lte":o={[t]:{$lte:e}};break;case"ne":o={[t]:{$ne:e}};break;case"contains":o={[t]:{$regex:`.*${e}.*`}};break;case"starts_with":o={[t]:{$regex:`${e}.*`}};break;case"ends_with":o={[t]:{$regex:`.*${e}`}};break;default:throw new Error(`Unsupported operator: ${c}`)}return{condition:o,connector:i}}),s=d.filter(n=>n.connector==="AND").map(n=>n.condition),a=d.filter(n=>n.connector==="OR").map(n=>n.condition),r={};return s.length&&(r={...r,$and:s}),a.length&&(r={...r,$or:a}),r}function f(l){let{_id:d,...s}=l;return s}function w(l){return l.reduce((s,a)=>(s[a]=1,s),{})}var m=(l,d)=>{let s=l,a=r=>d?.usePlural?`${r}s`:r;return{id:"mongodb",async create(r){let{model:n,data:t}=r;d?.generateId!==void 0&&(t.id=d.generateId?d.generateId():void 0);let c=(await s.collection(a(n)).insertOne({...t})).insertedId,i={...t,id:c};return f(i)},async findOne(r){let{model:n,where:t,select:e}=r,c=u(t),i={};e&&(i=w(e));let o=await s.collection(a(n)).findOne(c,{projection:i});return o?f(o):null},async findMany(r){let{model:n,where:t,limit:e,offset:c,sortBy:i}=r,o=u(t);return(await s.collection(a(n)).find(o).skip(c||0).limit(e||100).sort(i?.field||"id",i?.direction==="desc"?-1:1).toArray()).map(f)},async update(r){let{model:n,where:t,update:e}=r,c=u(t);if(e.id&&(e.id=void 0),t.length===1){let o=await s.collection(a(n)).findOneAndUpdate(c,{$set:e},{returnDocument:"after"});return f(o)}let i=await s.collection(a(n)).updateMany(c,{$set:e});return{}},async delete(r){let{model:n,where:t}=r,e=u(t),c=await s.collection(a(n)).findOneAndDelete(e)},async deleteMany(r){let{model:n,where:t}=r,e=u(t),c=await s.collection(a(n)).deleteMany(e)}}};export{m as mongodbAdapter};
@@ -0,0 +1 @@
1
+ "use strict";var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var w=(r,a)=>{for(var s in a)f(r,s,{get:a[s],enumerable:!0})},g=(r,a,s,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of p(a))!m.call(r,t)&&t!==s&&f(r,t,{get:()=>a[t],enumerable:!(i=h(a,t))||i.enumerable});return r};var C=r=>g(f({},"__esModule",{value:!0}),r);var P={};w(P,{prismaAdapter:()=>v});module.exports=C(P);function y(r){switch(r){case"starts_with":return"startsWith";case"ends_with":return"endsWith";default:return r}}function l(r){if(!r)return{};if(r.length===1){let e=r[0];return e?{[e.field]:e.operator==="eq"||!e.operator?e.value:{[y(e.operator)]:e.value}}:void 0}let a=r.filter(e=>e.connector==="AND"||!e.connector),s=r.filter(e=>e.connector==="OR"),i=a.map(e=>({[e.field]:e.operator==="eq"||!e.operator?e.value:{[y(e.operator)]:e.value}})),t=s.map(e=>({[e.field]:{[e.operator||"eq"]:e.value}}));return{AND:i.length?i:void 0,OR:t.length?t:void 0}}var v=(r,a)=>{let s=r,i=a.generateId;return{id:"prisma",async create(t){let{model:e,data:d,select:n}=t;return i!==void 0&&(d.id=i?i():void 0),await s[e].create({data:d,...n?.length?{select:n.reduce((o,c)=>({...o,[c]:!0}),{})}:{}})},async findOne(t){let{model:e,where:d,select:n}=t,o=l(d);return await s[e].findFirst({where:o,...n?.length?{select:n.reduce((c,u)=>({...c,[u]:!0}),{})}:{}})},async findMany(t){let{model:e,where:d,limit:n,offset:o,sortBy:c}=t,u=l(d);return await s[e].findMany({where:u,take:n||100,skip:o||0,orderBy:c?.field?{[c.field]:c.direction==="desc"?"desc":"asc"}:void 0})},async update(t){let{model:e,where:d,update:n}=t;n.id&&(n.id=void 0);let o=l(d);return d.length===1?await s[e].update({where:o,data:n}):await s[e].updateMany({where:o,data:n})},async delete(t){let{model:e,where:d}=t,n=l(d);return await s[e].delete({where:n}).catch(o=>{})},async deleteMany(t){let{model:e,where:d}=t,n=l(d);return await s[e].deleteMany({where:n})},options:a}};0&&(module.exports={prismaAdapter});
@@ -0,0 +1,24 @@
1
+ import { A as Adapter } from '../auth-CB4jyq2d.cjs';
2
+ import 'zod';
3
+ import 'kysely';
4
+ import '../types-DGbY_2Am.cjs';
5
+ import '../helper-DPDj8Nix.cjs';
6
+ import 'better-call';
7
+ import '../social.cjs';
8
+ import 'better-sqlite3';
9
+ import 'mysql2';
10
+
11
+ declare const prismaAdapter: (prisma: any, options: {
12
+ provider: "sqlite" | "cockroachdb" | "mysql" | "postgresql" | "sqlserver" | "mongodb";
13
+ /**
14
+ * Custom generateId function.
15
+ *
16
+ * If not provided, nanoid will be used.
17
+ * If set to false, the database's auto generated id will be used.
18
+ *
19
+ * @default nanoid
20
+ */
21
+ generateId?: ((size?: number) => string) | false;
22
+ }) => Adapter;
23
+
24
+ export { prismaAdapter };
@@ -1,10 +1,9 @@
1
- import { A as Adapter } from '../auth-BCBgLbpW.js';
1
+ import { A as Adapter } from '../auth-B_JTmrax.js';
2
2
  import 'zod';
3
3
  import 'kysely';
4
- import '../schema-Dkt0LqYs.js';
5
- import 'better-call';
6
- import '../types-Xr2tzd3r.js';
4
+ import '../types-BYWAbFsn.js';
7
5
  import '../helper-DPDj8Nix.js';
6
+ import 'better-call';
8
7
  import '../social.js';
9
8
  import 'better-sqlite3';
10
9
  import 'mysql2';
@@ -1,2 +1 @@
1
- function f(a){switch(a){case"starts_with":return"startsWith";case"ends_with":return"endsWith";default:return a}}function c(a){if(!a)return{};if(a.length===1){let e=a[0];return e?{[e.field]:e.operator==="eq"||!e.operator?e.value:{[f(e.operator)]:e.value}}:void 0}let u=a.filter(e=>e.connector==="AND"||!e.connector),d=a.filter(e=>e.connector==="OR"),o=u.map(e=>({[e.field]:e.operator==="eq"||!e.operator?e.value:{[f(e.operator)]:e.value}})),r=d.map(e=>({[e.field]:{[e.operator||"eq"]:e.value}}));return{AND:o.length?o:void 0,OR:r.length?r:void 0}}var h=(a,u)=>{let d=a,o=u.generateId;return{id:"prisma",async create(r){let{model:e,data:n,select:t}=r;return o!==void 0&&(n.id=o?o():void 0),await d[e].create({data:n,...t!=null&&t.length?{select:t.reduce((i,s)=>({...i,[s]:!0}),{})}:{}})},async findOne(r){let{model:e,where:n,select:t}=r,i=c(n);return await d[e].findFirst({where:i,...t!=null&&t.length?{select:t.reduce((s,l)=>({...s,[l]:!0}),{})}:{}})},async findMany(r){let{model:e,where:n,limit:t,offset:i,sortBy:s}=r,l=c(n);return await d[e].findMany({where:l,take:t||100,skip:i||0,orderBy:s!=null&&s.field?{[s.field]:s.direction==="desc"?"desc":"asc"}:void 0})},async update(r){let{model:e,where:n,update:t}=r;t.id&&(t.id=void 0);let i=c(n);return n.length===1?await d[e].update({where:i,data:t}):await d[e].updateMany({where:i,data:t})},async delete(r){let{model:e,where:n}=r,t=c(n);return await d[e].delete({where:t}).catch(i=>{})},async deleteMany(r){let{model:e,where:n}=r,t=c(n);return await d[e].deleteMany({where:t})},options:u}};export{h as prismaAdapter};
2
- //# sourceMappingURL=prisma.js.map
1
+ function f(a){switch(a){case"starts_with":return"startsWith";case"ends_with":return"endsWith";default:return a}}function c(a){if(!a)return{};if(a.length===1){let e=a[0];return e?{[e.field]:e.operator==="eq"||!e.operator?e.value:{[f(e.operator)]:e.value}}:void 0}let l=a.filter(e=>e.connector==="AND"||!e.connector),s=a.filter(e=>e.connector==="OR"),o=l.map(e=>({[e.field]:e.operator==="eq"||!e.operator?e.value:{[f(e.operator)]:e.value}})),r=s.map(e=>({[e.field]:{[e.operator||"eq"]:e.value}}));return{AND:o.length?o:void 0,OR:r.length?r:void 0}}var y=(a,l)=>{let s=a,o=l.generateId;return{id:"prisma",async create(r){let{model:e,data:n,select:t}=r;return o!==void 0&&(n.id=o?o():void 0),await s[e].create({data:n,...t?.length?{select:t.reduce((d,i)=>({...d,[i]:!0}),{})}:{}})},async findOne(r){let{model:e,where:n,select:t}=r,d=c(n);return await s[e].findFirst({where:d,...t?.length?{select:t.reduce((i,u)=>({...i,[u]:!0}),{})}:{}})},async findMany(r){let{model:e,where:n,limit:t,offset:d,sortBy:i}=r,u=c(n);return await s[e].findMany({where:u,take:t||100,skip:d||0,orderBy:i?.field?{[i.field]:i.direction==="desc"?"desc":"asc"}:void 0})},async update(r){let{model:e,where:n,update:t}=r;t.id&&(t.id=void 0);let d=c(n);return n.length===1?await s[e].update({where:d,data:t}):await s[e].updateMany({where:d,data:t})},async delete(r){let{model:e,where:n}=r,t=c(n);return await s[e].delete({where:t}).catch(d=>{})},async deleteMany(r){let{model:e,where:n}=r,t=c(n);return await s[e].deleteMany({where:t})},options:l}};export{y as prismaAdapter};
package/dist/api.cjs ADDED
@@ -0,0 +1,83 @@
1
+ "use strict";var Mt=Object.create;var K=Object.defineProperty;var Ft=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var Zt=Object.getPrototypeOf,Qt=Object.prototype.hasOwnProperty;var Gt=(e,t)=>{for(var r in t)K(e,r,{get:t[r],enumerable:!0})},je=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ht(t))!Qt.call(e,n)&&n!==r&&K(e,n,{get:()=>t[n],enumerable:!(o=Ft(t,n))||o.enumerable});return e};var qe=(e,t,r)=>(r=e!=null?Mt(Zt(e)):{},je(t||!e||!e.__esModule?K(r,"default",{value:e,enumerable:!0}):r,e)),Wt=e=>je(K({},"__esModule",{value:!0}),e);var gr={};Gt(gr,{APIError:()=>qt.APIError,callbackOAuth:()=>Ue,changeEmail:()=>Le,changePassword:()=>Pe,createAuthEndpoint:()=>p,createAuthMiddleware:()=>z,createEmailVerificationToken:()=>I,csrfMiddleware:()=>le,deleteUser:()=>Oe,error:()=>Ce,forgetPassword:()=>xe,forgetPasswordCallback:()=>ve,getCSRFToken:()=>Ie,getEndpoints:()=>jt,getSession:()=>re,getSessionFromCtx:()=>oe,linkSocialAccount:()=>Ve,listSessions:()=>he,listUserAccounts:()=>ze,ok:()=>De,optionsMiddleware:()=>de,resetPassword:()=>Te,revokeSession:()=>we,revokeSessions:()=>ye,router:()=>fr,sendVerificationEmail:()=>be,sessionMiddleware:()=>v,setPassword:()=>_e,signInEmail:()=>Re,signInOAuth:()=>Ae,signOut:()=>Ee,signUpEmail:()=>Be,updateUser:()=>Se,verifyEmail:()=>ke});module.exports=Wt(gr);var M=require("better-call");var X=require("better-call"),ue=require("zod");var tr=require("@noble/ciphers/chacha"),ce=require("@noble/ciphers/utils"),rr=require("@noble/ciphers/webcrypto"),or=require("oslo/crypto"),ae=qe(require("uncrypto"),1);function ie(e,t){let r=new Uint8Array(e),o=new Uint8Array(t);if(r.length!==o.length)return!1;let n=0;for(let i=0;i<r.length;i++)n|=r[i]^o[i];return n===0}var Ne=require("oslo/encoding");var Jt=require("@noble/hashes/scrypt"),Kt=require("uncrypto");var se=qe(require("uncrypto"),1);function Yt(e){return e.toString(2).padStart(8,"0")}function Xt(e){return[...e].map(t=>Yt(t)).join("")}function Me(e){return parseInt(Xt(e),2)}function er(e){if(e<0||!Number.isInteger(e))throw new Error("Argument 'max' must be an integer greater than or equal to 0");let t=(e-1).toString(2).length,r=t%8,o=new Uint8Array(Math.ceil(t/8));se.default.getRandomValues(o),r!==0&&(o[0]&=(1<<r)-1);let n=Me(o);for(;n>=e;)se.default.getRandomValues(o),r!==0&&(o[0]&=(1<<r)-1),n=Me(o);return n}function Fe(e,t){let r="";for(let o=0;o<e;o++)r+=t[er(t.length)];return r}function He(...e){let t=new Set(e),r="";for(let o of t)o==="a-z"?r+="abcdefghijklmnopqrstuvwxyz":o==="A-Z"?r+="ABCDEFGHIJKLMNOPQRSTUVWXYZ":o==="0-9"?r+="0123456789":r+=o;return r}async function Y(e,t){let r=new TextEncoder,o={name:"HMAC",hash:"SHA-256"},n=await ae.default.subtle.importKey("raw",r.encode(e),o,!1,["sign","verify"]),i=await ae.default.subtle.sign(o.name,n,r.encode(t));return btoa(String.fromCharCode(...new Uint8Array(i)))}var $=require("better-call"),de=(0,$.createMiddleware)(async()=>({})),z=(0,$.createMiddlewareCreator)({use:[de,(0,$.createMiddleware)(async()=>({}))]}),p=(0,$.createEndpointCreator)({use:[de]});var nr=require("oslo");var H=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};var Ze=require("std-env");async function L(e,t,r,o){let n=e.context.authCookies.sessionToken.options;n.maxAge=r?void 0:e.context.sessionConfig.expiresIn,await e.setSignedCookie(e.context.authCookies.sessionToken.name,t.session.id,e.context.secret,{...n,...o}),r&&await e.setSignedCookie(e.context.authCookies.dontRememberToken.name,"true",e.context.secret,e.context.authCookies.dontRememberToken.options),e.context.options.session?.cookieCache?.enabled&&await e.setSignedCookie(e.context.authCookies.sessionData.name,JSON.stringify(t),e.context.secret,e.context.authCookies.sessionData.options)}function V(e){e.setCookie(e.context.authCookies.sessionToken.name,"",{maxAge:0}),e.setCookie(e.context.authCookies.sessionData.name,"",{maxAge:0}),e.setCookie(e.context.authCookies.dontRememberToken.name,"",{maxAge:0})}var le=z({body:ue.z.object({csrfToken:ue.z.string().optional()}).optional()},async e=>{if(e.request?.method!=="POST"||e.context.options.advanced?.disableCSRFCheck)return;let t=e.headers?.get("origin")||"";if(t){let c=new URL(t).origin;if(e.context.trustedOrigins.includes(c))return}let r=e.body?.csrfToken;if(!r)throw new X.APIError("UNAUTHORIZED",{message:"CSRF Token is required"});let o=await e.getSignedCookie(e.context.authCookies.csrfToken.name,e.context.secret),[n,i]=o?.split("!")||[null,null];if(!r||!n||!i||n!==r)throw new X.APIError("UNAUTHORIZED",{message:"Invalid CSRF Token"});let s=await Y(e.context.secret,n);if(i!==s)throw e.setCookie(e.context.authCookies.csrfToken.name,"",{maxAge:0}),new X.APIError("UNAUTHORIZED",{message:"Invalid CSRF Token"})});var P=require("better-call"),St=require("oslo/oauth2"),T=require("zod");var We=require("oslo/oauth2"),D=require("zod");var pe=require("oslo/crypto");async function Qe(e){let t=await(0,pe.sha256)(typeof e=="string"?new TextEncoder().encode(e):e);return Buffer.from(t).toString("base64")}async function Ge(e,t){let r=await(0,pe.sha256)(typeof e=="string"?new TextEncoder().encode(e):e),o=Buffer.from(t,"base64");return ie(r,o)}async function ee(e,t){let r=(0,We.generateState)(),o=JSON.stringify({code:r,callbackURL:e,link:t}),n=await Qe(o);return{raw:o,hash:n}}function me(e){return D.z.object({code:D.z.string(),callbackURL:D.z.string().optional(),currentURL:D.z.string().optional(),link:D.z.object({email:D.z.string(),userId:D.z.string()}).optional()}).safeParse(JSON.parse(e))}var Ke=require("better-call");var Je=require("consola"),j=(0,Je.createConsola)({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),ir=e=>({log:(...t)=>{!e?.disabled&&j.log("",...t)},error:(...t)=>{!e?.disabled&&j.error("",...t)},warn:(...t)=>{!e?.disabled&&j.warn("",...t)},info:(...t)=>{!e?.disabled&&j.info("",...t)},debug:(...t)=>{!e?.disabled&&j.debug("",...t)},box:(...t)=>{!e?.disabled&&j.box("",...t)},success:(...t)=>{!e?.disabled&&j.success("",...t)},break:(...t)=>{!e?.disabled&&console.log(`
2
+ `)}}),h=ir();var E=z(async e=>{let{body:t,query:r,headers:o,context:n}=e,i=t?.callbackURL||r?.callbackURL||r?.redirectTo||t?.redirectTo,s=r?.currentURL||o?.get("referer")||n.baseURL,c=n.trustedOrigins,d=(a,u)=>{if(a?.startsWith("http")&&!c.some(w=>a.startsWith(w)))throw h.error(`Invalid ${u}`,{[u]:a,trustedOrigins:c}),new Ke.APIError("FORBIDDEN",{message:`Invalid ${u}`})};d(i,"callbackURL"),d(s,"currentURL")});var ot=require("oslo/jwt");var Ye=require("oslo/crypto"),Xe=require("oslo/encoding");var Z=(e,t="ms")=>new Date(Date.now()+(t==="sec"?e*1e3:e));async function et(e){let t=await(0,Ye.sha256)(new TextEncoder().encode(e));return Xe.base64url.encode(new Uint8Array(t),{includePadding:!1})}function tt(e){return{tokenType:e.token_type,accessToken:e.access_token,refreshToken:e.refresh_token,accessTokenExpiresAt:e.expires_in?Z(e.expires_in,"sec"):void 0,scopes:e?.scope?typeof e.scope=="string"?e.scope.split(" "):e.scope:[],idToken:e.id_token}}async function A({id:e,options:t,authorizationEndpoint:r,state:o,codeVerifier:n,scopes:i,claims:s,disablePkce:c,redirectURI:d}){let a=new URL(r);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",t.clientId),a.searchParams.set("state",o),a.searchParams.set("scope",i.join(" ")),a.searchParams.set("redirect_uri",t.redirectURI||d),!c&&n){let u=await et(n);a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("code_challenge",u)}if(s){let u=s.reduce((f,w)=>(f[w]=null,f),{});a.searchParams.set("claims",JSON.stringify({id_token:{email:null,email_verified:null,...u}}))}return a}var rt=require("@better-fetch/fetch");async function b({code:e,codeVerifier:t,redirectURI:r,options:o,tokenEndpoint:n}){let i=new URLSearchParams;i.set("grant_type","authorization_code"),i.set("code",e),t&&i.set("code_verifier",t),i.set("redirect_uri",r),i.set("client_id",o.clientId),i.set("client_secret",o.clientSecret);let{data:s,error:c}=await(0,rt.betterFetch)(n,{method:"POST",body:i,headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json","user-agent":"better-auth"}});if(c)throw c;return tt(s)}var nt=e=>{let t="https://appleid.apple.com/auth/token";return{id:"apple",name:"Apple",createAuthorizationURL({state:r,scopes:o,redirectURI:n}){let i=o||["email","name","openid"];return e.scope&&i.push(...e.scope),new URL(`https://appleid.apple.com/auth/authorize?client_id=${e.clientId}&response_type=code&redirect_uri=${n||e.redirectURI}&scope=${i.join(" ")}&state=${r}`)},validateAuthorizationCode:async({code:r,codeVerifier:o,redirectURI:n})=>b({code:r,codeVerifier:o,redirectURI:e.redirectURI||n,options:e,tokenEndpoint:t}),async getUserInfo(r){if(!r.idToken)return null;let o=(0,ot.parseJWT)(r.idToken)?.payload;return o?{user:{id:o.sub,name:o.name,email:o.email,emailVerified:o.email_verified==="true"},data:o}:null}}};var it=require("@better-fetch/fetch");var st=e=>({id:"discord",name:"Discord",createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let n=r||["identify","email"];return e.scope&&n.push(...e.scope),new URL(`https://discord.com/api/oauth2/authorize?scope=${n.join("+")}&response_type=code&client_id=${e.clientId}&redirect_uri=${encodeURIComponent(e.redirectURI||o)}&state=${t}`)},validateAuthorizationCode:async({code:t,redirectURI:r})=>b({code:t,redirectURI:e.redirectURI||r,options:e,tokenEndpoint:"https://discord.com/api/oauth2/token"}),async getUserInfo(t){let{data:r,error:o}=await(0,it.betterFetch)("https://discord.com/api/users/@me",{headers:{authorization:`Bearer ${t.accessToken}`}});if(o)return null;if(r.avatar===null){let n=r.discriminator==="0"?Number(BigInt(r.id)>>BigInt(22))%6:parseInt(r.discriminator)%5;r.image_url=`https://cdn.discordapp.com/embed/avatars/${n}.png`}else{let n=r.avatar.startsWith("a_")?"gif":"png";r.image_url=`https://cdn.discordapp.com/avatars/${r.id}/${r.avatar}.${n}`}return{user:{id:r.id,name:r.display_name||r.username||"",email:r.email,emailVerified:r.verified,image:r.image_url},data:r}}});var at=require("@better-fetch/fetch");var ct=e=>({id:"facebook",name:"Facebook",async createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let n=r||["email","public_profile"];return e.scope&&n.push(...e.scope),await A({id:"facebook",options:e,authorizationEndpoint:"https://www.facebook.com/v21.0/dialog/oauth",scopes:n,state:t,redirectURI:o})},validateAuthorizationCode:async({code:t,redirectURI:r})=>b({code:t,redirectURI:e.redirectURI||r,options:e,tokenEndpoint:"https://graph.facebook.com/oauth/access_token"}),async getUserInfo(t){let{data:r,error:o}=await(0,at.betterFetch)("https://graph.facebook.com/me?fields=id,name,email,picture",{auth:{type:"Bearer",token:t.accessToken}});return o?null:{user:{id:r.id,name:r.name,email:r.email,image:r.picture.data.url,emailVerified:r.email_verified},data:r}}});var fe=require("@better-fetch/fetch");var dt=e=>{let t="https://github.com/login/oauth/access_token";return{id:"github",name:"GitHub",createAuthorizationURL({state:r,scopes:o,codeVerifier:n,redirectURI:i}){let s=o||["user:email"];return e.scope&&s.push(...e.scope),A({id:"github",options:e,authorizationEndpoint:"https://github.com/login/oauth/authorize",scopes:s,state:r,redirectURI:i,codeVerifier:n})},validateAuthorizationCode:async({code:r,redirectURI:o})=>b({code:r,redirectURI:e.redirectURI||o,options:e,tokenEndpoint:t}),async getUserInfo(r){let{data:o,error:n}=await(0,fe.betterFetch)("https://api.github.com/user",{headers:{"User-Agent":"better-auth",authorization:`Bearer ${r.accessToken}`}});if(n)return null;let i=!1;if(!o.email){let{data:s,error:c}=await(0,fe.betterFetch)("https://api.github.com/user/emails",{headers:{authorization:`Bearer ${r.accessToken}`,"User-Agent":"better-auth"}});c||(o.email=(s.find(d=>d.primary)??s[0])?.email,i=s.find(d=>d.email===o.email)?.verified??!1)}return{user:{id:o.id.toString(),name:o.name||o.login,email:o.email,image:o.avatar_url,emailVerified:i},data:o}}}};var ut=require("oslo/jwt");var lt=e=>({id:"google",name:"Google",async createAuthorizationURL({state:t,scopes:r,codeVerifier:o,redirectURI:n}){if(!e.clientId||!e.clientSecret)throw h.error("Client Id and Client Secret is required for Google. Make sure to provide them in the options."),new H("CLIENT_ID_AND_SECRET_REQUIRED");if(!o)throw new H("codeVerifier is required for Google");let i=r||["email","profile","openid"];e.scope&&i.push(...e.scope);let s=await A({id:"google",options:e,authorizationEndpoint:"https://accounts.google.com/o/oauth2/auth",scopes:i,state:t,codeVerifier:o,redirectURI:n});return e.accessType&&s.searchParams.set("access_type",e.accessType),e.prompt&&s.searchParams.set("prompt",e.prompt),s},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>b({code:t,codeVerifier:r,redirectURI:e.redirectURI||o,options:e,tokenEndpoint:"https://oauth2.googleapis.com/token"}),async getUserInfo(t){if(!t.idToken)return null;let r=(0,ut.parseJWT)(t.idToken)?.payload;return{user:{id:r.sub,name:r.name,email:r.email,image:r.picture,emailVerified:r.email_verified},data:r}}});var pt=require("@better-fetch/fetch"),mt=require("oslo/jwt");var ft=e=>{let t=e.tenantId||"common",r=`https://login.microsoftonline.com/${t}/oauth2/v2.0/authorize`,o=`https://login.microsoftonline.com/${t}/oauth2/v2.0/token`;return{id:"microsoft",name:"Microsoft EntraID",createAuthorizationURL(n){let i=n.scopes||["openid","profile","email","User.Read"];return e.scope&&i.push(...e.scope),A({id:"microsoft",options:e,authorizationEndpoint:r,state:n.state,codeVerifier:n.codeVerifier,scopes:i,redirectURI:n.redirectURI})},validateAuthorizationCode({code:n,codeVerifier:i,redirectURI:s}){return b({code:n,codeVerifier:i,redirectURI:e.redirectURI||s,options:e,tokenEndpoint:o})},async getUserInfo(n){if(!n.idToken)return null;let i=(0,mt.parseJWT)(n.idToken)?.payload,s=e.profilePhotoSize||48;return await(0,pt.betterFetch)(`https://graph.microsoft.com/v1.0/me/photos/${s}x${s}/$value`,{headers:{Authorization:`Bearer ${n.accessToken}`},async onResponse(c){if(!(e.disableProfilePhoto||!c.response.ok))try{let a=await c.response.clone().arrayBuffer(),u=Buffer.from(a).toString("base64");i.picture=`data:image/jpeg;base64, ${u}`}catch(d){h.error(d)}}}),{user:{id:i.sub,name:i.name,email:i.email,image:i.picture,emailVerified:!0},data:i}}}};var gt=require("@better-fetch/fetch");var ht=e=>({id:"spotify",name:"Spotify",createAuthorizationURL({state:t,scopes:r,codeVerifier:o,redirectURI:n}){let i=r||["user-read-email"];return e.scope&&i.push(...e.scope),A({id:"spotify",options:e,authorizationEndpoint:"https://accounts.spotify.com/authorize",scopes:i,state:t,codeVerifier:o,redirectURI:n})},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>b({code:t,codeVerifier:r,redirectURI:e.redirectURI||o,options:e,tokenEndpoint:"https://accounts.spotify.com/api/token"}),async getUserInfo(t){let{data:r,error:o}=await(0,gt.betterFetch)("https://api.spotify.com/v1/me",{method:"GET",headers:{Authorization:`Bearer ${t.accessToken}`}});return o?null:{user:{id:r.id,name:r.display_name,email:r.email,image:r.images[0]?.url,emailVerified:!1},data:r}}});var Oo=require("@better-fetch/fetch");var B={isAction:!1};var wt=require("nanoid"),yt=e=>(0,wt.nanoid)(e);var bt=require("oslo/jwt");var kt=e=>({id:"twitch",name:"Twitch",createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let n=r||["user:read:email","openid"];return e.scope&&n.push(...e.scope),A({id:"twitch",redirectURI:o,options:e,authorizationEndpoint:"https://id.twitch.tv/oauth2/authorize",scopes:n,state:t,claims:e.claims||["email","email_verified","preferred_username","picture"]})},validateAuthorizationCode:async({code:t,redirectURI:r})=>b({code:t,redirectURI:e.redirectURI||r,options:e,tokenEndpoint:"https://id.twitch.tv/oauth2/token"}),async getUserInfo(t){let r=t.idToken;if(!r)return h.error("No idToken found in token"),null;let o=(0,bt.parseJWT)(r)?.payload;return{user:{id:o.sub,name:o.preferred_username,email:o.email,image:o.picture,emailVerified:!1},data:o}}});var At=require("@better-fetch/fetch");var Rt=e=>({id:"twitter",name:"Twitter",createAuthorizationURL(t){let r=t.scopes||["account_info.read"];return e.scope&&r.push(...e.scope),A({id:"twitter",options:e,authorizationEndpoint:"https://twitter.com/i/oauth2/authorize",scopes:r,state:t.state,codeVerifier:t.codeVerifier,redirectURI:t.redirectURI})},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>b({code:t,codeVerifier:r,redirectURI:e.redirectURI||o,options:e,tokenEndpoint:"https://id.twitch.tv/oauth2/token"}),async getUserInfo(t){let{data:r,error:o}=await(0,At.betterFetch)("https://api.x.com/2/users/me?user.fields=profile_image_url",{method:"GET",headers:{Authorization:`Bearer ${t.accessToken}`}});return o||!r.data.email?null:{user:{id:r.data.id,name:r.data.name,email:r.data.email,image:r.data.profile_image_url,emailVerified:r.data.verified||!1},data:r}}});var Ut=require("@better-fetch/fetch");var Et=e=>{let t="https://api.dropboxapi.com/oauth2/token";return{id:"dropbox",name:"Dropbox",createAuthorizationURL:async({state:r,scopes:o,codeVerifier:n,redirectURI:i})=>{let s=o||["account_info.read"];return e.scope&&s.push(...e.scope),await A({id:"dropbox",options:e,authorizationEndpoint:"https://www.dropbox.com/oauth2/authorize",scopes:s,state:r,redirectURI:i,codeVerifier:n})},validateAuthorizationCode:async({code:r,codeVerifier:o,redirectURI:n})=>await b({code:r,codeVerifier:o,redirectURI:e.redirectURI||n,options:e,tokenEndpoint:t}),async getUserInfo(r){let{data:o,error:n}=await(0,Ut.betterFetch)("https://api.dropboxapi.com/2/users/get_current_account",{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`}});return n?null:{user:{id:o.account_id,name:o.name?.display_name,email:o.email,emailVerified:o.email_verified||!1,image:o.profile_photo_url},data:o}}}};var xt=require("@better-fetch/fetch");var vt=e=>{let t="https://www.linkedin.com/oauth/v2/authorization",r="https://www.linkedin.com/oauth/v2/accessToken";return{id:"linkedin",name:"Linkedin",createAuthorizationURL:async({state:o,scopes:n,redirectURI:i})=>{let s=n||["profile","email","openid"];return e.scope&&s.push(...e.scope),await A({id:"linkedin",options:e,authorizationEndpoint:t,scopes:s,state:o,redirectURI:i})},validateAuthorizationCode:async({code:o,redirectURI:n})=>await b({code:o,redirectURI:e.redirectURI||n,options:e,tokenEndpoint:r}),async getUserInfo(o){let{data:n,error:i}=await(0,xt.betterFetch)("https://api.linkedin.com/v2/userinfo",{method:"GET",headers:{Authorization:`Bearer ${o.accessToken}`}});return i?null:{user:{id:n.sub,name:n.name,email:n.email,emailVerified:n.email_verified||!1,image:n.picture},data:n}}}};var sr={apple:nt,discord:st,facebook:ct,github:dt,microsoft:ft,google:lt,spotify:ht,twitch:kt,twitter:Rt,dropbox:Et,linkedin:vt},te=Object.keys(sr);var Tt=require("oslo"),ne=require("oslo/jwt"),S=require("zod");var q=require("better-call");var Q=require("better-call");var ge=require("zod"),re=()=>p("/get-session",{method:"GET",requireHeaders:!0},async e=>{try{let t=await e.getSignedCookie(e.context.authCookies.sessionToken.name,e.context.secret);if(!t)return e.json(null,{status:401});let r=await e.getSignedCookie(e.context.authCookies.sessionData.name,e.context.secret),o=await e.getSignedCookie(e.context.authCookies.dontRememberToken.name,e.context.secret);if(r&&e.context.options.session?.cookieCache?.enabled){let a=JSON.parse(r)?.session;if(console.log({session:a}),a?.expiresAt>new Date)return console.log(a),e.json(a)}let n=await e.context.internalAdapter.findSession(t);if(!n||n.session.expiresAt<new Date)return V(e),n&&await e.context.internalAdapter.deleteSession(n.session.id),e.json(null,{status:401});if(o)return e.json(n);let i=e.context.sessionConfig.expiresIn,s=e.context.sessionConfig.updateAge;if(n.session.expiresAt.valueOf()-i*1e3+s*1e3<=Date.now()){let a=await e.context.internalAdapter.updateSession(n.session.id,{expiresAt:Z(e.context.sessionConfig.expiresIn,"sec")});if(!a)return V(e),e.json(null,{status:401});let u=(a.expiresAt.valueOf()-Date.now())/1e3;return await L(e,{session:a,user:n.user},!1,{maxAge:u}),e.json({session:a,user:n.user})}return e.json(n)}catch(t){return e.context.logger.error(t),e.json(null,{status:500})}}),oe=async e=>await re()({...e,_flag:"json",headers:e.headers}),v=z(async e=>{let t=await oe(e);if(!t?.session)throw new Q.APIError("UNAUTHORIZED");return{session:t}}),he=()=>p("/user/list-sessions",{method:"GET",use:[v],requireHeaders:!0},async e=>{let r=(await e.context.internalAdapter.listSessions(e.context.session.user.id)).filter(o=>o.expiresAt>new Date);return e.json(r)}),we=p("/user/revoke-session",{method:"POST",body:ge.z.object({id:ge.z.string()}),use:[v],requireHeaders:!0},async e=>{let t=e.body.id,r=await e.context.internalAdapter.findSession(t);if(!r)throw new Q.APIError("BAD_REQUEST",{message:"Session not found"});if(r.session.userId!==e.context.session.user.id)throw new Q.APIError("UNAUTHORIZED");try{await e.context.internalAdapter.deleteSession(t)}catch(o){throw e.context.logger.error(o),new Q.APIError("INTERNAL_SERVER_ERROR")}return e.json({status:!0})}),ye=p("/user/revoke-sessions",{method:"POST",use:[v],requireHeaders:!0},async e=>{try{await e.context.internalAdapter.deleteSessions(e.context.session.user.id)}catch(t){throw e.context.logger.error(t),new Q.APIError("INTERNAL_SERVER_ERROR")}return e.json({status:!0})});async function I(e,t,r){return await(0,ne.createJWT)("HS256",Buffer.from(e),{email:t.toLowerCase(),updateTo:r},{expiresIn:new Tt.TimeSpan(1,"h"),issuer:"better-auth",subject:"verify-email",audiences:[t],includeIssuedTimestamp:!0})}var be=p("/send-verification-email",{method:"POST",query:S.z.object({currentURL:S.z.string().optional()}).optional(),body:S.z.object({email:S.z.string().email(),callbackURL:S.z.string().optional()}),use:[E]},async e=>{if(!e.context.options.emailVerification?.sendVerificationEmail)throw e.context.logger.error("Verification email isn't enabled."),new q.APIError("BAD_REQUEST",{message:"Verification email isn't enabled"});let{email:t}=e.body,r=await e.context.internalAdapter.findUserByEmail(t);if(!r)throw new q.APIError("BAD_REQUEST",{message:"User not found"});let o=await I(e.context.secret,t),n=`${e.context.baseURL}/verify-email?token=${o}&callbackURL=${e.body.callbackURL||e.query?.currentURL||"/"}`;return await e.context.options.emailVerification.sendVerificationEmail(r.user,n,o),e.json({status:!0})}),ke=p("/verify-email",{method:"GET",query:S.z.object({token:S.z.string(),callbackURL:S.z.string().optional()}),use:[E]},async e=>{let{token:t}=e.query,r;try{r=await(0,ne.validateJWT)("HS256",Buffer.from(e.context.secret),t)}catch(s){throw e.context.logger.error("Failed to verify email",s),new q.APIError("BAD_REQUEST",{message:"Invalid token"})}let n=S.z.object({email:S.z.string().email(),updateTo:S.z.string().optional()}).parse(r.payload);if(!await e.context.internalAdapter.findUserByEmail(n.email))throw new q.APIError("BAD_REQUEST",{message:"User not found"});if(n.updateTo){let s=await oe(e);if(!s)throw e.query.callbackURL?e.redirect(`${e.query.callbackURL}?error=unauthorized`):new q.APIError("UNAUTHORIZED",{message:"Session not found"});if(s.user.email!==n.email)throw e.query.callbackURL?e.redirect(`${e.query.callbackURL}?error=unauthorized`):new q.APIError("UNAUTHORIZED",{message:"Invalid session"});let c=await e.context.internalAdapter.updateUserByEmail(n.email,{email:n.updateTo});if(await e.context.options.emailVerification?.sendVerificationEmail?.(c,`${e.context.baseURL}/verify-email?token=${t}`,t),e.query.callbackURL)throw e.redirect(e.query.callbackURL);return e.json({user:c,status:!0})}if(await e.context.internalAdapter.updateUserByEmail(n.email,{emailVerified:!0}),e.query.callbackURL)throw e.redirect(e.query.callbackURL);return e.json({user:null,status:!0})});var Ae=p("/sign-in/social",{method:"POST",requireHeaders:!0,query:T.z.object({currentURL:T.z.string().optional()}).optional(),body:T.z.object({callbackURL:T.z.string().optional(),provider:T.z.enum(te)}),use:[E]},async e=>{let t=e.context.socialProviders.find(d=>d.id===e.body.provider);if(!t)throw e.context.logger.error("Provider not found. Make sure to add the provider in your auth config",{provider:e.body.provider}),new P.APIError("NOT_FOUND",{message:"Provider not found"});let r=e.context.authCookies,o=e.query?.currentURL?new URL(e.query?.currentURL):null,n=e.body.callbackURL?.startsWith("http")?e.body.callbackURL:`${o?.origin}${e.body.callbackURL||""}`,i=await ee(n||o?.origin||e.context.options.baseURL);await e.setSignedCookie(r.state.name,i.hash,e.context.secret,r.state.options);let s=(0,St.generateCodeVerifier)();await e.setSignedCookie(r.pkCodeVerifier.name,s,e.context.secret,r.pkCodeVerifier.options);let c=await t.createAuthorizationURL({state:i.raw,codeVerifier:s,redirectURI:`${e.context.baseURL}/callback/${t.id}`});return e.json({url:c.toString(),state:i,codeVerifier:s,redirect:!0})}),Re=p("/sign-in/email",{method:"POST",body:T.z.object({email:T.z.string(),password:T.z.string(),callbackURL:T.z.string().optional(),dontRememberMe:T.z.boolean().default(!1).optional()}),use:[E]},async e=>{if(!e.context.options?.emailAndPassword?.enabled)throw e.context.logger.error("Email and password is not enabled. Make sure to enable it in the options on you `auth.ts` file. Check `https://better-auth.com/docs/authentication/email-password` for more!"),new P.APIError("BAD_REQUEST",{message:"Email and password is not enabled"});let{email:t,password:r}=e.body;if(!T.z.string().email().safeParse(t).success)throw new P.APIError("BAD_REQUEST",{message:"Invalid email"});if(!T.z.string().email().safeParse(t).success)throw new P.APIError("BAD_REQUEST",{message:"Invalid email"});let i=await e.context.internalAdapter.findUserByEmail(t,{includeAccounts:!0});if(!i)throw await e.context.password.hash(r),e.context.logger.error("User not found",{email:t}),new P.APIError("UNAUTHORIZED",{message:"Invalid email or password"});let s=i.accounts.find(u=>u.providerId==="credential");if(!s)throw e.context.logger.error("Credential account not found",{email:t}),new P.APIError("UNAUTHORIZED",{message:"Invalid email or password"});let c=s?.password;if(!c)throw e.context.logger.error("Password not found",{email:t}),new P.APIError("UNAUTHORIZED",{message:"Unexpected error"});if(!await e.context.password.verify(c,r))throw e.context.logger.error("Invalid password"),new P.APIError("UNAUTHORIZED",{message:"Invalid email or password"});if(e.context.options?.emailAndPassword?.requireEmailVerification&&!i.user.emailVerified){if(!e.context.options?.emailVerification?.sendVerificationEmail)throw h.error("Email verification is required but no email verification handler is provided"),new P.APIError("INTERNAL_SERVER_ERROR",{message:"Email is not verified."});let u=await I(e.context.secret,i.user.email),f=`${e.context.options.baseURL}/verify-email?token=${u}`;throw await e.context.options.emailVerification.sendVerificationEmail(i.user,f,u),e.context.logger.error("Email not verified",{email:t}),new P.APIError("FORBIDDEN",{message:"Email is not verified. Check your email for a verification link"})}let a=await e.context.internalAdapter.createSession(i.user.id,e.headers,e.body.dontRememberMe);if(!a)throw e.context.logger.error("Failed to create session"),new P.APIError("UNAUTHORIZED",{message:"Failed to create session"});return await L(e,{session:a,user:i.user},e.body.dontRememberMe),e.json({user:i.user,session:a,redirect:!!e.body.callbackURL,url:e.body.callbackURL})});var W=require("zod");var m=require("zod"),Sn=m.z.object({id:m.z.string(),providerId:m.z.string(),accountId:m.z.string(),userId:m.z.string(),accessToken:m.z.string().nullable().optional(),refreshToken:m.z.string().nullable().optional(),idToken:m.z.string().nullable().optional(),expiresAt:m.z.date().nullable().optional(),password:m.z.string().optional().nullable()}),Pt=m.z.object({id:m.z.string(),email:m.z.string().transform(e=>e.toLowerCase()),emailVerified:m.z.boolean().default(!1),name:m.z.string(),image:m.z.string().optional(),createdAt:m.z.date().default(new Date),updatedAt:m.z.date().default(new Date)}),Pn=m.z.object({id:m.z.string(),userId:m.z.string(),expiresAt:m.z.date(),ipAddress:m.z.string().optional(),userAgent:m.z.string().optional()}),_n=m.z.object({id:m.z.string(),value:m.z.string(),expiresAt:m.z.date(),identifier:m.z.string()});function _t(e,t){let r={...t==="user"?e.user?.additionalFields:{},...t==="session"?e.session?.additionalFields:{}};for(let o of e.plugins||[])o.schema&&o.schema[t]&&(r={...r,...o.schema[t].fields});return r}function Ot(e,t){let r=t.fields,o={};for(let n in r){if(n in e){if(r[n].input===!1){if(r[n].defaultValue){o[n]=r[n].defaultValue;continue}continue}o[n]=e[n];continue}if(r[n].defaultValue){o[n]=r[n].defaultValue;continue}}return o}function Lt(e,t){let r=_t(e,"user");return Ot(t||{},{fields:r})}function It(e,t){let r=_t(e,"user");return Ot(t||{},{fields:r})}var Ue=p("/callback/:id",{method:"GET",query:W.z.object({state:W.z.string(),code:W.z.string().optional(),error:W.z.string().optional()}),metadata:B},async e=>{if(e.query.error||!e.query.code){let O=me(e.query.state).data?.callbackURL||`${e.context.baseURL}/error`;throw e.context.logger.error(e.query.error,e.params.id),e.redirect(`${O}?error=${e.query.error||"oAuth_code_missing"}`)}let t=e.context.socialProviders.find(g=>g.id===e.params.id);if(!t)throw e.context.logger.error("Oauth provider with id",e.params.id,"not found"),e.redirect(`${e.context.baseURL}/error?error=oauth_provider_not_found`);let r=me(e.query.state);if(!r.success)throw e.context.logger.error("Unable to parse state"),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);let{data:{callbackURL:o,currentURL:n,link:i}}=r,s=await e.getSignedCookie(e.context.authCookies.state.name,e.context.secret);if(!s)throw h.error("No stored state found"),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(!await Ge(e.query.state,s))throw h.error("OAuth state mismatch"),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);let d=await e.getSignedCookie(e.context.authCookies.pkCodeVerifier.name,e.context.secret),a;try{a=await t.validateAuthorizationCode({code:e.query.code,codeVerifier:d,redirectURI:`${e.context.baseURL}/callback/${t.id}`})}catch(g){throw e.context.logger.error(g),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`)}let u=await t.getUserInfo(a).then(g=>g?.user),f=yt(),w=Pt.safeParse({...u,id:f});if(!u||w.success===!1)throw h.error("Unable to get user info",w.error),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(!o)throw e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(i){if(i.email!==u.email.toLowerCase())return l("email_doesn't_match");if(!await e.context.internalAdapter.createAccount({userId:i.userId,providerId:t.id,accountId:u.id}))return l("unable_to_link_account");throw e.redirect(o||n||e.context.options.baseURL)}function l(g){throw e.redirect(`${n||o||`${e.context.baseURL}/error`}?error=${g}`)}let R=await e.context.internalAdapter.findUserByEmail(u.email,{includeAccounts:!0}).catch(g=>{throw h.error(`Better auth was unable to query your database.
3
+ Error: `,g),e.redirect(`${e.context.baseURL}/error?error=internal_server_error`)}),k=R?.user;if(R){let g=R.accounts.find(O=>O.providerId===t.id);if(g)await e.context.internalAdapter.updateAccount(g.id,{accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt});else{(!e.context.options.account?.accountLinking?.trustedProviders?.includes(t.id)&&!u.emailVerified||!e.context.options.account?.accountLinking?.enabled)&&l("account_not_linked");try{await e.context.internalAdapter.linkAccount({providerId:t.id,accountId:u.id.toString(),id:`${t.id}:${u.id}`,userId:R.user.id,accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt})}catch(Nt){h.error("Unable to link account",Nt),l("unable_to_link_account")}}}else try{let g=u.emailVerified||!1;if(k=await e.context.internalAdapter.createOAuthUser({...w.data,emailVerified:g},{accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt,providerId:t.id,accountId:u.id.toString()}).then(O=>O?.user),!g&&k&&e.context.options.emailVerification?.sendOnSignUp){let O=await I(e.context.secret,k.email),F=`${e.context.baseURL}/verify-email?token=${O}&callbackURL=${o}`;await e.context.options.emailVerification?.sendVerificationEmail?.(k,F,O)}}catch(g){h.error("Unable to create user",g),l("unable_to_create_user")}if(!k)return l("unable_to_create_user");let y=await e.context.internalAdapter.createSession(k.id,e.request);throw y||l("unable_to_create_session"),await L(e,{session:y,user:k}),e.redirect(o)});var Nn=require("zod");var Ct=require("better-call");var Ee=p("/sign-out",{method:"POST"},async e=>{let t=await e.getSignedCookie(e.context.authCookies.sessionToken.name,e.context.secret);if(!t)throw new Ct.APIError("BAD_REQUEST",{message:"Session not found"});return await e.context.internalAdapter.deleteSession(t),V(e),e.json({success:!0})});var _=require("zod");var J=require("better-call");var xe=p("/forget-password",{method:"POST",body:_.z.object({email:_.z.string().email(),redirectTo:_.z.string()}),use:[E]},async e=>{if(!e.context.options.emailAndPassword?.sendResetPassword)throw e.context.logger.error("Reset password isn't enabled.Please pass an emailAndPassword.sendResetPasswordToken function in your auth config!"),new J.APIError("BAD_REQUEST",{message:"Reset password isn't enabled"});let{email:t,redirectTo:r}=e.body,o=await e.context.internalAdapter.findUserByEmail(t,{includeAccounts:!0});if(!o)return e.context.logger.error("Reset Password: User not found",{email:t}),e.json({status:!1},{body:{status:!0}});let n=60*60*1,i=new Date(Date.now()+1e3*(e.context.options.emailAndPassword.resetPasswordTokenExpiresIn||n)),s=e.context.uuid();await e.context.internalAdapter.createVerificationValue({value:o.user.id,identifier:`reset-password:${s}`,expiresAt:i});let c=`${e.context.baseURL}/reset-password/${s}?callbackURL=${r}`;return await e.context.options.emailAndPassword.sendResetPassword(o.user,c),e.json({status:!0})}),ve=p("/reset-password/:token",{method:"GET",query:_.z.object({callbackURL:_.z.string()}),use:[E]},async e=>{let{token:t}=e.params,r=e.query.callbackURL,o=r.startsWith("http")?r:`${e.context.options.baseURL}${r}`;if(!t||!r)throw e.redirect(`${e.context.baseURL}/error?error=INVALID_TOKEN`);let n=await e.context.internalAdapter.findVerificationValue(`reset-password:${t}`);throw!n||n.expiresAt<new Date?e.redirect(`${o}?error=INVALID_TOKEN`):e.redirect(`${o}${o.includes("?")?"&":"?"}token=${t}`)}),Te=p("/reset-password",{query:_.z.optional(_.z.object({token:_.z.string().optional(),currentURL:_.z.string().optional()})),method:"POST",body:_.z.object({newPassword:_.z.string()})},async e=>{let t=e.query?.token||(e.query?.currentURL?new URL(e.query.currentURL).searchParams.get("token"):"");if(!t)throw new J.APIError("BAD_REQUEST",{message:"Token not found"});let{newPassword:r}=e.body,o=`reset-password:${t}`,n=await e.context.internalAdapter.findVerificationValue(o);if(!n||n.expiresAt<new Date)throw new J.APIError("BAD_REQUEST",{message:"Invalid token"});await e.context.internalAdapter.deleteVerificationValue(n.id);let i=n.value,s=await e.context.password.hash(r);if(!(await e.context.internalAdapter.findAccounts(i)).find(u=>u.providerId==="credential"))return await e.context.internalAdapter.createAccount({userId:i,providerId:"credential",password:s,accountId:e.context.uuid()}),e.json({status:!0});if(!await e.context.internalAdapter.updatePassword(i,s))throw new J.APIError("BAD_REQUEST",{message:"Failed to update password"});return e.json({status:!0})});var U=require("zod");var x=require("better-call");var Se=()=>p("/user/update",{method:"POST",body:U.z.record(U.z.string(),U.z.any()),use:[v,E]},async e=>{let t=e.body;if(t.email)throw new x.APIError("BAD_REQUEST",{message:"You can't update email"});let{name:r,image:o,...n}=t,i=e.context.session;if(!o&&!r&&Object.keys(n).length===0)return e.json({user:i.user});let s=Lt(e.context.options,n),c=await e.context.internalAdapter.updateUserByEmail(i.user.email,{name:r,image:o,...s});return e.json({user:c})}),Pe=p("/user/change-password",{method:"POST",body:U.z.object({newPassword:U.z.string(),currentPassword:U.z.string(),revokeOtherSessions:U.z.boolean().optional()}),use:[v]},async e=>{let{newPassword:t,currentPassword:r,revokeOtherSessions:o}=e.body,n=e.context.session,i=e.context.password.config.minPasswordLength;if(t.length<i)throw e.context.logger.error("Password is too short"),new x.APIError("BAD_REQUEST",{message:"Password is too short"});let s=e.context.password.config.maxPasswordLength;if(t.length>s)throw e.context.logger.error("Password is too long"),new x.APIError("BAD_REQUEST",{message:"Password too long"});let d=(await e.context.internalAdapter.findAccounts(n.user.id)).find(f=>f.providerId==="credential"&&f.password);if(!d||!d.password)throw new x.APIError("BAD_REQUEST",{message:"User does not have a password"});let a=await e.context.password.hash(t);if(!await e.context.password.verify(d.password,r))throw new x.APIError("BAD_REQUEST",{message:"Incorrect password"});if(await e.context.internalAdapter.updateAccount(d.id,{password:a}),o){await e.context.internalAdapter.deleteSessions(n.user.id);let f=await e.context.internalAdapter.createSession(n.user.id,e.headers);if(!f)throw new x.APIError("INTERNAL_SERVER_ERROR",{message:"Unable to create session"});await L(e,{session:f,user:n.user})}return e.json(n.user)}),_e=p("/user/set-password",{method:"POST",body:U.z.object({newPassword:U.z.string()}),use:[v]},async e=>{let{newPassword:t}=e.body,r=e.context.session,o=e.context.password.config.minPasswordLength;if(t.length<o)throw e.context.logger.error("Password is too short"),new x.APIError("BAD_REQUEST",{message:"Password is too short"});let n=e.context.password.config.maxPasswordLength;if(t.length>n)throw e.context.logger.error("Password is too long"),new x.APIError("BAD_REQUEST",{message:"Password too long"});let s=(await e.context.internalAdapter.findAccounts(r.user.id)).find(d=>d.providerId==="credential"&&d.password),c=await e.context.password.hash(t);if(!s)return await e.context.internalAdapter.linkAccount({userId:r.user.id,providerId:"credential",accountId:r.user.id,password:c}),e.json(r.user);throw new x.APIError("BAD_REQUEST",{message:"user already has a password"})}),Oe=p("/user/delete",{method:"POST",body:U.z.object({password:U.z.string()}),use:[v]},async e=>{let{password:t}=e.body,r=e.context.session,n=(await e.context.internalAdapter.findAccounts(r.user.id)).find(s=>s.providerId==="credential"&&s.password);if(!n||!n.password)throw new x.APIError("BAD_REQUEST",{message:"User does not have a password"});if(!await e.context.password.verify(n.password,t))throw new x.APIError("BAD_REQUEST",{message:"Incorrect password"});return await e.context.internalAdapter.deleteUser(r.user.id),await e.context.internalAdapter.deleteSessions(r.user.id),V(e),e.json(null)}),Le=p("/user/change-email",{method:"POST",query:U.z.object({currentURL:U.z.string().optional()}).optional(),body:U.z.object({newEmail:U.z.string().email(),callbackURL:U.z.string().optional()}),use:[v,E]},async e=>{if(!e.context.options.user?.changeEmail?.enabled)throw e.context.logger.error("Change email is disabled."),new x.APIError("BAD_REQUEST",{message:"Change email is disabled"});if(e.body.newEmail===e.context.session.user.email)throw e.context.logger.error("Email is the same"),new x.APIError("BAD_REQUEST",{message:"Email is the same"});if(await e.context.internalAdapter.findUserByEmail(e.body.newEmail))throw e.context.logger.error("Email already exists"),new x.APIError("BAD_REQUEST",{message:"Couldn't update your email"});if(e.context.session.user.emailVerified!==!0){let n=await e.context.internalAdapter.updateUserByEmail(e.context.session.user.email,{email:e.body.newEmail});return e.json({user:n,status:!0})}if(!e.context.options.user.changeEmail.sendChangeEmailVerification)throw e.context.logger.error("Verification email isn't enabled."),new x.APIError("BAD_REQUEST",{message:"Verification email isn't enabled"});let r=await I(e.context.secret,e.context.session.user.email,e.body.newEmail),o=`${e.context.baseURL}/verify-email?token=${r}&callbackURL=${e.body.callbackURL||e.query?.currentURL||"/"}`;return await e.context.options.user.changeEmail.sendChangeEmailVerification(e.context.session.user,e.body.newEmail,o,r),e.json({user:null,status:!0})});var Ie=p("/csrf",{method:"GET",metadata:B},async e=>{let t=await e.getSignedCookie(e.context.authCookies.csrfToken.name,e.context.secret);if(t){let[i,s]=t.split("!")||[null,null];return e.json({csrfToken:i})}let r=Fe(32,He("a-z","0-9","A-Z")),o=await Y(e.context.secret,r),n=`${r}!${o}`;return await e.setSignedCookie(e.context.authCookies.csrfToken.name,n,e.context.secret,e.context.authCookies.csrfToken.options),e.json({csrfToken:r})});var ar=(e="Unknown")=>`<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="UTF-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>Authentication Error</title>
9
+ <style>
10
+ :root {
11
+ --bg-color: #f8f9fa;
12
+ --text-color: #212529;
13
+ --accent-color: #000000;
14
+ --error-color: #dc3545;
15
+ --border-color: #e9ecef;
16
+ }
17
+ body {
18
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
19
+ background-color: var(--bg-color);
20
+ color: var(--text-color);
21
+ display: flex;
22
+ justify-content: center;
23
+ align-items: center;
24
+ height: 100vh;
25
+ margin: 0;
26
+ line-height: 1.5;
27
+ }
28
+ .error-container {
29
+ background-color: #ffffff;
30
+ border-radius: 12px;
31
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
32
+ padding: 2.5rem;
33
+ text-align: center;
34
+ max-width: 90%;
35
+ width: 400px;
36
+ }
37
+ h1 {
38
+ color: var(--error-color);
39
+ font-size: 1.75rem;
40
+ margin-bottom: 1rem;
41
+ font-weight: 600;
42
+ }
43
+ p {
44
+ margin-bottom: 1.5rem;
45
+ color: #495057;
46
+ }
47
+ .btn {
48
+ background-color: var(--accent-color);
49
+ color: #ffffff;
50
+ text-decoration: none;
51
+ padding: 0.75rem 1.5rem;
52
+ border-radius: 6px;
53
+ transition: all 0.3s ease;
54
+ display: inline-block;
55
+ font-weight: 500;
56
+ border: 2px solid var(--accent-color);
57
+ }
58
+ .btn:hover {
59
+ background-color: #131721;
60
+ }
61
+ .error-code {
62
+ font-size: 0.875rem;
63
+ color: #6c757d;
64
+ margin-top: 1.5rem;
65
+ padding-top: 1.5rem;
66
+ border-top: 1px solid var(--border-color);
67
+ }
68
+ .icon {
69
+ font-size: 3rem;
70
+ margin-bottom: 1rem;
71
+ }
72
+ </style>
73
+ </head>
74
+ <body>
75
+ <div class="error-container">
76
+ <div class="icon">\u26A0\uFE0F</div>
77
+ <h1>Better Auth Error</h1>
78
+ <p>We encountered an issue while processing your request. Please try again or contact the application owner if the problem persists.</p>
79
+ <a href="/" id="returnLink" class="btn">Return to Application</a>
80
+ <div class="error-code">Error Code: <span id="errorCode">${e}</span></div>
81
+ </div>
82
+ </body>
83
+ </html>`,Ce=p("/error",{method:"GET",metadata:B},async e=>{let t=new URL(e.request?.url||"").searchParams.get("error")||"Unknown";return new Response(ar(t),{headers:{"Content-Type":"text/html"}})});var De=p("/ok",{method:"GET",metadata:B},async e=>e.json({ok:!0}));var N=require("zod");var C=require("better-call");var Be=()=>p("/sign-up/email",{method:"POST",query:N.z.object({currentURL:N.z.string().optional()}).optional(),body:N.z.record(N.z.string(),N.z.any()),use:[E]},async e=>{if(!e.context.options.emailAndPassword?.enabled)throw new C.APIError("BAD_REQUEST",{message:"Email and password sign up is not enabled"});let t=e.body,{name:r,email:o,password:n,image:i,callbackURL:s,...c}=t;if(!N.z.string().email().safeParse(o).success)throw new C.APIError("BAD_REQUEST",{message:"Invalid email"});let a=e.context.password.config.minPasswordLength;if(n.length<a)throw e.context.logger.error("Password is too short"),new C.APIError("BAD_REQUEST",{message:"Password is too short"});let u=e.context.password.config.maxPasswordLength;if(n.length>u)throw e.context.logger.error("Password is too long"),new C.APIError("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 C.APIError("UNPROCESSABLE_ENTITY",{message:"User with this email already exists"});let w=It(e.context.options,c),l;try{if(l=await e.context.internalAdapter.createUser({email:o.toLowerCase(),name:r,image:i,...w,emailVerified:!1}),!l)throw new C.APIError("BAD_REQUEST",{message:"Failed to create user"})}catch(y){throw h.error("Failed to create user",y),new C.APIError("UNPROCESSABLE_ENTITY",{message:"Failed to create user",details:y})}if(!l)throw new C.APIError("UNPROCESSABLE_ENTITY",{message:"Failed to create user"});let R=await e.context.password.hash(n);if(await e.context.internalAdapter.linkAccount({userId:l.id,providerId:"credential",accountId:l.id,password:R,expiresAt:Z(60*60*24*30,"sec")}),e.context.options.emailVerification?.sendOnSignUp){let y=await I(e.context.secret,l.email),g=`${e.context.baseURL}/verify-email?token=${y}&callbackURL=${t.callbackURL||e.query?.currentURL||"/"}`;await e.context.options.emailVerification?.sendVerificationEmail?.(l,g,y)}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 k=await e.context.internalAdapter.createSession(l.id,e.request);if(!k)throw new C.APIError("BAD_REQUEST",{message:"Failed to create session"});return await L(e,{session:k,user:l}),e.json({user:l,session:k},{body:t.callbackURL?{url:t.callbackURL,redirect:!0}:{user:l,session:k}})});var G=require("zod");var $e=require("better-call");var Dt=require("oslo/oauth2");var ze=p("/user/list-accounts",{method:"GET",use:[v]},async e=>{let t=e.context.session,r=await e.context.internalAdapter.findAccounts(t.user.id);return e.json(r)}),Ve=p("/user/link-social",{method:"POST",requireHeaders:!0,query:G.z.object({currentURL:G.z.string().optional()}).optional(),body:G.z.object({callbackURL:G.z.string().optional(),provider:G.z.enum(te)}),use:[E,v]},async e=>{let t=e.context.session;if((await e.context.internalAdapter.findAccounts(t.user.id)).find(f=>f.providerId===e.body.provider))throw new $e.APIError("BAD_REQUEST",{message:"Social Account is already linked."});let n=e.context.socialProviders.find(f=>f.id===e.body.provider);if(!n)throw e.context.logger.error("Provider not found. Make sure to add the provider in your auth config",{provider:e.body.provider}),new $e.APIError("NOT_FOUND",{message:"Provider not found"});let i=e.context.authCookies,s=e.query?.currentURL?new URL(e.query?.currentURL):null,c=e.body.callbackURL?.startsWith("http")?e.body.callbackURL:`${s?.origin}${e.body.callbackURL||""}`,d=await ee(c||s?.origin||e.context.options.baseURL,{email:t.user.email,userId:t.user.id});await e.setSignedCookie(i.state.name,d.hash,e.context.secret,i.state.options);let a=(0,Dt.generateCodeVerifier)();await e.setSignedCookie(i.pkCodeVerifier.name,a,e.context.secret,i.pkCodeVerifier.options);let u=await n.createAuthorizationURL({state:d.raw,codeVerifier:a,redirectURI:`${e.context.baseURL}/link-account/${n.id}`});return e.json({url:u.toString(),state:d,codeVerifier:a,redirect:!0})});var Bt=require("std-env");function $t(e){let t="127.0.0.1";if(Bt.isTest)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 n of r){let i=o.get(n);if(typeof i=="string"){let s=i.split(",")[0].trim();if(s)return s}}return null}function cr(e,t,r){let o=Date.now(),n=t*1e3;return o-r.lastRequest<n&&r.count>=e}function dr(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 ur(e,t){let r=Date.now(),o=t*1e3;return Math.ceil((e+o-r)/1e3)}function lr(e,t){let r=t??"rateLimit",o=e.adapter;return{get:async n=>await o.findOne({model:r,where:[{field:"key",value:n}]}),set:async(n,i,s)=>{try{s?await o.update({model:t??"rateLimit",where:[{field:"key",value:n}],update:{count:i.count,lastRequest:i.lastRequest}}):await o.create({model:t??"rateLimit",data:{key:n,count:i.count,lastRequest:i.lastRequest}})}catch(c){h.error("Error setting rate limit",c)}}}}var zt=new Map;function pr(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 zt.get(r)},async set(r,o,n){zt.set(r,o)}}:lr(e,e.rateLimit.tableName)}async function Vt(e,t){if(!t.rateLimit.enabled)return;let r=t.baseURL,o=e.url.replace(r,""),n=t.rateLimit.window,i=t.rateLimit.max,s=$t(e)+o,d=mr().find(w=>w.pathMatcher(o));d&&(n=d.window,i=d.max);for(let w of t.options.plugins||[])if(w.rateLimit){let l=w.rateLimit.find(R=>R.pathMatcher(o));if(l){n=l.window,i=l.max;break}}if(t.rateLimit.customRules){let w=t.rateLimit.customRules[o];w&&(n=w.window,i=w.max)}let a=pr(t),u=await a.get(s),f=Date.now();if(!u)await a.set(s,{key:s,count:1,lastRequest:f});else{let w=f-u.lastRequest;if(cr(i,n,u)){let l=ur(u.lastRequest,n);return dr(l)}else w>n*1e3?await a.set(s,{...u,count:1,lastRequest:f}):await a.set(s,{...u,count:u.count+1,lastRequest:f})}}function mr(){return[{pathMatcher(t){return t.startsWith("/sign-in")||t.startsWith("/sign-up")},window:10,max:3}]}var qt=require("better-call");function jt(e,t){let r=t.plugins?.reduce((c,d)=>({...c,...d.endpoints}),{}),o=t.plugins?.map(c=>c.middlewares?.map(d=>{let a=async u=>d.middleware({...u,context:{...e,...u.context}});return a.path=d.path,a.options=d.middleware.options,a.headers=d.middleware.headers,{path:d.path,middleware:a}})).filter(c=>c!==void 0).flat()||[],i={...{signInOAuth:Ae,callbackOAuth:Ue,getCSRFToken:Ie,getSession:re(),signOut:Ee,signUpEmail:Be(),signInEmail:Re,forgetPassword:xe,resetPassword:Te,verifyEmail:ke,sendVerificationEmail:be,changeEmail:Le,changePassword:Pe,setPassword:_e,updateUser:Se(),deleteUser:Oe,forgetPasswordCallback:ve,listSessions:he(),revokeSession:we,revokeSessions:ye,linkSocialAccount:Ve,listUserAccounts:ze},...r,ok:De,error:Ce},s={};for(let[c,d]of Object.entries(i))s[c]=async(a={})=>{let u=await e;for(let l of t.plugins||[])if(l.hooks?.before){for(let R of l.hooks.before)if(R.matcher({...d,...a,context:u})){let y=await R.handler({...a,context:{...u,...a?.context}});y&&"context"in y&&(u={...u,...y.context})}}let f;try{f=await d({...a,context:{...u,...a.context}})}catch(l){if(l instanceof M.APIError){let R=t.plugins?.map(y=>{if(y.hooks?.after)return y.hooks.after}).filter(y=>y!==void 0).flat();if(!R?.length)throw l;let k=new Response(JSON.stringify(l.body),{status:M.statusCode[l.status],headers:l.headers});for(let y of R||[])if(y.matcher(a)){let O=Object.assign(a,{context:{...e,returned:k}}),F=await y.handler(O);F&&"response"in F&&(k=F.response)}return k}throw l}let w=f;for(let l of t.plugins||[])if(l.hooks?.after){for(let R of l.hooks.after)if(R.matcher(a)){let y=Object.assign(a,{context:{...e,returned:w}}),g=await R.handler(y);g&&"response"in g&&(w=g.response)}}return w},s[c].path=d.path,s[c].method=d.method,s[c].options=d.options,s[c].headers=d.headers;return{api:s,middlewares:o}}var fr=(e,t)=>{let{api:r,middlewares:o}=jt(e,t),n=new URL(e.baseURL).pathname;return(0,M.createRouter)(r,{extraContext:e,basePath:n,routerMiddleware:[{path:"/**",middleware:le},...o],async onRequest(i){for(let s of e.options.plugins||[])if(s.onRequest){let c=await s.onRequest(i,e);if(c)return c}return Vt(i,e)},async onResponse(i){for(let s of e.options.plugins||[])if(s.onResponse){let c=await s.onResponse(i,e);if(c)return c.response}return i},onError(i){if(t.onAPIError?.throw)throw i;if(t.onAPIError?.onError){t.onAPIError.onError(i,e);return}let s=t.logger?.verboseLogging?h:void 0;t.logger?.disabled!==!0&&(i instanceof M.APIError?(i.status==="INTERNAL_SERVER_ERROR"&&h.error(i),s?.error(i.message)):h?.error(i))}})};0&&(module.exports={APIError,callbackOAuth,changeEmail,changePassword,createAuthEndpoint,createAuthMiddleware,createEmailVerificationToken,csrfMiddleware,deleteUser,error,forgetPassword,forgetPasswordCallback,getCSRFToken,getEndpoints,getSession,getSessionFromCtx,linkSocialAccount,listSessions,listUserAccounts,ok,optionsMiddleware,resetPassword,revokeSession,revokeSessions,router,sendVerificationEmail,sessionMiddleware,setPassword,signInEmail,signInOAuth,signOut,signUpEmail,updateUser,verifyEmail});
package/dist/api.d.cts ADDED
@@ -0,0 +1,9 @@
1
+ export { e as AuthEndpoint, f as AuthMiddleware, a1 as callbackOAuth, aj as changeEmail, ag as changePassword, d as createAuthEndpoint, c as createAuthMiddleware, ac as createEmailVerificationToken, aq as csrfMiddleware, ai as deleteUser, al as error, a9 as forgetPassword, aa as forgetPasswordCallback, ak as getCSRFToken, Z as getEndpoints, a2 as getSession, a3 as getSessionFromCtx, ap as linkSocialAccount, a5 as listSessions, ao as listUserAccounts, am as ok, o as optionsMiddleware, ab as resetPassword, a6 as revokeSession, a7 as revokeSessions, _ as router, ad as sendVerificationEmail, a4 as sessionMiddleware, ah as setPassword, a0 as signInEmail, $ as signInOAuth, a8 as signOut, an as signUpEmail, af as updateUser, ae as verifyEmail } from './auth-CB4jyq2d.cjs';
2
+ import './helper-DPDj8Nix.cjs';
3
+ export { APIError } from 'better-call';
4
+ import 'zod';
5
+ import 'kysely';
6
+ import './types-DGbY_2Am.cjs';
7
+ import './social.cjs';
8
+ import 'better-sqlite3';
9
+ import 'mysql2';