better-auth-studio 1.0.79-beta.2 → 1.0.79-beta.3
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/README.md +86 -0
- package/dist/adapters/nextjs.d.ts +1 -14
- package/dist/adapters/nextjs.d.ts.map +1 -1
- package/dist/adapters/nextjs.js +13 -8
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/public/assets/{main-DtDccUVq.js → main-3NIBCudD.js} +1 -1
- package/dist/public/assets/main-DbXDm13A.css +1 -0
- package/dist/public/index.html +2 -2
- package/dist/routes.js +1 -0
- package/dist/routes.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/{main-DtDccUVq.js → main-3NIBCudD.js} +1 -1
- package/public/assets/main-DbXDm13A.css +1 -0
- package/public/index.html +2 -2
- package/dist/public/assets/main-wa9xKUE4.css +0 -1
- package/public/assets/main-wa9xKUE4.css +0 -1
package/README.md
CHANGED
|
@@ -278,6 +278,92 @@ pnpx better-auth-studio --version
|
|
|
278
278
|
# Show help
|
|
279
279
|
pnpx better-auth-studio --help
|
|
280
280
|
```
|
|
281
|
+
|
|
282
|
+
## 🏠 Self-Hosting (Beta)
|
|
283
|
+
|
|
284
|
+
> ⚠️ **Beta Feature**: Self-hosting is currently in beta. Please report any issues on GitHub.
|
|
285
|
+
|
|
286
|
+
Deploy Better Auth Studio alongside your application for production use.
|
|
287
|
+
|
|
288
|
+
### Setup
|
|
289
|
+
|
|
290
|
+
**Step 1: Initialize configuration**
|
|
291
|
+
```bash
|
|
292
|
+
pnpx better-auth-studio init
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
This creates a `studio.config.ts` file:
|
|
296
|
+
```typescript
|
|
297
|
+
import type { StudioConfig } from "better-auth-studio";
|
|
298
|
+
import { auth } from "./lib/auth";
|
|
299
|
+
|
|
300
|
+
const config: StudioConfig = {
|
|
301
|
+
auth,
|
|
302
|
+
basePath: "/api/studio",
|
|
303
|
+
metadata: {
|
|
304
|
+
title: "Admin Dashboard",
|
|
305
|
+
theme: "dark",
|
|
306
|
+
},
|
|
307
|
+
access: {
|
|
308
|
+
roles: ["admin"],
|
|
309
|
+
allowEmails: ["admin@example.com"],
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
export default config;
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Next.js (App Router)
|
|
317
|
+
|
|
318
|
+
The init command automatically creates `app/api/studio/[[...path]]/route.ts`:
|
|
319
|
+
```typescript
|
|
320
|
+
import { createStudioHandler } from "better-auth-studio/nextjs";
|
|
321
|
+
import studioConfig from "@/studio.config";
|
|
322
|
+
|
|
323
|
+
const handler = createStudioHandler(studioConfig);
|
|
324
|
+
|
|
325
|
+
export {
|
|
326
|
+
handler as GET,
|
|
327
|
+
handler as POST,
|
|
328
|
+
handler as PUT,
|
|
329
|
+
handler as DELETE,
|
|
330
|
+
handler as PATCH,
|
|
331
|
+
};
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Access at `http://localhost:3000/api/studio`
|
|
335
|
+
|
|
336
|
+
### Express
|
|
337
|
+
|
|
338
|
+
Add the studio handler to your server:
|
|
339
|
+
```typescript
|
|
340
|
+
import express from "express";
|
|
341
|
+
import { toNodeHandler } from "better-auth/node";
|
|
342
|
+
import { betterAuthStudio } from "better-auth-studio/express";
|
|
343
|
+
import { auth } from "./auth";
|
|
344
|
+
import studioConfig from "./studio.config";
|
|
345
|
+
|
|
346
|
+
const app = express();
|
|
347
|
+
|
|
348
|
+
app.use(express.json());
|
|
349
|
+
app.use("/api/studio", betterAuthStudio(studioConfig));
|
|
350
|
+
app.all("/api/auth/*", toNodeHandler(auth));
|
|
351
|
+
|
|
352
|
+
app.listen(3000);
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Access at `http://localhost:3000/api/studio`
|
|
356
|
+
|
|
357
|
+
### Configuration Options
|
|
358
|
+
|
|
359
|
+
| Option | Required | Description |
|
|
360
|
+
|--------|----------|-------------|
|
|
361
|
+
| `auth` | Yes | Your Better Auth instance |
|
|
362
|
+
| `basePath` | Yes | URL path where studio is mounted |
|
|
363
|
+
| `access.allowEmails` | No | Array of admin email addresses |
|
|
364
|
+
| `access.roles` | No | Array of allowed user roles |
|
|
365
|
+
| `metadata` | No | Custom branding (title, theme) |
|
|
366
|
+
|
|
281
367
|
## 📝 Development
|
|
282
368
|
|
|
283
369
|
### Running from Source
|
|
@@ -1,16 +1,3 @@
|
|
|
1
1
|
import type { StudioConfig } from '../types/handler.js';
|
|
2
|
-
|
|
3
|
-
method: string;
|
|
4
|
-
headers: Headers;
|
|
5
|
-
nextUrl: {
|
|
6
|
-
pathname: string;
|
|
7
|
-
search: string;
|
|
8
|
-
};
|
|
9
|
-
json: () => Promise<any>;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Next.js adapter for Better Auth Studio (App Router)
|
|
13
|
-
*/
|
|
14
|
-
export declare function createStudioHandler(config: StudioConfig): (request: NextRequest) => Promise<Response>;
|
|
15
|
-
export {};
|
|
2
|
+
export declare function createStudioHandler(config: StudioConfig): (request: Request) => Promise<Response>;
|
|
16
3
|
//# sourceMappingURL=nextjs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/adapters/nextjs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/adapters/nextjs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAW7F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,IACxC,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAanD"}
|
package/dist/adapters/nextjs.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { handleStudioRequest } from '../core/handler.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
function getUrlFromRequest(req) {
|
|
3
|
+
const nextUrl = req.nextUrl;
|
|
4
|
+
if (nextUrl && typeof nextUrl.pathname === 'string') {
|
|
5
|
+
return nextUrl.pathname + (nextUrl.search || '');
|
|
6
|
+
}
|
|
7
|
+
const url = new URL(req.url);
|
|
8
|
+
return url.pathname + url.search;
|
|
9
|
+
}
|
|
5
10
|
export function createStudioHandler(config) {
|
|
6
11
|
return async (request) => {
|
|
7
12
|
try {
|
|
8
|
-
const universalRequest = await
|
|
13
|
+
const universalRequest = await requestToUniversal(request);
|
|
9
14
|
const universalResponse = await handleStudioRequest(universalRequest, config);
|
|
10
|
-
return
|
|
15
|
+
return universalToResponse(universalResponse);
|
|
11
16
|
}
|
|
12
17
|
catch (error) {
|
|
13
18
|
console.error('Studio handler error:', error);
|
|
@@ -18,7 +23,7 @@ export function createStudioHandler(config) {
|
|
|
18
23
|
}
|
|
19
24
|
};
|
|
20
25
|
}
|
|
21
|
-
async function
|
|
26
|
+
async function requestToUniversal(req) {
|
|
22
27
|
let body;
|
|
23
28
|
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
24
29
|
const contentType = req.headers.get('content-type') || '';
|
|
@@ -34,13 +39,13 @@ async function nextToUniversal(req) {
|
|
|
34
39
|
headers[key] = value;
|
|
35
40
|
});
|
|
36
41
|
return {
|
|
37
|
-
url: req
|
|
42
|
+
url: getUrlFromRequest(req),
|
|
38
43
|
method: req.method,
|
|
39
44
|
headers,
|
|
40
45
|
body,
|
|
41
46
|
};
|
|
42
47
|
}
|
|
43
|
-
function
|
|
48
|
+
function universalToResponse(res) {
|
|
44
49
|
return new Response(res.body, {
|
|
45
50
|
status: res.status,
|
|
46
51
|
headers: res.headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,SAAS,iBAAiB,CAAC,GAAY;IACrC,MAAM,OAAO,GAAI,GAAW,CAAC,OAAO,CAAC;IACrC,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,OAAO,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,OAAO,KAAK,EAAE,OAAgB,EAAqB,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAC9E,OAAO,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,EAAE;gBACtE,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAY;IAC5C,IAAI,IAAS,CAAC;IACd,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QACjD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO;QACP,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAsB;IACjD,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;QAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC,CAAC;AACL,CAAC"}
|