alyssaxuu/screenity · error · Error
Drive resumable upload finished without final response
Error message
Drive resumable upload finished without final response
What it means
The upload loop completed all chunks (or stopped after stall/abort handling) but never received Drive's terminating 200/201 response containing the file resource, so the uploaded file's ID is unknown. Thrown as the final post-loop guard in uploadResumable.
Source
Thrown at src/pages/Background/drive/handleSaveToDrive.js:270
}
// Drive accepted none of the chunk. Resending the same range is correct,
// but bound it so a persistently stalled upload fails instead of looping.
stalledRounds += 1;
if (stalledRounds >= MAX_STALL_ROUNDS) {
throw new Error(
`Drive resumable upload made no progress at offset ${offset}`
);
}
const stallDelay = Math.min(1000 * Math.pow(2, stalledRounds - 1), 15000);
diagEvent("drive-chunk-stall", {
offset,
round: stalledRounds,
delayMs: stallDelay,
});
await new Promise((r) => setTimeout(r, stallDelay));
}
throw new Error("Drive resumable upload finished without final response");
};
const isAuthError = (err) => {
const msg = String(err?.message || err || "");
return / 401\b/.test(msg) || /401 /.test(msg);
};
// Map a Drive failure to a stable code the editor turns into a specific
// message. The reason strings come from Drive's 403/400 JSON body, which we
// already carry in the thrown message but used to discard client-side.
const classifyDriveError = (err) => {
const msg = String(err?.message || err || "");
// storageQuotaExceeded is the account-full reason. Drive also returns
// "Quota exceeded for quota metric ..." for API rate limits, which is
// transient, so don't match that loosely or a rate limit tells the user
// their Drive is full.
if (/storageQuotaExceeded/i.test(msg)) {
return "drive-quota";View on GitHub (pinned to 512606387b)
Solutions
- Query the resumable session with PUT Content-Range: bytes */size to elicit the final 201 response and file ID
- If the session is gone (410), list the Screenity folder for the sanitized filename to recover the ID
- Retry finalization with backoff; only re-upload if the session is unrecoverable
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at src/pages/Background/drive/handleSaveToDrive.js:270 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of alyssaxuu/screenity@512606387b (2026-09-02).
Data as JSON: /api/errors/8c350d8dcc5c5508.
Report an issue: GitHub.