better-auth 1.1.1 → 1.1.2-beta.1

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.
@@ -1 +1 @@
1
- "use strict";var y=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var k=(e,t)=>{for(var s in t)y(e,s,{get:t[s],enumerable:!0})},I=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!E.call(e,n)&&n!==s&&y(e,n,{get:()=>t[n],enumerable:!(i=B(t,n))||i.enumerable});return e};var _=e=>I(y({},"__esModule",{value:!0}),e);var oe={};k(oe,{InferServerPlugin:()=>O,adminClient:()=>J,anonymousClient:()=>V,customSessionClient:()=>te,emailOTPClient:()=>X,genericOAuthClient:()=>K,getPasskeyActions:()=>w,inferAdditionalFields:()=>H,jwtClient:()=>Q,magicLinkClient:()=>q,multiSessionClient:()=>Y,oidcClient:()=>re,oneTapClient:()=>Z,organizationClient:()=>D,passkeyClient:()=>M,phoneNumberClient:()=>W,ssoClient:()=>ne,twoFactorClient:()=>j,usernameClient:()=>G});module.exports=_(oe);var g=require("nanostores");function A(e){let t=e;return{newRole(s){return U(s)}}}function U(e){return{statements:e,authorize(t,s){for(let[i,n]of Object.entries(t)){let o=e[i];return o?(s==="OR"?n.some(r=>o.includes(r)):n.every(r=>o.includes(r)))?{success:!0}:{success:!1,error:`Unauthorized to access resource "${i}"`}:{success:!1,error:`You are not allowed to access resource: ${i}`}}return{success:!1,error:"Not authorized"}}}}var F={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},h=A(F),S=h.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),T=h.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),R=h.newRole({organization:[],member:[],invitation:[]});var N=require("@better-fetch/fetch");var m=Object.create(null),p=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?m:globalThis),b=new Proxy(m,{get(e,t){return p()[t]??m[t]},has(e,t){let s=p();return t in s||t in m},set(e,t,s){let i=p(!0);return i[t]=s,!0},deleteProperty(e,t){if(!t)return!1;let s=p(!0);return delete s[t],!0},ownKeys(){let e=p(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var L=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var me=L==="test"||$(b.TEST);var Fe=require("nanostores");var Ae=require("@better-fetch/fetch");var z=require("nanostores");var Te=require("@better-fetch/fetch"),d=require("nanostores"),c=(e,t,s,i)=>{let n=(0,d.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),o=()=>{let r=typeof i=="function"?i({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):i;return s(t,{...r,async onSuccess(u){n.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await r?.onSuccess?.(u)},async onError(u){n.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await r?.onError?.(u)},async onRequest(u){let f=n.get();n.set({isPending:f.data===null,data:f.data,error:null,isRefetching:!0}),await r?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let a=!1;for(let r of e)r.subscribe(()=>{a?o():(0,d.onMount)(n,()=>(o(),a=!0,()=>{n.off(),r.off()}))});return n};var Ce={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY};var D=e=>{let t=(0,g.atom)(!1),s=(0,g.atom)(!1),i=(0,g.atom)(!1),n={admin:S,member:R,owner:T,...e?.roles};return{id:"organization",$InferServerPlugin:{},getActions:o=>({$Infer:{ActiveOrganization:{},Organization:{},Invitation:{},Member:{}},organization:{checkRolePermission:a=>{let r=n[a.role];return r?(r?.authorize(a.permission)).success:!1}}}),getAtoms:o=>{let a=c(t,"/organization/list",o,{method:"GET"}),r=c([s],"/organization/get-full-organization",o,()=>({method:"GET"})),u=c([i],"/organization/get-active-member",o,{method:"GET"});return{$listOrg:t,$activeOrgSignal:s,$activeMemberSignal:i,activeOrganization:r,listOrganizations:a,activeMember:u}},pathMethods:{"/organization/get-full-organization":"GET"},atomListeners:[{matcher(o){return o==="/organization/create"||o==="/organization/delete"},signal:"$listOrg"},{matcher(o){return o.startsWith("/organization")},signal:"$activeOrgSignal"},{matcher(o){return o.includes("/organization/update-member-role")},signal:"$activeMemberSignal"}]}};var G=()=>({id:"username",$InferServerPlugin:{}});var l=require("@simplewebauthn/browser");var x=require("nanostores"),w=(e,{$listPasskeys:t})=>({signIn:{passkey:async(n,o)=>{let a=await e("/passkey/generate-authenticate-options",{method:"POST",body:{email:n?.email}});if(!a.data)return a;try{let r=await(0,l.startAuthentication)(a.data,n?.autoFill||!1),u=await e("/passkey/verify-authentication",{body:{response:r},...n?.fetchOptions,...o,method:"POST"});if(!u.data)return u}catch{return{data:null,error:{message:"auth cancelled",status:400,statusText:"BAD_REQUEST"}}}}},passkey:{addPasskey:async(n,o)=>{let a=await e("/passkey/generate-register-options",{method:"GET"});if(!a.data)return a;try{let r=await(0,l.startRegistration)(a.data),u=await e("/passkey/verify-registration",{...n?.fetchOptions,...o,body:{response:r,name:n?.name},method:"POST"});if(!u.data)return u;t.set(Math.random())}catch(r){return r instanceof l.WebAuthnError?r.code==="ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED"?{data:null,error:{message:"previously registered",status:400,statusText:"BAD_REQUEST"}}:r.code==="ERROR_CEREMONY_ABORTED"?{data:null,error:{message:"registration cancelled",status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:r.message,status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:r instanceof Error?r.message:"unknown error",status:500,statusText:"INTERNAL_SERVER_ERROR"}}}}},$Infer:{}}),M=()=>{let e=(0,x.atom)();return{id:"passkey",$InferServerPlugin:{},getActions:t=>w(t,{$listPasskeys:e}),getAtoms(t){return{listPasskeys:c(e,"/passkey/list-user-passkeys",t,{method:"GET"}),$listPasskeys:e}},pathMethods:{"/passkey/register":"POST","/passkey/authenticate":"POST"},atomListeners:[{matcher(t){return t==="/passkey/verify-registration"||t==="/passkey/delete-passkey"||t==="/passkey/update-passkey"},signal:"_listPasskeys"}]}};var j=e=>({id:"two-factor",$InferServerPlugin:{},atomListeners:[{matcher:t=>t.startsWith("/two-factor/"),signal:"$sessionSignal"}],pathMethods:{"/two-factor/disable":"POST","/two-factor/enable":"POST","/two-factor/send-otp":"POST","/two-factor/generate-backup-codes":"POST"},fetchPlugins:[{id:"two-factor",name:"two-factor",hooks:{async onSuccess(t){t.data?.twoFactorRedirect&&e?.onTwoFactorRedirect&&await e.onTwoFactorRedirect()}}}]});var q=()=>({id:"magic-link",$InferServerPlugin:{}});var W=()=>({id:"phoneNumber",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/phone-number/update"||e==="/phone-number/verify"},signal:"$sessionSignal"}]});var V=()=>({id:"anonymous",$InferServerPlugin:{},pathMethods:{"/sign-in/anonymous":"POST"}});var H=e=>({id:"additional-fields-client",$InferServerPlugin:{}});var J=()=>({id:"better-auth-client",$InferServerPlugin:{},pathMethods:{"/admin/list-users":"GET","/admin/stop-impersonating":"POST"}});var K=()=>({id:"generic-oauth-client",$InferServerPlugin:{}});var Q=()=>({id:"better-auth-client",$InferServerPlugin:{}});var Y=()=>({id:"multi-session",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/multi-session/set-active"},signal:"$sessionSignal"}]});var X=()=>({id:"email-otp",$InferServerPlugin:{}});var P=!1,Z=e=>({id:"one-tap",getActions:(t,s)=>({oneTap:async(i,n)=>{if(P){console.warn("A Google One Tap request is already in progress. Please wait.");return}P=!0;try{if(typeof window>"u"||!window.document){console.warn("Google One Tap is only available in browser environments");return}let{autoSelect:o,cancelOnTapOutside:a,context:r}=i??{},u=r??e.context??"signin";await ee(),await new Promise(f=>{window.google?.accounts.id.initialize({client_id:e.clientId,callback:async C=>{await t("/one-tap/callback",{method:"POST",body:{idToken:C.credential},...i?.fetchOptions,...n}),(!i?.fetchOptions&&!n||i?.callbackURL)&&(window.location.href=i?.callbackURL??"/"),f()},auto_select:o,cancel_on_tap_outside:a,context:u}),window.google?.accounts.id.prompt()})}catch(o){throw console.error("Error during Google One Tap flow:",o),o}finally{P=!1}}}),getAtoms(t){return{}}}),ee=()=>new Promise(e=>{if(window.googleScriptInitialized){e();return}let t=document.createElement("script");t.src="https://accounts.google.com/gsi/client",t.async=!0,t.defer=!0,t.onload=()=>{window.googleScriptInitialized=!0,e()},document.head.appendChild(t)});var te=()=>O();var O=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});var ne=()=>({id:"sso-client",$InferServerPlugin:{}});var re=()=>({id:"oidc-client",$InferServerPlugin:{}});0&&(module.exports={InferServerPlugin,adminClient,anonymousClient,customSessionClient,emailOTPClient,genericOAuthClient,getPasskeyActions,inferAdditionalFields,jwtClient,magicLinkClient,multiSessionClient,oidcClient,oneTapClient,organizationClient,passkeyClient,phoneNumberClient,ssoClient,twoFactorClient,usernameClient});
1
+ "use strict";var y=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var k=(e,t)=>{for(var s in t)y(e,s,{get:t[s],enumerable:!0})},I=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!E.call(e,n)&&n!==s&&y(e,n,{get:()=>t[n],enumerable:!(i=B(t,n))||i.enumerable});return e};var _=e=>I(y({},"__esModule",{value:!0}),e);var oe={};k(oe,{InferServerPlugin:()=>O,adminClient:()=>J,anonymousClient:()=>V,customSessionClient:()=>te,emailOTPClient:()=>X,genericOAuthClient:()=>K,getPasskeyActions:()=>w,inferAdditionalFields:()=>H,jwtClient:()=>Q,magicLinkClient:()=>q,multiSessionClient:()=>Y,oidcClient:()=>re,oneTapClient:()=>Z,organizationClient:()=>D,passkeyClient:()=>M,phoneNumberClient:()=>W,ssoClient:()=>ne,twoFactorClient:()=>j,usernameClient:()=>G});module.exports=_(oe);var g=require("nanostores");function A(e){let t=e;return{newRole(s){return U(s)}}}function U(e){return{statements:e,authorize(t,s){for(let[i,n]of Object.entries(t)){let o=e[i];return o?(s==="OR"?n.some(r=>o.includes(r)):n.every(r=>o.includes(r)))?{success:!0}:{success:!1,error:`Unauthorized to access resource "${i}"`}:{success:!1,error:`You are not allowed to access resource: ${i}`}}return{success:!1,error:"Not authorized"}}}}var F={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},h=A(F),S=h.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),T=h.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),R=h.newRole({organization:[],member:[],invitation:[]});var N=require("@better-fetch/fetch");var m=Object.create(null),p=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?m:globalThis),b=new Proxy(m,{get(e,t){return p()[t]??m[t]},has(e,t){let s=p();return t in s||t in m},set(e,t,s){let i=p(!0);return i[t]=s,!0},deleteProperty(e,t){if(!t)return!1;let s=p(!0);return delete s[t],!0},ownKeys(){let e=p(!0);return Object.keys(e)}});function $(e){return e?e!=="false":!1}var L=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var me=L==="test"||$(b.TEST);var Fe=require("nanostores");var Ae=require("@better-fetch/fetch");var z=require("nanostores");var Te=require("@better-fetch/fetch"),d=require("nanostores"),c=(e,t,s,i)=>{let n=(0,d.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),o=()=>{let r=typeof i=="function"?i({data:n.get().data,error:n.get().error,isPending:n.get().isPending}):i;return s(t,{...r,async onSuccess(u){typeof window<"u"&&n.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await r?.onSuccess?.(u)},async onError(u){n.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await r?.onError?.(u)},async onRequest(u){let f=n.get();n.set({isPending:f.data===null,data:f.data,error:null,isRefetching:!0}),await r?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let a=!1;for(let r of e)r.subscribe(()=>{a?o():(0,d.onMount)(n,()=>(o(),a=!0,()=>{n.off(),r.off()}))});return n};var Ce={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY};var D=e=>{let t=(0,g.atom)(!1),s=(0,g.atom)(!1),i=(0,g.atom)(!1),n={admin:S,member:R,owner:T,...e?.roles};return{id:"organization",$InferServerPlugin:{},getActions:o=>({$Infer:{ActiveOrganization:{},Organization:{},Invitation:{},Member:{}},organization:{checkRolePermission:a=>{let r=n[a.role];return r?(r?.authorize(a.permission)).success:!1}}}),getAtoms:o=>{let a=c(t,"/organization/list",o,{method:"GET"}),r=c([s],"/organization/get-full-organization",o,()=>({method:"GET"})),u=c([i],"/organization/get-active-member",o,{method:"GET"});return{$listOrg:t,$activeOrgSignal:s,$activeMemberSignal:i,activeOrganization:r,listOrganizations:a,activeMember:u}},pathMethods:{"/organization/get-full-organization":"GET"},atomListeners:[{matcher(o){return o==="/organization/create"||o==="/organization/delete"},signal:"$listOrg"},{matcher(o){return o.startsWith("/organization")},signal:"$activeOrgSignal"},{matcher(o){return o.includes("/organization/update-member-role")},signal:"$activeMemberSignal"}]}};var G=()=>({id:"username",$InferServerPlugin:{}});var l=require("@simplewebauthn/browser");var x=require("nanostores"),w=(e,{$listPasskeys:t})=>({signIn:{passkey:async(n,o)=>{let a=await e("/passkey/generate-authenticate-options",{method:"POST",body:{email:n?.email}});if(!a.data)return a;try{let r=await(0,l.startAuthentication)(a.data,n?.autoFill||!1),u=await e("/passkey/verify-authentication",{body:{response:r},...n?.fetchOptions,...o,method:"POST"});if(!u.data)return u}catch{return{data:null,error:{message:"auth cancelled",status:400,statusText:"BAD_REQUEST"}}}}},passkey:{addPasskey:async(n,o)=>{let a=await e("/passkey/generate-register-options",{method:"GET"});if(!a.data)return a;try{let r=await(0,l.startRegistration)(a.data),u=await e("/passkey/verify-registration",{...n?.fetchOptions,...o,body:{response:r,name:n?.name},method:"POST"});if(!u.data)return u;t.set(Math.random())}catch(r){return r instanceof l.WebAuthnError?r.code==="ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED"?{data:null,error:{message:"previously registered",status:400,statusText:"BAD_REQUEST"}}:r.code==="ERROR_CEREMONY_ABORTED"?{data:null,error:{message:"registration cancelled",status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:r.message,status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:r instanceof Error?r.message:"unknown error",status:500,statusText:"INTERNAL_SERVER_ERROR"}}}}},$Infer:{}}),M=()=>{let e=(0,x.atom)();return{id:"passkey",$InferServerPlugin:{},getActions:t=>w(t,{$listPasskeys:e}),getAtoms(t){return{listPasskeys:c(e,"/passkey/list-user-passkeys",t,{method:"GET"}),$listPasskeys:e}},pathMethods:{"/passkey/register":"POST","/passkey/authenticate":"POST"},atomListeners:[{matcher(t){return t==="/passkey/verify-registration"||t==="/passkey/delete-passkey"||t==="/passkey/update-passkey"},signal:"_listPasskeys"}]}};var j=e=>({id:"two-factor",$InferServerPlugin:{},atomListeners:[{matcher:t=>t.startsWith("/two-factor/"),signal:"$sessionSignal"}],pathMethods:{"/two-factor/disable":"POST","/two-factor/enable":"POST","/two-factor/send-otp":"POST","/two-factor/generate-backup-codes":"POST"},fetchPlugins:[{id:"two-factor",name:"two-factor",hooks:{async onSuccess(t){t.data?.twoFactorRedirect&&e?.onTwoFactorRedirect&&await e.onTwoFactorRedirect()}}}]});var q=()=>({id:"magic-link",$InferServerPlugin:{}});var W=()=>({id:"phoneNumber",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/phone-number/update"||e==="/phone-number/verify"},signal:"$sessionSignal"}]});var V=()=>({id:"anonymous",$InferServerPlugin:{},pathMethods:{"/sign-in/anonymous":"POST"}});var H=e=>({id:"additional-fields-client",$InferServerPlugin:{}});var J=()=>({id:"better-auth-client",$InferServerPlugin:{},pathMethods:{"/admin/list-users":"GET","/admin/stop-impersonating":"POST"}});var K=()=>({id:"generic-oauth-client",$InferServerPlugin:{}});var Q=()=>({id:"better-auth-client",$InferServerPlugin:{}});var Y=()=>({id:"multi-session",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/multi-session/set-active"},signal:"$sessionSignal"}]});var X=()=>({id:"email-otp",$InferServerPlugin:{}});var P=!1,Z=e=>({id:"one-tap",getActions:(t,s)=>({oneTap:async(i,n)=>{if(P){console.warn("A Google One Tap request is already in progress. Please wait.");return}P=!0;try{if(typeof window>"u"||!window.document){console.warn("Google One Tap is only available in browser environments");return}let{autoSelect:o,cancelOnTapOutside:a,context:r}=i??{},u=r??e.context??"signin";await ee(),await new Promise(f=>{window.google?.accounts.id.initialize({client_id:e.clientId,callback:async C=>{await t("/one-tap/callback",{method:"POST",body:{idToken:C.credential},...i?.fetchOptions,...n}),(!i?.fetchOptions&&!n||i?.callbackURL)&&(window.location.href=i?.callbackURL??"/"),f()},auto_select:o,cancel_on_tap_outside:a,context:u}),window.google?.accounts.id.prompt()})}catch(o){throw console.error("Error during Google One Tap flow:",o),o}finally{P=!1}}}),getAtoms(t){return{}}}),ee=()=>new Promise(e=>{if(window.googleScriptInitialized){e();return}let t=document.createElement("script");t.src="https://accounts.google.com/gsi/client",t.async=!0,t.defer=!0,t.onload=()=>{window.googleScriptInitialized=!0,e()},document.head.appendChild(t)});var te=()=>O();var O=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});var ne=()=>({id:"sso-client",$InferServerPlugin:{}});var re=()=>({id:"oidc-client",$InferServerPlugin:{}});0&&(module.exports={InferServerPlugin,adminClient,anonymousClient,customSessionClient,emailOTPClient,genericOAuthClient,getPasskeyActions,inferAdditionalFields,jwtClient,magicLinkClient,multiSessionClient,oidcClient,oneTapClient,organizationClient,passkeyClient,phoneNumberClient,ssoClient,twoFactorClient,usernameClient});
@@ -1 +1 @@
1
- import{atom as d}from"nanostores";function y(e){let t=e;return{newRole(i){return R(i)}}}function R(e){return{statements:e,authorize(t,i){for(let[s,o]of Object.entries(t)){let r=e[s];return r?(i==="OR"?o.some(n=>r.includes(n)):o.every(n=>r.includes(n)))?{success:!0}:{success:!1,error:`Unauthorized to access resource "${s}"`}:{success:!1,error:`You are not allowed to access resource: ${s}`}}return{success:!1,error:"Not authorized"}}}}var b={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},m=y(b),h=m.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),P=m.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),O=m.newRole({organization:[],member:[],invitation:[]});import{createFetch as me}from"@better-fetch/fetch";var f=Object.create(null),l=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?f:globalThis),A=new Proxy(f,{get(e,t){return l()[t]??f[t]},has(e,t){let i=l();return t in i||t in f},set(e,t,i){let s=l(!0);return s[t]=i,!0},deleteProperty(e,t){if(!t)return!1;let i=l(!0);return delete i[t],!0},ownKeys(){let e=l(!0);return Object.keys(e)}});function x(e){return e?e!=="false":!1}var w=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var M=w==="test"||x(A.TEST);import"nanostores";import"@better-fetch/fetch";import{atom as ne}from"nanostores";import"@better-fetch/fetch";import{atom as C,onMount as B}from"nanostores";var c=(e,t,i,s)=>{let o=C({data:null,error:null,isPending:!0,isRefetching:!1}),r=()=>{let n=typeof s=="function"?s({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):s;return i(t,{...n,async onSuccess(u){o.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await n?.onSuccess?.(u)},async onError(u){o.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await n?.onError?.(u)},async onRequest(u){let p=o.get();o.set({isPending:p.data===null,data:p.data,error:null,isRefetching:!0}),await n?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let a=!1;for(let n of e)n.subscribe(()=>{a?r():B(o,()=>(r(),a=!0,()=>{o.off(),n.off()}))});return o};var se={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY};var Le=e=>{let t=d(!1),i=d(!1),s=d(!1),o={admin:h,member:O,owner:P,...e?.roles};return{id:"organization",$InferServerPlugin:{},getActions:r=>({$Infer:{ActiveOrganization:{},Organization:{},Invitation:{},Member:{}},organization:{checkRolePermission:a=>{let n=o[a.role];return n?(n?.authorize(a.permission)).success:!1}}}),getAtoms:r=>{let a=c(t,"/organization/list",r,{method:"GET"}),n=c([i],"/organization/get-full-organization",r,()=>({method:"GET"})),u=c([s],"/organization/get-active-member",r,{method:"GET"});return{$listOrg:t,$activeOrgSignal:i,$activeMemberSignal:s,activeOrganization:n,listOrganizations:a,activeMember:u}},pathMethods:{"/organization/get-full-organization":"GET"},atomListeners:[{matcher(r){return r==="/organization/create"||r==="/organization/delete"},signal:"$listOrg"},{matcher(r){return r.startsWith("/organization")},signal:"$activeOrgSignal"},{matcher(r){return r.includes("/organization/update-member-role")},signal:"$activeMemberSignal"}]}};var Ne=()=>({id:"username",$InferServerPlugin:{}});import{WebAuthnError as v,startAuthentication as E,startRegistration as k}from"@simplewebauthn/browser";import{atom as I}from"nanostores";var _=(e,{$listPasskeys:t})=>({signIn:{passkey:async(o,r)=>{let a=await e("/passkey/generate-authenticate-options",{method:"POST",body:{email:o?.email}});if(!a.data)return a;try{let n=await E(a.data,o?.autoFill||!1),u=await e("/passkey/verify-authentication",{body:{response:n},...o?.fetchOptions,...r,method:"POST"});if(!u.data)return u}catch{return{data:null,error:{message:"auth cancelled",status:400,statusText:"BAD_REQUEST"}}}}},passkey:{addPasskey:async(o,r)=>{let a=await e("/passkey/generate-register-options",{method:"GET"});if(!a.data)return a;try{let n=await k(a.data),u=await e("/passkey/verify-registration",{...o?.fetchOptions,...r,body:{response:n,name:o?.name},method:"POST"});if(!u.data)return u;t.set(Math.random())}catch(n){return n instanceof v?n.code==="ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED"?{data:null,error:{message:"previously registered",status:400,statusText:"BAD_REQUEST"}}:n.code==="ERROR_CEREMONY_ABORTED"?{data:null,error:{message:"registration cancelled",status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:n.message,status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:n instanceof Error?n.message:"unknown error",status:500,statusText:"INTERNAL_SERVER_ERROR"}}}}},$Infer:{}}),qe=()=>{let e=I();return{id:"passkey",$InferServerPlugin:{},getActions:t=>_(t,{$listPasskeys:e}),getAtoms(t){return{listPasskeys:c(e,"/passkey/list-user-passkeys",t,{method:"GET"}),$listPasskeys:e}},pathMethods:{"/passkey/register":"POST","/passkey/authenticate":"POST"},atomListeners:[{matcher(t){return t==="/passkey/verify-registration"||t==="/passkey/delete-passkey"||t==="/passkey/update-passkey"},signal:"_listPasskeys"}]}};var Ve=e=>({id:"two-factor",$InferServerPlugin:{},atomListeners:[{matcher:t=>t.startsWith("/two-factor/"),signal:"$sessionSignal"}],pathMethods:{"/two-factor/disable":"POST","/two-factor/enable":"POST","/two-factor/send-otp":"POST","/two-factor/generate-backup-codes":"POST"},fetchPlugins:[{id:"two-factor",name:"two-factor",hooks:{async onSuccess(t){t.data?.twoFactorRedirect&&e?.onTwoFactorRedirect&&await e.onTwoFactorRedirect()}}}]});var Je=()=>({id:"magic-link",$InferServerPlugin:{}});var Qe=()=>({id:"phoneNumber",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/phone-number/update"||e==="/phone-number/verify"},signal:"$sessionSignal"}]});var Xe=()=>({id:"anonymous",$InferServerPlugin:{},pathMethods:{"/sign-in/anonymous":"POST"}});var et=e=>({id:"additional-fields-client",$InferServerPlugin:{}});var nt=()=>({id:"better-auth-client",$InferServerPlugin:{},pathMethods:{"/admin/list-users":"GET","/admin/stop-impersonating":"POST"}});var ot=()=>({id:"generic-oauth-client",$InferServerPlugin:{}});var it=()=>({id:"better-auth-client",$InferServerPlugin:{}});var ut=()=>({id:"multi-session",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/multi-session/set-active"},signal:"$sessionSignal"}]});var lt=()=>({id:"email-otp",$InferServerPlugin:{}});var g=!1,ft=e=>({id:"one-tap",getActions:(t,i)=>({oneTap:async(s,o)=>{if(g){console.warn("A Google One Tap request is already in progress. Please wait.");return}g=!0;try{if(typeof window>"u"||!window.document){console.warn("Google One Tap is only available in browser environments");return}let{autoSelect:r,cancelOnTapOutside:a,context:n}=s??{},u=n??e.context??"signin";await U(),await new Promise(p=>{window.google?.accounts.id.initialize({client_id:e.clientId,callback:async T=>{await t("/one-tap/callback",{method:"POST",body:{idToken:T.credential},...s?.fetchOptions,...o}),(!s?.fetchOptions&&!o||s?.callbackURL)&&(window.location.href=s?.callbackURL??"/"),p()},auto_select:r,cancel_on_tap_outside:a,context:u}),window.google?.accounts.id.prompt()})}catch(r){throw console.error("Error during Google One Tap flow:",r),r}finally{g=!1}}}),getAtoms(t){return{}}}),U=()=>new Promise(e=>{if(window.googleScriptInitialized){e();return}let t=document.createElement("script");t.src="https://accounts.google.com/gsi/client",t.async=!0,t.defer=!0,t.onload=()=>{window.googleScriptInitialized=!0,e()},document.head.appendChild(t)});var gt=()=>S();var S=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});var Pt=()=>({id:"sso-client",$InferServerPlugin:{}});var At=()=>({id:"oidc-client",$InferServerPlugin:{}});export{S as InferServerPlugin,nt as adminClient,Xe as anonymousClient,gt as customSessionClient,lt as emailOTPClient,ot as genericOAuthClient,_ as getPasskeyActions,et as inferAdditionalFields,it as jwtClient,Je as magicLinkClient,ut as multiSessionClient,At as oidcClient,ft as oneTapClient,Le as organizationClient,qe as passkeyClient,Qe as phoneNumberClient,Pt as ssoClient,Ve as twoFactorClient,Ne as usernameClient};
1
+ import{atom as d}from"nanostores";function y(e){let t=e;return{newRole(i){return R(i)}}}function R(e){return{statements:e,authorize(t,i){for(let[s,o]of Object.entries(t)){let r=e[s];return r?(i==="OR"?o.some(n=>r.includes(n)):o.every(n=>r.includes(n)))?{success:!0}:{success:!1,error:`Unauthorized to access resource "${s}"`}:{success:!1,error:`You are not allowed to access resource: ${s}`}}return{success:!1,error:"Not authorized"}}}}var b={organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]},m=y(b),h=m.newRole({organization:["update"],invitation:["create","cancel"],member:["create","update","delete"]}),P=m.newRole({organization:["update","delete"],member:["create","update","delete"],invitation:["create","cancel"]}),O=m.newRole({organization:[],member:[],invitation:[]});import{createFetch as me}from"@better-fetch/fetch";var f=Object.create(null),l=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?f:globalThis),A=new Proxy(f,{get(e,t){return l()[t]??f[t]},has(e,t){let i=l();return t in i||t in f},set(e,t,i){let s=l(!0);return s[t]=i,!0},deleteProperty(e,t){if(!t)return!1;let i=l(!0);return delete i[t],!0},ownKeys(){let e=l(!0);return Object.keys(e)}});function x(e){return e?e!=="false":!1}var w=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var M=w==="test"||x(A.TEST);import"nanostores";import"@better-fetch/fetch";import{atom as ne}from"nanostores";import"@better-fetch/fetch";import{atom as C,onMount as B}from"nanostores";var c=(e,t,i,s)=>{let o=C({data:null,error:null,isPending:!0,isRefetching:!1}),r=()=>{let n=typeof s=="function"?s({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):s;return i(t,{...n,async onSuccess(u){typeof window<"u"&&o.set({data:u.data,error:null,isPending:!1,isRefetching:!1}),await n?.onSuccess?.(u)},async onError(u){o.set({error:u.error,data:null,isPending:!1,isRefetching:!1}),await n?.onError?.(u)},async onRequest(u){let p=o.get();o.set({isPending:p.data===null,data:p.data,error:null,isRefetching:!0}),await n?.onRequest?.(u)}})};e=Array.isArray(e)?e:[e];let a=!1;for(let n of e)n.subscribe(()=>{a?r():B(o,()=>(r(),a=!0,()=>{o.off(),n.off()}))});return o};var se={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY};var Le=e=>{let t=d(!1),i=d(!1),s=d(!1),o={admin:h,member:O,owner:P,...e?.roles};return{id:"organization",$InferServerPlugin:{},getActions:r=>({$Infer:{ActiveOrganization:{},Organization:{},Invitation:{},Member:{}},organization:{checkRolePermission:a=>{let n=o[a.role];return n?(n?.authorize(a.permission)).success:!1}}}),getAtoms:r=>{let a=c(t,"/organization/list",r,{method:"GET"}),n=c([i],"/organization/get-full-organization",r,()=>({method:"GET"})),u=c([s],"/organization/get-active-member",r,{method:"GET"});return{$listOrg:t,$activeOrgSignal:i,$activeMemberSignal:s,activeOrganization:n,listOrganizations:a,activeMember:u}},pathMethods:{"/organization/get-full-organization":"GET"},atomListeners:[{matcher(r){return r==="/organization/create"||r==="/organization/delete"},signal:"$listOrg"},{matcher(r){return r.startsWith("/organization")},signal:"$activeOrgSignal"},{matcher(r){return r.includes("/organization/update-member-role")},signal:"$activeMemberSignal"}]}};var Ne=()=>({id:"username",$InferServerPlugin:{}});import{WebAuthnError as v,startAuthentication as E,startRegistration as k}from"@simplewebauthn/browser";import{atom as I}from"nanostores";var _=(e,{$listPasskeys:t})=>({signIn:{passkey:async(o,r)=>{let a=await e("/passkey/generate-authenticate-options",{method:"POST",body:{email:o?.email}});if(!a.data)return a;try{let n=await E(a.data,o?.autoFill||!1),u=await e("/passkey/verify-authentication",{body:{response:n},...o?.fetchOptions,...r,method:"POST"});if(!u.data)return u}catch{return{data:null,error:{message:"auth cancelled",status:400,statusText:"BAD_REQUEST"}}}}},passkey:{addPasskey:async(o,r)=>{let a=await e("/passkey/generate-register-options",{method:"GET"});if(!a.data)return a;try{let n=await k(a.data),u=await e("/passkey/verify-registration",{...o?.fetchOptions,...r,body:{response:n,name:o?.name},method:"POST"});if(!u.data)return u;t.set(Math.random())}catch(n){return n instanceof v?n.code==="ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED"?{data:null,error:{message:"previously registered",status:400,statusText:"BAD_REQUEST"}}:n.code==="ERROR_CEREMONY_ABORTED"?{data:null,error:{message:"registration cancelled",status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:n.message,status:400,statusText:"BAD_REQUEST"}}:{data:null,error:{message:n instanceof Error?n.message:"unknown error",status:500,statusText:"INTERNAL_SERVER_ERROR"}}}}},$Infer:{}}),qe=()=>{let e=I();return{id:"passkey",$InferServerPlugin:{},getActions:t=>_(t,{$listPasskeys:e}),getAtoms(t){return{listPasskeys:c(e,"/passkey/list-user-passkeys",t,{method:"GET"}),$listPasskeys:e}},pathMethods:{"/passkey/register":"POST","/passkey/authenticate":"POST"},atomListeners:[{matcher(t){return t==="/passkey/verify-registration"||t==="/passkey/delete-passkey"||t==="/passkey/update-passkey"},signal:"_listPasskeys"}]}};var Ve=e=>({id:"two-factor",$InferServerPlugin:{},atomListeners:[{matcher:t=>t.startsWith("/two-factor/"),signal:"$sessionSignal"}],pathMethods:{"/two-factor/disable":"POST","/two-factor/enable":"POST","/two-factor/send-otp":"POST","/two-factor/generate-backup-codes":"POST"},fetchPlugins:[{id:"two-factor",name:"two-factor",hooks:{async onSuccess(t){t.data?.twoFactorRedirect&&e?.onTwoFactorRedirect&&await e.onTwoFactorRedirect()}}}]});var Je=()=>({id:"magic-link",$InferServerPlugin:{}});var Qe=()=>({id:"phoneNumber",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/phone-number/update"||e==="/phone-number/verify"},signal:"$sessionSignal"}]});var Xe=()=>({id:"anonymous",$InferServerPlugin:{},pathMethods:{"/sign-in/anonymous":"POST"}});var et=e=>({id:"additional-fields-client",$InferServerPlugin:{}});var nt=()=>({id:"better-auth-client",$InferServerPlugin:{},pathMethods:{"/admin/list-users":"GET","/admin/stop-impersonating":"POST"}});var ot=()=>({id:"generic-oauth-client",$InferServerPlugin:{}});var it=()=>({id:"better-auth-client",$InferServerPlugin:{}});var ut=()=>({id:"multi-session",$InferServerPlugin:{},atomListeners:[{matcher(e){return e==="/multi-session/set-active"},signal:"$sessionSignal"}]});var lt=()=>({id:"email-otp",$InferServerPlugin:{}});var g=!1,ft=e=>({id:"one-tap",getActions:(t,i)=>({oneTap:async(s,o)=>{if(g){console.warn("A Google One Tap request is already in progress. Please wait.");return}g=!0;try{if(typeof window>"u"||!window.document){console.warn("Google One Tap is only available in browser environments");return}let{autoSelect:r,cancelOnTapOutside:a,context:n}=s??{},u=n??e.context??"signin";await U(),await new Promise(p=>{window.google?.accounts.id.initialize({client_id:e.clientId,callback:async T=>{await t("/one-tap/callback",{method:"POST",body:{idToken:T.credential},...s?.fetchOptions,...o}),(!s?.fetchOptions&&!o||s?.callbackURL)&&(window.location.href=s?.callbackURL??"/"),p()},auto_select:r,cancel_on_tap_outside:a,context:u}),window.google?.accounts.id.prompt()})}catch(r){throw console.error("Error during Google One Tap flow:",r),r}finally{g=!1}}}),getAtoms(t){return{}}}),U=()=>new Promise(e=>{if(window.googleScriptInitialized){e();return}let t=document.createElement("script");t.src="https://accounts.google.com/gsi/client",t.async=!0,t.defer=!0,t.onload=()=>{window.googleScriptInitialized=!0,e()},document.head.appendChild(t)});var gt=()=>S();var S=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});var Pt=()=>({id:"sso-client",$InferServerPlugin:{}});var At=()=>({id:"oidc-client",$InferServerPlugin:{}});export{S as InferServerPlugin,nt as adminClient,Xe as anonymousClient,gt as customSessionClient,lt as emailOTPClient,ot as genericOAuthClient,_ as getPasskeyActions,et as inferAdditionalFields,it as jwtClient,Je as magicLinkClient,ut as multiSessionClient,At as oidcClient,ft as oneTapClient,Le as organizationClient,qe as passkeyClient,Qe as phoneNumberClient,Pt as ssoClient,Ve as twoFactorClient,Ne as usernameClient};
package/dist/client.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var S=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var W=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},G=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of M(t))!V.call(e,r)&&r!==n&&S(e,r,{get:()=>t[r],enumerable:!(i=H(t,r))||i.enumerable});return e};var J=e=>G(S({},"__esModule",{value:!0}),e);var ie={};W(ie,{InferPlugin:()=>se,createAuthClient:()=>oe,useAuthQuery:()=>_});module.exports=J(ie);var F=require("@better-fetch/fetch");var P=Object.create(null),m=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),g=new Proxy(P,{get(e,t){return m()[t]??P[t]},has(e,t){let n=m();return t in n||t in P},set(e,t,n){let i=m(!0);return i[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=m(!0);return delete n[t],!0},ownKeys(){let e=m(!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 ce=X==="test"||z(g.TEST);var T=class extends Error{constructor(t,n){super(t),this.name="BetterAuthError",this.message=t,this.cause=n,this.stack=""}};function Q(e){try{return new URL(e).pathname!=="/"}catch{throw new T(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function E(e,t="/api/auth"){return Q(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function U(e,t){if(e)return E(e,t);let n=g.BETTER_AUTH_URL||g.NEXT_PUBLIC_BETTER_AUTH_URL||g.PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_AUTH_URL||(g.BASE_URL!=="/"?g.BASE_URL:void 0);if(n)return E(n,t);if(typeof window<"u"&&window.location)return E(window.location.origin,t)}var be=require("nanostores");var ge=require("@better-fetch/fetch"),I={id:"redirect",name:"Redirect",hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}},x={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location&&window.location)try{let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}catch{}return e}}};var B=require("nanostores");var he=require("@better-fetch/fetch"),O=require("nanostores"),_=(e,t,n,i)=>{let r=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),p=()=>{let l=typeof i=="function"?i({data:r.get().data,error:r.get().error,isPending:r.get().isPending}):i;return n(t,{...l,async onSuccess(f){r.set({data:f.data,error:null,isPending:!1,isRefetching:!1}),await l?.onSuccess?.(f)},async onError(f){r.set({error:f.error,data:null,isPending:!1,isRefetching:!1}),await l?.onError?.(f)},async onRequest(f){let a=r.get();r.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await l?.onRequest?.(f)}})};e=Array.isArray(e)?e:[e];let c=!1;for(let l of e)l.subscribe(()=>{c?p():(0,O.onMount)(r,()=>(p(),c=!0,()=>{r.off(),l.off()}))});return r};function L(e){let t=(0,B.atom)(!1);return{session:_(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var Y={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},Z=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,C={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY},K=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function ee(e){return e instanceof Date&&!isNaN(e.getTime())}function te(e){let t=K.exec(e);if(!t)return null;let[,n,i,r,p,c,l,f,a,s,u]=t,d=new Date(Date.UTC(parseInt(n,10),parseInt(i,10)-1,parseInt(r,10),parseInt(p,10),parseInt(c,10),parseInt(l,10),f?parseInt(f.padEnd(3,"0"),10):0));if(a){let o=(parseInt(s,10)*60+parseInt(u,10))*(a==="+"?-1:1);d.setUTCMinutes(d.getUTCMinutes()+o)}return ee(d)?d:null}function ne(e,t={}){let{strict:n=!1,warnings:i=!1,reviver:r,parseDates:p=!0}=t;if(typeof e!="string")return e;let c=e.trim();if(c[0]==='"'&&c.endsWith('"')&&!c.slice(1,-1).includes('"'))return c.slice(1,-1);let l=c.toLowerCase();if(l.length<=9&&l in C)return C[l];if(!Z.test(c)){if(n)throw new SyntaxError("[better-json] Invalid JSON");return e}if(Object.entries(Y).some(([a,s])=>{let u=s.test(c);return u&&i&&console.warn(`[better-json] Detected potential prototype pollution attempt using ${a} pattern`),u})&&n)throw new Error("[better-json] Potential prototype pollution attempt detected");try{return JSON.parse(c,(s,u)=>{if(s==="__proto__"||s==="constructor"&&u&&typeof u=="object"&&"prototype"in u){i&&console.warn(`[better-json] Dropping "${s}" key to prevent prototype pollution`);return}if(p&&typeof u=="string"){let d=te(u);if(d)return d}return r?r(s,u):u})}catch(a){if(n)throw a;return e}}function v(e,t={strict:!0}){return ne(e,t)}var $=e=>{let t="credentials"in Request.prototype,n=U(e?.baseURL),i=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],r=(0,F.createFetch)({baseURL:n,...t?{credentials:"include"}:{},method:"GET",jsonParser(o){return v(o,{strict:!1})},...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[I,x,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:p,session:c}=L(r),l=e?.plugins||[],f={},a={$sessionSignal:p,session:c},s={"/sign-out":"POST","/revoke-sessions":"POST","/revoke-other-sessions":"POST","/delete-user":"POST"},u=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of l)o.getAtoms&&Object.assign(a,o.getAtoms?.(r)),o.pathMethods&&Object.assign(s,o.pathMethods),o.atomListeners&&u.push(...o.atomListeners);let d={notify:o=>{a[o].set(!a[o].get())},listen:(o,R)=>{a[o].subscribe(R)},atoms:a};for(let o of l)o.getActions&&Object.assign(f,o.getActions?.(r,d));return{pluginsActions:f,pluginsAtoms:a,pluginPathMethods:s,atomListeners:u,$fetch:r,$store:d}};function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function re(e,t,n){let i=t[e],{fetchOptions:r,query:p,...c}=n||{};return i||(r?.method?r.method:c&&Object.keys(c).length>0?"POST":"GET")}function N(e,t,n,i,r){function p(c=[]){return new Proxy(function(){},{get(l,f){let a=[...c,f],s=e;for(let u of a)if(s&&typeof s=="object"&&u in s)s=s[u];else{s=void 0;break}return typeof s=="function"?s:p(a)},apply:async(l,f,a)=>{let s="/"+c.map(A=>A.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),u=a[0]||{},d=a[1]||{},{query:o,fetchOptions:R,...D}=u,h={...d,...R},w=re(s,n,u);return await t(s,{...h,body:w==="GET"?void 0:{...D,...h?.body||{}},query:o||h?.query,method:w,async onSuccess(A){await h?.onSuccess?.(A);let y=r?.find(q=>q.matcher(s));if(!y)return;let b=i[y.signal];if(!b)return;let j=b.get();setTimeout(()=>{b.set(!j)},10)}})}})}return p()}function oe(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:i,$fetch:r,atomListeners:p,$store:c}=$(e),l={};for(let[s,u]of Object.entries(i))l[`use${k(s)}`]=u;let f={...n,...l,$fetch:r,$store:c};return N(f,r,t,i,p)}var se=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});0&&(module.exports={InferPlugin,createAuthClient,useAuthQuery});
1
+ "use strict";var S=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var W=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},G=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of M(t))!V.call(e,r)&&r!==n&&S(e,r,{get:()=>t[r],enumerable:!(i=H(t,r))||i.enumerable});return e};var J=e=>G(S({},"__esModule",{value:!0}),e);var ie={};W(ie,{InferPlugin:()=>se,createAuthClient:()=>oe,useAuthQuery:()=>w});module.exports=J(ie);var F=require("@better-fetch/fetch");var P=Object.create(null),m=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),g=new Proxy(P,{get(e,t){return m()[t]??P[t]},has(e,t){let n=m();return t in n||t in P},set(e,t,n){let i=m(!0);return i[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=m(!0);return delete n[t],!0},ownKeys(){let e=m(!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 ce=X==="test"||z(g.TEST);var T=class extends Error{constructor(t,n){super(t),this.name="BetterAuthError",this.message=t,this.cause=n,this.stack=""}};function Q(e){try{return new URL(e).pathname!=="/"}catch{throw new T(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function E(e,t="/api/auth"){return Q(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function U(e,t){if(e)return E(e,t);let n=g.BETTER_AUTH_URL||g.NEXT_PUBLIC_BETTER_AUTH_URL||g.PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_AUTH_URL||(g.BASE_URL!=="/"?g.BASE_URL:void 0);if(n)return E(n,t);if(typeof window<"u"&&window.location)return E(window.location.origin,t)}var be=require("nanostores");var ge=require("@better-fetch/fetch"),I={id:"redirect",name:"Redirect",hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}},x={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location&&window.location)try{let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}catch{}return e}}};var B=require("nanostores");var he=require("@better-fetch/fetch"),O=require("nanostores"),w=(e,t,n,i)=>{let r=(0,O.atom)({data:null,error:null,isPending:!0,isRefetching:!1}),p=()=>{let l=typeof i=="function"?i({data:r.get().data,error:r.get().error,isPending:r.get().isPending}):i;return n(t,{...l,async onSuccess(f){typeof window<"u"&&r.set({data:f.data,error:null,isPending:!1,isRefetching:!1}),await l?.onSuccess?.(f)},async onError(f){r.set({error:f.error,data:null,isPending:!1,isRefetching:!1}),await l?.onError?.(f)},async onRequest(f){let a=r.get();r.set({isPending:a.data===null,data:a.data,error:null,isRefetching:!0}),await l?.onRequest?.(f)}})};e=Array.isArray(e)?e:[e];let c=!1;for(let l of e)l.subscribe(()=>{c?p():(0,O.onMount)(r,()=>(p(),c=!0,()=>{r.off(),l.off()}))});return r};function L(e){let t=(0,B.atom)(!1);return{session:w(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var Y={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},Z=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,C={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY},K=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function ee(e){return e instanceof Date&&!isNaN(e.getTime())}function te(e){let t=K.exec(e);if(!t)return null;let[,n,i,r,p,c,l,f,a,s,u]=t,d=new Date(Date.UTC(parseInt(n,10),parseInt(i,10)-1,parseInt(r,10),parseInt(p,10),parseInt(c,10),parseInt(l,10),f?parseInt(f.padEnd(3,"0"),10):0));if(a){let o=(parseInt(s,10)*60+parseInt(u,10))*(a==="+"?-1:1);d.setUTCMinutes(d.getUTCMinutes()+o)}return ee(d)?d:null}function ne(e,t={}){let{strict:n=!1,warnings:i=!1,reviver:r,parseDates:p=!0}=t;if(typeof e!="string")return e;let c=e.trim();if(c[0]==='"'&&c.endsWith('"')&&!c.slice(1,-1).includes('"'))return c.slice(1,-1);let l=c.toLowerCase();if(l.length<=9&&l in C)return C[l];if(!Z.test(c)){if(n)throw new SyntaxError("[better-json] Invalid JSON");return e}if(Object.entries(Y).some(([a,s])=>{let u=s.test(c);return u&&i&&console.warn(`[better-json] Detected potential prototype pollution attempt using ${a} pattern`),u})&&n)throw new Error("[better-json] Potential prototype pollution attempt detected");try{return JSON.parse(c,(s,u)=>{if(s==="__proto__"||s==="constructor"&&u&&typeof u=="object"&&"prototype"in u){i&&console.warn(`[better-json] Dropping "${s}" key to prevent prototype pollution`);return}if(p&&typeof u=="string"){let d=te(u);if(d)return d}return r?r(s,u):u})}catch(a){if(n)throw a;return e}}function v(e,t={strict:!0}){return ne(e,t)}var $=e=>{let t="credentials"in Request.prototype,n=U(e?.baseURL),i=e?.plugins?.flatMap(o=>o.fetchPlugins).filter(o=>o!==void 0)||[],r=(0,F.createFetch)({baseURL:n,...t?{credentials:"include"}:{},method:"GET",jsonParser(o){return v(o,{strict:!1})},...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...i]:[I,x,...e?.fetchOptions?.plugins||[],...i]}),{$sessionSignal:p,session:c}=L(r),l=e?.plugins||[],f={},a={$sessionSignal:p,session:c},s={"/sign-out":"POST","/revoke-sessions":"POST","/revoke-other-sessions":"POST","/delete-user":"POST"},u=[{signal:"$sessionSignal",matcher(o){return o==="/sign-out"||o==="/update-user"||o.startsWith("/sign-in")||o.startsWith("/sign-up")}}];for(let o of l)o.getAtoms&&Object.assign(a,o.getAtoms?.(r)),o.pathMethods&&Object.assign(s,o.pathMethods),o.atomListeners&&u.push(...o.atomListeners);let d={notify:o=>{a[o].set(!a[o].get())},listen:(o,R)=>{a[o].subscribe(R)},atoms:a};for(let o of l)o.getActions&&Object.assign(f,o.getActions?.(r,d));return{pluginsActions:f,pluginsAtoms:a,pluginPathMethods:s,atomListeners:u,$fetch:r,$store:d}};function k(e){return e.charAt(0).toUpperCase()+e.slice(1)}function re(e,t,n){let i=t[e],{fetchOptions:r,query:p,...c}=n||{};return i||(r?.method?r.method:c&&Object.keys(c).length>0?"POST":"GET")}function N(e,t,n,i,r){function p(c=[]){return new Proxy(function(){},{get(l,f){let a=[...c,f],s=e;for(let u of a)if(s&&typeof s=="object"&&u in s)s=s[u];else{s=void 0;break}return typeof s=="function"?s:p(a)},apply:async(l,f,a)=>{let s="/"+c.map(A=>A.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),u=a[0]||{},d=a[1]||{},{query:o,fetchOptions:R,...D}=u,h={...d,...R},_=re(s,n,u);return await t(s,{...h,body:_==="GET"?void 0:{...D,...h?.body||{}},query:o||h?.query,method:_,async onSuccess(A){await h?.onSuccess?.(A);let y=r?.find(q=>q.matcher(s));if(!y)return;let b=i[y.signal];if(!b)return;let j=b.get();setTimeout(()=>{b.set(!j)},10)}})}})}return p()}function oe(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:i,$fetch:r,atomListeners:p,$store:c}=$(e),l={};for(let[s,u]of Object.entries(i))l[`use${k(s)}`]=u;let f={...n,...l,$fetch:r,$store:c};return N(f,r,t,i,p)}var se=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});0&&(module.exports={InferPlugin,createAuthClient,useAuthQuery});
package/dist/client.js CHANGED
@@ -1 +1 @@
1
- import{createFetch as Q}from"@better-fetch/fetch";var P=Object.create(null),m=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),g=new Proxy(P,{get(e,t){return m()[t]??P[t]},has(e,t){let n=m();return t in n||t in P},set(e,t,n){let u=m(!0);return u[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=m(!0);return delete n[t],!0},ownKeys(){let e=m(!0);return Object.keys(e)}});function N(e){return e?e!=="false":!1}var D=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var Z=D==="test"||N(g.TEST);var T=class extends Error{constructor(t,n){super(t),this.name="BetterAuthError",this.message=t,this.cause=n,this.stack=""}};function j(e){try{return new URL(e).pathname!=="/"}catch{throw new T(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function b(e,t="/api/auth"){return j(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function E(e,t){if(e)return b(e,t);let n=g.BETTER_AUTH_URL||g.NEXT_PUBLIC_BETTER_AUTH_URL||g.PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_AUTH_URL||(g.BASE_URL!=="/"?g.BASE_URL:void 0);if(n)return b(n,t);if(typeof window<"u"&&window.location)return b(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var _={id:"redirect",name:"Redirect",hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}},w={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location&&window.location)try{let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}catch{}return e}}};import{atom as M}from"nanostores";import"@better-fetch/fetch";import{atom as q,onMount as H}from"nanostores";var U=(e,t,n,u)=>{let o=q({data:null,error:null,isPending:!0,isRefetching:!1}),p=()=>{let l=typeof u=="function"?u({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):u;return n(t,{...l,async onSuccess(f){o.set({data:f.data,error:null,isPending:!1,isRefetching:!1}),await l?.onSuccess?.(f)},async onError(f){o.set({error:f.error,data:null,isPending:!1,isRefetching:!1}),await l?.onError?.(f)},async onRequest(f){let i=o.get();o.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await l?.onRequest?.(f)}})};e=Array.isArray(e)?e:[e];let a=!1;for(let l of e)l.subscribe(()=>{a?p():H(o,()=>(p(),a=!0,()=>{o.off(),l.off()}))});return o};function I(e){let t=M(!1);return{session:U(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var V={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},W=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,x={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY},G=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function J(e){return e instanceof Date&&!isNaN(e.getTime())}function z(e){let t=G.exec(e);if(!t)return null;let[,n,u,o,p,a,l,f,i,s,c]=t,d=new Date(Date.UTC(parseInt(n,10),parseInt(u,10)-1,parseInt(o,10),parseInt(p,10),parseInt(a,10),parseInt(l,10),f?parseInt(f.padEnd(3,"0"),10):0));if(i){let r=(parseInt(s,10)*60+parseInt(c,10))*(i==="+"?-1:1);d.setUTCMinutes(d.getUTCMinutes()+r)}return J(d)?d:null}function X(e,t={}){let{strict:n=!1,warnings:u=!1,reviver:o,parseDates:p=!0}=t;if(typeof e!="string")return e;let a=e.trim();if(a[0]==='"'&&a.endsWith('"')&&!a.slice(1,-1).includes('"'))return a.slice(1,-1);let l=a.toLowerCase();if(l.length<=9&&l in x)return x[l];if(!W.test(a)){if(n)throw new SyntaxError("[better-json] Invalid JSON");return e}if(Object.entries(V).some(([i,s])=>{let c=s.test(a);return c&&u&&console.warn(`[better-json] Detected potential prototype pollution attempt using ${i} pattern`),c})&&n)throw new Error("[better-json] Potential prototype pollution attempt detected");try{return JSON.parse(a,(s,c)=>{if(s==="__proto__"||s==="constructor"&&c&&typeof c=="object"&&"prototype"in c){u&&console.warn(`[better-json] Dropping "${s}" key to prevent prototype pollution`);return}if(p&&typeof c=="string"){let d=z(c);if(d)return d}return o?o(s,c):c})}catch(i){if(n)throw i;return e}}function B(e,t={strict:!0}){return X(e,t)}var L=e=>{let t="credentials"in Request.prototype,n=E(e?.baseURL),u=e?.plugins?.flatMap(r=>r.fetchPlugins).filter(r=>r!==void 0)||[],o=Q({baseURL:n,...t?{credentials:"include"}:{},method:"GET",jsonParser(r){return B(r,{strict:!1})},...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...u]:[_,w,...e?.fetchOptions?.plugins||[],...u]}),{$sessionSignal:p,session:a}=I(o),l=e?.plugins||[],f={},i={$sessionSignal:p,session:a},s={"/sign-out":"POST","/revoke-sessions":"POST","/revoke-other-sessions":"POST","/delete-user":"POST"},c=[{signal:"$sessionSignal",matcher(r){return r==="/sign-out"||r==="/update-user"||r.startsWith("/sign-in")||r.startsWith("/sign-up")}}];for(let r of l)r.getAtoms&&Object.assign(i,r.getAtoms?.(o)),r.pathMethods&&Object.assign(s,r.pathMethods),r.atomListeners&&c.push(...r.atomListeners);let d={notify:r=>{i[r].set(!i[r].get())},listen:(r,O)=>{i[r].subscribe(O)},atoms:i};for(let r of l)r.getActions&&Object.assign(f,r.getActions?.(o,d));return{pluginsActions:f,pluginsAtoms:i,pluginPathMethods:s,atomListeners:c,$fetch:o,$store:d}};function C(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Y(e,t,n){let u=t[e],{fetchOptions:o,query:p,...a}=n||{};return u||(o?.method?o.method:a&&Object.keys(a).length>0?"POST":"GET")}function v(e,t,n,u,o){function p(a=[]){return new Proxy(function(){},{get(l,f){let i=[...a,f],s=e;for(let c of i)if(s&&typeof s=="object"&&c in s)s=s[c];else{s=void 0;break}return typeof s=="function"?s:p(i)},apply:async(l,f,i)=>{let s="/"+a.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),c=i[0]||{},d=i[1]||{},{query:r,fetchOptions:O,...F}=c,h={...d,...O},S=Y(s,n,c);return await t(s,{...h,body:S==="GET"?void 0:{...F,...h?.body||{}},query:r||h?.query,method:S,async onSuccess(R){await h?.onSuccess?.(R);let y=o?.find(k=>k.matcher(s));if(!y)return;let A=u[y.signal];if(!A)return;let $=A.get();setTimeout(()=>{A.set(!$)},10)}})}})}return p()}function _e(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:u,$fetch:o,atomListeners:p,$store:a}=L(e),l={};for(let[s,c]of Object.entries(u))l[`use${C(s)}`]=c;let f={...n,...l,$fetch:o,$store:a};return v(f,o,t,u,p)}var Ue=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});export{Ue as InferPlugin,_e as createAuthClient,U as useAuthQuery};
1
+ import{createFetch as Q}from"@better-fetch/fetch";var P=Object.create(null),m=e=>globalThis.process?.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?P:globalThis),g=new Proxy(P,{get(e,t){return m()[t]??P[t]},has(e,t){let n=m();return t in n||t in P},set(e,t,n){let u=m(!0);return u[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=m(!0);return delete n[t],!0},ownKeys(){let e=m(!0);return Object.keys(e)}});function N(e){return e?e!=="false":!1}var D=typeof process<"u"&&process.env&&process.env.NODE_ENV||"";var Z=D==="test"||N(g.TEST);var T=class extends Error{constructor(t,n){super(t),this.name="BetterAuthError",this.message=t,this.cause=n,this.stack=""}};function j(e){try{return new URL(e).pathname!=="/"}catch{throw new T(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function b(e,t="/api/auth"){return j(e)?e:(t=t.startsWith("/")?t:`/${t}`,`${e}${t}`)}function E(e,t){if(e)return b(e,t);let n=g.BETTER_AUTH_URL||g.NEXT_PUBLIC_BETTER_AUTH_URL||g.PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_BETTER_AUTH_URL||g.NUXT_PUBLIC_AUTH_URL||(g.BASE_URL!=="/"?g.BASE_URL:void 0);if(n)return b(n,t);if(typeof window<"u"&&window.location)return b(window.location.origin,t)}import"nanostores";import"@better-fetch/fetch";var w={id:"redirect",name:"Redirect",hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&typeof window<"u"&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}},_={id:"add-current-url",name:"Add current URL",hooks:{onRequest(e){if(typeof window<"u"&&window.location&&window.location)try{let t=new URL(e.url);t.searchParams.set("currentURL",window.location.href),e.url=t}catch{}return e}}};import{atom as M}from"nanostores";import"@better-fetch/fetch";import{atom as q,onMount as H}from"nanostores";var U=(e,t,n,u)=>{let o=q({data:null,error:null,isPending:!0,isRefetching:!1}),p=()=>{let l=typeof u=="function"?u({data:o.get().data,error:o.get().error,isPending:o.get().isPending}):u;return n(t,{...l,async onSuccess(f){typeof window<"u"&&o.set({data:f.data,error:null,isPending:!1,isRefetching:!1}),await l?.onSuccess?.(f)},async onError(f){o.set({error:f.error,data:null,isPending:!1,isRefetching:!1}),await l?.onError?.(f)},async onRequest(f){let i=o.get();o.set({isPending:i.data===null,data:i.data,error:null,isRefetching:!0}),await l?.onRequest?.(f)}})};e=Array.isArray(e)?e:[e];let a=!1;for(let l of e)l.subscribe(()=>{a?p():H(o,()=>(p(),a=!0,()=>{o.off(),l.off()}))});return o};function I(e){let t=M(!1);return{session:U(t,"/get-session",e,{method:"GET"}),$sessionSignal:t}}var V={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},W=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,x={true:!0,false:!1,null:null,undefined:void 0,nan:Number.NaN,infinity:Number.POSITIVE_INFINITY,"-infinity":Number.NEGATIVE_INFINITY},G=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function J(e){return e instanceof Date&&!isNaN(e.getTime())}function z(e){let t=G.exec(e);if(!t)return null;let[,n,u,o,p,a,l,f,i,s,c]=t,d=new Date(Date.UTC(parseInt(n,10),parseInt(u,10)-1,parseInt(o,10),parseInt(p,10),parseInt(a,10),parseInt(l,10),f?parseInt(f.padEnd(3,"0"),10):0));if(i){let r=(parseInt(s,10)*60+parseInt(c,10))*(i==="+"?-1:1);d.setUTCMinutes(d.getUTCMinutes()+r)}return J(d)?d:null}function X(e,t={}){let{strict:n=!1,warnings:u=!1,reviver:o,parseDates:p=!0}=t;if(typeof e!="string")return e;let a=e.trim();if(a[0]==='"'&&a.endsWith('"')&&!a.slice(1,-1).includes('"'))return a.slice(1,-1);let l=a.toLowerCase();if(l.length<=9&&l in x)return x[l];if(!W.test(a)){if(n)throw new SyntaxError("[better-json] Invalid JSON");return e}if(Object.entries(V).some(([i,s])=>{let c=s.test(a);return c&&u&&console.warn(`[better-json] Detected potential prototype pollution attempt using ${i} pattern`),c})&&n)throw new Error("[better-json] Potential prototype pollution attempt detected");try{return JSON.parse(a,(s,c)=>{if(s==="__proto__"||s==="constructor"&&c&&typeof c=="object"&&"prototype"in c){u&&console.warn(`[better-json] Dropping "${s}" key to prevent prototype pollution`);return}if(p&&typeof c=="string"){let d=z(c);if(d)return d}return o?o(s,c):c})}catch(i){if(n)throw i;return e}}function B(e,t={strict:!0}){return X(e,t)}var L=e=>{let t="credentials"in Request.prototype,n=E(e?.baseURL),u=e?.plugins?.flatMap(r=>r.fetchPlugins).filter(r=>r!==void 0)||[],o=Q({baseURL:n,...t?{credentials:"include"}:{},method:"GET",jsonParser(r){return B(r,{strict:!1})},...e?.fetchOptions,plugins:e?.disableDefaultFetchPlugins?[...e?.fetchOptions?.plugins||[],...u]:[w,_,...e?.fetchOptions?.plugins||[],...u]}),{$sessionSignal:p,session:a}=I(o),l=e?.plugins||[],f={},i={$sessionSignal:p,session:a},s={"/sign-out":"POST","/revoke-sessions":"POST","/revoke-other-sessions":"POST","/delete-user":"POST"},c=[{signal:"$sessionSignal",matcher(r){return r==="/sign-out"||r==="/update-user"||r.startsWith("/sign-in")||r.startsWith("/sign-up")}}];for(let r of l)r.getAtoms&&Object.assign(i,r.getAtoms?.(o)),r.pathMethods&&Object.assign(s,r.pathMethods),r.atomListeners&&c.push(...r.atomListeners);let d={notify:r=>{i[r].set(!i[r].get())},listen:(r,O)=>{i[r].subscribe(O)},atoms:i};for(let r of l)r.getActions&&Object.assign(f,r.getActions?.(o,d));return{pluginsActions:f,pluginsAtoms:i,pluginPathMethods:s,atomListeners:c,$fetch:o,$store:d}};function C(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Y(e,t,n){let u=t[e],{fetchOptions:o,query:p,...a}=n||{};return u||(o?.method?o.method:a&&Object.keys(a).length>0?"POST":"GET")}function v(e,t,n,u,o){function p(a=[]){return new Proxy(function(){},{get(l,f){let i=[...a,f],s=e;for(let c of i)if(s&&typeof s=="object"&&c in s)s=s[c];else{s=void 0;break}return typeof s=="function"?s:p(i)},apply:async(l,f,i)=>{let s="/"+a.map(R=>R.replace(/[A-Z]/g,y=>`-${y.toLowerCase()}`)).join("/"),c=i[0]||{},d=i[1]||{},{query:r,fetchOptions:O,...F}=c,h={...d,...O},S=Y(s,n,c);return await t(s,{...h,body:S==="GET"?void 0:{...F,...h?.body||{}},query:r||h?.query,method:S,async onSuccess(R){await h?.onSuccess?.(R);let y=o?.find(k=>k.matcher(s));if(!y)return;let A=u[y.signal];if(!A)return;let $=A.get();setTimeout(()=>{A.set(!$)},10)}})}})}return p()}function we(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:u,$fetch:o,atomListeners:p,$store:a}=L(e),l={};for(let[s,c]of Object.entries(u))l[`use${C(s)}`]=c;let f={...n,...l,$fetch:o,$store:a};return v(f,o,t,u,p)}var Ue=()=>({id:"infer-server-plugin",$InferServerPlugin:{}});export{Ue as InferPlugin,we as createAuthClient,U as useAuthQuery};