Fix recorder finalize path and add invite-gated login

这个提交包含在:
cryptocommuniums-afk
2026-03-15 00:52:11 +08:00
父节点 ad83ce9c68
当前提交 d1b6603061
修改 13 个文件,包含 458 行新增18 行删除

查看文件

@@ -1,4 +1,5 @@
import { COOKIE_NAME, ONE_YEAR_MS } from "@shared/const";
import { TRPCError } from "@trpc/server";
import { getSessionCookieOptions } from "./_core/cookies";
import { systemRouter } from "./_core/systemRouter";
import { adminProcedure, publicProcedure, protectedProcedure, router } from "./_core/trpc";
@@ -48,11 +49,20 @@ export const appRouter = router({
// Username-based login
loginWithUsername: publicProcedure
.input(z.object({ username: z.string().min(1).max(64) }))
.input(z.object({
username: z.string().trim().min(1).max(64),
inviteCode: z.string().trim().max(64).optional(),
}))
.mutation(async ({ ctx, input }) => {
const { user, isNew } = await db.createUsernameAccount(input.username);
const username = input.username.trim();
const existingUser = await db.getUserByUsername(username);
if (!existingUser && !db.isValidRegistrationInvite(input.inviteCode)) {
throw new TRPCError({ code: "FORBIDDEN", message: "新用户注册需要正确的邀请码" });
}
const { user, isNew } = await db.createUsernameAccount(username, input.inviteCode);
const sessionToken = await sdk.createSessionToken(user.openId, {
name: user.name || input.username,
name: user.name || username,
expiresInMs: ONE_YEAR_MS,
});
const cookieOptions = getSessionCookieOptions(ctx.req);