AlistGo/alist · error
MediaFire token renewal failed: %s
Error message
MediaFire token renewal failed: %s
What it means
renewToken reached MediaFire, got a parseable response, but response.result != 'Success' — the API refused to renew the session token. MediaFire rejects renewal when the current session_token is already expired/revoked, when the cookie/account context no longer matches, or when the endpoint is called too frequently. The new token in response.session_token is intentionally not saved on this path.
Source
Thrown at drivers/mediafire/util.go:133
}
func (d *Mediafire) renewToken(_ context.Context) error {
query := map[string]string{
"session_token": d.SessionToken,
"response_format": "json",
}
var resp MediafireRenewTokenResponse
_, err := d.postForm("/user/renew_session_token.php", query, &resp)
if err != nil {
return fmt.Errorf("failed to renew token: %w", err)
}
//fmt.Printf("getInfo :: Raw response: %s\n", string(body))
//fmt.Printf("getInfo :: Parsed response: %+v\n", resp)
if resp.Response.Result != "Success" {
return fmt.Errorf("MediaFire token renewal failed: %s", resp.Response.Result)
}
d.SessionToken = resp.Response.SessionToken
//fmt.Printf("Init :: Renew Session Token: %s", resp.Response.Result)
op.MustSaveDriverStorage(d)
return nil
}
func (d *Mediafire) getFiles(ctx context.Context, folderKey string) ([]File, error) {
files := make([]File, 0)
hasMore := true
chunkNumber := 1
for hasMore {
resp, err := d.getFolderContent(ctx, folderKey, chunkNumber)View on GitHub (pinned to 843d9dc814)
Solutions
- On this error, immediately fall back to getSessionToken with a freshly extracted browser cookie — renewal of a dead token cannot succeed
- Ensure only one instance renews a given account's token
- If it recurs, re-extract both cookie and session token together so they belong to the same browser session
Example fix
// before: renew failure returned as-is
if resp.Response.Result != "Success" {
return fmt.Errorf("MediaFire token renewal failed: %s", resp.Response.Result)
}
// after: escalate dead-token renewals to full re-auth
if resp.Response.Result != "Success" {
if newTok, err2 := d.getSessionToken(context.Background()); err2 == nil {
d.SessionToken = newTok
return nil
}
return fmt.Errorf("MediaFire token renewal failed: %s", resp.Response.Result)
} Defensive patterns
Strategy: fallback
Try / catch
On renewal refusal, fall back immediately: if newTok, err := d.getSessionToken(ctx); err == nil { use newTok } else { mark storage as needing new credentials }. Retrying renew against a dead token is pointless. Prevention
- Detect token-expiry result strings and switch to full re-auth instead of retrying renew
- Ensure renewal cadence (6-9 min cron) is shorter than MediaFire's session lifetime
- Run only one instance per MediaFire account to avoid mutual session invalidation
When it happens
Trigger: The 6-9 minute renewal cron racing after the token already expired; account logged out in the browser invalidating the session; renewing with a token obtained under a different cookie.
Common situations: Instance suspended/resumed so the cron gap exceeded the token lifetime; multiple instances sharing one account and interfering with each other's sessions.
Related errors
- Init :: [MediaFire] {critical} missing sessionToken
- Init :: [MediaFire] {critical} missing Cookie
- MediaFire API error: %s
- empty session token received
- getSessionToken :: failed to get session token, status code:
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/42a6afa2544f851c.
Report an issue: GitHub.