better-auth 0.0.8-beta.9 → 0.0.9-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/access.js +3 -13
  2. package/dist/access.js.map +1 -1
  3. package/dist/cli.js +58 -57
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/plugins.d.ts +28 -33
  6. package/dist/client/plugins.js +84 -66
  7. package/dist/client/plugins.js.map +1 -1
  8. package/dist/client.d.ts +111 -143
  9. package/dist/client.js +74 -39
  10. package/dist/client.js.map +1 -1
  11. package/dist/{index-Cw3RPThC.d.ts → index-9uJ53v8-.d.ts} +448 -149
  12. package/dist/index-D3V4XFHY.d.ts +1120 -0
  13. package/dist/index.d.ts +7 -1124
  14. package/dist/index.js +327 -376
  15. package/dist/index.js.map +1 -1
  16. package/dist/{internal-adapter-DVxOAfxa.d.ts → internal-adapter-C7JihxUL.d.ts} +140 -51
  17. package/dist/next-js.d.ts +15 -6
  18. package/dist/next-js.js +20 -3
  19. package/dist/next-js.js.map +1 -1
  20. package/dist/plugins.d.ts +9 -4
  21. package/dist/plugins.js +457 -534
  22. package/dist/plugins.js.map +1 -1
  23. package/dist/react.d.ts +131 -213
  24. package/dist/react.js +82 -45
  25. package/dist/react.js.map +1 -1
  26. package/dist/social.d.ts +1 -1
  27. package/dist/social.js +29 -80
  28. package/dist/social.js.map +1 -1
  29. package/dist/solid-start.d.ts +5 -5
  30. package/dist/solid-start.js +3 -3
  31. package/dist/solid-start.js.map +1 -1
  32. package/dist/solid.d.ts +161 -95
  33. package/dist/solid.js +75 -42
  34. package/dist/solid.js.map +1 -1
  35. package/dist/svelte-kit.d.ts +4 -4
  36. package/dist/svelte-kit.js +5 -7
  37. package/dist/svelte-kit.js.map +1 -1
  38. package/dist/svelte.d.ts +101 -141
  39. package/dist/svelte.js +74 -39
  40. package/dist/svelte.js.map +1 -1
  41. package/dist/{types-DT41oqcm.d.ts → types-RkJ3DB4R.d.ts} +3 -3
  42. package/dist/types.d.ts +6 -31
  43. package/dist/types.js +2 -0
  44. package/dist/types.js.map +1 -1
  45. package/dist/vue.d.ts +219 -299
  46. package/dist/vue.js +74 -41
  47. package/dist/vue.js.map +1 -1
  48. package/package.json +6 -4
  49. package/dist/{index-Dzn4azgH.d.ts → index-CcxejJTH.d.ts} +8 -8
@@ -1,5 +1,8 @@
1
+ import { atom } from 'nanostores';
2
+ import '@better-fetch/fetch';
3
+ import { startAuthentication, startRegistration, WebAuthnError } from '@simplewebauthn/browser';
4
+
1
5
  // src/plugins/organization/client.ts
2
- import { atom, computed, task } from "nanostores";
3
6
 
4
7
  // src/plugins/organization/access/src/access.ts
