style(copy): fix remaining punctuation violations and make check:copy strict

Auto-fix of 602 string literals across 74 files (half-width punctuation next to
Chinese, parenthesised Chinese, quotes); biome reflow; e2/e6 assertions follow
the new full-width summaries. check:copy now runs with --strict in ci.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-28 21:34:51 +08:00
1 parent 0fccfe257d
commit fb84a71f80
76 files changed
+582 -570

No files matched your search

@@ -180,7 +180,7 @@ export async function verifyRegistration(
const response = input.response as unknown as RegistrationResponseJSON;
const origins = expectedOrigins(rp, response);
const challenge = await takeChallenge(db, input.challengeId, "register", admin.id);
if (!challenge) throw new ApiException("precondition_failed", "注册挑战已过期或已用过,重新开始");
if (!challenge) throw new ApiException("precondition_failed", "注册挑战已过期或已用过,重新开始");
let v: Awaited<ReturnType<typeof verifyRegistrationResponse>>;
try {
v = await verifyRegistrationResponse({
@@ -191,7 +191,7 @@ export async function verifyRegistration(
requireUserVerification: false,
});
} catch (err) {
throw new ApiException("unauthorized", `Passkey 校验失败:${(err as Error).message}`);
throw new ApiException("unauthorized", `Passkey 校验失败:${(err as Error).message}`);
}
if (!v.verified) throw new ApiException("unauthorized", "Passkey 校验失败");
const { credential, credentialDeviceType, credentialBackedUp } = v.registrationInfo;
@@ -220,7 +220,7 @@ export async function verifyRegistration(
export async function authenticationOptions(db: Kysely<DB>, admin: AdminRow, rp: RpInfo): Promise<PasskeyChallenge> {
const creds = await listPasskeys(db, admin.id);
if (!creds.length) throw new ApiException("precondition_failed", "还没有登记 Passkey,用密码登录");
if (!creds.length) throw new ApiException("precondition_failed", "还没有登记 Passkey,用密码登录");
const options = await generateAuthenticationOptions({
rpID: rp.rpID,
userVerification: "preferred",
@@ -240,7 +240,7 @@ export async function verifyAuthentication(
const response = input.response as unknown as AuthenticationResponseJSON;
const origins = expectedOrigins(rp, response);
const challenge = await takeChallenge(db, input.challengeId, "login", null);
if (!challenge) throw new ApiException("precondition_failed", "登录挑战已过期或已用过,重试");
if (!challenge) throw new ApiException("precondition_failed", "登录挑战已过期或已用过,重试");
const cred = await db
.selectFrom("admin_passkey")
.selectAll()
@@ -264,7 +264,7 @@ export async function verifyAuthentication(
requireUserVerification: false,
});
} catch (err) {
throw new ApiException("unauthorized", `Passkey 校验失败:${(err as Error).message}`);
throw new ApiException("unauthorized", `Passkey 校验失败:${(err as Error).message}`);
}
if (!v.verified) throw new ApiException("unauthorized", "Passkey 校验失败");
// 计数器只增不减(条件更新:并发重放同一个断言只有一个生效;计数器恒为 0 的认证器照常放行)
@@ -281,6 +281,6 @@ export async function verifyAuthentication(
.where(sql<boolean>`(counter < ${next} or (counter = 0 and ${next} = 0))`)
.returningAll()
.executeTakeFirst();
if (!u) throw new ApiException("unauthorized", "Passkey 签名计数器回退(可能被克隆),已拒绝");
if (!u) throw new ApiException("unauthorized", "Passkey 签名计数器回退(可能被克隆),已拒绝");
return u;
}