naturalcrit / homebrewery

Create authentic looking D&D homebrews using only markdown
https://homebrewery.naturalcrit.com
MIT License
1.08k stars 326 forks source link

Improve error popup for User Google Drive storage out of space #2510

Closed Brink81 closed 8 months ago

Brink81 commented 1 year ago

Error Code

Error: Forbidden

Error: Forbidden
    at Request.<anonymous> (https://homebrewery.naturalcrit.com/homebrew/bundle.js:75356:19)
    at Emitter.emit (https://homebrewery.naturalcrit.com/homebrew/bundle.js:1966:20)
    at xhr.onreadystatechange (https://homebrewery.naturalcrit.com/homebrew/bundle.js:75665:10)
{
  "status": 403,
  "method": "PUT",
  "url": "/api/update/g1LAcYR05zRg"
}


### Your description of what happened:

"Oops" error while Saving or Auto-saving on Google Chrome, Mozilla Firefox, and even Microsoft Edge.

The code "<div class="navDropdownContainer save-menu"><div class="navItem save saved">auto-saved.</div>"
seems to be malfunctioning.
calculuschild commented 1 year ago

According to our logs, it was trying to save to your Google Drive, but your drive is full.

Does it continuously attempt to autosave without your intervention or just when it detects changes?

calculuschild commented 1 year ago

This is an opportunity to improve the error messaging for this particular google response, and probably urgent because being unable to save with no clear reason why is a recipe for users losing data. Example response from Google here (personal info removed):


 GaxiosError: The user's Drive storage quota has been exceeded.
     at Gaxios._request (/app/node_modules/gaxios/build/src/gaxios.js:130:23)
     at runMicrotasks (<anonymous>)
     at processTicksAndRejections (node:internal/process/task_queues:96:5)
     at async JWT.requestAsync (/app/node_modules/google-auth-library/build/src/auth/oauth2client.js:368:18)
     at async Object.updateGoogleBrew (/app/server/googleActions.js:137:3)
     at async updateBrew (/app/server/homebrew.api.js:215:19) {
   response: {
     config: {
       url: 'https://www.googleapis.com/upload/drive/v3/files/xxxxxxxxxxxxxxxxxxxx?uploadType=multipart',
       method: 'PATCH',
       userAgentDirectives: [Array],
       paramsSerializer: [Function (anonymous)],
       data: [PassThrough],
       headers: [Object],
       params: [Object],
       validateStatus: [Function (anonymous)],
       retry: true,
       body: [PassThrough],
       responseType: 'json',
       retryConfig: [Object]
     },
     data: { error: [Object] },
     headers: {
       'alt-svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
       connection: 'close',
       'content-length': '257',
       'content-type': 'application/json; charset=UTF-8',
       date: 'Thu, 17 Nov 2022 22:50:52 GMT',
       server: 'UploadServer',
       vary: 'Origin, X-Origin',
       'x-guploader-uploadid': 'xxxxxxxxxxxxxxx
     },
     status: 403,
     statusText: 'Forbidden',
     request: {
       responseURL: 'https://www.googleapis.com/upload/drive/v3/files/xxxxxxxxxxxxxxxxxxxxxxx?uploadType=multipart'
     }
   },
   config: {
     url: 'https://www.googleapis.com/upload/drive/v3/files/xxxxxxxxxxxxxxxxxxxxx?uploadType=multipart',
     method: 'PATCH',
     userAgentDirectives: [ [Object] ],
     paramsSerializer: [Function (anonymous)],
     data: PassThrough {
       _readableState: [ReadableState],
       _events: [Object: null prototype],
       _eventsCount: 2,
       _maxListeners: undefined,
       _writableState: [WritableState],
       allowHalfOpen: true,
       _flush: [Function: flush],
       [Symbol(kCapture)]: false,
       [Symbol(kCallback)]: null
     },
     headers: {
       'x-goog-api-client': 'gdcl/6.0.0 gl-node/16.11.1 auth/8.0.2',
       'content-type': 'multipart/related; boundary=ebb21e98-e8f2-422c-b489-2ef3ccb12a91',
       'Accept-Encoding': 'gzip',
       'User-Agent': 'google-api-nodejs-client/6.0.0 (gzip)',
       Authorization: 'Bearerxxxxxxxxxxxxxxxxxxxxxxxxx',
       Accept: 'application/json'
     },
     params: { uploadType: 'multipart' },
     validateStatus: [Function (anonymous)],
     retry: true,
     body: PassThrough {
       _readableState: [ReadableState],
       _events: [Object: null prototype],
       _eventsCount: 2,
       _maxListeners: undefined,
       _writableState: [WritableState],
       allowHalfOpen: true,
       _flush: [Function: flush],
       [Symbol(kCapture)]: false,
       [Symbol(kCallback)]: null
     },
     responseType: 'json',
     retryConfig: {
       currentRetryAttempt: 0,
       retry: 3,
       httpMethodsToRetry: [Array],
       noResponseRetries: 2,
       statusCodesToRetry: [Array]
     }
   },
   code: 403,
   errors: [
     {
       domain: 'global',
       reason: 'storageQuotaExceeded',
       message: "The user's Drive storage quota has been exceeded."
     }
   ]
 }
Brink81 commented 1 year ago

Yes, apologies for the misconception. I was very confused. I see now that my phone backup caused an issue.

On Thu, Nov 17, 2022, 10:06 PM Trevor Buckner @.***> wrote:

According to our logs, it was trying to save to your Google Drive, but your drive is full.

— Reply to this email directly, view it on GitHub https://github.com/naturalcrit/homebrewery/issues/2510#issuecomment-1319486115, or unsubscribe https://github.com/notifications/unsubscribe-auth/AM4BUXCJGSBRU5ATF7ARB3LWI3XB3ANCNFSM6AAAAAASC6UNBU . You are receiving this because you authored the thread.Message ID: @.***>

5e-Cleric commented 8 months ago

I believe this was solved by #3255