better-auth-studio 1.0.79-beta.9 → 1.1.1-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/README.md +10 -0
- package/dist/adapters/astro.d.ts +22 -0
- package/dist/adapters/astro.d.ts.map +1 -0
- package/dist/adapters/astro.js +95 -0
- package/dist/adapters/astro.js.map +1 -0
- package/dist/adapters/elysia.d.ts +7 -0
- package/dist/adapters/elysia.d.ts.map +1 -0
- package/dist/adapters/elysia.js +101 -0
- package/dist/adapters/elysia.js.map +1 -0
- package/dist/adapters/hono.d.ts +7 -0
- package/dist/adapters/hono.d.ts.map +1 -0
- package/dist/adapters/hono.js +78 -0
- package/dist/adapters/hono.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +1 -1
- package/dist/adapters/nextjs.d.ts.map +1 -1
- package/dist/adapters/nextjs.js +1 -1
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nuxt.d.ts +19 -0
- package/dist/adapters/nuxt.d.ts.map +1 -0
- package/dist/adapters/nuxt.js +99 -0
- package/dist/adapters/nuxt.js.map +1 -0
- package/dist/adapters/remix.d.ts +26 -0
- package/dist/adapters/remix.d.ts.map +1 -0
- package/dist/adapters/remix.js +98 -0
- package/dist/adapters/remix.js.map +1 -0
- package/dist/adapters/solid-start.d.ts +30 -0
- package/dist/adapters/solid-start.d.ts.map +1 -0
- package/dist/adapters/solid-start.js +96 -0
- package/dist/adapters/solid-start.js.map +1 -0
- package/dist/adapters/svelte-kit.d.ts +36 -0
- package/dist/adapters/svelte-kit.d.ts.map +1 -0
- package/dist/adapters/svelte-kit.js +108 -0
- package/dist/adapters/svelte-kit.js.map +1 -0
- package/dist/adapters/tanstack-start.d.ts +32 -0
- package/dist/adapters/tanstack-start.d.ts.map +1 -0
- package/dist/adapters/tanstack-start.js +102 -0
- package/dist/adapters/tanstack-start.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +124 -9
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/handler.d.ts.map +1 -1
- package/dist/core/handler.js +214 -77
- package/dist/core/handler.js.map +1 -1
- package/dist/data.d.ts +1 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +3 -7
- package/dist/data.js.map +1 -1
- package/dist/public/assets/main-COYGEnAm.js +1150 -0
- package/dist/public/assets/main-s8HrXBxq.css +1 -0
- package/dist/public/index.html +2 -2
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +758 -150
- package/dist/routes.js.map +1 -1
- package/dist/studio.d.ts.map +1 -1
- package/dist/studio.js +15 -2
- package/dist/studio.js.map +1 -1
- package/dist/utils/html-injector.js +44 -1
- package/dist/utils/html-injector.js.map +1 -1
- package/package.json +45 -34
- package/public/assets/main-COYGEnAm.js +1150 -0
- package/public/assets/main-s8HrXBxq.css +1 -0
- package/public/index.html +2 -2
- package/scripts/postinstall.js +21 -14
- package/data/GeoLite2-City.mmdb +0 -0
- package/data/GeoLite2-City.tar.gz +0 -1
- package/dist/public/assets/main-3NIBCudD.js +0 -1155
- package/dist/public/assets/main-DbXDm13A.css +0 -1
- package/public/assets/main-3NIBCudD.js +0 -1155
- package/public/assets/main-DbXDm13A.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remix.js","sourceRoot":"","sources":["../../src/adapters/remix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAwB,EAAqB,EAAE;QACpE,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACrE,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC3C,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,uBAAuB,CACpC,EAAE,OAAO,EAAwB,EACjC,MAAoB;IAEpB,IAAI,IAAS,CAAC;IACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;aAAM,IACL,WAAW,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACzD,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC3C,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC1C,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,GAAG,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC;IAClD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAErF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IAExB,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IACtD,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;IAExC,OAAO;QACL,GAAG,EAAE,aAAa;QAClB,MAAM,EAAE,MAAM;QACd,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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { StudioConfig } from '../types/handler.js';
|
|
2
|
+
type ApiEvent = {
|
|
3
|
+
request: Request;
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
locals: Record<string, unknown>;
|
|
6
|
+
env: Record<string, unknown>;
|
|
7
|
+
fetch: typeof fetch;
|
|
8
|
+
url: URL;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* SolidStart adapter for Better Auth Studio
|
|
12
|
+
*
|
|
13
|
+
* Usage in a catch-all route handler:
|
|
14
|
+
* ```ts
|
|
15
|
+
* // src/routes/api/studio/[...path].ts
|
|
16
|
+
* import { betterAuthStudio } from 'better-auth-studio/solid-start';
|
|
17
|
+
* import studioConfig from '../../../../studio.config';
|
|
18
|
+
*
|
|
19
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
20
|
+
*
|
|
21
|
+
* export const GET = handler;
|
|
22
|
+
* export const POST = handler;
|
|
23
|
+
* export const PUT = handler;
|
|
24
|
+
* export const DELETE = handler;
|
|
25
|
+
* export const PATCH = handler;
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function betterAuthStudio(config: StudioConfig): (event: ApiEvent) => Promise<Response>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=solid-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solid-start.d.ts","sourceRoot":"","sources":["../../src/adapters/solid-start.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,OAAO,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAAC,CAalD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { handleStudioRequest } from '../core/handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* SolidStart adapter for Better Auth Studio
|
|
4
|
+
*
|
|
5
|
+
* Usage in a catch-all route handler:
|
|
6
|
+
* ```ts
|
|
7
|
+
* // src/routes/api/studio/[...path].ts
|
|
8
|
+
* import { betterAuthStudio } from 'better-auth-studio/solid-start';
|
|
9
|
+
* import studioConfig from '../../../../studio.config';
|
|
10
|
+
*
|
|
11
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
12
|
+
*
|
|
13
|
+
* export const GET = handler;
|
|
14
|
+
* export const POST = handler;
|
|
15
|
+
* export const PUT = handler;
|
|
16
|
+
* export const DELETE = handler;
|
|
17
|
+
* export const PATCH = handler;
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function betterAuthStudio(config) {
|
|
21
|
+
return async (event) => {
|
|
22
|
+
try {
|
|
23
|
+
const universalReq = await convertSolidStartToUniversal(event, config);
|
|
24
|
+
const universalRes = await handleStudioRequest(universalReq, config);
|
|
25
|
+
return universalToResponse(universalRes);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error('Studio handler error:', error);
|
|
29
|
+
return new Response(JSON.stringify({ error: 'Internal server error' }), {
|
|
30
|
+
status: 500,
|
|
31
|
+
headers: { 'Content-Type': 'application/json' },
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async function convertSolidStartToUniversal(event, config) {
|
|
37
|
+
const request = event.request;
|
|
38
|
+
let body;
|
|
39
|
+
const method = request.method;
|
|
40
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
41
|
+
const contentType = request.headers.get('content-type') || '';
|
|
42
|
+
if (contentType.includes('application/json')) {
|
|
43
|
+
try {
|
|
44
|
+
body = await request.json();
|
|
45
|
+
}
|
|
46
|
+
catch { }
|
|
47
|
+
}
|
|
48
|
+
else if (contentType.includes('application/x-www-form-urlencoded') ||
|
|
49
|
+
contentType.includes('multipart/form-data')) {
|
|
50
|
+
try {
|
|
51
|
+
const formData = await request.formData();
|
|
52
|
+
body = Object.fromEntries(formData.entries());
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
try {
|
|
58
|
+
const text = await request.text();
|
|
59
|
+
if (text && text.trim()) {
|
|
60
|
+
try {
|
|
61
|
+
body = JSON.parse(text);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
body = text;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch { }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const headers = {};
|
|
72
|
+
request.headers.forEach((value, key) => {
|
|
73
|
+
headers[key] = value;
|
|
74
|
+
});
|
|
75
|
+
const basePath = config.basePath || '/api/studio';
|
|
76
|
+
const normalizedBasePath = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
|
|
77
|
+
const url = new URL(request.url);
|
|
78
|
+
let path = url.pathname;
|
|
79
|
+
if (path.startsWith(normalizedBasePath)) {
|
|
80
|
+
path = path.slice(normalizedBasePath.length) || '/';
|
|
81
|
+
}
|
|
82
|
+
const pathWithQuery = path + url.search;
|
|
83
|
+
return {
|
|
84
|
+
url: pathWithQuery,
|
|
85
|
+
method: method,
|
|
86
|
+
headers,
|
|
87
|
+
body,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function universalToResponse(res) {
|
|
91
|
+
return new Response(res.body, {
|
|
92
|
+
status: res.status,
|
|
93
|
+
headers: res.headers,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=solid-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solid-start.js","sourceRoot":"","sources":["../../src/adapters/solid-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { RequestEvent } from '@sveltejs/kit';
|
|
2
|
+
import type { StudioConfig } from '../types/handler.js';
|
|
3
|
+
/**
|
|
4
|
+
* SvelteKit adapter for Better Auth Studio
|
|
5
|
+
*
|
|
6
|
+
* Usage in a catch-all route handler:
|
|
7
|
+
* ```ts
|
|
8
|
+
* // src/routes/api/studio/[...path]/+server.ts
|
|
9
|
+
* import { betterAuthStudio } from 'better-auth-studio/svelte-kit';
|
|
10
|
+
* import studioConfig from '../../../../studio.config';
|
|
11
|
+
*
|
|
12
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
13
|
+
*
|
|
14
|
+
* export async function GET(event) {
|
|
15
|
+
* return handler(event);
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* export async function POST(event) {
|
|
19
|
+
* return handler(event);
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* export async function PUT(event) {
|
|
23
|
+
* return handler(event);
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* export async function DELETE(event) {
|
|
27
|
+
* return handler(event);
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* export async function PATCH(event) {
|
|
31
|
+
* return handler(event);
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function betterAuthStudio(config: StudioConfig): (event: RequestEvent) => Promise<Response>;
|
|
36
|
+
//# sourceMappingURL=svelte-kit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte-kit.d.ts","sourceRoot":"","sources":["../../src/adapters/svelte-kit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,OAAO,YAAY,KAAG,OAAO,CAAC,QAAQ,CAAC,CAatD"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { handleStudioRequest } from '../core/handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* SvelteKit adapter for Better Auth Studio
|
|
4
|
+
*
|
|
5
|
+
* Usage in a catch-all route handler:
|
|
6
|
+
* ```ts
|
|
7
|
+
* // src/routes/api/studio/[...path]/+server.ts
|
|
8
|
+
* import { betterAuthStudio } from 'better-auth-studio/svelte-kit';
|
|
9
|
+
* import studioConfig from '../../../../studio.config';
|
|
10
|
+
*
|
|
11
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
12
|
+
*
|
|
13
|
+
* export async function GET(event) {
|
|
14
|
+
* return handler(event);
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* export async function POST(event) {
|
|
18
|
+
* return handler(event);
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* export async function PUT(event) {
|
|
22
|
+
* return handler(event);
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* export async function DELETE(event) {
|
|
26
|
+
* return handler(event);
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* export async function PATCH(event) {
|
|
30
|
+
* return handler(event);
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function betterAuthStudio(config) {
|
|
35
|
+
return async (event) => {
|
|
36
|
+
try {
|
|
37
|
+
const universalReq = await convertSvelteKitToUniversal(event, config);
|
|
38
|
+
const universalRes = await handleStudioRequest(universalReq, config);
|
|
39
|
+
return universalToResponse(universalRes);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error('Studio handler error:', error);
|
|
43
|
+
return new Response(JSON.stringify({ error: 'Internal server error' }), {
|
|
44
|
+
status: 500,
|
|
45
|
+
headers: { 'Content-Type': 'application/json' },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function convertSvelteKitToUniversal(event, config) {
|
|
51
|
+
let body;
|
|
52
|
+
const method = event.request.method;
|
|
53
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
54
|
+
const contentType = event.request.headers.get('content-type') || '';
|
|
55
|
+
if (contentType.includes('application/json')) {
|
|
56
|
+
try {
|
|
57
|
+
body = await event.request.json();
|
|
58
|
+
}
|
|
59
|
+
catch { }
|
|
60
|
+
}
|
|
61
|
+
else if (contentType.includes('application/x-www-form-urlencoded') ||
|
|
62
|
+
contentType.includes('multipart/form-data')) {
|
|
63
|
+
try {
|
|
64
|
+
const formData = await event.request.formData();
|
|
65
|
+
body = Object.fromEntries(formData.entries());
|
|
66
|
+
}
|
|
67
|
+
catch { }
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
try {
|
|
71
|
+
const text = await event.request.text();
|
|
72
|
+
if (text && text.trim()) {
|
|
73
|
+
try {
|
|
74
|
+
body = JSON.parse(text);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
body = text;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch { }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const headers = {};
|
|
85
|
+
event.request.headers.forEach((value, key) => {
|
|
86
|
+
headers[key] = value;
|
|
87
|
+
});
|
|
88
|
+
const basePath = config.basePath || '/api/studio';
|
|
89
|
+
const normalizedBasePath = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
|
|
90
|
+
let path = event.url.pathname;
|
|
91
|
+
if (path.startsWith(normalizedBasePath)) {
|
|
92
|
+
path = path.slice(normalizedBasePath.length) || '/';
|
|
93
|
+
}
|
|
94
|
+
const pathWithQuery = path + event.url.search;
|
|
95
|
+
return {
|
|
96
|
+
url: pathWithQuery,
|
|
97
|
+
method: method,
|
|
98
|
+
headers,
|
|
99
|
+
body,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function universalToResponse(res) {
|
|
103
|
+
return new Response(res.body, {
|
|
104
|
+
status: res.status,
|
|
105
|
+
headers: res.headers,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=svelte-kit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte-kit.js","sourceRoot":"","sources":["../../src/adapters/svelte-kit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StudioConfig } from '../types/handler.js';
|
|
2
|
+
type TanStackStartHandlerContext = {
|
|
3
|
+
request: Request;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* TanStack Start adapter for Better Auth Studio
|
|
7
|
+
*
|
|
8
|
+
* Usage in a server route:
|
|
9
|
+
* ```ts
|
|
10
|
+
* // src/routes/api/studio/$.ts
|
|
11
|
+
* import { createFileRoute } from '@tanstack/react-router';
|
|
12
|
+
* import { betterAuthStudio } from 'better-auth-studio/tanstack-start';
|
|
13
|
+
* import studioConfig from '../../../../studio.config';
|
|
14
|
+
*
|
|
15
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
16
|
+
*
|
|
17
|
+
* export const Route = createFileRoute('/api/studio/$')({
|
|
18
|
+
* server: {
|
|
19
|
+
* handlers: {
|
|
20
|
+
* GET: handler,
|
|
21
|
+
* POST: handler,
|
|
22
|
+
* PUT: handler,
|
|
23
|
+
* DELETE: handler,
|
|
24
|
+
* PATCH: handler,
|
|
25
|
+
* },
|
|
26
|
+
* },
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function betterAuthStudio(config: StudioConfig): ({ request }: TanStackStartHandlerContext) => Promise<Response>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=tanstack-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start.d.ts","sourceRoot":"","sources":["../../src/adapters/tanstack-start.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAG7F,KAAK,2BAA2B,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,aAAa,2BAA2B,KAAG,OAAO,CAAC,QAAQ,CAAC,CAa3E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { handleStudioRequest } from '../core/handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* TanStack Start adapter for Better Auth Studio
|
|
4
|
+
*
|
|
5
|
+
* Usage in a server route:
|
|
6
|
+
* ```ts
|
|
7
|
+
* // src/routes/api/studio/$.ts
|
|
8
|
+
* import { createFileRoute } from '@tanstack/react-router';
|
|
9
|
+
* import { betterAuthStudio } from 'better-auth-studio/tanstack-start';
|
|
10
|
+
* import studioConfig from '../../../../studio.config';
|
|
11
|
+
*
|
|
12
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
13
|
+
*
|
|
14
|
+
* export const Route = createFileRoute('/api/studio/$')({
|
|
15
|
+
* server: {
|
|
16
|
+
* handlers: {
|
|
17
|
+
* GET: handler,
|
|
18
|
+
* POST: handler,
|
|
19
|
+
* PUT: handler,
|
|
20
|
+
* DELETE: handler,
|
|
21
|
+
* PATCH: handler,
|
|
22
|
+
* },
|
|
23
|
+
* },
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function betterAuthStudio(config) {
|
|
28
|
+
return async ({ request }) => {
|
|
29
|
+
try {
|
|
30
|
+
const universalReq = await convertTanStackStartToUniversal(request, config);
|
|
31
|
+
const universalRes = await handleStudioRequest(universalReq, config);
|
|
32
|
+
return universalToResponse(universalRes);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('Studio handler error:', error);
|
|
36
|
+
return new Response(JSON.stringify({ error: 'Internal server error' }), {
|
|
37
|
+
status: 500,
|
|
38
|
+
headers: { 'Content-Type': 'application/json' },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function convertTanStackStartToUniversal(request, config) {
|
|
44
|
+
let body;
|
|
45
|
+
const method = request.method;
|
|
46
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
47
|
+
const contentType = request.headers.get('content-type') || '';
|
|
48
|
+
if (contentType.includes('application/json')) {
|
|
49
|
+
try {
|
|
50
|
+
body = await request.json();
|
|
51
|
+
}
|
|
52
|
+
catch { }
|
|
53
|
+
}
|
|
54
|
+
else if (contentType.includes('application/x-www-form-urlencoded') ||
|
|
55
|
+
contentType.includes('multipart/form-data')) {
|
|
56
|
+
try {
|
|
57
|
+
const formData = await request.formData();
|
|
58
|
+
body = Object.fromEntries(formData.entries());
|
|
59
|
+
}
|
|
60
|
+
catch { }
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
try {
|
|
64
|
+
const text = await request.text();
|
|
65
|
+
if (text && text.trim()) {
|
|
66
|
+
try {
|
|
67
|
+
body = JSON.parse(text);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
body = text;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch { }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const headers = {};
|
|
78
|
+
request.headers.forEach((value, key) => {
|
|
79
|
+
headers[key] = value;
|
|
80
|
+
});
|
|
81
|
+
const basePath = config.basePath || '/api/studio';
|
|
82
|
+
const normalizedBasePath = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
|
|
83
|
+
const url = new URL(request.url);
|
|
84
|
+
let path = url.pathname;
|
|
85
|
+
if (path.startsWith(normalizedBasePath)) {
|
|
86
|
+
path = path.slice(normalizedBasePath.length) || '/';
|
|
87
|
+
}
|
|
88
|
+
const pathWithQuery = path + url.search;
|
|
89
|
+
return {
|
|
90
|
+
url: pathWithQuery,
|
|
91
|
+
method: method,
|
|
92
|
+
headers,
|
|
93
|
+
body,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function universalToResponse(res) {
|
|
97
|
+
return new Response(res.body, {
|
|
98
|
+
status: res.status,
|
|
99
|
+
headers: res.headers,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=tanstack-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-start.js","sourceRoot":"","sources":["../../src/adapters/tanstack-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,iBAkB9D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
-
export async function initCommand() {
|
|
3
|
+
export async function initCommand(options) {
|
|
4
4
|
console.log('🚀 Initializing Better Auth Studio...\n');
|
|
5
5
|
const framework = detectFramework();
|
|
6
6
|
console.log('🔍 Detected framework:', framework);
|
|
@@ -8,7 +8,10 @@ export async function initCommand() {
|
|
|
8
8
|
console.log('✅ Created config:', configPath);
|
|
9
9
|
const basePath = '/api/studio';
|
|
10
10
|
if (framework === 'nextjs') {
|
|
11
|
-
await setupNextJS(basePath);
|
|
11
|
+
await setupNextJS(basePath, options?.apiDir);
|
|
12
|
+
}
|
|
13
|
+
else if (framework === 'sveltekit') {
|
|
14
|
+
await setupSvelteKit(basePath);
|
|
12
15
|
}
|
|
13
16
|
else {
|
|
14
17
|
showManualInstructions(framework, basePath);
|
|
@@ -20,7 +23,13 @@ async function createStudioConfig(framework) {
|
|
|
20
23
|
console.log('⚠️ studio.config.ts already exists, skipping...');
|
|
21
24
|
return configPath;
|
|
22
25
|
}
|
|
23
|
-
|
|
26
|
+
let authImportPath = './src/auth';
|
|
27
|
+
if (framework === 'nextjs') {
|
|
28
|
+
authImportPath = '@/lib/auth';
|
|
29
|
+
}
|
|
30
|
+
else if (framework === 'sveltekit') {
|
|
31
|
+
authImportPath = '$lib/auth';
|
|
32
|
+
}
|
|
24
33
|
const configContent = `import type { StudioConfig } from 'better-auth-studio';
|
|
25
34
|
import { auth } from '${authImportPath}';
|
|
26
35
|
|
|
@@ -38,9 +47,27 @@ export default config;
|
|
|
38
47
|
writeFileSync(configPath, configContent, 'utf-8');
|
|
39
48
|
return configPath;
|
|
40
49
|
}
|
|
41
|
-
|
|
50
|
+
function detectNextJSAppDir() {
|
|
51
|
+
if (existsSync(join(process.cwd(), 'src', 'app'))) {
|
|
52
|
+
return 'src/app';
|
|
53
|
+
}
|
|
54
|
+
if (existsSync(join(process.cwd(), 'app'))) {
|
|
55
|
+
return 'app';
|
|
56
|
+
}
|
|
57
|
+
return 'app';
|
|
58
|
+
}
|
|
59
|
+
async function setupNextJS(basePath, customApiDir) {
|
|
42
60
|
const segments = basePath.split('/').filter(Boolean);
|
|
43
|
-
|
|
61
|
+
let appDir;
|
|
62
|
+
if (customApiDir) {
|
|
63
|
+
appDir = customApiDir;
|
|
64
|
+
console.log(`📂 Using custom API directory: ${appDir}`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
appDir = detectNextJSAppDir();
|
|
68
|
+
console.log(`📂 Auto-detected app directory: ${appDir}`);
|
|
69
|
+
}
|
|
70
|
+
const routeDir = join(process.cwd(), appDir, ...segments, '[[...path]]');
|
|
44
71
|
const routeFile = join(routeDir, 'route.ts');
|
|
45
72
|
if (existsSync(routeFile)) {
|
|
46
73
|
console.log('⚠️ Route file already exists:', routeFile);
|
|
@@ -51,14 +78,18 @@ async function setupNextJS(basePath) {
|
|
|
51
78
|
writeFileSync(routeFile, code, 'utf-8');
|
|
52
79
|
console.log('✅ Generated route file:', routeFile);
|
|
53
80
|
}
|
|
81
|
+
const relativePath = `${appDir}${basePath}/[[...path]]/route.ts`;
|
|
54
82
|
console.log(`
|
|
55
83
|
╔═══════════════════════════════════════════════════════════════╗
|
|
56
|
-
║ ✅ Next.js Setup Complete!
|
|
84
|
+
║ ✅ Next.js Setup Complete! ║
|
|
57
85
|
╠═══════════════════════════════════════════════════════════════╣
|
|
58
86
|
║ ║
|
|
59
87
|
║ 📁 Files created: ║
|
|
60
88
|
║ • studio.config.ts ║
|
|
61
|
-
║ •
|
|
89
|
+
║ • ${relativePath} ║
|
|
90
|
+
║ ║
|
|
91
|
+
║ ⚠️ Important: Ensure better-auth-studio is in dependencies ║
|
|
92
|
+
║ (not devDependencies) for production deployments ║
|
|
62
93
|
║ ║
|
|
63
94
|
║ 🚀 Start your app: ║
|
|
64
95
|
║ pnpm dev ║
|
|
@@ -70,10 +101,10 @@ async function setupNextJS(basePath) {
|
|
|
70
101
|
`);
|
|
71
102
|
}
|
|
72
103
|
function generateNextJSRoute() {
|
|
73
|
-
return `import {
|
|
104
|
+
return `import { betterAuthStudio } from 'better-auth-studio/nextjs';
|
|
74
105
|
import studioConfig from '@/studio.config';
|
|
75
106
|
|
|
76
|
-
const handler =
|
|
107
|
+
const handler = betterAuthStudio(studioConfig);
|
|
77
108
|
|
|
78
109
|
export {
|
|
79
110
|
handler as GET,
|
|
@@ -84,6 +115,68 @@ export {
|
|
|
84
115
|
};
|
|
85
116
|
`;
|
|
86
117
|
}
|
|
118
|
+
async function setupSvelteKit(basePath) {
|
|
119
|
+
const segments = basePath.split('/').filter(Boolean);
|
|
120
|
+
const routeDir = join(process.cwd(), 'src', 'routes', ...segments, '[...path]');
|
|
121
|
+
const routeFile = join(routeDir, '+server.ts');
|
|
122
|
+
if (existsSync(routeFile)) {
|
|
123
|
+
console.log('⚠️ Route file already exists:', routeFile);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
mkdirSync(routeDir, { recursive: true });
|
|
127
|
+
const code = generateSvelteKitRoute();
|
|
128
|
+
writeFileSync(routeFile, code, 'utf-8');
|
|
129
|
+
console.log('✅ Generated route file:', routeFile);
|
|
130
|
+
}
|
|
131
|
+
const relativePath = `src/routes${basePath}/[...path]/+server.ts`;
|
|
132
|
+
console.log(`
|
|
133
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
134
|
+
║ ✅ SvelteKit Setup Complete! ║
|
|
135
|
+
╠═══════════════════════════════════════════════════════════════╣
|
|
136
|
+
║ ║
|
|
137
|
+
║ 📁 Files created: ║
|
|
138
|
+
║ • studio.config.ts ║
|
|
139
|
+
║ • ${relativePath} ║
|
|
140
|
+
║ ║
|
|
141
|
+
║ ⚠️ Important: Ensure better-auth-studio is in dependencies ║
|
|
142
|
+
║ (not devDependencies) for production deployments ║
|
|
143
|
+
║ ║
|
|
144
|
+
║ 🚀 Start your app: ║
|
|
145
|
+
║ pnpm dev ║
|
|
146
|
+
║ ║
|
|
147
|
+
║ 🌐 Dashboard will be at: ║
|
|
148
|
+
║ http://localhost:5173${basePath} ║
|
|
149
|
+
║ ║
|
|
150
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
151
|
+
`);
|
|
152
|
+
}
|
|
153
|
+
function generateSvelteKitRoute() {
|
|
154
|
+
return `import { betterAuthStudio } from 'better-auth-studio/svelte-kit';
|
|
155
|
+
import studioConfig from '../../../../../studio.config.js';
|
|
156
|
+
|
|
157
|
+
const handler = betterAuthStudio(studioConfig);
|
|
158
|
+
|
|
159
|
+
export async function GET(event) {
|
|
160
|
+
return handler(event);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export async function POST(event) {
|
|
164
|
+
return handler(event);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export async function PUT(event) {
|
|
168
|
+
return handler(event);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export async function DELETE(event) {
|
|
172
|
+
return handler(event);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export async function PATCH(event) {
|
|
176
|
+
return handler(event);
|
|
177
|
+
}
|
|
178
|
+
`;
|
|
179
|
+
}
|
|
87
180
|
function showManualInstructions(framework, basePath) {
|
|
88
181
|
const frameworkName = framework === 'express' ? 'Express' : 'your app';
|
|
89
182
|
console.log(`
|
|
@@ -111,21 +204,43 @@ app.use('${basePath}', betterAuthStudio(studioConfig));
|
|
|
111
204
|
`);
|
|
112
205
|
}
|
|
113
206
|
function detectFramework() {
|
|
207
|
+
// Check for SvelteKit
|
|
208
|
+
if (existsSync('svelte.config.js') ||
|
|
209
|
+
existsSync('svelte.config.ts') ||
|
|
210
|
+
existsSync('src/routes') ||
|
|
211
|
+
existsSync('src/hooks.server.ts')) {
|
|
212
|
+
try {
|
|
213
|
+
const pkgPath = join(process.cwd(), 'package.json');
|
|
214
|
+
if (existsSync(pkgPath)) {
|
|
215
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
216
|
+
if (pkg.dependencies?.['@sveltejs/kit'] || pkg.devDependencies?.['@sveltejs/kit']) {
|
|
217
|
+
return 'sveltekit';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch { }
|
|
222
|
+
}
|
|
223
|
+
// Check for Next.js
|
|
114
224
|
if (existsSync('next.config.js') ||
|
|
115
225
|
existsSync('next.config.mjs') ||
|
|
116
226
|
existsSync('next.config.ts')) {
|
|
117
227
|
return 'nextjs';
|
|
118
228
|
}
|
|
229
|
+
// Check for Express
|
|
119
230
|
if (existsSync('src/index.ts') || existsSync('src/app.ts') || existsSync('src/server.ts')) {
|
|
120
231
|
return 'express';
|
|
121
232
|
}
|
|
122
233
|
if (existsSync('app.js') || existsSync('server.js') || existsSync('index.js')) {
|
|
123
234
|
return 'express';
|
|
124
235
|
}
|
|
236
|
+
// Check package.json for framework dependencies
|
|
125
237
|
try {
|
|
126
238
|
const pkgPath = join(process.cwd(), 'package.json');
|
|
127
239
|
if (existsSync(pkgPath)) {
|
|
128
240
|
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
241
|
+
if (pkg.dependencies?.['@sveltejs/kit'] || pkg.devDependencies?.['@sveltejs/kit']) {
|
|
242
|
+
return 'sveltekit';
|
|
243
|
+
}
|
|
129
244
|
if (pkg.dependencies?.express || pkg.devDependencies?.express) {
|
|
130
245
|
return 'express';
|
|
131
246
|
}
|