better-auth-studio 1.0.79-beta.1 → 1.0.79-beta.2
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/adapters/express.d.ts +7 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +40 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +16 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.js +49 -0
- package/dist/adapters/nextjs.js.map +1 -0
- package/dist/auth-adapter.d.ts.map +1 -1
- package/dist/auth-adapter.js +3 -2
- package/dist/auth-adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +140 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/core/handler.d.ts +14 -0
- package/dist/core/handler.d.ts.map +1 -0
- package/dist/core/handler.js +256 -0
- package/dist/core/handler.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/public/assets/main-DtDccUVq.js +1155 -0
- package/dist/public/assets/main-wa9xKUE4.css +1 -0
- package/dist/public/favicon.svg +6 -0
- package/dist/public/index.html +14 -0
- package/dist/public/logo.png +0 -0
- package/dist/public/vite.svg +5 -0
- package/dist/routes/api-router.d.ts +21 -0
- package/dist/routes/api-router.d.ts.map +1 -0
- package/dist/routes/api-router.js +14 -0
- package/dist/routes/api-router.js.map +1 -0
- package/dist/routes.d.ts +20 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +680 -178
- package/dist/routes.js.map +1 -1
- package/dist/studio.d.ts.map +1 -1
- package/dist/studio.js +28 -2
- package/dist/studio.js.map +1 -1
- package/dist/types/handler.d.ts +58 -0
- package/dist/types/handler.d.ts.map +1 -0
- package/dist/types/handler.js +4 -0
- package/dist/types/handler.js.map +1 -0
- package/dist/utils/html-injector.d.ts +30 -0
- package/dist/utils/html-injector.d.ts.map +1 -0
- package/dist/utils/html-injector.js +61 -0
- package/dist/utils/html-injector.js.map +1 -0
- package/dist/utils/session.d.ts +21 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js +51 -0
- package/dist/utils/session.js.map +1 -0
- package/frontend/package.json +64 -0
- package/package.json +35 -26
- package/public/assets/main-DtDccUVq.js +1155 -0
- package/public/assets/main-wa9xKUE4.css +1 -0
- package/public/favicon.svg +6 -0
- package/public/index.html +3 -3
- package/public/logo.png +0 -0
- package/public/vite.svg +5 -0
- package/public/assets/main-Du6zwcd_.css +0 -1
- package/public/assets/main-S8anH3U1.js +0 -1145
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from 'fs';
|
|
2
|
+
import { dirname, extname, join, resolve } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { serveIndexHtml as getIndexHtml } from '../utils/html-injector.js';
|
|
5
|
+
import { decryptSession, isSessionValid, STUDIO_COOKIE_NAME } from '../utils/session.js';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
/**
|
|
9
|
+
* Main handler - processes all studio requests (framework-agnostic)
|
|
10
|
+
*
|
|
11
|
+
* Route mapping:
|
|
12
|
+
* - CLI studio: basePath = ''
|
|
13
|
+
* - /api/users → API route /api/users
|
|
14
|
+
* - /users → SPA route (serves index.html)
|
|
15
|
+
* - Self-hosted: basePath = '/api/studio'
|
|
16
|
+
* - /api/studio/users (JSON request) → API route /api/users
|
|
17
|
+
* - /api/studio/users (HTML request) → SPA route (serves index.html)
|
|
18
|
+
*/
|
|
19
|
+
export async function handleStudioRequest(request, config) {
|
|
20
|
+
try {
|
|
21
|
+
const isSelfHosted = !!config.basePath;
|
|
22
|
+
const basePath = config.basePath || '';
|
|
23
|
+
let path = request.url;
|
|
24
|
+
if (isSelfHosted && basePath) {
|
|
25
|
+
path = path.replace(basePath, '') || '/';
|
|
26
|
+
}
|
|
27
|
+
if (path === '' || path === '/') {
|
|
28
|
+
path = '/';
|
|
29
|
+
}
|
|
30
|
+
if (path.startsWith('/assets/') ||
|
|
31
|
+
path === '/vite.svg' ||
|
|
32
|
+
path === '/favicon.svg' ||
|
|
33
|
+
path === '/logo.png') {
|
|
34
|
+
return handleStaticFile(path, config);
|
|
35
|
+
}
|
|
36
|
+
if (path === '/') {
|
|
37
|
+
return handleStaticFile(path, config);
|
|
38
|
+
}
|
|
39
|
+
const spaRoutes = ['/login', '/access-denied'];
|
|
40
|
+
if (spaRoutes.some((r) => path === r || path.startsWith(r + '?'))) {
|
|
41
|
+
return handleStaticFile(path, config);
|
|
42
|
+
}
|
|
43
|
+
if (path.startsWith('/api/')) {
|
|
44
|
+
if (isSelfHosted && isProtectedApiPath(path)) {
|
|
45
|
+
const sessionResult = verifyStudioSession(request, config);
|
|
46
|
+
if (!sessionResult.valid) {
|
|
47
|
+
return jsonResponse(401, { error: 'Unauthorized', message: sessionResult.error });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return await handleApiRoute(request, path, config);
|
|
51
|
+
}
|
|
52
|
+
// Self-hosted mode: determine if this is an API route or SPA navigation
|
|
53
|
+
if (isSelfHosted) {
|
|
54
|
+
// Check Accept header to distinguish API calls from browser navigation
|
|
55
|
+
const acceptHeader = request.headers['accept'] || request.headers['Accept'] || '';
|
|
56
|
+
const wantsJson = acceptHeader.includes('application/json') ||
|
|
57
|
+
acceptHeader === '*/*' ||
|
|
58
|
+
!acceptHeader.includes('text/html');
|
|
59
|
+
// If client wants JSON or this looks like an API call, route to API
|
|
60
|
+
// /users → /api/users, /config → /api/config
|
|
61
|
+
if (wantsJson) {
|
|
62
|
+
const apiPath = '/api' + path;
|
|
63
|
+
if (isProtectedApiPath(apiPath)) {
|
|
64
|
+
const sessionResult = verifyStudioSession(request, config);
|
|
65
|
+
if (!sessionResult.valid) {
|
|
66
|
+
return jsonResponse(401, { error: 'Unauthorized', message: sessionResult.error });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return await handleApiRoute(request, apiPath, config);
|
|
70
|
+
}
|
|
71
|
+
// Otherwise, it's a browser navigation - serve SPA
|
|
72
|
+
return handleStaticFile(path, config);
|
|
73
|
+
}
|
|
74
|
+
// Fallback: serve index.html for SPA routing
|
|
75
|
+
return handleStaticFile(path, config);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Studio handler error:', error);
|
|
79
|
+
return jsonResponse(500, {
|
|
80
|
+
error: 'Internal server error',
|
|
81
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function getSessionSecret(config) {
|
|
86
|
+
return (config.access?.secret ||
|
|
87
|
+
config.auth?.options?.secret ||
|
|
88
|
+
process.env.BETTER_AUTH_SECRET ||
|
|
89
|
+
'studio-default-secret');
|
|
90
|
+
}
|
|
91
|
+
function parseCookies(cookieHeader) {
|
|
92
|
+
if (!cookieHeader)
|
|
93
|
+
return {};
|
|
94
|
+
const cookies = {};
|
|
95
|
+
cookieHeader.split(';').forEach((part) => {
|
|
96
|
+
const [name, ...rest] = part.trim().split('=');
|
|
97
|
+
if (name) {
|
|
98
|
+
cookies[name] = rest.join('=');
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return cookies;
|
|
102
|
+
}
|
|
103
|
+
function verifyStudioSession(request, config) {
|
|
104
|
+
const cookieHeader = request.headers['cookie'] || request.headers['Cookie'];
|
|
105
|
+
const cookies = parseCookies(cookieHeader);
|
|
106
|
+
const sessionCookie = cookies[STUDIO_COOKIE_NAME];
|
|
107
|
+
if (!sessionCookie) {
|
|
108
|
+
return { valid: false, error: 'No session cookie' };
|
|
109
|
+
}
|
|
110
|
+
const session = decryptSession(sessionCookie, getSessionSecret(config));
|
|
111
|
+
if (!isSessionValid(session)) {
|
|
112
|
+
return { valid: false, error: 'Session expired' };
|
|
113
|
+
}
|
|
114
|
+
return { valid: true, session };
|
|
115
|
+
}
|
|
116
|
+
function isProtectedApiPath(path) {
|
|
117
|
+
const publicPaths = [
|
|
118
|
+
'/api/auth/sign-in',
|
|
119
|
+
'/api/auth/session',
|
|
120
|
+
'/api/auth/logout',
|
|
121
|
+
'/api/auth/verify',
|
|
122
|
+
'/api/auth/oauth',
|
|
123
|
+
'/api/health',
|
|
124
|
+
];
|
|
125
|
+
return !publicPaths.some((p) => path.startsWith(p));
|
|
126
|
+
}
|
|
127
|
+
async function handleApiRoute(request, path, config) {
|
|
128
|
+
const { routeApiRequest } = await import('../routes/api-router.js');
|
|
129
|
+
try {
|
|
130
|
+
const result = await routeApiRequest({
|
|
131
|
+
path: path,
|
|
132
|
+
method: request.method,
|
|
133
|
+
headers: request.headers,
|
|
134
|
+
body: request.body,
|
|
135
|
+
auth: config.auth,
|
|
136
|
+
basePath: config.basePath || '/api/studio',
|
|
137
|
+
accessConfig: config.access,
|
|
138
|
+
});
|
|
139
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
140
|
+
if (result.cookies && result.cookies.length > 0) {
|
|
141
|
+
const cookieStrings = result.cookies.map((c) => {
|
|
142
|
+
let cookie = `${c.name}=${c.value}`;
|
|
143
|
+
if (c.options.httpOnly)
|
|
144
|
+
cookie += '; HttpOnly';
|
|
145
|
+
if (c.options.secure)
|
|
146
|
+
cookie += '; Secure';
|
|
147
|
+
if (c.options.sameSite)
|
|
148
|
+
cookie += `; SameSite=${c.options.sameSite}`;
|
|
149
|
+
if (c.options.maxAge !== undefined)
|
|
150
|
+
cookie += `; Max-Age=${Math.floor(c.options.maxAge / 1000)}`;
|
|
151
|
+
if (c.options.path)
|
|
152
|
+
cookie += `; Path=${c.options.path}`;
|
|
153
|
+
return cookie;
|
|
154
|
+
});
|
|
155
|
+
headers['Set-Cookie'] = cookieStrings.join(', ');
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
status: result.status,
|
|
159
|
+
headers,
|
|
160
|
+
body: JSON.stringify(result.data),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('API route error:', error);
|
|
165
|
+
return jsonResponse(500, { error: 'Internal server error' });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function handleStaticFile(path, config) {
|
|
169
|
+
let publicDir;
|
|
170
|
+
const distPublic = resolve(__dirname, '../public');
|
|
171
|
+
if (existsSync(distPublic)) {
|
|
172
|
+
publicDir = distPublic;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
// Fallback to source location
|
|
176
|
+
const sourcePublic = resolve(__dirname, '../../public');
|
|
177
|
+
if (existsSync(sourcePublic)) {
|
|
178
|
+
publicDir = sourcePublic;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
return jsonResponse(500, {
|
|
182
|
+
error: 'Public directory not found',
|
|
183
|
+
paths: {
|
|
184
|
+
tried: [distPublic, sourcePublic],
|
|
185
|
+
dirname: __dirname,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return handleStaticFileFromDir(path, publicDir, config);
|
|
191
|
+
}
|
|
192
|
+
function handleStaticFileFromDir(path, publicDir, config) {
|
|
193
|
+
if (path === '/' || path === '') {
|
|
194
|
+
return serveIndexHtml(publicDir, config);
|
|
195
|
+
}
|
|
196
|
+
const filePath = join(publicDir, path);
|
|
197
|
+
if (existsSync(filePath) && statSync(filePath).isFile()) {
|
|
198
|
+
const content = readFileSync(filePath);
|
|
199
|
+
const contentType = getContentType(extname(filePath));
|
|
200
|
+
return {
|
|
201
|
+
status: 200,
|
|
202
|
+
headers: {
|
|
203
|
+
'Content-Type': contentType,
|
|
204
|
+
'Cache-Control': getCacheControl(path),
|
|
205
|
+
},
|
|
206
|
+
body: content,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return serveIndexHtml(publicDir, config);
|
|
210
|
+
}
|
|
211
|
+
function serveIndexHtml(publicDir, config) {
|
|
212
|
+
const html = getIndexHtml(publicDir, {
|
|
213
|
+
basePath: config.basePath || '/api/studio', // Default basePath for self-hosted
|
|
214
|
+
metadata: config.metadata,
|
|
215
|
+
});
|
|
216
|
+
return {
|
|
217
|
+
status: 200,
|
|
218
|
+
headers: {
|
|
219
|
+
'Content-Type': 'text/html',
|
|
220
|
+
'Cache-Control': 'no-cache',
|
|
221
|
+
},
|
|
222
|
+
body: html,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function jsonResponse(status, data) {
|
|
226
|
+
return {
|
|
227
|
+
status,
|
|
228
|
+
headers: { 'Content-Type': 'application/json' },
|
|
229
|
+
body: JSON.stringify(data),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function getContentType(ext) {
|
|
233
|
+
const types = {
|
|
234
|
+
'.html': 'text/html',
|
|
235
|
+
'.js': 'application/javascript',
|
|
236
|
+
'.css': 'text/css',
|
|
237
|
+
'.json': 'application/json',
|
|
238
|
+
'.png': 'image/png',
|
|
239
|
+
'.jpg': 'image/jpeg',
|
|
240
|
+
'.jpeg': 'image/jpeg',
|
|
241
|
+
'.svg': 'image/svg+xml',
|
|
242
|
+
'.ico': 'image/x-icon',
|
|
243
|
+
'.woff': 'font/woff',
|
|
244
|
+
'.woff2': 'font/woff2',
|
|
245
|
+
'.ttf': 'font/ttf',
|
|
246
|
+
};
|
|
247
|
+
return types[ext] || 'application/octet-stream';
|
|
248
|
+
}
|
|
249
|
+
function getCacheControl(path) {
|
|
250
|
+
// Cache static assets aggressively
|
|
251
|
+
if (path.match(/\.(js|css|png|jpg|jpeg|svg|woff|woff2|ttf)$/)) {
|
|
252
|
+
return 'public, max-age=31536000, immutable';
|
|
253
|
+
}
|
|
254
|
+
return 'no-cache';
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/core/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|