@lifeworld/lucia
Version:
A simple and flexible authentication library
60 lines (59 loc) • 2.4 kB
TypeScript
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<infer _SessionAttributes, any> ? _SessionAttributes : {};
type UserAttributes = RegisteredLucia extends Lucia<any, infer _UserAttributes> ? _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<never, never>, _UserAttributes extends {} = Record<never, never>> {
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<Session[]>;
validateSession(sessionId: string): Promise<{
user: User;
session: Session;
} | {
user: null;
session: null;
}>;
createSession(userId: UserId, attributes: RegisteredDatabaseSessionAttributes, options?: {
sessionId?: string;
}): Promise<Session>;
invalidateSession(sessionId: string): Promise<void>;
invalidateUserSessions(userId: UserId): Promise<void>;
deleteExpiredSessions(): Promise<void>;
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 {};