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.
- package/dist/access.js +3 -13
- package/dist/access.js.map +1 -1
- package/dist/cli.js +58 -57
- package/dist/cli.js.map +1 -1
- package/dist/client/plugins.d.ts +28 -33
- package/dist/client/plugins.js +84 -66
- package/dist/client/plugins.js.map +1 -1
- package/dist/client.d.ts +111 -143
- package/dist/client.js +74 -39
- package/dist/client.js.map +1 -1
- package/dist/{index-Cw3RPThC.d.ts → index-9uJ53v8-.d.ts} +448 -149
- package/dist/index-D3V4XFHY.d.ts +1120 -0
- package/dist/index.d.ts +7 -1124
- package/dist/index.js +327 -376
- package/dist/index.js.map +1 -1
- package/dist/{internal-adapter-DVxOAfxa.d.ts → internal-adapter-C7JihxUL.d.ts} +140 -51
- package/dist/next-js.d.ts +15 -6
- package/dist/next-js.js +20 -3
- package/dist/next-js.js.map +1 -1
- package/dist/plugins.d.ts +9 -4
- package/dist/plugins.js +457 -534
- package/dist/plugins.js.map +1 -1
- package/dist/react.d.ts +131 -213
- package/dist/react.js +82 -45
- package/dist/react.js.map +1 -1
- package/dist/social.d.ts +1 -1
- package/dist/social.js +29 -80
- package/dist/social.js.map +1 -1
- package/dist/solid-start.d.ts +5 -5
- package/dist/solid-start.js +3 -3
- package/dist/solid-start.js.map +1 -1
- package/dist/solid.d.ts +161 -95
- package/dist/solid.js +75 -42
- package/dist/solid.js.map +1 -1
- package/dist/svelte-kit.d.ts +4 -4
- package/dist/svelte-kit.js +5 -7
- package/dist/svelte-kit.js.map +1 -1
- package/dist/svelte.d.ts +101 -141
- package/dist/svelte.js +74 -39
- package/dist/svelte.js.map +1 -1
- package/dist/{types-DT41oqcm.d.ts → types-RkJ3DB4R.d.ts} +3 -3
- package/dist/types.d.ts +6 -31
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/dist/vue.d.ts +219 -299
- package/dist/vue.js +74 -41
- package/dist/vue.js.map +1 -1
- package/package.json +6 -4
- package/dist/{index-Dzn4azgH.d.ts → index-CcxejJTH.d.ts} +8 -8
package/dist/client/plugins.js
CHANGED
|
@@ -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
|
-
|
|
94
|
+
defaultAc.newRole({
|
|
92
95
|
organization: ["update"],
|
|
93
96
|
invitation: ["create", "cancel"],
|
|
94
97
|
member: ["create", "update", "delete"]
|
|
95
98
|
});
|
|
96
|
-
|
|
99
|
+
defaultAc.newRole({
|
|
97
100
|
organization: ["update", "delete"],
|
|
98
101
|
member: ["create", "update", "delete"],
|
|
99
102
|
invitation: ["create", "cancel"]
|
|
100
103
|
});
|
|
101
|
-
|
|
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
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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 =
|
|
203
|
+
const activeOrganization = useAuthQuery(
|
|
150
204
|
[activeOrgId, _activeOrgSignal],
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
|
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
|
-
|
|
354
|
-
|
|
355
|
-
|
|
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 {
|
|
5
|
-
import
|
|
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-
|
|
8
|
-
import './index-
|
|
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.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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"][
|
|
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"][
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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"][
|
|
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"][
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
}
|
|
164
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
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 };
|