better-auth 0.7.3-beta.9 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var U=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},D=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of H(t))!M.call(e,n)&&n!==r&&U(e,n,{get:()=>t[n],enumerable:!(s=q(t,n))||s.enumerable});return e};var N=e=>D(U({},"__esModule",{value:!0}),e);var Z={};G(Z,{createAuthClient:()=>K,useAuthQuery:()=>x});module.exports=N(Z);var _=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let s=g(!0);return s[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function V(e){return e?e!=="false":!1}var z=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var Y=z==="test"||V(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function X(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function F(e,t="/api/auth"){return X(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function C(e,t){if(e)return F(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return F(r,t);if(typeof window<"u")return F(window.location.origin,t)}var de=require("nanostores");var se=require("@better-fetch/fetch"),S={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},v={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var ae=require("@better-fetch/fetch"),O=require("nanostores"),x=(e,t,r,s)=>{let n=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):s;return r(t,{...c,onSuccess:async l=>{n.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){n.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=n.get();n.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(n,()=>(f(),u=!0,()=>{n.off(),c.off()}))});return n};function E(e){let t=(0,L.atom)(!1);return{session:x(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var w=e=>{let t="credentials"in Request.prototype,r=C(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],n=(0,_.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[S,v,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=E(n),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(a,o.getAtoms?.(n)),o.pathMethods&&Object.assign(i,o.pathMethods),o.atomListeners&&p.push(...o.atomListeners);let m={notify:o=>{a[o].set(!a[o].get())},listen:(o,b)=>{a[o].subscribe(b)},atoms:a};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(n,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:i,atomListeners:p,$fetch:n,$store:m}};function I(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t,r){let s=t[e],{fetchOptions:n,query:f,...u}=r||{};return s||(n?.method?n.method:u&&Object.keys(u).length>0?"POST":"GET")}function $(e,t,r,s,n){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],i=e;for(let p of a)if(i&&typeof i=="object"&&p in i)i=i[p];else{i=void 0;break}return typeof i=="function"?i:f(a)},apply:async(c,l,a)=>{let i="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:o,fetchOptions:b,...k}=p,h={...m,...b},B=Q(i,r,p);return await t(i,{...h,body:B==="GET"?void 0:{...k,...h?.body||{}},query:o||h?.query,method:B,async onSuccess(R){await h?.onSuccess?.(R);let y=n?.find(j=>j.matcher(i));if(!y)return;let T=s[y.signal];if(!T)return;let W=T.get();setTimeout(()=>{T.set(!W)},10)}})}})}return f()}function K(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:s,$fetch:n,atomListeners:f,$store:u}=w(e),c={};for(let[i,p]of Object.entries(s))c[`use${I(i)}`]=p;let l={...r,...c,$fetch:n,$store:u};return $(l,n,t,s,f)}0&&(module.exports={createAuthClient,useAuthQuery});
1
+ "use strict";var U=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},D=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of H(t))!M.call(e,n)&&n!==r&&U(e,n,{get:()=>t[n],enumerable:!(s=q(t,n))||s.enumerable});return e};var N=e=>D(U({},"__esModule",{value:!0}),e);var Z={};G(Z,{createAuthClient:()=>K,useAuthQuery:()=>x});module.exports=N(Z);var w=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let s=g(!0);return s[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function V(e){return e?e!=="false":!1}var z=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var Y=z==="test"||V(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function X(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function F(e,t="/api/auth"){return X(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function C(e,t){if(e)return F(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return F(r,t);if(typeof window<"u"&&window.location)return F(window.location.origin,t)}var de=require("nanostores");var se=require("@better-fetch/fetch"),S={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},v={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var ae=require("@better-fetch/fetch"),O=require("nanostores"),x=(e,t,r,s)=>{let n=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):s;return r(t,{...c,onSuccess:async l=>{n.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){n.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=n.get();n.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(n,()=>(f(),u=!0,()=>{n.off(),c.off()}))});return n};function E(e){let t=(0,L.atom)(!1);return{session:x(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var _=e=>{let t="credentials"in Request.prototype,r=C(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],n=(0,w.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[S,v,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=E(n),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(a,o.getAtoms?.(n)),o.pathMethods&&Object.assign(i,o.pathMethods),o.atomListeners&&p.push(...o.atomListeners);let m={notify:o=>{a[o].set(!a[o].get())},listen:(o,b)=>{a[o].subscribe(b)},atoms:a};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(n,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:i,atomListeners:p,$fetch:n,$store:m}};function I(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t,r){let s=t[e],{fetchOptions:n,query:f,...u}=r||{};return s||(n?.method?n.method:u&&Object.keys(u).length>0?"POST":"GET")}function $(e,t,r,s,n){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],i=e;for(let p of a)if(i&&typeof i=="object"&&p in i)i=i[p];else{i=void 0;break}return typeof i=="function"?i:f(a)},apply:async(c,l,a)=>{let i="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:o,fetchOptions:b,...k}=p,h={...m,...b},B=Q(i,r,p);return await t(i,{...h,body:B==="GET"?void 0:{...k,...h?.body||{}},query:o||h?.query,method:B,async onSuccess(R){await h?.onSuccess?.(R);let y=n?.find(j=>j.matcher(i));if(!y)return;let T=s[y.signal];if(!T)return;let W=T.get();setTimeout(()=>{T.set(!W)},10)}})}})}return f()}function K(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:s,$fetch:n,atomListeners:f,$store:u}=_(e),c={};for(let[i,p]of Object.entries(s))c[`use${I(i)}`]=p;let l={...r,...c,$fetch:n,$store:u};return $(l,n,t,s,f)}0&&(module.exports={createAuthClient,useAuthQuery});
package/dist/client.js CHANGED
@@ -1 +1 @@
1
- import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let i=g(!0);return i[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var k=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var D=k==="test"||$(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function W(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return W(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return T(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u")return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},B={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as j,onMount as q}from"nanostores";var C=(e,t,r,i)=>{let o=j({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof i=="function"?i({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):i;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=o.get();o.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function S(e){let t=H(!1);return{session:C(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=F(e?.baseURL),i=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[x,B,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:f,session:u}=S(o),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},s={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(a,n.getAtoms?.(o)),n.pathMethods&&Object.assign(s,n.pathMethods),n.atomListeners&&p.push(...n.atomListeners);let m={notify:n=>{a[n].set(!a[n].get())},listen:(n,O)=>{a[n].subscribe(O)},atoms:a};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:s,atomListeners:p,$fetch:o,$store:m}};function L(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e,t,r){let i=t[e],{fetchOptions:o,query:f,...u}=r||{};return i||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function E(e,t,r,i,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],s=e;for(let p of a)if(s&&typeof s=="object"&&p in s)s=s[p];else{s=void 0;break}return typeof s=="function"?s:f(a)},apply:async(c,l,a)=>{let s="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:n,fetchOptions:O,..._}=p,h={...m,...O},U=G(s,r,p);return await t(s,{...h,body:U==="GET"?void 0:{..._,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(s));if(!y)return;let R=i[y.signal];if(!R)return;let w=R.get();setTimeout(()=>{R.set(!w)},10)}})}})}return f()}function he(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:i,$fetch:o,atomListeners:f,$store:u}=v(e),c={};for(let[s,p]of Object.entries(i))c[`use${L(s)}`]=p;let l={...r,...c,$fetch:o,$store:u};return E(l,o,t,i,f)}export{he as createAuthClient,C as useAuthQuery};
1
+ import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let i=g(!0);return i[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var k=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var D=k==="test"||$(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function W(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return W(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return T(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u"&&window.location)return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},B={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as j,onMount as q}from"nanostores";var C=(e,t,r,i)=>{let o=j({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof i=="function"?i({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):i;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=o.get();o.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function S(e){let t=H(!1);return{session:C(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=F(e?.baseURL),i=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[x,B,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:f,session:u}=S(o),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},s={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(a,n.getAtoms?.(o)),n.pathMethods&&Object.assign(s,n.pathMethods),n.atomListeners&&p.push(...n.atomListeners);let m={notify:n=>{a[n].set(!a[n].get())},listen:(n,O)=>{a[n].subscribe(O)},atoms:a};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:s,atomListeners:p,$fetch:o,$store:m}};function L(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e,t,r){let i=t[e],{fetchOptions:o,query:f,...u}=r||{};return i||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function E(e,t,r,i,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],s=e;for(let p of a)if(s&&typeof s=="object"&&p in s)s=s[p];else{s=void 0;break}return typeof s=="function"?s:f(a)},apply:async(c,l,a)=>{let s="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:n,fetchOptions:O,...w}=p,h={...m,...O},U=G(s,r,p);return await t(s,{...h,body:U==="GET"?void 0:{...w,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(s));if(!y)return;let R=i[y.signal];if(!R)return;let _=R.get();setTimeout(()=>{R.set(!_)},10)}})}})}return f()}function he(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:i,$fetch:o,atomListeners:f,$store:u}=v(e),c={};for(let[s,p]of Object.entries(i))c[`use${L(s)}`]=p;let l={...r,...c,$fetch:o,$store:u};return E(l,o,t,i,f)}export{he as createAuthClient,C as useAuthQuery};
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var Ae=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var fr=Object.getOwnPropertyNames;var mr=Object.prototype.hasOwnProperty;var gr=(e,t)=>{for(var r in t)Ae(e,r,{get:t[r],enumerable:!0})},hr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of fr(t))!mr.call(e,i)&&i!==r&&Ae(e,i,{get:()=>t[i],enumerable:!(o=pr(t,i))||o.enumerable});return e};var yr=e=>hr(Ae({},"__esModule",{value:!0}),e);var qr={};gr(qr,{BetterAuthError:()=>E,HIDE_METADATA:()=>$,MissingDependencyError:()=>ke,betterAuth:()=>Vr,capitalizeFirstLetter:()=>wr,createCookieGetter:()=>fe,createLogger:()=>pe,deleteSessionCookie:()=>j,generateId:()=>v,generateState:()=>te,getCookies:()=>ve,logger:()=>h,parseCookies:()=>Rr,parseSetCookieHeader:()=>kr,parseState:()=>Ue,setSessionCookie:()=>O});module.exports=yr(qr);var K=require("better-call");var Me=require("better-call");var z=require("better-call"),Fe=(0,z.createMiddleware)(async()=>({})),de=(0,z.createMiddlewareCreator)({use:[Fe,(0,z.createMiddleware)(async()=>({}))]}),y=(0,z.createEndpointCreator)({use:[Fe]});function wr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var $={isAction:!1};var Ve=require("nanoid"),v=e=>(0,Ve.nanoid)(e);var ue=require("oslo/oauth2"),D=require("zod"),xe=require("better-call");var ce=Object.create(null),Y=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?ce:globalThis),I=new Proxy(ce,{get(e,t){return Y()[t]??ce[t]},has(e,t){let r=Y();return t in r||t in ce},set(e,t,r){let o=Y(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=Y(!0);return delete r[t],!0},ownKeys(){let e=Y(!0);return Object.keys(e)}});function br(e){return e?e!=="false":!1}var le=typeof process<"u"&&process.env&&process.env.NODE_ENV||"",X=le==="production",qe=le==="dev"||le==="development",je=le==="test"||br(I.TEST);var E=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}},ke=class extends E{constructor(t){super(`The package "${t}" is required. Make sure it is installed.`,t)}};function Ar(e){try{return new URL(e).pathname!=="/"}catch{throw new E(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function Re(e,t="/api/auth"){return Ar(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function ee(e,t){if(e)return Re(e,t);let r=I.BETTER_AUTH_URL||I.NEXT_PUBLIC_BETTER_AUTH_URL||I.PUBLIC_BETTER_AUTH_URL||I.NUXT_PUBLIC_BETTER_AUTH_URL||I.NUXT_PUBLIC_AUTH_URL||(I.BASE_URL!=="/"?I.BASE_URL:void 0);if(r)return Re(r,t);if(typeof window<"u")return Re(window.location.origin,t)}function ze(e){try{return new URL(e).origin}catch{return null}}async function te(e,t){let r=e.body?.callbackURL||(e.query?.currentURL?ze(e.query?.currentURL):"")||e.context.options.baseURL;if(!r)throw new xe.APIError("BAD_REQUEST",{message:"callbackURL is required"});let o=(0,ue.generateCodeVerifier)(),i=(0,ue.generateState)(),n=JSON.stringify({callbackURL:r,codeVerifier:o,errorURL:e.query?.currentURL,link:t,expiresAt:Date.now()+10*60*1e3}),a=new Date;a.setMinutes(a.getMinutes()+10);let c=await e.context.internalAdapter.createVerificationValue({value:n,identifier:i,expiresAt:a});if(!c)throw h.error("Unable to create verification. Make sure the database adapter is properly working and there is a verification table in the database"),new xe.APIError("INTERNAL_SERVER_ERROR",{message:"Unable to create verification"});return{state:c.identifier,codeVerifier:o}}async function Ue(e){let t=e.query.state,r=await e.context.internalAdapter.findVerificationValue(t);if(!r)throw h.error("State Mismatch. Verification not found",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);let o=D.z.object({callbackURL:D.z.string(),codeVerifier:D.z.string(),errorURL:D.z.string().optional(),expiresAt:D.z.number(),link:D.z.object({email:D.z.string(),userId:D.z.string()}).optional()}).parse(JSON.parse(r.value));if(o.errorURL||(o.errorURL=`${e.context.baseURL}/error`),o.expiresAt<Date.now())throw await e.context.internalAdapter.deleteVerificationValue(r.id),h.error("State expired.",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);return await e.context.internalAdapter.deleteVerificationValue(r.id),o}var $e=require("consola"),M=(0,$e.createConsola)({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),pe=e=>({log:(...t)=>{!e?.disabled&&M.log("",...t)},error:(...t)=>{!e?.disabled&&M.error("",...t)},warn:(...t)=>{!e?.disabled&&M.warn("",...t)},info:(...t)=>{!e?.disabled&&M.info("",...t)},debug:(...t)=>{!e?.disabled&&M.debug("",...t)},box:(...t)=>{!e?.disabled&&M.box("",...t)},success:(...t)=>{!e?.disabled&&M.success("",...t)},break:(...t)=>{!e?.disabled&&console.log(`
1
+ "use strict";var Ae=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var fr=Object.getOwnPropertyNames;var mr=Object.prototype.hasOwnProperty;var gr=(e,t)=>{for(var r in t)Ae(e,r,{get:t[r],enumerable:!0})},hr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of fr(t))!mr.call(e,i)&&i!==r&&Ae(e,i,{get:()=>t[i],enumerable:!(o=pr(t,i))||o.enumerable});return e};var yr=e=>hr(Ae({},"__esModule",{value:!0}),e);var qr={};gr(qr,{BetterAuthError:()=>E,HIDE_METADATA:()=>$,MissingDependencyError:()=>ke,betterAuth:()=>Vr,capitalizeFirstLetter:()=>wr,createCookieGetter:()=>fe,createLogger:()=>pe,deleteSessionCookie:()=>j,generateId:()=>v,generateState:()=>te,getCookies:()=>ve,logger:()=>h,parseCookies:()=>Rr,parseSetCookieHeader:()=>kr,parseState:()=>Ue,setSessionCookie:()=>O});module.exports=yr(qr);var K=require("better-call");var Me=require("better-call");var z=require("better-call"),Fe=(0,z.createMiddleware)(async()=>({})),de=(0,z.createMiddlewareCreator)({use:[Fe,(0,z.createMiddleware)(async()=>({}))]}),y=(0,z.createEndpointCreator)({use:[Fe]});function wr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var $={isAction:!1};var Ve=require("nanoid"),v=e=>(0,Ve.nanoid)(e);var ue=require("oslo/oauth2"),D=require("zod"),xe=require("better-call");var ce=Object.create(null),Y=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?ce:globalThis),I=new Proxy(ce,{get(e,t){return Y()[t]??ce[t]},has(e,t){let r=Y();return t in r||t in ce},set(e,t,r){let o=Y(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=Y(!0);return delete r[t],!0},ownKeys(){let e=Y(!0);return Object.keys(e)}});function br(e){return e?e!=="false":!1}var le=typeof process<"u"&&process.env&&process.env.NODE_ENV||"",X=le==="production",qe=le==="dev"||le==="development",je=le==="test"||br(I.TEST);var E=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}},ke=class extends E{constructor(t){super(`The package "${t}" is required. Make sure it is installed.`,t)}};function Ar(e){try{return new URL(e).pathname!=="/"}catch{throw new E(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function Re(e,t="/api/auth"){return Ar(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function ee(e,t){if(e)return Re(e,t);let r=I.BETTER_AUTH_URL||I.NEXT_PUBLIC_BETTER_AUTH_URL||I.PUBLIC_BETTER_AUTH_URL||I.NUXT_PUBLIC_BETTER_AUTH_URL||I.NUXT_PUBLIC_AUTH_URL||(I.BASE_URL!=="/"?I.BASE_URL:void 0);if(r)return Re(r,t);if(typeof window<"u"&&window.location)return Re(window.location.origin,t)}function ze(e){try{return new URL(e).origin}catch{return null}}async function te(e,t){let r=e.body?.callbackURL||(e.query?.currentURL?ze(e.query?.currentURL):"")||e.context.options.baseURL;if(!r)throw new xe.APIError("BAD_REQUEST",{message:"callbackURL is required"});let o=(0,ue.generateCodeVerifier)(),i=(0,ue.generateState)(),n=JSON.stringify({callbackURL:r,codeVerifier:o,errorURL:e.query?.currentURL,link:t,expiresAt:Date.now()+10*60*1e3}),a=new Date;a.setMinutes(a.getMinutes()+10);let c=await e.context.internalAdapter.createVerificationValue({value:n,identifier:i,expiresAt:a});if(!c)throw h.error("Unable to create verification. Make sure the database adapter is properly working and there is a verification table in the database"),new xe.APIError("INTERNAL_SERVER_ERROR",{message:"Unable to create verification"});return{state:c.identifier,codeVerifier:o}}async function Ue(e){let t=e.query.state,r=await e.context.internalAdapter.findVerificationValue(t);if(!r)throw h.error("State Mismatch. Verification not found",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);let o=D.z.object({callbackURL:D.z.string(),codeVerifier:D.z.string(),errorURL:D.z.string().optional(),expiresAt:D.z.number(),link:D.z.object({email:D.z.string(),userId:D.z.string()}).optional()}).parse(JSON.parse(r.value));if(o.errorURL||(o.errorURL=`${e.context.baseURL}/error`),o.expiresAt<Date.now())throw await e.context.internalAdapter.deleteVerificationValue(r.id),h.error("State expired.",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);return await e.context.internalAdapter.deleteVerificationValue(r.id),o}var $e=require("consola"),M=(0,$e.createConsola)({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),pe=e=>({log:(...t)=>{!e?.disabled&&M.log("",...t)},error:(...t)=>{!e?.disabled&&M.error("",...t)},warn:(...t)=>{!e?.disabled&&M.warn("",...t)},info:(...t)=>{!e?.disabled&&M.info("",...t)},debug:(...t)=>{!e?.disabled&&M.debug("",...t)},box:(...t)=>{!e?.disabled&&M.box("",...t)},success:(...t)=>{!e?.disabled&&M.success("",...t)},break:(...t)=>{!e?.disabled&&console.log(`
2
2
  `)}}),h=pe();var He=de(async e=>{if(e.request?.method!=="POST")return;let{body:t,query:r,context:o}=e,i=e.headers?.get("origin")||e.headers?.get("referer")||"",n=t?.callbackURL,a=t?.redirectTo,c=r?.currentURL,s=o.trustedOrigins,d=e.headers?.has("cookie"),l=(f,u)=>{if(!s.some(g=>f?.startsWith(g)||f?.startsWith("/")&&u!=="origin"))throw h.error(`Invalid ${u}: ${f}`),h.info(`If it's a valid URL, please add ${f} to trustedOrigins in your auth config
3
3
  `,`Current list of trustedOrigins: ${s}`),new Me.APIError("FORBIDDEN",{message:`Invalid ${u}`})};d&&!e.context.options.advanced?.disableCSRFCheck&&l(i,"origin"),n&&l(n,"callbackURL"),a&&l(a,"redirectURL"),c&&l(c,"currentURL")});var L=require("better-call"),P=require("zod");var Ge=require("oslo");function fe(e){let r=(e.advanced?.useSecureCookies!==void 0?e.advanced?.useSecureCookies:e.baseURL!==void 0?!!e.baseURL.startsWith("https://"):X)?"__Secure-":"",o=!!e.advanced?.crossSubDomainCookies?.enabled,i=o?e.advanced?.crossSubDomainCookies?.domain||(e.baseURL?new URL(e.baseURL).hostname:void 0):void 0;if(o&&!i)throw new E("baseURL is required when crossSubdomainCookies are enabled");function n(a,c={}){let s=e.advanced?.cookiePrefix||e.appName||"better-auth",d=e.advanced?.cookies?.[a]?.name||`${s}.${a}`,l=e.advanced?.cookies?.[a]?.attributes;return{name:`${r}${d}`,attributes:{secure:!!r,sameSite:"lax",path:"/",httpOnly:!0,...o?{domain:i}:{},...e.advanced?.defaultCookieAttributes,...c,...l}}}return n}function ve(e){let t=fe(e),r=e.session?.expiresIn||new Ge.TimeSpan(7,"d").seconds(),o=t("session_token",{maxAge:r}),i=t("session_data",{maxAge:e.session?.cookieCache?.maxAge||60*5}),n=t("dont_remember");return{sessionToken:{name:o.name,options:o.attributes},sessionData:{name:i.name,options:i.attributes},dontRememberToken:{name:n.name,options:n.attributes}}}async function O(e,t,r,o){let i=e.context.authCookies.sessionToken.options;i.maxAge=r?void 0:e.context.sessionConfig.expiresIn,await e.setSignedCookie(e.context.authCookies.sessionToken.name,t.session.id,e.context.secret,{...i,...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),e.context.options.secondaryStorage&&await e.context.secondaryStorage?.set(t.session.id,JSON.stringify({user:t.user,session:t.session}),t.session.expiresAt.getTime()-Date.now())}function j(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})}function kr(e){let t=new Map;return e.split(", ").forEach(o=>{let[i,...n]=o.split("; "),[a,c]=i.split("="),s={value:c};n.forEach(d=>{let[l,f]=d.split("=");s[l.toLowerCase()]=f||!0}),t.set(a,s)}),t}function Rr(e){let t=e.split("; "),r=new Map;return t.forEach(o=>{let[i,n]=o.split("=");r.set(i,n)}),r}var Ye=require("oslo/jwt");var Ke=require("oslo/crypto"),Qe=require("oslo/encoding");var N=(e,t="ms")=>new Date(Date.now()+(t==="sec"?e*1e3:e));async function Ze(e){let t=await(0,Ke.sha256)(new TextEncoder().encode(e));return Qe.base64url.encode(new Uint8Array(t),{includePadding:!1})}function We(e){return{tokenType:e.token_type,accessToken:e.access_token,refreshToken:e.refresh_token,accessTokenExpiresAt:e.expires_in?N(e.expires_in,"sec"):void 0,scopes:e?.scope?typeof e.scope=="string"?e.scope.split(" "):e.scope:[],idToken:e.id_token}}async function k({id:e,options:t,authorizationEndpoint:r,state:o,codeVerifier:i,scopes:n,claims:a,disablePkce:c,redirectURI:s}){let d=new URL(r);if(d.searchParams.set("response_type","code"),d.searchParams.set("client_id",t.clientId),d.searchParams.set("state",o),d.searchParams.set("scope",n.join(" ")),d.searchParams.set("redirect_uri",t.redirectURI||s),!c&&i){let l=await Ze(i);d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("code_challenge",l)}if(a){let l=a.reduce((f,u)=>(f[u]=null,f),{});d.searchParams.set("claims",JSON.stringify({id_token:{email:null,email_verified:null,...l}}))}return d}var Je=require("@better-fetch/fetch");async function A({code:e,codeVerifier:t,redirectURI:r,options:o,tokenEndpoint:i}){let n=new URLSearchParams;n.set("grant_type","authorization_code"),n.set("code",e),t&&n.set("code_verifier",t),n.set("redirect_uri",r),n.set("client_id",o.clientId),n.set("client_secret",o.clientSecret);let{data:a,error:c}=await(0,Je.betterFetch)(i,{method:"POST",body:n,headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json","user-agent":"better-auth"}});if(c)throw c;return We(a)}var Xe=e=>{let t="https://appleid.apple.com/auth/token";return{id:"apple",name:"Apple",createAuthorizationURL({state:r,scopes:o,redirectURI:i}){let n=o||["email","name","openid"];return e.scope&&n.push(...e.scope),new URL(`https://appleid.apple.com/auth/authorize?client_id=${e.clientId}&response_type=code&redirect_uri=${i||e.redirectURI}&scope=${n.join(" ")}&state=${r}`)},validateAuthorizationCode:async({code:r,codeVerifier:o,redirectURI:i})=>A({code:r,codeVerifier:o,redirectURI:e.redirectURI||i,options:e,tokenEndpoint:t}),async getUserInfo(r){if(!r.idToken)return null;let o=(0,Ye.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 et=require("@better-fetch/fetch");var tt=e=>({id:"discord",name:"Discord",createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let i=r||["identify","email"];return e.scope&&i.push(...e.scope),new URL(`https://discord.com/api/oauth2/authorize?scope=${i.join("+")}&response_type=code&client_id=${e.clientId}&redirect_uri=${encodeURIComponent(e.redirectURI||o)}&state=${t}`)},validateAuthorizationCode:async({code:t,redirectURI:r})=>A({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,et.betterFetch)("https://discord.com/api/users/@me",{headers:{authorization:`Bearer ${t.accessToken}`}});if(o)return null;if(r.avatar===null){let i=r.discriminator==="0"?Number(BigInt(r.id)>>BigInt(22))%6:parseInt(r.discriminator)%5;r.image_url=`https://cdn.discordapp.com/embed/avatars/${i}.png`}else{let i=r.avatar.startsWith("a_")?"gif":"png";r.image_url=`https://cdn.discordapp.com/avatars/${r.id}/${r.avatar}.${i}`}return{user:{id:r.id,name:r.display_name||r.username||"",email:r.email,emailVerified:r.verified,image:r.image_url},data:r}}});var rt=require("@better-fetch/fetch");var ot=e=>({id:"facebook",name:"Facebook",async createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let i=r||["email","public_profile"];return e.scope&&i.push(...e.scope),await k({id:"facebook",options:e,authorizationEndpoint:"https://www.facebook.com/v21.0/dialog/oauth",scopes:i,state:t,redirectURI:o})},validateAuthorizationCode:async({code:t,redirectURI:r})=>A({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,rt.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 Te=require("@better-fetch/fetch");var nt=e=>{let t="https://github.com/login/oauth/access_token";return{id:"github",name:"GitHub",createAuthorizationURL({state:r,scopes:o,codeVerifier:i,redirectURI:n}){let a=o||["user:email"];return e.scope&&a.push(...e.scope),k({id:"github",options:e,authorizationEndpoint:"https://github.com/login/oauth/authorize",scopes:a,state:r,redirectURI:n,codeVerifier:i})},validateAuthorizationCode:async({code:r,redirectURI:o})=>A({code:r,redirectURI:e.redirectURI||o,options:e,tokenEndpoint:t}),async getUserInfo(r){let{data:o,error:i}=await(0,Te.betterFetch)("https://api.github.com/user",{headers:{"User-Agent":"better-auth",authorization:`Bearer ${r.accessToken}`}});if(i)return null;let n=!1;if(!o.email){let{data:a,error:c}=await(0,Te.betterFetch)("https://api.github.com/user/emails",{headers:{authorization:`Bearer ${r.accessToken}`,"User-Agent":"better-auth"}});c||(o.email=(a.find(s=>s.primary)??a[0])?.email,n=a.find(s=>s.email===o.email)?.verified??!1)}return{user:{id:o.id.toString(),name:o.name||o.login,email:o.email,image:o.avatar_url,emailVerified:n},data:o}}}};var it=require("oslo/jwt");var st=e=>({id:"google",name:"Google",async createAuthorizationURL({state:t,scopes:r,codeVerifier:o,redirectURI:i}){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 E("CLIENT_ID_AND_SECRET_REQUIRED");if(!o)throw new E("codeVerifier is required for Google");let n=r||["email","profile","openid"];e.scope&&n.push(...e.scope);let a=await k({id:"google",options:e,authorizationEndpoint:"https://accounts.google.com/o/oauth2/auth",scopes:n,state:t,codeVerifier:o,redirectURI:i});return e.accessType&&a.searchParams.set("access_type",e.accessType),e.prompt&&a.searchParams.set("prompt",e.prompt),a},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>A({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,it.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 at=require("@better-fetch/fetch"),dt=require("oslo/jwt");var ct=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(i){let n=i.scopes||["openid","profile","email","User.Read"];return e.scope&&n.push(...e.scope),k({id:"microsoft",options:e,authorizationEndpoint:r,state:i.state,codeVerifier:i.codeVerifier,scopes:n,redirectURI:i.redirectURI})},validateAuthorizationCode({code:i,codeVerifier:n,redirectURI:a}){return A({code:i,codeVerifier:n,redirectURI:e.redirectURI||a,options:e,tokenEndpoint:o})},async getUserInfo(i){if(!i.idToken)return null;let n=(0,dt.parseJWT)(i.idToken)?.payload,a=e.profilePhotoSize||48;return await(0,at.betterFetch)(`https://graph.microsoft.com/v1.0/me/photos/${a}x${a}/$value`,{headers:{Authorization:`Bearer ${i.accessToken}`},async onResponse(c){if(!(e.disableProfilePhoto||!c.response.ok))try{let d=await c.response.clone().arrayBuffer(),l=Buffer.from(d).toString("base64");n.picture=`data:image/jpeg;base64, ${l}`}catch(s){h.error(s)}}}),{user:{id:n.sub,name:n.name,email:n.email,image:n.picture,emailVerified:!0},data:n}}}};var lt=require("@better-fetch/fetch");var ut=e=>({id:"spotify",name:"Spotify",createAuthorizationURL({state:t,scopes:r,codeVerifier:o,redirectURI:i}){let n=r||["user-read-email"];return e.scope&&n.push(...e.scope),k({id:"spotify",options:e,authorizationEndpoint:"https://accounts.spotify.com/authorize",scopes:n,state:t,codeVerifier:o,redirectURI:i})},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>A({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,lt.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 Ho=require("@better-fetch/fetch");var pt=require("oslo/jwt");var ft=e=>({id:"twitch",name:"Twitch",createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let i=r||["user:read:email","openid"];return e.scope&&i.push(...e.scope),k({id:"twitch",redirectURI:o,options:e,authorizationEndpoint:"https://id.twitch.tv/oauth2/authorize",scopes:i,state:t,claims:e.claims||["email","email_verified","preferred_username","picture"]})},validateAuthorizationCode:async({code:t,redirectURI:r})=>A({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,pt.parseJWT)(r)?.payload;return{user:{id:o.sub,name:o.preferred_username,email:o.email,image:o.picture,emailVerified:!1},data:o}}});var mt=require("@better-fetch/fetch");var gt=e=>({id:"twitter",name:"Twitter",createAuthorizationURL(t){let r=t.scopes||["account_info.read"];return e.scope&&r.push(...e.scope),k({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})=>A({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,mt.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 ht=require("@better-fetch/fetch");var yt=e=>{let t="https://api.dropboxapi.com/oauth2/token";return{id:"dropbox",name:"Dropbox",createAuthorizationURL:async({state:r,scopes:o,codeVerifier:i,redirectURI:n})=>{let a=o||["account_info.read"];return e.scope&&a.push(...e.scope),await k({id:"dropbox",options:e,authorizationEndpoint:"https://www.dropbox.com/oauth2/authorize",scopes:a,state:r,redirectURI:n,codeVerifier:i})},validateAuthorizationCode:async({code:r,codeVerifier:o,redirectURI:i})=>await A({code:r,codeVerifier:o,redirectURI:e.redirectURI||i,options:e,tokenEndpoint:t}),async getUserInfo(r){let{data:o,error:i}=await(0,ht.betterFetch)("https://api.dropboxapi.com/2/users/get_current_account",{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`}});return i?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 wt=require("@better-fetch/fetch");var bt=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:i,redirectURI:n})=>{let a=i||["profile","email","openid"];return e.scope&&a.push(...e.scope),await k({id:"linkedin",options:e,authorizationEndpoint:t,scopes:a,state:o,redirectURI:n})},validateAuthorizationCode:async({code:o,redirectURI:i})=>await A({code:o,redirectURI:e.redirectURI||i,options:e,tokenEndpoint:r}),async getUserInfo(o){let{data:i,error:n}=await(0,wt.betterFetch)("https://api.linkedin.com/v2/userinfo",{method:"GET",headers:{Authorization:`Bearer ${o.accessToken}`}});return n?null:{user:{id:i.sub,name:i.name,email:i.email,emailVerified:i.email_verified||!1,image:i.picture},data:i}}}};var At=require("@better-fetch/fetch");var Ee=(e="")=>e.split("://").map(t=>t.replace(/\/{2,}/g,"/")).join("://"),xr=e=>{let t=e||"https://gitlab.com";return{authorizationEndpoint:Ee(`${t}/oauth/authorize`),tokenEndpoint:Ee(`${t}/oauth/token`),userinfoEndpoint:Ee(`${t}/api/v4/user`)}},kt=e=>{let{authorizationEndpoint:t,tokenEndpoint:r,userinfoEndpoint:o}=xr(e.issuer),i="gitlab";return{id:i,name:"Gitlab",createAuthorizationURL:async({state:a,scopes:c,codeVerifier:s,redirectURI:d})=>{let l=c||["read_user"];return e.scope&&l.push(...e.scope),await k({id:i,options:e,authorizationEndpoint:t,scopes:l,state:a,redirectURI:d,codeVerifier:s})},validateAuthorizationCode:async({code:a,redirectURI:c})=>A({code:a,redirectURI:e.redirectURI||c,options:e,tokenEndpoint:r}),async getUserInfo(a){let{data:c,error:s}=await(0,At.betterFetch)(o,{headers:{authorization:`Bearer ${a.accessToken}`}});return s||c.state!=="active"||c.locked?null:{user:{id:c.id.toString(),name:c.name??c.username,email:c.email,image:c.avatar_url,emailVerified:!0},data:c}}}};var Ie={apple:Xe,discord:tt,facebook:ot,github:nt,microsoft:ct,google:st,spotify:ut,twitch:ft,twitter:gt,dropbox:yt,linkedin:bt,gitlab:kt},me=Object.keys(Ie);var vt=require("oslo"),ge=require("oslo/jwt"),S=require("zod");var H=require("better-call");var Q=require("better-call");var Z=require("zod"),Pe=()=>y("/get-session",{method:"GET",query:Z.z.optional(Z.z.object({disableCookieCache:Z.z.boolean().optional()})),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&&!e.query?.disableCookieCache){let d=JSON.parse(r)?.session;if(d?.expiresAt>new Date)return e.json(d)}let i=await e.context.internalAdapter.findSession(t);if(!i||i.session.expiresAt<new Date)return j(e),i&&await e.context.internalAdapter.deleteSession(i.session.id),e.json(null,{status:401});if(o)return e.json(i);let n=e.context.sessionConfig.expiresIn,a=e.context.sessionConfig.updateAge;if(i.session.expiresAt.valueOf()-n*1e3+a*1e3<=Date.now()){let d=await e.context.internalAdapter.updateSession(i.session.id,{expiresAt:N(e.context.sessionConfig.expiresIn,"sec")});if(!d)return j(e),e.json(null,{status:401});let l=(d.expiresAt.valueOf()-Date.now())/1e3;return await O(e,{session:d,user:i.user},!1,{maxAge:l}),e.json({session:d,user:i.user})}return e.json(i)}catch(t){return e.context.logger.error(t),e.json(null,{status:500})}}),Oe=async e=>await Pe()({...e,_flag:"json",headers:e.headers}),_=de(async e=>{let t=await Oe(e);if(!t?.session)throw new Q.APIError("UNAUTHORIZED");return{session:t}}),Rt=()=>y("/list-sessions",{method:"GET",use:[_],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)}),xt=y("/revoke-session",{method:"POST",body:Z.z.object({id:Z.z.string()}),use:[_],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})}),Ut=y("/revoke-sessions",{method:"POST",use:[_],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 F(e,t,r){return await(0,ge.createJWT)("HS256",Buffer.from(e),{email:t.toLowerCase(),updateTo:r},{expiresIn:new vt.TimeSpan(1,"h"),issuer:"better-auth",subject:"verify-email",audiences:[t],includeIssuedTimestamp:!0})}var Tt=y("/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()})},async e=>{if(!e.context.options.emailVerification?.sendVerificationEmail)throw e.context.logger.error("Verification email isn't enabled."),new H.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 H.APIError("BAD_REQUEST",{message:"User not found"});let o=await F(e.context.secret,t),i=`${e.context.baseURL}/verify-email?token=${o}&callbackURL=${e.body.callbackURL||e.query?.currentURL||"/"}`;return await e.context.options.emailVerification.sendVerificationEmail(r.user,i,o),e.json({status:!0})}),Et=y("/verify-email",{method:"GET",query:S.z.object({token:S.z.string(),callbackURL:S.z.string().optional()})},async e=>{let{token:t}=e.query,r;try{r=await(0,ge.validateJWT)("HS256",Buffer.from(e.context.secret),t)}catch(a){throw e.context.logger.error("Failed to verify email",a),new H.APIError("BAD_REQUEST",{message:"Invalid token"})}let i=S.z.object({email:S.z.string().email(),updateTo:S.z.string().optional()}).parse(r.payload);if(!await e.context.internalAdapter.findUserByEmail(i.email))throw new H.APIError("BAD_REQUEST",{message:"User not found"});if(i.updateTo){let a=await Oe(e);if(!a)throw e.query.callbackURL?e.redirect(`${e.query.callbackURL}?error=unauthorized`):new H.APIError("UNAUTHORIZED",{message:"Session not found"});if(a.user.email!==i.email)throw e.query.callbackURL?e.redirect(`${e.query.callbackURL}?error=unauthorized`):new H.APIError("UNAUTHORIZED",{message:"Invalid session"});let c=await e.context.internalAdapter.updateUserByEmail(i.email,{email:i.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(i.email,{emailVerified:!0}),e.query.callbackURL)throw e.redirect(e.query.callbackURL);return e.json({user:null,status:!0})});var It=y("/sign-in/social",{method:"POST",query:P.z.object({currentURL:P.z.string().optional()}).optional(),body:P.z.object({callbackURL:P.z.string().optional(),provider:P.z.enum(me)})},async e=>{let t=e.context.socialProviders.find(n=>n.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 L.APIError("NOT_FOUND",{message:"Provider not found"});let{codeVerifier:r,state:o}=await te(e),i=await t.createAuthorizationURL({state:o,codeVerifier:r,redirectURI:`${e.context.baseURL}/callback/${t.id}`});return e.json({url:i.toString(),redirect:!0})}),Pt=y("/sign-in/email",{method:"POST",body:P.z.object({email:P.z.string(),password:P.z.string(),callbackURL:P.z.string().optional(),dontRememberMe:P.z.boolean().default(!1).optional()})},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 L.APIError("BAD_REQUEST",{message:"Email and password is not enabled"});let{email:t,password:r}=e.body;if(!P.z.string().email().safeParse(t).success)throw new L.APIError("BAD_REQUEST",{message:"Invalid email"});if(!P.z.string().email().safeParse(t).success)throw new L.APIError("BAD_REQUEST",{message:"Invalid email"});let n=await e.context.internalAdapter.findUserByEmail(t,{includeAccounts:!0});if(!n)throw await e.context.password.hash(r),e.context.logger.error("User not found",{email:t}),new L.APIError("UNAUTHORIZED",{message:"Invalid email or password"});let a=n.accounts.find(l=>l.providerId==="credential");if(!a)throw e.context.logger.error("Credential account not found",{email:t}),new L.APIError("UNAUTHORIZED",{message:"Invalid email or password"});let c=a?.password;if(!c)throw e.context.logger.error("Password not found",{email:t}),new L.APIError("UNAUTHORIZED",{message:"Unexpected error"});if(!await e.context.password.verify(c,r))throw e.context.logger.error("Invalid password"),new L.APIError("UNAUTHORIZED",{message:"Invalid email or password"});if(e.context.options?.emailAndPassword?.requireEmailVerification&&!n.user.emailVerified){if(!e.context.options?.emailVerification?.sendVerificationEmail)throw h.error("Email verification is required but no email verification handler is provided"),new L.APIError("INTERNAL_SERVER_ERROR",{message:"Email is not verified."});let l=await F(e.context.secret,n.user.email),f=`${e.context.options.baseURL}/verify-email?token=${l}`;throw await e.context.options.emailVerification.sendVerificationEmail(n.user,f,l),e.context.logger.error("Email not verified",{email:t}),new L.APIError("FORBIDDEN",{message:"Email is not verified. Check your email for a verification link"})}let d=await e.context.internalAdapter.createSession(n.user.id,e.headers,e.body.dontRememberMe);if(!d)throw e.context.logger.error("Failed to create session"),new L.APIError("UNAUTHORIZED",{message:"Failed to create session"});return await O(e,{session:d,user:n.user},e.body.dontRememberMe),e.json({user:n.user,session:d,redirect:!!e.body.callbackURL,url:e.body.callbackURL})});var re=require("zod");var b=require("zod"),$n=b.z.object({id:b.z.string(),providerId:b.z.string(),accountId:b.z.string(),userId:b.z.string(),accessToken:b.z.string().nullable().optional(),refreshToken:b.z.string().nullable().optional(),idToken:b.z.string().nullable().optional(),expiresAt:b.z.date().nullable().optional(),password:b.z.string().optional().nullable()}),Ot=b.z.object({id:b.z.string(),email:b.z.string().transform(e=>e.toLowerCase()),emailVerified:b.z.boolean().default(!1),name:b.z.string(),image:b.z.string().optional(),createdAt:b.z.date().default(new Date),updatedAt:b.z.date().default(new Date)}),Mn=b.z.object({id:b.z.string(),userId:b.z.string(),expiresAt:b.z.date(),ipAddress:b.z.string().optional(),userAgent:b.z.string().optional()}),Hn=b.z.object({id:b.z.string(),value:b.z.string(),expiresAt:b.z.date(),identifier:b.z.string()});function Ur(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 vr(e,t){let r=t.action||"create",o=t.fields,i={};for(let n in o){if(n in e){if(o[n].input===!1){if(o[n].defaultValue){i[n]=o[n].defaultValue;continue}continue}i[n]=e[n];continue}if(o[n].defaultValue&&r==="create"){i[n]=o[n].defaultValue;continue}}return i}function he(e,t,r){let o=Ur(e,"user");return vr(t||{},{fields:o,action:r})}var _t=y("/callback/:id",{method:"GET",query:re.z.object({state:re.z.string(),code:re.z.string().optional(),error:re.z.string().optional()}),metadata:$},async e=>{if(!e.query.code)throw e.redirect(`${e.context.baseURL}/error?error=${e.query.error||"no_code"}`);let t=e.context.socialProviders.find(m=>m.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{codeVerifier:r,callbackURL:o,link:i,errorURL:n}=await Ue(e),a;try{a=await t.validateAuthorizationCode({code:e.query.code,codeVerifier:r,redirectURI:`${e.context.baseURL}/callback/${t.id}`})}catch(m){throw e.context.logger.error(m),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`)}let c=await t.getUserInfo(a).then(m=>m?.user),s=v(),d=Ot.safeParse({...c,id:s});if(!c||d.success===!1)throw h.error("Unable to get user info",d.error),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(!o)throw h.error("No callback URL found"),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(i){if(i.email!==c.email.toLowerCase())return l("email_doesn't_match");if(!await e.context.internalAdapter.createAccount({userId:i.userId,providerId:t.id,accountId:c.id}))return l("unable_to_link_account");let w;try{w=new URL(o).toString()}catch{w=o}throw e.redirect(w)}function l(m){throw e.redirect(`${n||o||`${e.context.baseURL}/error`}?error=${m}`)}let f=await e.context.internalAdapter.findUserByEmail(c.email,{includeAccounts:!0}).catch(m=>{throw h.error(`Better auth was unable to query your database.
4
4
  Error: `,m),e.redirect(`${e.context.baseURL}/error?error=internal_server_error`)}),u=f?.user;if(f){let m=f.accounts.find(w=>w.providerId===t.id);if(m)await e.context.internalAdapter.updateAccount(m.id,{accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt});else{(!e.context.options.account?.accountLinking?.trustedProviders?.includes(t.id)&&!c.emailVerified||e.context.options.account?.accountLinking?.enabled===!1)&&(qe&&h.warn(`User already exist but account isn't linked to ${t.id}. To read more about how account linking works in Better Auth see https://www.better-auth.com/docs/concepts/users-accounts#account-linking.`),l("account_not_linked"));try{await e.context.internalAdapter.linkAccount({providerId:t.id,accountId:c.id.toString(),id:`${t.id}:${c.id}`,userId:f.user.id,accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt})}catch(Ne){h.error("Unable to link account",Ne),l("unable_to_link_account")}}}else try{let m=c.emailVerified||!1;if(u=await e.context.internalAdapter.createOAuthUser({...d.data,emailVerified:m},{accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt,providerId:t.id,accountId:c.id.toString()}).then(w=>w?.user),!m&&u&&e.context.options.emailVerification?.sendOnSignUp){let w=await F(e.context.secret,u.email),R=`${e.context.baseURL}/verify-email?token=${w}&callbackURL=${o}`;await e.context.options.emailVerification?.sendVerificationEmail?.(u,R,w)}}catch(m){h.error("Unable to create user",m),l("unable_to_create_user")}if(!u)return l("unable_to_create_user");let p=await e.context.internalAdapter.createSession(u.id,e.request);p||l("unable_to_create_session"),await O(e,{session:p,user:u});let g;try{g=new URL(o).toString()}catch{g=o}throw e.redirect(g)});var oi=require("zod");var St=require("better-call"),Lt=y("/sign-out",{method:"POST"},async e=>{let t=await e.getSignedCookie(e.context.authCookies.sessionToken.name,e.context.secret);if(!t)throw new St.APIError("BAD_REQUEST",{message:"Session not found"});return await e.context.internalAdapter.deleteSession(t),j(e),e.json({success:!0})});var C=require("zod");var oe=require("better-call");function Ct(e,t,r){let o=t?new URL(t,e.baseURL):new URL(`${e.baseURL}/error`);return r&&Object.entries(r).forEach(([i,n])=>o.searchParams.set(i,n)),o.href}function Tr(e,t,r){let o=new URL(t,e.baseURL);return r&&Object.entries(r).forEach(([i,n])=>o.searchParams.set(i,n)),o.href}var Bt=y("/forget-password",{method:"POST",body:C.z.object({email:C.z.string().email(),redirectTo:C.z.string()})},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 oe.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 i=60*60*1,n=new Date(Date.now()+1e3*(e.context.options.emailAndPassword.resetPasswordTokenExpiresIn||i)),a=e.context.uuid();await e.context.internalAdapter.createVerificationValue({value:o.user.id,identifier:`reset-password:${a}`,expiresAt:n});let c=`${e.context.baseURL}/reset-password/${a}?callbackURL=${r}`;return await e.context.options.emailAndPassword.sendResetPassword(o.user,c),e.json({status:!0})}),Dt=y("/reset-password/:token",{method:"GET",query:C.z.object({callbackURL:C.z.string()})},async e=>{let{token:t}=e.params,{callbackURL:r}=e.query;if(!t||!r)throw e.redirect(Ct(e.context,r,{error:"INVALID_TOKEN"}));let o=await e.context.internalAdapter.findVerificationValue(`reset-password:${t}`);throw!o||o.expiresAt<new Date?e.redirect(Ct(e.context,r,{error:"INVALID_TOKEN"})):e.redirect(Tr(e.context,r,{token:t}))}),Nt=y("/reset-password",{query:C.z.optional(C.z.object({token:C.z.string().optional(),currentURL:C.z.string().optional()})),method:"POST",body:C.z.object({newPassword:C.z.string()})},async e=>{let t=e.query?.token||(e.query?.currentURL?new URL(e.query.currentURL).searchParams.get("token"):"");if(!t)throw new oe.APIError("BAD_REQUEST",{message:"Token not found"});let{newPassword:r}=e.body,o=`reset-password:${t}`,i=await e.context.internalAdapter.findVerificationValue(o);if(!i||i.expiresAt<new Date)throw new oe.APIError("BAD_REQUEST",{message:"Invalid token"});await e.context.internalAdapter.deleteVerificationValue(i.id);let n=i.value,a=await e.context.password.hash(r);if(!(await e.context.internalAdapter.findAccounts(n)).find(l=>l.providerId==="credential"))return await e.context.internalAdapter.createAccount({userId:n,providerId:"credential",password:a,accountId:e.context.uuid()}),e.json({status:!0});if(!await e.context.internalAdapter.updatePassword(n,a))throw new oe.APIError("BAD_REQUEST",{message:"Failed to update password"});return e.json({status:!0})});var x=require("zod");var U=require("better-call");var Ft=()=>y("/update-user",{method:"POST",body:x.z.record(x.z.string(),x.z.any()),use:[_]},async e=>{let t=e.body;if(t.email)throw new U.APIError("BAD_REQUEST",{message:"You can't update email"});let{name:r,image:o,...i}=t,n=e.context.session;if(!o&&!r&&Object.keys(i).length===0)return e.json({user:n.user});let a=he(e.context.options,i,"update"),c=await e.context.internalAdapter.updateUserByEmail(n.user.email,{name:r,image:o,...a});return await O(e,{session:n.session,user:c}),e.json({user:c})}),Vt=y("/change-password",{method:"POST",body:x.z.object({newPassword:x.z.string(),currentPassword:x.z.string(),revokeOtherSessions:x.z.boolean().optional()}),use:[_]},async e=>{let{newPassword:t,currentPassword:r,revokeOtherSessions:o}=e.body,i=e.context.session,n=e.context.password.config.minPasswordLength;if(t.length<n)throw e.context.logger.error("Password is too short"),new U.APIError("BAD_REQUEST",{message:"Password is too short"});let a=e.context.password.config.maxPasswordLength;if(t.length>a)throw e.context.logger.error("Password is too long"),new U.APIError("BAD_REQUEST",{message:"Password too long"});let s=(await e.context.internalAdapter.findAccounts(i.user.id)).find(f=>f.providerId==="credential"&&f.password);if(!s||!s.password)throw new U.APIError("BAD_REQUEST",{message:"User does not have a password"});let d=await e.context.password.hash(t);if(!await e.context.password.verify(s.password,r))throw new U.APIError("BAD_REQUEST",{message:"Incorrect password"});if(await e.context.internalAdapter.updateAccount(s.id,{password:d}),o){await e.context.internalAdapter.deleteSessions(i.user.id);let f=await e.context.internalAdapter.createSession(i.user.id,e.headers);if(!f)throw new U.APIError("INTERNAL_SERVER_ERROR",{message:"Unable to create session"});await O(e,{session:f,user:i.user})}return e.json(i.user)}),qt=y("/set-password",{method:"POST",body:x.z.object({newPassword:x.z.string()}),metadata:{SERVER_ONLY:!0},use:[_]},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 U.APIError("BAD_REQUEST",{message:"Password is too short"});let i=e.context.password.config.maxPasswordLength;if(t.length>i)throw e.context.logger.error("Password is too long"),new U.APIError("BAD_REQUEST",{message:"Password too long"});let a=(await e.context.internalAdapter.findAccounts(r.user.id)).find(s=>s.providerId==="credential"&&s.password),c=await e.context.password.hash(t);if(!a)return await e.context.internalAdapter.linkAccount({userId:r.user.id,providerId:"credential",accountId:r.user.id,password:c}),e.json(r.user);throw new U.APIError("BAD_REQUEST",{message:"user already has a password"})}),jt=y("/delete-user",{method:"POST",body:x.z.object({password:x.z.string()}),use:[_]},async e=>{let{password:t}=e.body,r=e.context.session,i=(await e.context.internalAdapter.findAccounts(r.user.id)).find(a=>a.providerId==="credential"&&a.password);if(!i||!i.password)throw new U.APIError("BAD_REQUEST",{message:"User does not have a password"});if(!await e.context.password.verify(i.password,t))throw new U.APIError("BAD_REQUEST",{message:"Incorrect password"});return await e.context.internalAdapter.deleteUser(r.user.id),await e.context.internalAdapter.deleteSessions(r.user.id),j(e),e.json(null)}),zt=y("/change-email",{method:"POST",query:x.z.object({currentURL:x.z.string().optional()}).optional(),body:x.z.object({newEmail:x.z.string().email(),callbackURL:x.z.string().optional()}),use:[_]},async e=>{if(!e.context.options.user?.changeEmail?.enabled)throw e.context.logger.error("Change email is disabled."),new U.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 U.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 U.APIError("BAD_REQUEST",{message:"Couldn't update your email"});if(e.context.session.user.emailVerified!==!0){let i=await e.context.internalAdapter.updateUserByEmail(e.context.session.user.email,{email:e.body.newEmail});return e.json({user:i,status:!0})}if(!e.context.options.user.changeEmail.sendChangeEmailVerification)throw e.context.logger.error("Verification email isn't enabled."),new U.APIError("BAD_REQUEST",{message:"Verification email isn't enabled"});let r=await F(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 Er=(e="Unknown")=>`<!DOCTYPE html>
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{APIError as kt,createRouter as Er,statusCode as Ir}from"better-call";import{APIError as Zt}from"better-call";import{createEndpointCreator as jt,createMiddleware as xe,createMiddlewareCreator as zt}from"better-call";var Ue=xe(async()=>({})),ee=zt({use:[Ue,xe(async()=>({}))]}),h=jt({use:[Ue]});function Vr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var z={isAction:!1};import{nanoid as $t}from"nanoid";var T=e=>$t(e);import{generateCodeVerifier as Gt,generateState as Kt}from"oslo/oauth2";import{z as V}from"zod";import{APIError as Pe}from"better-call";var te=Object.create(null),G=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?te:globalThis),E=new Proxy(te,{get(e,t){return G()[t]??te[t]},has(e,t){let r=G();return t in r||t in te},set(e,t,r){let o=G(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=G(!0);return delete r[t],!0},ownKeys(){let e=G(!0);return Object.keys(e)}});function Mt(e){return e?e!=="false":!1}var re=typeof process<"u"&&process.env&&process.env.NODE_ENV||"",K=re==="production",ve=re==="dev"||re==="development",Te=re==="test"||Mt(E.TEST);var I=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}},Ee=class extends I{constructor(t){super(`The package "${t}" is required. Make sure it is installed.`,t)}};function Ht(e){try{return new URL(e).pathname!=="/"}catch{throw new I(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function ue(e,t="/api/auth"){return Ht(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function Q(e,t){if(e)return ue(e,t);let r=E.BETTER_AUTH_URL||E.NEXT_PUBLIC_BETTER_AUTH_URL||E.PUBLIC_BETTER_AUTH_URL||E.NUXT_PUBLIC_BETTER_AUTH_URL||E.NUXT_PUBLIC_AUTH_URL||(E.BASE_URL!=="/"?E.BASE_URL:void 0);if(r)return ue(r,t);if(typeof window<"u")return ue(window.location.origin,t)}function Ie(e){try{return new URL(e).origin}catch{return null}}async function oe(e,t){let r=e.body?.callbackURL||(e.query?.currentURL?Ie(e.query?.currentURL):"")||e.context.options.baseURL;if(!r)throw new Pe("BAD_REQUEST",{message:"callbackURL is required"});let o=Gt(),i=Kt(),n=JSON.stringify({callbackURL:r,codeVerifier:o,errorURL:e.query?.currentURL,link:t,expiresAt:Date.now()+10*60*1e3}),a=new Date;a.setMinutes(a.getMinutes()+10);let c=await e.context.internalAdapter.createVerificationValue({value:n,identifier:i,expiresAt:a});if(!c)throw y.error("Unable to create verification. Make sure the database adapter is properly working and there is a verification table in the database"),new Pe("INTERNAL_SERVER_ERROR",{message:"Unable to create verification"});return{state:c.identifier,codeVerifier:o}}async function Oe(e){let t=e.query.state,r=await e.context.internalAdapter.findVerificationValue(t);if(!r)throw y.error("State Mismatch. Verification not found",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);let o=V.object({callbackURL:V.string(),codeVerifier:V.string(),errorURL:V.string().optional(),expiresAt:V.number(),link:V.object({email:V.string(),userId:V.string()}).optional()}).parse(JSON.parse(r.value));if(o.errorURL||(o.errorURL=`${e.context.baseURL}/error`),o.expiresAt<Date.now())throw await e.context.internalAdapter.deleteVerificationValue(r.id),y.error("State expired.",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);return await e.context.internalAdapter.deleteVerificationValue(r.id),o}import{createConsola as Qt}from"consola";var q=Qt({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),pe=e=>({log:(...t)=>{!e?.disabled&&q.log("",...t)},error:(...t)=>{!e?.disabled&&q.error("",...t)},warn:(...t)=>{!e?.disabled&&q.warn("",...t)},info:(...t)=>{!e?.disabled&&q.info("",...t)},debug:(...t)=>{!e?.disabled&&q.debug("",...t)},box:(...t)=>{!e?.disabled&&q.box("",...t)},success:(...t)=>{!e?.disabled&&q.success("",...t)},break:(...t)=>{!e?.disabled&&console.log(`
1
+ import{APIError as kt,createRouter as Er,statusCode as Ir}from"better-call";import{APIError as Zt}from"better-call";import{createEndpointCreator as jt,createMiddleware as xe,createMiddlewareCreator as zt}from"better-call";var Ue=xe(async()=>({})),ee=zt({use:[Ue,xe(async()=>({}))]}),h=jt({use:[Ue]});function Vr(e){return e.charAt(0).toUpperCase()+e.slice(1)}var z={isAction:!1};import{nanoid as $t}from"nanoid";var T=e=>$t(e);import{generateCodeVerifier as Gt,generateState as Kt}from"oslo/oauth2";import{z as V}from"zod";import{APIError as Pe}from"better-call";var te=Object.create(null),G=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?te:globalThis),E=new Proxy(te,{get(e,t){return G()[t]??te[t]},has(e,t){let r=G();return t in r||t in te},set(e,t,r){let o=G(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=G(!0);return delete r[t],!0},ownKeys(){let e=G(!0);return Object.keys(e)}});function Mt(e){return e?e!=="false":!1}var re=typeof process<"u"&&process.env&&process.env.NODE_ENV||"",K=re==="production",ve=re==="dev"||re==="development",Te=re==="test"||Mt(E.TEST);var I=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}},Ee=class extends I{constructor(t){super(`The package "${t}" is required. Make sure it is installed.`,t)}};function Ht(e){try{return new URL(e).pathname!=="/"}catch{throw new I(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function ue(e,t="/api/auth"){return Ht(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function Q(e,t){if(e)return ue(e,t);let r=E.BETTER_AUTH_URL||E.NEXT_PUBLIC_BETTER_AUTH_URL||E.PUBLIC_BETTER_AUTH_URL||E.NUXT_PUBLIC_BETTER_AUTH_URL||E.NUXT_PUBLIC_AUTH_URL||(E.BASE_URL!=="/"?E.BASE_URL:void 0);if(r)return ue(r,t);if(typeof window<"u"&&window.location)return ue(window.location.origin,t)}function Ie(e){try{return new URL(e).origin}catch{return null}}async function oe(e,t){let r=e.body?.callbackURL||(e.query?.currentURL?Ie(e.query?.currentURL):"")||e.context.options.baseURL;if(!r)throw new Pe("BAD_REQUEST",{message:"callbackURL is required"});let o=Gt(),i=Kt(),n=JSON.stringify({callbackURL:r,codeVerifier:o,errorURL:e.query?.currentURL,link:t,expiresAt:Date.now()+10*60*1e3}),a=new Date;a.setMinutes(a.getMinutes()+10);let c=await e.context.internalAdapter.createVerificationValue({value:n,identifier:i,expiresAt:a});if(!c)throw y.error("Unable to create verification. Make sure the database adapter is properly working and there is a verification table in the database"),new Pe("INTERNAL_SERVER_ERROR",{message:"Unable to create verification"});return{state:c.identifier,codeVerifier:o}}async function Oe(e){let t=e.query.state,r=await e.context.internalAdapter.findVerificationValue(t);if(!r)throw y.error("State Mismatch. Verification not found",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);let o=V.object({callbackURL:V.string(),codeVerifier:V.string(),errorURL:V.string().optional(),expiresAt:V.number(),link:V.object({email:V.string(),userId:V.string()}).optional()}).parse(JSON.parse(r.value));if(o.errorURL||(o.errorURL=`${e.context.baseURL}/error`),o.expiresAt<Date.now())throw await e.context.internalAdapter.deleteVerificationValue(r.id),y.error("State expired.",{state:t}),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);return await e.context.internalAdapter.deleteVerificationValue(r.id),o}import{createConsola as Qt}from"consola";var q=Qt({formatOptions:{date:!1,colors:!0,compact:!0},defaults:{tag:"Better Auth"}}),pe=e=>({log:(...t)=>{!e?.disabled&&q.log("",...t)},error:(...t)=>{!e?.disabled&&q.error("",...t)},warn:(...t)=>{!e?.disabled&&q.warn("",...t)},info:(...t)=>{!e?.disabled&&q.info("",...t)},debug:(...t)=>{!e?.disabled&&q.debug("",...t)},box:(...t)=>{!e?.disabled&&q.box("",...t)},success:(...t)=>{!e?.disabled&&q.success("",...t)},break:(...t)=>{!e?.disabled&&console.log(`
2
2
  `)}}),y=pe();var _e=ee(async e=>{if(e.request?.method!=="POST")return;let{body:t,query:r,context:o}=e,i=e.headers?.get("origin")||e.headers?.get("referer")||"",n=t?.callbackURL,a=t?.redirectTo,c=r?.currentURL,s=o.trustedOrigins,d=e.headers?.has("cookie"),l=(f,u)=>{if(!s.some(g=>f?.startsWith(g)||f?.startsWith("/")&&u!=="origin"))throw y.error(`Invalid ${u}: ${f}`),y.info(`If it's a valid URL, please add ${f} to trustedOrigins in your auth config
3
3
  `,`Current list of trustedOrigins: ${s}`),new Zt("FORBIDDEN",{message:`Invalid ${u}`})};d&&!e.context.options.advanced?.disableCSRFCheck&&l(i,"origin"),n&&l(n,"callbackURL"),a&&l(a,"redirectURL"),c&&l(c,"currentURL")});import{APIError as L}from"better-call";import{z as O}from"zod";import{TimeSpan as Wt}from"oslo";function fe(e){let r=(e.advanced?.useSecureCookies!==void 0?e.advanced?.useSecureCookies:e.baseURL!==void 0?!!e.baseURL.startsWith("https://"):K)?"__Secure-":"",o=!!e.advanced?.crossSubDomainCookies?.enabled,i=o?e.advanced?.crossSubDomainCookies?.domain||(e.baseURL?new URL(e.baseURL).hostname:void 0):void 0;if(o&&!i)throw new I("baseURL is required when crossSubdomainCookies are enabled");function n(a,c={}){let s=e.advanced?.cookiePrefix||e.appName||"better-auth",d=e.advanced?.cookies?.[a]?.name||`${s}.${a}`,l=e.advanced?.cookies?.[a]?.attributes;return{name:`${r}${d}`,attributes:{secure:!!r,sameSite:"lax",path:"/",httpOnly:!0,...o?{domain:i}:{},...e.advanced?.defaultCookieAttributes,...c,...l}}}return n}function Se(e){let t=fe(e),r=e.session?.expiresIn||new Wt(7,"d").seconds(),o=t("session_token",{maxAge:r}),i=t("session_data",{maxAge:e.session?.cookieCache?.maxAge||60*5}),n=t("dont_remember");return{sessionToken:{name:o.name,options:o.attributes},sessionData:{name:i.name,options:i.attributes},dontRememberToken:{name:n.name,options:n.attributes}}}async function _(e,t,r,o){let i=e.context.authCookies.sessionToken.options;i.maxAge=r?void 0:e.context.sessionConfig.expiresIn,await e.setSignedCookie(e.context.authCookies.sessionToken.name,t.session.id,e.context.secret,{...i,...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),e.context.options.secondaryStorage&&await e.context.secondaryStorage?.set(t.session.id,JSON.stringify({user:t.user,session:t.session}),t.session.expiresAt.getTime()-Date.now())}function j(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})}function wo(e){let t=new Map;return e.split(", ").forEach(o=>{let[i,...n]=o.split("; "),[a,c]=i.split("="),s={value:c};n.forEach(d=>{let[l,f]=d.split("=");s[l.toLowerCase()]=f||!0}),t.set(a,s)}),t}function bo(e){let t=e.split("; "),r=new Map;return t.forEach(o=>{let[i,n]=o.split("=");r.set(i,n)}),r}import{parseJWT as er}from"oslo/jwt";import{sha256 as Jt}from"oslo/crypto";import{base64url as Yt}from"oslo/encoding";var B=(e,t="ms")=>new Date(Date.now()+(t==="sec"?e*1e3:e));async function Le(e){let t=await Jt(new TextEncoder().encode(e));return Yt.encode(new Uint8Array(t),{includePadding:!1})}function Ce(e){return{tokenType:e.token_type,accessToken:e.access_token,refreshToken:e.refresh_token,accessTokenExpiresAt:e.expires_in?B(e.expires_in,"sec"):void 0,scopes:e?.scope?typeof e.scope=="string"?e.scope.split(" "):e.scope:[],idToken:e.id_token}}async function k({id:e,options:t,authorizationEndpoint:r,state:o,codeVerifier:i,scopes:n,claims:a,disablePkce:c,redirectURI:s}){let d=new URL(r);if(d.searchParams.set("response_type","code"),d.searchParams.set("client_id",t.clientId),d.searchParams.set("state",o),d.searchParams.set("scope",n.join(" ")),d.searchParams.set("redirect_uri",t.redirectURI||s),!c&&i){let l=await Le(i);d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("code_challenge",l)}if(a){let l=a.reduce((f,u)=>(f[u]=null,f),{});d.searchParams.set("claims",JSON.stringify({id_token:{email:null,email_verified:null,...l}}))}return d}import{betterFetch as Xt}from"@better-fetch/fetch";async function A({code:e,codeVerifier:t,redirectURI:r,options:o,tokenEndpoint:i}){let n=new URLSearchParams;n.set("grant_type","authorization_code"),n.set("code",e),t&&n.set("code_verifier",t),n.set("redirect_uri",r),n.set("client_id",o.clientId),n.set("client_secret",o.clientSecret);let{data:a,error:c}=await Xt(i,{method:"POST",body:n,headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json","user-agent":"better-auth"}});if(c)throw c;return Ce(a)}var Be=e=>{let t="https://appleid.apple.com/auth/token";return{id:"apple",name:"Apple",createAuthorizationURL({state:r,scopes:o,redirectURI:i}){let n=o||["email","name","openid"];return e.scope&&n.push(...e.scope),new URL(`https://appleid.apple.com/auth/authorize?client_id=${e.clientId}&response_type=code&redirect_uri=${i||e.redirectURI}&scope=${n.join(" ")}&state=${r}`)},validateAuthorizationCode:async({code:r,codeVerifier:o,redirectURI:i})=>A({code:r,codeVerifier:o,redirectURI:e.redirectURI||i,options:e,tokenEndpoint:t}),async getUserInfo(r){if(!r.idToken)return null;let o=er(r.idToken)?.payload;return o?{user:{id:o.sub,name:o.name,email:o.email,emailVerified:o.email_verified==="true"},data:o}:null}}};import{betterFetch as tr}from"@better-fetch/fetch";var De=e=>({id:"discord",name:"Discord",createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let i=r||["identify","email"];return e.scope&&i.push(...e.scope),new URL(`https://discord.com/api/oauth2/authorize?scope=${i.join("+")}&response_type=code&client_id=${e.clientId}&redirect_uri=${encodeURIComponent(e.redirectURI||o)}&state=${t}`)},validateAuthorizationCode:async({code:t,redirectURI:r})=>A({code:t,redirectURI:e.redirectURI||r,options:e,tokenEndpoint:"https://discord.com/api/oauth2/token"}),async getUserInfo(t){let{data:r,error:o}=await tr("https://discord.com/api/users/@me",{headers:{authorization:`Bearer ${t.accessToken}`}});if(o)return null;if(r.avatar===null){let i=r.discriminator==="0"?Number(BigInt(r.id)>>BigInt(22))%6:parseInt(r.discriminator)%5;r.image_url=`https://cdn.discordapp.com/embed/avatars/${i}.png`}else{let i=r.avatar.startsWith("a_")?"gif":"png";r.image_url=`https://cdn.discordapp.com/avatars/${r.id}/${r.avatar}.${i}`}return{user:{id:r.id,name:r.display_name||r.username||"",email:r.email,emailVerified:r.verified,image:r.image_url},data:r}}});import{betterFetch as rr}from"@better-fetch/fetch";var Ne=e=>({id:"facebook",name:"Facebook",async createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let i=r||["email","public_profile"];return e.scope&&i.push(...e.scope),await k({id:"facebook",options:e,authorizationEndpoint:"https://www.facebook.com/v21.0/dialog/oauth",scopes:i,state:t,redirectURI:o})},validateAuthorizationCode:async({code:t,redirectURI:r})=>A({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 rr("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}}});import{betterFetch as Fe}from"@better-fetch/fetch";var Ve=e=>{let t="https://github.com/login/oauth/access_token";return{id:"github",name:"GitHub",createAuthorizationURL({state:r,scopes:o,codeVerifier:i,redirectURI:n}){let a=o||["user:email"];return e.scope&&a.push(...e.scope),k({id:"github",options:e,authorizationEndpoint:"https://github.com/login/oauth/authorize",scopes:a,state:r,redirectURI:n,codeVerifier:i})},validateAuthorizationCode:async({code:r,redirectURI:o})=>A({code:r,redirectURI:e.redirectURI||o,options:e,tokenEndpoint:t}),async getUserInfo(r){let{data:o,error:i}=await Fe("https://api.github.com/user",{headers:{"User-Agent":"better-auth",authorization:`Bearer ${r.accessToken}`}});if(i)return null;let n=!1;if(!o.email){let{data:a,error:c}=await Fe("https://api.github.com/user/emails",{headers:{authorization:`Bearer ${r.accessToken}`,"User-Agent":"better-auth"}});c||(o.email=(a.find(s=>s.primary)??a[0])?.email,n=a.find(s=>s.email===o.email)?.verified??!1)}return{user:{id:o.id.toString(),name:o.name||o.login,email:o.email,image:o.avatar_url,emailVerified:n},data:o}}}};import{parseJWT as or}from"oslo/jwt";var qe=e=>({id:"google",name:"Google",async createAuthorizationURL({state:t,scopes:r,codeVerifier:o,redirectURI:i}){if(!e.clientId||!e.clientSecret)throw y.error("Client Id and Client Secret is required for Google. Make sure to provide them in the options."),new I("CLIENT_ID_AND_SECRET_REQUIRED");if(!o)throw new I("codeVerifier is required for Google");let n=r||["email","profile","openid"];e.scope&&n.push(...e.scope);let a=await k({id:"google",options:e,authorizationEndpoint:"https://accounts.google.com/o/oauth2/auth",scopes:n,state:t,codeVerifier:o,redirectURI:i});return e.accessType&&a.searchParams.set("access_type",e.accessType),e.prompt&&a.searchParams.set("prompt",e.prompt),a},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>A({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=or(t.idToken)?.payload;return{user:{id:r.sub,name:r.name,email:r.email,image:r.picture,emailVerified:r.email_verified},data:r}}});import{betterFetch as nr}from"@better-fetch/fetch";import{parseJWT as ir}from"oslo/jwt";var je=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(i){let n=i.scopes||["openid","profile","email","User.Read"];return e.scope&&n.push(...e.scope),k({id:"microsoft",options:e,authorizationEndpoint:r,state:i.state,codeVerifier:i.codeVerifier,scopes:n,redirectURI:i.redirectURI})},validateAuthorizationCode({code:i,codeVerifier:n,redirectURI:a}){return A({code:i,codeVerifier:n,redirectURI:e.redirectURI||a,options:e,tokenEndpoint:o})},async getUserInfo(i){if(!i.idToken)return null;let n=ir(i.idToken)?.payload,a=e.profilePhotoSize||48;return await nr(`https://graph.microsoft.com/v1.0/me/photos/${a}x${a}/$value`,{headers:{Authorization:`Bearer ${i.accessToken}`},async onResponse(c){if(!(e.disableProfilePhoto||!c.response.ok))try{let d=await c.response.clone().arrayBuffer(),l=Buffer.from(d).toString("base64");n.picture=`data:image/jpeg;base64, ${l}`}catch(s){y.error(s)}}}),{user:{id:n.sub,name:n.name,email:n.email,image:n.picture,emailVerified:!0},data:n}}}};import{betterFetch as sr}from"@better-fetch/fetch";var ze=e=>({id:"spotify",name:"Spotify",createAuthorizationURL({state:t,scopes:r,codeVerifier:o,redirectURI:i}){let n=r||["user-read-email"];return e.scope&&n.push(...e.scope),k({id:"spotify",options:e,authorizationEndpoint:"https://accounts.spotify.com/authorize",scopes:n,state:t,codeVerifier:o,redirectURI:i})},validateAuthorizationCode:async({code:t,codeVerifier:r,redirectURI:o})=>A({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 sr("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}}});import"@better-fetch/fetch";import{parseJWT as ar}from"oslo/jwt";var $e=e=>({id:"twitch",name:"Twitch",createAuthorizationURL({state:t,scopes:r,redirectURI:o}){let i=r||["user:read:email","openid"];return e.scope&&i.push(...e.scope),k({id:"twitch",redirectURI:o,options:e,authorizationEndpoint:"https://id.twitch.tv/oauth2/authorize",scopes:i,state:t,claims:e.claims||["email","email_verified","preferred_username","picture"]})},validateAuthorizationCode:async({code:t,redirectURI:r})=>A({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 y.error("No idToken found in token"),null;let o=ar(r)?.payload;return{user:{id:o.sub,name:o.preferred_username,email:o.email,image:o.picture,emailVerified:!1},data:o}}});import{betterFetch as dr}from"@better-fetch/fetch";var Me=e=>({id:"twitter",name:"Twitter",createAuthorizationURL(t){let r=t.scopes||["account_info.read"];return e.scope&&r.push(...e.scope),k({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})=>A({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 dr("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}}});import{betterFetch as cr}from"@better-fetch/fetch";var He=e=>{let t="https://api.dropboxapi.com/oauth2/token";return{id:"dropbox",name:"Dropbox",createAuthorizationURL:async({state:r,scopes:o,codeVerifier:i,redirectURI:n})=>{let a=o||["account_info.read"];return e.scope&&a.push(...e.scope),await k({id:"dropbox",options:e,authorizationEndpoint:"https://www.dropbox.com/oauth2/authorize",scopes:a,state:r,redirectURI:n,codeVerifier:i})},validateAuthorizationCode:async({code:r,codeVerifier:o,redirectURI:i})=>await A({code:r,codeVerifier:o,redirectURI:e.redirectURI||i,options:e,tokenEndpoint:t}),async getUserInfo(r){let{data:o,error:i}=await cr("https://api.dropboxapi.com/2/users/get_current_account",{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`}});return i?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}}}};import{betterFetch as lr}from"@better-fetch/fetch";var Ge=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:i,redirectURI:n})=>{let a=i||["profile","email","openid"];return e.scope&&a.push(...e.scope),await k({id:"linkedin",options:e,authorizationEndpoint:t,scopes:a,state:o,redirectURI:n})},validateAuthorizationCode:async({code:o,redirectURI:i})=>await A({code:o,redirectURI:e.redirectURI||i,options:e,tokenEndpoint:r}),async getUserInfo(o){let{data:i,error:n}=await lr("https://api.linkedin.com/v2/userinfo",{method:"GET",headers:{Authorization:`Bearer ${o.accessToken}`}});return n?null:{user:{id:i.sub,name:i.name,email:i.email,emailVerified:i.email_verified||!1,image:i.picture},data:i}}}};import{betterFetch as ur}from"@better-fetch/fetch";var me=(e="")=>e.split("://").map(t=>t.replace(/\/{2,}/g,"/")).join("://"),pr=e=>{let t=e||"https://gitlab.com";return{authorizationEndpoint:me(`${t}/oauth/authorize`),tokenEndpoint:me(`${t}/oauth/token`),userinfoEndpoint:me(`${t}/api/v4/user`)}},Ke=e=>{let{authorizationEndpoint:t,tokenEndpoint:r,userinfoEndpoint:o}=pr(e.issuer),i="gitlab";return{id:i,name:"Gitlab",createAuthorizationURL:async({state:a,scopes:c,codeVerifier:s,redirectURI:d})=>{let l=c||["read_user"];return e.scope&&l.push(...e.scope),await k({id:i,options:e,authorizationEndpoint:t,scopes:l,state:a,redirectURI:d,codeVerifier:s})},validateAuthorizationCode:async({code:a,redirectURI:c})=>A({code:a,redirectURI:e.redirectURI||c,options:e,tokenEndpoint:r}),async getUserInfo(a){let{data:c,error:s}=await ur(o,{headers:{authorization:`Bearer ${a.accessToken}`}});return s||c.state!=="active"||c.locked?null:{user:{id:c.id.toString(),name:c.name??c.username,email:c.email,image:c.avatar_url,emailVerified:!0},data:c}}}};var ge={apple:Be,discord:De,facebook:Ne,github:Ve,microsoft:je,google:qe,spotify:ze,twitch:$e,twitter:Me,dropbox:He,linkedin:Ge,gitlab:Ke},ne=Object.keys(ge);import{TimeSpan as fr}from"oslo";import{createJWT as mr,validateJWT as gr}from"oslo/jwt";import{z as S}from"zod";import{APIError as $}from"better-call";import{APIError as Z}from"better-call";import{z as W}from"zod";var he=()=>h("/get-session",{method:"GET",query:W.optional(W.object({disableCookieCache:W.boolean().optional()})),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&&!e.query?.disableCookieCache){let d=JSON.parse(r)?.session;if(d?.expiresAt>new Date)return e.json(d)}let i=await e.context.internalAdapter.findSession(t);if(!i||i.session.expiresAt<new Date)return j(e),i&&await e.context.internalAdapter.deleteSession(i.session.id),e.json(null,{status:401});if(o)return e.json(i);let n=e.context.sessionConfig.expiresIn,a=e.context.sessionConfig.updateAge;if(i.session.expiresAt.valueOf()-n*1e3+a*1e3<=Date.now()){let d=await e.context.internalAdapter.updateSession(i.session.id,{expiresAt:B(e.context.sessionConfig.expiresIn,"sec")});if(!d)return j(e),e.json(null,{status:401});let l=(d.expiresAt.valueOf()-Date.now())/1e3;return await _(e,{session:d,user:i.user},!1,{maxAge:l}),e.json({session:d,user:i.user})}return e.json(i)}catch(t){return e.context.logger.error(t),e.json(null,{status:500})}}),ye=async e=>await he()({...e,_flag:"json",headers:e.headers}),P=ee(async e=>{let t=await ye(e);if(!t?.session)throw new Z("UNAUTHORIZED");return{session:t}}),Qe=()=>h("/list-sessions",{method:"GET",use:[P],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)}),Ze=h("/revoke-session",{method:"POST",body:W.object({id:W.string()}),use:[P],requireHeaders:!0},async e=>{let t=e.body.id,r=await e.context.internalAdapter.findSession(t);if(!r)throw new Z("BAD_REQUEST",{message:"Session not found"});if(r.session.userId!==e.context.session.user.id)throw new Z("UNAUTHORIZED");try{await e.context.internalAdapter.deleteSession(t)}catch(o){throw e.context.logger.error(o),new Z("INTERNAL_SERVER_ERROR")}return e.json({status:!0})}),We=h("/revoke-sessions",{method:"POST",use:[P],requireHeaders:!0},async e=>{try{await e.context.internalAdapter.deleteSessions(e.context.session.user.id)}catch(t){throw e.context.logger.error(t),new Z("INTERNAL_SERVER_ERROR")}return e.json({status:!0})});async function D(e,t,r){return await mr("HS256",Buffer.from(e),{email:t.toLowerCase(),updateTo:r},{expiresIn:new fr(1,"h"),issuer:"better-auth",subject:"verify-email",audiences:[t],includeIssuedTimestamp:!0})}var Je=h("/send-verification-email",{method:"POST",query:S.object({currentURL:S.string().optional()}).optional(),body:S.object({email:S.string().email(),callbackURL:S.string().optional()})},async e=>{if(!e.context.options.emailVerification?.sendVerificationEmail)throw e.context.logger.error("Verification email isn't enabled."),new $("BAD_REQUEST",{message:"Verification email isn't enabled"});let{email:t}=e.body,r=await e.context.internalAdapter.findUserByEmail(t);if(!r)throw new $("BAD_REQUEST",{message:"User not found"});let o=await D(e.context.secret,t),i=`${e.context.baseURL}/verify-email?token=${o}&callbackURL=${e.body.callbackURL||e.query?.currentURL||"/"}`;return await e.context.options.emailVerification.sendVerificationEmail(r.user,i,o),e.json({status:!0})}),Ye=h("/verify-email",{method:"GET",query:S.object({token:S.string(),callbackURL:S.string().optional()})},async e=>{let{token:t}=e.query,r;try{r=await gr("HS256",Buffer.from(e.context.secret),t)}catch(a){throw e.context.logger.error("Failed to verify email",a),new $("BAD_REQUEST",{message:"Invalid token"})}let i=S.object({email:S.string().email(),updateTo:S.string().optional()}).parse(r.payload);if(!await e.context.internalAdapter.findUserByEmail(i.email))throw new $("BAD_REQUEST",{message:"User not found"});if(i.updateTo){let a=await ye(e);if(!a)throw e.query.callbackURL?e.redirect(`${e.query.callbackURL}?error=unauthorized`):new $("UNAUTHORIZED",{message:"Session not found"});if(a.user.email!==i.email)throw e.query.callbackURL?e.redirect(`${e.query.callbackURL}?error=unauthorized`):new $("UNAUTHORIZED",{message:"Invalid session"});let c=await e.context.internalAdapter.updateUserByEmail(i.email,{email:i.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(i.email,{emailVerified:!0}),e.query.callbackURL)throw e.redirect(e.query.callbackURL);return e.json({user:null,status:!0})});var Xe=h("/sign-in/social",{method:"POST",query:O.object({currentURL:O.string().optional()}).optional(),body:O.object({callbackURL:O.string().optional(),provider:O.enum(ne)})},async e=>{let t=e.context.socialProviders.find(n=>n.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 L("NOT_FOUND",{message:"Provider not found"});let{codeVerifier:r,state:o}=await oe(e),i=await t.createAuthorizationURL({state:o,codeVerifier:r,redirectURI:`${e.context.baseURL}/callback/${t.id}`});return e.json({url:i.toString(),redirect:!0})}),et=h("/sign-in/email",{method:"POST",body:O.object({email:O.string(),password:O.string(),callbackURL:O.string().optional(),dontRememberMe:O.boolean().default(!1).optional()})},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 L("BAD_REQUEST",{message:"Email and password is not enabled"});let{email:t,password:r}=e.body;if(!O.string().email().safeParse(t).success)throw new L("BAD_REQUEST",{message:"Invalid email"});if(!O.string().email().safeParse(t).success)throw new L("BAD_REQUEST",{message:"Invalid email"});let n=await e.context.internalAdapter.findUserByEmail(t,{includeAccounts:!0});if(!n)throw await e.context.password.hash(r),e.context.logger.error("User not found",{email:t}),new L("UNAUTHORIZED",{message:"Invalid email or password"});let a=n.accounts.find(l=>l.providerId==="credential");if(!a)throw e.context.logger.error("Credential account not found",{email:t}),new L("UNAUTHORIZED",{message:"Invalid email or password"});let c=a?.password;if(!c)throw e.context.logger.error("Password not found",{email:t}),new L("UNAUTHORIZED",{message:"Unexpected error"});if(!await e.context.password.verify(c,r))throw e.context.logger.error("Invalid password"),new L("UNAUTHORIZED",{message:"Invalid email or password"});if(e.context.options?.emailAndPassword?.requireEmailVerification&&!n.user.emailVerified){if(!e.context.options?.emailVerification?.sendVerificationEmail)throw y.error("Email verification is required but no email verification handler is provided"),new L("INTERNAL_SERVER_ERROR",{message:"Email is not verified."});let l=await D(e.context.secret,n.user.email),f=`${e.context.options.baseURL}/verify-email?token=${l}`;throw await e.context.options.emailVerification.sendVerificationEmail(n.user,f,l),e.context.logger.error("Email not verified",{email:t}),new L("FORBIDDEN",{message:"Email is not verified. Check your email for a verification link"})}let d=await e.context.internalAdapter.createSession(n.user.id,e.headers,e.body.dontRememberMe);if(!d)throw e.context.logger.error("Failed to create session"),new L("UNAUTHORIZED",{message:"Failed to create session"});return await _(e,{session:d,user:n.user},e.body.dontRememberMe),e.json({user:n.user,session:d,redirect:!!e.body.callbackURL,url:e.body.callbackURL})});import{z as se}from"zod";import{z as b}from"zod";var Ai=b.object({id:b.string(),providerId:b.string(),accountId:b.string(),userId:b.string(),accessToken:b.string().nullable().optional(),refreshToken:b.string().nullable().optional(),idToken:b.string().nullable().optional(),expiresAt:b.date().nullable().optional(),password:b.string().optional().nullable()}),tt=b.object({id:b.string(),email:b.string().transform(e=>e.toLowerCase()),emailVerified:b.boolean().default(!1),name:b.string(),image:b.string().optional(),createdAt:b.date().default(new Date),updatedAt:b.date().default(new Date)}),ki=b.object({id:b.string(),userId:b.string(),expiresAt:b.date(),ipAddress:b.string().optional(),userAgent:b.string().optional()}),Ri=b.object({id:b.string(),value:b.string(),expiresAt:b.date(),identifier:b.string()});function hr(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 yr(e,t){let r=t.action||"create",o=t.fields,i={};for(let n in o){if(n in e){if(o[n].input===!1){if(o[n].defaultValue){i[n]=o[n].defaultValue;continue}continue}i[n]=e[n];continue}if(o[n].defaultValue&&r==="create"){i[n]=o[n].defaultValue;continue}}return i}function ie(e,t,r){let o=hr(e,"user");return yr(t||{},{fields:o,action:r})}var rt=h("/callback/:id",{method:"GET",query:se.object({state:se.string(),code:se.string().optional(),error:se.string().optional()}),metadata:z},async e=>{if(!e.query.code)throw e.redirect(`${e.context.baseURL}/error?error=${e.query.error||"no_code"}`);let t=e.context.socialProviders.find(m=>m.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{codeVerifier:r,callbackURL:o,link:i,errorURL:n}=await Oe(e),a;try{a=await t.validateAuthorizationCode({code:e.query.code,codeVerifier:r,redirectURI:`${e.context.baseURL}/callback/${t.id}`})}catch(m){throw e.context.logger.error(m),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`)}let c=await t.getUserInfo(a).then(m=>m?.user),s=T(),d=tt.safeParse({...c,id:s});if(!c||d.success===!1)throw y.error("Unable to get user info",d.error),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(!o)throw y.error("No callback URL found"),e.redirect(`${e.context.baseURL}/error?error=please_restart_the_process`);if(i){if(i.email!==c.email.toLowerCase())return l("email_doesn't_match");if(!await e.context.internalAdapter.createAccount({userId:i.userId,providerId:t.id,accountId:c.id}))return l("unable_to_link_account");let w;try{w=new URL(o).toString()}catch{w=o}throw e.redirect(w)}function l(m){throw e.redirect(`${n||o||`${e.context.baseURL}/error`}?error=${m}`)}let f=await e.context.internalAdapter.findUserByEmail(c.email,{includeAccounts:!0}).catch(m=>{throw y.error(`Better auth was unable to query your database.
4
4
  Error: `,m),e.redirect(`${e.context.baseURL}/error?error=internal_server_error`)}),u=f?.user;if(f){let m=f.accounts.find(w=>w.providerId===t.id);if(m)await e.context.internalAdapter.updateAccount(m.id,{accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt});else{(!e.context.options.account?.accountLinking?.trustedProviders?.includes(t.id)&&!c.emailVerified||e.context.options.account?.accountLinking?.enabled===!1)&&(ve&&y.warn(`User already exist but account isn't linked to ${t.id}. To read more about how account linking works in Better Auth see https://www.better-auth.com/docs/concepts/users-accounts#account-linking.`),l("account_not_linked"));try{await e.context.internalAdapter.linkAccount({providerId:t.id,accountId:c.id.toString(),id:`${t.id}:${c.id}`,userId:f.user.id,accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt})}catch(Re){y.error("Unable to link account",Re),l("unable_to_link_account")}}}else try{let m=c.emailVerified||!1;if(u=await e.context.internalAdapter.createOAuthUser({...d.data,emailVerified:m},{accessToken:a.accessToken,idToken:a.idToken,refreshToken:a.refreshToken,expiresAt:a.accessTokenExpiresAt,providerId:t.id,accountId:c.id.toString()}).then(w=>w?.user),!m&&u&&e.context.options.emailVerification?.sendOnSignUp){let w=await D(e.context.secret,u.email),R=`${e.context.baseURL}/verify-email?token=${w}&callbackURL=${o}`;await e.context.options.emailVerification?.sendVerificationEmail?.(u,R,w)}}catch(m){y.error("Unable to create user",m),l("unable_to_create_user")}if(!u)return l("unable_to_create_user");let p=await e.context.internalAdapter.createSession(u.id,e.request);p||l("unable_to_create_session"),await _(e,{session:p,user:u});let g;try{g=new URL(o).toString()}catch{g=o}throw e.redirect(g)});import"zod";import{APIError as wr}from"better-call";var ot=h("/sign-out",{method:"POST"},async e=>{let t=await e.getSignedCookie(e.context.authCookies.sessionToken.name,e.context.secret);if(!t)throw new wr("BAD_REQUEST",{message:"Session not found"});return await e.context.internalAdapter.deleteSession(t),j(e),e.json({success:!0})});import{z as C}from"zod";import{APIError as ae}from"better-call";function nt(e,t,r){let o=t?new URL(t,e.baseURL):new URL(`${e.baseURL}/error`);return r&&Object.entries(r).forEach(([i,n])=>o.searchParams.set(i,n)),o.href}function br(e,t,r){let o=new URL(t,e.baseURL);return r&&Object.entries(r).forEach(([i,n])=>o.searchParams.set(i,n)),o.href}var it=h("/forget-password",{method:"POST",body:C.object({email:C.string().email(),redirectTo:C.string()})},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 ae("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 i=60*60*1,n=new Date(Date.now()+1e3*(e.context.options.emailAndPassword.resetPasswordTokenExpiresIn||i)),a=e.context.uuid();await e.context.internalAdapter.createVerificationValue({value:o.user.id,identifier:`reset-password:${a}`,expiresAt:n});let c=`${e.context.baseURL}/reset-password/${a}?callbackURL=${r}`;return await e.context.options.emailAndPassword.sendResetPassword(o.user,c),e.json({status:!0})}),st=h("/reset-password/:token",{method:"GET",query:C.object({callbackURL:C.string()})},async e=>{let{token:t}=e.params,{callbackURL:r}=e.query;if(!t||!r)throw e.redirect(nt(e.context,r,{error:"INVALID_TOKEN"}));let o=await e.context.internalAdapter.findVerificationValue(`reset-password:${t}`);throw!o||o.expiresAt<new Date?e.redirect(nt(e.context,r,{error:"INVALID_TOKEN"})):e.redirect(br(e.context,r,{token:t}))}),at=h("/reset-password",{query:C.optional(C.object({token:C.string().optional(),currentURL:C.string().optional()})),method:"POST",body:C.object({newPassword:C.string()})},async e=>{let t=e.query?.token||(e.query?.currentURL?new URL(e.query.currentURL).searchParams.get("token"):"");if(!t)throw new ae("BAD_REQUEST",{message:"Token not found"});let{newPassword:r}=e.body,o=`reset-password:${t}`,i=await e.context.internalAdapter.findVerificationValue(o);if(!i||i.expiresAt<new Date)throw new ae("BAD_REQUEST",{message:"Invalid token"});await e.context.internalAdapter.deleteVerificationValue(i.id);let n=i.value,a=await e.context.password.hash(r);if(!(await e.context.internalAdapter.findAccounts(n)).find(l=>l.providerId==="credential"))return await e.context.internalAdapter.createAccount({userId:n,providerId:"credential",password:a,accountId:e.context.uuid()}),e.json({status:!0});if(!await e.context.internalAdapter.updatePassword(n,a))throw new ae("BAD_REQUEST",{message:"Failed to update password"});return e.json({status:!0})});import{z as x}from"zod";import{APIError as U}from"better-call";var dt=()=>h("/update-user",{method:"POST",body:x.record(x.string(),x.any()),use:[P]},async e=>{let t=e.body;if(t.email)throw new U("BAD_REQUEST",{message:"You can't update email"});let{name:r,image:o,...i}=t,n=e.context.session;if(!o&&!r&&Object.keys(i).length===0)return e.json({user:n.user});let a=ie(e.context.options,i,"update"),c=await e.context.internalAdapter.updateUserByEmail(n.user.email,{name:r,image:o,...a});return await _(e,{session:n.session,user:c}),e.json({user:c})}),ct=h("/change-password",{method:"POST",body:x.object({newPassword:x.string(),currentPassword:x.string(),revokeOtherSessions:x.boolean().optional()}),use:[P]},async e=>{let{newPassword:t,currentPassword:r,revokeOtherSessions:o}=e.body,i=e.context.session,n=e.context.password.config.minPasswordLength;if(t.length<n)throw e.context.logger.error("Password is too short"),new U("BAD_REQUEST",{message:"Password is too short"});let a=e.context.password.config.maxPasswordLength;if(t.length>a)throw e.context.logger.error("Password is too long"),new U("BAD_REQUEST",{message:"Password too long"});let s=(await e.context.internalAdapter.findAccounts(i.user.id)).find(f=>f.providerId==="credential"&&f.password);if(!s||!s.password)throw new U("BAD_REQUEST",{message:"User does not have a password"});let d=await e.context.password.hash(t);if(!await e.context.password.verify(s.password,r))throw new U("BAD_REQUEST",{message:"Incorrect password"});if(await e.context.internalAdapter.updateAccount(s.id,{password:d}),o){await e.context.internalAdapter.deleteSessions(i.user.id);let f=await e.context.internalAdapter.createSession(i.user.id,e.headers);if(!f)throw new U("INTERNAL_SERVER_ERROR",{message:"Unable to create session"});await _(e,{session:f,user:i.user})}return e.json(i.user)}),lt=h("/set-password",{method:"POST",body:x.object({newPassword:x.string()}),metadata:{SERVER_ONLY:!0},use:[P]},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 U("BAD_REQUEST",{message:"Password is too short"});let i=e.context.password.config.maxPasswordLength;if(t.length>i)throw e.context.logger.error("Password is too long"),new U("BAD_REQUEST",{message:"Password too long"});let a=(await e.context.internalAdapter.findAccounts(r.user.id)).find(s=>s.providerId==="credential"&&s.password),c=await e.context.password.hash(t);if(!a)return await e.context.internalAdapter.linkAccount({userId:r.user.id,providerId:"credential",accountId:r.user.id,password:c}),e.json(r.user);throw new U("BAD_REQUEST",{message:"user already has a password"})}),ut=h("/delete-user",{method:"POST",body:x.object({password:x.string()}),use:[P]},async e=>{let{password:t}=e.body,r=e.context.session,i=(await e.context.internalAdapter.findAccounts(r.user.id)).find(a=>a.providerId==="credential"&&a.password);if(!i||!i.password)throw new U("BAD_REQUEST",{message:"User does not have a password"});if(!await e.context.password.verify(i.password,t))throw new U("BAD_REQUEST",{message:"Incorrect password"});return await e.context.internalAdapter.deleteUser(r.user.id),await e.context.internalAdapter.deleteSessions(r.user.id),j(e),e.json(null)}),pt=h("/change-email",{method:"POST",query:x.object({currentURL:x.string().optional()}).optional(),body:x.object({newEmail:x.string().email(),callbackURL:x.string().optional()}),use:[P]},async e=>{if(!e.context.options.user?.changeEmail?.enabled)throw e.context.logger.error("Change email is disabled."),new U("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 U("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 U("BAD_REQUEST",{message:"Couldn't update your email"});if(e.context.session.user.emailVerified!==!0){let i=await e.context.internalAdapter.updateUserByEmail(e.context.session.user.email,{email:e.body.newEmail});return e.json({user:i,status:!0})}if(!e.context.options.user.changeEmail.sendChangeEmailVerification)throw e.context.logger.error("Verification email isn't enabled."),new U("BAD_REQUEST",{message:"Verification email isn't enabled"});let r=await D(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 Ar=(e="Unknown")=>`<!DOCTYPE html>
package/dist/react.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var U=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},N=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of M(t))!G.call(e,n)&&n!==r&&U(e,n,{get:()=>t[n],enumerable:!(s=H(t,n))||s.enumerable});return e};var V=e=>N(U({},"__esModule",{value:!0}),e);var ee={};D(ee,{capitalizeFirstLetter:()=>k,createAuthClient:()=>J,useAuthQuery:()=>Y});module.exports=V(ee);var B=require("@nanostores/react");var w=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let s=g(!0);return s[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function z(e){return e?e!=="false":!1}var Q=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var ne=Q==="test"||z(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function X(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function S(e,t="/api/auth"){return X(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return S(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return S(r,t);if(typeof window<"u")return S(window.location.origin,t)}var he=require("nanostores");var ce=require("@better-fetch/fetch"),C={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},v={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var ue=require("@better-fetch/fetch"),O=require("nanostores"),E=(e,t,r,s)=>{let n=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):s;return r(t,{...c,onSuccess:async l=>{n.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){n.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=n.get();n.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(n,()=>(f(),u=!0,()=>{n.off(),c.off()}))});return n};function _(e){let t=(0,L.atom)(!1);return{session:E(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var I=e=>{let t="credentials"in Request.prototype,r=F(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],n=(0,w.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[C,v,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=_(n),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(a,o.getAtoms?.(n)),o.pathMethods&&Object.assign(i,o.pathMethods),o.atomListeners&&p.push(...o.atomListeners);let m={notify:o=>{a[o].set(!a[o].get())},listen:(o,b)=>{a[o].subscribe(b)},atoms:a};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(n,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:i,atomListeners:p,$fetch:n,$store:m}};function K(e,t,r){let s=t[e],{fetchOptions:n,query:f,...u}=r||{};return s||(n?.method?n.method:u&&Object.keys(u).length>0?"POST":"GET")}function $(e,t,r,s,n){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],i=e;for(let p of a)if(i&&typeof i=="object"&&p in i)i=i[p];else{i=void 0;break}return typeof i=="function"?i:f(a)},apply:async(c,l,a)=>{let i="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:o,fetchOptions:b,...W}=p,h={...m,...b},x=K(i,r,p);return await t(i,{...h,body:x==="GET"?void 0:{...W,...h?.body||{}},query:o||h?.query,method:x,async onSuccess(R){await h?.onSuccess?.(R);let y=n?.find(q=>q.matcher(i));if(!y)return;let T=s[y.signal];if(!T)return;let j=T.get();setTimeout(()=>{T.set(!j)},10)}})}})}return f()}function Z(e){return`use${k(e)}`}function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function J(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:s,$fetch:n,$store:f,atomListeners:u}=I(e),c={};for(let[i,p]of Object.entries(s))c[Z(i)]=()=>(0,B.useStore)(p);let l={...r,...c,$fetch:n,$store:f};return $(l,n,t,s,u)}var Y=B.useStore;0&&(module.exports={capitalizeFirstLetter,createAuthClient,useAuthQuery});
1
+ "use strict";var U=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},N=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of M(t))!G.call(e,n)&&n!==r&&U(e,n,{get:()=>t[n],enumerable:!(s=H(t,n))||s.enumerable});return e};var V=e=>N(U({},"__esModule",{value:!0}),e);var ee={};D(ee,{capitalizeFirstLetter:()=>k,createAuthClient:()=>J,useAuthQuery:()=>Y});module.exports=V(ee);var B=require("@nanostores/react");var _=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let s=g(!0);return s[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function z(e){return e?e!=="false":!1}var Q=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var ne=Q==="test"||z(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function X(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function S(e,t="/api/auth"){return X(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return S(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return S(r,t);if(typeof window<"u"&&window.location)return S(window.location.origin,t)}var he=require("nanostores");var ce=require("@better-fetch/fetch"),C={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},v={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var ue=require("@better-fetch/fetch"),O=require("nanostores"),E=(e,t,r,s)=>{let n=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):s;return r(t,{...c,onSuccess:async l=>{n.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){n.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=n.get();n.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(n,()=>(f(),u=!0,()=>{n.off(),c.off()}))});return n};function w(e){let t=(0,L.atom)(!1);return{session:E(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var I=e=>{let t="credentials"in Request.prototype,r=F(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],n=(0,_.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[C,v,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=w(n),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(a,o.getAtoms?.(n)),o.pathMethods&&Object.assign(i,o.pathMethods),o.atomListeners&&p.push(...o.atomListeners);let m={notify:o=>{a[o].set(!a[o].get())},listen:(o,b)=>{a[o].subscribe(b)},atoms:a};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(n,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:i,atomListeners:p,$fetch:n,$store:m}};function K(e,t,r){let s=t[e],{fetchOptions:n,query:f,...u}=r||{};return s||(n?.method?n.method:u&&Object.keys(u).length>0?"POST":"GET")}function $(e,t,r,s,n){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],i=e;for(let p of a)if(i&&typeof i=="object"&&p in i)i=i[p];else{i=void 0;break}return typeof i=="function"?i:f(a)},apply:async(c,l,a)=>{let i="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:o,fetchOptions:b,...W}=p,h={...m,...b},x=K(i,r,p);return await t(i,{...h,body:x==="GET"?void 0:{...W,...h?.body||{}},query:o||h?.query,method:x,async onSuccess(R){await h?.onSuccess?.(R);let y=n?.find(q=>q.matcher(i));if(!y)return;let T=s[y.signal];if(!T)return;let j=T.get();setTimeout(()=>{T.set(!j)},10)}})}})}return f()}function Z(e){return`use${k(e)}`}function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function J(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:s,$fetch:n,$store:f,atomListeners:u}=I(e),c={};for(let[i,p]of Object.entries(s))c[Z(i)]=()=>(0,B.useStore)(p);let l={...r,...c,$fetch:n,$store:f};return $(l,n,t,s,u)}var Y=B.useStore;0&&(module.exports={capitalizeFirstLetter,createAuthClient,useAuthQuery});
package/dist/react.js CHANGED
@@ -1 +1 @@
1
- import{useStore as L}from"@nanostores/react";import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let i=g(!0);return i[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var k=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var V=k==="test"||$(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function W(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return W(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function S(e,t){if(e)return T(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u")return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var B={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},x={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as j,onMount as q}from"nanostores";var F=(e,t,r,i)=>{let o=j({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof i=="function"?i({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):i;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=o.get();o.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function C(e){let t=H(!1);return{session:F(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=S(e?.baseURL),i=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[B,x,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:f,session:u}=C(o),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},s={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(a,n.getAtoms?.(o)),n.pathMethods&&Object.assign(s,n.pathMethods),n.atomListeners&&p.push(...n.atomListeners);let m={notify:n=>{a[n].set(!a[n].get())},listen:(n,O)=>{a[n].subscribe(O)},atoms:a};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:s,atomListeners:p,$fetch:o,$store:m}};function G(e,t,r){let i=t[e],{fetchOptions:o,query:f,...u}=r||{};return i||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function E(e,t,r,i,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],s=e;for(let p of a)if(s&&typeof s=="object"&&p in s)s=s[p];else{s=void 0;break}return typeof s=="function"?s:f(a)},apply:async(c,l,a)=>{let s="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:n,fetchOptions:O,..._}=p,h={...m,...O},U=G(s,r,p);return await t(s,{...h,body:U==="GET"?void 0:{..._,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(s));if(!y)return;let R=i[y.signal];if(!R)return;let w=R.get();setTimeout(()=>{R.set(!w)},10)}})}})}return f()}function D(e){return`use${N(e)}`}function N(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ye(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:i,$fetch:o,$store:f,atomListeners:u}=v(e),c={};for(let[s,p]of Object.entries(i))c[D(s)]=()=>L(p);let l={...r,...c,$fetch:o,$store:f};return E(l,o,t,i,u)}var Pe=L;export{N as capitalizeFirstLetter,ye as createAuthClient,Pe as useAuthQuery};
1
+ import{useStore as L}from"@nanostores/react";import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let i=g(!0);return i[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var k=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var V=k==="test"||$(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function W(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return W(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function S(e,t){if(e)return T(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u"&&window.location)return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var B={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},x={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as j,onMount as q}from"nanostores";var F=(e,t,r,i)=>{let o=j({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof i=="function"?i({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):i;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=o.get();o.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function C(e){let t=H(!1);return{session:F(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=S(e?.baseURL),i=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[B,x,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:f,session:u}=C(o),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},s={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(a,n.getAtoms?.(o)),n.pathMethods&&Object.assign(s,n.pathMethods),n.atomListeners&&p.push(...n.atomListeners);let m={notify:n=>{a[n].set(!a[n].get())},listen:(n,O)=>{a[n].subscribe(O)},atoms:a};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:s,atomListeners:p,$fetch:o,$store:m}};function G(e,t,r){let i=t[e],{fetchOptions:o,query:f,...u}=r||{};return i||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function E(e,t,r,i,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],s=e;for(let p of a)if(s&&typeof s=="object"&&p in s)s=s[p];else{s=void 0;break}return typeof s=="function"?s:f(a)},apply:async(c,l,a)=>{let s="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:n,fetchOptions:O,...w}=p,h={...m,...O},U=G(s,r,p);return await t(s,{...h,body:U==="GET"?void 0:{...w,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(s));if(!y)return;let R=i[y.signal];if(!R)return;let _=R.get();setTimeout(()=>{R.set(!_)},10)}})}})}return f()}function D(e){return`use${N(e)}`}function N(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ye(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:i,$fetch:o,$store:f,atomListeners:u}=v(e),c={};for(let[s,p]of Object.entries(i))c[D(s)]=()=>L(p);let l={...r,...c,$fetch:o,$store:f};return E(l,o,t,i,u)}var Pe=L;export{N as capitalizeFirstLetter,ye as createAuthClient,Pe as useAuthQuery};
package/dist/solid.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var U=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var n in t)U(e,n,{get:t[n],enumerable:!0})},N=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of M(t))!G.call(e,r)&&r!==n&&U(e,r,{get:()=>t[r],enumerable:!(s=H(t,r))||s.enumerable});return e};var V=e=>N(U({},"__esModule",{value:!0}),e);var Y={};D(Y,{createAuthClient:()=>J});module.exports=V(Y);var $=require("@nanostores/solid");var _=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),p=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let n=g();return t in n||t in P},set(e,t,n){let s=g(!0);return s[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=g(!0);return delete n[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function z(e){return e?e!=="false":!1}var X=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var te=X==="test"||z(p.TEST);var A=class extends Error{constructor(t,n){super(t),this.name="BetterAuthError",this.message=t,this.cause=n}};function K(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function S(e,t="/api/auth"){return K(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return S(e,t);let n=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(n)return S(n,t);if(typeof window<"u")return S(window.location.origin,t)}var me=require("nanostores");var ae=require("@better-fetch/fetch"),x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},C={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var le=require("@better-fetch/fetch"),O=require("nanostores"),v=(e,t,n,s)=>{let r=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:r.get().data,error:r.get().error,isPending:r.get().isPending}):s;return n(t,{...c,onSuccess:async l=>{r.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){r.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let i=r.get();r.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(r,()=>(f(),u=!0,()=>{r.off(),c.off()}))});return r};function E(e){let t=(0,L.atom)(!1);return{session:v(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var w=e=>{let t="credentials"in Request.prototype,n=F(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],r=(0,_.createFetch)({baseURL:n,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[x,C,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=E(r),c=e?.plugins||[],l={},i={$sessionSignal:f,session:u},a={"/sign-out":"POST","/revoke-sessions":"POST"},d=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(i,o.getAtoms?.(r)),o.pathMethods&&Object.assign(a,o.pathMethods),o.atomListeners&&d.push(...o.atomListeners);let m={notify:o=>{i[o].set(!i[o].get())},listen:(o,b)=>{i[o].subscribe(b)},atoms:i};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(r,m));return{pluginsActions:l,pluginsAtoms:i,pluginPathMethods:a,atomListeners:d,$fetch:r,$store:m}};function Q(e,t,n){let s=t[e],{fetchOptions:r,query:f,...u}=n||{};return s||(r?.method?r.method:u&&Object.keys(u).length>0?"POST":"GET")}function I(e,t,n,s,r){function f(u=[]){return new Proxy(function(){},{get(c,l){let i=[...u,l],a=e;for(let d of i)if(a&&typeof a=="object"&&d in a)a=a[d];else{a=void 0;break}return typeof a=="function"?a:f(i)},apply:async(c,l,i)=>{let a="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),d=i[0]||{},m=i[1]||{},{query:o,fetchOptions:b,...j}=d,h={...m,...b},B=Q(a,n,d);return await t(a,{...h,body:B==="GET"?void 0:{...j,...h?.body||{}},query:o||h?.query,method:B,async onSuccess(R){await h?.onSuccess?.(R);let y=r?.find(q=>q.matcher(a));if(!y)return;let T=s[y.signal];if(!T)return;let W=T.get();setTimeout(()=>{T.set(!W)},10)}})}})}return f()}function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Z(e){return`use${k(e)}`}function J(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:s,$fetch:r,atomListeners:f}=w(e),u={};for(let[i,a]of Object.entries(s))u[Z(i)]=()=>(0,$.useStore)(a);let c={...n,...u};return I(c,r,t,s,f)}0&&(module.exports={createAuthClient});
1
+ "use strict";var U=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var n in t)U(e,n,{get:t[n],enumerable:!0})},N=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of M(t))!G.call(e,r)&&r!==n&&U(e,r,{get:()=>t[r],enumerable:!(s=H(t,r))||s.enumerable});return e};var V=e=>N(U({},"__esModule",{value:!0}),e);var Y={};D(Y,{createAuthClient:()=>J});module.exports=V(Y);var $=require("@nanostores/solid");var w=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),p=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let n=g();return t in n||t in P},set(e,t,n){let s=g(!0);return s[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=g(!0);return delete n[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function z(e){return e?e!=="false":!1}var X=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var te=X==="test"||z(p.TEST);var A=class extends Error{constructor(t,n){super(t),this.name="BetterAuthError",this.message=t,this.cause=n}};function K(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function S(e,t="/api/auth"){return K(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return S(e,t);let n=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(n)return S(n,t);if(typeof window<"u"&&window.location)return S(window.location.origin,t)}var me=require("nanostores");var ae=require("@better-fetch/fetch"),x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},C={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var le=require("@better-fetch/fetch"),O=require("nanostores"),v=(e,t,n,s)=>{let r=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:r.get().data,error:r.get().error,isPending:r.get().isPending}):s;return n(t,{...c,onSuccess:async l=>{r.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){r.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let i=r.get();r.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(r,()=>(f(),u=!0,()=>{r.off(),c.off()}))});return r};function E(e){let t=(0,L.atom)(!1);return{session:v(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var _=e=>{let t="credentials"in Request.prototype,n=F(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],r=(0,w.createFetch)({baseURL:n,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[x,C,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=E(r),c=e?.plugins||[],l={},i={$sessionSignal:f,session:u},a={"/sign-out":"POST","/revoke-sessions":"POST"},d=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(i,o.getAtoms?.(r)),o.pathMethods&&Object.assign(a,o.pathMethods),o.atomListeners&&d.push(...o.atomListeners);let m={notify:o=>{i[o].set(!i[o].get())},listen:(o,b)=>{i[o].subscribe(b)},atoms:i};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(r,m));return{pluginsActions:l,pluginsAtoms:i,pluginPathMethods:a,atomListeners:d,$fetch:r,$store:m}};function Q(e,t,n){let s=t[e],{fetchOptions:r,query:f,...u}=n||{};return s||(r?.method?r.method:u&&Object.keys(u).length>0?"POST":"GET")}function I(e,t,n,s,r){function f(u=[]){return new Proxy(function(){},{get(c,l){let i=[...u,l],a=e;for(let d of i)if(a&&typeof a=="object"&&d in a)a=a[d];else{a=void 0;break}return typeof a=="function"?a:f(i)},apply:async(c,l,i)=>{let a="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),d=i[0]||{},m=i[1]||{},{query:o,fetchOptions:b,...j}=d,h={...m,...b},B=Q(a,n,d);return await t(a,{...h,body:B==="GET"?void 0:{...j,...h?.body||{}},query:o||h?.query,method:B,async onSuccess(R){await h?.onSuccess?.(R);let y=r?.find(q=>q.matcher(a));if(!y)return;let T=s[y.signal];if(!T)return;let W=T.get();setTimeout(()=>{T.set(!W)},10)}})}})}return f()}function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Z(e){return`use${k(e)}`}function J(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:s,$fetch:r,atomListeners:f}=_(e),u={};for(let[i,a]of Object.entries(s))u[Z(i)]=()=>(0,$.useStore)(a);let c={...n,...u};return I(c,r,t,s,f)}0&&(module.exports={createAuthClient});
package/dist/solid.js CHANGED
@@ -1 +1 @@
1
- import{useStore as D}from"@nanostores/solid";import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),p=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let a=g(!0);return a[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function k(e){return e?e!=="false":!1}var $=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var V=$==="test"||k(p.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function j(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return j(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function S(e,t){if(e)return T(e,t);let r=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u")return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var B={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},F={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as W,onMount as q}from"nanostores";var x=(e,t,r,a)=>{let o=W({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof a=="function"?a({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):a;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let s=o.get();o.set({isPending:s.data===null,data:s.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function C(e){let t=H(!1);return{session:x(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=S(e?.baseURL),a=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...a]:[B,F,...e?.fetchOptions?.plugins||[],...a]}),{$sessionSignal:f,session:u}=C(o),c=e?.plugins||[],l={},s={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},d=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(s,n.getAtoms?.(o)),n.pathMethods&&Object.assign(i,n.pathMethods),n.atomListeners&&d.push(...n.atomListeners);let m={notify:n=>{s[n].set(!s[n].get())},listen:(n,O)=>{s[n].subscribe(O)},atoms:s};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:s,pluginPathMethods:i,atomListeners:d,$fetch:o,$store:m}};function G(e,t,r){let a=t[e],{fetchOptions:o,query:f,...u}=r||{};return a||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function L(e,t,r,a,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let s=[...u,l],i=e;for(let d of s)if(i&&typeof i=="object"&&d in i)i=i[d];else{i=void 0;break}return typeof i=="function"?i:f(s)},apply:async(c,l,s)=>{let i="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),d=s[0]||{},m=s[1]||{},{query:n,fetchOptions:O,..._}=d,h={...m,...O},U=G(i,r,d);return await t(i,{...h,body:U==="GET"?void 0:{..._,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(i));if(!y)return;let R=a[y.signal];if(!R)return;let w=R.get();setTimeout(()=>{R.set(!w)},10)}})}})}return f()}function E(e){return e.charAt(0).toUpperCase()+e.slice(1)}function N(e){return`use${E(e)}`}function Ae(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:a,$fetch:o,atomListeners:f}=v(e),u={};for(let[s,i]of Object.entries(a))u[N(s)]=()=>D(i);let c={...r,...u};return L(c,o,t,a,f)}export{Ae as createAuthClient};
1
+ import{useStore as D}from"@nanostores/solid";import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),p=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let a=g(!0);return a[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function k(e){return e?e!=="false":!1}var $=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var V=$==="test"||k(p.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function j(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return j(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function S(e,t){if(e)return T(e,t);let r=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u"&&window.location)return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var B={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},F={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as W,onMount as q}from"nanostores";var x=(e,t,r,a)=>{let o=W({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof a=="function"?a({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):a;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let s=o.get();o.set({isPending:s.data===null,data:s.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function C(e){let t=H(!1);return{session:x(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=S(e?.baseURL),a=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...a]:[B,F,...e?.fetchOptions?.plugins||[],...a]}),{$sessionSignal:f,session:u}=C(o),c=e?.plugins||[],l={},s={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},d=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(s,n.getAtoms?.(o)),n.pathMethods&&Object.assign(i,n.pathMethods),n.atomListeners&&d.push(...n.atomListeners);let m={notify:n=>{s[n].set(!s[n].get())},listen:(n,O)=>{s[n].subscribe(O)},atoms:s};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:s,pluginPathMethods:i,atomListeners:d,$fetch:o,$store:m}};function G(e,t,r){let a=t[e],{fetchOptions:o,query:f,...u}=r||{};return a||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function L(e,t,r,a,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let s=[...u,l],i=e;for(let d of s)if(i&&typeof i=="object"&&d in i)i=i[d];else{i=void 0;break}return typeof i=="function"?i:f(s)},apply:async(c,l,s)=>{let i="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),d=s[0]||{},m=s[1]||{},{query:n,fetchOptions:O,...w}=d,h={...m,...O},U=G(i,r,d);return await t(i,{...h,body:U==="GET"?void 0:{...w,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(i));if(!y)return;let R=a[y.signal];if(!R)return;let _=R.get();setTimeout(()=>{R.set(!_)},10)}})}})}return f()}function E(e){return e.charAt(0).toUpperCase()+e.slice(1)}function N(e){return`use${E(e)}`}function Ae(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:a,$fetch:o,atomListeners:f}=v(e),u={};for(let[s,i]of Object.entries(a))u[N(s)]=()=>D(i);let c={...r,...u};return L(c,o,t,a,f)}export{Ae as createAuthClient};
package/dist/svelte.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var U=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},D=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of H(t))!M.call(e,n)&&n!==r&&U(e,n,{get:()=>t[n],enumerable:!(s=q(t,n))||s.enumerable});return e};var N=e=>D(U({},"__esModule",{value:!0}),e);var Z={};G(Z,{createAuthClient:()=>K});module.exports=N(Z);var _=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let s=g(!0);return s[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function V(e){return e?e!=="false":!1}var z=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var Y=z==="test"||V(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function X(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function B(e,t="/api/auth"){return X(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function S(e,t){if(e)return B(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return B(r,t);if(typeof window<"u")return B(window.location.origin,t)}var de=require("nanostores");var se=require("@better-fetch/fetch"),x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},C={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var ae=require("@better-fetch/fetch"),O=require("nanostores"),v=(e,t,r,s)=>{let n=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):s;return r(t,{...c,onSuccess:async l=>{n.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){n.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=n.get();n.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(n,()=>(f(),u=!0,()=>{n.off(),c.off()}))});return n};function E(e){let t=(0,L.atom)(!1);return{session:v(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var w=e=>{let t="credentials"in Request.prototype,r=S(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],n=(0,_.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[x,C,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=E(n),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(a,o.getAtoms?.(n)),o.pathMethods&&Object.assign(i,o.pathMethods),o.atomListeners&&p.push(...o.atomListeners);let m={notify:o=>{a[o].set(!a[o].get())},listen:(o,b)=>{a[o].subscribe(b)},atoms:a};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(n,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:i,atomListeners:p,$fetch:n,$store:m}};function I(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t,r){let s=t[e],{fetchOptions:n,query:f,...u}=r||{};return s||(n?.method?n.method:u&&Object.keys(u).length>0?"POST":"GET")}function $(e,t,r,s,n){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],i=e;for(let p of a)if(i&&typeof i=="object"&&p in i)i=i[p];else{i=void 0;break}return typeof i=="function"?i:f(a)},apply:async(c,l,a)=>{let i="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:o,fetchOptions:b,...k}=p,h={...m,...b},F=Q(i,r,p);return await t(i,{...h,body:F==="GET"?void 0:{...k,...h?.body||{}},query:o||h?.query,method:F,async onSuccess(R){await h?.onSuccess?.(R);let y=n?.find(j=>j.matcher(i));if(!y)return;let T=s[y.signal];if(!T)return;let W=T.get();setTimeout(()=>{T.set(!W)},10)}})}})}return f()}function K(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:s,$fetch:n,atomListeners:f,$store:u}=w(e),c={};for(let[i,p]of Object.entries(s))c[`use${I(i)}`]=p;let l={...r,...c,$fetch:n,$store:u};return $(l,n,t,s,f)}0&&(module.exports={createAuthClient});
1
+ "use strict";var U=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},D=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of H(t))!M.call(e,n)&&n!==r&&U(e,n,{get:()=>t[n],enumerable:!(s=q(t,n))||s.enumerable});return e};var N=e=>D(U({},"__esModule",{value:!0}),e);var Z={};G(Z,{createAuthClient:()=>K});module.exports=N(Z);var w=require("@better-fetch/fetch");var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let s=g(!0);return s[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function V(e){return e?e!=="false":!1}var z=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var Y=z==="test"||V(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function X(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function B(e,t="/api/auth"){return X(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function S(e,t){if(e)return B(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return B(r,t);if(typeof window<"u"&&window.location)return B(window.location.origin,t)}var de=require("nanostores");var se=require("@better-fetch/fetch"),x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},C={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var L=require("nanostores");var ae=require("@better-fetch/fetch"),O=require("nanostores"),v=(e,t,r,s)=>{let n=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof s=="function"?s({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):s;return r(t,{...c,onSuccess:async l=>{n.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){n.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=n.get();n.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():(0,O.onMount)(n,()=>(f(),u=!0,()=>{n.off(),c.off()}))});return n};function E(e){let t=(0,L.atom)(!1);return{session:v(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var _=e=>{let t="credentials"in Request.prototype,r=S(e?.baseURL),s=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],n=(0,w.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...s]:[x,C,...e?.fetchOptions?.plugins||[],...s]}),{$sessionSignal:f,session:u}=E(n),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},i={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of c)o.getAtoms&&Object.assign(a,o.getAtoms?.(n)),o.pathMethods&&Object.assign(i,o.pathMethods),o.atomListeners&&p.push(...o.atomListeners);let m={notify:o=>{a[o].set(!a[o].get())},listen:(o,b)=>{a[o].subscribe(b)},atoms:a};for(let o of c)o.getActions&&Object.assign(l,o.getActions?.(n,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:i,atomListeners:p,$fetch:n,$store:m}};function I(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t,r){let s=t[e],{fetchOptions:n,query:f,...u}=r||{};return s||(n?.method?n.method:u&&Object.keys(u).length>0?"POST":"GET")}function $(e,t,r,s,n){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],i=e;for(let p of a)if(i&&typeof i=="object"&&p in i)i=i[p];else{i=void 0;break}return typeof i=="function"?i:f(a)},apply:async(c,l,a)=>{let i="/"+u.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:o,fetchOptions:b,...k}=p,h={...m,...b},F=Q(i,r,p);return await t(i,{...h,body:F==="GET"?void 0:{...k,...h?.body||{}},query:o||h?.query,method:F,async onSuccess(R){await h?.onSuccess?.(R);let y=n?.find(j=>j.matcher(i));if(!y)return;let T=s[y.signal];if(!T)return;let W=T.get();setTimeout(()=>{T.set(!W)},10)}})}})}return f()}function K(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:s,$fetch:n,atomListeners:f,$store:u}=_(e),c={};for(let[i,p]of Object.entries(s))c[`use${I(i)}`]=p;let l={...r,...c,$fetch:n,$store:u};return $(l,n,t,s,f)}0&&(module.exports={createAuthClient});
package/dist/svelte.js CHANGED
@@ -1 +1 @@
1
- import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let i=g(!0);return i[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var k=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var D=k==="test"||$(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function W(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return W(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function B(e,t){if(e)return T(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u")return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var F={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},S={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as j,onMount as q}from"nanostores";var x=(e,t,r,i)=>{let o=j({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof i=="function"?i({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):i;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=o.get();o.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function C(e){let t=H(!1);return{session:x(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=B(e?.baseURL),i=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[F,S,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:f,session:u}=C(o),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},s={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(a,n.getAtoms?.(o)),n.pathMethods&&Object.assign(s,n.pathMethods),n.atomListeners&&p.push(...n.atomListeners);let m={notify:n=>{a[n].set(!a[n].get())},listen:(n,O)=>{a[n].subscribe(O)},atoms:a};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:s,atomListeners:p,$fetch:o,$store:m}};function L(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e,t,r){let i=t[e],{fetchOptions:o,query:f,...u}=r||{};return i||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function E(e,t,r,i,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],s=e;for(let p of a)if(s&&typeof s=="object"&&p in s)s=s[p];else{s=void 0;break}return typeof s=="function"?s:f(a)},apply:async(c,l,a)=>{let s="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:n,fetchOptions:O,..._}=p,h={...m,...O},U=G(s,r,p);return await t(s,{...h,body:U==="GET"?void 0:{..._,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(s));if(!y)return;let R=i[y.signal];if(!R)return;let w=R.get();setTimeout(()=>{R.set(!w)},10)}})}})}return f()}function he(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:i,$fetch:o,atomListeners:f,$store:u}=v(e),c={};for(let[s,p]of Object.entries(i))c[`use${L(s)}`]=p;let l={...r,...c,$fetch:o,$store:u};return E(l,o,t,i,f)}export{he as createAuthClient};
1
+ import{createFetch as M}from"@better-fetch/fetch";var P=Object.create(null),g=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),d=new Proxy(P,{get(e,t){return g()[t]??P[t]},has(e,t){let r=g();return t in r||t in P},set(e,t,r){let i=g(!0);return i[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=g(!0);return delete r[t],!0},ownKeys(){let e=g(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var k=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var D=k==="test"||$(d.TEST);var A=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function W(e){try{return new URL(e).pathname!=="/"}catch{throw new A(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function T(e,t="/api/auth"){return W(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function B(e,t){if(e)return T(e,t);let r=d.BETTER_AUTH_URL||d.NEXT_PUBLIC_BETTER_AUTH_URL||d.PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_BETTER_AUTH_URL||d.NUXT_PUBLIC_AUTH_URL||(d.BASE_URL!=="/"?d.BASE_URL:void 0);if(r)return T(r,t);if(typeof window<"u"&&window.location)return T(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var F={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},S={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as H}from"nanostores";import"@better-fetch/fetch";import{atom as j,onMount as q}from"nanostores";var x=(e,t,r,i)=>{let o=j({data:null,error:null,isPending:!0,isRefetching:!1}),f=()=>{let c=typeof i=="function"?i({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):i;return r(t,{...c,onSuccess:async l=>{o.set({data:l.data,error:null,isPending:!1,isRefetching:!1}),await c?.onSuccess?.(l)},async onError(l){o.set({error:l.error,data:null,isPending:!1,isRefetching:!1}),await c?.onError?.(l)},async onRequest(l){let a=o.get();o.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await c?.onRequest?.(l)}})};e=Array.isArray(e)?e:[e];let u=!1;for(let c of e)c.subscribe(()=>{u?f():q(o,()=>(f(),u=!0,()=>{o.off(),c.off()}))});return o};function C(e){let t=H(!1);return{session:x(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var v=e=>{let t="credentials"in Request.prototype,r=B(e?.baseURL),i=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],o=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[F,S,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:f,session:u}=C(o),c=e?.plugins||[],l={},a={$sessionSignal:f,session:u},s={"/sign-out":"POST","/revoke-sessions":"POST"},p=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of c)n.getAtoms&&Object.assign(a,n.getAtoms?.(o)),n.pathMethods&&Object.assign(s,n.pathMethods),n.atomListeners&&p.push(...n.atomListeners);let m={notify:n=>{a[n].set(!a[n].get())},listen:(n,O)=>{a[n].subscribe(O)},atoms:a};for(let n of c)n.getActions&&Object.assign(l,n.getActions?.(o,m));return{pluginsActions:l,pluginsAtoms:a,pluginPathMethods:s,atomListeners:p,$fetch:o,$store:m}};function L(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e,t,r){let i=t[e],{fetchOptions:o,query:f,...u}=r||{};return i||(o?.method?o.method:u&&Object.keys(u).length>0?"POST":"GET")}function E(e,t,r,i,o){function f(u=[]){return new Proxy(function(){},{get(c,l){let a=[...u,l],s=e;for(let p of a)if(s&&typeof s=="object"&&p in s)s=s[p];else{s=void 0;break}return typeof s=="function"?s:f(a)},apply:async(c,l,a)=>{let s="/"+u.map(b=>b.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),p=a[0]||{},m=a[1]||{},{query:n,fetchOptions:O,...w}=p,h={...m,...O},U=G(s,r,p);return await t(s,{...h,body:U==="GET"?void 0:{...w,...h?.body||{}},query:n||h?.query,method:U,async onSuccess(b){await h?.onSuccess?.(b);let y=o?.find(I=>I.matcher(s));if(!y)return;let R=i[y.signal];if(!R)return;let _=R.get();setTimeout(()=>{R.set(!_)},10)}})}})}return f()}function he(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:i,$fetch:o,atomListeners:f,$store:u}=v(e),c={};for(let[s,p]of Object.entries(i))c[`use${L(s)}`]=p;let l={...r,...c,$fetch:o,$store:u};return E(l,o,t,i,f)}export{he as createAuthClient};
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var S=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)S(e,r,{get:t[r],enumerable:!0})},N=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of D(t))!M.call(e,n)&&n!==r&&S(e,n,{get:()=>t[n],enumerable:!(o=H(t,n))||o.enumerable});return e};var V=e=>N(S({},"__esModule",{value:!0}),e);var Y={};G(Y,{createAuthClient:()=>J});module.exports=V(Y);var x=require("@nanostores/vue");var $=require("@better-fetch/fetch");var A=Object.create(null),h=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?A:globalThis),p=new Proxy(A,{get(e,t){return h()[t]??A[t]},has(e,t){let r=h();return t in r||t in A},set(e,t,r){let o=h(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=h(!0);return delete r[t],!0},ownKeys(){let e=h(!0);return Object.keys(e)}});function z(e){return e?e!=="false":!1}var X=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var te=X==="test"||z(p.TEST);var O=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function K(e){try{return new URL(e).pathname!=="/"}catch{throw new O(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function F(e,t="/api/auth"){return K(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function L(e,t){if(e)return F(e,t);let r=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(r)return F(r,t);if(typeof window<"u")return F(window.location.origin,t)}var me=require("nanostores");var ae=require("@better-fetch/fetch"),v={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},C={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var w=require("nanostores");var ue=require("@better-fetch/fetch"),b=require("nanostores"),E=(e,t,r,o)=>{let n=(0,b.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),d=()=>{let a=typeof o=="function"?o({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):o;return r(t,{...a,onSuccess:async u=>{n.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await a?.onSuccess?.(u)},async onError(u){n.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await a?.onError?.(u)},async onRequest(u){let i=n.get();n.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await a?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let f=!1;for(let a of e)a.subscribe(()=>{f?d():(0,b.onMount)(n,()=>(d(),f=!0,()=>{n.off(),a.off()}))});return n};function _(e){let t=(0,w.atom)(!1);return{session:E(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var I=e=>{let t="credentials"in Request.prototype,r=L(e?.baseURL),o=e?.plugins?.flatMap(s=>s.fetchPlugins).filter(s=>s!==void 0)||[],n=(0,$.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...o]:[v,C,...e?.fetchOptions?.plugins||[],...o]}),{$sessionSignal:d,session:f}=_(n),a=e?.plugins||[],u={},i={$sessionSignal:d,session:f},c={"/sign-out":"POST","/revoke-sessions":"POST"},l=[{signal:"$sessionSignal",matcher(s){return s==="/sign-out"||s==="/update-user"||s.startsWith("/sign-in")||s.startsWith("/sign-up")}}];for(let s of a)s.getAtoms&&Object.assign(i,s.getAtoms?.(n)),s.pathMethods&&Object.assign(c,s.pathMethods),s.atomListeners&&l.push(...s.atomListeners);let g={notify:s=>{i[s].set(!i[s].get())},listen:(s,m)=>{i[s].subscribe(m)},atoms:i};for(let s of a)s.getActions&&Object.assign(u,s.getActions?.(n,g));return{pluginsActions:u,pluginsAtoms:i,pluginPathMethods:c,atomListeners:l,$fetch:n,$store:g}};function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t,r){let o=t[e],{fetchOptions:n,query:d,...f}=r||{};return o||(n?.method?n.method:f&&Object.keys(f).length>0?"POST":"GET")}function W(e,t,r,o,n){function d(f=[]){return new Proxy(function(){},{get(a,u){let i=[...f,u],c=e;for(let l of i)if(c&&typeof c=="object"&&l in c)c=c[l];else{c=void 0;break}return typeof c=="function"?c:d(i)},apply:async(a,u,i)=>{let c="/"+f.map(T=>T.replace(/[A-Z]/g,R=>`-${R.toLowerCase()}`)).join("/"),l=i[0]||{},g=i[1]||{},{query:s,fetchOptions:m,...y}=l,P={...g,...m},B=Q(c,r,l);return await t(c,{...P,body:B==="GET"?void 0:{...y,...P?.body||{}},query:s||P?.query,method:B,async onSuccess(T){await P?.onSuccess?.(T);let R=n?.find(q=>q.matcher(c));if(!R)return;let U=o[R.signal];if(!U)return;let j=U.get();setTimeout(()=>{U.set(!j)},10)}})}})}return d()}function Z(e){return`use${k(e)}`}function J(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:o,$fetch:n,$store:d,atomListeners:f}=I(e),a={};for(let[l,g]of Object.entries(o))a[Z(l)]=()=>(0,x.useStore)(g);function u(l){if(l){let g=(0,x.useStore)(o.$sessionSignal),s=e?.fetchOptions?.baseURL||e?.baseURL,m=s?new URL(s).pathname:"/api/auth";return l(`${m}/get-session`,{ref:g}).then(y=>({data:y.data,isPending:!1,error:y.error}))}return a.useSession()}let i={...r,...a,useSession:u,$fetch:n,$store:d};return W(i,n,t,o,f)}0&&(module.exports={createAuthClient});
1
+ "use strict";var S=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)S(e,r,{get:t[r],enumerable:!0})},N=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of D(t))!M.call(e,n)&&n!==r&&S(e,n,{get:()=>t[n],enumerable:!(o=H(t,n))||o.enumerable});return e};var V=e=>N(S({},"__esModule",{value:!0}),e);var Y={};G(Y,{createAuthClient:()=>J});module.exports=V(Y);var x=require("@nanostores/vue");var $=require("@better-fetch/fetch");var A=Object.create(null),h=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?A:globalThis),p=new Proxy(A,{get(e,t){return h()[t]??A[t]},has(e,t){let r=h();return t in r||t in A},set(e,t,r){let o=h(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=h(!0);return delete r[t],!0},ownKeys(){let e=h(!0);return Object.keys(e)}});function z(e){return e?e!=="false":!1}var X=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var te=X==="test"||z(p.TEST);var O=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function K(e){try{return new URL(e).pathname!=="/"}catch{throw new O(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function F(e,t="/api/auth"){return K(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function L(e,t){if(e)return F(e,t);let r=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(r)return F(r,t);if(typeof window<"u"&&window.location)return F(window.location.origin,t)}var me=require("nanostores");var ae=require("@better-fetch/fetch"),v={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},C={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};var E=require("nanostores");var ue=require("@better-fetch/fetch"),b=require("nanostores"),w=(e,t,r,o)=>{let n=(0,b.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),d=()=>{let a=typeof o=="function"?o({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):o;return r(t,{...a,onSuccess:async u=>{n.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await a?.onSuccess?.(u)},async onError(u){n.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await a?.onError?.(u)},async onRequest(u){let i=n.get();n.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await a?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let f=!1;for(let a of e)a.subscribe(()=>{f?d():(0,b.onMount)(n,()=>(d(),f=!0,()=>{n.off(),a.off()}))});return n};function _(e){let t=(0,E.atom)(!1);return{session:w(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var I=e=>{let t="credentials"in Request.prototype,r=L(e?.baseURL),o=e?.plugins?.flatMap(s=>s.fetchPlugins).filter(s=>s!==void 0)||[],n=(0,$.createFetch)({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...o]:[v,C,...e?.fetchOptions?.plugins||[],...o]}),{$sessionSignal:d,session:f}=_(n),a=e?.plugins||[],u={},i={$sessionSignal:d,session:f},c={"/sign-out":"POST","/revoke-sessions":"POST"},l=[{signal:"$sessionSignal",matcher(s){return s==="/sign-out"||s==="/update-user"||s.startsWith("/sign-in")||s.startsWith("/sign-up")}}];for(let s of a)s.getAtoms&&Object.assign(i,s.getAtoms?.(n)),s.pathMethods&&Object.assign(c,s.pathMethods),s.atomListeners&&l.push(...s.atomListeners);let g={notify:s=>{i[s].set(!i[s].get())},listen:(s,m)=>{i[s].subscribe(m)},atoms:i};for(let s of a)s.getActions&&Object.assign(u,s.getActions?.(n,g));return{pluginsActions:u,pluginsAtoms:i,pluginPathMethods:c,atomListeners:l,$fetch:n,$store:g}};function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Q(e,t,r){let o=t[e],{fetchOptions:n,query:d,...f}=r||{};return o||(n?.method?n.method:f&&Object.keys(f).length>0?"POST":"GET")}function W(e,t,r,o,n){function d(f=[]){return new Proxy(function(){},{get(a,u){let i=[...f,u],c=e;for(let l of i)if(c&&typeof c=="object"&&l in c)c=c[l];else{c=void 0;break}return typeof c=="function"?c:d(i)},apply:async(a,u,i)=>{let c="/"+f.map(T=>T.replace(/[A-Z]/g,R=>`-${R.toLowerCase()}`)).join("/"),l=i[0]||{},g=i[1]||{},{query:s,fetchOptions:m,...y}=l,P={...g,...m},B=Q(c,r,l);return await t(c,{...P,body:B==="GET"?void 0:{...y,...P?.body||{}},query:s||P?.query,method:B,async onSuccess(T){await P?.onSuccess?.(T);let R=n?.find(q=>q.matcher(c));if(!R)return;let U=o[R.signal];if(!U)return;let j=U.get();setTimeout(()=>{U.set(!j)},10)}})}})}return d()}function Z(e){return`use${k(e)}`}function J(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:o,$fetch:n,$store:d,atomListeners:f}=I(e),a={};for(let[l,g]of Object.entries(o))a[Z(l)]=()=>(0,x.useStore)(g);function u(l){if(l){let g=(0,x.useStore)(o.$sessionSignal),s=e?.fetchOptions?.baseURL||e?.baseURL,m=s?new URL(s).pathname:"/api/auth";return l(`${m}/get-session`,{ref:g}).then(y=>({data:y.data,isPending:!1,error:y.error}))}return a.useSession()}let i={...r,...a,useSession:u,$fetch:n,$store:d};return W(i,n,t,o,f)}0&&(module.exports={createAuthClient});
package/dist/vue.js CHANGED
@@ -1 +1 @@
1
- import{useStore as _}from"@nanostores/vue";import{createFetch as M}from"@better-fetch/fetch";var A=Object.create(null),h=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?A:globalThis),p=new Proxy(A,{get(e,t){return h()[t]??A[t]},has(e,t){let r=h();return t in r||t in A},set(e,t,r){let o=h(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=h(!0);return delete r[t],!0},ownKeys(){let e=h(!0);return Object.keys(e)}});function k(e){return e?e!=="false":!1}var W=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var V=W==="test"||k(p.TEST);var O=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function j(e){try{return new URL(e).pathname!=="/"}catch{throw new O(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function U(e,t="/api/auth"){return j(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return U(e,t);let r=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(r)return U(r,t);if(typeof window<"u")return U(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},B={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as D}from"nanostores";import"@better-fetch/fetch";import{atom as q,onMount as H}from"nanostores";var L=(e,t,r,o)=>{let s=q({data:null,error:null,isPending:!0,isRefetching:!1}),d=()=>{let a=typeof o=="function"?o({data:s.get().data,error:s.get().error,isPending:s.get().isPending}):o;return r(t,{...a,onSuccess:async u=>{s.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await a?.onSuccess?.(u)},async onError(u){s.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await a?.onError?.(u)},async onRequest(u){let i=s.get();s.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await a?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let f=!1;for(let a of e)a.subscribe(()=>{f?d():H(s,()=>(d(),f=!0,()=>{s.off(),a.off()}))});return s};function v(e){let t=D(!1);return{session:L(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var C=e=>{let t="credentials"in Request.prototype,r=F(e?.baseURL),o=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],s=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...o]:[x,B,...e?.fetchOptions?.plugins||[],...o]}),{$sessionSignal:d,session:f}=v(s),a=e?.plugins||[],u={},i={$sessionSignal:d,session:f},c={"/sign-out":"POST","/revoke-sessions":"POST"},l=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of a)n.getAtoms&&Object.assign(i,n.getAtoms?.(s)),n.pathMethods&&Object.assign(c,n.pathMethods),n.atomListeners&&l.push(...n.atomListeners);let g={notify:n=>{i[n].set(!i[n].get())},listen:(n,m)=>{i[n].subscribe(m)},atoms:i};for(let n of a)n.getActions&&Object.assign(u,n.getActions?.(s,g));return{pluginsActions:u,pluginsAtoms:i,pluginPathMethods:c,atomListeners:l,$fetch:s,$store:g}};function E(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e,t,r){let o=t[e],{fetchOptions:s,query:d,...f}=r||{};return o||(s?.method?s.method:f&&Object.keys(f).length>0?"POST":"GET")}function w(e,t,r,o,s){function d(f=[]){return new Proxy(function(){},{get(a,u){let i=[...f,u],c=e;for(let l of i)if(c&&typeof c=="object"&&l in c)c=c[l];else{c=void 0;break}return typeof c=="function"?c:d(i)},apply:async(a,u,i)=>{let c="/"+f.map(b=>b.replace(/[A-Z]/g,R=>`-${R.toLowerCase()}`)).join("/"),l=i[0]||{},g=i[1]||{},{query:n,fetchOptions:m,...y}=l,P={...g,...m},S=G(c,r,l);return await t(c,{...P,body:S==="GET"?void 0:{...y,...P?.body||{}},query:n||P?.query,method:S,async onSuccess(b){await P?.onSuccess?.(b);let R=s?.find(I=>I.matcher(c));if(!R)return;let T=o[R.signal];if(!T)return;let $=T.get();setTimeout(()=>{T.set(!$)},10)}})}})}return d()}function N(e){return`use${E(e)}`}function Re(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:o,$fetch:s,$store:d,atomListeners:f}=C(e),a={};for(let[l,g]of Object.entries(o))a[N(l)]=()=>_(g);function u(l){if(l){let g=_(o.$sessionSignal),n=e?.fetchOptions?.baseURL||e?.baseURL,m=n?new URL(n).pathname:"/api/auth";return l(`${m}/get-session`,{ref:g}).then(y=>({data:y.data,isPending:!1,error:y.error}))}return a.useSession()}let i={...r,...a,useSession:u,$fetch:s,$store:d};return w(i,s,t,o,f)}export{Re as createAuthClient};
1
+ import{useStore as _}from"@nanostores/vue";import{createFetch as M}from"@better-fetch/fetch";var A=Object.create(null),h=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?A:globalThis),p=new Proxy(A,{get(e,t){return h()[t]??A[t]},has(e,t){let r=h();return t in r||t in A},set(e,t,r){let o=h(!0);return o[t]=r,!0},deleteProperty(e,t){if(!t)return!1;let r=h(!0);return delete r[t],!0},ownKeys(){let e=h(!0);return Object.keys(e)}});function k(e){return e?e!=="false":!1}var W=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var V=W==="test"||k(p.TEST);var O=class extends Error{constructor(t,r){super(t),this.name="BetterAuthError",this.message=t,this.cause=r}};function j(e){try{return new URL(e).pathname!=="/"}catch{throw new O(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function U(e,t="/api/auth"){return j(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function F(e,t){if(e)return U(e,t);let r=p.BETTER_AUTH_URL||p.NEXT_PUBLIC_BETTER_AUTH_URL||p.PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_BETTER_AUTH_URL||p.NUXT_PUBLIC_AUTH_URL||(p.BASE_URL!=="/"?p.BASE_URL:void 0);if(r)return U(r,t);if(typeof window<"u"&&window.location)return U(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var x={id:"redirect",name:"Redirect",hooks:{onSuccess(e){e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&(window.location.href=e.data.url)}}},B={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location){let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}return e}}};import{atom as D}from"nanostores";import"@better-fetch/fetch";import{atom as q,onMount as H}from"nanostores";var L=(e,t,r,o)=>{let s=q({data:null,error:null,isPending:!0,isRefetching:!1}),d=()=>{let a=typeof o=="function"?o({data:s.get().data,error:s.get().error,isPending:s.get().isPending}):o;return r(t,{...a,onSuccess:async u=>{s.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await a?.onSuccess?.(u)},async onError(u){s.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await a?.onError?.(u)},async onRequest(u){let i=s.get();s.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await a?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let f=!1;for(let a of e)a.subscribe(()=>{f?d():H(s,()=>(d(),f=!0,()=>{s.off(),a.off()}))});return s};function v(e){let t=D(!1);return{session:L(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var C=e=>{let t="credentials"in Request.prototype,r=F(e?.baseURL),o=e?.plugins?.flatMap(n=>n.fetchPlugins).filter(n=>n!==void 0)||[],s=M({baseURL:r,...t?{credentials:"include"}:{},method:"GET",...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...o]:[x,B,...e?.fetchOptions?.plugins||[],...o]}),{$sessionSignal:d,session:f}=v(s),a=e?.plugins||[],u={},i={$sessionSignal:d,session:f},c={"/sign-out":"POST","/revoke-sessions":"POST"},l=[{signal:"$sessionSignal",matcher(n){return n==="/sign-out"||n==="/update-user"||n.startsWith("/sign-in")||n.startsWith("/sign-up")}}];for(let n of a)n.getAtoms&&Object.assign(i,n.getAtoms?.(s)),n.pathMethods&&Object.assign(c,n.pathMethods),n.atomListeners&&l.push(...n.atomListeners);let g={notify:n=>{i[n].set(!i[n].get())},listen:(n,m)=>{i[n].subscribe(m)},atoms:i};for(let n of a)n.getActions&&Object.assign(u,n.getActions?.(s,g));return{pluginsActions:u,pluginsAtoms:i,pluginPathMethods:c,atomListeners:l,$fetch:s,$store:g}};function w(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G(e,t,r){let o=t[e],{fetchOptions:s,query:d,...f}=r||{};return o||(s?.method?s.method:f&&Object.keys(f).length>0?"POST":"GET")}function E(e,t,r,o,s){function d(f=[]){return new Proxy(function(){},{get(a,u){let i=[...f,u],c=e;for(let l of i)if(c&&typeof c=="object"&&l in c)c=c[l];else{c=void 0;break}return typeof c=="function"?c:d(i)},apply:async(a,u,i)=>{let c="/"+f.map(b=>b.replace(/[A-Z]/g,R=>`-${R.toLowerCase()}`)).join("/"),l=i[0]||{},g=i[1]||{},{query:n,fetchOptions:m,...y}=l,P={...g,...m},S=G(c,r,l);return await t(c,{...P,body:S==="GET"?void 0:{...y,...P?.body||{}},query:n||P?.query,method:S,async onSuccess(b){await P?.onSuccess?.(b);let R=s?.find(I=>I.matcher(c));if(!R)return;let T=o[R.signal];if(!T)return;let $=T.get();setTimeout(()=>{T.set(!$)},10)}})}})}return d()}function N(e){return`use${w(e)}`}function Re(e){let{pluginPathMethods:t,pluginsActions:r,pluginsAtoms:o,$fetch:s,$store:d,atomListeners:f}=C(e),a={};for(let[l,g]of Object.entries(o))a[N(l)]=()=>_(g);function u(l){if(l){let g=_(o.$sessionSignal),n=e?.fetchOptions?.baseURL||e?.baseURL,m=n?new URL(n).pathname:"/api/auth";return l(`${m}/get-session`,{ref:g}).then(y=>({data:y.data,isPending:!1,error:y.error}))}return a.useSession()}let i={...r,...a,useSession:u,$fetch:s,$store:d};return E(i,s,t,o,f)}export{Re as createAuthClient};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-auth",
3
- "version": "0.7.3-beta.9",
3
+ "version": "0.7.3",
4
4
  "description": "The most comprehensive authentication library for TypeScript.",
5
5
  "type": "module",
6
6
  "repository": {