import { Cookie, CookieOption } from "./cookie.js"; import { AuthRequest } from "./request.js"; import { lucia as defaultMiddleware } from "../middleware/index.js"; import type { UserSchema } from "./schema.js"; import type { Adapter, UserAdapter, SessionAdapter } from "./adapter.js"; import type { LuciaErrorConstructor } from "./error.js"; import type { Middleware, LuciaRequest } from "./request.js"; export type Session = Readonly<{ sessionId: string; userId: string; activePeriodExpiresAt: Date; idlePeriodExpiresAt: Date; state: "idle" | "active"; fresh: boolean; }>; export type Key = SingleUseKey | PersistentKey; export type SingleUseKey = Readonly<{ type: "single_use"; userId: string; providerId: string; providerUserId: string; passwordDefined: boolean; expiresAt: Date; expired: boolean; }>; export type PersistentKey = Readonly<{ type: "persistent"; userId: string; providerId: string; providerUserId: string; passwordDefined: boolean; primary: boolean; }>; export type Env = "DEV" | "PROD"; export type User = ReturnType; export declare const lucia: (config: C) => Auth; export declare class Auth { private adapter; private generateUserId; private sessionCookieOption; private sessionExpiresIn; private env; private hash; private autoDatabaseCleanup; protected middleware: C["middleware"] extends Middleware ? C["middleware"] : ReturnType; private csrfProtection; private origin; private experimental; constructor(config: C); protected _transformDatabaseUser: (databaseUser: UserSchema) => C["transformDatabaseUser"] extends Function ? ReturnType : { userId: string; }; transformDatabaseUser: (databaseUser: UserSchema) => User; getUser: (userId: string) => Promise; getSessionUser: (sessionId: string) => Promise<{ user: User; session: Session; }>; createUser: (data: { primaryKey: { providerId: string; providerUserId: string; password: string | null; } | null; attributes: Lucia.UserAttributes; }) => Promise; updateUserAttributes: (userId: string, attributes: Partial) => Promise; deleteUser: (userId: string) => Promise; useKey: (providerId: string, providerUserId: string, password: string | null) => Promise; getSession: (sessionId: string) => Promise; getAllUserSessions: (userId: string) => Promise; validateSession: (sessionId: string) => Promise; validateSessionUser: (sessionId: string) => Promise<{ session: Session; user: User; }>; generateSessionId: () => readonly [sessionId: string, activePeriodExpiresAt: Date, idlePeriodExpiresAt: Date]; createSession: (userId: string) => Promise; renewSession: (sessionId: string) => Promise; invalidateSession: (sessionId: string) => Promise; invalidateAllUserSessions: (userId: string) => Promise; deleteDeadUserSessions: (userId: string) => Promise; parseRequestHeaders: (request: LuciaRequest) => string | null; handleRequest: (...args: (C["middleware"] extends Middleware ? C["middleware"] : Middleware<[import("./request.js").RequestContext]>) extends Middleware ? Args : never) => AuthRequest; createSessionCookie: (session: Session | null) => Cookie; createKey: (userId: string, keyData: KeyData) => Promise>; deleteKey: (providerId: string, providerUserId: string) => Promise; getKey: (providerId: string, providerUserId: string) => Promise; getAllUserKeys: (userId: string) => Promise; updateKeyPassword: (providerId: string, providerUserId: string, password: string | null) => Promise; } type MaybePromise = T | Promise; export type Configuration = { adapter: ((E: LuciaErrorConstructor) => Adapter) | { user: (E: LuciaErrorConstructor) => UserAdapter | Adapter; session: (E: LuciaErrorConstructor) => SessionAdapter | Adapter; }; env: Env; autoDatabaseCleanup?: boolean; csrfProtection?: boolean; generateCustomUserId?: () => MaybePromise; hash?: { generate: (s: string) => MaybePromise; validate: (s: string, hash: string) => MaybePromise; }; middleware?: Middleware; origin?: string[]; sessionExpiresIn?: { activePeriod: number; idlePeriod: number; }; sessionCookie?: CookieOption; transformDatabaseUser?: (databaseUser: Required) => Record; experimental?: { debugMode?: boolean; }; }; type GetKeyFromKeyType = Type extends PersistentKey["type"] ? PersistentKey : Type extends SingleUseKey["type"] ? SingleUseKey : never; export {};