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/dist/bff/index.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __export = (target, all) => {
|
|
3
|
-
for (var name in all)
|
|
4
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
-
};
|
|
6
|
-
|
|
7
1
|
// src/bff/client.ts
|
|
8
2
|
var BffClientBase = class {
|
|
9
3
|
constructor(config) {
|
|
@@ -47,149 +41,15 @@ var BffClientBase = class {
|
|
|
47
41
|
|
|
48
42
|
// src/bff/nextjs.ts
|
|
49
43
|
import { headers } from "next/headers";
|
|
50
|
-
|
|
51
|
-
// src/lib/auth.ts
|
|
52
|
-
import { betterAuth } from "better-auth";
|
|
53
|
-
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
54
|
-
|
|
55
|
-
// src/lib/db.ts
|
|
56
|
-
import { drizzle } from "drizzle-orm/libsql";
|
|
57
|
-
import { createClient } from "@libsql/client";
|
|
58
|
-
|
|
59
|
-
// src/lib/schema.ts
|
|
60
|
-
var schema_exports = {};
|
|
61
|
-
__export(schema_exports, {
|
|
62
|
-
account: () => account,
|
|
63
|
-
accountRelations: () => accountRelations,
|
|
64
|
-
session: () => session,
|
|
65
|
-
sessionRelations: () => sessionRelations,
|
|
66
|
-
user: () => user,
|
|
67
|
-
userRelations: () => userRelations,
|
|
68
|
-
verification: () => verification
|
|
69
|
-
});
|
|
70
|
-
import { relations, sql } from "drizzle-orm";
|
|
71
|
-
import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core";
|
|
72
|
-
var user = sqliteTable("user", {
|
|
73
|
-
id: text("id").primaryKey(),
|
|
74
|
-
name: text("name").notNull(),
|
|
75
|
-
email: text("email").notNull().unique(),
|
|
76
|
-
emailVerified: integer("email_verified", { mode: "boolean" }).default(false).notNull(),
|
|
77
|
-
image: text("image"),
|
|
78
|
-
createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
79
|
-
updatedAt: integer("updated_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
|
|
80
|
-
});
|
|
81
|
-
var session = sqliteTable(
|
|
82
|
-
"session",
|
|
83
|
-
{
|
|
84
|
-
id: text("id").primaryKey(),
|
|
85
|
-
expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(),
|
|
86
|
-
token: text("token").notNull().unique(),
|
|
87
|
-
createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
88
|
-
updatedAt: integer("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
|
|
89
|
-
ipAddress: text("ip_address"),
|
|
90
|
-
userAgent: text("user_agent"),
|
|
91
|
-
userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" })
|
|
92
|
-
},
|
|
93
|
-
(table) => [index("session_userId_idx").on(table.userId)]
|
|
94
|
-
);
|
|
95
|
-
var account = sqliteTable(
|
|
96
|
-
"account",
|
|
97
|
-
{
|
|
98
|
-
id: text("id").primaryKey(),
|
|
99
|
-
accountId: text("account_id").notNull(),
|
|
100
|
-
providerId: text("provider_id").notNull(),
|
|
101
|
-
userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
|
|
102
|
-
accessToken: text("access_token"),
|
|
103
|
-
refreshToken: text("refresh_token"),
|
|
104
|
-
idToken: text("id_token"),
|
|
105
|
-
accessTokenExpiresAt: integer("access_token_expires_at", {
|
|
106
|
-
mode: "timestamp_ms"
|
|
107
|
-
}),
|
|
108
|
-
refreshTokenExpiresAt: integer("refresh_token_expires_at", {
|
|
109
|
-
mode: "timestamp_ms"
|
|
110
|
-
}),
|
|
111
|
-
scope: text("scope"),
|
|
112
|
-
password: text("password"),
|
|
113
|
-
createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
114
|
-
updatedAt: integer("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
|
|
115
|
-
},
|
|
116
|
-
(table) => [index("account_userId_idx").on(table.userId)]
|
|
117
|
-
);
|
|
118
|
-
var verification = sqliteTable(
|
|
119
|
-
"verification",
|
|
120
|
-
{
|
|
121
|
-
id: text("id").primaryKey(),
|
|
122
|
-
identifier: text("identifier").notNull(),
|
|
123
|
-
value: text("value").notNull(),
|
|
124
|
-
expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(),
|
|
125
|
-
createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
|
|
126
|
-
updatedAt: integer("updated_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
|
|
127
|
-
},
|
|
128
|
-
(table) => [index("verification_identifier_idx").on(table.identifier)]
|
|
129
|
-
);
|
|
130
|
-
var userRelations = relations(user, ({ many }) => ({
|
|
131
|
-
sessions: many(session),
|
|
132
|
-
accounts: many(account)
|
|
133
|
-
}));
|
|
134
|
-
var sessionRelations = relations(session, ({ one }) => ({
|
|
135
|
-
user: one(user, {
|
|
136
|
-
fields: [session.userId],
|
|
137
|
-
references: [user.id]
|
|
138
|
-
})
|
|
139
|
-
}));
|
|
140
|
-
var accountRelations = relations(account, ({ one }) => ({
|
|
141
|
-
user: one(user, {
|
|
142
|
-
fields: [account.userId],
|
|
143
|
-
references: [user.id]
|
|
144
|
-
})
|
|
145
|
-
}));
|
|
146
|
-
|
|
147
|
-
// src/lib/db.ts
|
|
148
|
-
var client = createClient({
|
|
149
|
-
url: process.env.DATABASE_URL,
|
|
150
|
-
authToken: process.env.DATABASE_AUTH_TOKEN
|
|
151
|
-
});
|
|
152
|
-
var db = drizzle(client, { schema: schema_exports });
|
|
153
|
-
|
|
154
|
-
// src/lib/auth.ts
|
|
155
|
-
var auth = betterAuth({
|
|
156
|
-
database: drizzleAdapter(db, {
|
|
157
|
-
provider: "sqlite",
|
|
158
|
-
schema: {
|
|
159
|
-
...schema_exports
|
|
160
|
-
}
|
|
161
|
-
}),
|
|
162
|
-
baseURL: process.env.BETTER_AUTH_URL || process.env.PUBLIC_APP_URL || process.env.NEXT_PUBLIC_APP_URL,
|
|
163
|
-
secret: process.env.BETTER_AUTH_SECRET,
|
|
164
|
-
trustedOrigins: process.env.TRUSTED_ORIGINS ? process.env.TRUSTED_ORIGINS.split(",") : void 0,
|
|
165
|
-
socialProviders: {
|
|
166
|
-
google: {
|
|
167
|
-
clientId: process.env.GOOGLE_CLIENT_ID || "",
|
|
168
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET || ""
|
|
169
|
-
}
|
|
170
|
-
},
|
|
171
|
-
session: {
|
|
172
|
-
expiresIn: 60 * 60 * 24 * 7,
|
|
173
|
-
// 7 days
|
|
174
|
-
updateAge: 60 * 60 * 24,
|
|
175
|
-
// Update session every 24 hours
|
|
176
|
-
cookieCache: {
|
|
177
|
-
enabled: true,
|
|
178
|
-
maxAge: 60 * 5
|
|
179
|
-
// 5 minutes
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
// src/bff/nextjs.ts
|
|
185
44
|
var NextJsBffClient = class extends BffClientBase {
|
|
186
|
-
constructor(config) {
|
|
45
|
+
constructor(auth, config) {
|
|
187
46
|
super(config);
|
|
47
|
+
this.auth = auth;
|
|
188
48
|
}
|
|
189
49
|
async getAuthHeaders() {
|
|
190
50
|
try {
|
|
191
51
|
const requestHeaders = await headers();
|
|
192
|
-
const sessionData = await auth.api.getSession({
|
|
52
|
+
const sessionData = await this.auth.api.getSession({
|
|
193
53
|
headers: requestHeaders
|
|
194
54
|
});
|
|
195
55
|
if (!sessionData) return {};
|
|
@@ -255,9 +115,9 @@ var NextJsBffClient = class extends BffClientBase {
|
|
|
255
115
|
});
|
|
256
116
|
}
|
|
257
117
|
};
|
|
258
|
-
var createNextJsBff = (baseUrlOrConfig) => {
|
|
118
|
+
var createNextJsBff = (auth, baseUrlOrConfig) => {
|
|
259
119
|
const config = typeof baseUrlOrConfig === "string" ? { baseUrl: baseUrlOrConfig } : baseUrlOrConfig;
|
|
260
|
-
return new NextJsBffClient(config);
|
|
120
|
+
return new NextJsBffClient(auth, config);
|
|
261
121
|
};
|
|
262
122
|
|
|
263
123
|
// src/bff/sveltekit.ts
|
package/dist/bff/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../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":["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/client.ts","../../src/bff/nextjs.ts","../../src/bff/sveltekit.ts"],"sourcesContent":["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"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/client/index.ts
|
|
21
|
+
var client_exports = {};
|
|
22
|
+
__export(client_exports, {
|
|
23
|
+
client: () => client3
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(client_exports);
|
|
26
|
+
|
|
27
|
+
// src/client/sveltekit.ts
|
|
28
|
+
var import_svelte = require("better-auth/svelte");
|
|
29
|
+
var authClient = (0, import_svelte.createAuthClient)();
|
|
30
|
+
var client = {
|
|
31
|
+
...authClient,
|
|
32
|
+
/**
|
|
33
|
+
* Alias for signIn.
|
|
34
|
+
*/
|
|
35
|
+
login: authClient.signIn
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// src/client/nextjs.ts
|
|
39
|
+
var import_react = require("better-auth/react");
|
|
40
|
+
var authClient2 = (0, import_react.createAuthClient)();
|
|
41
|
+
var client2 = {
|
|
42
|
+
...authClient2,
|
|
43
|
+
/**
|
|
44
|
+
* Alias for signIn.
|
|
45
|
+
*/
|
|
46
|
+
login: authClient2.signIn
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// src/client/index.ts
|
|
50
|
+
var client3 = {
|
|
51
|
+
sveltekit: client,
|
|
52
|
+
nextjs: client2
|
|
53
|
+
};
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
client
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/client/index.ts","../../src/client/sveltekit.ts","../../src/client/nextjs.ts"],"sourcesContent":["import { client as svelteKitClient } from \"./sveltekit\";\nimport { client as nextJsClient } from \"./nextjs\";\n\n// Client-side adapters (safe to use on client)\nexport const client = {\n sveltekit: svelteKitClient,\n nextjs: nextJsClient\n};\n\n// Shared types\nexport type {\n SessionResult,\n SessionData,\n UserInfo,\n Session,\n User,\n} from \"./types\";\n","import { createAuthClient } from \"better-auth/svelte\";\nexport type { SessionResult, UserInfo, SessionData } from \"./types\";\n\n// Initialize the Better Auth Client (for browser/client-side use)\nconst authClient = createAuthClient();\n\n/**\n * Client-side Auth instance.\n * Use this in your Svelte components and client-side logic.\n * This is safe to use on the client as it doesn't contain secrets.\n */\nexport const client = {\n ...authClient,\n /**\n * Alias for signIn.\n */\n login: authClient.signIn\n};\n","import { createAuthClient } from \"better-auth/react\";\nexport type { SessionResult, UserInfo, SessionData } from \"./types\";\n\n// Initialize the Better Auth Client (for browser/client-side use)\nconst authClient = createAuthClient();\n\n/**\n * Client-side Auth instance.\n * Use this in your Next.js client components.\n * This is safe to use on the client as it doesn't contain secrets.\n */\nexport const client = {\n ...authClient,\n /**\n * Alias for signIn.\n */\n login: authClient.signIn\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,gBAAAA;AAAA;AAAA;;;ACAA,oBAAiC;AAIjC,IAAM,iBAAa,gCAAiB;AAO7B,IAAM,SAAS;AAAA,EAClB,GAAG;AAAA;AAAA;AAAA;AAAA,EAIH,OAAO,WAAW;AACtB;;;ACjBA,mBAAiC;AAIjC,IAAMC,kBAAa,+BAAiB;AAO7B,IAAMC,UAAS;AAAA,EAClB,GAAGD;AAAA;AAAA;AAAA;AAAA,EAIH,OAAOA,YAAW;AACtB;;;AFbO,IAAME,UAAS;AAAA,EAClB,WAAW;AAAA,EACX,QAAQA;AACZ;","names":["client","authClient","client","client"]}
|