5
8
  var ParsingError = class extends Error {
@@ -88,21 +91,71 @@ var defaultStatements = {
88
91
  invitation: ["create", "cancel"]
89
92
  };
90
93
  var defaultAc = createAccessControl(defaultStatements);
91
- var adminAc = defaultAc.newRole({
94
+ defaultAc.newRole({
92
95
  organization: ["update"],
93
96
  invitation: ["create", "cancel"],
94
97
  member: ["create", "update", "delete"]
95
98
  });
96
- var ownerAc = defaultAc.newRole({
99
+ defaultAc.newRole({
97
100
  organization: ["update", "delete"],
98
101
  member: ["create", "update", "delete"],
99
102
  invitation: ["create", "cancel"]
100
103
  });
101
- var memberAc = defaultAc.newRole({
104
+ defaultAc.newRole({
102
105
  organization: [],
103
106
  member: [],
104
107
  invitation: []
105
108
  });
109
+ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
110
+ const value = atom({
111
+ data: null,
112
+ error: null,
113
+ isPending: false
114
+ });
115
+ const fn = () => {
116
+ const opts = typeof options === "function" ? options() : options;
117
+ return $fetch(path, {
118
+ ...opts,
119
+ onSuccess: async (context) => {
120
+ value.set({
121
+ data: context.data,
122
+ error: null,
123
+ isPending: false
124
+ });
125
+ await opts?.onSuccess?.(context);
126
+ },
127
+ async onError(context) {
128
+ value.set({
129
+ error: context.error,
130
+ data: null,
131
+ isPending: false
132
+ });
133
+ await opts?.onError?.(context);
134
+ },
135
+ async onRequest(context) {
136
+ const currentValue = value.get();
137
+ value.set({
138
+ isPending: true,
139
+ data: currentValue.data,
140
+ error: currentValue.error
141
+ });
142
+ await opts?.onRequest?.(context);
143
+ }
144
+ });
145
+ };
146
+ fn();
147
+ initializedAtom = Array.isArray(initializedAtom) ? initializedAtom : [initializedAtom];
148
+ let firstRun = true;
149
+ for (const initAtom of initializedAtom) {
150
+ initAtom.subscribe((value2) => {
151
+ if (value2 && !firstRun) {
152
+ fn();
153
+ }
154
+ });
155
+ }
156
+ firstRun = false;
157
+ return value;
158
+ };
106
159
 
107
160
  // src/plugins/organization/client.ts
108
161
  var organizationClient = (options) => {
@@ -133,56 +186,30 @@ var organizationClient = (options) => {
133
186
  }
134
187
  }),
135
188
  getAtoms: ($fetch) => {
136
- const listOrganizations = computed(
137
- [_listOrg],
138
- () => task(async () => {
139
- console.log("fetching organizations");
140
- const organizations = await $fetch(
141
- "/organization/list",
142
- {
143
- method: "GET"
144
- }
145
- );
146
- return organizations.data;
147
- })
189
+ const invitation = useAuthQuery(_activeISignal, "/organization/get-active-invitation", $fetch, () => ({
190
+ method: "GET",
191
+ query: {
192
+ id: _activeISignal.get()
193
+ }
194
+ }));
195
+ const listOrganizations = useAuthQuery(
196
+ _listOrg,
197
+ "/organization/list",
198
+ $fetch,
199
+ {
200
+ method: "GET"
201
+ }
148
202
  );
149
- const activeOrganization = computed(
203
+ const activeOrganization = useAuthQuery(
150
204
  [activeOrgId, _activeOrgSignal],
151
- () => task(async () => {
152
- if (!activeOrgId.get()) {
153
- return null;
205
+ "/organization/activate",
206
+ $fetch,
207
+ () => ({
208
+ method: "POST",
209
+ credentials: "include",
210
+ body: {
211
+ orgId: activeOrgId.get()
154
212
  }
155
- const organization = await $fetch("/organization/activate", {
156
- method: "POST",
157
- credentials: "include",
158
- body: {
159
- orgId: activeOrgId.get()
160
- }
161
- });
162
- return organization.data;
163
- })
164
- );
165
- const invitation = computed(
166
- _activeISignal,
167
- () => task(async () => {
168
- if (!_activeISignal.get()) {
169
- return {
170
- error: {
171
- message: "No invitation found",
172
- status: 400,
173
- data: null
174
- },
175
- data: null
176
- };
177
- }
178
- const res = await $fetch("/organization/get-active-invitation", {
179
- method: "GET",
180
- query: {
181
- id: _activeISignal.get()
182
- },
183
- credentials: "include"
184
- });
185
- return res;
186
213
  })
187
214
  );
188
215
  return {
@@ -217,13 +244,6 @@ var usernameClient = () => {
217
244
  $InferServerPlugin: {}
218
245
  };
219
246
  };
220
-
221
- // src/plugins/passkey/client.ts
222
- import {
223
- WebAuthnError,
224
- startAuthentication,
225
- startRegistration
226
- } from "@simplewebauthn/browser";
227
247
  var getPasskeyActions = ($fetch) => {
228
248
  const signInPasskey = async (opts) => {
229
249
  const response = await $fetch(
@@ -341,7 +361,9 @@ var twoFactorClient = (options = {
341
361
  async onSuccess(context) {
342
362
  if (context.data?.twoFactorRedirect) {
343
363
  if (options.redirect || options.twoFactorPage) {
344
- window.location.href = options.twoFactorPage;
364
+ if (typeof window !== "undefined") {
365
+ window.location.href = options.twoFactorPage;
366
+ }
345
367
  }
346
368
  }
347
369
  }
@@ -350,11 +372,7 @@ var twoFactorClient = (options = {
350
372
  ]
351
373
  };
352
374
  };
353
- export {
354
- getPasskeyActions,
355
- organizationClient,
356
- passkeyClient,
357
- twoFactorClient,
358
- usernameClient
359
- };
375
+
376
+ export { getPasskeyActions, organizationClient, passkeyClient, twoFactorClient, usernameClient };
377
+ //# sourceMappingURL=plugins.js.map
360
378
  //# sourceMappingURL=plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/organization/client.ts","../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"sourcesContent":["import { atom, computed, task } 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\";\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>(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\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 listOrganizations = computed([_listOrg], () =>\n\t\t\t\ttask(async () => {\n\t\t\t\t\tconsole.log(\"fetching organizations\");\n\t\t\t\t\tconst organizations = await $fetch<Organization[]>(\n\t\t\t\t\t\t\"/organization/list\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\treturn organizations.data;\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst activeOrganization = computed([activeOrgId, _activeOrgSignal], () =>\n\t\t\t\ttask(async () => {\n\t\t\t\t\tif (!activeOrgId.get()) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tconst organization = await $fetch<\n\t\t\t\t\t\tPrettify<\n\t\t\t\t\t\t\tOrganization & {\n\t\t\t\t\t\t\t\tmembers: Member[];\n\t\t\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t>(\"/organization/activate\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\treturn organization.data;\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst invitation = computed(_activeISignal, () =>\n\t\t\t\ttask(async () => {\n\t\t\t\t\tif (!_activeISignal.get()) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\tmessage: \"No invitation found\",\n\t\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst res = await $fetch<\n\t\t\t\t\t\tPrettify<\n\t\t\t\t\t\t\tInvitation & {\n\t\t\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t>(\"/organization/get-active-invitation\", {\n\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\t});\n\t\t\t\t\treturn res;\n\t\t\t\t}),\n\t\t\t);\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 { 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 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\twindow.location.href = options.twoFactorPage;\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"],"mappings":"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","names":[]}
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 && !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>(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\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\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
@@ -1,11 +1,13 @@
1
1
  import * as zod from 'zod';
2
- import * as _better_fetch_fetch from '@better-fetch/fetch';
3
2
  import * as nanostores from 'nanostores';
4
- import { B as BetterAuthOptions, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-DVxOAfxa.js';
5
- import { Auth } from './index.js';
3
+ import { PreinitializedWritableAtom } from 'nanostores';
4
+ import * as _better_fetch_fetch from '@better-fetch/fetch';
5
+ import { BetterFetch, BetterFetchOption, BetterFetchError } from '@better-fetch/fetch';
6
+ import { A as Auth } from './index-D3V4XFHY.js';
7
+ import { B as BetterAuthPlugin, a as BetterAuthOptions, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-C7JihxUL.js';
6
8
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
7
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-DT41oqcm.js';
8
- import './index-Dzn4azgH.js';
9
+ import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-RkJ3DB4R.js';
10
+ import './index-CcxejJTH.js';
9
11
  import 'arctic';
10
12
  import 'better-call';
11
13
  import 'kysely';
@@ -14,154 +16,114 @@ type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<in
14
16
  [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: Atoms[key];
15
17
  } : {} : {} : {} : {};
16
18
  declare function createAuthClient<Option extends ClientOptions>(options?: Option): UnionToIntersection<InferResolvedHooks<Option>> & InferClientAPI<Option> & InferActions<Option> & {
17
- useSession: nanostores.ReadableAtom<{
18
- user: UnionToIntersection<{
19
- id: string;
20
- email: string;
21
- emailVerified: boolean;
22
- name: string;
23
- createdAt: Date;
24
- updatedAt: Date;
25
- image?: string | undefined;
26
- } & (({
27
- handler: any;
28
- api: any;
29
- options: {
19
+ useSession: nanostores.PreinitializedWritableAtom<{
20
+ data: {
21
+ user: UnionToIntersection<{
22
+ id: string;
23
+ email: string;
24
+ emailVerified: boolean;
25
+ name: string;
26
+ createdAt: Date;
27
+ updatedAt: Date;
28
+ image?: string | undefined;
29
+ } & ({
30
30
  database: any;
31
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
32
- };
33
- } extends Auth ? Auth & {
34
- handler: any;
35
- api: any;
36
- options: {
37
- database: any;
38
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
39
- };
40
- } : never) extends infer T_1 ? T_1 extends ({
41
- handler: any;
42
- api: any;
43
- options: {
44
- database: any;
45
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
46
- };
47
- } extends Auth ? Auth & {
48
- handler: any;
49
- api: any;
50
- options: {
31
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
32
+ } extends infer T_1 ? T_1 extends {
51
33
  database: any;
52
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
53
- };
54
- } : never) ? T_1 extends BetterAuthOptions ? T_1["plugins"] extends (infer T_2)[] ? T_2 extends {
55
- schema: {
56
- user: {
57
- fields: infer Field;
34
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
35
+ } ? T_1 extends BetterAuthOptions ? T_1["plugins"] extends (infer T_2)[] ? T_2 extends {
36
+ schema: {
37
+ user: {
38
+ fields: infer Field;
39
+ };
58
40
  };
59
- };
60
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : T_1 extends Auth ? T_1["options"]["plugins"] extends (infer T_2)[] ? T_2 extends {
61
- schema: {
62
- user: {
63
- fields: infer Field;
41
+ } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : T_1 extends Auth ? T_1["options"]["plugins"] extends (infer T_2)[] ? T_2 extends {
42
+ schema: {
43
+ user: {
44
+ fields: infer Field;
45
+ };
64
46
  };
65
- };
66
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : {} : never : never)> extends infer T ? { [key in keyof T]: UnionToIntersection<{
67
- id: string;
68
- email: string;
69
- emailVerified: boolean;
70
- name: string;
71
- createdAt: Date;
72
- updatedAt: Date;
73
- image?: string | undefined;
74
- } & (({
75
- handler: any;
76
- api: any;
77
- options: {
47
+ } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : {} : never : never)> extends infer T ? { [key in keyof T]: UnionToIntersection<{
48
+ id: string;
49
+ email: string;
50
+ emailVerified: boolean;
51
+ name: string;
52
+ createdAt: Date;
53
+ updatedAt: Date;
54
+ image?: string | undefined;
55
+ } & ({
78
56
  database: any;
79
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
80
- };
81
- } extends Auth ? Auth & {
82
- handler: any;
83
- api: any;
84
- options: {
85
- database: any;
86
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
87
- };
88
- } : never) extends infer T_1 ? T_1 extends ({
89
- handler: any;
90
- api: any;
91
- options: {
57
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
58
+ } extends infer T_1 ? T_1 extends {
92
59
  database: any;
93
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
94
- };
95
- } extends Auth ? Auth & {
96
- handler: any;
97
- api: any;
98
- options: {
99
- database: any;
100
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
101
- };
102
- } : never) ? T_1 extends BetterAuthOptions ? T_1["plugins"] extends (infer T_2)[] ? T_2 extends {
103
- schema: {
104
- user: {
105
- fields: infer Field;
60
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
61
+ } ? T_1 extends BetterAuthOptions ? T_1["plugins"] extends (infer T_2)[] ? T_2 extends {
62
+ schema: {
63
+ user: {
64
+ fields: infer Field;
65
+ };
106
66
  };
107
- };
108
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : T_1 extends Auth ? T_1["options"]["plugins"] extends (infer T_2)[] ? T_2 extends {
109
- schema: {
110
- user: {
111
- fields: infer Field;
67
+ } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : T_1 extends Auth ? T_1["options"]["plugins"] extends (infer T_2)[] ? T_2 extends {
68
+ schema: {
69
+ user: {
70
+ fields: infer Field;
71
+ };
112
72
  };
113
- };
114
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : {} : never : never)>[key]; } : never;
115
- session: UnionToIntersection<{
116
- id: string;
117
- userId: string;
118
- expiresAt: Date;
119
- ipAddress?: string | undefined;
120
- userAgent?: string | undefined;
121
- } & ({
122
- database: any;
123
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
124
- } extends infer T_5 ? T_5 extends {
125
- database: any;
126
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
127
- } ? T_5 extends BetterAuthOptions ? T_5["plugins"] extends (infer T_6)[] ? T_6 extends {
128
- schema: {
129
- session: {
130
- fields: infer Field_1;
73
+ } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : {} : never : never)>[key]; } : never;
74
+ session: UnionToIntersection<{
75
+ id: string;
76
+ userId: string;
77
+ expiresAt: Date;
78
+ ipAddress?: string | undefined;
79
+ userAgent?: string | undefined;
80
+ } & ({
81
+ database: any;
82
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
83
+ } extends infer T_5 ? T_5 extends {
84
+ database: any;
85
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
86
+ } ? T_5 extends BetterAuthOptions ? T_5["plugins"] extends (infer T_6)[] ? T_6 extends {
87
+ schema: {
88
+ session: {
89
+ fields: infer Field_1;
90
+ };
131
91
  };
132
- };
133
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : T_5 extends Auth ? T_5["options"]["plugins"] extends (infer T_6)[] ? T_6 extends {
134
- schema: {
135
- session: {
136
- fields: infer Field_1;
92
+ } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : T_5 extends Auth ? T_5["options"]["plugins"] extends (infer T_6)[] ? T_6 extends {
93
+ schema: {
94
+ session: {
95
+ fields: infer Field_1;
96
+ };
137
97
  };
138
- };
139
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : {} : never : never)> extends infer T_4 ? { [key_4 in keyof T_4]: UnionToIntersection<{
140
- id: string;
141
- userId: string;
142
- expiresAt: Date;
143
- ipAddress?: string | undefined;
144
- userAgent?: string | undefined;
145
- } & ({
146
- database: any;
147
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
148
- } extends infer T_5 ? T_5 extends {
149
- database: any;
150
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
151
- } ? T_5 extends BetterAuthOptions ? T_5["plugins"] extends (infer T_6)[] ? T_6 extends {
152
- schema: {
153
- session: {
154
- fields: infer Field_1;
98
+ } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : {} : never : never)> extends infer T_4 ? { [key_4 in keyof T_4]: UnionToIntersection<{
99
+ id: string;
100
+ userId: string;
101
+ expiresAt: Date;
102
+ ipAddress?: string | undefined;
103
+ userAgent?: string | undefined;
104
+ } & ({
105
+ database: any;
106
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
107
+ } extends infer T_5 ? T_5 extends {
108
+ database: any;
109
+ plugins: Option["plugins"] extends AuthClientPlugin[] ? UnionToIntersection<Option["plugins"] extends (infer Pl)[] ? Pl extends AuthClientPlugin ? Pl["$InferServerPlugin"] extends BetterAuthPlugin ? Pl["$InferServerPlugin"] : never : never : never>[] : never;
110
+ } ? T_5 extends BetterAuthOptions ? T_5["plugins"] extends (infer T_6)[] ? T_6 extends {
111
+ schema: {
112
+ session: {
113
+ fields: infer Field_1;
114
+ };
155
115
  };
156
- };
157
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : T_5 extends Auth ? T_5["options"]["plugins"] extends (infer T_6)[] ? T_6 extends {
158
- schema: {
159
- session: {
160
- fields: infer Field_1;
116
+ } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : T_5 extends Auth ? T_5["options"]["plugins"] extends (infer T_6)[] ? T_6 extends {
117
+ schema: {
118
+ session: {
119
+ fields: infer Field_1;
120
+ };
161
121
  };
162
- };
163
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : {} : never : never)>[key_4]; } : never;
164
- } | null>;
122
+ } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : {} : never : never)>[key_4]; } : never;
123
+ } | null;
124
+ error: null | _better_fetch_fetch.BetterFetchError;
125
+ isPending: boolean;
126
+ }>;
165
127
  $fetch: _better_fetch_fetch.BetterFetch<{
166
128
  plugins: (_better_fetch_fetch.BetterFetchPlugin | {
167
129
  id: string;
@@ -308,7 +270,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
308
270
  output?: (zod.ZodType | typeof Blob | typeof File) | undefined;
309
271
  errorSchema?: zod.ZodType | undefined;
310
272
  disableValidation?: boolean | undefined;
311
- } | undefined;
273
+ };
312
274
  }>;
313
275
  })[];
314
276
  cache?: RequestCache;
@@ -376,4 +338,10 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
376
338
  }, unknown, unknown, {}>;
377
339
  };
378
340
 
379
- export { createAuthClient };
341
+ declare const useAuthQuery: <T>(initializedAtom: PreinitializedWritableAtom<any> | PreinitializedWritableAtom<any>[], path: string, $fetch: BetterFetch, options?: (() => BetterFetchOption) | BetterFetchOption) => PreinitializedWritableAtom<{
342
+ data: null | T;
343
+ error: null | BetterFetchError;
344
+ isPending: boolean;
345
+ }>;
346
+
347
+ export { createAuthClient, useAuthQuery };