import { TimeSpan } from "./date.js"; import type { Adapter } from "./database.js"; import type { RegisteredDatabaseSessionAttributes, RegisteredDatabaseUserAttributes, RegisteredLucia, UserId } from "./index.js"; import type { Cookie } from "./cookie.js"; type SessionAttributes = RegisteredLucia extends Lucia ? _SessionAttributes : {}; type UserAttributes = RegisteredLucia extends Lucia ? _UserAttributes : {}; export interface Session extends SessionAttributes { id: string; expiresAt: Date; fresh: boolean; userId: UserId; } export interface User extends UserAttributes { id: UserId; } export declare class Lucia<_SessionAttributes extends {} = Record, _UserAttributes extends {} = Record> { private adapter; private sessionExpiresIn; private sessionCookieController; private getSessionAttributes; private getUserAttributes; readonly sessionCookieName: string; constructor(adapter: Adapter, options?: { sessionExpiresIn?: TimeSpan; sessionCookie?: SessionCookieOptions; getSessionAttributes?: (databaseSessionAttributes: RegisteredDatabaseSessionAttributes) => _SessionAttributes; getUserAttributes?: (databaseUserAttributes: RegisteredDatabaseUserAttributes) => _UserAttributes; }); getUserSessions(userId: UserId): Promise; validateSession(sessionId: string): Promise<{ user: User; session: Session; } | { user: null; session: null; }>; createSession(userId: UserId, attributes: RegisteredDatabaseSessionAttributes, options?: { sessionId?: string; }): Promise; invalidateSession(sessionId: string): Promise; invalidateUserSessions(userId: UserId): Promise; deleteExpiredSessions(): Promise; readSessionCookie(cookieHeader: string): string | null; readBearerToken(authorizationHeader: string): string | null; createSessionCookie(sessionId: string): Cookie; createBlankSessionCookie(): Cookie; } export interface SessionCookieOptions { name?: string; expires?: boolean; attributes?: SessionCookieAttributesOptions; } export interface SessionCookieAttributesOptions { sameSite?: "lax" | "strict" | "none"; domain?: string; path?: string; secure?: boolean; } export {};