better-auth-studio 1.0.79-beta.6 → 1.0.79-beta.61

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 (61) hide show
  1. package/README.md +10 -0
  2. package/dist/adapters/elysia.d.ts +7 -0
  3. package/dist/adapters/elysia.d.ts.map +1 -0
  4. package/dist/adapters/elysia.js +101 -0
  5. package/dist/adapters/elysia.js.map +1 -0
  6. package/dist/adapters/hono.d.ts +7 -0
  7. package/dist/adapters/hono.d.ts.map +1 -0
  8. package/dist/adapters/hono.js +78 -0
  9. package/dist/adapters/hono.js.map +1 -0
  10. package/dist/adapters/solid-start.d.ts +30 -0
  11. package/dist/adapters/solid-start.d.ts.map +1 -0
  12. package/dist/adapters/solid-start.js +96 -0
  13. package/dist/adapters/solid-start.js.map +1 -0
  14. package/dist/adapters/svelte-kit.d.ts +36 -0
  15. package/dist/adapters/svelte-kit.d.ts.map +1 -0
  16. package/dist/adapters/svelte-kit.js +108 -0
  17. package/dist/adapters/svelte-kit.js.map +1 -0
  18. package/dist/adapters/tanstack-start.d.ts +32 -0
  19. package/dist/adapters/tanstack-start.d.ts.map +1 -0
  20. package/dist/adapters/tanstack-start.js +102 -0
  21. package/dist/adapters/tanstack-start.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +3 -1
  23. package/dist/cli/commands/init.d.ts.map +1 -1
  24. package/dist/cli/commands/init.js +122 -7
  25. package/dist/cli/commands/init.js.map +1 -1
  26. package/dist/cli.js +3 -2
  27. package/dist/cli.js.map +1 -1
  28. package/dist/core/handler.d.ts.map +1 -1
  29. package/dist/core/handler.js +244 -89
  30. package/dist/core/handler.js.map +1 -1
  31. package/dist/data.d.ts +1 -1
  32. package/dist/data.d.ts.map +1 -1
  33. package/dist/data.js +3 -7
  34. package/dist/data.js.map +1 -1
  35. package/dist/index.d.ts +4 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +4 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/public/assets/main-BjWPiv1k.css +1 -0
  40. package/dist/public/assets/main-RGKX5wkz.js +1150 -0
  41. package/dist/public/index.html +2 -2
  42. package/dist/routes.d.ts.map +1 -1
  43. package/dist/routes.js +758 -150
  44. package/dist/routes.js.map +1 -1
  45. package/dist/studio.d.ts.map +1 -1
  46. package/dist/studio.js +15 -2
  47. package/dist/studio.js.map +1 -1
  48. package/package.json +44 -33
  49. package/public/assets/main-BjWPiv1k.css +1 -0
  50. package/public/assets/main-RGKX5wkz.js +1150 -0
  51. package/public/favicon.svg +6 -0
  52. package/public/index.html +14 -0
  53. package/public/logo.png +0 -0
  54. package/public/vite.svg +5 -0
  55. package/scripts/download-geolite2.js +35 -0
  56. package/scripts/generate-default-db.js +462 -0
  57. package/scripts/postinstall.js +96 -0
  58. package/data/GeoLite2-City.mmdb +0 -0
  59. package/data/GeoLite2-City.tar.gz +0 -1
  60. package/dist/public/assets/main-3NIBCudD.js +0 -1155
  61. package/dist/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,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":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,KAAK,EAAE,CAAU,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAErD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAErE,OAAO,gBAAgB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,CAAU;IAC9C,IAAI,IAAS,CAAC;IACd,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;IAEhD,OAAO;QACL,GAAG,EAAE,aAAa;QAClB,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU,EAAE,SAA4B;IAChE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAoB,CAAC,CAAC;IAEzC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAW,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,WAAW,GACf,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC/E,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;AACH,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