Files
webgis_pemetaan_kemiskinan/api/auth-router.ts
T
2026-05-16 18:57:42 +07:00

41 lines
1.2 KiB
TypeScript

import * as cookie from "cookie";
import { z } from "zod";
import { Session } from "@contracts/constants";
import { getSessionCookieOptions } from "./lib/cookies";
import { createRouter, authedQuery, publicQuery } from "./middleware";
import { loginWithCredentials, setSessionCookie } from "./auth";
export const authRouter = createRouter({
me: authedQuery.query((opts) => opts.ctx.user),
login: publicQuery
.input(
z.object({
identifier: z.string().min(1),
password: z.string().min(1),
}),
)
.mutation(async ({ input, ctx }) => {
const { user, token } = await loginWithCredentials(
input.identifier,
input.password,
);
setSessionCookie(ctx.resHeaders, token);
return { user };
}),
logout: authedQuery.mutation(async ({ ctx }) => {
const opts = getSessionCookieOptions(ctx.req.headers);
ctx.resHeaders.append(
"set-cookie",
cookie.serialize(Session.cookieName, "", {
httpOnly: opts.httpOnly,
path: opts.path,
sameSite: opts.sameSite?.toLowerCase() as "lax" | "none",
secure: opts.secure,
maxAge: 0,
}),
);
return { success: true };
}),
});