From fdc065fe5138e54797e596942497d12579206705 Mon Sep 17 00:00:00 2001 From: ifedapoolarewaju Date: Mon, 16 Mar 2020 16:11:53 +0100 Subject: [PATCH] companion: emit error to client if download fails --- packages/@uppy/companion/src/server/Uploader.js | 12 ++++++++++-- .../@uppy/companion/src/server/controllers/url.js | 12 +++++++++--- .../companion/src/server/provider/drive/index.js | 5 +++-- .../companion/src/server/provider/dropbox/index.js | 5 +++-- .../companion/src/server/provider/facebook/index.js | 5 +++-- .../src/server/provider/instagram/graph/index.js | 5 +++-- .../companion/src/server/provider/instagram/index.js | 5 +++-- .../companion/src/server/provider/onedrive/index.js | 5 +++-- 8 files changed, 37 insertions(+), 17 deletions(-) diff --git a/packages/@uppy/companion/src/server/Uploader.js b/packages/@uppy/companion/src/server/Uploader.js index 8f6d2b55b..a84265da2 100644 --- a/packages/@uppy/companion/src/server/Uploader.js +++ b/packages/@uppy/companion/src/server/Uploader.js @@ -204,13 +204,21 @@ class Uploader { /** * - * @param {Buffer | Buffer[]} chunk + * @param {Error} err + * @param {string | Buffer | Buffer[]} chunk */ - handleChunk (chunk) { + handleChunk (err, chunk) { if (this.uploadStopped) { return } + if (err) { + logger.error(err, 'uploader.download.error', this.shortToken) + this.emitError(err) + this.cleanUp() + return + } + // @todo a default protocol should not be set. We should ensure that the user specifies her protocol. const protocol = this.options.protocol || PROTOCOLS.multipart diff --git a/packages/@uppy/companion/src/server/controllers/url.js b/packages/@uppy/companion/src/server/controllers/url.js index 4e5910435..eed17e25a 100644 --- a/packages/@uppy/companion/src/server/controllers/url.js +++ b/packages/@uppy/companion/src/server/controllers/url.js @@ -94,12 +94,18 @@ const validateURL = (url, debug) => { return true } +/** + * @callback downloadCallback + * @param {Error} err + * @param {string | Buffer | Buffer[]} chunk + */ + /** * Downloads the content in the specified url, and passes the data * to the callback chunk by chunk. * * @param {string} url - * @param {typeof Function} onDataChunk + * @param {downloadCallback} onDataChunk * @param {boolean} blockLocalIPs * @param {string=} traceId */ @@ -112,7 +118,7 @@ const downloadURL = (url, onDataChunk, blockLocalIPs, traceId) => { } request(opts) - .on('data', onDataChunk) - .on('end', () => onDataChunk(null)) + .on('data', (chunk) => onDataChunk(null, chunk)) + .on('end', () => onDataChunk(null, null)) .on('error', (err) => logger.error(err, 'controller.url.download.error', traceId)) } diff --git a/packages/@uppy/companion/src/server/provider/drive/index.js b/packages/@uppy/companion/src/server/provider/drive/index.js index 6874a00a1..91668a576 100644 --- a/packages/@uppy/companion/src/server/provider/drive/index.js +++ b/packages/@uppy/companion/src/server/provider/drive/index.js @@ -109,10 +109,11 @@ class Drive extends Provider { .qs({ alt: 'media', supportsAllDrives: true }) .auth(token) .request() - .on('data', onData) - .on('end', () => onData(null)) + .on('data', (chunk) => onData(null, chunk)) + .on('end', () => onData(null, null)) .on('error', (err) => { logger.error(err, 'provider.drive.download.error') + onData(err) }) } diff --git a/packages/@uppy/companion/src/server/provider/dropbox/index.js b/packages/@uppy/companion/src/server/provider/dropbox/index.js index 82a01c7df..8d925c523 100644 --- a/packages/@uppy/companion/src/server/provider/dropbox/index.js +++ b/packages/@uppy/companion/src/server/provider/dropbox/index.js @@ -121,10 +121,11 @@ class DropBox extends Provider { }) .auth(token) .request() - .on('data', onData) - .on('end', () => onData(null)) + .on('data', (chunk) => onData(null, chunk)) + .on('end', () => onData(null, null)) .on('error', (err) => { logger.error(err, 'provider.dropbox.download.error') + onData(err) }) } diff --git a/packages/@uppy/companion/src/server/provider/facebook/index.js b/packages/@uppy/companion/src/server/provider/facebook/index.js index 26972d6db..a256b0d9d 100644 --- a/packages/@uppy/companion/src/server/provider/facebook/index.js +++ b/packages/@uppy/companion/src/server/provider/facebook/index.js @@ -82,10 +82,11 @@ class Facebook extends Provider { .request((err, resp, body) => { if (err) return logger.error(err, 'provider.facebook.download.error') request(this._getMediaUrl(body)) - .on('data', onData) - .on('end', () => onData(null)) + .on('data', (chunk) => onData(null, chunk)) + .on('end', () => onData(null, null)) .on('error', (err) => { logger.error(err, 'provider.facebook.download.url.error') + onData(err) }) }) } diff --git a/packages/@uppy/companion/src/server/provider/instagram/graph/index.js b/packages/@uppy/companion/src/server/provider/instagram/graph/index.js index 34c5861d8..d563eb52b 100644 --- a/packages/@uppy/companion/src/server/provider/instagram/graph/index.js +++ b/packages/@uppy/companion/src/server/provider/instagram/graph/index.js @@ -78,10 +78,11 @@ class Instagram extends Provider { .request((err, resp, body) => { if (err) return logger.error(err, 'provider.instagram.download.error') request(body.media_url) - .on('data', onData) - .on('end', () => onData(null)) + .on('data', (chunk) => onData(null, chunk)) + .on('end', () => onData(null, null)) .on('error', (err) => { logger.error(err, 'provider.instagram.download.url.error') + onData(err) }) }) } diff --git a/packages/@uppy/companion/src/server/provider/instagram/index.js b/packages/@uppy/companion/src/server/provider/instagram/index.js index cbb279e49..d7932c8b6 100644 --- a/packages/@uppy/companion/src/server/provider/instagram/index.js +++ b/packages/@uppy/companion/src/server/provider/instagram/index.js @@ -79,10 +79,11 @@ class Instagram extends Provider { .request((err, resp, body) => { if (err) return logger.error(err, 'provider.instagram.download.error') request(this._getMediaUrl(body, query.carousel_id)) - .on('data', onData) - .on('end', () => onData(null)) + .on('data', (chunk) => onData(null, chunk)) + .on('end', () => onData(null, null)) .on('error', (err) => { logger.error(err, 'provider.instagram.download.url.error') + onData(err) }) }) } diff --git a/packages/@uppy/companion/src/server/provider/onedrive/index.js b/packages/@uppy/companion/src/server/provider/onedrive/index.js index 8eebc8968..ccc1a05cd 100644 --- a/packages/@uppy/companion/src/server/provider/onedrive/index.js +++ b/packages/@uppy/companion/src/server/provider/onedrive/index.js @@ -70,10 +70,11 @@ class OneDrive extends Provider { .get(`${rootPath}/items/${id}/content`) .auth(token) .request() - .on('data', onData) - .on('end', () => onData(null)) + .on('data', (chunk) => onData(null, chunk)) + .on('end', () => onData(null, null)) .on('error', (err) => { logger.error(err, 'provider.onedrive.download.error') + onData(err) }) }