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 +1 -1
- package/dist/client.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.js +1 -1
- package/dist/solid.cjs +1 -1
- package/dist/solid.js +1 -1
- package/dist/svelte.cjs +1 -1
- package/dist/svelte.js +1 -1
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +1 -1
- package/package.json +1 -1
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
|
|
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,...
|
|
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
|
|
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,...
|
|
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
|
|
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,...
|
|
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
|
|
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,...
|
|
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
|
|
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
|
|
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};
|