better-auth-studio 1.0.79-beta.8 → 1.1.0

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 (72) hide show
  1. package/README.md +10 -0
  2. package/dist/adapters/astro.d.ts +22 -0
  3. package/dist/adapters/astro.d.ts.map +1 -0
  4. package/dist/adapters/astro.js +95 -0
  5. package/dist/adapters/astro.js.map +1 -0
  6. package/dist/adapters/elysia.d.ts +7 -0
  7. package/dist/adapters/elysia.d.ts.map +1 -0
  8. package/dist/adapters/elysia.js +101 -0
  9. package/dist/adapters/elysia.js.map +1 -0
  10. package/dist/adapters/hono.d.ts +7 -0
  11. package/dist/adapters/hono.d.ts.map +1 -0
  12. package/dist/adapters/hono.js +78 -0
  13. package/dist/adapters/hono.js.map +1 -0
  14. package/dist/adapters/nextjs.d.ts +1 -1
  15. package/dist/adapters/nextjs.d.ts.map +1 -1
  16. package/dist/adapters/nextjs.js +1 -1
  17. package/dist/adapters/nextjs.js.map +1 -1
  18. package/dist/adapters/nuxt.d.ts +19 -0
  19. package/dist/adapters/nuxt.d.ts.map +1 -0
  20. package/dist/adapters/nuxt.js +99 -0
  21. package/dist/adapters/nuxt.js.map +1 -0
  22. package/dist/adapters/remix.d.ts +26 -0
  23. package/dist/adapters/remix.d.ts.map +1 -0
  24. package/dist/adapters/remix.js +98 -0
  25. package/dist/adapters/remix.js.map +1 -0
  26. package/dist/adapters/solid-start.d.ts +30 -0
  27. package/dist/adapters/solid-start.d.ts.map +1 -0
  28. package/dist/adapters/solid-start.js +96 -0
  29. package/dist/adapters/solid-start.js.map +1 -0
  30. package/dist/adapters/svelte-kit.d.ts +36 -0
  31. package/dist/adapters/svelte-kit.d.ts.map +1 -0
  32. package/dist/adapters/svelte-kit.js +108 -0
  33. package/dist/adapters/svelte-kit.js.map +1 -0
  34. package/dist/adapters/tanstack-start.d.ts +32 -0
  35. package/dist/adapters/tanstack-start.d.ts.map +1 -0
  36. package/dist/adapters/tanstack-start.js +102 -0
  37. package/dist/adapters/tanstack-start.js.map +1 -0
  38. package/dist/cli/commands/init.d.ts +3 -1
  39. package/dist/cli/commands/init.d.ts.map +1 -1
  40. package/dist/cli/commands/init.js +124 -9
  41. package/dist/cli/commands/init.js.map +1 -1
  42. package/dist/cli.js +3 -2
  43. package/dist/cli.js.map +1 -1
  44. package/dist/core/handler.d.ts.map +1 -1
  45. package/dist/core/handler.js +236 -61
  46. package/dist/core/handler.js.map +1 -1
  47. package/dist/data.d.ts +1 -1
  48. package/dist/data.d.ts.map +1 -1
  49. package/dist/data.js +3 -7
  50. package/dist/data.js.map +1 -1
  51. package/dist/public/assets/main-COYGEnAm.js +1150 -0
  52. package/dist/public/assets/main-s8HrXBxq.css +1 -0
  53. package/dist/public/index.html +2 -2
  54. package/dist/routes.d.ts.map +1 -1
  55. package/dist/routes.js +758 -150
  56. package/dist/routes.js.map +1 -1
  57. package/dist/studio.d.ts.map +1 -1
  58. package/dist/studio.js +15 -2
  59. package/dist/studio.js.map +1 -1
  60. package/dist/utils/html-injector.js +44 -1
  61. package/dist/utils/html-injector.js.map +1 -1
  62. package/package.json +14 -8
  63. package/public/assets/main-COYGEnAm.js +1150 -0
  64. package/public/assets/main-s8HrXBxq.css +1 -0
  65. package/public/index.html +2 -2
  66. package/scripts/postinstall.js +39 -12
  67. package/data/GeoLite2-City.mmdb +0 -0
  68. package/data/GeoLite2-City.tar.gz +0 -1
  69. package/dist/public/assets/main-3NIBCudD.js +0 -1155
  70. package/dist/public/assets/main-DbXDm13A.css +0 -1
  71. package/public/assets/main-3NIBCudD.js +0 -1155
  72. package/public/assets/main-DbXDm13A.css +0 -1
