hylekit 1.0.2 → 1.0.4
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 +126 -59
- package/dist/bff/index.cjs +5 -139
- package/dist/bff/index.cjs.map +1 -1
- package/dist/bff/index.d.cts +2 -1
- package/dist/bff/index.d.ts +2 -1
- package/dist/bff/index.js +5 -145
- package/dist/bff/index.js.map +1 -1
- package/dist/client/index.cjs +58 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +1530 -0
- package/dist/client/index.d.ts +1530 -0
- package/dist/client/index.js +31 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/nextjs.cjs +3 -214
- package/dist/client/nextjs.cjs.map +1 -1
- package/dist/client/nextjs.d.cts +4 -97
- package/dist/client/nextjs.d.ts +4 -97
- package/dist/client/nextjs.js +2 -218
- package/dist/client/nextjs.js.map +1 -1
- package/dist/client/sveltekit.cjs +3 -201
- package/dist/client/sveltekit.cjs.map +1 -1
- package/dist/client/sveltekit.d.cts +3 -72
- package/dist/client/sveltekit.d.ts +3 -72
- package/dist/client/sveltekit.js +2 -205
- package/dist/client/sveltekit.js.map +1 -1
- package/dist/{index-DYW73KK3.d.cts → index-B-5TEr94.d.cts} +28 -2
- package/dist/{index-DYW73KK3.d.ts → index-B-5TEr94.d.ts} +28 -2
- package/dist/index.cjs +276 -262
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +110 -3272
- package/dist/index.d.ts +110 -3272
- package/dist/index.js +270 -258
- package/dist/index.js.map +1 -1
- package/dist/server/express.cjs +71 -80
- package/dist/server/express.cjs.map +1 -1
- package/dist/server/express.d.cts +18 -6
- package/dist/server/express.d.ts +18 -6
- package/dist/server/express.js +70 -86
- package/dist/server/express.js.map +1 -1
- package/dist/server/nextjs.cjs +107 -0
- package/dist/server/nextjs.cjs.map +1 -0
- package/dist/server/nextjs.d.cts +90 -0
- package/dist/server/nextjs.d.ts +90 -0
- package/dist/server/nextjs.js +82 -0
- package/dist/server/nextjs.js.map +1 -0
- package/dist/server/sveltekit.cjs +94 -0
- package/dist/server/sveltekit.cjs.map +1 -0
- package/dist/server/sveltekit.d.cts +68 -0
- package/dist/server/sveltekit.d.ts +68 -0
- package/dist/server/sveltekit.js +69 -0
- package/dist/server/sveltekit.js.map +1 -0
- package/dist/{types-GOn9sn7-.d.ts → types-Wucl0qmN.d.cts} +1 -8
- package/dist/{types-BHiK1JUX.d.cts → types-Wucl0qmN.d.ts} +1 -8
- package/package.json +24 -7
package/README.md
CHANGED
|
@@ -49,21 +49,52 @@ HyleKit uses a **centralized authentication database** that all your application
|
|
|
49
49
|
npm install hylekit
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
##
|
|
52
|
+
## Configuration
|
|
53
|
+
|
|
54
|
+
HyleKit uses a **factory pattern** - you pass configuration from your environment at initialization time. This design:
|
|
55
|
+
- ✅ Keeps secrets out of client bundles
|
|
56
|
+
- ✅ Throws runtime errors if factories are called on the client
|
|
57
|
+
- ✅ Gives you full control over configuration
|
|
58
|
+
|
|
59
|
+
### Required Environment Variables
|
|
53
60
|
|
|
54
61
|
```bash
|
|
55
62
|
# Turso Database
|
|
56
63
|
HYLE_DATABASE_URL=libsql://[db-name]-[org].turso.io
|
|
57
64
|
HYLE_DATABASE_AUTH_TOKEN=your-turso-token
|
|
58
65
|
|
|
66
|
+
# BetterAuth
|
|
67
|
+
BETTER_AUTH_URL=http://localhost:5173 # Your app's URL
|
|
68
|
+
BETTER_AUTH_SECRET=your-random-secret
|
|
69
|
+
|
|
59
70
|
# Google OAuth
|
|
60
71
|
GOOGLE_CLIENT_ID=your-google-client-id
|
|
61
72
|
GOOGLE_CLIENT_SECRET=your-google-client-secret
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Initialize in Server-Side Code
|
|
62
76
|
|
|
63
|
-
|
|
64
|
-
|
|
77
|
+
```typescript
|
|
78
|
+
// lib/auth.ts (server-side only!)
|
|
79
|
+
import { createDb, createAuth } from "hylekit";
|
|
80
|
+
|
|
81
|
+
export const db = createDb({
|
|
82
|
+
url: process.env.HYLE_DATABASE_URL!,
|
|
83
|
+
authToken: process.env.HYLE_DATABASE_AUTH_TOKEN,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
export const auth = createAuth(db, {
|
|
87
|
+
baseURL: process.env.BETTER_AUTH_URL!,
|
|
88
|
+
secret: process.env.BETTER_AUTH_SECRET!,
|
|
89
|
+
google: {
|
|
90
|
+
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
91
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
65
94
|
```
|
|
66
95
|
|
|
96
|
+
> ⚠️ **Security**: `createDb` and `createAuth` will throw errors if called on the client side to prevent accidental secret exposure.
|
|
97
|
+
|
|
67
98
|
## Architecture
|
|
68
99
|
|
|
69
100
|
HyleKit supports a BFF (Backend-For-Frontend) architecture:
|
|
@@ -71,7 +102,7 @@ HyleKit supports a BFF (Backend-For-Frontend) architecture:
|
|
|
71
102
|
```
|
|
72
103
|
┌─────────────────────────────────────────────────────────────────┐
|
|
73
104
|
│ Browser (Client FE) │
|
|
74
|
-
│ └── Uses: hyle.client (
|
|
105
|
+
│ └── Uses: hyle.client (from "hylekit/client") │
|
|
75
106
|
└─────────────────────────────────┬───────────────────────────────┘
|
|
76
107
|
│
|
|
77
108
|
▼
|
|
@@ -95,31 +126,52 @@ HyleKit supports a BFF (Backend-For-Frontend) architecture:
|
|
|
95
126
|
|
|
96
127
|
## SvelteKit Setup
|
|
97
128
|
|
|
98
|
-
### 1. Create Auth
|
|
129
|
+
### 1. Create Server Auth Module
|
|
99
130
|
|
|
100
|
-
Create
|
|
131
|
+
Create your auth instance in a server-only module:
|
|
101
132
|
|
|
102
133
|
```typescript
|
|
103
|
-
// src/
|
|
104
|
-
import
|
|
134
|
+
// src/lib/server/auth.ts
|
|
135
|
+
import { createDb, createAuth } from "hylekit";
|
|
136
|
+
import { createSvelteKitServer } from "hylekit/sveltekit";
|
|
137
|
+
import { env } from "$env/dynamic/private";
|
|
138
|
+
|
|
139
|
+
const db = createDb({
|
|
140
|
+
url: env.HYLE_DATABASE_URL,
|
|
141
|
+
authToken: env.HYLE_DATABASE_AUTH_TOKEN,
|
|
142
|
+
});
|
|
105
143
|
|
|
106
|
-
|
|
144
|
+
const auth = createAuth(db, {
|
|
145
|
+
baseURL: env.PUBLIC_APP_URL,
|
|
146
|
+
secret: env.BETTER_AUTH_SECRET,
|
|
147
|
+
google: {
|
|
148
|
+
clientId: env.GOOGLE_CLIENT_ID,
|
|
149
|
+
clientSecret: env.GOOGLE_CLIENT_SECRET,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
export const { handler, getSession, isAuthenticated, createHandle, makeAuthenticatedCall } = createSvelteKitServer(auth, db);
|
|
107
154
|
```
|
|
108
155
|
|
|
109
|
-
### 2.
|
|
156
|
+
### 2. Create Auth Route Handler
|
|
110
157
|
|
|
111
|
-
|
|
158
|
+
```typescript
|
|
159
|
+
// src/routes/api/auth/[...auth]/+server.ts
|
|
160
|
+
import { handler } from "$lib/server/auth";
|
|
161
|
+
|
|
162
|
+
export const { GET, POST } = handler;
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 3. Add Session Hook
|
|
112
166
|
|
|
113
167
|
```typescript
|
|
114
168
|
// src/hooks.server.ts
|
|
115
|
-
import
|
|
169
|
+
import { createHandle } from "$lib/server/auth";
|
|
116
170
|
|
|
117
|
-
export const handle =
|
|
171
|
+
export const handle = createHandle();
|
|
118
172
|
```
|
|
119
173
|
|
|
120
|
-
###
|
|
121
|
-
|
|
122
|
-
Update your type definitions to include session data:
|
|
174
|
+
### 4. Extend App.Locals Types
|
|
123
175
|
|
|
124
176
|
```typescript
|
|
125
177
|
// src/app.d.ts
|
|
@@ -137,18 +189,14 @@ declare global {
|
|
|
137
189
|
export {};
|
|
138
190
|
```
|
|
139
191
|
|
|
140
|
-
###
|
|
141
|
-
|
|
142
|
-
Access session data in your server load functions:
|
|
192
|
+
### 5. Use in Pages
|
|
143
193
|
|
|
144
194
|
```typescript
|
|
145
195
|
// src/routes/+page.server.ts
|
|
146
196
|
import type { PageServerLoad } from "./$types";
|
|
147
197
|
|
|
148
198
|
export const load: PageServerLoad = async ({ locals }) => {
|
|
149
|
-
return {
|
|
150
|
-
user: locals.user,
|
|
151
|
-
};
|
|
199
|
+
return { user: locals.user };
|
|
152
200
|
};
|
|
153
201
|
```
|
|
154
202
|
|
|
@@ -170,32 +218,50 @@ export const load: PageServerLoad = async ({ locals }) => {
|
|
|
170
218
|
|
|
171
219
|
## Next.js Setup (App Router)
|
|
172
220
|
|
|
173
|
-
### 1. Create Auth
|
|
221
|
+
### 1. Create Server Auth Module
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
// lib/auth.ts (server-side only!)
|
|
225
|
+
import { createDb, createAuth } from "hylekit";
|
|
226
|
+
import { createNextJsServer } from "hylekit/nextjs";
|
|
174
227
|
|
|
175
|
-
|
|
228
|
+
const db = createDb({
|
|
229
|
+
url: process.env.HYLE_DATABASE_URL!,
|
|
230
|
+
authToken: process.env.HYLE_DATABASE_AUTH_TOKEN,
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
const auth = createAuth(db, {
|
|
234
|
+
baseURL: process.env.BETTER_AUTH_URL!,
|
|
235
|
+
secret: process.env.BETTER_AUTH_SECRET!,
|
|
236
|
+
google: {
|
|
237
|
+
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
238
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
export const { handler, getSession, isAuthenticated, getUser, makeAuthenticatedCall } = createNextJsServer(auth, db);
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 2. Create Auth Route Handler
|
|
176
246
|
|
|
177
247
|
```typescript
|
|
178
248
|
// app/api/auth/[...auth]/route.ts
|
|
179
|
-
import
|
|
249
|
+
import { handler } from "@/lib/auth";
|
|
180
250
|
|
|
181
|
-
export const { GET, POST } =
|
|
251
|
+
export const { GET, POST } = handler;
|
|
182
252
|
```
|
|
183
253
|
|
|
184
|
-
###
|
|
185
|
-
|
|
186
|
-
Access session data directly in your server components:
|
|
254
|
+
### 3. Use in Server Components
|
|
187
255
|
|
|
188
256
|
```typescript
|
|
189
257
|
// app/page.tsx
|
|
190
|
-
import
|
|
258
|
+
import { getSession } from "@/lib/auth";
|
|
191
259
|
|
|
192
260
|
export default async function Page() {
|
|
193
|
-
const session = await
|
|
261
|
+
const session = await getSession();
|
|
194
262
|
|
|
195
263
|
if (!session) {
|
|
196
|
-
return
|
|
197
|
-
<a href="/api/auth/sign-in/google">Sign in with Google</a>
|
|
198
|
-
);
|
|
264
|
+
return <a href="/api/auth/sign-in/google">Sign in with Google</a>;
|
|
199
265
|
}
|
|
200
266
|
|
|
201
267
|
return (
|
|
@@ -207,24 +273,19 @@ export default async function Page() {
|
|
|
207
273
|
}
|
|
208
274
|
```
|
|
209
275
|
|
|
210
|
-
###
|
|
211
|
-
|
|
212
|
-
Use the auth helpers to protect routes:
|
|
276
|
+
### 4. Protected Routes
|
|
213
277
|
|
|
214
278
|
```typescript
|
|
215
279
|
// app/dashboard/page.tsx
|
|
216
|
-
import
|
|
280
|
+
import { isAuthenticated, getUser } from "@/lib/auth";
|
|
217
281
|
import { redirect } from "next/navigation";
|
|
218
282
|
|
|
219
283
|
export default async function DashboardPage() {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if (!isAuth) {
|
|
284
|
+
if (!(await isAuthenticated())) {
|
|
223
285
|
redirect("/api/auth/sign-in/google");
|
|
224
286
|
}
|
|
225
287
|
|
|
226
|
-
const user = await
|
|
227
|
-
|
|
288
|
+
const user = await getUser();
|
|
228
289
|
return <p>Dashboard for {user?.name}</p>;
|
|
229
290
|
}
|
|
230
291
|
```
|
|
@@ -235,22 +296,25 @@ export default async function DashboardPage() {
|
|
|
235
296
|
|
|
236
297
|
### 1. Setup Express Middleware
|
|
237
298
|
|
|
238
|
-
Configure the Express middleware to parse authenticated requests:
|
|
239
|
-
|
|
240
299
|
```typescript
|
|
241
300
|
// express-app/src/app.ts
|
|
242
301
|
import express from "express";
|
|
243
|
-
import
|
|
302
|
+
import { createDb, createExpressMiddleware } from "hylekit";
|
|
244
303
|
|
|
245
304
|
const app = express();
|
|
246
305
|
|
|
247
|
-
// Option 1: Trust headers from BFF (
|
|
248
|
-
app.use(
|
|
306
|
+
// Option 1: Trust headers from BFF (no DB needed)
|
|
307
|
+
app.use(createExpressMiddleware()({
|
|
249
308
|
unauthenticatedRoutes: ["/health", "/public/*"],
|
|
250
309
|
}));
|
|
251
310
|
|
|
252
311
|
// Option 2: Verify sessions against DB (for service-to-service calls)
|
|
253
|
-
|
|
312
|
+
const db = createDb({
|
|
313
|
+
url: process.env.HYLE_DATABASE_URL!,
|
|
314
|
+
authToken: process.env.HYLE_DATABASE_AUTH_TOKEN,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
app.use(createExpressMiddleware(db)({
|
|
254
318
|
unauthenticatedRoutes: ["/health", "/public/*"],
|
|
255
319
|
verifySession: true, // Checks session in Turso DB
|
|
256
320
|
}));
|
|
@@ -311,13 +375,16 @@ app.post("/api/order", (req, res) => {
|
|
|
311
375
|
Use the BFF client to make authenticated calls from your frontend backend:
|
|
312
376
|
|
|
313
377
|
```typescript
|
|
314
|
-
// Next.js:
|
|
378
|
+
// Next.js: lib/bff.ts
|
|
315
379
|
import { createNextJsBff } from "hylekit";
|
|
380
|
+
import { auth } from "./auth"; // Your auth instance from step 1
|
|
381
|
+
|
|
382
|
+
export const bff = createNextJsBff(auth, process.env.EXPRESS_API_URL!);
|
|
316
383
|
|
|
317
|
-
|
|
384
|
+
// Usage in app/api/data/route.ts
|
|
385
|
+
import { bff } from "@/lib/bff";
|
|
318
386
|
|
|
319
387
|
export async function GET() {
|
|
320
|
-
// Session is automatically attached to the request
|
|
321
388
|
const data = await bff.get("/api/profile");
|
|
322
389
|
return Response.json(data);
|
|
323
390
|
}
|
|
@@ -374,34 +441,34 @@ const { user, session, account, verification } = hyle.schema;
|
|
|
374
441
|
|
|
375
442
|
The library exports a default `hyle` object containing:
|
|
376
443
|
|
|
377
|
-
### `hyle.server`
|
|
444
|
+
### `hyle.server` (Server-Only)
|
|
378
445
|
|
|
379
|
-
#### `
|
|
446
|
+
#### `hylekit/sveltekit`
|
|
380
447
|
- `handler`: `{ GET, POST }` route handlers.
|
|
381
448
|
- `createHandle()`: Creates a SvelteKit handle hook.
|
|
382
449
|
- `getSession(event)`: Get session from request event.
|
|
383
450
|
- `isAuthenticated(event)`: Check if user is authenticated.
|
|
384
451
|
- `makeAuthenticatedCall(fn)`: Wrapper to ensure authentication.
|
|
385
452
|
|
|
386
|
-
#### `
|
|
453
|
+
#### `hylekit/nextjs`
|
|
387
454
|
- `handler`: `{ GET, POST }` route handlers.
|
|
388
455
|
- `getSession()`: Get session from current request headers.
|
|
389
456
|
- `isAuthenticated()`: Check if user is authenticated.
|
|
390
457
|
- `getUser()`: Get current user object.
|
|
391
458
|
- `makeAuthenticatedCall(fn)`: Wrapper to ensure authentication.
|
|
392
459
|
|
|
393
|
-
#### `
|
|
460
|
+
#### `hylekit/server/express` (or `hylekit`)
|
|
394
461
|
- `middleware(options)`: Express middleware for session verification.
|
|
395
462
|
- `isAuthenticated(req)`: Type guard to check if request is authenticated.
|
|
396
463
|
- `getAuthContext(req)`: Get `{ user, session }` from request (throws if not authenticated).
|
|
397
464
|
|
|
398
|
-
### `hyle.client`
|
|
465
|
+
### `hyle.client` (Client-Only)
|
|
399
466
|
|
|
400
|
-
#### `
|
|
467
|
+
#### `hylekit/client` or `hylekit/client/sveltekit`
|
|
401
468
|
- `login`: Alias for `signIn`.
|
|
402
469
|
- All `better-auth/svelte` client methods.
|
|
403
470
|
|
|
404
|
-
#### `
|
|
471
|
+
#### `hylekit/client` or `hylekit/client/nextjs`
|
|
405
472
|
- `login`: Alias for `signIn`.
|
|
406
473
|
- All `better-auth/react` client methods.
|
|
407
474
|
|
package/dist/bff/index.cjs
CHANGED
|
@@ -68,149 +68,15 @@ var BffClientBase = class {
|
|
|
68
68
|
|
|
69
69
|
// src/bff/nextjs.ts
|
|
70
70
|
var import_headers = require("next/headers");
|
|
71
|
-
|
|
72
|
-
// src/lib/auth.ts
|
|
73
|
-
var import_better_auth = require("better-auth");
|
|
74
|
-
var import_drizzle = require("better-auth/adapters/drizzle");
|
|
75
|
-
|
|
76
|
-
// src/lib/db.ts
|
|
77
|
-
var import_libsql = require("drizzle-orm/libsql");
|
|
78
|
-
var import_client = require("@libsql/client");
|
|
79
|
-
|
|
80
|
-
// src/lib/schema.ts
|
|
81
|
-
var schema_exports = {};
|
|
82
|
-
__export(schema_exports, {
|
|
83
|
-
account: () => account,
|
|
84
|
-
accountRelations: () => accountRelations,
|
|
85
|
-
session: () => session,
|
|
86
|
-
sessionRelations: () => sessionRelations,
|
|
87
|
-
user: () => user,
|
|
88
|
-
userRelations: () => userRelations,
|
|
89
|
-
verification: () => verification
|
|
90
|
-
});
|
|
91
|
-
var import_drizzle_orm = require("drizzle-orm");
|
|
92
|
-
var import_sqlite_core = require("drizzle-orm/sqlite-core");
|
|
93
|
-
var user = (0, import_sqlite_core.sqliteTable)("user", {
|
|
94
|
-
id: (0, import_sqlite_core.text)("id").primaryKey(),
|
|
95
|
-
name: (0, import_sqlite_core.text)("name").notNull(),
|
|
96
|
-
email: (0, import_sqlite_core.text)("email").notNull().unique(),
|
|
97
|
-
emailVerified: (0, import_sqlite_core.integer)("email_verified", { mode: "boolean" }).default(false).notNull(),
|
|
98
|
-
image: (0, import_sqlite_core.text)("image"),
|
|
99
|
-
createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
100
|
-
updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
|
|
101
|
-
});
|
|
102
|
-
var session = (0, import_sqlite_core.sqliteTable)(
|
|
103
|
-
"session",
|
|
104
|
-
{
|
|
105
|
-
id: (0, import_sqlite_core.text)("id").primaryKey(),
|
|
106
|
-
expiresAt: (0, import_sqlite_core.integer)("expires_at", { mode: "timestamp_ms" }).notNull(),
|
|
107
|
-
token: (0, import_sqlite_core.text)("token").notNull().unique(),
|
|
108
|
-
createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
109
|
-
updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
|
|
110
|
-
ipAddress: (0, import_sqlite_core.text)("ip_address"),
|
|
111
|
-
userAgent: (0, import_sqlite_core.text)("user_agent"),
|
|
112
|
-
userId: (0, import_sqlite_core.text)("user_id").notNull().references(() => user.id, { onDelete: "cascade" })
|
|
113
|
-
},
|
|
114
|
-
(table) => [(0, import_sqlite_core.index)("session_userId_idx").on(table.userId)]
|
|
115
|
-
);
|
|
116
|
-
var account = (0, import_sqlite_core.sqliteTable)(
|
|
117
|
-
"account",
|
|
118
|
-
{
|
|
119
|
-
id: (0, import_sqlite_core.text)("id").primaryKey(),
|
|
120
|
-
accountId: (0, import_sqlite_core.text)("account_id").notNull(),
|
|
121
|
-
providerId: (0, import_sqlite_core.text)("provider_id").notNull(),
|
|
122
|
-
userId: (0, import_sqlite_core.text)("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
|
|
123
|
-
accessToken: (0, import_sqlite_core.text)("access_token"),
|
|
124
|
-
refreshToken: (0, import_sqlite_core.text)("refresh_token"),
|
|
125
|
-
idToken: (0, import_sqlite_core.text)("id_token"),
|
|
126
|
-
accessTokenExpiresAt: (0, import_sqlite_core.integer)("access_token_expires_at", {
|
|
127
|
-
mode: "timestamp_ms"
|
|
128
|
-
}),
|
|
129
|
-
refreshTokenExpiresAt: (0, import_sqlite_core.integer)("refresh_token_expires_at", {
|
|
130
|
-
mode: "timestamp_ms"
|
|
131
|
-
}),
|
|
132
|
-
scope: (0, import_sqlite_core.text)("scope"),
|
|
133
|
-
password: (0, import_sqlite_core.text)("password"),
|
|
134
|
-
createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
135
|
-
updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
|
|
136
|
-
},
|
|
137
|
-
(table) => [(0, import_sqlite_core.index)("account_userId_idx").on(table.userId)]
|
|
138
|
-
);
|
|
139
|
-
var verification = (0, import_sqlite_core.sqliteTable)(
|
|
140
|
-
"verification",
|
|
141
|
-
{
|
|
142
|
-
id: (0, import_sqlite_core.text)("id").primaryKey(),
|
|
143
|
-
identifier: (0, import_sqlite_core.text)("identifier").notNull(),
|
|
144
|
-
value: (0, import_sqlite_core.text)("value").notNull(),
|
|
145
|
-
expiresAt: (0, import_sqlite_core.integer)("expires_at", { mode: "timestamp_ms" }).notNull(),
|
|
146
|
-
createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
147
|
-
updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
|
|
148
|
-
},
|
|
149
|
-
(table) => [(0, import_sqlite_core.index)("verification_identifier_idx").on(table.identifier)]
|
|
150
|
-
);
|
|
151
|
-
var userRelations = (0, import_drizzle_orm.relations)(user, ({ many }) => ({
|
|
152
|
-
sessions: many(session),
|
|
153
|
-
accounts: many(account)
|
|
154
|
-
}));
|
|
155
|
-
var sessionRelations = (0, import_drizzle_orm.relations)(session, ({ one }) => ({
|
|
156
|
-
user: one(user, {
|
|
157
|
-
fields: [session.userId],
|
|
158
|
-
references: [user.id]
|
|
159
|
-
})
|
|
160
|
-
}));
|
|
161
|
-
var accountRelations = (0, import_drizzle_orm.relations)(account, ({ one }) => ({
|
|
162
|
-
user: one(user, {
|
|
163
|
-
fields: [account.userId],
|
|
164
|
-
references: [user.id]
|
|
165
|
-
})
|
|
166
|
-
}));
|
|
167
|
-
|
|
168
|
-
// src/lib/db.ts
|
|
169
|
-
var client = (0, import_client.createClient)({
|
|
170
|
-
url: process.env.DATABASE_URL,
|
|
171
|
-
authToken: process.env.DATABASE_AUTH_TOKEN
|
|
172
|
-
});
|
|
173
|
-
var db = (0, import_libsql.drizzle)(client, { schema: schema_exports });
|
|
174
|
-
|
|
175
|
-
// src/lib/auth.ts
|
|
176
|
-
var auth = (0, import_better_auth.betterAuth)({
|
|
177
|
-
database: (0, import_drizzle.drizzleAdapter)(db, {
|
|
178
|
-
provider: "sqlite",
|
|
179
|
-
schema: {
|
|
180
|
-
...schema_exports
|
|
181
|
-
}
|
|
182
|
-
}),
|
|
183
|
-
baseURL: process.env.BETTER_AUTH_URL || process.env.PUBLIC_APP_URL || process.env.NEXT_PUBLIC_APP_URL,
|
|
184
|
-
secret: process.env.BETTER_AUTH_SECRET,
|
|
185
|
-
trustedOrigins: process.env.TRUSTED_ORIGINS ? process.env.TRUSTED_ORIGINS.split(",") : void 0,
|
|
186
|
-
socialProviders: {
|
|
187
|
-
google: {
|
|
188
|
-
clientId: process.env.GOOGLE_CLIENT_ID || "",
|
|
189
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET || ""
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
session: {
|
|
193
|
-
expiresIn: 60 * 60 * 24 * 7,
|
|
194
|
-
// 7 days
|
|
195
|
-
updateAge: 60 * 60 * 24,
|
|
196
|
-
// Update session every 24 hours
|
|
197
|
-
cookieCache: {
|
|
198
|
-
enabled: true,
|
|
199
|
-
maxAge: 60 * 5
|
|
200
|
-
// 5 minutes
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
// src/bff/nextjs.ts
|
|
206
71
|
var NextJsBffClient = class extends BffClientBase {
|
|
207
|
-
constructor(config) {
|
|
72
|
+
constructor(auth, config) {
|
|
208
73
|
super(config);
|
|
74
|
+
this.auth = auth;
|
|
209
75
|
}
|
|
210
76
|
async getAuthHeaders() {
|
|
211
77
|
try {
|
|
212
78
|
const requestHeaders = await (0, import_headers.headers)();
|
|
213
|
-
const sessionData = await auth.api.getSession({
|
|
79
|
+
const sessionData = await this.auth.api.getSession({
|
|
214
80
|
headers: requestHeaders
|
|
215
81
|
});
|
|
216
82
|
if (!sessionData) return {};
|
|
@@ -276,9 +142,9 @@ var NextJsBffClient = class extends BffClientBase {
|
|
|
276
142
|
});
|
|
277
143
|
}
|
|
278
144
|
};
|
|
279
|
-
var createNextJsBff = (baseUrlOrConfig) => {
|
|
145
|
+
var createNextJsBff = (auth, baseUrlOrConfig) => {
|
|
280
146
|
const config = typeof baseUrlOrConfig === "string" ? { baseUrl: baseUrlOrConfig } : baseUrlOrConfig;
|
|
281
|
-
return new NextJsBffClient(config);
|
|
147
|
+
return new NextJsBffClient(auth, config);
|
|
282
148
|
};
|
|
283
149
|
|
|
284
150
|
// src/bff/sveltekit.ts
|
package/dist/bff/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bff/index.ts","../../src/bff/client.ts","../../src/bff/nextjs.ts","../../src/lib/auth.ts","../../src/lib/db.ts","../../src/lib/schema.ts","../../src/bff/sveltekit.ts"],"sourcesContent":["// Export BFF clients\nexport { createNextJsBff } from \"./nextjs\";\nexport { createSvelteKitBff } from \"./sveltekit\";\nexport type { BffClientConfig, RequestOptions } from \"./types\";\n","import type { BffClientConfig, FetchMethod, RequestOptions } from \"./types\";\n\n/**\n * Base client logic.\n */\nexport class BffClientBase {\n constructor(private config: BffClientConfig) {}\n\n protected async request<T>(\n path: string,\n method: FetchMethod,\n options: RequestOptions = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl);\n \n if (options.query) {\n Object.entries(options.query).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n const headers = new Headers(options.headers || {});\n \n // Add default headers\n if (this.config.headers) {\n Object.entries(this.config.headers).forEach(([key, value]) => {\n if (!headers.has(key)) {\n headers.set(key, value);\n }\n });\n }\n\n // Set Content-Type if body is present and not FormData\n if (options.body && !(options.body instanceof FormData) && !headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n const response = await fetch(url.toString(), {\n ...options,\n method,\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`BFF Request Failed: ${response.status} ${response.statusText}`);\n }\n\n // Retrieve the Content-Type header to check if the response is JSON\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n return response.json() as Promise<T>;\n }\n \n return response.text() as unknown as Promise<T>;\n }\n}\n","import { BffClientBase } from \"./client\";\nimport type { BffClientConfig, RequestOptions } from \"./types\";\nimport { headers } from \"next/headers\";\nimport { auth } from \"../lib/auth\";\n\nexport class NextJsBffClient extends BffClientBase {\n constructor(config: BffClientConfig) {\n super(config);\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n try {\n const requestHeaders = await headers();\n const sessionData = await auth.api.getSession({\n headers: requestHeaders\n });\n\n if (!sessionData) return {};\n\n return {\n \"x-hyle-user\": Buffer.from(JSON.stringify(sessionData.user)).toString(\"base64\"),\n \"x-hyle-session\": Buffer.from(JSON.stringify(sessionData.session)).toString(\"base64\")\n };\n } catch (e) {\n // Context where headers() is not available (e.g. static generation)\n return {};\n }\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"GET\", { \n ...options,\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async post<T>(path: string, body?: any, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"POST\", { \n ...options, \n body: JSON.stringify(body),\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async put<T>(path: string, body?: any, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"PUT\", { \n ...options, \n body: JSON.stringify(body),\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async patch<T>(path: string, body?: any, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"PATCH\", { \n ...options, \n body: JSON.stringify(body),\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"DELETE\", { \n ...options,\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n}\n\nexport const createNextJsBff = (baseUrlOrConfig: string | BffClientConfig) => {\n const config = typeof baseUrlOrConfig === \"string\" \n ? { baseUrl: baseUrlOrConfig } \n : baseUrlOrConfig;\n return new NextJsBffClient(config);\n};\n","import { betterAuth } from \"better-auth\";\nimport { drizzleAdapter } from \"better-auth/adapters/drizzle\";\nimport { db } from \"./db\";\nimport * as schema from \"./schema\";\n\nexport const auth = betterAuth({\n database: drizzleAdapter(db, {\n provider: \"sqlite\",\n schema: {\n ...schema\n }\n }),\n baseURL: process.env.BETTER_AUTH_URL || process.env.PUBLIC_APP_URL || process.env.NEXT_PUBLIC_APP_URL,\n secret: process.env.BETTER_AUTH_SECRET,\n trustedOrigins: process.env.TRUSTED_ORIGINS ? process.env.TRUSTED_ORIGINS.split(\",\") : undefined,\n socialProviders: {\n google: {\n clientId: process.env.GOOGLE_CLIENT_ID || \"\",\n clientSecret: process.env.GOOGLE_CLIENT_SECRET || \"\",\n },\n },\n session: {\n expiresIn: 60 * 60 * 24 * 7, // 7 days\n updateAge: 60 * 60 * 24, // Update session every 24 hours\n cookieCache: {\n enabled: true,\n maxAge: 60 * 5, // 5 minutes\n },\n },\n});\n","import { drizzle } from \"drizzle-orm/libsql\";\nimport { createClient } from \"@libsql/client\";\nimport * as schema from \"./schema\";\n\nconst client = createClient({\n url: process.env.DATABASE_URL!,\n authToken: process.env.DATABASE_AUTH_TOKEN!,\n});\n\nexport const db = drizzle(client, { schema });\n","import { relations, sql } from \"drizzle-orm\";\nimport { sqliteTable, text, integer, index } from \"drizzle-orm/sqlite-core\";\n\nexport const user = sqliteTable(\"user\", {\n id: text(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n email: text(\"email\").notNull().unique(),\n emailVerified: integer(\"email_verified\", { mode: \"boolean\" })\n .default(false)\n .notNull(),\n image: text(\"image\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => /* @__PURE__ */ new Date())\n .notNull(),\n});\n\nexport const session = sqliteTable(\n \"session\",\n {\n id: text(\"id\").primaryKey(),\n expiresAt: integer(\"expires_at\", { mode: \"timestamp_ms\" }).notNull(),\n token: text(\"token\").notNull().unique(),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" })\n .$onUpdate(() => /* @__PURE__ */ new Date())\n .notNull(),\n ipAddress: text(\"ip_address\"),\n userAgent: text(\"user_agent\"),\n userId: text(\"user_id\")\n .notNull()\n .references(() => user.id, { onDelete: \"cascade\" }),\n },\n (table) => [index(\"session_userId_idx\").on(table.userId)],\n);\n\nexport const account = sqliteTable(\n \"account\",\n {\n id: text(\"id\").primaryKey(),\n accountId: text(\"account_id\").notNull(),\n providerId: text(\"provider_id\").notNull(),\n userId: text(\"user_id\")\n .notNull()\n .references(() => user.id, { onDelete: \"cascade\" }),\n accessToken: text(\"access_token\"),\n refreshToken: text(\"refresh_token\"),\n idToken: text(\"id_token\"),\n accessTokenExpiresAt: integer(\"access_token_expires_at\", {\n mode: \"timestamp_ms\",\n }),\n refreshTokenExpiresAt: integer(\"refresh_token_expires_at\", {\n mode: \"timestamp_ms\",\n }),\n scope: text(\"scope\"),\n password: text(\"password\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" })\n .$onUpdate(() => /* @__PURE__ */ new Date())\n .notNull(),\n },\n (table) => [index(\"account_userId_idx\").on(table.userId)],\n);\n\nexport const verification = sqliteTable(\n \"verification\",\n {\n id: text(\"id\").primaryKey(),\n identifier: text(\"identifier\").notNull(),\n value: text(\"value\").notNull(),\n expiresAt: integer(\"expires_at\", { mode: \"timestamp_ms\" }).notNull(),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => /* @__PURE__ */ new Date())\n .notNull(),\n },\n (table) => [index(\"verification_identifier_idx\").on(table.identifier)],\n);\n\nexport const userRelations = relations(user, ({ many }) => ({\n sessions: many(session),\n accounts: many(account),\n}));\n\nexport const sessionRelations = relations(session, ({ one }) => ({\n user: one(user, {\n fields: [session.userId],\n references: [user.id],\n }),\n}));\n\nexport const accountRelations = relations(account, ({ one }) => ({\n user: one(user, {\n fields: [account.userId],\n references: [user.id],\n }),\n}));\n","import { BffClientBase } from \"./client\";\nimport type { BffClientConfig, RequestOptions } from \"./types\";\nimport type { RequestEvent } from \"@sveltejs/kit\";\n\nexport class SvelteKitBffClient extends BffClientBase {\n constructor(config: BffClientConfig) {\n super(config);\n }\n\n /**\n * Creates a request context bound to a specific SvelteKit event.\n * This is necessary because SvelteKit doesn't have global request storage.\n */\n with(event: RequestEvent) {\n // Extract token from locals if available (set by our handle hook)\n // or try to get it from session.\n const sessionData = (event.locals as any).session;\n let authHeaders: Record<string, string> = {};\n\n if (sessionData?.user && sessionData?.session) {\n authHeaders = {\n \"x-hyle-user\": Buffer.from(JSON.stringify(sessionData.user)).toString(\"base64\"),\n \"x-hyle-session\": Buffer.from(JSON.stringify(sessionData.session)).toString(\"base64\")\n };\n }\n\n return {\n get: <T>(path: string, options?: RequestOptions) => \n this.request<T>(path, \"GET\", {\n ...options,\n headers: { ...options?.headers, ...authHeaders }\n }),\n \n post: <T>(path: string, body?: any, options?: RequestOptions) => \n this.request<T>(path, \"POST\", { \n ...options, \n body: JSON.stringify(body),\n headers: { ...options?.headers, ...authHeaders }\n }),\n\n put: <T>(path: string, body?: any, options?: RequestOptions) => \n this.request<T>(path, \"PUT\", { \n ...options, \n body: JSON.stringify(body),\n headers: { ...options?.headers, ...authHeaders }\n }),\n\n patch: <T>(path: string, body?: any, options?: RequestOptions) => \n this.request<T>(path, \"PATCH\", { \n ...options, \n body: JSON.stringify(body),\n headers: { ...options?.headers, ...authHeaders }\n }),\n\n delete: <T>(path: string, options?: RequestOptions) => \n this.request<T>(path, \"DELETE\", {\n ...options,\n headers: { ...options?.headers, ...authHeaders }\n }),\n };\n }\n}\n\nexport const createSvelteKitBff = (baseUrlOrConfig: string | BffClientConfig) => {\n const config = typeof baseUrlOrConfig === \"string\" \n ? { baseUrl: baseUrlOrConfig } \n : baseUrlOrConfig;\n return new SvelteKitBffClient(config);\n};\n"],"mappings":"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","names":["headers"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bff/index.ts","../../src/bff/client.ts","../../src/bff/nextjs.ts","../../src/bff/sveltekit.ts"],"sourcesContent":["// Export BFF clients\nexport { createNextJsBff } from \"./nextjs\";\nexport { createSvelteKitBff } from \"./sveltekit\";\nexport type { BffClientConfig, RequestOptions } from \"./types\";\n","import type { BffClientConfig, FetchMethod, RequestOptions } from \"./types\";\n\n/**\n * Base client logic.\n */\nexport class BffClientBase {\n constructor(private config: BffClientConfig) {}\n\n protected async request<T>(\n path: string,\n method: FetchMethod,\n options: RequestOptions = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl);\n \n if (options.query) {\n Object.entries(options.query).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n const headers = new Headers(options.headers || {});\n \n // Add default headers\n if (this.config.headers) {\n Object.entries(this.config.headers).forEach(([key, value]) => {\n if (!headers.has(key)) {\n headers.set(key, value);\n }\n });\n }\n\n // Set Content-Type if body is present and not FormData\n if (options.body && !(options.body instanceof FormData) && !headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n const response = await fetch(url.toString(), {\n ...options,\n method,\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`BFF Request Failed: ${response.status} ${response.statusText}`);\n }\n\n // Retrieve the Content-Type header to check if the response is JSON\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n return response.json() as Promise<T>;\n }\n \n return response.text() as unknown as Promise<T>;\n }\n}\n","import { BffClientBase } from \"./client\";\nimport type { BffClientConfig, RequestOptions } from \"./types\";\nimport { headers } from \"next/headers\";\n\n// Type for auth instance created by createAuth\ntype HyleAuth = ReturnType<typeof import(\"better-auth\").betterAuth>;\n\n/**\n * Next.js BFF Client that requires an auth instance.\n */\nexport class NextJsBffClient extends BffClientBase {\n private auth: HyleAuth;\n\n constructor(auth: HyleAuth, config: BffClientConfig) {\n super(config);\n this.auth = auth;\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n try {\n const requestHeaders = await headers();\n const sessionData = await this.auth.api.getSession({\n headers: requestHeaders\n });\n\n if (!sessionData) return {};\n\n return {\n \"x-hyle-user\": Buffer.from(JSON.stringify(sessionData.user)).toString(\"base64\"),\n \"x-hyle-session\": Buffer.from(JSON.stringify(sessionData.session)).toString(\"base64\")\n };\n } catch (e) {\n // Context where headers() is not available (e.g. static generation)\n return {};\n }\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"GET\", {\n ...options,\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async post<T>(path: string, body?: any, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"POST\", {\n ...options,\n body: JSON.stringify(body),\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async put<T>(path: string, body?: any, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"PUT\", {\n ...options,\n body: JSON.stringify(body),\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async patch<T>(path: string, body?: any, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"PATCH\", {\n ...options,\n body: JSON.stringify(body),\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n\n async delete<T>(path: string, options?: RequestOptions): Promise<T> {\n const authHeaders = await this.getAuthHeaders();\n return this.request<T>(path, \"DELETE\", {\n ...options,\n headers: {\n ...options?.headers,\n ...authHeaders\n }\n });\n }\n}\n\n/**\n * Creates a Next.js BFF client for making authenticated requests to your Express API.\n * \n * @param auth - Auth instance created by createAuth()\n * @param baseUrlOrConfig - Base URL string or full config object\n * \n * @example\n * ```typescript\n * // In lib/bff.ts\n * import { createDb, createAuth, createNextJsBff } from \"hylekit\";\n * \n * const db = createDb({ url: process.env.HYLE_DATABASE_URL!, authToken: process.env.HYLE_DATABASE_AUTH_TOKEN });\n * const auth = createAuth(db, { ... });\n * \n * export const bff = createNextJsBff(auth, process.env.EXPRESS_API_URL!);\n * \n * // Usage in server components\n * const data = await bff.get(\"/api/data\");\n * ```\n */\nexport const createNextJsBff = (auth: HyleAuth, baseUrlOrConfig: string | BffClientConfig) => {\n const config = typeof baseUrlOrConfig === \"string\"\n ? { baseUrl: baseUrlOrConfig }\n : baseUrlOrConfig;\n return new NextJsBffClient(auth, config);\n};\n","import { BffClientBase } from \"./client\";\nimport type { BffClientConfig, RequestOptions } from \"./types\";\nimport type { RequestEvent } from \"@sveltejs/kit\";\n\nexport class SvelteKitBffClient extends BffClientBase {\n constructor(config: BffClientConfig) {\n super(config);\n }\n\n /**\n * Creates a request context bound to a specific SvelteKit event.\n * This is necessary because SvelteKit doesn't have global request storage.\n */\n with(event: RequestEvent) {\n // Extract token from locals if available (set by our handle hook)\n // or try to get it from session.\n const sessionData = (event.locals as any).session;\n let authHeaders: Record<string, string> = {};\n\n if (sessionData?.user && sessionData?.session) {\n authHeaders = {\n \"x-hyle-user\": Buffer.from(JSON.stringify(sessionData.user)).toString(\"base64\"),\n \"x-hyle-session\": Buffer.from(JSON.stringify(sessionData.session)).toString(\"base64\")\n };\n }\n\n return {\n get: <T>(path: string, options?: RequestOptions) => \n this.request<T>(path, \"GET\", {\n ...options,\n headers: { ...options?.headers, ...authHeaders }\n }),\n \n post: <T>(path: string, body?: any, options?: RequestOptions) => \n this.request<T>(path, \"POST\", { \n ...options, \n body: JSON.stringify(body),\n headers: { ...options?.headers, ...authHeaders }\n }),\n\n put: <T>(path: string, body?: any, options?: RequestOptions) => \n this.request<T>(path, \"PUT\", { \n ...options, \n body: JSON.stringify(body),\n headers: { ...options?.headers, ...authHeaders }\n }),\n\n patch: <T>(path: string, body?: any, options?: RequestOptions) => \n this.request<T>(path, \"PATCH\", { \n ...options, \n body: JSON.stringify(body),\n headers: { ...options?.headers, ...authHeaders }\n }),\n\n delete: <T>(path: string, options?: RequestOptions) => \n this.request<T>(path, \"DELETE\", {\n ...options,\n headers: { ...options?.headers, ...authHeaders }\n }),\n };\n }\n}\n\nexport const createSvelteKitBff = (baseUrlOrConfig: string | BffClientConfig) => {\n const config = typeof baseUrlOrConfig === \"string\" \n ? { baseUrl: baseUrlOrConfig } \n : baseUrlOrConfig;\n return new SvelteKitBffClient(config);\n};\n"],"mappings":"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","names":["headers"]}
|
package/dist/bff/index.d.cts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { B as BffClientConfig, R as RequestOptions, c as createNextJsBff, a as createSvelteKitBff } from '../index-
|
|
1
|
+
export { B as BffClientConfig, R as RequestOptions, c as createNextJsBff, a as createSvelteKitBff } from '../index-B-5TEr94.cjs';
|
|
2
|
+
import 'better-auth';
|
|
2
3
|
import '@sveltejs/kit';
|
package/dist/bff/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { B as BffClientConfig, R as RequestOptions, c as createNextJsBff, a as createSvelteKitBff } from '../index-
|
|
1
|
+
export { B as BffClientConfig, R as RequestOptions, c as createNextJsBff, a as createSvelteKitBff } from '../index-B-5TEr94.js';
|
|
2
|
+
import 'better-auth';
|
|
2
3
|
import '@sveltejs/kit';
|