diff --git a/src/app.d.ts b/src/app.d.ts index a979ab2be484be64a92551147722672394eeba01..d5b5ecf20e7be0f9ceaf79d2abbfdc54e65bf651 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,11 +1,12 @@ // See https://kit.svelte.dev/docs/types#app - -import type { Locals as AriseLocals } from "$lib/types.ts"; -import type { aidc } from "./auth.ts"; +import { Locals as ILocals } from "$lib/types.ts"; declare global { namespace App { - interface Locals extends AriseLocals<typeof aidc> {} + interface Locals extends ILocals { + user: import("lucia").User | null; + session: import("lucia").Session | null; + } } } diff --git a/src/lib/adapters/sqlite-memory.ts b/src/lib/adapters/sqlite-memory.ts index 19aa4ba1756538c8dcc2109d8897b22b2932a5f5..b9c63ed4153f6f664bbf3f0244a9184842ec1606 100644 --- a/src/lib/adapters/sqlite-memory.ts +++ b/src/lib/adapters/sqlite-memory.ts @@ -78,3 +78,10 @@ export interface DatabaseSession extends DefaultSessionAttributes { id: string; id_token: string; } + +declare module "../index.js" { + interface Foo { + Session: DefaultSessionAttributes; + User: Omit<DatabaseUser<Record<never, never>>, "id">; + } +} diff --git a/src/lib/index.ts b/src/lib/index.ts index f35f9de02b973a6fb380d6df29192101f3db0eca..f065c6b849fd1cd0a35ed3bfcaeddfe323ecc243 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,6 +1,6 @@ import { redirect, type Handle, error, type RequestEvent } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; -import { generateId, type Session } from "lucia"; +import { generateId, Lucia, type Session } from "lucia"; import type { Client, TokenSet } from "openid-client"; import { Issuer, errors, generators } from "openid-client"; import { SEE_OTHER } from "readable-http-codes"; @@ -15,7 +15,7 @@ import type { Config, CookieNames, Paths } from "./types.js"; import type { DefaultSessionAttributes, DefaultUserAttributes, - LuciaAdapter, + // LuciaAdapter, } from "./lucia.js"; interface InternalUser { @@ -29,9 +29,22 @@ export interface DatabaseSession extends DefaultSessionAttributes { id_token: string; } +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface Foo {} + +interface Bar< + User extends Record<never, never>, + Session extends Record<never, never>, +> { + User: User; + Session: Session; +} + declare module "lucia" { interface Register { - Lucia: LuciaAdapter; + Lucia: Foo extends Bar<infer _User, infer _Session> + ? Lucia<_Session, _User> + : never; DatabaseUserAttributes: Omit<InternalUser, "id">; DatabaseSessionAttributes: Omit<DatabaseSession, "id">; } diff --git a/src/lib/types.ts b/src/lib/types.ts index 275ca430ff0cd07e710b5208cf5a88b45b037ac4..3b4cd2531b8100c3b1b2cb940c423f20e2d6ae1d 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -5,8 +5,6 @@ import type { DefaultUserAttributes, LuciaAdapter, } from "./lucia.js"; -import { AriseIdConnect } from "./index.js"; -import type { Session, User } from "lucia"; export interface Config< Session extends DefaultSessionAttributes, @@ -38,15 +36,6 @@ export type CookieNames = { oauthCodeVerifier: string; }; -type Extract<T> = - T extends AriseIdConnect<infer Session, infer User> - ? { session: Session; user: User } - : never; - -export interface Locals< - T extends AriseIdConnect<DefaultSessionAttributes, DefaultUserAttributes>, -> { - user: (Extract<T>["user"] & User) | null; - session: (Extract<T>["session"] & Session) | null; +export interface Locals { authPaths: Paths; } diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts index c465c92b7b6e7e18958b1491b34d00bf1eea0ade..0cc8fd13fec638095a30c70d4c33abb57ccad467 100644 --- a/src/routes/login/+page.server.ts +++ b/src/routes/login/+page.server.ts @@ -1,6 +1,7 @@ import { redirect } from "@sveltejs/kit"; - +type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; export async function load(event) { + type User = Expand<import("lucia").User>; if (event.locals.user) { return redirect(302, "/"); }