package/README.md CHANGED
@@ -285,6 +285,16 @@ pnpx better-auth-studio --help
285
285
 
286
286
  Deploy Better Auth Studio alongside your application for production use.
287
287
 
288
+ ### Installation for Self-Hosting
289
+
290
+ **Important:** For self-hosting, install `better-auth-studio` as a **regular dependency** (not devDependency) since it's required at runtime in production:
291
+
292
+ ```bash
293
+ pnpm add better-auth-studio
294
+ ```
295
+
296
+ > **Note:** The CLI usage (standalone studio) can be installed as a dev dependency, but self-hosting requires it in `dependencies` for production deployments.
297
+
288
298
  ### Setup
289
299
 
290
300
  **Step 1: Initialize configuration**
@@ -0,0 +1,22 @@
1
+ import type { StudioConfig } from '../types/handler.js';
2
+ /**
3
+ * Astro adapter for Better Auth Studio
4
+ *
5
+ * Usage in a catch-all API route:
6
+ * ```ts
7
+ * // pages/api/studio/[...all].ts
8
+ * import { betterAuthStudio } from 'better-auth-studio/astro';
9
+ * import studioConfig from '../../../../studio.config';
10
+ * import type { APIRoute } from 'astro';
11
+ *
12
+ * const handler = betterAuthStudio(studioConfig);
13
+ *
14
+ * export const ALL: APIRoute = async (ctx) => {
15
+ * return handler(ctx);
16
+ * };
17
+ * ```
18
+ */
19
+ export declare function betterAuthStudio(config: StudioConfig): (ctx: {
20
+ request: Request;
21
+ }) => Promise<Response>;
22
+ //# sourceMappingURL=astro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../src/adapters/astro.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,KAAK;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAAC,CAa5D"}
@@ -0,0 +1,95 @@
1
+ import { handleStudioRequest } from '../core/handler.js';
2
+ /**
3
+ * Astro adapter for Better Auth Studio
4
+ *
5
+ * Usage in a catch-all API route:
6
+ * ```ts
7
+ * // pages/api/studio/[...all].ts
8
+ * import { betterAuthStudio } from 'better-auth-studio/astro';
9
+ * import studioConfig from '../../../../studio.config';
10
+ * import type { APIRoute } from 'astro';
11
+ *
12
+ * const handler = betterAuthStudio(studioConfig);
13
+ *
14
+ * export const ALL: APIRoute = async (ctx) => {
15
+ * return handler(ctx);
16
+ * };
17
+ * ```
18
+ */
19
+ export function betterAuthStudio(config) {
20
+ return async (ctx) => {
21
+ try {
22
+ const universalReq = await convertAstroToUniversal(ctx, config);
23
+ const universalRes = await handleStudioRequest(universalReq, config);
24
+ return universalToResponse(universalRes);
25
+ }
26
+ catch (error) {
27
+ console.error('Studio handler error:', error);
28
+ return new Response(JSON.stringify({ error: 'Internal server error' }), {
29
+ status: 500,
30
+ headers: { 'Content-Type': 'application/json' },
31
+ });
32
+ }
33
+ };
34
+ }
35
+ async function convertAstroToUniversal(ctx, config) {
36
+ const request = ctx.request;
37
+ let body;
38
+ const method = request.method;
39
+ if (method !== 'GET' && method !== 'HEAD') {
40
+ const contentType = request.headers.get('content-type') || '';
41
+ if (contentType.includes('application/json')) {
42
+ try {
43
+ body = await request.json();
44
+ }
45
+ catch { }
46
+ }
47
+ else if (contentType.includes('application/x-www-form-urlencoded') ||
48
+ contentType.includes('multipart/form-data')) {
49
+ try {
50
+ const formData = await request.formData();
51
+ body = Object.fromEntries(formData.entries());
52
+ }
53
+ catch { }
54
+ }
55
+ else {
56
+ try {
57
+ const text = await request.text();
58
+ if (text && text.trim()) {
59
+ try {
60
+ body = JSON.parse(text);
61
+ }
62
+ catch {
63
+ body = text;
64
+ }
65
+ }
66
+ }
67
+ catch { }
68
+ }
69
+ }
70
+ const headers = {};
71
+ request.headers.forEach((value, key) => {
72
+ headers[key] = value;
73
+ });
74
+ const basePath = config.basePath || '/api/studio';
75
+ const normalizedBasePath = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
76
+ const url = new URL(request.url);
77
+ let path = url.pathname;
78
+ if (path.startsWith(normalizedBasePath)) {
79
+ path = path.slice(normalizedBasePath.length) || '/';
80
+ }
81
+ const pathWithQuery = path + url.search;
82
+ return {
83
+ url: pathWithQuery,
84
+ method: method,
85
+ headers,
86
+ body,
87
+ };
88
+ }
89
+ function universalToResponse(res) {
90
+ return new Response(res.body, {
91
+ status: res.status,
92
+ headers: res.headers,
93
+ });
94
+ }
95
+ //# sourceMappingURL=astro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro.js","sourceRoot":"","sources":["../../src/adapters/astro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Context } from 'elysia';
2
+ import type { StudioConfig } from '../types/handler.js';
3
+ /**
4
+ * Elysia adapter for Better Auth Studio
5
+ */
6
+ export declare function betterAuthStudio(config: StudioConfig): (context: Context) => Promise<any>;
7
+ //# sourceMappingURL=elysia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elysia.d.ts","sourceRoot":"","sources":["../../src/adapters/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,SAAS,OAAO,kBAY/B"}
@@ -0,0 +1,101 @@
1
+ import { handleStudioRequest } from '../core/handler.js';
2
+ /**
3
+ * Elysia adapter for Better Auth Studio
4
+ */
5
+ export function betterAuthStudio(config) {
6
+ return async (context) => {
7
+ try {
8
+ const universalReq = await convertElysiaToUniversal(context);
9
+ const universalRes = await handleStudioRequest(universalReq, config);
10
+ return sendElysiaResponse(context, universalRes);
11
+ }
12
+ catch (error) {
13
+ console.error('Studio handler error:', error);
14
+ context.set.status = 500;
15
+ return { error: 'Internal server error' };
16
+ }
17
+ };
18
+ }
19
+ async function convertElysiaToUniversal(context) {
20
+ let body;
21
+ const method = context.request.method;
22
+ if (method !== 'GET' && method !== 'HEAD') {
23
+ const elysiaBody = context.body ?? context.query ?? undefined;
24
+ if (elysiaBody !== undefined) {
25
+ body = elysiaBody;
26
+ }
27
+ else {
28
+ const contentType = context.request.headers.get('content-type') || '';
29
+ try {
30
+ if (contentType.includes('application/json')) {
31
+ body = await context.request.json();
32
+ }
33
+ else if (contentType.includes('application/x-www-form-urlencoded') ||
34
+ contentType.includes('multipart/form-data')) {
35
+ const formData = await context.request.formData();
36
+ body = Object.fromEntries(formData.entries());
37
+ }
38
+ else {
39
+ const text = await context.request.text();
40
+ if (text && text.trim()) {
41
+ try {
42
+ body = JSON.parse(text);
43
+ }
44
+ catch {
45
+ body = text;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ catch (error) { }
51
+ }
52
+ }
53
+ const headers = {};
54
+ context.request.headers.forEach((value, key) => {
55
+ headers[key] = value;
56
+ });
57
+ const url = new URL(context.request.url);
58
+ const pathWithQuery = url.pathname + url.search;
59
+ return {
60
+ url: pathWithQuery,
61
+ method: method,
62
+ headers,
63
+ body,
64
+ };
65
+ }
66
+ function sendElysiaResponse(context, universal) {
67
+ context.set.status = universal.status;
68
+ Object.entries(universal.headers).forEach(([key, value]) => {
69
+ context.set.headers[key] = value;
70
+ });
71
+ if (Buffer.isBuffer(universal.body)) {
72
+ return new Response(universal.body, {
73
+ status: universal.status,
74
+ headers: universal.headers,
75
+ });
76
+ }
77
+ else if (typeof universal.body === 'string') {
78
+ const contentType = universal.headers['content-type'] || universal.headers['Content-Type'] || '';
79
+ if (contentType.includes('application/json')) {
80
+ try {
81
+ return JSON.parse(universal.body);
82
+ }
83
+ catch {
84
+ return universal.body;
85
+ }
86
+ }
87
+ else if (contentType.includes('text/html')) {
88
+ return new Response(universal.body, {
89
+ status: universal.status,
90
+ headers: universal.headers,
91
+ });
92
+ }
93
+ else {
94
+ return universal.body;
95
+ }
96
+ }
97
+ else {
98
+ return String(universal.body);
99
+ }
100
+ }
101
+ //# sourceMappingURL=elysia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../src/adapters/elysia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Context } from 'hono';
2
+ import type { StudioConfig } from '../types/handler.js';
3
+ /**
4
+ * Hono adapter for Better Auth Studio
5
+ */
6
+ export declare function betterAuthStudio(config: StudioConfig): (c: Context) => Promise<Response>;
7
+ //# sourceMappingURL=hono.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/adapters/hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,GAAG,OAAO,uBAYzB"}
@@ -0,0 +1,78 @@
1
+ import { handleStudioRequest } from '../core/handler.js';
2
+ /**
3
+ * Hono adapter for Better Auth Studio
4
+ */
5
+ export function betterAuthStudio(config) {
6
+ return async (c) => {
7
+ try {
8
+ const universalReq = await convertHonoToUniversal(c);
9
+ const universalRes = await handleStudioRequest(universalReq, config);
10
+ return sendHonoResponse(c, universalRes);
11
+ }
12
+ catch (error) {
13
+ console.error('Studio handler error:', error);
14
+ return c.json({ error: 'Internal server error' }, 500);
15
+ }
16
+ };
17
+ }
18
+ async function convertHonoToUniversal(c) {
19
+ let body;
20
+ const method = c.req.method;
21
+ if (method !== 'GET' && method !== 'HEAD') {
22
+ const contentType = c.req.header('content-type') || '';
23
+ if (contentType.includes('application/json')) {
24
+ try {
25
+ body = await c.req.json();
26
+ }
27
+ catch { }
28
+ }
29
+ else if (contentType.includes('application/x-www-form-urlencoded')) {
30
+ try {
31
+ body = await c.req.parseBody();
32
+ }
33
+ catch { }
34
+ }
35
+ }
36
+ const headers = {};
37
+ c.req.raw.headers.forEach((value, key) => {
38
+ headers[key] = value;
39
+ });
40
+ const url = new URL(c.req.url);
41
+ const pathWithQuery = url.pathname + url.search;
42
+ return {
43
+ url: pathWithQuery,
44
+ method: method,
45
+ headers,
46
+ body,
47
+ };
48
+ }
49
+ function sendHonoResponse(c, universal) {
50
+ c.status(universal.status);
51
+ Object.entries(universal.headers).forEach(([key, value]) => {
52
+ c.header(key, value);
53
+ });
54
+ if (Buffer.isBuffer(universal.body)) {
55
+ return c.body(universal.body);
56
+ }
57
+ else if (typeof universal.body === 'string') {
58
+ const contentType = universal.headers['content-type'] || universal.headers['Content-Type'] || '';
59
+ if (contentType.includes('application/json')) {
60
+ try {
61
+ return c.json(JSON.parse(universal.body));
62
+ }
63
+ catch {
64
+ return c.text(universal.body);
65
+ }
66
+ }
67
+ else if (contentType.includes('text/html')) {
68
+ return c.html(universal.body);
69
+ }
70
+ else {
71
+ return c.text(universal.body);
72
+ }
73
+ }
74
+ else {
75
+ return c.text(String(universal.body));
76
+ }
77
+ }
78
+ //# sourceMappingURL=hono.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.js","sourceRoot":"","sources":["../../src/adapters/hono.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { StudioConfig } from '../types/handler.js';
2
- export declare function createStudioHandler(config: StudioConfig): (request: Request) => Promise<Response>;
2
+ export declare function betterAuthStudio(config: StudioConfig): (request: Request) => Promise<Response>;
3
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;AAW7F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,IACxC,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAanD"}
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,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAanD"}
@@ -7,7 +7,7 @@ function getUrlFromRequest(req) {
7
7
  const url = new URL(req.url);
8
8
  return url.pathname + url.search;
9
9
  }
10
- export function createStudioHandler(config) {
10
+ export function betterAuthStudio(config) {
11
11
  return async (request) => {
12
12
  try {
13
13
  const universalRequest = await requestToUniversal(request);
@@ -1 +1 @@
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"}
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,gBAAgB,CAAC,MAAoB;IACnD,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"}
@@ -0,0 +1,19 @@
1
+ import type { StudioConfig } from '../types/handler.js';
2
+ /**
3
+ * Nuxt adapter for Better Auth Studio
4
+ *
5
+ * Usage in a server API route:
6
+ * ```ts
7
+ * // server/api/studio/[...all].ts
8
+ * import { betterAuthStudio } from 'better-auth-studio/nuxt';
9
+ * import studioConfig from '~/studio.config';
10
+ * import { toWebRequest } from 'better-auth/nuxt';
11
+ *
12
+ * export default defineEventHandler(async (event) => {
13
+ * const request = toWebRequest(event);
14
+ * return betterAuthStudio(studioConfig)(request);
15
+ * });
16
+ * ```
17
+ */
18
+ export declare function betterAuthStudio(config: StudioConfig): (request: Request) => Promise<Response>;
19
+ //# sourceMappingURL=nuxt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../../src/adapters/nuxt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,IACrC,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAanD"}
@@ -0,0 +1,99 @@
1
+ import { handleStudioRequest } from '../core/handler.js';
2
+ /**
3
+ * Nuxt adapter for Better Auth Studio
4
+ *
5
+ * Usage in a server API route:
6
+ * ```ts
7
+ * // server/api/studio/[...all].ts
8
+ * import { betterAuthStudio } from 'better-auth-studio/nuxt';
9
+ * import studioConfig from '~/studio.config';
10
+ * import { toWebRequest } from 'better-auth/nuxt';
11
+ *
12
+ * export default defineEventHandler(async (event) => {
13
+ * const request = toWebRequest(event);
14
+ * return betterAuthStudio(studioConfig)(request);
15
+ * });
16
+ * ```
17
+ */
18
+ export function betterAuthStudio(config) {
19
+ return async (request) => {
20
+ try {
21
+ const universalReq = await convertNuxtToUniversal(request, config);
22
+ const universalRes = await handleStudioRequest(universalReq, config);
23
+ return universalToResponse(universalRes);
24
+ }
25
+ catch (error) {
26
+ console.error('Studio handler error:', error);
27
+ return new Response(JSON.stringify({ error: 'Internal server error' }), {
28
+ status: 500,
29
+ headers: { 'Content-Type': 'application/json' },
30
+ });
31
+ }
32
+ };
33
+ }
34
+ async function convertNuxtToUniversal(request, config) {
35
+ let body;
36
+ const method = request.method;
37
+ if (method !== 'GET' && method !== 'HEAD' && !request.bodyUsed) {
38
+ const contentType = request.headers.get('content-type') || '';
39
+ try {
40
+ if (contentType.includes('application/json')) {
41
+ try {
42
+ body = await request.json();
43
+ }
44
+ catch (error) { }
45
+ }
46
+ else if (contentType.includes('application/x-www-form-urlencoded') ||
47
+ contentType.includes('multipart/form-data')) {
48
+ try {
49
+ const formData = await request.formData();
50
+ body = Object.fromEntries(formData.entries());
51
+ }
52
+ catch (error) { }
53
+ }
54
+ else {
55
+ try {
56
+ const text = await request.text();
57
+ if (text && text.trim()) {
58
+ try {
59
+ body = JSON.parse(text);
60
+ }
61
+ catch {
62
+ body = text;
63
+ }
64
+ }
65
+ }
66
+ catch (error) { }
67
+ }
68
+ }
69
+ catch (error) { }
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
+ if (!request.url) {
78
+ throw new Error('Request URL is required');
79
+ }
80
+ const url = new URL(request.url);
81
+ let path = url.pathname;
82
+ if (path.startsWith(normalizedBasePath)) {
83
+ path = path.slice(normalizedBasePath.length) || '/';
84
+ }
85
+ const pathWithQuery = path + url.search;
86
+ return {
87
+ url: pathWithQuery,
88
+ method: method,
89
+ headers,
90
+ body,
91
+ };
92
+ }
93
+ function universalToResponse(res) {
94
+ return new Response(res.body, {
95
+ status: res.status,
96
+ headers: res.headers,
97
+ });
98
+ }
99
+ //# sourceMappingURL=nuxt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuxt.js","sourceRoot":"","sources":["../../src/adapters/nuxt.ts"],"names":[],"mappings":"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"}
@@ -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