hylekit 1.0.0 → 1.0.2

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 (44) hide show
  1. package/README.md +434 -0
  2. package/dist/bff/index.cjs +338 -0
  3. package/dist/bff/index.cjs.map +1 -0
  4. package/dist/bff/index.d.cts +2 -0
  5. package/dist/bff/index.d.ts +2 -0
  6. package/dist/bff/index.js +316 -0
  7. package/dist/bff/index.js.map +1 -0
  8. package/dist/client/nextjs.cjs +250 -0
  9. package/dist/client/nextjs.cjs.map +1 -0
  10. package/dist/client/nextjs.d.cts +868 -0
  11. package/dist/client/nextjs.d.ts +868 -0
  12. package/dist/client/nextjs.js +230 -0
  13. package/dist/client/nextjs.js.map +1 -0
  14. package/dist/client/sveltekit.cjs +237 -0
  15. package/dist/client/sveltekit.cjs.map +1 -0
  16. package/dist/client/sveltekit.d.cts +844 -0
  17. package/dist/client/sveltekit.d.ts +844 -0
  18. package/dist/client/sveltekit.js +217 -0
  19. package/dist/client/sveltekit.js.map +1 -0
  20. package/dist/index-DYW73KK3.d.cts +58 -0
  21. package/dist/index-DYW73KK3.d.ts +58 -0
  22. package/dist/index.cjs +502 -553
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +3266 -1897
  25. package/dist/index.d.ts +3266 -1897
  26. package/dist/index.js +488 -535
  27. package/dist/index.js.map +1 -1
  28. package/dist/lib/schema.cjs +118 -0
  29. package/dist/lib/schema.cjs.map +1 -0
  30. package/dist/lib/schema.d.cts +3 -0
  31. package/dist/lib/schema.d.ts +3 -0
  32. package/dist/lib/schema.js +87 -0
  33. package/dist/lib/schema.js.map +1 -0
  34. package/dist/schema-ph9L8QMm.d.cts +674 -0
  35. package/dist/schema-ph9L8QMm.d.ts +674 -0
  36. package/dist/server/express.cjs +243 -0
  37. package/dist/server/express.cjs.map +1 -0
  38. package/dist/server/express.d.cts +85 -0
  39. package/dist/server/express.d.ts +85 -0
  40. package/dist/server/express.js +219 -0
  41. package/dist/server/express.js.map +1 -0
  42. package/dist/types-BHiK1JUX.d.cts +32 -0
  43. package/dist/types-GOn9sn7-.d.ts +32 -0
  44. package/package.json +45 -10
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/schema.ts","../src/client/types.ts","../src/client/sveltekit.ts","../src/client/nextjs.ts"],"sourcesContent":["import { betterAuth, type BetterAuthOptions } from \"better-auth\";\nimport { drizzleAdapter } from \"better-auth/adapters/drizzle\";\n\nimport * as schema from \"./schema\";\n\nexport const createAuth = (db: any, config?: Partial<BetterAuthOptions>) => {\n return betterAuth({\n database: drizzleAdapter(db, {\n provider: \"sqlite\",\n schema: {\n ...schema\n }\n }),\n socialProviders: {\n google: {\n enabled: true,\n clientId: process.env.GOOGLE_CLIENT_ID ?? \"\",\n clientSecret: process.env.GOOGLE_CLIENT_SECRET ?? \"\",\n },\n },\n ...config,\n });\n};\n\nexport * from \"./schema\";","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 oauthApplication = sqliteTable(\n \"oauth_application\",\n {\n id: text(\"id\").primaryKey(),\n name: text(\"name\"),\n icon: text(\"icon\"),\n metadata: text(\"metadata\"),\n clientId: text(\"client_id\").unique(),\n clientSecret: text(\"client_secret\"),\n redirectUrls: text(\"redirect_urls\"),\n type: text(\"type\"),\n disabled: integer(\"disabled\", { mode: \"boolean\" }).default(false),\n userId: text(\"user_id\").references(() => user.id, { onDelete: \"cascade\" }),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" }),\n },\n (table) => [index(\"oauthApplication_userId_idx\").on(table.userId)],\n);\n\nexport const oauthAccessToken = sqliteTable(\n \"oauth_access_token\",\n {\n id: text(\"id\").primaryKey(),\n accessToken: text(\"access_token\").unique(),\n refreshToken: text(\"refresh_token\").unique(),\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 clientId: text(\"client_id\").references(() => oauthApplication.clientId, {\n onDelete: \"cascade\",\n }),\n userId: text(\"user_id\").references(() => user.id, { onDelete: \"cascade\" }),\n scopes: text(\"scopes\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" }),\n },\n (table) => [\n index(\"oauthAccessToken_clientId_idx\").on(table.clientId),\n index(\"oauthAccessToken_userId_idx\").on(table.userId),\n ],\n);\n\nexport const oauthConsent = sqliteTable(\n \"oauth_consent\",\n {\n id: text(\"id\").primaryKey(),\n clientId: text(\"client_id\").references(() => oauthApplication.clientId, {\n onDelete: \"cascade\",\n }),\n userId: text(\"user_id\").references(() => user.id, { onDelete: \"cascade\" }),\n scopes: text(\"scopes\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" }),\n consentGiven: integer(\"consent_given\", { mode: \"boolean\" }),\n },\n (table) => [\n index(\"oauthConsent_clientId_idx\").on(table.clientId),\n index(\"oauthConsent_userId_idx\").on(table.userId),\n ],\n);\n\nexport const userRelations = relations(user, ({ many }) => ({\n sessions: many(session),\n accounts: many(account),\n oauthApplications: many(oauthApplication),\n oauthAccessTokens: many(oauthAccessToken),\n oauthConsents: many(oauthConsent),\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\nexport const oauthApplicationRelations = relations(\n oauthApplication,\n ({ one, many }) => ({\n user: one(user, {\n fields: [oauthApplication.userId],\n references: [user.id],\n }),\n oauthAccessTokens: many(oauthAccessToken),\n oauthConsents: many(oauthConsent),\n }),\n);\n\nexport const oauthAccessTokenRelations = relations(\n oauthAccessToken,\n ({ one }) => ({\n oauthApplication: one(oauthApplication, {\n fields: [oauthAccessToken.clientId],\n references: [oauthApplication.clientId],\n }),\n user: one(user, {\n fields: [oauthAccessToken.userId],\n references: [user.id],\n }),\n }),\n);\n\nexport const oauthConsentRelations = relations(oauthConsent, ({ one }) => ({\n oauthApplication: one(oauthApplication, {\n fields: [oauthConsent.clientId],\n references: [oauthApplication.clientId],\n }),\n user: one(user, {\n fields: [oauthConsent.userId],\n references: [user.id],\n }),\n}));\n","// --- SHARED CONFIGURATION TYPES ---\n\n/**\n * Central Auth Server configuration.\n * Specify this when creating the auth client to point to your auth server.\n */\nexport interface CentralAuthConfig {\n /** Base URL of the Central Auth Server (e.g., \"http://localhost:5173\" or \"https://auth.example.com\") */\n url: string;\n /** OAuth2 authorize endpoint path (default: \"/api/auth/oauth2/authorize\") */\n authorizeEndpoint?: string;\n /** OAuth2 token endpoint path (default: \"/api/auth/oauth2/token\") */\n tokenEndpoint?: string;\n /** OAuth2 userinfo endpoint path (default: \"/api/auth/oauth2/userinfo\") */\n userEndpoint?: string;\n /** Cookie name for storing the access token (default: \"access_token\") */\n cookieName?: string;\n /** Cookie max age in seconds (default: 7 days) */\n cookieMaxAge?: number;\n}\n\n/**\n * OAuth2 client configuration for your application.\n */\nexport interface ClientConfig {\n /** OAuth2 Client ID registered in Central Auth */\n clientId: string;\n /** OAuth2 Client Secret registered in Central Auth */\n clientSecret: string;\n /** Redirect URI - must match exactly what is registered in Central Auth */\n redirectUri: string;\n /** Base URL of this application (e.g., \"http://localhost:3000\") */\n appUrl: string;\n}\n\n/**\n * Options for the signIn method.\n */\nexport interface SignInOptions {\n /** Override the default post-login redirect path (default: \"/\") */\n successRedirectPath?: string;\n /** Additional scopes to request beyond \"openid profile email\" */\n additionalScopes?: string[];\n /** State parameter for CSRF protection (recommended) */\n state?: string;\n}\n\n/**\n * Options for the handleSignInCallback method.\n */\nexport interface CallbackOptions {\n /** Override the default post-login redirect path (default: \"/\") */\n successRedirectPath?: string;\n}\n\n/**\n * User information returned from the userinfo endpoint.\n */\nexport interface UserInfo {\n id: string;\n email?: string;\n name?: string;\n image?: string;\n emailVerified?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Token response from the OAuth2 token endpoint.\n */\nexport interface TokenResponse {\n access_token: string;\n token_type: string;\n expires_in?: number;\n refresh_token?: string;\n id_token?: string;\n scope?: string;\n}\n\n// --- DEFAULT VALUES ---\n\nexport const DEFAULT_CONFIG = {\n authorizeEndpoint: \"/api/auth/oauth2/authorize\",\n tokenEndpoint: \"/api/auth/oauth2/token\",\n userEndpoint: \"/api/auth/oauth2/userinfo\",\n cookieName: \"access_token\",\n cookieMaxAge: 60 * 60 * 24 * 7, // 7 Days\n} as const;\n\n/**\n * Resolves the full config with defaults applied.\n */\nexport function resolveConfig(config: CentralAuthConfig): Required<CentralAuthConfig> {\n return {\n ...DEFAULT_CONFIG,\n ...config,\n };\n}\n\n/**\n * Builds the OAuth2 authorization URL.\n */\nexport function buildAuthorizationUrl(\n config: Required<CentralAuthConfig>,\n clientConfig: ClientConfig,\n options?: SignInOptions\n): string {\n const targetUrl = new URL(config.url + config.authorizeEndpoint);\n\n const scopes = [\"openid\", \"profile\", \"email\"];\n if (options?.additionalScopes) {\n scopes.push(...options.additionalScopes);\n }\n\n targetUrl.searchParams.set(\"response_type\", \"code\");\n targetUrl.searchParams.set(\"client_id\", clientConfig.clientId);\n targetUrl.searchParams.set(\"redirect_uri\", clientConfig.redirectUri);\n targetUrl.searchParams.set(\"scope\", scopes.join(\" \"));\n\n if (options?.state) {\n targetUrl.searchParams.set(\"state\", options.state);\n }\n\n return targetUrl.toString();\n}\n\n/**\n * Exchanges the authorization code for tokens.\n */\nexport async function exchangeCodeForTokens(\n config: Required<CentralAuthConfig>,\n clientConfig: ClientConfig,\n code: string\n): Promise<TokenResponse> {\n const response = await fetch(config.url + config.tokenEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"authorization_code\",\n client_id: clientConfig.clientId,\n client_secret: clientConfig.clientSecret,\n redirect_uri: clientConfig.redirectUri,\n code: code,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Token exchange failed (${response.status}): ${errorText}`);\n }\n\n const tokens = await response.json();\n\n if (!tokens.access_token) {\n throw new Error(\"No access token in response\");\n }\n\n return tokens;\n}\n\n/**\n * Fetches user info from the Central Auth Server.\n */\nexport async function fetchUserInfo(\n config: Required<CentralAuthConfig>,\n accessToken: string\n): Promise<UserInfo | null> {\n try {\n const response = await fetch(config.url + config.userEndpoint, {\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n },\n });\n\n if (!response.ok) {\n return null;\n }\n\n return await response.json();\n } catch {\n return null;\n }\n}\n","import { redirect } from \"@sveltejs/kit\";\nimport type { Cookies, RequestEvent } from \"@sveltejs/kit\";\nimport {\n type CentralAuthConfig,\n type ClientConfig,\n type SignInOptions,\n type CallbackOptions,\n type UserInfo,\n resolveConfig,\n buildAuthorizationUrl,\n exchangeCodeForTokens,\n fetchUserInfo,\n} from \"./types\";\n\n// Re-export shared types\nexport type { CentralAuthConfig, ClientConfig, SignInOptions, CallbackOptions, UserInfo };\n\n/**\n * Creates a SvelteKit-specific OIDC auth client.\n * \n * @example\n * ```typescript\n * // In your hooks.server.ts or +page.server.ts\n * import { createSvelteKitClient } from \"hylejs\";\n * \n * const authClient = createSvelteKitClient({\n * url: env.CENTRAL_AUTH_URL || \"http://localhost:5173\"\n * });\n * \n * const clientConfig = {\n * clientId: env.OAUTH_CLIENT_ID,\n * clientSecret: env.OAUTH_CLIENT_SECRET,\n * redirectUri: `${env.APP_URL}/auth/callback`,\n * appUrl: env.APP_URL,\n * };\n * \n * // In +page.server.ts actions\n * export const actions = {\n * login: async (event) => {\n * authClient.signIn(clientConfig, event.cookies);\n * }\n * };\n * ```\n */\nexport function createSvelteKitClient(centralAuthConfig: CentralAuthConfig) {\n const config = resolveConfig(centralAuthConfig);\n\n return {\n /**\n * Get the current Central Auth configuration.\n */\n getConfig: () => ({ ...config }),\n\n /**\n * Initiates the OAuth2 sign-in flow by redirecting to the Central Auth Server.\n * Uses SvelteKit's redirect() which throws a redirect response.\n * \n * @param clientConfig - OAuth2 client configuration\n * @param options - Optional sign-in options\n * @throws Redirect to the Central Auth authorization endpoint\n */\n signIn: (clientConfig: ClientConfig, options?: SignInOptions): never => {\n const authUrl = buildAuthorizationUrl(config, clientConfig, options);\n redirect(302, authUrl);\n },\n\n /**\n * Builds the authorization URL without redirecting.\n * Useful when you need to return the URL for client-side navigation.\n * \n * @param clientConfig - OAuth2 client configuration\n * @param options - Optional sign-in options\n * @returns The authorization URL string\n */\n getSignInUrl: (clientConfig: ClientConfig, options?: SignInOptions): string => {\n return buildAuthorizationUrl(config, clientConfig, options);\n },\n\n /**\n * Handles the OAuth2 callback, exchanges the code for tokens, and sets the session cookie.\n * Uses SvelteKit's cookies API for cookie management.\n * \n * @param event - SvelteKit RequestEvent\n * @param clientConfig - OAuth2 client configuration\n * @param options - Optional callback options\n * @throws Redirect on success, throws error on failure\n */\n handleSignInCallback: async (\n event: RequestEvent,\n clientConfig: ClientConfig,\n options?: CallbackOptions\n ): Promise<never> => {\n const { url, cookies } = event;\n const code = url.searchParams.get(\"code\");\n const error = url.searchParams.get(\"error\");\n const errorDescription = url.searchParams.get(\"error_description\");\n\n if (error) {\n throw new Error(`Authentication failed: ${errorDescription || error}`);\n }\n\n if (!code) {\n throw new Error(\"Missing authorization code\");\n }\n\n try {\n const tokens = await exchangeCodeForTokens(config, clientConfig, code);\n\n // Set cookie using SvelteKit's cookies API\n cookies.set(config.cookieName, tokens.access_token, {\n httpOnly: true,\n secure: event.url.protocol === \"https:\",\n sameSite: \"lax\",\n path: \"/\",\n maxAge: config.cookieMaxAge,\n });\n\n const successPath = options?.successRedirectPath || \"/\";\n redirect(302, successPath);\n } catch (err) {\n // Re-throw redirects\n if (err && typeof err === \"object\" && \"status\" in err) {\n throw err;\n }\n console.error(\"Auth callback error:\", err);\n throw new Error(\"Authentication failed\");\n }\n },\n\n /**\n * Signs out the user by clearing the session cookie.\n * \n * @param cookies - SvelteKit Cookies object\n * @param redirectPath - Path to redirect to after sign out (default: \"/\")\n * @throws Redirect to the specified path\n */\n signOut: (cookies: Cookies, redirectPath: string = \"/\"): never => {\n cookies.delete(config.cookieName, { path: \"/\" });\n redirect(302, redirectPath);\n },\n\n /**\n * Clears the session cookie without redirecting.\n * Useful when you need more control over the response.\n * \n * @param cookies - SvelteKit Cookies object\n */\n clearSession: (cookies: Cookies): void => {\n cookies.delete(config.cookieName, { path: \"/\" });\n },\n\n /**\n * Retrieves the access token from cookies.\n * \n * @param cookies - SvelteKit Cookies object\n * @returns The access token or null if not found\n */\n getAccessToken: (cookies: Cookies): string | null => {\n return cookies.get(config.cookieName) ?? null;\n },\n\n /**\n * Fetches user information from the Central Auth Server.\n * \n * @param accessToken - The access token to use for authentication\n * @returns The user information or null if the request fails\n */\n getUser: async (accessToken: string): Promise<UserInfo | null> => {\n return fetchUserInfo(config, accessToken);\n },\n\n /**\n * Gets the current user session from cookies.\n * Combines getAccessToken and getUser for convenience.\n * \n * @param cookies - SvelteKit Cookies object\n * @returns The user information or null if not authenticated\n */\n getSession: async (cookies: Cookies): Promise<UserInfo | null> => {\n const accessToken = cookies.get(config.cookieName);\n if (!accessToken) return null;\n return fetchUserInfo(config, accessToken);\n },\n\n /**\n * Checks if the user is authenticated (has access token in cookies).\n * Note: This only checks for token presence, not validity.\n * \n * @param cookies - SvelteKit Cookies object\n * @returns true if an access token is present\n */\n isAuthenticated: (cookies: Cookies): boolean => {\n return !!cookies.get(config.cookieName);\n },\n\n /**\n * Protects a route by checking authentication and redirecting if needed.\n * Use in +page.server.ts or +layout.server.ts load functions.\n * \n * @param cookies - SvelteKit Cookies object\n * @param loginPath - Path to redirect to for login (default: \"/login\")\n * @throws Redirect to login path if not authenticated\n */\n requireAuth: (cookies: Cookies, loginPath: string = \"/login\"): void => {\n if (!cookies.get(config.cookieName)) {\n redirect(302, loginPath);\n }\n },\n };\n}\n\n// Convenience alias\nexport const svelteClient = createSvelteKitClient;\n","import { cookies } from \"next/headers\";\nimport { redirect } from \"next/navigation\";\nimport type { NextRequest } from \"next/server\";\nimport { NextResponse } from \"next/server\";\nimport {\n type CentralAuthConfig,\n type ClientConfig,\n type SignInOptions,\n type CallbackOptions,\n type UserInfo,\n resolveConfig,\n buildAuthorizationUrl,\n exchangeCodeForTokens,\n fetchUserInfo,\n} from \"./types\";\n\n// Re-export shared types\nexport type { CentralAuthConfig, ClientConfig, SignInOptions, CallbackOptions, UserInfo };\n\n/**\n * Creates a Next.js-specific OIDC auth client (App Router).\n * \n * @example\n * ```typescript\n * // In your app/api/auth/[...auth]/route.ts\n * import { createNextClient } from \"hylejs\";\n * \n * const authClient = createNextClient({\n * url: process.env.CENTRAL_AUTH_URL || \"http://localhost:5173\"\n * });\n * \n * const clientConfig = {\n * clientId: process.env.OAUTH_CLIENT_ID!,\n * clientSecret: process.env.OAUTH_CLIENT_SECRET!,\n * redirectUri: `${process.env.APP_URL}/api/auth/callback`,\n * appUrl: process.env.APP_URL!,\n * };\n * \n * export async function GET(request: NextRequest) {\n * const { pathname } = new URL(request.url);\n * \n * if (pathname.endsWith(\"/login\")) {\n * return authClient.signIn(clientConfig);\n * }\n * if (pathname.endsWith(\"/callback\")) {\n * return authClient.handleSignInCallback(request, clientConfig);\n * }\n * if (pathname.endsWith(\"/logout\")) {\n * return authClient.signOut(clientConfig);\n * }\n * }\n * ```\n */\nexport function createNextClient(centralAuthConfig: CentralAuthConfig) {\n const config = resolveConfig(centralAuthConfig);\n\n return {\n /**\n * Get the current Central Auth configuration.\n */\n getConfig: () => ({ ...config }),\n\n /**\n * Initiates the OAuth2 sign-in flow by returning a redirect Response.\n * Use in Route Handlers (App Router).\n * \n * @param clientConfig - OAuth2 client configuration\n * @param options - Optional sign-in options\n * @returns NextResponse redirect to the Central Auth authorization endpoint\n */\n signIn: (clientConfig: ClientConfig, options?: SignInOptions): NextResponse => {\n const authUrl = buildAuthorizationUrl(config, clientConfig, options);\n return NextResponse.redirect(authUrl);\n },\n\n /**\n * Builds the authorization URL without redirecting.\n * Useful for client-side navigation or custom redirect logic.\n * \n * @param clientConfig - OAuth2 client configuration\n * @param options - Optional sign-in options\n * @returns The authorization URL string\n */\n getSignInUrl: (clientConfig: ClientConfig, options?: SignInOptions): string => {\n return buildAuthorizationUrl(config, clientConfig, options);\n },\n\n /**\n * Handles the OAuth2 callback in Route Handlers.\n * Exchanges the code for tokens and sets the session cookie.\n * \n * @param request - NextRequest object\n * @param clientConfig - OAuth2 client configuration\n * @param options - Optional callback options\n * @returns NextResponse with redirect and cookie set\n */\n handleSignInCallback: async (\n request: NextRequest,\n clientConfig: ClientConfig,\n options?: CallbackOptions\n ): Promise<NextResponse> => {\n const { searchParams } = new URL(request.url);\n const code = searchParams.get(\"code\");\n const error = searchParams.get(\"error\");\n const errorDescription = searchParams.get(\"error_description\");\n\n if (error) {\n return NextResponse.json(\n { error: errorDescription || error },\n { status: 400 }\n );\n }\n\n if (!code) {\n return NextResponse.json(\n { error: \"Missing authorization code\" },\n { status: 400 }\n );\n }\n\n try {\n const tokens = await exchangeCodeForTokens(config, clientConfig, code);\n\n const successPath = options?.successRedirectPath || \"/\";\n const successUrl = new URL(successPath, clientConfig.appUrl);\n\n const response = NextResponse.redirect(successUrl);\n\n // Set cookie using NextResponse\n response.cookies.set(config.cookieName, tokens.access_token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === \"production\",\n sameSite: \"lax\",\n path: \"/\",\n maxAge: config.cookieMaxAge,\n });\n\n return response;\n } catch (err) {\n console.error(\"Auth callback error:\", err);\n return NextResponse.json(\n { error: \"Authentication failed\" },\n { status: 500 }\n );\n }\n },\n\n /**\n * Signs out the user by clearing the session cookie.\n * Use in Route Handlers.\n * \n * @param clientConfig - OAuth2 client configuration\n * @param redirectPath - Path to redirect to after sign out (default: \"/\")\n * @returns NextResponse with redirect and cookie cleared\n */\n signOut: (clientConfig: ClientConfig, redirectPath: string = \"/\"): NextResponse => {\n const redirectUrl = new URL(redirectPath, clientConfig.appUrl);\n const response = NextResponse.redirect(redirectUrl);\n\n response.cookies.set(config.cookieName, \"\", {\n httpOnly: true,\n secure: process.env.NODE_ENV === \"production\",\n sameSite: \"lax\",\n path: \"/\",\n maxAge: 0,\n });\n\n return response;\n },\n\n /**\n * Retrieves the access token from cookies.\n * Use in Server Components or Route Handlers.\n * \n * @returns The access token or null if not found\n */\n getAccessToken: async (): Promise<string | null> => {\n const cookieStore = await cookies();\n return cookieStore.get(config.cookieName)?.value ?? null;\n },\n\n /**\n * Retrieves the access token from a NextRequest.\n * Use in middleware or Route Handlers when you have the request object.\n * \n * @param request - NextRequest object\n * @returns The access token or null if not found\n */\n getAccessTokenFromRequest: (request: NextRequest): string | null => {\n return request.cookies.get(config.cookieName)?.value ?? null;\n },\n\n /**\n * Fetches user information from the Central Auth Server.\n * \n * @param accessToken - The access token to use for authentication\n * @returns The user information or null if the request fails\n */\n getUser: async (accessToken: string): Promise<UserInfo | null> => {\n return fetchUserInfo(config, accessToken);\n },\n\n /**\n * Gets the current user session.\n * Use in Server Components.\n * \n * @returns The user information or null if not authenticated\n */\n getSession: async (): Promise<UserInfo | null> => {\n const cookieStore = await cookies();\n const accessToken = cookieStore.get(config.cookieName)?.value;\n if (!accessToken) return null;\n return fetchUserInfo(config, accessToken);\n },\n\n /**\n * Gets the current user session from a request.\n * Use in middleware or Route Handlers.\n * \n * @param request - NextRequest object\n * @returns The user information or null if not authenticated\n */\n getSessionFromRequest: async (request: NextRequest): Promise<UserInfo | null> => {\n const accessToken = request.cookies.get(config.cookieName)?.value;\n if (!accessToken) return null;\n return fetchUserInfo(config, accessToken);\n },\n\n /**\n * Checks if the user is authenticated.\n * Use in Server Components.\n * \n * @returns true if an access token is present\n */\n isAuthenticated: async (): Promise<boolean> => {\n const cookieStore = await cookies();\n return !!cookieStore.get(config.cookieName)?.value;\n },\n\n /**\n * Checks if the request is authenticated.\n * Use in middleware.\n * \n * @param request - NextRequest object\n * @returns true if an access token is present\n */\n isAuthenticatedRequest: (request: NextRequest): boolean => {\n return !!request.cookies.get(config.cookieName)?.value;\n },\n\n /**\n * Protects a route by checking authentication and redirecting if needed.\n * Use in Server Components.\n * \n * @param loginPath - Path to redirect to for login (default: \"/login\")\n * @throws Redirect to login path if not authenticated\n */\n requireAuth: async (loginPath: string = \"/login\"): Promise<void> => {\n const cookieStore = await cookies();\n if (!cookieStore.get(config.cookieName)?.value) {\n redirect(loginPath);\n }\n },\n\n /**\n * Creates a middleware-compatible auth check.\n * Returns a NextResponse redirect if not authenticated.\n * \n * @param request - NextRequest object \n * @param loginPath - Path to redirect to for login (default: \"/login\")\n * @returns NextResponse redirect if not authenticated, null otherwise\n */\n middlewareAuth: (request: NextRequest, loginPath: string = \"/login\"): NextResponse | null => {\n if (!request.cookies.get(config.cookieName)?.value) {\n const loginUrl = new URL(loginPath, request.url);\n loginUrl.searchParams.set(\"from\", request.nextUrl.pathname);\n return NextResponse.redirect(loginUrl);\n }\n return null;\n },\n };\n}\n\n// Convenience alias\nexport const nextClient = createNextClient;\n"],"mappings":"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","names":["cookies","redirect","redirect"]}
1
+ {"version":3,"sources":["../src/lib/auth.ts","../src/lib/db.ts","../src/lib/schema.ts","../src/client/sveltekit.ts","../src/client/nextjs.ts","../src/client/index.ts","../src/bff/client.ts","../src/bff/nextjs.ts","../src/bff/sveltekit.ts","../src/server/express.ts","../src/index.ts"],"sourcesContent":["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 { toSvelteKitHandler } from \"better-auth/svelte-kit\";\nimport { createAuthClient } from \"better-auth/svelte\";\nimport type { Handle, RequestEvent } from \"@sveltejs/kit\";\nimport { auth as betterAuthInstance } from \"../lib/auth\";\nimport { db } from \"../lib/db\";\nimport type { SessionResult, UserInfo, SessionData } from \"./types\";\n\nexport type { SessionResult, UserInfo, SessionData } from \"./types\";\n\nconst handler = toSvelteKitHandler(betterAuthInstance);\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 */\nexport const client = {\n ...authClient,\n /**\n * Alias for signIn.\n */\n login: authClient.signIn\n};\n\n/**\n * Server-side Auth instance.\n * Use this in your +page.server.ts, hooks.server.ts, and API routes.\n */\nexport const server = {\n /**\n * The underlying BetterAuth instance.\n */\n auth: betterAuthInstance,\n\n /**\n * SvelteKit request handler for auth routes.\n * Place this in `src/routes/api/auth/[...auth]/+server.ts`\n */\n handler: {\n GET: handler,\n POST: handler,\n },\n\n /**\n * Creates a SvelteKit handle hook for session management.\n */\n createHandle: (): Handle => {\n return async ({ event, resolve }) => {\n const session = await betterAuthInstance.api.getSession({\n headers: event.request.headers,\n });\n\n // Set on locals - consumer must extend App.Locals type\n (event.locals as Record<string, unknown>).session = session;\n (event.locals as Record<string, unknown>).user = session?.user ?? null;\n\n return resolve(event);\n };\n },\n\n /**\n * Get session from request event.\n */\n getSession: async (event: RequestEvent): Promise<SessionResult> => {\n return betterAuthInstance.api.getSession({\n headers: event.request.headers,\n });\n },\n\n /**\n * Check if user is authenticated.\n */\n isAuthenticated: async (event: RequestEvent): Promise<boolean> => {\n const session = await betterAuthInstance.api.getSession({\n headers: event.request.headers,\n });\n return session !== null;\n },\n\n /**\n * Wraps a function to ensure the user is authenticated before execution.\n * Injects the user, session, and db into the first argument.\n */\n makeAuthenticatedCall: <TArgs extends any[], TReturn>(\n fn: (ctx: { user: SessionData['user']; session: SessionData['session']; db: typeof db; event: RequestEvent }, ...args: TArgs) => Promise<TReturn>\n ) => {\n return async (event: RequestEvent, ...args: TArgs): Promise<TReturn> => {\n const session = await betterAuthInstance.api.getSession({\n headers: event.request.headers,\n });\n if (!session) {\n throw new Error(\"Unauthorized\");\n }\n return fn({ user: session.user, session: session.session, db, event }, ...args);\n }\n }\n};\n\n","import { toNextJsHandler } from \"better-auth/next-js\";\nimport { createAuthClient } from \"better-auth/react\";\nimport { headers } from \"next/headers\";\nimport { auth as betterAuthInstance } from \"../lib/auth\";\nimport { db } from \"../lib/db\";\nimport type { SessionResult, UserInfo, SessionData } from \"./types\";\n\nexport type { SessionResult, UserInfo, SessionData } from \"./types\";\n\nconst handler = toNextJsHandler(betterAuthInstance);\n\n// Initialize the Better Auth Client\nconst authClient = createAuthClient();\n\n/**\n * Client-side Auth instance.\n * @remarks\n * This export might not be usable in Next.js Client Components directly if this file\n * also imports server-only modules (like next/headers). \n * Consider creating a separate client-only file if separation is needed.\n */\nexport const client = {\n ...authClient,\n /**\n * Alias for signIn.\n */\n login: authClient.signIn\n};\n\n/**\n * Next.js Server Auth instance (App Router).\n */\nexport const server = {\n /**\n * The underlying BetterAuth instance.\n */\n auth: betterAuthInstance,\n\n /**\n * Next.js route handler for auth routes.\n * Place this in `app/api/auth/[...auth]/route.ts`\n */\n handler: {\n GET: handler,\n POST: handler,\n },\n\n /**\n * Get session from current request headers.\n * Use in Server Components or Route Handlers.\n */\n getSession: async (): Promise<SessionResult> => {\n const requestHeaders = await headers();\n return betterAuthInstance.api.getSession({\n headers: requestHeaders,\n });\n },\n\n /**\n * Get session from specific headers.\n * Use when you have direct access to headers.\n */\n getSessionFromHeaders: async (requestHeaders: Headers): Promise<SessionResult> => {\n return betterAuthInstance.api.getSession({\n headers: requestHeaders,\n });\n },\n\n /**\n * Check if user is authenticated.\n * Use in Server Components.\n */\n isAuthenticated: async (): Promise<boolean> => {\n const requestHeaders = await headers();\n const session = await betterAuthInstance.api.getSession({\n headers: requestHeaders,\n });\n return session !== null;\n },\n\n /**\n * Get the current user or null.\n * Convenience method for Server Components.\n */\n getUser: async () => {\n const requestHeaders = await headers();\n const session = await betterAuthInstance.api.getSession({\n headers: requestHeaders,\n });\n return session?.user ?? null;\n },\n\n /**\n * Wraps a function to ensure the user is authenticated before execution.\n * Injects the user, session, and db into the first argument.\n */\n makeAuthenticatedCall: <TArgs extends any[], TReturn>(\n fn: (ctx: { user: SessionData['user']; session: SessionData['session']; db: typeof db }, ...args: TArgs) => Promise<TReturn>\n ) => {\n return async (...args: TArgs): Promise<TReturn> => {\n const requestHeaders = await headers();\n const session = await betterAuthInstance.api.getSession({\n headers: requestHeaders,\n });\n if (!session) {\n throw new Error(\"Unauthorized\");\n }\n return fn({ user: session.user, session: session.session, db }, ...args);\n }\n }\n};\n","import { client as svelteKitClient, server as svelteKitServer } from \"./sveltekit\";\nimport { client as nextJsClient, server as nextJsServer } from \"./nextjs\";\n\n// Client-side adapters\nexport const client = {\n sveltekit: svelteKitClient,\n nextjs: nextJsClient\n};\n\n// Server-side adapters\nexport const server = {\n sveltekit: svelteKitServer,\n nextjs: nextJsServer\n};\n\n// Shared types\nexport type {\n SessionResult,\n SessionData,\n UserInfo,\n Session,\n User,\n} 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 { 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","import type { Request, Response, NextFunction } from \"express\";\nimport type { Session, User } from \"better-auth\";\nimport { db } from \"../lib/db\";\nimport { session as sessionTable, user as userTable } from \"../lib/schema\";\nimport { eq, and, gt } from \"drizzle-orm\";\n\n/**\n * Extended Request with authenticated user context.\n */\nexport interface AuthenticatedRequest extends Request {\n /**\n * The authenticated user. Available on all authenticated routes.\n */\n authUser: User;\n\n /**\n * The current session. Available on all authenticated routes.\n */\n authSession: Session;\n\n /**\n * @deprecated Use authUser instead\n */\n user?: User;\n\n /**\n * @deprecated Use authSession instead\n */\n session?: Session;\n}\n\nexport interface MiddlewareOptions {\n /**\n * Routes that don't require authentication.\n * Supports exact paths and patterns with wildcards.\n * @example [\"/health\", \"/public/*\", \"/api/webhooks/*\"]\n */\n unauthenticatedRoutes?: string[];\n\n /**\n * If true, verify session against the database.\n * Use for service-to-service calls where headers can't be implicitly trusted.\n * @default false\n */\n verifySession?: boolean;\n\n /**\n * Whether to require authentication for non-unauthenticated routes.\n * Returns 401 on missing/invalid session.\n * @default true\n */\n required?: boolean;\n}\n\n/**\n * Check if a path matches any of the unauthenticated route patterns.\n */\nfunction isUnauthenticatedRoute(path: string, patterns: string[]): boolean {\n for (const pattern of patterns) {\n if (pattern === path) return true;\n\n // Handle wildcard patterns like \"/public/*\"\n if (pattern.endsWith(\"/*\")) {\n const prefix = pattern.slice(0, -2);\n if (path === prefix || path.startsWith(prefix + \"/\")) {\n return true;\n }\n }\n\n // Handle double wildcard patterns like \"/api/**/health\"\n if (pattern.includes(\"**\")) {\n const regex = new RegExp(\n \"^\" + pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\") + \"$\"\n );\n if (regex.test(path)) return true;\n }\n }\n return false;\n}\n\n/**\n * Express middleware for session verification.\n * \n * @example\n * // Basic usage - trust headers from BFF\n * app.use(middleware());\n * \n * @example\n * // With DB verification for service-to-service calls\n * app.use(middleware({ verifySession: true }));\n * \n * @example\n * // With unauthenticated routes\n * app.use(middleware({\n * unauthenticatedRoutes: [\"/health\", \"/public/*\", \"/api/webhooks/*\"],\n * verifySession: true\n * }));\n */\nexport const middleware = (options: MiddlewareOptions = {}) => {\n const {\n unauthenticatedRoutes = [],\n verifySession = false,\n required = true\n } = options;\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const authReq = req as AuthenticatedRequest;\n\n // Check if route is unauthenticated\n if (isUnauthenticatedRoute(req.path, unauthenticatedRoutes)) {\n return next();\n }\n\n try {\n const userHeader = req.headers[\"x-hyle-user\"];\n const sessionHeader = req.headers[\"x-hyle-session\"];\n\n // No session header provided\n if (!sessionHeader || typeof sessionHeader !== \"string\") {\n if (required) {\n return res.status(401).json({ error: \"Unauthorized\" });\n }\n return next();\n }\n\n const sessionData = JSON.parse(\n Buffer.from(sessionHeader, \"base64\").toString(\"utf-8\")\n );\n\n // Verify session against DB if required\n if (verifySession) {\n const result = await db\n .select({\n session: sessionTable,\n user: userTable,\n })\n .from(sessionTable)\n .innerJoin(userTable, eq(sessionTable.userId, userTable.id))\n .where(\n and(\n eq(sessionTable.id, sessionData.id),\n gt(sessionTable.expiresAt, new Date())\n )\n )\n .limit(1);\n\n if (result.length === 0) {\n if (required) {\n return res.status(401).json({ error: \"Invalid or expired session\" });\n }\n return next();\n }\n\n // Inject auth context\n authReq.authUser = result[0].user as User;\n authReq.authSession = result[0].session as Session;\n\n // Keep deprecated properties for backwards compatibility\n authReq.user = authReq.authUser;\n authReq.session = authReq.authSession;\n\n return next();\n }\n\n // Trust headers mode (for internal BFF calls)\n let userData: User | undefined;\n\n if (userHeader && typeof userHeader === \"string\") {\n userData = JSON.parse(\n Buffer.from(userHeader, \"base64\").toString(\"utf-8\")\n );\n }\n\n if (!userData && required) {\n return res.status(401).json({ error: \"Unauthorized\" });\n }\n\n if (userData) {\n // Inject auth context\n authReq.authUser = userData;\n authReq.authSession = sessionData as Session;\n\n // Keep deprecated properties for backwards compatibility\n authReq.user = authReq.authUser;\n authReq.session = authReq.authSession;\n }\n\n next();\n } catch (error) {\n console.error(\"[hyle] Auth middleware error:\", error);\n if (required) {\n return res.status(401).json({ error: \"Authentication failed\" });\n }\n next();\n }\n };\n};\n\n/**\n * Type guard to check if request is authenticated.\n */\nexport function isAuthenticated(req: Request): req is AuthenticatedRequest {\n return !!(req as AuthenticatedRequest).authUser;\n}\n\n/**\n * Helper to get auth context from request.\n * Throws if not authenticated.\n */\nexport function getAuthContext(req: Request): { user: User; session: Session } {\n const authReq = req as AuthenticatedRequest;\n if (!authReq.authUser || !authReq.authSession) {\n throw new Error(\"Request is not authenticated\");\n }\n return { user: authReq.authUser, session: authReq.authSession };\n}\n\n/**\n * Express adapter exports\n */\nexport const expressAdapter = {\n middleware,\n isAuthenticated,\n getAuthContext,\n};\n\n// Default export for convenience\nexport default expressAdapter;\n","import { auth } from \"./lib/auth\";\nimport { db } from \"./lib/db\";\nimport * as schema from \"./lib/schema\";\nimport { client, server } from \"./client/index\";\nimport { createNextJsBff, createSvelteKitBff } from \"./bff/index\";\nimport {\n expressAdapter,\n middleware as expressMiddleware,\n isAuthenticated,\n getAuthContext,\n} from \"./server/express\";\n\n// Export types\nexport type {\n SessionResult,\n SessionData,\n UserInfo,\n Session,\n User,\n} from \"./client/types\";\n\nexport type { BffClientConfig, RequestOptions } from \"./bff/types\";\n\nexport type {\n AuthenticatedRequest,\n MiddlewareOptions,\n} from \"./server/express\";\n\n// Named exports\nexport { auth, db, client, server };\nexport { expressAdapter as express };\nexport { expressMiddleware, isAuthenticated, getAuthContext };\nexport { user, session, account, verification } from \"./lib/schema\";\nexport { createNextJsBff, createSvelteKitBff } from \"./bff/index\";\n\n// Namespace exports\nconst bff = {\n createNextJsBff,\n createSvelteKitBff\n};\nexport { bff };\n\n// Default export\nconst hyle = {\n auth,\n db,\n schema,\n client,\n server: {\n ...server,\n express: expressAdapter\n },\n bff\n};\n\nexport default hyle;"],"mappings":"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","names":["client","session","createAuthClient","handler","authClient","createAuthClient","client","server","session","client","server","headers","headers","headers","client","server"]}
@@ -0,0 +1,118 @@
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/lib/schema.ts
21
+ var schema_exports = {};
22
+ __export(schema_exports, {
23
+ account: () => account,
24
+ accountRelations: () => accountRelations,
25
+ session: () => session,
26
+ sessionRelations: () => sessionRelations,
27
+ user: () => user,
28
+ userRelations: () => userRelations,
29
+ verification: () => verification
30
+ });
31
+ module.exports = __toCommonJS(schema_exports);
32
+ var import_drizzle_orm = require("drizzle-orm");
33
+ var import_sqlite_core = require("drizzle-orm/sqlite-core");
34
+ var user = (0, import_sqlite_core.sqliteTable)("user", {
35
+ id: (0, import_sqlite_core.text)("id").primaryKey(),
36
+ name: (0, import_sqlite_core.text)("name").notNull(),
37
+ email: (0, import_sqlite_core.text)("email").notNull().unique(),
38
+ emailVerified: (0, import_sqlite_core.integer)("email_verified", { mode: "boolean" }).default(false).notNull(),
39
+ image: (0, import_sqlite_core.text)("image"),
40
+ createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
41
+ 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()
42
+ });
43
+ var session = (0, import_sqlite_core.sqliteTable)(
44
+ "session",
45
+ {
46
+ id: (0, import_sqlite_core.text)("id").primaryKey(),
47
+ expiresAt: (0, import_sqlite_core.integer)("expires_at", { mode: "timestamp_ms" }).notNull(),
48
+ token: (0, import_sqlite_core.text)("token").notNull().unique(),
49
+ createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
50
+ updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
51
+ ipAddress: (0, import_sqlite_core.text)("ip_address"),
52
+ userAgent: (0, import_sqlite_core.text)("user_agent"),
53
+ userId: (0, import_sqlite_core.text)("user_id").notNull().references(() => user.id, { onDelete: "cascade" })
54
+ },
55
+ (table) => [(0, import_sqlite_core.index)("session_userId_idx").on(table.userId)]
56
+ );
57
+ var account = (0, import_sqlite_core.sqliteTable)(
58
+ "account",
59
+ {
60
+ id: (0, import_sqlite_core.text)("id").primaryKey(),
61
+ accountId: (0, import_sqlite_core.text)("account_id").notNull(),
62
+ providerId: (0, import_sqlite_core.text)("provider_id").notNull(),
63
+ userId: (0, import_sqlite_core.text)("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
64
+ accessToken: (0, import_sqlite_core.text)("access_token"),
65
+ refreshToken: (0, import_sqlite_core.text)("refresh_token"),
66
+ idToken: (0, import_sqlite_core.text)("id_token"),
67
+ accessTokenExpiresAt: (0, import_sqlite_core.integer)("access_token_expires_at", {
68
+ mode: "timestamp_ms"
69
+ }),
70
+ refreshTokenExpiresAt: (0, import_sqlite_core.integer)("refresh_token_expires_at", {
71
+ mode: "timestamp_ms"
72
+ }),
73
+ scope: (0, import_sqlite_core.text)("scope"),
74
+ password: (0, import_sqlite_core.text)("password"),
75
+ createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
76
+ updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
77
+ },
78
+ (table) => [(0, import_sqlite_core.index)("account_userId_idx").on(table.userId)]
79
+ );
80
+ var verification = (0, import_sqlite_core.sqliteTable)(
81
+ "verification",
82
+ {
83
+ id: (0, import_sqlite_core.text)("id").primaryKey(),
84
+ identifier: (0, import_sqlite_core.text)("identifier").notNull(),
85
+ value: (0, import_sqlite_core.text)("value").notNull(),
86
+ expiresAt: (0, import_sqlite_core.integer)("expires_at", { mode: "timestamp_ms" }).notNull(),
87
+ createdAt: (0, import_sqlite_core.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
88
+ 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()
89
+ },
90
+ (table) => [(0, import_sqlite_core.index)("verification_identifier_idx").on(table.identifier)]
91
+ );
92
+ var userRelations = (0, import_drizzle_orm.relations)(user, ({ many }) => ({
93
+ sessions: many(session),
94
+ accounts: many(account)
95
+ }));
96
+ var sessionRelations = (0, import_drizzle_orm.relations)(session, ({ one }) => ({
97
+ user: one(user, {
98
+ fields: [session.userId],
99
+ references: [user.id]
100
+ })
101
+ }));
102
+ var accountRelations = (0, import_drizzle_orm.relations)(account, ({ one }) => ({
103
+ user: one(user, {
104
+ fields: [account.userId],
105
+ references: [user.id]
106
+ })
107
+ }));
108
+ // Annotate the CommonJS export names for ESM import in node:
109
+ 0 && (module.exports = {
110
+ account,
111
+ accountRelations,
112
+ session,
113
+ sessionRelations,
114
+ user,
115
+ userRelations,
116
+ verification
117
+ });
118
+ //# sourceMappingURL=schema.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/schema.ts"],"sourcesContent":["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"],"mappings":"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","names":[]}
@@ -0,0 +1,3 @@
1
+ import 'drizzle-orm';
2
+ import 'drizzle-orm/sqlite-core';
3
+ export { b as account, e as accountRelations, a as session, d as sessionRelations, u as user, c as userRelations, v as verification } from '../schema-ph9L8QMm.cjs';
@@ -0,0 +1,3 @@
1
+ import 'drizzle-orm';
2
+ import 'drizzle-orm/sqlite-core';
3
+ export { b as account, e as accountRelations, a as session, d as sessionRelations, u as user, c as userRelations, v as verification } from '../schema-ph9L8QMm.js';
@@ -0,0 +1,87 @@
1
+ // src/lib/schema.ts
2
+ import { relations, sql } from "drizzle-orm";
3
+ import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core";
4
+ var user = sqliteTable("user", {
5
+ id: text("id").primaryKey(),
6
+ name: text("name").notNull(),
7
+ email: text("email").notNull().unique(),
8
+ emailVerified: integer("email_verified", { mode: "boolean" }).default(false).notNull(),
9
+ image: text("image"),
10
+ createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
11
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
12
+ });
13
+ var session = sqliteTable(
14
+ "session",
15
+ {
16
+ id: text("id").primaryKey(),
17
+ expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(),
18
+ token: text("token").notNull().unique(),
19
+ createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
20
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
21
+ ipAddress: text("ip_address"),
22
+ userAgent: text("user_agent"),
23
+ userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" })
24
+ },
25
+ (table) => [index("session_userId_idx").on(table.userId)]
26
+ );
27
+ var account = sqliteTable(
28
+ "account",
29
+ {
30
+ id: text("id").primaryKey(),
31
+ accountId: text("account_id").notNull(),
32
+ providerId: text("provider_id").notNull(),
33
+ userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
34
+ accessToken: text("access_token"),
35
+ refreshToken: text("refresh_token"),
36
+ idToken: text("id_token"),
37
+ accessTokenExpiresAt: integer("access_token_expires_at", {
38
+ mode: "timestamp_ms"
39
+ }),
40
+ refreshTokenExpiresAt: integer("refresh_token_expires_at", {
41
+ mode: "timestamp_ms"
42
+ }),
43
+ scope: text("scope"),
44
+ password: text("password"),
45
+ createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
46
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
47
+ },
48
+ (table) => [index("account_userId_idx").on(table.userId)]
49
+ );
50
+ var verification = sqliteTable(
51
+ "verification",
52
+ {
53
+ id: text("id").primaryKey(),
54
+ identifier: text("identifier").notNull(),
55
+ value: text("value").notNull(),
56
+ expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(),
57
+ createdAt: integer("created_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
58
+ updatedAt: integer("updated_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
59
+ },
60
+ (table) => [index("verification_identifier_idx").on(table.identifier)]
61
+ );
62
+ var userRelations = relations(user, ({ many }) => ({
63
+ sessions: many(session),
64
+ accounts: many(account)
65
+ }));
66
+ var sessionRelations = relations(session, ({ one }) => ({
67
+ user: one(user, {
68
+ fields: [session.userId],
69
+ references: [user.id]
70
+ })
71
+ }));
72
+ var accountRelations = relations(account, ({ one }) => ({
73
+ user: one(user, {
74
+ fields: [account.userId],
75
+ references: [user.id]
76
+ })
77
+ }));
78
+ export {
79
+ account,
80
+ accountRelations,
81
+ session,
82
+ sessionRelations,
83
+ user,
84
+ userRelations,
85
+ verification
86
+ };
87
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/schema.ts"],"sourcesContent":["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"],"mappings":"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","names":[]}