feat: initial prototype

This commit is contained in:
2026-02-13 15:52:13 +07:00
parent 134351b326
commit e8dbefde43
140 changed files with 12390 additions and 1369 deletions

View File

@@ -0,0 +1,44 @@
import { isUserSuspended } from "@minikura/db";
import { Elysia } from "elysia";
import { auth } from "./auth";
async function getSessionFromHeaders(headers: Headers | Record<string, string>) {
const headersObj =
headers instanceof Headers ? headers : new Headers(headers as Record<string, string>);
return auth.api.getSession({
headers: headersObj,
});
}
export const authPlugin = new Elysia({ name: "auth" })
.mount(auth.handler)
.derive({ as: "scoped" }, async ({ request }) => {
const session = await getSessionFromHeaders(request.headers);
if (
session?.user &&
isUserSuspended(
session.user as unknown as Pick<
{ isSuspended: boolean; suspendedUntil: Date | null },
"isSuspended" | "suspendedUntil"
>
)
) {
return {
user: null,
session: null,
isAuthenticated: false,
isSuspended: true,
};
}
return {
user: session?.user || null,
session: session?.session || null,
isAuthenticated: Boolean(session?.user),
isSuspended: false,
};
});
export type AuthPlugin = typeof authPlugin;