better-auth-studio 1.0.79-beta.62 → 1.0.79-beta.63
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.
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { StudioConfig } from '../types/handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* Remix adapter for Better Auth Studio
|
|
4
|
+
*
|
|
5
|
+
* Usage in a resource route:
|
|
6
|
+
* ```ts
|
|
7
|
+
* // app/routes/api.studio.$.ts
|
|
8
|
+
* import { betterAuthStudio } from 'better-auth-studio/remix';
|
|
9
|
+
* import studioConfig from '~/studio.config';
|
|
10
|
+
* import type { LoaderFunctionArgs, ActionFunctionArgs } from '@remix-run/node';
|
|
11
|
+
*
|
|
12
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
13
|
+
*
|
|
14
|
+
* export async function loader({ request }: LoaderFunctionArgs) {
|
|
15
|
+
* return handler({ request });
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* export async function action({ request }: ActionFunctionArgs) {
|
|
19
|
+
* return handler({ request });
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function betterAuthStudio(config: StudioConfig): ({ request }: {
|
|
24
|
+
request: Request;
|
|
25
|
+
}) => Promise<Response>;
|
|
26
|
+
//# sourceMappingURL=remix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remix.d.ts","sourceRoot":"","sources":["../../src/adapters/remix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,aAAa;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAAC,CAapE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { handleStudioRequest } from '../core/handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* Remix adapter for Better Auth Studio
|
|
4
|
+
*
|
|
5
|
+
* Usage in a resource route:
|
|
6
|
+
* ```ts
|
|
7
|
+
* // app/routes/api.studio.$.ts
|
|
8
|
+
* import { betterAuthStudio } from 'better-auth-studio/remix';
|
|
9
|
+
* import studioConfig from '~/studio.config';
|
|
10
|
+
* import type { LoaderFunctionArgs, ActionFunctionArgs } from '@remix-run/node';
|
|
11
|
+
*
|
|
12
|
+
* const handler = betterAuthStudio(studioConfig);
|
|
13
|
+
*
|
|
14
|
+
* export async function loader({ request }: LoaderFunctionArgs) {
|
|
15
|
+
* return handler({ request });
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* export async function action({ request }: ActionFunctionArgs) {
|
|
19
|
+
* return handler({ request });
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function betterAuthStudio(config) {
|
|
24
|
+
return async ({ request }) => {
|
|
25
|
+
try {
|
|
26
|
+
const universalReq = await convertRemixToUniversal({ request }, config);
|
|
27
|
+
const universalRes = await handleStudioRequest(universalReq, config);
|
|
28
|
+
return universalToResponse(universalRes);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error('Studio handler error:', error);
|
|
32
|
+
return new Response(JSON.stringify({ error: 'Internal server error' }), {
|
|
33
|
+
status: 500,
|
|
34
|
+
headers: { 'Content-Type': 'application/json' },
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function convertRemixToUniversal({ request }, config) {
|
|
40
|
+
let body;
|
|
41
|
+
const method = request.method;
|
|
42
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
43
|
+
const contentType = request.headers.get('content-type') || '';
|
|
44
|
+
if (contentType.includes('application/json')) {
|
|
45
|
+
try {
|
|
46
|
+
body = await request.json();
|
|
47
|
+
}
|
|
48
|
+
catch { }
|
|
49
|
+
}
|
|
50
|
+
else if (contentType.includes('application/x-www-form-urlencoded') ||
|
|
51
|
+
contentType.includes('multipart/form-data')) {
|
|
52
|
+
try {
|
|
53
|
+
const formData = await request.formData();
|
|
54
|
+
body = Object.fromEntries(formData.entries());
|
|
55
|
+
}
|
|
56
|
+
catch { }
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
try {
|
|
60
|
+
const text = await request.text();
|
|
61
|
+
if (text && text.trim()) {
|
|
62
|
+
try {
|
|
63
|
+
body = JSON.parse(text);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
body = text;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch { }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const headers = {};
|
|
74
|
+
request.headers.forEach((value, key) => {
|
|
75
|
+
headers[key] = value;
|
|
76
|
+
});
|
|
77
|
+
const basePath = config.basePath || '/api/studio';
|
|
78
|
+
const normalizedBasePath = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
|
|
79
|
+
const url = new URL(request.url);
|
|
80
|
+
let path = url.pathname;
|
|
81
|
+
if (path.startsWith(normalizedBasePath)) {
|
|
82
|
+
path = path.slice(normalizedBasePath.length) || '/';
|
|
83
|
+
}
|
|
84
|
+
const pathWithQuery = path + url.search;
|
|
85
|
+
return {
|
|
86
|
+
url: pathWithQuery,
|
|
87
|
+
method: method,
|
|
88
|
+
headers,
|
|
89
|
+
body,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function universalToResponse(res) {
|
|
93
|
+
return new Response(res.body, {
|
|
94
|
+
status: res.status,
|
|
95
|
+
headers: res.headers,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=remix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remix.js","sourceRoot":"","sources":["../../src/adapters/remix.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "better-auth-studio",
|
|
3
|
-
"version": "1.0.79-beta.
|
|
3
|
+
"version": "1.0.79-beta.63",
|
|
4
4
|
"description": "Studio for Better Auth",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"./solid-start": "./dist/adapters/solid-start.js",
|
|
18
18
|
"./tanstack-start": "./dist/adapters/tanstack-start.js",
|
|
19
19
|
"./astro": "./dist/adapters/astro.js",
|
|
20
|
+
"./remix": "./dist/adapters/remix.js",
|
|
20
21
|
"./config": "./dist/types/handler.js"
|
|
21
22
|
},
|
|
22
23
|
"keywords": [
|