convex-zen 0.0.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/cli/generate.d.ts +14 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +297 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/index.d.ts +300 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +434 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/plugins/admin.d.ts +92 -0
- package/dist/client/plugins/admin.d.ts.map +1 -0
- package/dist/client/plugins/admin.js +165 -0
- package/dist/client/plugins/admin.js.map +1 -0
- package/dist/client/primitives.d.ts +57 -0
- package/dist/client/primitives.d.ts.map +1 -0
- package/dist/client/primitives.js +64 -0
- package/dist/client/primitives.js.map +1 -0
- package/dist/client/providers.d.ts +14 -0
- package/dist/client/providers.d.ts.map +1 -0
- package/dist/client/providers.js +25 -0
- package/dist/client/providers.js.map +1 -0
- package/dist/client/react.d.ts +23 -0
- package/dist/client/react.d.ts.map +1 -0
- package/dist/client/react.js +48 -0
- package/dist/client/react.js.map +1 -0
- package/dist/client/tanstack-start-client-plugins.d.ts +34 -0
- package/dist/client/tanstack-start-client-plugins.d.ts.map +1 -0
- package/dist/client/tanstack-start-client-plugins.js +32 -0
- package/dist/client/tanstack-start-client-plugins.js.map +1 -0
- package/dist/client/tanstack-start-client.d.ts +52 -0
- package/dist/client/tanstack-start-client.d.ts.map +1 -0
- package/dist/client/tanstack-start-client.js +130 -0
- package/dist/client/tanstack-start-client.js.map +1 -0
- package/dist/client/tanstack-start-plugins.d.ts +27 -0
- package/dist/client/tanstack-start-plugins.d.ts.map +1 -0
- package/dist/client/tanstack-start-plugins.js +145 -0
- package/dist/client/tanstack-start-plugins.js.map +1 -0
- package/dist/client/tanstack-start.d.ts +130 -0
- package/dist/client/tanstack-start.d.ts.map +1 -0
- package/dist/client/tanstack-start.js +331 -0
- package/dist/client/tanstack-start.js.map +1 -0
- package/dist/component/_generated/api.d.ts +50 -0
- package/dist/component/_generated/api.d.ts.map +1 -0
- package/dist/component/_generated/api.js +31 -0
- package/dist/component/_generated/api.js.map +1 -0
- package/dist/component/_generated/component.d.ts +92 -0
- package/dist/component/_generated/component.d.ts.map +1 -0
- package/dist/component/_generated/component.js +11 -0
- package/dist/component/_generated/component.js.map +1 -0
- package/dist/component/_generated/dataModel.d.ts +46 -0
- package/dist/component/_generated/dataModel.d.ts.map +1 -0
- package/dist/component/_generated/dataModel.js +11 -0
- package/dist/component/_generated/dataModel.js.map +1 -0
- package/dist/component/_generated/server.d.ts +121 -0
- package/dist/component/_generated/server.d.ts.map +1 -0
- package/dist/component/_generated/server.js +78 -0
- package/dist/component/_generated/server.js.map +1 -0
- package/dist/component/convex.config.d.ts +3 -0
- package/dist/component/convex.config.d.ts.map +1 -0
- package/dist/component/convex.config.js +4 -0
- package/dist/component/convex.config.js.map +1 -0
- package/dist/component/core/sessions.d.ts +33 -0
- package/dist/component/core/sessions.d.ts.map +1 -0
- package/dist/component/core/sessions.js +186 -0
- package/dist/component/core/sessions.js.map +1 -0
- package/dist/component/core/users.d.ts +19 -0
- package/dist/component/core/users.d.ts.map +1 -0
- package/dist/component/core/users.js +154 -0
- package/dist/component/core/users.js.map +1 -0
- package/dist/component/core/verifications.d.ts +34 -0
- package/dist/component/core/verifications.d.ts.map +1 -0
- package/dist/component/core/verifications.js +135 -0
- package/dist/component/core/verifications.js.map +1 -0
- package/dist/component/gateway.d.ts +16 -0
- package/dist/component/gateway.d.ts.map +1 -0
- package/dist/component/gateway.js +229 -0
- package/dist/component/gateway.js.map +1 -0
- package/dist/component/lib/crypto.d.ts +24 -0
- package/dist/component/lib/crypto.d.ts.map +1 -0
- package/dist/component/lib/crypto.js +57 -0
- package/dist/component/lib/crypto.js.map +1 -0
- package/dist/component/lib/rateLimit.d.ts +26 -0
- package/dist/component/lib/rateLimit.d.ts.map +1 -0
- package/dist/component/lib/rateLimit.js +96 -0
- package/dist/component/lib/rateLimit.js.map +1 -0
- package/dist/component/lib/validators.d.ts +19 -0
- package/dist/component/lib/validators.d.ts.map +1 -0
- package/dist/component/lib/validators.js +12 -0
- package/dist/component/lib/validators.js.map +1 -0
- package/dist/component/plugins/admin.d.ts +72 -0
- package/dist/component/plugins/admin.d.ts.map +1 -0
- package/dist/component/plugins/admin.js +152 -0
- package/dist/component/plugins/admin.js.map +1 -0
- package/dist/component/providers/emailPassword.d.ts +49 -0
- package/dist/component/providers/emailPassword.d.ts.map +1 -0
- package/dist/component/providers/emailPassword.js +316 -0
- package/dist/component/providers/emailPassword.js.map +1 -0
- package/dist/component/providers/oauth.d.ts +33 -0
- package/dist/component/providers/oauth.d.ts.map +1 -0
- package/dist/component/providers/oauth.js +256 -0
- package/dist/component/providers/oauth.js.map +1 -0
- package/dist/component/schema.d.ts +132 -0
- package/dist/component/schema.d.ts.map +1 -0
- package/dist/component/schema.js +82 -0
- package/dist/component/schema.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +121 -0
- package/src/cli/generate.ts +360 -0
- package/src/cli/index.ts +133 -0
- package/src/client/index.ts +707 -0
- package/src/client/plugins/admin.ts +205 -0
- package/src/client/primitives.ts +100 -0
- package/src/client/providers.ts +35 -0
- package/src/client/react.ts +97 -0
- package/src/client/tanstack-start-client-plugins.ts +113 -0
- package/src/client/tanstack-start-client.ts +259 -0
- package/src/client/tanstack-start-plugins.ts +203 -0
- package/src/client/tanstack-start.ts +535 -0
- package/src/component/_generated/api.ts +70 -0
- package/src/component/_generated/component.ts +184 -0
- package/src/component/_generated/dataModel.ts +60 -0
- package/src/component/_generated/server.ts +156 -0
- package/src/component/convex.config.ts +5 -0
- package/src/component/core/sessions.ts +228 -0
- package/src/component/core/users.ts +199 -0
- package/src/component/core/verifications.ts +173 -0
- package/src/component/gateway.ts +321 -0
- package/src/component/lib/crypto.ts +63 -0
- package/src/component/lib/internalApi.ts +66 -0
- package/src/component/lib/rateLimit.ts +111 -0
- package/src/component/lib/validators.ts +12 -0
- package/src/component/plugins/admin.ts +178 -0
- package/src/component/providers/emailPassword.ts +374 -0
- package/src/component/providers/oauth.ts +324 -0
- package/src/component/schema.ts +88 -0
- package/src/types.ts +68 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
function normalizeBasePath(path) {
|
|
2
|
+
const normalized = path.trim();
|
|
3
|
+
if (normalized === "") {
|
|
4
|
+
return "/api/auth";
|
|
5
|
+
}
|
|
6
|
+
const withLeadingSlash = normalized.startsWith("/")
|
|
7
|
+
? normalized
|
|
8
|
+
: `/${normalized}`;
|
|
9
|
+
if (withLeadingSlash.length > 1 && withLeadingSlash.endsWith("/")) {
|
|
10
|
+
return withLeadingSlash.slice(0, -1);
|
|
11
|
+
}
|
|
12
|
+
return withLeadingSlash;
|
|
13
|
+
}
|
|
14
|
+
async function readJson(response) {
|
|
15
|
+
try {
|
|
16
|
+
return await response.json();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function errorMessage(response, payload, fallback) {
|
|
23
|
+
if (payload &&
|
|
24
|
+
typeof payload === "object" &&
|
|
25
|
+
"error" in payload &&
|
|
26
|
+
typeof payload.error === "string") {
|
|
27
|
+
return payload.error;
|
|
28
|
+
}
|
|
29
|
+
return `${fallback} (${response.status})`;
|
|
30
|
+
}
|
|
31
|
+
function toSignInBody(input) {
|
|
32
|
+
const body = {
|
|
33
|
+
email: input.email,
|
|
34
|
+
password: input.password,
|
|
35
|
+
};
|
|
36
|
+
if (input.ipAddress) {
|
|
37
|
+
body.ipAddress = input.ipAddress;
|
|
38
|
+
}
|
|
39
|
+
if (input.userAgent) {
|
|
40
|
+
body.userAgent = input.userAgent;
|
|
41
|
+
}
|
|
42
|
+
return body;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build a ConvexZen React auth client from TanStack Start server functions.
|
|
46
|
+
*/
|
|
47
|
+
export function createTanStackStartReactAuthClient(serverFns) {
|
|
48
|
+
return {
|
|
49
|
+
getSession: async () => {
|
|
50
|
+
return await serverFns.getSession();
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a browser auth client targeting TanStack Start auth API routes.
|
|
56
|
+
*
|
|
57
|
+
* Defaults to:
|
|
58
|
+
* - basePath: `/api/auth`
|
|
59
|
+
* - credentials: `same-origin`
|
|
60
|
+
*/
|
|
61
|
+
export function createTanStackStartAuthApiClient(options = {}) {
|
|
62
|
+
const basePath = normalizeBasePath(options.basePath ?? "/api/auth");
|
|
63
|
+
const credentials = options.credentials ?? "same-origin";
|
|
64
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
65
|
+
const plugins = options.plugins ?? [];
|
|
66
|
+
const request = async (path, init, failure) => {
|
|
67
|
+
const response = await fetchImpl(`${basePath}/${path}`, {
|
|
68
|
+
...init,
|
|
69
|
+
credentials,
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
const payload = await readJson(response);
|
|
73
|
+
throw new Error(errorMessage(response, payload, failure.fallback));
|
|
74
|
+
}
|
|
75
|
+
return response;
|
|
76
|
+
};
|
|
77
|
+
const requestJson = async (path, init, failure) => {
|
|
78
|
+
const response = await request(path, init, failure);
|
|
79
|
+
const payload = await readJson(response);
|
|
80
|
+
return payload;
|
|
81
|
+
};
|
|
82
|
+
const requestVoid = async (path, init, failure) => {
|
|
83
|
+
await request(path, init, failure);
|
|
84
|
+
};
|
|
85
|
+
const getSession = async () => {
|
|
86
|
+
const payload = await requestJson("session", {
|
|
87
|
+
method: "GET",
|
|
88
|
+
}, { fallback: "Could not load session" });
|
|
89
|
+
return payload?.session ?? null;
|
|
90
|
+
};
|
|
91
|
+
const signInWithEmail = async (input) => {
|
|
92
|
+
const payload = await requestJson("sign-in-with-email", {
|
|
93
|
+
method: "POST",
|
|
94
|
+
headers: { "content-type": "application/json" },
|
|
95
|
+
body: JSON.stringify(toSignInBody(input)),
|
|
96
|
+
}, { fallback: "Sign in failed" });
|
|
97
|
+
if (!payload?.session) {
|
|
98
|
+
throw new Error("Sign in succeeded but no session was returned");
|
|
99
|
+
}
|
|
100
|
+
return payload.session;
|
|
101
|
+
};
|
|
102
|
+
const signOut = async () => {
|
|
103
|
+
await requestVoid("sign-out", {
|
|
104
|
+
method: "POST",
|
|
105
|
+
}, { fallback: "Sign out failed" });
|
|
106
|
+
};
|
|
107
|
+
const baseClient = {
|
|
108
|
+
getSession,
|
|
109
|
+
signInWithEmail,
|
|
110
|
+
signOut,
|
|
111
|
+
signIn: {
|
|
112
|
+
email: signInWithEmail,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
const pluginContext = {
|
|
116
|
+
basePath,
|
|
117
|
+
credentials,
|
|
118
|
+
requestJson,
|
|
119
|
+
requestVoid,
|
|
120
|
+
};
|
|
121
|
+
const pluginExtensions = {};
|
|
122
|
+
for (const plugin of plugins) {
|
|
123
|
+
Object.assign(pluginExtensions, plugin.create(pluginContext));
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
...baseClient,
|
|
127
|
+
...pluginExtensions,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=tanstack-start-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start-client.js","sourceRoot":"","sources":["../../src/client/tanstack-start-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FunctionReference } from "convex/server";
|
|
2
|
+
import type { TanStackStartAuthApiPluginFactory } from "./tanstack-start";
|
|
3
|
+
type ActionRef = FunctionReference<"action", "public">;
|
|
4
|
+
export interface TanStackStartAdminApiPluginActions {
|
|
5
|
+
listUsers: ActionRef;
|
|
6
|
+
banUser: ActionRef;
|
|
7
|
+
setRole: ActionRef;
|
|
8
|
+
unbanUser?: ActionRef;
|
|
9
|
+
deleteUser?: ActionRef;
|
|
10
|
+
}
|
|
11
|
+
export interface TanStackStartAdminApiPluginOptions {
|
|
12
|
+
actions: TanStackStartAdminApiPluginActions;
|
|
13
|
+
routePrefix?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Add admin auth API routes to TanStack Start handler.
|
|
17
|
+
*
|
|
18
|
+
* Endpoints:
|
|
19
|
+
* - POST `/api/auth/admin/list-users`
|
|
20
|
+
* - POST `/api/auth/admin/ban-user`
|
|
21
|
+
* - POST `/api/auth/admin/set-role`
|
|
22
|
+
* - POST `/api/auth/admin/unban-user` (optional)
|
|
23
|
+
* - POST `/api/auth/admin/delete-user` (optional)
|
|
24
|
+
*/
|
|
25
|
+
export declare function adminApiPlugin(options: TanStackStartAdminApiPluginOptions): TanStackStartAuthApiPluginFactory;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=tanstack-start-plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start-plugins.d.ts","sourceRoot":"","sources":["../../src/client/tanstack-start-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAE1E,KAAK,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAGvD,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,EAAE,kCAAkC,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoFD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,kCAAkC,GAC1C,iCAAiC,CAyFnC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
function normalizeRoutePrefix(prefix) {
|
|
2
|
+
const trimmed = prefix.trim().replace(/^\/+|\/+$/g, "");
|
|
3
|
+
return trimmed.length > 0 ? trimmed : "admin";
|
|
4
|
+
}
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function parseListUsersArgs(value) {
|
|
9
|
+
if (value === null || value === undefined) {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
if (!isRecord(value)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const args = {};
|
|
16
|
+
if (value.limit !== undefined) {
|
|
17
|
+
if (typeof value.limit !== "number") {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
args.limit = value.limit;
|
|
21
|
+
}
|
|
22
|
+
if (value.cursor !== undefined) {
|
|
23
|
+
if (typeof value.cursor !== "string") {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
args.cursor = value.cursor;
|
|
27
|
+
}
|
|
28
|
+
return args;
|
|
29
|
+
}
|
|
30
|
+
function parseBanUserArgs(value) {
|
|
31
|
+
if (!isRecord(value) || typeof value.userId !== "string") {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const args = {
|
|
35
|
+
userId: value.userId,
|
|
36
|
+
};
|
|
37
|
+
if (value.reason !== undefined) {
|
|
38
|
+
if (typeof value.reason !== "string") {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
args.reason = value.reason;
|
|
42
|
+
}
|
|
43
|
+
if (value.expiresAt !== undefined) {
|
|
44
|
+
if (typeof value.expiresAt !== "number") {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
args.expiresAt = value.expiresAt;
|
|
48
|
+
}
|
|
49
|
+
return args;
|
|
50
|
+
}
|
|
51
|
+
function parseSetRoleArgs(value) {
|
|
52
|
+
if (!isRecord(value) ||
|
|
53
|
+
typeof value.userId !== "string" ||
|
|
54
|
+
typeof value.role !== "string") {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
userId: value.userId,
|
|
59
|
+
role: value.role,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function parseSingleUserIdArgs(value) {
|
|
63
|
+
if (!isRecord(value) || typeof value.userId !== "string") {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return { userId: value.userId };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Add admin auth API routes to TanStack Start handler.
|
|
70
|
+
*
|
|
71
|
+
* Endpoints:
|
|
72
|
+
* - POST `/api/auth/admin/list-users`
|
|
73
|
+
* - POST `/api/auth/admin/ban-user`
|
|
74
|
+
* - POST `/api/auth/admin/set-role`
|
|
75
|
+
* - POST `/api/auth/admin/unban-user` (optional)
|
|
76
|
+
* - POST `/api/auth/admin/delete-user` (optional)
|
|
77
|
+
*/
|
|
78
|
+
export function adminApiPlugin(options) {
|
|
79
|
+
const routePrefix = normalizeRoutePrefix(options.routePrefix ?? "admin");
|
|
80
|
+
return {
|
|
81
|
+
id: "admin",
|
|
82
|
+
create: ({ fetchers }) => ({
|
|
83
|
+
id: "admin",
|
|
84
|
+
handle: async (context) => {
|
|
85
|
+
const actionPrefix = `${routePrefix}/`;
|
|
86
|
+
if (!context.action.startsWith(actionPrefix)) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
if (context.method !== "POST") {
|
|
90
|
+
return context.json({ error: "Method not allowed" }, 405);
|
|
91
|
+
}
|
|
92
|
+
const adminAction = context.action.slice(actionPrefix.length);
|
|
93
|
+
const payload = await context.readJson();
|
|
94
|
+
if (adminAction === "list-users") {
|
|
95
|
+
const args = parseListUsersArgs(payload);
|
|
96
|
+
if (!args) {
|
|
97
|
+
return context.json({ error: "Invalid request body" }, 400);
|
|
98
|
+
}
|
|
99
|
+
const result = await fetchers.fetchAuthAction(options.actions.listUsers, args);
|
|
100
|
+
return context.json(result);
|
|
101
|
+
}
|
|
102
|
+
if (adminAction === "ban-user") {
|
|
103
|
+
const args = parseBanUserArgs(payload);
|
|
104
|
+
if (!args) {
|
|
105
|
+
return context.json({ error: "Invalid request body" }, 400);
|
|
106
|
+
}
|
|
107
|
+
const result = await fetchers.fetchAuthAction(options.actions.banUser, args);
|
|
108
|
+
return context.json(result);
|
|
109
|
+
}
|
|
110
|
+
if (adminAction === "set-role") {
|
|
111
|
+
const args = parseSetRoleArgs(payload);
|
|
112
|
+
if (!args) {
|
|
113
|
+
return context.json({ error: "Invalid request body" }, 400);
|
|
114
|
+
}
|
|
115
|
+
const result = await fetchers.fetchAuthAction(options.actions.setRole, args);
|
|
116
|
+
return context.json(result);
|
|
117
|
+
}
|
|
118
|
+
if (adminAction === "unban-user") {
|
|
119
|
+
if (!options.actions.unbanUser) {
|
|
120
|
+
return context.json({ error: "Not found" }, 404);
|
|
121
|
+
}
|
|
122
|
+
const args = parseSingleUserIdArgs(payload);
|
|
123
|
+
if (!args) {
|
|
124
|
+
return context.json({ error: "Invalid request body" }, 400);
|
|
125
|
+
}
|
|
126
|
+
const result = await fetchers.fetchAuthAction(options.actions.unbanUser, args);
|
|
127
|
+
return context.json(result);
|
|
128
|
+
}
|
|
129
|
+
if (adminAction === "delete-user") {
|
|
130
|
+
if (!options.actions.deleteUser) {
|
|
131
|
+
return context.json({ error: "Not found" }, 404);
|
|
132
|
+
}
|
|
133
|
+
const args = parseSingleUserIdArgs(payload);
|
|
134
|
+
if (!args) {
|
|
135
|
+
return context.json({ error: "Invalid request body" }, 400);
|
|
136
|
+
}
|
|
137
|
+
const result = await fetchers.fetchAuthAction(options.actions.deleteUser, args);
|
|
138
|
+
return context.json(result);
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
},
|
|
142
|
+
}),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=tanstack-start-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start-plugins.js","sourceRoot":"","sources":["../../src/client/tanstack-start-plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { FunctionArgs, FunctionReference, FunctionReturnType } from "convex/server";
|
|
2
|
+
import type { setCookie as setCookieFn } from "@tanstack/react-start/server";
|
|
3
|
+
import { type SessionInfo, type SessionPrimitives, type SignInInput } from "./primitives";
|
|
4
|
+
type SetCookieOptions = Exclude<Parameters<typeof setCookieFn>[2], undefined>;
|
|
5
|
+
export interface TanStackStartAuthOptions {
|
|
6
|
+
primitives: SessionPrimitives;
|
|
7
|
+
cookieName?: string;
|
|
8
|
+
cookieOptions?: Partial<SetCookieOptions>;
|
|
9
|
+
}
|
|
10
|
+
export interface TanStackStartConvexActions {
|
|
11
|
+
/** Email/password sign-in action. */
|
|
12
|
+
signInWithEmail: FunctionReference<"action", "public">;
|
|
13
|
+
validateSession: FunctionReference<"action", "public">;
|
|
14
|
+
signOut: FunctionReference<"action", "public">;
|
|
15
|
+
}
|
|
16
|
+
export interface TanStackStartConvexAuthOptions {
|
|
17
|
+
convexUrl: string;
|
|
18
|
+
actions: TanStackStartConvexActions;
|
|
19
|
+
cookieName?: string;
|
|
20
|
+
cookieOptions?: Partial<SetCookieOptions>;
|
|
21
|
+
}
|
|
22
|
+
export interface TanStackStartConvexReactStartOptions extends TanStackStartConvexAuthOptions {
|
|
23
|
+
authApiBasePath?: string;
|
|
24
|
+
plugins?: readonly TanStackStartAuthApiPluginFactory[];
|
|
25
|
+
}
|
|
26
|
+
export interface AuthenticatedSession {
|
|
27
|
+
token: string;
|
|
28
|
+
session: SessionInfo;
|
|
29
|
+
}
|
|
30
|
+
export interface TanStackStartAuth {
|
|
31
|
+
getSession: () => Promise<SessionInfo | null>;
|
|
32
|
+
getToken: () => Promise<string | null>;
|
|
33
|
+
signIn: (input: SignInInput) => Promise<SessionInfo>;
|
|
34
|
+
signOut: () => Promise<void>;
|
|
35
|
+
requireSession: () => Promise<AuthenticatedSession>;
|
|
36
|
+
withSession: <T>(handler: (auth: AuthenticatedSession) => Promise<T>) => Promise<T>;
|
|
37
|
+
}
|
|
38
|
+
export interface TanStackStartSessionHandlers {
|
|
39
|
+
getSession: () => Promise<SessionInfo | null>;
|
|
40
|
+
getToken: () => Promise<string | null>;
|
|
41
|
+
requireSession: () => Promise<AuthenticatedSession>;
|
|
42
|
+
withSession: <T>(handler: (auth: AuthenticatedSession) => Promise<T>) => Promise<T>;
|
|
43
|
+
}
|
|
44
|
+
export interface TanStackStartAuthHandlers {
|
|
45
|
+
signInWithEmail: (input: SignInInput) => Promise<SessionInfo>;
|
|
46
|
+
signOut: () => Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
export interface TanStackStartAuthApiHandlerOptions {
|
|
49
|
+
tanstackAuth: Pick<TanStackStartAuth, "getSession" | "signIn" | "signOut">;
|
|
50
|
+
basePath?: string;
|
|
51
|
+
plugins?: readonly TanStackStartAuthApiPlugin[];
|
|
52
|
+
}
|
|
53
|
+
export interface TanStackStartAuthApiPluginContext {
|
|
54
|
+
request: Request;
|
|
55
|
+
method: string;
|
|
56
|
+
action: string;
|
|
57
|
+
readJson: () => Promise<unknown>;
|
|
58
|
+
json: (data: unknown, status?: number) => Response;
|
|
59
|
+
}
|
|
60
|
+
export interface TanStackStartAuthApiPlugin {
|
|
61
|
+
id: string;
|
|
62
|
+
handle: (context: TanStackStartAuthApiPluginContext) => Promise<Response | null> | Response | null;
|
|
63
|
+
}
|
|
64
|
+
export interface TanStackStartAuthApiPluginFactoryContext {
|
|
65
|
+
tanstackAuth: TanStackAuthForPluginFactory;
|
|
66
|
+
fetchers: TanStackStartConvexFetchers;
|
|
67
|
+
}
|
|
68
|
+
type TanStackAuthForPluginFactory = Pick<TanStackStartAuth, "getSession" | "getToken" | "signIn" | "signOut" | "requireSession" | "withSession">;
|
|
69
|
+
export interface TanStackStartAuthApiPluginFactory {
|
|
70
|
+
id: string;
|
|
71
|
+
create: (context: TanStackStartAuthApiPluginFactoryContext) => TanStackStartAuthApiPlugin;
|
|
72
|
+
}
|
|
73
|
+
export interface TanStackStartConvexFetchers {
|
|
74
|
+
fetchAuthQuery: <Query extends FunctionReference<"query", "public">>(fn: Query, args: FunctionArgs<Query>) => Promise<FunctionReturnType<Query>>;
|
|
75
|
+
fetchAuthMutation: <Mutation extends FunctionReference<"mutation", "public">>(fn: Mutation, args: FunctionArgs<Mutation>) => Promise<FunctionReturnType<Mutation>>;
|
|
76
|
+
fetchAuthAction: <Action extends FunctionReference<"action", "public">>(fn: Action, args: FunctionArgs<Action>) => Promise<FunctionReturnType<Action>>;
|
|
77
|
+
}
|
|
78
|
+
export interface TanStackStartConvexFetchersOptions {
|
|
79
|
+
tanstackAuth: Pick<TanStackStartAuth, "requireSession">;
|
|
80
|
+
convexUrl: string;
|
|
81
|
+
}
|
|
82
|
+
export interface TanStackStartConvexReactStart extends TanStackStartAuth, TanStackStartConvexFetchers {
|
|
83
|
+
handler: (request: Request) => Promise<Response>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* TanStack Start adapter.
|
|
87
|
+
*
|
|
88
|
+
* Exposes server-side auth handlers that read/write an HttpOnly session cookie
|
|
89
|
+
* and delegate auth logic to framework-agnostic SessionPrimitives.
|
|
90
|
+
*
|
|
91
|
+
* These handlers are meant to be wrapped by route-local `createServerFn(...)`
|
|
92
|
+
* so TanStack's server function transform runs in application code.
|
|
93
|
+
*/
|
|
94
|
+
export declare function createTanStackStartAuth(options: TanStackStartAuthOptions): TanStackStartAuth;
|
|
95
|
+
/** Build route-friendly session handlers from a TanStack auth instance. */
|
|
96
|
+
export declare function createTanStackStartSessionHandlers(tanstackAuth: TanStackStartAuth): TanStackStartSessionHandlers;
|
|
97
|
+
/** Build route-friendly auth mutation handlers from a TanStack auth instance. */
|
|
98
|
+
export declare function createTanStackStartAuthHandlers(tanstackAuth: TanStackStartAuth): TanStackStartAuthHandlers;
|
|
99
|
+
/**
|
|
100
|
+
* Build a Request handler for `/api/auth/*` routes in TanStack Start.
|
|
101
|
+
*
|
|
102
|
+
* Supported actions:
|
|
103
|
+
* - `GET /api/auth/session`
|
|
104
|
+
* - `POST /api/auth/sign-in-with-email`
|
|
105
|
+
* - `POST /api/auth/sign-out`
|
|
106
|
+
*/
|
|
107
|
+
export declare function createTanStackStartAuthApiHandler(options: TanStackStartAuthApiHandlerOptions): (request: Request) => Promise<Response>;
|
|
108
|
+
/**
|
|
109
|
+
* Build authenticated Convex fetch helpers for TanStack Start server functions.
|
|
110
|
+
* Each call resolves auth from cookies via `requireSession`.
|
|
111
|
+
*/
|
|
112
|
+
export declare function createTanStackStartConvexFetchers(options: TanStackStartConvexFetchersOptions): TanStackStartConvexFetchers;
|
|
113
|
+
/**
|
|
114
|
+
* Build TanStack Start auth handlers directly from Convex public action refs.
|
|
115
|
+
*
|
|
116
|
+
* This removes transport boilerplate in app code while keeping session logic
|
|
117
|
+
* fully based on Convex functions.
|
|
118
|
+
*/
|
|
119
|
+
export declare function createTanStackStartConvexAuth(options: TanStackStartConvexAuthOptions): TanStackStartAuth;
|
|
120
|
+
/**
|
|
121
|
+
* Better-auth-style TanStack Start helper for convex-zen.
|
|
122
|
+
*
|
|
123
|
+
* Returns a single object containing:
|
|
124
|
+
* - auth route `handler` (`/api/auth/*`)
|
|
125
|
+
* - token/session helpers (`getSession`, `getToken`, ...)
|
|
126
|
+
* - authenticated Convex fetchers (`fetchAuthQuery`, `fetchAuthMutation`, `fetchAuthAction`)
|
|
127
|
+
*/
|
|
128
|
+
export declare function convexZenReactStart(options: TanStackStartConvexReactStartOptions): TanStackStartConvexReactStart;
|
|
129
|
+
export {};
|
|
130
|
+
//# sourceMappingURL=tanstack-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start.d.ts","sourceRoot":"","sources":["../../src/client/tanstack-start.ts"],"names":[],"mappings":"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"}
|