57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import { libsql } from "@lucia-auth/adapter-sqlite";
|
|
import { lucia, Middleware } from "lucia";
|
|
import { config } from "../config";
|
|
import { client } from "../db";
|
|
|
|
const envAliasMap = {
|
|
production: "PROD",
|
|
development: "DEV",
|
|
} as const;
|
|
|
|
const envAlias = envAliasMap[config.env.NODE_ENV];
|
|
|
|
type ElysiaContext = {
|
|
request: Request;
|
|
set: {
|
|
headers: Record<string, string> & {
|
|
["Set-Cookie"]?: string | string[];
|
|
};
|
|
status?: number | undefined | string;
|
|
redirect?: string | undefined;
|
|
};
|
|
};
|
|
|
|
export const elysia = (): Middleware<[ElysiaContext]> => {
|
|
return ({ args }) => {
|
|
const [{ request, set }] = args;
|
|
return {
|
|
request,
|
|
setCookie: (cookie) => {
|
|
const setCookieHeader = set.headers["Set-Cookie"] ?? [];
|
|
const setCookieHeaders: string[] = Array.isArray(setCookieHeader)
|
|
? setCookieHeader
|
|
: [setCookieHeader];
|
|
setCookieHeaders.push(cookie.serialize());
|
|
set.headers["Set-Cookie"] = setCookieHeaders;
|
|
},
|
|
};
|
|
};
|
|
};
|
|
|
|
export const auth = lucia({
|
|
env: envAlias,
|
|
middleware: elysia(),
|
|
adapter: libsql(client, {
|
|
user: "user",
|
|
key: "user_key",
|
|
session: "user_session",
|
|
}),
|
|
getUserAttributes: (data) => {
|
|
return {
|
|
handle: data.handle,
|
|
};
|
|
},
|
|
});
|
|
|
|
export type Auth = typeof auth;
|