better-auth 0.0.9-beta.21 → 0.0.9-beta.23

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.
@@ -113,7 +113,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
113
113
  isPending: false
114
114
  });
115
115
  const fn = () => {
116
- const opts = typeof options === "function" ? options() : options;
116
+ const opts = typeof options === "function" ? options({
117
+ data: value.get().data,
118
+ error: value.get().error,
119
+ isPending: value.get().isPending
120
+ }) : options;
117
121
  return $fetch(path, {
118
122
  ...opts,
119
123
  onSuccess: async (context) => {
@@ -148,7 +152,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
148
152
  let firstRun = true;
149
153
  for (const initAtom of initializedAtom) {
150
154
  initAtom.subscribe((value2) => {
151
- if (value2 !== void 0 && !firstRun) {
155
+ if (!firstRun) {
152
156
  fn();
153
157
  }
154
158
  });
@@ -159,10 +163,10 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
159
163
 
160
164
  // src/plugins/organization/client.ts
161
165
  var organizationClient = (options) => {
162
- const activeOrgId = atom(null);
166
+ const activeOrgId = atom(void 0);
163
167
  const _listOrg = atom(false);
164
168
  const _activeOrgSignal = atom(false);
165
- const _activeISignal = atom();
169
+ const _activeISignal = atom(null);
166
170
  return {
167
171
  id: "organization",
168
172
  $InferServerPlugin: {},
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/client/query.ts","../../src/plugins/organization/client.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"names":["value","atom"],"mappings":"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","file":"plugins.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import { atom } from \"nanostores\";\nimport type {\n\tInvitation,\n\tMember,\n\tOrganization,\n} from \"../../plugins/organization/schema\";\nimport type { Prettify } from \"../../types/helper\";\nimport { defaultStatements, type AccessControl, type Role } from \"./access\";\nimport type { AuthClientPlugin } from \"../../client/types\";\nimport type { organization } from \"./organization\";\nimport type { BetterFetchOption } from \"@better-fetch/fetch\";\nimport { useAuthQuery } from \"../../client\";\n\ninterface OrganizationClientOptions {\n\tac: AccessControl;\n\troles?: {\n\t\t[key in \"admin\" | \"member\" | \"owner\"]?: Role<any>;\n\t};\n}\n\nexport const organizationClient = <O extends OrganizationClientOptions>(\n\toptions?: O,\n) => {\n\tconst activeOrgId = atom<string | null>(null);\n\tconst _listOrg = atom<boolean>(false);\n\tconst _activeOrgSignal = atom<boolean>(false);\n\tconst _activeISignal = atom<string | null | undefined>();\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements = O[\"ac\"] extends AccessControl<infer S>\n\t\t? S extends Record<string, Array<any>>\n\t\t\t? S & DefaultStatements\n\t\t\t: DefaultStatements\n\t\t: DefaultStatements;\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof organization>,\n\t\tgetActions: ($fetch) => ({\n\t\t\torganization: {\n\t\t\t\t$Infer: {\n\t\t\t\t\tActiveOrganization: {} as Prettify<\n\t\t\t\t\t\tOrganization & {\n\t\t\t\t\t\t\tmembers: Prettify<\n\t\t\t\t\t\t\t\tMember & {\n\t\t\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>[];\n\t\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t\t}\n\t\t\t\t\t>,\n\t\t\t\t\tOrganization: {} as Organization,\n\t\t\t\t\tInvitation: {} as Invitation,\n\t\t\t\t\tMember: {} as Member,\n\t\t\t\t},\n\t\t\t\tsetActive(orgId: string | null) {\n\t\t\t\t\tactiveOrgId.set(orgId);\n\t\t\t\t},\n\t\t\t\tsetInvitationId: (id: string | null) => {\n\t\t\t\t\t_activeISignal.set(id);\n\t\t\t\t},\n\t\t\t\thasPermission: async (data: {\n\t\t\t\t\tpermission: Partial<{\n\t\t\t\t\t\t//@ts-expect-error fix this later\n\t\t\t\t\t\t[key in keyof Statements]: Statements[key][number][];\n\t\t\t\t\t}>;\n\t\t\t\t\toptions?: BetterFetchOption;\n\t\t\t\t}) => {\n\t\t\t\t\treturn await $fetch<boolean>(\"/organization/has-permission\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tpermission: data.permission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...data.options,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst invitation = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInvitation & {\n\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(_activeISignal, \"/organization/get-active-invitation\", $fetch, () => ({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: {\n\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tconst listOrganizations = useAuthQuery<Organization[]>(\n\t\t\t\t_listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tOrganization & {\n\t\t\t\t\t\tmembers: (Member & {\n\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})[];\n\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[activeOrgId, _activeOrgSignal],\n\t\t\t\t\"/organization/activate\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t_listOrg,\n\t\t\t\t_activeOrgSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tinvitation,\n\t\t\t};\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" || path === \"/organization/delete\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"_listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"_activeOrgSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n","import type { username } from \".\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t} satisfies AuthClientPlugin;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport {\n\tWebAuthnError,\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"@simplewebauthn/types\";\nimport type { Session } from \"inspector\";\nimport type { User } from \"../../adapters/schema\";\nimport type { passkey as passkeyPl, Passkey } from \"../../plugins\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const getPasskeyActions = ($fetch: BetterFetch) => {\n\tconst signInPasskey = async (opts?: {\n\t\tautoFill?: boolean;\n\t\temail?: string;\n\t\tcallbackURL?: string;\n\t}) => {\n\t\tconst response = await $fetch<PublicKeyCredentialRequestOptionsJSON>(\n\t\t\t\"/passkey/generate-authenticate-options\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: {\n\t\t\t\t\temail: opts?.email,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tif (!response.data) {\n\t\t\treturn response;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startAuthentication(\n\t\t\t\tresponse.data,\n\t\t\t\topts?.autoFill || false,\n\t\t\t);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tsession: Session;\n\t\t\t\tuser: User;\n\t\t\t}>(\"/passkey/verify-authentication\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"authenticate\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t};\n\n\tconst registerPasskey = async () => {\n\t\tconst options = await $fetch<PublicKeyCredentialCreationOptionsJSON>(\n\t\t\t\"/passkey/generate-register-options\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t},\n\t\t);\n\t\tif (!options.data) {\n\t\t\treturn options;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startRegistration(options.data);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tpasskey: Passkey;\n\t\t\t}>(\"/passkey/verify-registration\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"register\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof WebAuthnError) {\n\t\t\t\tif (e.code === \"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: \"previously registered\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tstatusText: \"BAD_REQUEST\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tsignIn: {\n\t\t\tpasskey: signInPasskey,\n\t\t},\n\t\tpasskey: {\n\t\t\tregister: registerPasskey,\n\t\t},\n\t};\n};\n\nexport const passkeyClient = () => {\n\treturn {\n\t\tid: \"passkey\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof passkeyPl>,\n\t\tgetActions: ($fetch) => getPasskeyActions($fetch),\n\t\tpathMethods: {\n\t\t\t\"/passkey/register\": \"POST\",\n\t\t\t\"/passkey/authenticate\": \"POST\",\n\t\t},\n\t} satisfies AuthClientPlugin;\n};\n","import type { AuthClientPlugin } from \"../../client/types\";\nimport type { twoFactor as twoFa } from \"../../plugins/two-factor\";\n\nexport const twoFactorClient = (\n\toptions: {\n\t\ttwoFactorPage: string;\n\t\t/**\n\t\t * Redirect to the two factor page. If twoFactorPage\n\t\t * is not set this will redirect to the root path.\n\t\t * @default true\n\t\t */\n\t\tredirect?: boolean;\n\t} = {\n\t\tredirect: true,\n\t\ttwoFactorPage: \"/\",\n\t},\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/two-factor/enable\" ||\n\t\t\t\t\tpath === \"/two-factor/send-otp\" ||\n\t\t\t\t\tpath === \"/two-factor/disable\",\n\t\t\t\tsignal: \"_sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"enable/totp\": \"POST\",\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options.redirect || options.twoFactorPage) {\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\twindow.location.href = options.twoFactorPage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n"]}
1
+ {"version":3,"sources":["../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/client/query.ts","../../src/plugins/organization/client.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"names":["value","atom"],"mappings":"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","file":"plugins.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import { atom } from \"nanostores\";\nimport type {\n\tInvitation,\n\tMember,\n\tOrganization,\n} from \"../../plugins/organization/schema\";\nimport type { Prettify } from \"../../types/helper\";\nimport { defaultStatements, type AccessControl, type Role } from \"./access\";\nimport type { AuthClientPlugin } from \"../../client/types\";\nimport type { organization } from \"./organization\";\nimport type { BetterFetchOption } from \"@better-fetch/fetch\";\nimport { useAuthQuery } from \"../../client\";\n\ninterface OrganizationClientOptions {\n\tac: AccessControl;\n\troles?: {\n\t\t[key in \"admin\" | \"member\" | \"owner\"]?: Role<any>;\n\t};\n}\n\nexport const organizationClient = <O extends OrganizationClientOptions>(\n\toptions?: O,\n) => {\n\tconst activeOrgId = atom<string | null | undefined>(undefined);\n\tconst _listOrg = atom<boolean>(false);\n\tconst _activeOrgSignal = atom<boolean>(false);\n\tconst _activeISignal = atom<string | null>(null);\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements = O[\"ac\"] extends AccessControl<infer S>\n\t\t? S extends Record<string, Array<any>>\n\t\t\t? S & DefaultStatements\n\t\t\t: DefaultStatements\n\t\t: DefaultStatements;\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof organization>,\n\t\tgetActions: ($fetch) => ({\n\t\t\torganization: {\n\t\t\t\t$Infer: {\n\t\t\t\t\tActiveOrganization: {} as Prettify<\n\t\t\t\t\t\tOrganization & {\n\t\t\t\t\t\t\tmembers: Prettify<\n\t\t\t\t\t\t\t\tMember & {\n\t\t\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>[];\n\t\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t\t}\n\t\t\t\t\t>,\n\t\t\t\t\tOrganization: {} as Organization,\n\t\t\t\t\tInvitation: {} as Invitation,\n\t\t\t\t\tMember: {} as Member,\n\t\t\t\t},\n\t\t\t\tsetActive(orgId: string | null) {\n\t\t\t\t\tactiveOrgId.set(orgId);\n\t\t\t\t},\n\t\t\t\tsetInvitationId: (id: string | null) => {\n\t\t\t\t\t_activeISignal.set(id);\n\t\t\t\t},\n\t\t\t\thasPermission: async (data: {\n\t\t\t\t\tpermission: Partial<{\n\t\t\t\t\t\t//@ts-expect-error fix this later\n\t\t\t\t\t\t[key in keyof Statements]: Statements[key][number][];\n\t\t\t\t\t}>;\n\t\t\t\t\toptions?: BetterFetchOption;\n\t\t\t\t}) => {\n\t\t\t\t\treturn await $fetch<boolean>(\"/organization/has-permission\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tpermission: data.permission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...data.options,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst invitation = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInvitation & {\n\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(_activeISignal, \"/organization/get-active-invitation\", $fetch, () => ({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: {\n\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tconst listOrganizations = useAuthQuery<Organization[]>(\n\t\t\t\t_listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tOrganization & {\n\t\t\t\t\t\tmembers: (Member & {\n\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})[];\n\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[activeOrgId, _activeOrgSignal],\n\t\t\t\t\"/organization/activate\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t_listOrg,\n\t\t\t\t_activeOrgSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tinvitation,\n\t\t\t};\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" || path === \"/organization/delete\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"_listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"_activeOrgSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n","import type { username } from \".\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t} satisfies AuthClientPlugin;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport {\n\tWebAuthnError,\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"@simplewebauthn/types\";\nimport type { Session } from \"inspector\";\nimport type { User } from \"../../adapters/schema\";\nimport type { passkey as passkeyPl, Passkey } from \"../../plugins\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const getPasskeyActions = ($fetch: BetterFetch) => {\n\tconst signInPasskey = async (opts?: {\n\t\tautoFill?: boolean;\n\t\temail?: string;\n\t\tcallbackURL?: string;\n\t}) => {\n\t\tconst response = await $fetch<PublicKeyCredentialRequestOptionsJSON>(\n\t\t\t\"/passkey/generate-authenticate-options\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: {\n\t\t\t\t\temail: opts?.email,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tif (!response.data) {\n\t\t\treturn response;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startAuthentication(\n\t\t\t\tresponse.data,\n\t\t\t\topts?.autoFill || false,\n\t\t\t);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tsession: Session;\n\t\t\t\tuser: User;\n\t\t\t}>(\"/passkey/verify-authentication\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"authenticate\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t};\n\n\tconst registerPasskey = async () => {\n\t\tconst options = await $fetch<PublicKeyCredentialCreationOptionsJSON>(\n\t\t\t\"/passkey/generate-register-options\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t},\n\t\t);\n\t\tif (!options.data) {\n\t\t\treturn options;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startRegistration(options.data);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tpasskey: Passkey;\n\t\t\t}>(\"/passkey/verify-registration\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"register\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof WebAuthnError) {\n\t\t\t\tif (e.code === \"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: \"previously registered\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tstatusText: \"BAD_REQUEST\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tsignIn: {\n\t\t\tpasskey: signInPasskey,\n\t\t},\n\t\tpasskey: {\n\t\t\tregister: registerPasskey,\n\t\t},\n\t};\n};\n\nexport const passkeyClient = () => {\n\treturn {\n\t\tid: \"passkey\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof passkeyPl>,\n\t\tgetActions: ($fetch) => getPasskeyActions($fetch),\n\t\tpathMethods: {\n\t\t\t\"/passkey/register\": \"POST\",\n\t\t\t\"/passkey/authenticate\": \"POST\",\n\t\t},\n\t} satisfies AuthClientPlugin;\n};\n","import type { AuthClientPlugin } from \"../../client/types\";\nimport type { twoFactor as twoFa } from \"../../plugins/two-factor\";\n\nexport const twoFactorClient = (\n\toptions: {\n\t\ttwoFactorPage: string;\n\t\t/**\n\t\t * Redirect to the two factor page. If twoFactorPage\n\t\t * is not set this will redirect to the root path.\n\t\t * @default true\n\t\t */\n\t\tredirect?: boolean;\n\t} = {\n\t\tredirect: true,\n\t\ttwoFactorPage: \"/\",\n\t},\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/two-factor/enable\" ||\n\t\t\t\t\tpath === \"/two-factor/send-otp\" ||\n\t\t\t\t\tpath === \"/two-factor/disable\",\n\t\t\t\tsignal: \"_sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"enable/totp\": \"POST\",\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options.redirect || options.twoFactorPage) {\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\twindow.location.href = options.twoFactorPage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n"]}
package/dist/client.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as zod from 'zod';
2
2
  import * as nanostores from 'nanostores';
3
3
  import { PreinitializedWritableAtom } from 'nanostores';
4
4
  import * as _better_fetch_fetch from '@better-fetch/fetch';
5
- import { BetterFetch, BetterFetchOption, BetterFetchError } from '@better-fetch/fetch';
5
+ import { BetterFetch, BetterFetchError, BetterFetchOption } from '@better-fetch/fetch';
6
6
  import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
7
7
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
8
8
  import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, c as InferSessionFromClient, d as InferUserFromClient, b as IsSignal } from './types-B34P_dp5.js';
@@ -77,6 +77,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
77
77
  isPending: boolean;
78
78
  }>;
79
79
  $fetch: _better_fetch_fetch.BetterFetch<{
80
+ credentials: "include";
80
81
  plugins: (_better_fetch_fetch.BetterFetchPlugin | {
81
82
  id: string;
82
83
  name: string;
@@ -226,7 +227,6 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
226
227
  }>;
227
228
  })[];
228
229
  cache?: RequestCache;
229
- credentials?: RequestCredentials;
230
230
  headers?: (HeadersInit & (HeadersInit | {
231
231
  accept: "application/json" | "text/plain" | "application/octet-stream";
232
232
  "content-type": "application/json" | "text/plain" | "application/x-www-form-urlencoded" | "multipart/form-data" | "application/octet-stream";
@@ -294,7 +294,11 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
294
294
  };
295
295
  };
296
296
 
297
- declare const useAuthQuery: <T>(initializedAtom: PreinitializedWritableAtom<any> | PreinitializedWritableAtom<any>[], path: string, $fetch: BetterFetch, options?: (() => BetterFetchOption) | BetterFetchOption) => PreinitializedWritableAtom<{
297
+ declare const useAuthQuery: <T>(initializedAtom: PreinitializedWritableAtom<any> | PreinitializedWritableAtom<any>[], path: string, $fetch: BetterFetch, options?: ((value: {
298
+ data: null | T;
299
+ error: null | BetterFetchError;
300
+ isPending: boolean;
301
+ }) => BetterFetchOption) | BetterFetchOption) => PreinitializedWritableAtom<{
298
302
  data: null | T;
299
303
  error: null | BetterFetchError;
300
304
  isPending: boolean;
package/dist/client.js CHANGED
@@ -112,6 +112,7 @@ var getClientConfig = (options) => {
112
112
  const $fetch = createFetch({
113
113
  baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
114
114
  ...options?.fetchOptions,
115
+ credentials: "include",
115
116
  plugins: [
116
117
  csrfPlugin,
117
118
  redirectPlugin,
@@ -237,7 +238,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
237
238
  isPending: false
238
239
  });
239
240
  const fn = () => {
240
- const opts = typeof options === "function" ? options() : options;
241
+ const opts = typeof options === "function" ? options({
242
+ data: value.get().data,
243
+ error: value.get().error,
244
+ isPending: value.get().isPending
245
+ }) : options;
241
246
  return $fetch(path, {
242
247
  ...opts,
243
248
  onSuccess: async (context) => {
@@ -272,7 +277,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
272
277
  let firstRun = true;
273
278
  for (const initAtom of initializedAtom) {
274
279
  initAtom.subscribe((value2) => {
275
- if (value2 !== void 0 && !firstRun) {
280
+ if (!firstRun) {
276
281
  fn();
277
282
  }
278
283
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vanilla.ts"],"names":["value","atom"],"mappings":"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","file":"client.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tInferSessionFromClient,\n\tInferUserFromClient,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\n\tconst { $session, _sessionSignal } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$fetch: typeof $fetch;\n\t\t\t$infer: {\n\t\t\t\tsession: InferSessionFromClient<Option>;\n\t\t\t\tuser: InferUserFromClient<Option>;\n\t\t\t};\n\t\t};\n}\n"]}
1
+ {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vanilla.ts"],"names":["value","atom"],"mappings":"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","file":"client.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tInferSessionFromClient,\n\tInferUserFromClient,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\n\tconst { $session, _sessionSignal } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$fetch: typeof $fetch;\n\t\t\t$infer: {\n\t\t\t\tsession: InferSessionFromClient<Option>;\n\t\t\t\tuser: InferUserFromClient<Option>;\n\t\t\t};\n\t\t};\n}\n"]}
package/dist/react.js CHANGED
@@ -114,6 +114,7 @@ var getClientConfig = (options) => {
114
114
  const $fetch = createFetch({
115
115
  baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
116
116
  ...options?.fetchOptions,
117
+ credentials: "include",
117
118
  plugins: [
118
119
  csrfPlugin,
119
120
  redirectPlugin,
@@ -239,7 +240,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
239
240
  isPending: false
240
241
  });
241
242
  const fn = () => {
242
- const opts = typeof options === "function" ? options() : options;
243
+ const opts = typeof options === "function" ? options({
244
+ data: value.get().data,
245
+ error: value.get().error,
246
+ isPending: value.get().isPending
247
+ }) : options;
243
248
  return $fetch(path, {
244
249
  ...opts,
245
250
  onSuccess: async (context) => {
@@ -274,7 +279,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
274
279
  let firstRun = true;
275
280
  for (const initAtom of initializedAtom) {
276
281
  initAtom.subscribe((value2) => {
277
- if (value2 !== void 0 && !firstRun) {
282
+ if (!firstRun) {
278
283
  fn();
279
284
  }
280
285
  });
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/react.ts"],"names":["value","atom","useAuthQuery"],"mappings":"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","file":"react.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/react\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport { useEffect, useState } from \"react\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => ReturnType<Atoms[key][\"get\"]>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\ttype InitialValue = ReturnType<(typeof $session)[\"get\"]>[\"data\"] | null;\n\tfunction useSession(initialValue?: InitialValue) {\n\t\tconst storeValue = useStore($session);\n\t\treturn storeValue;\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n\nexport const useAuthQuery = useStore;\n"]}
1
+ {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/react.ts"],"names":["value","atom","useAuthQuery"],"mappings":"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","file":"react.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/react\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport { useEffect, useState } from \"react\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => ReturnType<Atoms[key][\"get\"]>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\ttype InitialValue = ReturnType<(typeof $session)[\"get\"]>[\"data\"] | null;\n\tfunction useSession(initialValue?: InitialValue) {\n\t\tconst storeValue = useStore($session);\n\t\treturn storeValue;\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n\nexport const useAuthQuery = useStore;\n"]}
package/dist/solid.js CHANGED
@@ -113,6 +113,7 @@ var getClientConfig = (options) => {
113
113
  const $fetch = createFetch({
114
114
  baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
115
115
  ...options?.fetchOptions,
116
+ credentials: "include",
116
117
  plugins: [
117
118
  csrfPlugin,
118
119
  redirectPlugin,
@@ -238,7 +239,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
238
239
  isPending: false
239
240
  });
240
241
  const fn = () => {
241
- const opts = typeof options === "function" ? options() : options;
242
+ const opts = typeof options === "function" ? options({
243
+ data: value.get().data,
244
+ error: value.get().error,
245
+ isPending: value.get().isPending
246
+ }) : options;
242
247
  return $fetch(path, {
243
248
  ...opts,
244
249
  onSuccess: async (context) => {
@@ -273,7 +278,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
273
278
  let firstRun = true;
274
279
  for (const initAtom of initializedAtom) {
275
280
  initAtom.subscribe((value2) => {
276
- if (value2 !== void 0 && !firstRun) {
281
+ if (!firstRun) {
277
282
  fn();
278
283
  }
279
284
  });
package/dist/solid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/client/proxy.ts","../src/utils/misc.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/solid.ts"],"names":["value","atom"],"mappings":";;;;;;;AAAO,IAAM,eAAA,GAAN,cAA8B,KAAM,CAAA;AAAA,EAC1C,YAAY,OAAiB,EAAA;AAC5B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,GACd;AACD,CAAA,CAAA;;;ACFA,SAAS,aAAa,GAAsB,EAAA;AAC3C,EAAI,IAAA;AACH,IAAM,MAAA,SAAA,GAAY,IAAI,GAAA,CAAI,GAAG,CAAA,CAAA;AAC7B,IAAA,OAAO,UAAU,QAAa,KAAA,GAAA,CAAA;AAAA,WACtB,KAAO,EAAA;AACf,IAAA,MAAM,IAAI,eAAA;AAAA,MACT,qBAAqB,GAAG,CAAA,kCAAA,CAAA;AAAA,KACzB,CAAA;AAAA,GACD;AACD,CAAA;AAEA,SAAS,QAAA,CAAS,GAAa,EAAA,IAAA,GAAO,WAAa,EAAA;AAClD,EAAM,MAAA,OAAA,GAAU,aAAa,GAAG,CAAA,CAAA;AAChC,EAAA,IAAI,OAAS,EAAA;AACZ,IAAO,OAAA,GAAA,CAAA;AAAA,GACR;AACA,EAAA,IAAA,GAAO,KAAK,UAAW,CAAA,GAAG,CAAI,GAAA,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA,CAAA;AAC7C,EAAO,OAAA,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AACrB,CAAA;AAEO,SAAS,UAAA,CAAW,KAAc,IAAe,EAAA;AACvD,EAAA,IAAI,GAAK,EAAA;AACR,IAAO,OAAA,QAAA,CAAS,KAAK,IAAI,CAAA,CAAA;AAAA,GAC1B;AACA,EAAA,MAAM,MAAW,OAAO,OAAA,KAAY,WAAc,GAAA,OAAA,CAAQ,MAAM,EAAC,CAAA;AACjE,EAAM,MAAA,OAAA,GACL,IAAI,eACJ,IAAA,GAAA,CAAI,+BACJ,GAAI,CAAA,sBAAA,IACJ,GAAI,CAAA,2BAAA,IACJ,GAAI,CAAA,oBAAA,CAAA;AACL,EAAA,IAAI,OAAS,EAAA;AACZ,IAAO,OAAA,QAAA,CAAS,SAAS,IAAI,CAAA,CAAA;AAAA,GAC9B;AAEA,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,IAAA,OAAO,QAAS,CAAA,MAAA,CAAO,QAAS,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAAA,GAC7C;AACA,EAAO,OAAA,KAAA,CAAA,CAAA;AACR,CAAA;ACtCO,IAAM,cAAiB,GAAA;AAAA,EAC7B,EAAI,EAAA,UAAA;AAAA,EACJ,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACN,UAAU,OAAS,EAAA;AAClB,MAAA,IAAI,OAAQ,CAAA,IAAA,EAAM,GAAO,IAAA,OAAA,CAAQ,MAAM,QAAU,EAAA;AAChD,QAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,UAAO,MAAA,CAAA,QAAA,CAAS,IAAO,GAAA,OAAA,CAAQ,IAAK,CAAA,GAAA,CAAA;AAAA,SACrC;AAAA,OACD;AAAA,KACD;AAAA,GACD;AACD,CAAA,CAAA;AAEO,IAAM,aAAgB,GAAA;AAAA,EAC5B,EAAI,EAAA,iBAAA;AAAA,EACJ,IAAM,EAAA,iBAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACN,UAAU,OAAS,EAAA;AAClB,MAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,QAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC/B,QAAA,GAAA,CAAI,YAAa,CAAA,GAAA,CAAI,YAAc,EAAA,MAAA,CAAO,SAAS,IAAI,CAAA,CAAA;AACvD,QAAA,OAAA,CAAQ,GAAM,GAAA,GAAA,CAAA;AAAA,OACf;AACA,MAAO,OAAA,OAAA,CAAA;AAAA,KACR;AAAA,GACD;AACD,CAAA,CAAA;AAEO,IAAM,UAAa,GAAA;AAAA,EACzB,EAAI,EAAA,MAAA;AAAA,EACJ,IAAM,EAAA,YAAA;AAAA,EACN,MAAM,IAAK,CAAA,GAAA,EAAK,OAAS,EAAA;AACxB,IAAI,IAAA,CAAC,SAAS,OAAS,EAAA;AACtB,MAAA,MAAM,IAAI,eAAA;AAAA,QACT,mGAAA;AAAA,OACD,CAAA;AAAA,KACD;AAEA,IAAI,IAAA,OAAA,EAAS,WAAW,KAAO,EAAA;AAC9B,MAAA,OAAA,GAAU,WAAW,EAAC,CAAA;AACtB,MAAA,MAAM,EAAE,IAAM,EAAA,KAAA,EAAU,GAAA,MAAM,YAE3B,OAAS,EAAA;AAAA,QACX,IAAM,EAAA,KAAA,CAAA;AAAA,QACN,SAAS,OAAQ,CAAA,OAAA;AAAA,QACjB,SAAS,EAAC;AAAA,QACV,MAAQ,EAAA,KAAA;AAAA,QACR,WAAa,EAAA,SAAA;AAAA,QACb,iBAAiB,OAAQ,CAAA,eAAA;AAAA,OACzB,CAAA,CAAA;AACD,MAAI,IAAA,KAAA,EAAO,WAAW,GAAK,EAAA;AAC1B,QAAA,MAAM,IAAI,eAAA;AAAA,UACT,2IAAA;AAAA,SACD,CAAA;AAAA,OACD;AACA,MAAA,IAAI,KAAO,EAAA;AACV,QAAA,MAAM,IAAI,eAAA,CAAgB,KAAM,CAAA,OAAA,IAAW,2BAA2B,CAAA,CAAA;AAAA,OACvE;AACA,MAAA,OAAA,CAAQ,IAAO,GAAA;AAAA,QACd,GAAG,OAAS,EAAA,IAAA;AAAA,QACZ,WAAW,IAAK,CAAA,SAAA;AAAA,OACjB,CAAA;AAAA,KACD;AACA,IAAA,OAAA,CAAQ,WAAc,GAAA,SAAA,CAAA;AACtB,IAAO,OAAA,EAAE,KAAK,OAAQ,EAAA,CAAA;AAAA,GACvB;AACD,CAAA,CAAA;;;AC9DO,IAAM,eAAA,GAAkB,CAA0B,OAAgB,KAAA;AACxE,EAAA,MAAM,SAAS,WAAY,CAAA;AAAA,IAC1B,SAAS,UAAW,CAAA,OAAA,EAAS,YAAc,EAAA,OAAA,IAAW,SAAS,OAAO,CAAA;AAAA,IACtE,GAAG,OAAS,EAAA,YAAA;AAAA,IACZ,OAAS,EAAA;AAAA,MACR,UAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,GAAI,OAAA,EAAS,YAAc,EAAA,OAAA,IAAW,EAAC;AAAA,MACvC,GAAI,OAAA,EAAS,OACV,EAAA,OAAA,CAAQ,CAAC,MAAW,KAAA,MAAA,CAAO,YAAY,CAAA,CACxC,OAAO,CAAC,EAAA,KAAO,EAAO,KAAA,KAAA,CAAS,KAAK,EAAC;AAAA,KACxC;AAAA,GACA,CAAA,CAAA;AACD,EAAM,MAAA,OAAA,GAAU,OAAS,EAAA,OAAA,IAAW,EAAC,CAAA;AACrC,EAAA,IAAI,iBAAiB,EAAC,CAAA;AACtB,EAAA,IAAI,eAAe,EAAC,CAAA;AACpB,EAAA,IAAI,iBAAoD,GAAA;AAAA,IACvD,WAAa,EAAA,MAAA;AAAA,IACb,uBAAyB,EAAA,MAAA;AAAA,GAC1B,CAAA;AACA,EAAA,MAAM,aAAgC,GAAA;AAAA,IACrC;AAAA,MACC,MAAQ,EAAA,gBAAA;AAAA,MACR,QAAQ,IAAM,EAAA;AACb,QAAA,OACC,IAAS,KAAA,WAAA,IACT,IAAS,KAAA,eAAA,IACT,IAAS,KAAA,cAAA,CAAA;AAAA,OAEX;AAAA,KACD;AAAA,GACD,CAAA;AACA,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC7B,IAAA,IAAI,OAAO,UAAY,EAAA;AACtB,MAAA,MAAA,CAAO,MAAO,CAAA,cAAA,EAAgB,MAAO,CAAA,UAAA,GAAa,MAAM,CAAC,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,IAAI,OAAO,QAAU,EAAA;AACpB,MAAA,MAAA,CAAO,MAAO,CAAA,YAAA,EAAc,MAAO,CAAA,QAAA,GAAW,MAAM,CAAC,CAAA,CAAA;AAAA,KACtD;AACA,IAAA,IAAI,OAAO,WAAa,EAAA;AACvB,MAAO,MAAA,CAAA,MAAA,CAAO,iBAAmB,EAAA,MAAA,CAAO,WAAW,CAAA,CAAA;AAAA,KACpD;AACA,IAAA,IAAI,OAAO,aAAe,EAAA;AACzB,MAAc,aAAA,CAAA,IAAA,CAAK,GAAG,MAAA,CAAO,aAAa,CAAA,CAAA;AAAA,KAC3C;AAAA,GACD;AACA,EAAO,OAAA;AAAA,IACN,cAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,GACD,CAAA;AACD,CAAA,CAAA;;;ACzDA,SAAS,SAAA,CACR,IACA,EAAA,gBAAA,EACA,IACC,EAAA;AACD,EAAM,MAAA,MAAA,GAAS,iBAAiB,IAAI,CAAA,CAAA;AACpC,EAAA,MAAM,EAAE,OAAS,EAAA,KAAA,EAAO,GAAG,IAAK,EAAA,GAAI,QAAQ,EAAC,CAAA;AAC7C,EAAA,IAAI,MAAQ,EAAA;AACX,IAAO,OAAA,MAAA,CAAA;AAAA,GACR;AACA,EAAA,IAAI,SAAS,MAAQ,EAAA;AACpB,IAAA,OAAO,OAAQ,CAAA,MAAA,CAAA;AAAA,GAChB;AACA,EAAA,IAAI,QAAQ,MAAO,CAAA,IAAA,CAAK,IAAI,CAAA,CAAE,SAAS,CAAG,EAAA;AACzC,IAAO,OAAA,MAAA,CAAA;AAAA,GACR;AACA,EAAO,OAAA,KAAA,CAAA;AACR,CAAA;AAOO,SAAS,sBACf,CAAA,MAAA,EACA,MACA,EAAA,gBAAA,EACA,OACA,aACI,EAAA;AACJ,EAAS,SAAA,WAAA,CAAY,IAAiB,GAAA,EAAS,EAAA;AAC9C,IAAO,OAAA,IAAI,MAAM,WAAY;AAAA,KAAI,EAAA;AAAA,MAChC,GAAA,CAAI,QAAQ,IAAc,EAAA;AACzB,QAAA,MAAM,QAAW,GAAA,CAAC,GAAG,IAAA,EAAM,IAAI,CAAA,CAAA;AAC/B,QAAA,IAAI,OAAe,GAAA,MAAA,CAAA;AACnB,QAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC/B,UAAA,IAAI,OAAW,IAAA,OAAO,OAAY,KAAA,QAAA,IAAY,WAAW,OAAS,EAAA;AACjE,YAAA,OAAA,GAAU,QAAQ,OAAO,CAAA,CAAA;AAAA,WACnB,MAAA;AACN,YAAU,OAAA,GAAA,KAAA,CAAA,CAAA;AACV,YAAA,MAAA;AAAA,WACD;AAAA,SACD;AAEA,QAAI,IAAA,OAAO,YAAY,UAAY,EAAA;AAClC,UAAO,OAAA,OAAA,CAAA;AAAA,SACR;AACA,QAAA,OAAO,YAAY,QAAQ,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,KAAO,EAAA,OAAO,CAAG,EAAA,EAAA,EAAI,IAAS,KAAA;AAC7B,QAAM,MAAA,SAAA,GACL,MACA,IACE,CAAA,GAAA;AAAA,UAAI,CAAC,OACL,KAAA,OAAA,CAAQ,OAAQ,CAAA,QAAA,EAAU,CAAC,MAAA,KAAW,CAAI,CAAA,EAAA,MAAA,CAAO,WAAY,EAAC,CAAE,CAAA,CAAA;AAAA,SACjE,CACC,KAAK,GAAG,CAAA,CAAA;AAEX,QAAA,MAAM,GAAO,GAAA,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC,CAAA;AACzB,QAAA,MAAM,MAAS,GAAA,SAAA,CAAU,SAAW,EAAA,gBAAA,EAAkB,GAAG,CAAA,CAAA;AACzD,QAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,GAAG,MAAS,GAAA,GAAA,CAAA;AAEpC,QAAO,OAAA,MAAM,OAAO,SAAW,EAAA;AAAA,UAC9B,GAAG,OAAA;AAAA,UACH,IAAA,EACC,MAAW,KAAA,KAAA,GACR,KACA,CAAA,GAAA;AAAA,YACA,GAAG,IAAA;AAAA,YACH,GAAI,OAAS,EAAA,IAAA,IAAQ,EAAC;AAAA,WACvB;AAAA,UACH,KAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAM,UAAU,OAAS,EAAA;AACxB,YAAM,MAAA,OAAA,EAAS,YAAY,OAAO,CAAA,CAAA;AAIlC,YAAM,MAAA,OAAA,GAAU,eAAe,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA;AAE/D,YAAA,IAAI,CAAC,OAAS,EAAA,OAAA;AACd,YAAM,MAAA,MAAA,GAAS,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AACnC,YAAA,IAAI,CAAC,MAAQ,EAAA,OAAA;AAIb,YAAM,MAAA,GAAA,GAAM,OAAO,GAAI,EAAA,CAAA;AACvB,YAAA,UAAA,CAAW,MAAM;AAEhB,cAAO,MAAA,CAAA,GAAA,CAAI,CAAC,GAAG,CAAA,CAAA;AAAA,eACb,CAAC,CAAA,CAAA;AAAA,WACL;AAAA,SACA,CAAA,CAAA;AAAA,OACF;AAAA,KACA,CAAA,CAAA;AAAA,GACF;AACA,EAAA,OAAO,WAAY,EAAA,CAAA;AACpB,CAAA;;;ACvGO,SAAS,sBAAsB,GAAa,EAAA;AAClD,EAAO,OAAA,GAAA,CAAI,OAAO,CAAC,CAAA,CAAE,aAAgB,GAAA,GAAA,CAAI,MAAM,CAAC,CAAA,CAAA;AACjD,CAAA;ACKO,IAAM,YAAe,GAAA,CAC3B,eAGA,EAAA,IAAA,EACA,QACA,OACI,KAAA;AACJ,EAAA,MAAM,QAAQ,IAIX,CAAA;AAAA,IACF,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,SAAW,EAAA,KAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,MAAM,KAAK,MAAM;AAChB,IAAA,MAAM,IAAO,GAAA,OAAO,OAAY,KAAA,UAAA,GAAa,SAAY,GAAA,OAAA,CAAA;AACzD,IAAA,OAAO,OAAU,IAAM,EAAA;AAAA,MACtB,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,OAAO,OAAY,KAAA;AAC7B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,KAAO,EAAA,IAAA;AAAA,UACP,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,MACA,MAAM,QAAQ,OAAS,EAAA;AACtB,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,IAAM,EAAA,IAAA;AAAA,UACN,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,UAAU,OAAO,CAAA,CAAA;AAAA,OAC9B;AAAA,MACA,MAAM,UAAU,OAAS,EAAA;AACxB,QAAM,MAAA,YAAA,GAAe,MAAM,GAAI,EAAA,CAAA;AAC/B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,SAAW,EAAA,IAAA;AAAA,UACX,MAAM,YAAa,CAAA,IAAA;AAAA,UACnB,OAAO,YAAa,CAAA,KAAA;AAAA,SACpB,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,KACA,CAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAG,EAAA,EAAA,CAAA;AACH,EAAA,eAAA,GAAkB,MAAM,OAAQ,CAAA,eAAe,CAC5C,GAAA,eAAA,GACA,CAAC,eAAe,CAAA,CAAA;AACnB,EAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AACf,EAAA,KAAA,MAAW,YAAY,eAAiB,EAAA;AACvC,IAAS,QAAA,CAAA,SAAA,CAAU,CAACA,MAAU,KAAA;AAC7B,MAAIA,IAAAA,MAAAA,KAAU,KAAa,CAAA,IAAA,CAAC,QAAU,EAAA;AACrC,QAAG,EAAA,EAAA,CAAA;AAAA,OACJ;AAAA,KACA,CAAA,CAAA;AAAA,GACF;AACA,EAAW,QAAA,GAAA,KAAA,CAAA;AACX,EAAO,OAAA,KAAA,CAAA;AACR,CAAA,CAAA;;;AC7DO,SAAS,eACf,MACC,EAAA;AA0BD,EAAM,MAAA,OAAA,GAAUC,KAAc,KAAK,CAAA,CAAA;AACnC,EAAA,MAAM,OAAU,GAAA,YAAA,CAGb,OAAS,EAAA,UAAA,EAAY,MAAQ,EAAA;AAAA,IAC/B,MAAQ,EAAA,KAAA;AAAA,GACR,CAAA,CAAA;AACD,EAAO,OAAA;AAAA,IACN,QAAU,EAAA,OAAA;AAAA,IACV,cAAgB,EAAA,OAAA;AAAA,IAChB,QAAQ,EAAC;AAAA,GAMV,CAAA;AACD,CAAA;;;ACvCA,SAAS,WAAW,GAAa,EAAA;AAChC,EAAO,OAAA,CAAA,GAAA,EAAM,qBAAsB,CAAA,GAAG,CAAC,CAAA,CAAA,CAAA;AACxC,CAAA;AAoBO,SAAS,iBACf,OACC,EAAA;AACD,EAAM,MAAA;AAAA,IACL,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,GACD,GAAI,gBAAgB,OAAO,CAAA,CAAA;AAC3B,EAAA,IAAI,gBAAqC,EAAC,CAAA;AAC1C,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAG,EAAA;AACxD,IAAA,aAAA,CAAc,WAAW,GAAG,CAAC,CAAI,GAAA,MAAM,SAAS,KAAK,CAAA,CAAA;AAAA,GACtD;AACA,EAAA,MAAM,EAAE,QAAU,EAAA,cAAA,EAAgB,MAAO,EAAA,GAAI,eAAuB,MAAM,CAAA,CAAA;AAE1E,EAAA,SAAS,UAAa,GAAA;AACrB,IAAA,OAAO,SAAS,QAAQ,CAAA,CAAA;AAAA,GACzB;AACA,EAAA,MAAM,MAAS,GAAA;AAAA,IACd,GAAG,cAAA;AAAA,IACH,GAAG,aAAA;AAAA,IACH,UAAA;AAAA,GACD,CAAA;AACA,EAAA,MAAM,KAAQ,GAAA,sBAAA;AAAA,IACb,MAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,MACC,GAAG,YAAA;AAAA,MACH,cAAA;AAAA,KACD;AAAA,IACA,aAAA;AAAA,GACD,CAAA;AACA,EAAO,OAAA,KAAA,CAAA;AAMR","file":"solid.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/solid\";\nimport { getClientConfig } from \"./config\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport type { Accessor } from \"solid-js\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => Accessor<ReturnType<Atoms[key][\"get\"]>>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
1
+ {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/client/proxy.ts","../src/utils/misc.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/solid.ts"],"names":["value","atom"],"mappings":"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","file":"solid.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/solid\";\nimport { getClientConfig } from \"./config\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport type { Accessor } from \"solid-js\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => Accessor<ReturnType<Atoms[key][\"get\"]>>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
package/dist/svelte.js CHANGED
@@ -112,6 +112,7 @@ var getClientConfig = (options) => {
112
112
  const $fetch = createFetch({
113
113
  baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
114
114
  ...options?.fetchOptions,
115
+ credentials: "include",
115
116
  plugins: [
116
117
  csrfPlugin,
117
118
  redirectPlugin,
@@ -237,7 +238,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
237
238
  isPending: false
238
239
  });
239
240
  const fn = () => {
240
- const opts = typeof options === "function" ? options() : options;
241
+ const opts = typeof options === "function" ? options({
242
+ data: value.get().data,
243
+ error: value.get().error,
244
+ isPending: value.get().isPending
245
+ }) : options;
241
246
  return $fetch(path, {
242
247
  ...opts,
243
248
  onSuccess: async (context) => {
@@ -272,7 +277,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
272
277
  let firstRun = true;
273
278
  for (const initAtom of initializedAtom) {
274
279
  initAtom.subscribe((value2) => {
275
- if (value2 !== void 0 && !firstRun) {
280
+ if (!firstRun) {
276
281
  fn();
277
282
  }
278
283
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/svelte.ts"],"names":["value","atom"],"mappings":"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","file":"svelte.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
1
+ {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/svelte.ts"],"names":["value","atom"],"mappings":"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","file":"svelte.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
package/dist/vue.js CHANGED
@@ -113,6 +113,7 @@ var getClientConfig = (options) => {
113
113
  const $fetch = createFetch({
114
114
  baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
115
115
  ...options?.fetchOptions,
116
+ credentials: "include",
116
117
  plugins: [
117
118
  csrfPlugin,
118
119
  redirectPlugin,
@@ -238,7 +239,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
238
239
  isPending: false
239
240
  });
240
241
  const fn = () => {
241
- const opts = typeof options === "function" ? options() : options;
242
+ const opts = typeof options === "function" ? options({
243
+ data: value.get().data,
244
+ error: value.get().error,
245
+ isPending: value.get().isPending
246
+ }) : options;
242
247
  return $fetch(path, {
243
248
  ...opts,
244
249
  onSuccess: async (context) => {
@@ -273,7 +278,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
273
278
  let firstRun = true;
274
279
  for (const initAtom of initializedAtom) {
275
280
  initAtom.subscribe((value2) => {
276
- if (value2 !== void 0 && !firstRun) {
281
+ if (!firstRun) {
277
282
  fn();
278
283
  }
279
284
  });
package/dist/vue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vue.ts"],"names":["value","atom"],"mappings":"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","file":"vue.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/vue\";\nimport type { DeepReadonly, Ref } from \"vue\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => DeepReadonly<\n\t\t\t\t\t\t\tRef<ReturnType<Atoms[key][\"get\"]>>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
1
+ {"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vue.ts"],"names":["value","atom"],"mappings":"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","file":"vue.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/vue\";\nimport type { DeepReadonly, Ref } from \"vue\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => DeepReadonly<\n\t\t\t\t\t\t\tRef<ReturnType<Atoms[key][\"get\"]>>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-auth",
3
- "version": "0.0.9-beta.21",
3
+ "version": "0.0.9-beta.23",
4
4
  "description": "Framework-agnostic, batteries included authentication library for typescript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",