feat(account-health): allow silent refresh on scheduled probes and stop treating wangyihao token misses as auth failure

Scheduled probes and reportAccountFailure now request a silent refresh
before marking an account expired, and a missing wangyihao publish
token is classified as ok instead of auth_failure so the cookie-based
refresh path can recover the session.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-30 19:18:09 +08:00
parent b89892be6e
commit 02b8cd683d
3 changed files with 8 additions and 5 deletions
@@ -611,7 +611,7 @@ async function runDueProbes(): Promise<void> {
const trigger = record.suspectedExpiredAt ? "confirm" : "scheduled";
void enqueueAccountProbe(account, {
trigger,
allowSilentRefresh: false,
allowSilentRefresh: true,
}).catch((error) => {
console.warn("[desktop-account-health] scheduled probe failed", {
accountId: account.id,
@@ -946,7 +946,7 @@ export async function reportAccountFailure(
return await performProbeLocked(account, {
trigger: "confirm",
allowSilentRefresh: false,
allowSilentRefresh: true,
});
});
}
@@ -70,7 +70,7 @@ describe("platform auth adapters", () => {
).toBe("auth_failure");
});
it("classifies Wangyihao missing token as auth failure", () => {
it("does not classify Wangyihao publish token misses as auth failure", () => {
const adapter = getPlatformAdapter("wangyihao");
expect(
@@ -79,7 +79,7 @@ describe("platform auth adapters", () => {
code: "wangyihao_token_missing",
},
}),
).toBe("auth_failure");
).toBe("ok");
});
it("classifies Weixin GZH verification as challenge", () => {
@@ -167,9 +167,12 @@ function classifyJuejinFailure(input: PlatformFailureInput): PlatformFailureClas
function classifyWangyihaoFailure(input: PlatformFailureInput): PlatformFailureClassification {
const code = typeof input.error?.code === "string" ? input.error.code : "";
if (code === "wangyihao_not_logged_in" || code === "wangyihao_token_missing") {
if (code === "wangyihao_not_logged_in") {
return "auth_failure";
}
if (code === "wangyihao_token_missing") {
return "ok";
}
if (code === "wangyihao_challenge_required") {
return "challenge";
}