Parcourir la source

companion: handle 40x responses that are emitted as errors

Ifedapo Olarewaju il y a 6 ans
Parent
commit
794508588d

+ 15 - 20
packages/@uppy/companion/src/server/provider/drive/index.js

@@ -31,10 +31,10 @@ class Drive {
     let listResponse
     let reqErr
     const finishReq = () => {
-      if (reqErr) {
-        done(reqErr)
-      } else if (listResponse.statusCode !== 200) {
-        done(this._error(listResponse.statusCode))
+      if (reqErr || listResponse.statusCode !== 200) {
+        const err = this._error(reqErr, listResponse)
+        logger.error(err, 'provider.drive.list.error')
+        done(err)
       } else {
         done(null, this.adaptData(listResponse.body, teamDrives ? teamDrives.body : null, options.uppy))
       }
@@ -111,13 +111,10 @@ class Drive {
 
   thumbnail ({id, token}, done) {
     return this.stats({id, token}, (err, resp, body) => {
-      if (err) {
+      if (err || resp.statusCode !== 200) {
+        err = this._error(err, resp)
         logger.error(err, 'provider.drive.thumbnail.error')
-        return done(null)
-      }
-
-      if (resp.statusCode !== 200) {
-        return done(this._error(resp.statusCode))
+        return done(err)
       }
 
       done(null, body.thumbnailLink ? request(body.thumbnailLink) : null)
@@ -126,13 +123,10 @@ class Drive {
 
   size ({id, token}, done) {
     return this.stats({ id, token }, (err, resp, body) => {
-      if (err) {
+      if (err || resp.statusCode !== 200) {
+        err = this._error(err, resp)
         logger.error(err, 'provider.drive.size.error')
-        return done(null)
-      }
-
-      if (resp.statusCode !== 200) {
-        return done(this._error(resp.statusCode))
+        return done(err)
       }
       done(null, parseInt(body.size))
     })
@@ -163,11 +157,12 @@ class Drive {
     return data
   }
 
-  _error (statusCode) {
-    if (statusCode === 401) {
-      return new AuthError()
+  _error (err, resp) {
+    if (resp) {
+      const errMsg = `request to ${this.authProvider} returned ${resp.statusCode}`
+      return resp.statusCode === 401 ? new AuthError() : new Error(errMsg)
     }
-    return new Error(`request to ${this.authProvider} returned ${statusCode}`)
+    return err
   }
 }
 

+ 15 - 15
packages/@uppy/companion/src/server/provider/dropbox/index.js

@@ -36,10 +36,10 @@ class DropBox {
     let stats
     let reqErr
     const finishReq = () => {
-      if (reqErr) {
-        done(reqErr)
-      } else if (stats.statusCode !== 200) {
-        done(this._error(stats.statusCode))
+      if (reqErr || stats.statusCode !== 200) {
+        const err = this._error(reqErr, stats)
+        logger.error(err, 'provider.dropbox.list.error')
+        done(err)
       } else {
         stats.body.user_email = userInfo.body.email
         done(null, this.adaptData(stats.body, options.uppy))
@@ -109,7 +109,9 @@ class DropBox {
       .request()
       .on('response', (resp) => {
         if (resp.statusCode !== 200) {
-          return done(this._error(resp.statusCode))
+          const err = this._error(null, resp)
+          logger.error(err, 'provider.dropbox.thumbnail.error')
+          return done(err)
         }
         done(null, resp)
       })
@@ -128,13 +130,10 @@ class DropBox {
         include_media_info: true
       })
       .request((err, resp, body) => {
-        if (err) {
+        if (err || resp.statusCode !== 200) {
+          err = this._error(err, resp)
           logger.error(err, 'provider.dropbox.size.error')
-          return done(null)
-        }
-
-        if (resp.statusCode !== 200) {
-          return done(this._error(resp.statusCode))
+          return done(err)
         }
         done(null, parseInt(body.size))
       })
@@ -161,12 +160,13 @@ class DropBox {
     return data
   }
 
-  _error (statusCode) {
-    if (statusCode === 401) {
-      return new AuthError()
+  _error (err, resp) {
+    if (resp) {
+      const errMsg = `request to ${this.authProvider} returned ${resp.statusCode}`
+      return resp.statusCode === 401 ? new AuthError() : new Error(errMsg)
     }
 
-    return new Error(`request to ${this.authProvider} returned ${statusCode}`)
+    return err
   }
 }
 

+ 23 - 16
packages/@uppy/companion/src/server/provider/instagram/index.js

@@ -22,10 +22,10 @@ class Instagram {
       .qs(qs)
       .auth(token)
       .request((err, resp, body) => {
-        if (err) {
-          done(err)
-        } else if (resp.statusCode !== 200) {
-          done(this._error(resp))
+        if (err || resp.statusCode !== 200) {
+          err = this._error(err, resp)
+          logger.error(err, 'provider.instagram.list.error')
+          return done(err)
         } else {
           done(null, this.adaptData(body))
         }
@@ -68,12 +68,18 @@ class Instagram {
       .get(`media/${id}`)
       .auth(token)
       .request((err, resp, body) => {
-        if (err) return logger.error(err, 'provider.instagram.thumbnail.error')
+        if (err) {
+          err = this._error(err, resp)
+          logger.error(err, 'provider.instagram.thumbnail.error')
+          return done(err)
+        }
 
         request(body.data.images.thumbnail.url)
           .on('response', (resp) => {
             if (resp.statusCode !== 200) {
-              return done(this._error(resp))
+              err = this._error(null, resp)
+              logger.error(err, 'provider.instagram.thumbnail.error')
+              return done(err)
             }
             done(null, resp)
           })
@@ -88,13 +94,10 @@ class Instagram {
       .get(`media/${id}`)
       .auth(token)
       .request((err, resp, body) => {
-        if (err) {
+        if (err || resp.statusCode !== 200) {
+          err = this._error(err, resp)
           logger.error(err, 'provider.instagram.size.error')
-          return done()
-        }
-
-        if (resp.statusCode !== 200) {
-          return done(this._error(resp))
+          return done(err)
         }
 
         utils.getURLMeta(this._getMediaUrl(body, query.carousel_id))
@@ -126,12 +129,16 @@ class Instagram {
     return data
   }
 
-  _error (resp) {
-    if (resp.statusCode === 400 && resp.body && resp.body.meta.error_type === 'OAuthAccessTokenException') {
-      return new AuthError()
+  _error (err, resp) {
+    if (resp) {
+      if (resp.statusCode === 400 && resp.body && resp.body.meta.error_type === 'OAuthAccessTokenException') {
+        return new AuthError()
+      }
+
+      return new Error(`request to ${this.authProvider} returned ${resp.statusCode}`)
     }
 
-    return new Error(`request to ${this.authProvider} returned ${resp.statusCode}`)
+    return err
   }
 }