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:
@@ -611,7 +611,7 @@ async function runDueProbes(): Promise<void> {
|
|||||||
const trigger = record.suspectedExpiredAt ? "confirm" : "scheduled";
|
const trigger = record.suspectedExpiredAt ? "confirm" : "scheduled";
|
||||||
void enqueueAccountProbe(account, {
|
void enqueueAccountProbe(account, {
|
||||||
trigger,
|
trigger,
|
||||||
allowSilentRefresh: false,
|
allowSilentRefresh: true,
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
console.warn("[desktop-account-health] scheduled probe failed", {
|
console.warn("[desktop-account-health] scheduled probe failed", {
|
||||||
accountId: account.id,
|
accountId: account.id,
|
||||||
@@ -946,7 +946,7 @@ export async function reportAccountFailure(
|
|||||||
|
|
||||||
return await performProbeLocked(account, {
|
return await performProbeLocked(account, {
|
||||||
trigger: "confirm",
|
trigger: "confirm",
|
||||||
allowSilentRefresh: false,
|
allowSilentRefresh: true,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ describe("platform auth adapters", () => {
|
|||||||
).toBe("auth_failure");
|
).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");
|
const adapter = getPlatformAdapter("wangyihao");
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
@@ -79,7 +79,7 @@ describe("platform auth adapters", () => {
|
|||||||
code: "wangyihao_token_missing",
|
code: "wangyihao_token_missing",
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
).toBe("auth_failure");
|
).toBe("ok");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("classifies Weixin GZH verification as challenge", () => {
|
it("classifies Weixin GZH verification as challenge", () => {
|
||||||
|
|||||||
@@ -167,9 +167,12 @@ function classifyJuejinFailure(input: PlatformFailureInput): PlatformFailureClas
|
|||||||
|
|
||||||
function classifyWangyihaoFailure(input: PlatformFailureInput): PlatformFailureClassification {
|
function classifyWangyihaoFailure(input: PlatformFailureInput): PlatformFailureClassification {
|
||||||
const code = typeof input.error?.code === "string" ? input.error.code : "";
|
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";
|
return "auth_failure";
|
||||||
}
|
}
|
||||||
|
if (code === "wangyihao_token_missing") {
|
||||||
|
return "ok";
|
||||||
|
}
|
||||||
if (code === "wangyihao_challenge_required") {
|
if (code === "wangyihao_challenge_required") {
|
||||||
return "challenge";
|
return "challenge";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user