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.
Files changed (67) hide show
  1. package/dist/adapters/express.d.ts +7 -0
  2. package/dist/adapters/express.d.ts.map +1 -0
  3. package/dist/adapters/express.js +40 -0
  4. package/dist/adapters/express.js.map +1 -0
  5. package/dist/adapters/nextjs.d.ts +16 -0
  6. package/dist/adapters/nextjs.d.ts.map +1 -0
  7. package/dist/adapters/nextjs.js +49 -0
  8. package/dist/adapters/nextjs.js.map +1 -0
  9. package/dist/auth-adapter.d.ts.map +1 -1
  10. package/dist/auth-adapter.js +3 -2
  11. package/dist/auth-adapter.js.map +1 -1
  12. package/dist/cli/commands/init.d.ts +2 -0
  13. package/dist/cli/commands/init.d.ts.map +1 -0
  14. package/dist/cli/commands/init.js +140 -0
  15. package/dist/cli/commands/init.js.map +1 -0
  16. package/dist/cli.js +13 -0
  17. package/dist/cli.js.map +1 -1
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +3 -0
  20. package/dist/config.js.map +1 -1
  21. package/dist/core/handler.d.ts +14 -0
  22. package/dist/core/handler.d.ts.map +1 -0
  23. package/dist/core/handler.js +256 -0
  24. package/dist/core/handler.js.map +1 -0
  25. package/dist/index.d.ts +4 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +3 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/public/assets/main-DtDccUVq.js +1155 -0
  30. package/dist/public/assets/main-wa9xKUE4.css +1 -0
  31. package/dist/public/favicon.svg +6 -0
  32. package/dist/public/index.html +14 -0
  33. package/dist/public/logo.png +0 -0
  34. package/dist/public/vite.svg +5 -0
  35. package/dist/routes/api-router.d.ts +21 -0
  36. package/dist/routes/api-router.d.ts.map +1 -0
  37. package/dist/routes/api-router.js +14 -0
  38. package/dist/routes/api-router.js.map +1 -0
  39. package/dist/routes.d.ts +20 -1
  40. package/dist/routes.d.ts.map +1 -1
  41. package/dist/routes.js +680 -178
  42. package/dist/routes.js.map +1 -1
  43. package/dist/studio.d.ts.map +1 -1
  44. package/dist/studio.js +28 -2
  45. package/dist/studio.js.map +1 -1
  46. package/dist/types/handler.d.ts +58 -0
  47. package/dist/types/handler.d.ts.map +1 -0
  48. package/dist/types/handler.js +4 -0
  49. package/dist/types/handler.js.map +1 -0
  50. package/dist/utils/html-injector.d.ts +30 -0
  51. package/dist/utils/html-injector.d.ts.map +1 -0
  52. package/dist/utils/html-injector.js +61 -0
  53. package/dist/utils/html-injector.js.map +1 -0
  54. package/dist/utils/session.d.ts +21 -0
  55. package/dist/utils/session.d.ts.map +1 -0
  56. package/dist/utils/session.js +51 -0
  57. package/dist/utils/session.js.map +1 -0
  58. package/frontend/package.json +64 -0
  59. package/package.json +35 -26
  60. package/public/assets/main-DtDccUVq.js +1155 -0
  61. package/public/assets/main-wa9xKUE4.css +1 -0
  62. package/public/favicon.svg +6 -0
  63. package/public/index.html +3 -3
  64. package/public/logo.png +0 -0
  65. package/public/vite.svg +5 -0
  66. package/public/assets/main-Du6zwcd_.css +0 -1
  67. 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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"}
@@ -0,0 +1,4 @@
1
+ export { handleStudioRequest } from './core/handler.js';
2
+ export type { StudioConfig, StudioMetadata, WindowStudioConfig } from './types/handler.js';
3
+ export { defineStudioConfig } from './types/handler.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { handleStudioRequest } from './core/handler.js';
2
+ export { defineStudioConfig } from './types/handler.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}