Quellcode durchsuchen

Merge branch 'master' of github.com:transloadit/uppy

Kevin van Zonneveld vor 5 Jahren
Ursprung
Commit
a6a4a87c53
60 geänderte Dateien mit 341 neuen und 194 gelöschten Zeilen
  1. 4 4
      README.md
  2. 2 2
      examples/cdn-example/index.html
  3. 1 1
      examples/transloadit-textarea/index.html
  4. 2 2
      examples/uppy-with-companion/client/index.html
  5. 166 102
      package-lock.json
  6. 2 2
      package.json
  7. 1 1
      packages/@uppy/aws-s3-multipart/package-lock.json
  8. 1 1
      packages/@uppy/aws-s3-multipart/package.json
  9. 1 1
      packages/@uppy/aws-s3/package.json
  10. 1 1
      packages/@uppy/companion/package.json
  11. 4 0
      packages/@uppy/companion/src/companion.js
  12. 6 1
      packages/@uppy/companion/src/server/controllers/get.js
  13. 7 1
      packages/@uppy/companion/src/server/controllers/list.js
  14. 5 0
      packages/@uppy/companion/src/server/controllers/logout.js
  15. 7 3
      packages/@uppy/companion/src/server/provider/drive/index.js
  16. 7 3
      packages/@uppy/companion/src/server/provider/dropbox/index.js
  17. 42 3
      packages/@uppy/companion/src/server/provider/error.js
  18. 8 4
      packages/@uppy/companion/src/server/provider/facebook/index.js
  19. 8 4
      packages/@uppy/companion/src/server/provider/instagram/graph/index.js
  20. 7 3
      packages/@uppy/companion/src/server/provider/instagram/index.js
  21. 7 3
      packages/@uppy/companion/src/server/provider/onedrive/index.js
  22. 1 1
      packages/@uppy/core/package-lock.json
  23. 1 1
      packages/@uppy/core/package.json
  24. 1 1
      packages/@uppy/dashboard/package.json
  25. 1 1
      packages/@uppy/drag-drop/package.json
  26. 1 1
      packages/@uppy/dropbox/package.json
  27. 1 1
      packages/@uppy/facebook/package.json
  28. 1 1
      packages/@uppy/file-input/package.json
  29. 1 1
      packages/@uppy/form/package.json
  30. 1 1
      packages/@uppy/golden-retriever/package.json
  31. 1 1
      packages/@uppy/google-drive/package.json
  32. 1 1
      packages/@uppy/informer/package.json
  33. 1 1
      packages/@uppy/instagram/package.json
  34. 1 1
      packages/@uppy/locales/package.json
  35. 1 1
      packages/@uppy/onedrive/package.json
  36. 1 1
      packages/@uppy/progress-bar/package.json
  37. 1 1
      packages/@uppy/provider-views/package.json
  38. 1 1
      packages/@uppy/react/package.json
  39. 2 2
      packages/@uppy/robodog/README.md
  40. 1 1
      packages/@uppy/robodog/package.json
  41. 1 1
      packages/@uppy/status-bar/package.json
  42. 1 1
      packages/@uppy/thumbnail-generator/package-lock.json
  43. 1 1
      packages/@uppy/thumbnail-generator/package.json
  44. 1 1
      packages/@uppy/transloadit/package-lock.json
  45. 1 1
      packages/@uppy/transloadit/package.json
  46. 1 1
      packages/@uppy/tus/package.json
  47. 1 1
      packages/@uppy/url/package.json
  48. 1 1
      packages/@uppy/utils/package.json
  49. 1 1
      packages/@uppy/webcam/package.json
  50. 1 1
      packages/@uppy/xhr-upload/package.json
  51. 1 1
      packages/uppy/package.json
  52. 5 5
      website/src/docs/index.md
  53. 2 2
      website/src/docs/locales.md
  54. 4 4
      website/src/docs/robodog-form.md
  55. 2 2
      website/src/docs/robodog.md
  56. 1 1
      website/src/examples/dashboard/app.es6
  57. 3 3
      website/src/examples/i18n/app.html
  58. 1 1
      website/src/examples/markdown-snippets/app.es6
  59. 1 1
      website/src/examples/markdown-snippets/app.html
  60. 2 2
      website/themes/uppy/layout/index.ejs

+ 4 - 4
README.md

@@ -65,7 +65,7 @@ $ npm install @uppy/core @uppy/dashboard @uppy/tus
 
 We recommend installing from npm and then using a module bundler such as [Webpack](https://webpack.js.org/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/).
 
-Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css), either to your HTML page's `<head>` or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack.
+Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css), either to your HTML page's `<head>` or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack.
 
 Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object.
 
@@ -73,10 +73,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly
 
 ```html
 <!-- 1. Add CSS to `<head>` -->
-<link href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css" rel="stylesheet">
+<link href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css" rel="stylesheet">
 
 <!-- 2. Add JS before the closing `</body>` -->
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
 
 <!-- 3. Initialize -->
 <div class="UppyDragDrop"></div>
@@ -174,7 +174,7 @@ const Uppy = require('@uppy/core')
 If you're using Uppy from CDN, `es6-promise` and `whatwg-fetch` are already included in the bundle, so no need to include anything additionally:
 
 ```html
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
 ```
 
 ## FAQ

+ 2 - 2
examples/cdn-example/index.html

@@ -4,11 +4,11 @@
     <title></title>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css" rel="stylesheet">
+    <link href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css" rel="stylesheet">
   </head>
   <body>
     <button id="uppyModalOpener">Open Modal</button>
-    <script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
     <script>
       const uppy = Uppy.Core({debug: true, autoProceed: false})
         .use(Uppy.Dashboard, { trigger: '#uppyModalOpener' })

+ 1 - 1
examples/transloadit-textarea/index.html

@@ -2,7 +2,7 @@
 <html>
   <head>
     <meta charset="utf-8">
-    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.css">
+    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.css">
     <style>
       body {
         font-family: Roboto, Open Sans;

+ 2 - 2
examples/uppy-with-companion/client/index.html

@@ -4,11 +4,11 @@
     <title></title>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css" rel="stylesheet">
+    <link href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css" rel="stylesheet">
   </head>
   <body>
     <button id="uppyModalOpener">Open Modal</button>
-    <script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
     <script>
       const uppy = Uppy.Core({debug: true, autoProceed: false})
         .use(Uppy.Dashboard, { trigger: '#uppyModalOpener' })

+ 166 - 102
package-lock.json

@@ -6147,7 +6147,8 @@
       "dependencies": {
         "es6-promise": {
           "version": "4.2.8",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+          "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
         }
       }
     },
@@ -6250,7 +6251,8 @@
       "dependencies": {
         "react": {
           "version": "16.5.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/react/-/react-16.5.0.tgz",
+          "integrity": "sha512-nw/yB/L51kA9PsAy17T1JrzzGRk+BlFCJwFF7p+pwVxgqwPjYNeZEkkH7LXn9dmflolrYMXLWMTkQ77suKPTNQ==",
           "requires": {
             "loose-envify": "^1.1.0",
             "object-assign": "^4.1.1",
@@ -6373,15 +6375,18 @@
       "dependencies": {
         "@purest/providers": {
           "version": "1.0.1",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/@purest/providers/-/providers-1.0.1.tgz",
+          "integrity": "sha512-1ekKViRit0jo1IzDLSRSziU/OpX9ckoj8uWvSWzHLASyTqhKZL9Pdq628guq7yT3qFcJeeaeaA5T97a4w7fpqA=="
         },
         "atob": {
           "version": "2.1.2",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+          "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
         },
         "aws-sdk": {
           "version": "2.587.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.587.0.tgz",
+          "integrity": "sha512-MAdUE4BC+hyfFPoQc61aV/tIfApp5ifqe3segW4GJq6dMmSCZdFbDwvs5ZUkgOSJ4ks3ZrpH9eCHpt6r0dFJYQ==",
           "requires": {
             "buffer": "4.9.1",
             "events": "1.1.1",
@@ -6396,13 +6401,15 @@
           "dependencies": {
             "uuid": {
               "version": "3.3.2",
-              "bundled": true
+              "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+              "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
             }
           }
         },
         "body-parser": {
           "version": "1.19.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+          "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
           "requires": {
             "bytes": "3.1.0",
             "content-type": "~1.0.4",
@@ -6418,7 +6425,8 @@
         },
         "buffer": {
           "version": "4.9.1",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+          "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
           "requires": {
             "base64-js": "^1.0.2",
             "ieee754": "^1.1.4",
@@ -6427,11 +6435,13 @@
         },
         "buffer-from": {
           "version": "0.1.2",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
+          "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg=="
         },
         "chalk": {
           "version": "2.4.2",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
           "requires": {
             "ansi-styles": "^3.2.1",
             "escape-string-regexp": "^1.0.5",
@@ -6440,11 +6450,13 @@
         },
         "content-security-policy-builder": {
           "version": "2.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz",
+          "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ=="
         },
         "cookie-parser": {
           "version": "1.4.4",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz",
+          "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==",
           "requires": {
             "cookie": "0.3.1",
             "cookie-signature": "1.0.6"
@@ -6452,32 +6464,38 @@
         },
         "debug": {
           "version": "2.6.9",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
           "requires": {
             "ms": "2.0.0"
           },
           "dependencies": {
             "ms": {
               "version": "2.0.0",
-              "bundled": true
+              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
             }
           }
         },
         "dns-prefetch-control": {
           "version": "0.2.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz",
+          "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q=="
         },
         "dont-sniff-mimetype": {
           "version": "1.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz",
+          "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug=="
         },
         "expect-ct": {
           "version": "0.2.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz",
+          "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g=="
         },
         "express-session": {
           "version": "1.15.6",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz",
+          "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==",
           "requires": {
             "cookie": "0.3.1",
             "cookie-signature": "1.0.6",
@@ -6492,11 +6510,13 @@
         },
         "frameguard": {
           "version": "3.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz",
+          "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g=="
         },
         "grant": {
           "version": "4.6.5",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/grant/-/grant-4.6.5.tgz",
+          "integrity": "sha512-gxMaIw6MRI/HaPxuV04NTOCZTFtPRCjpZIAQH3NqCnOHUHXenor+IOTYqjmeSQzcH0KJ0rv3PQp9Q3Cj18n8jw==",
           "requires": {
             "qs": "^6.9.1",
             "request-compose": "^1.2.1",
@@ -6512,7 +6532,8 @@
         },
         "helmet": {
           "version": "3.21.2",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.2.tgz",
+          "integrity": "sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg==",
           "requires": {
             "depd": "2.0.0",
             "dns-prefetch-control": "0.2.0",
@@ -6533,13 +6554,15 @@
           "dependencies": {
             "depd": {
               "version": "2.0.0",
-              "bundled": true
+              "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+              "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
             }
           }
         },
         "helmet-csp": {
           "version": "2.9.4",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.4.tgz",
+          "integrity": "sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg==",
           "requires": {
             "bowser": "^2.7.0",
             "camelize": "1.0.0",
@@ -6549,32 +6572,38 @@
         },
         "hide-powered-by": {
           "version": "1.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz",
+          "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg=="
         },
         "hsts": {
           "version": "2.2.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz",
+          "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==",
           "requires": {
             "depd": "2.0.0"
           },
           "dependencies": {
             "depd": {
               "version": "2.0.0",
-              "bundled": true
+              "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+              "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
             }
           }
         },
         "ienoopen": {
           "version": "1.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz",
+          "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ=="
         },
         "isarray": {
           "version": "1.0.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
         },
         "jsonwebtoken": {
           "version": "8.5.1",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+          "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
           "requires": {
             "jws": "^3.2.2",
             "lodash.includes": "^4.3.0",
@@ -6590,35 +6619,41 @@
           "dependencies": {
             "semver": {
               "version": "5.7.1",
-              "bundled": true
+              "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+              "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
             }
           }
         },
         "mime-types": {
           "version": "2.1.25",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
+          "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
           "requires": {
             "mime-db": "1.42.0"
           }
         },
         "ms": {
           "version": "2.1.2",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
         },
         "nocache": {
           "version": "2.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
+          "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
         },
         "node-redis-pubsub": {
           "version": "4.0.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/node-redis-pubsub/-/node-redis-pubsub-4.0.0.tgz",
+          "integrity": "sha512-sAUOzisio/8UYCRbjPo6+u7aTpBmxSBjTJYwu49x9KruIQgi//wbEnvbqGSH5JWViP7HyQSMtkHUcZXH7qGsOQ==",
           "requires": {
             "redis": "^2.7.1"
           }
         },
         "node-schedule": {
           "version": "1.3.2",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.2.tgz",
+          "integrity": "sha512-GIND2pHMHiReSZSvS6dpZcDH7pGPGFfWBIEud6S00Q8zEIzAs9ommdyRK1ZbQt8y1LyZsJYZgPnyi7gpU2lcdw==",
           "requires": {
             "cron-parser": "^2.7.3",
             "long-timeout": "0.1.1",
@@ -6627,18 +6662,21 @@
         },
         "prom-client": {
           "version": "11.5.3",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-11.5.3.tgz",
+          "integrity": "sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q==",
           "requires": {
             "tdigest": "^0.1.1"
           }
         },
         "punycode": {
           "version": "1.3.2",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
         },
         "purest": {
           "version": "3.1.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/purest/-/purest-3.1.0.tgz",
+          "integrity": "sha512-9slCC5je2UNERS/YNcrs1/7K5Bh7Uvl6OY1S+XZ6iDNMCwk8Fio6VBdrklo7eMzt5M/Wt2fQlwXRjn4puBccRQ==",
           "requires": {
             "@purest/config": "^1.0.0",
             "@request/api": "^0.6.0",
@@ -6647,23 +6685,28 @@
         },
         "referrer-policy": {
           "version": "1.2.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
+          "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA=="
         },
         "request-compose": {
           "version": "1.2.1",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/request-compose/-/request-compose-1.2.1.tgz",
+          "integrity": "sha512-w4qjUH1N4OdMfnHVi4Z0oKvDZyu75rJlvnuKe40wVg+khnfdJLt0qf+LF8QjIiDqSOSYdbMZE6a0ixU58B3Jow=="
         },
         "sax": {
           "version": "1.2.1",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+          "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
         },
         "semver": {
           "version": "6.3.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
         },
         "tus-js-client": {
           "version": "1.8.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/tus-js-client/-/tus-js-client-1.8.0.tgz",
+          "integrity": "sha512-qPX3TywqzxocTxUZtcS8X7Aik72SVMa0jKi4hWyfvRV+s9raVzzYGaP4MoJGaF0yOgm2+b6jXaVEHogxcJ8LGw==",
           "requires": {
             "buffer-from": "^0.1.1",
             "combine-errors": "^3.0.3",
@@ -6676,7 +6719,8 @@
         },
         "url": {
           "version": "0.10.3",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+          "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
           "requires": {
             "punycode": "1.3.2",
             "querystring": "0.2.0"
@@ -6684,22 +6728,26 @@
         },
         "uuid": {
           "version": "3.3.3",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+          "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
         },
         "validator": {
           "version": "12.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/validator/-/validator-12.1.0.tgz",
+          "integrity": "sha512-gIC2RBuFRi574Rb9vewGCJ7TCLxHXNx6EKthEgs+Iz0pYa9a9Te1VLG/bGLsAyGWrqR5FfR7tbFUI7FEF2LiGA=="
         },
         "ws": {
           "version": "6.2.1",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+          "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
           "requires": {
             "async-limiter": "~1.0.0"
           }
         },
         "x-xss-protection": {
           "version": "1.3.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
+          "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
         }
       }
     },
@@ -15917,7 +15965,7 @@
         "qs": "^6.5.0",
         "react-native-branch": "2.2.5",
         "react-native-gesture-handler": "~1.0.14",
-        "react-native-maps": "github:expo/react-native-maps#e6f98ff7272e5d0a7fe974a41f28593af2d77bb2",
+        "react-native-maps": "github:expo/react-native-maps#v0.22.1-exp.0",
         "react-native-reanimated": "1.0.0-alpha.11",
         "react-native-screens": "1.0.0-alpha.22",
         "react-native-svg": "8.0.10",
@@ -17188,7 +17236,8 @@
         },
         "ansi-regex": {
           "version": "2.1.1",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "aproba": {
           "version": "1.2.0",
@@ -17206,11 +17255,13 @@
         },
         "balanced-match": {
           "version": "1.0.0",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
+          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -17223,15 +17274,18 @@
         },
         "code-point-at": {
           "version": "1.1.0",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -17334,7 +17388,8 @@
         },
         "inherits": {
           "version": "2.0.3",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
@@ -17344,6 +17399,7 @@
         "is-fullwidth-code-point": {
           "version": "1.0.0",
           "bundled": true,
+          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -17356,17 +17412,20 @@
         "minimatch": {
           "version": "3.0.4",
           "bundled": true,
+          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
         },
         "minimist": {
           "version": "0.0.8",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "minipass": {
           "version": "2.3.5",
           "bundled": true,
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -17383,6 +17442,7 @@
         "mkdirp": {
           "version": "0.5.1",
           "bundled": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -17455,7 +17515,8 @@
         },
         "number-is-nan": {
           "version": "1.0.1",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -17465,6 +17526,7 @@
         "once": {
           "version": "1.4.0",
           "bundled": true,
+          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -17540,7 +17602,8 @@
         },
         "safe-buffer": {
           "version": "5.1.2",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "safer-buffer": {
           "version": "2.1.2",
@@ -17570,6 +17633,7 @@
         "string-width": {
           "version": "1.0.2",
           "bundled": true,
+          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
@@ -17587,6 +17651,7 @@
         "strip-ansi": {
           "version": "3.0.1",
           "bundled": true,
+          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -17625,11 +17690,13 @@
         },
         "wrappy": {
           "version": "1.0.2",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "yallist": {
           "version": "3.0.3",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         }
       }
     },
@@ -18241,40 +18308,28 @@
       }
     },
     "github-contributors-list": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/github-contributors-list/-/github-contributors-list-1.2.3.tgz",
-      "integrity": "sha512-yifb1ausL4zUb4kNfOAMaVtBleJzPKiiKWOpg1XauUcv3hfWUMQ2jVNBkDw/8eZiT3cJ4mL2i4ncp1TtnQv4zA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/github-contributors-list/-/github-contributors-list-1.2.4.tgz",
+      "integrity": "sha512-V1lQKmPvQDuLX9vizKoFteKg52+Rd+EUQsRio/cAC1qpfXepw7HheWFM0QhOh+bknejAn70cl/J6BXOIctUB5g==",
       "dev": true,
       "requires": {
-        "marked": "~0.3.1",
-        "merge": "^1.2.0",
-        "minimist": "0.0.8",
-        "q": "~1.4.1",
-        "sprintf-js": "0.0.7"
+        "marked": "^0.8.0",
+        "merge": "^1.2.1",
+        "minimist": "^1.2.0",
+        "q": "^1.5.1",
+        "sprintf-js": "^1.1.2"
       },
       "dependencies": {
         "marked": {
-          "version": "0.3.19",
-          "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
-          "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
-          "dev": true
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true
-        },
-        "q": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-          "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+          "version": "0.8.0",
+          "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.0.tgz",
+          "integrity": "sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ==",
           "dev": true
         },
         "sprintf-js": {
-          "version": "0.0.7",
-          "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-0.0.7.tgz",
-          "integrity": "sha1-8A14/RYBMICbSrNAwDEPqnElPb0=",
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+          "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
           "dev": true
         }
       }
@@ -25207,9 +25262,9 @@
       }
     },
     "node-sass": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz",
-      "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==",
+      "version": "4.13.1",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
+      "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
       "requires": {
         "async-foreach": "^0.1.3",
         "chalk": "^1.1.1",
@@ -32523,9 +32578,9 @@
       }
     },
     "tree-kill": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
-      "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
       "dev": true
     },
     "trim-newlines": {
@@ -33226,7 +33281,7 @@
         "hexo": "4.0.0",
         "hexo-browsersync": "^0.3.0",
         "hexo-cli": "3.1.0",
-        "hexo-filter-github-emojis": "github:arturi/hexo-filter-github-emojis#c0b188687b47669d0aa452d6f9adbb7487925baf",
+        "hexo-filter-github-emojis": "github:arturi/hexo-filter-github-emojis",
         "hexo-generator-alias": "^0.1.3",
         "hexo-generator-archive": "^1.0.0",
         "hexo-generator-category": "^1.0.0",
@@ -33253,25 +33308,29 @@
       "dependencies": {
         "ansi-regex": {
           "version": "4.1.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
         },
         "braces": {
           "version": "3.0.2",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
           "requires": {
             "fill-range": "^7.0.1"
           }
         },
         "fill-range": {
           "version": "7.0.1",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
           "requires": {
             "to-regex-range": "^5.0.1"
           }
         },
         "hexo": {
           "version": "4.0.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/hexo/-/hexo-4.0.0.tgz",
+          "integrity": "sha512-woVSeutGyFDLdE3UWJsZWw18KboFSsmmcxuivuLJPQ0pqLLz4zar07BG/YQXgVaXzR1jQ7Hurbx1gGZj5Z7y2w==",
           "requires": {
             "abbrev": "^1.1.1",
             "archy": "^1.0.0",
@@ -33304,15 +33363,18 @@
         },
         "is-number": {
           "version": "7.0.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
         },
         "marked": {
           "version": "0.7.0",
-          "bundled": true
+          "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
+          "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg=="
         },
         "micromatch": {
           "version": "4.0.2",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
           "requires": {
             "braces": "^3.0.1",
             "picomatch": "^2.0.5"
@@ -33320,14 +33382,16 @@
         },
         "strip-ansi": {
           "version": "5.2.0",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "requires": {
             "ansi-regex": "^4.1.0"
           }
         },
         "to-regex-range": {
           "version": "5.0.1",
-          "bundled": true,
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
           "requires": {
             "is-number": "^7.0.0"
           }

+ 2 - 2
package.json

@@ -138,7 +138,7 @@
     "express": "4.17.1",
     "fakefile": "0.0.9",
     "flat": "^4.1.0",
-    "github-contributors-list": "1.2.3",
+    "github-contributors-list": "^1.2.4",
     "glob": "^7.1.3",
     "globby": "^9.2.0",
     "gzip-size": "^5.0.0",
@@ -155,7 +155,7 @@
     "multi-glob": "^1.0.2",
     "namespace-emitter": "^2.0.1",
     "nock": "^9.6.1",
-    "node-sass": "^4.11.0",
+    "node-sass": "^4.13.1",
     "nodemon": "^1.17.5",
     "npm-auth-to-token": "^1.0.0",
     "npm-packlist": "^1.4.7",

+ 1 - 1
packages/@uppy/aws-s3-multipart/package-lock.json

@@ -8,5 +8,5 @@
 			"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
 		}
 	},
-	"version": "1.5.0"
+	"version": "1.5.1"
 }

+ 1 - 1
packages/@uppy/aws-s3-multipart/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/aws-s3-multipart",
   "description": "Upload to Amazon S3 with Uppy and S3's Multipart upload strategy",
-  "version": "1.5.0",
+  "version": "1.5.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/aws-s3/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/aws-s3",
   "description": "Upload to Amazon S3 with Uppy",
-  "version": "1.5.0",
+  "version": "1.5.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/companion/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@uppy/companion",
-  "version": "1.9.0",
+  "version": "1.9.1",
   "description": "OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:",
   "main": "lib/companion.js",
   "types": "types/index.d.ts",

+ 4 - 0
packages/@uppy/companion/src/companion.js

@@ -18,6 +18,7 @@ const logger = require('./server/logger')
 const { STORAGE_PREFIX } = require('./server/Uploader')
 const middlewares = require('./server/middlewares')
 const { shortenToken } = require('./server/Uploader')
+const { ProviderApiError, ProviderAuthError } = require('./server/provider/error')
 
 const defaultOptions = {
   server: {
@@ -36,6 +37,9 @@ const defaultOptions = {
   debug: true
 }
 
+// make the errors available publicly for custom providers
+module.exports.errors = { ProviderApiError, ProviderAuthError }
+
 /**
  * Entry point into initializing the Companion app.
  *

+ 6 - 1
packages/@uppy/companion/src/server/controllers/get.js

@@ -1,5 +1,6 @@
 const Uploader = require('../Uploader')
 const logger = require('../logger')
+const { errorToResponse } = require('../provider/error')
 
 function get (req, res, next) {
   const providerName = req.params.providerName
@@ -10,7 +11,11 @@ function get (req, res, next) {
   // get the file size before proceeding
   provider.size({ id, token, query: req.query }, (err, size) => {
     if (err) {
-      return err.isAuthError ? res.sendStatus(401) : next(err)
+      const errResp = errorToResponse(err)
+      if (errResp) {
+        return res.status(errResp.code).json({ message: errResp.message })
+      }
+      return next(err)
     }
 
     if (!size) {

+ 7 - 1
packages/@uppy/companion/src/server/controllers/list.js

@@ -1,10 +1,16 @@
+const { errorToResponse } = require('../provider/error')
+
 function list ({ query, params, companion }, res, next) {
   const providerName = params.providerName
   const token = companion.providerTokens[providerName]
 
   companion.provider.list({ companion, token, directory: params.id, query }, (err, data) => {
     if (err) {
-      return err.isAuthError ? res.sendStatus(401) : next(err)
+      const errResp = errorToResponse(err)
+      if (errResp) {
+        return res.status(errResp.code).json({ message: errResp.message })
+      }
+      return next(err)
     }
     return res.json(data)
   })

+ 5 - 0
packages/@uppy/companion/src/server/controllers/logout.js

@@ -1,4 +1,5 @@
 const tokenService = require('../helpers/jwt')
+const { errorToResponse } = require('../provider/error')
 
 /**
  *
@@ -17,6 +18,10 @@ function logout (req, res, next) {
   if (token) {
     req.companion.provider.logout({ token }, (err, data) => {
       if (err) {
+        const errResp = errorToResponse(err)
+        if (errResp) {
+          return res.status(errResp.code).json({ message: errResp.message })
+        }
         return next(err)
       }
 

+ 7 - 3
packages/@uppy/companion/src/server/provider/drive/index.js

@@ -5,12 +5,15 @@ const request = require('request')
 const purest = require('purest')({ request })
 const logger = require('../../logger')
 const adapter = require('./adapter')
-const AuthError = require('../error')
+const { ProviderApiError, ProviderAuthError } = require('../error')
 const DRIVE_FILE_FIELDS = 'kind,id,name,mimeType,ownedByMe,permissions(role,emailAddress),size,modifiedTime,iconLink,thumbnailLink,teamDriveId'
 const DRIVE_FILES_FIELDS = `kind,nextPageToken,incompleteSearch,files(${DRIVE_FILE_FIELDS})`
 // using wildcard to get all 'drive' fields because specifying fields seems no to work for the /drives endpoint
 const SHARED_DRIVE_FIELDS = '*'
 
+/**
+ * Adapter for API https://developers.google.com/drive/api/v3/
+ */
 class Drive extends Provider {
   constructor (options) {
     super(options)
@@ -184,8 +187,9 @@ class Drive extends Provider {
 
   _error (err, resp) {
     if (resp) {
-      const errMsg = `request to ${this.authProvider} returned ${resp.statusCode}`
-      return resp.statusCode === 401 ? new AuthError() : new Error(errMsg)
+      const fallbackMessage = `request to ${this.authProvider} returned ${resp.statusCode}`
+      const errMsg = resp.body.error ? resp.body.error.message : fallbackMessage
+      return resp.statusCode === 401 ? new ProviderAuthError() : new ProviderApiError(errMsg, resp.statusCode)
     }
     return err
   }

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

@@ -4,7 +4,7 @@ const request = require('request')
 const purest = require('purest')({ request })
 const logger = require('../../logger')
 const adapter = require('./adapter')
-const AuthError = require('../error')
+const { ProviderApiError, ProviderAuthError } = require('../error')
 
 // From https://www.dropbox.com/developers/reference/json-encoding:
 //
@@ -19,6 +19,9 @@ function httpHeaderSafeJson (v) {
   )
 }
 
+/**
+ * Adapter for API https://www.dropbox.com/developers/documentation/http/documentation
+ */
 class DropBox extends Provider {
   constructor (options) {
     super(options)
@@ -202,8 +205,9 @@ class DropBox extends Provider {
 
   _error (err, resp) {
     if (resp) {
-      const errMsg = `request to ${this.authProvider} returned ${resp.statusCode}`
-      return resp.statusCode === 401 ? new AuthError() : new Error(errMsg)
+      const fallbackMessage = `request to ${this.authProvider} returned ${resp.statusCode}`
+      const errMsg = resp.body.error_summary ? resp.body.error_summary : fallbackMessage
+      return resp.statusCode === 401 ? new ProviderAuthError() : new ProviderApiError(errMsg, resp.statusCode)
     }
 
     return err

+ 42 - 3
packages/@uppy/companion/src/server/provider/error.js

@@ -1,13 +1,52 @@
+/**
+ * ProviderApiError is error returned when an adapter encounters
+ * an http error while communication with its corresponding provider
+ */
+class ProviderApiError extends Error {
+  /**
+   * @param {string} message error message
+   * @param {number} statusCode the http status code from the provider api
+   */
+  constructor (message, statusCode) {
+    super(message)
+    this.name = 'ProviderApiError'
+    this.statusCode = statusCode
+    this.isAuthError = false
+  }
+}
+
 /**
  * AuthError is error returned when an adapter encounters
  * an authorization error while communication with its corresponding provider
  */
-class AuthError extends Error {
+class ProviderAuthError extends ProviderApiError {
   constructor () {
-    super('invalid access token detected by Provider')
+    super('invalid access token detected by Provider', 401)
     this.name = 'AuthError'
     this.isAuthError = true
   }
 }
 
-module.exports = AuthError
+/**
+ * Convert an error instance to an http response if possible
+ * @param {Error | ProviderApiError} err the error instance to convert to an http json response
+ */
+function errorToResponse (err) {
+  if (err instanceof ProviderAuthError && err.isAuthError) {
+    return { code: 401, message: err.message }
+  }
+
+  if (err instanceof ProviderApiError) {
+    if (err.statusCode >= 500) {
+      // bad gateway i.e the provider APIs gateway
+      return { code: 502, message: err.message }
+    }
+
+    if (err.statusCode >= 400) {
+      // 424 Failed Dependency
+      return { code: 424, message: err.message }
+    }
+  }
+}
+
+module.exports = { ProviderAuthError, ProviderApiError, errorToResponse }

+ 8 - 4
packages/@uppy/companion/src/server/provider/facebook/index.js

@@ -5,8 +5,11 @@ const purest = require('purest')({ request })
 const utils = require('../../helpers/utils')
 const logger = require('../../logger')
 const adapter = require('./adapter')
-const AuthError = require('../error')
+const { ProviderApiError, ProviderAuthError } = require('../error')
 
+/**
+ * Adapter for API https://developers.facebook.com/docs/graph-api/using-graph-api/
+ */
 class Facebook extends Provider {
   constructor (options) {
     super(options)
@@ -153,11 +156,12 @@ class Facebook extends Provider {
     if (resp) {
       if (resp.body && resp.body.error.code === 190) {
         // Invalid OAuth 2.0 Access Token
-        return new AuthError()
+        return new ProviderAuthError()
       }
 
-      const msg = resp.body && resp.body.error ? resp.body.error.message : ''
-      return new Error(`request to ${this.authProvider} returned status: ${resp.statusCode}, message: ${msg}`)
+      const fallbackMessage = `request to ${this.authProvider} returned ${resp.statusCode}`
+      const msg = resp.body && resp.body.error ? resp.body.error.message : fallbackMessage
+      return new ProviderApiError(msg, resp.statusCode)
     }
 
     return err

+ 8 - 4
packages/@uppy/companion/src/server/provider/instagram/graph/index.js

@@ -5,8 +5,11 @@ const purest = require('purest')({ request })
 const utils = require('../../../helpers/utils')
 const logger = require('../../../logger')
 const adapter = require('./adapter')
-const AuthError = require('../../error')
+const { ProviderApiError, ProviderAuthError } = require('../../error')
 
+/**
+ * Adapter for API https://developers.facebook.com/docs/instagram-api/overview
+ */
 class Instagram extends Provider {
   constructor (options) {
     super(options)
@@ -140,11 +143,12 @@ class Instagram extends Provider {
     if (resp) {
       if (resp.body && resp.body.error.code === 190) {
         // Invalid OAuth 2.0 Access Token
-        return new AuthError()
+        return new ProviderAuthError()
       }
 
-      const msg = resp.body && resp.body.error ? resp.body.error.message : ''
-      return new Error(`request to ${this.authProvider} returned status: ${resp.statusCode}, message: ${msg}`)
+      const fallbackMessage = `request to ${this.authProvider} returned ${resp.statusCode}`
+      const msg = resp.body && resp.body.error ? resp.body.error.message : fallbackMessage
+      return new ProviderApiError(msg, resp.statusCode)
     }
 
     return err

+ 7 - 3
packages/@uppy/companion/src/server/provider/instagram/index.js

@@ -5,8 +5,11 @@ const purest = require('purest')({ request })
 const utils = require('../../helpers/utils')
 const logger = require('../../logger')
 const adapter = require('./adapter')
-const AuthError = require('../error')
+const { ProviderApiError, ProviderAuthError } = require('../error')
 
+/**
+ * Adapter for API https://www.instagram.com/developer/endpoints/
+ */
 class Instagram extends Provider {
   constructor (options) {
     super(options)
@@ -139,10 +142,11 @@ class Instagram extends Provider {
   _error (err, resp) {
     if (resp) {
       if (resp.statusCode === 400 && resp.body && resp.body.meta.error_type === 'OAuthAccessTokenException') {
-        return new AuthError()
+        return new ProviderAuthError()
       }
 
-      return new Error(`request to ${this.authProvider} returned ${resp.statusCode}`)
+      const msg = `request to ${this.authProvider} returned ${resp.statusCode}`
+      return new ProviderApiError(msg, resp.statusCode)
     }
 
     return err

+ 7 - 3
packages/@uppy/companion/src/server/provider/onedrive/index.js

@@ -4,8 +4,11 @@ const request = require('request')
 const purest = require('purest')({ request })
 const logger = require('../../logger')
 const adapter = require('./adapter')
-const AuthError = require('../error')
+const { ProviderApiError, ProviderAuthError } = require('../error')
 
+/**
+ * Adapter for API https://docs.microsoft.com/en-us/onedrive/developer/rest-api/
+ */
 class OneDrive extends Provider {
   constructor (options) {
     super(options)
@@ -126,8 +129,9 @@ class OneDrive extends Provider {
 
   _error (err, resp) {
     if (resp) {
-      const errMsg = `request to ${this.authProvider} returned ${resp.statusCode}`
-      return resp.statusCode === 401 ? new AuthError() : new Error(errMsg)
+      const fallbackMsg = `request to ${this.authProvider} returned ${resp.statusCode}`
+      const errMsg = resp.body.error ? resp.body.error.message : fallbackMsg
+      return resp.statusCode === 401 ? new ProviderAuthError() : new ProviderApiError(errMsg, resp.statusCode)
     }
 
     return err

+ 1 - 1
packages/@uppy/core/package-lock.json

@@ -41,5 +41,5 @@
 			"integrity": "sha1-pwIEUwhNjNLv5wup02liY94XEKU="
 		}
 	},
-	"version": "1.8.0"
+	"version": "1.8.1"
 }

+ 1 - 1
packages/@uppy/core/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/core",
   "description": "Core module for the extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
-  "version": "1.8.0",
+  "version": "1.8.1",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/dashboard/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/dashboard",
   "description": "Universal UI plugin for Uppy.",
-  "version": "1.6.0",
+  "version": "1.6.1",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/drag-drop/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/drag-drop",
   "description": "Droppable zone UI for Uppy. Drag and drop files into it to upload.",
-  "version": "1.4.3",
+  "version": "1.4.4",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/dropbox/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/dropbox",
   "description": "Import files from Dropbox, into Uppy.",
-  "version": "1.3.6",
+  "version": "1.3.7",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/facebook/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/facebook",
   "description": "Import files from Facebook, into Uppy.",
-  "version": "0.2.3",
+  "version": "0.2.4",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/file-input/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/file-input",
   "description": "Simple UI of a file input button that works with Uppy right out of the box",
-  "version": "1.4.3",
+  "version": "1.4.4",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/form/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/form",
   "description": "Connect Uppy to an existing HTML <form>.",
-  "version": "1.3.6",
+  "version": "1.3.7",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/golden-retriever/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/golden-retriever",
   "description": "The GoldenRetriever Uppy plugin saves selected files in browser cache to seamlessly resume uploding after browser crash or accidentally closed tab",
-  "version": "1.3.5",
+  "version": "1.3.6",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/google-drive/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/google-drive",
   "description": "The Google Drive plugin for Uppy lets users import files from their Google Drive account",
-  "version": "1.4.0",
+  "version": "1.4.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/informer/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/informer",
   "description": "A notification and error pop-up bar for Uppy.",
-  "version": "1.4.0",
+  "version": "1.4.1",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/instagram/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/instagram",
   "description": "Import photos and videos from Instagram, into Uppy.",
-  "version": "1.3.6",
+  "version": "1.3.7",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/locales/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/locales",
   "description": "Uppy language packs",
-  "version": "1.11.1",
+  "version": "1.11.2",
   "license": "MIT",
   "keywords": [
     "uppy",

+ 1 - 1
packages/@uppy/onedrive/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/onedrive",
   "description": "Import files from OneDrive, into Uppy.",
-  "version": "1.0.0",
+  "version": "1.0.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/progress-bar/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/progress-bar",
   "description": "A progress bar UI for Uppy",
-  "version": "1.3.5",
+  "version": "1.3.6",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/provider-views/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/provider-views",
   "description": "View library for Uppy remote provider plugins.",
-  "version": "1.5.3",
+  "version": "1.5.4",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/react/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/react",
   "description": "React component wrappers around Uppy's official UI plugins.",
-  "version": "1.4.3",
+  "version": "1.4.4",
   "license": "MIT",
   "main": "index.js",
   "module": "index.mjs",

+ 2 - 2
packages/@uppy/robodog/README.md

@@ -18,8 +18,8 @@ We recommend installing from npm and then using a module bundler such as [Webpac
 Alternatively, you can also use this package in a pre-built bundle from Transloadit's CDN: Edgly.
 
 ```html
-<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.9.0/robodog.min.css">
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/robodog.min.js"></script>
+<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.9.1/robodog.min.css">
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/robodog.min.js"></script>
 ```
 
 Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog).

+ 1 - 1
packages/@uppy/robodog/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/robodog",
   "description": "Transloadit SDK for browsers based on Uppy",
-  "version": "1.5.0",
+  "version": "1.5.1",
   "license": "MIT",
   "main": "lib/index.js",
   "jsnext:main": "src/index.js",

+ 1 - 1
packages/@uppy/status-bar/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/status-bar",
   "description": "A progress bar for Uppy, with many bells and whistles.",
-  "version": "1.5.0",
+  "version": "1.5.1",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/thumbnail-generator/package-lock.json

@@ -8,5 +8,5 @@
 			"integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
 		}
 	},
-	"version": "1.5.3"
+	"version": "1.5.4"
 }

+ 1 - 1
packages/@uppy/thumbnail-generator/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/thumbnail-generator",
   "description": "Uppy plugin that generates small previews of images to show on your upload UI.",
-  "version": "1.5.3",
+  "version": "1.5.4",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/transloadit/package-lock.json

@@ -228,5 +228,5 @@
 			"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
 		}
 	},
-	"version": "1.5.0"
+	"version": "1.5.1"
 }

+ 1 - 1
packages/@uppy/transloadit/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/transloadit",
   "description": "The Transloadit plugin can be used to upload files to Transloadit for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, and more",
-  "version": "1.5.0",
+  "version": "1.5.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/tus/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/tus",
   "description": "Resumable uploads for Uppy using Tus.io",
-  "version": "1.5.3",
+  "version": "1.5.4",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/url/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/url",
   "description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!",
-  "version": "1.4.3",
+  "version": "1.4.4",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/utils/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/utils",
   "description": "Shared utility functions for Uppy Core and plugins maintained by the Uppy team.",
-  "version": "2.2.0",
+  "version": "2.2.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/webcam/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/webcam",
   "description": "Uppy plugin that takes photos or records videos using the device's camera.",
-  "version": "1.5.2",
+  "version": "1.5.3",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/xhr-upload/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/xhr-upload",
   "description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.",
-  "version": "1.5.0",
+  "version": "1.5.1",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/uppy/package.json

@@ -1,7 +1,7 @@
 {
   "name": "uppy",
   "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
-  "version": "1.9.0",
+  "version": "1.9.1",
   "license": "MIT",
   "main": "index.js",
   "module": "index.mjs",

+ 5 - 5
website/src/docs/index.md

@@ -19,12 +19,12 @@ Here’s the simplest example html page with Uppy (it uses a CDN bundle, while w
   <head>
     <meta charset="utf-8">
     <title>Uppy</title>
-    <link href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css" rel="stylesheet">
+    <link href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css" rel="stylesheet">
   </head>
   <body>
     <div id="drag-drop-area"></div>
 
-    <script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
     <script>
       var uppy = Uppy.Core()
         .use(Uppy.Dashboard, {
@@ -113,12 +113,12 @@ You can also use a pre-built bundle from Transloadit's CDN: Edgly. `Uppy` will a
 1\. Add a script at the bottom of the closing `</body>` tag:
 
 ``` html
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
 ```
 
 2\. Add CSS to `<head>`:
 ``` html
-<link href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css" rel="stylesheet">
+<link href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css" rel="stylesheet">
 ```
 
 3\. Initialize at the bottom of the closing `</body>` tag:
@@ -169,5 +169,5 @@ const Uppy = require('@uppy/core')
 If you're using Uppy from CDN, `es6-promise` and  `whatwg-fetch` are already included in the bundle, no need to include anything additionally:
 
 ```html
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
 ```

+ 2 - 2
website/src/docs/locales.md

@@ -33,8 +33,8 @@ const uppy = Uppy({
 Add a `<script>` tag with Uppy bundle and the locale pack you’d like to use. You can copy/paste the link from the CDN column in the [locales table](#List-of-locale-packs). The locale will attach itself to the `Uppy.locales` object.
 
 ```html
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
-<script src="https://transloadit.edgly.net/releases/uppy/locales/v1.11.1/de_DE.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/locales/v1.11.2/de_DE.min.js"></script>
 
 <script>
 var uppy = Uppy.Core({

+ 4 - 4
website/src/docs/robodog-form.md

@@ -128,7 +128,7 @@ $(selector).transloadit({
 ```
 ```html
 <!-- The new Robodog way! -->
-<script src="//transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.js"></script>
+<script src="//transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.js"></script>
 
 <script>
 window.Robodog.form(selector, {
@@ -140,7 +140,7 @@ window.Robodog.form(selector, {
 Make sure to also include the Uppy css file in your `<head>` tag in case you want to use the `modal: true` option:
 ```html
 <head>
-  <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.css">
+  <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.css">
 </head>
 ```
 
@@ -152,7 +152,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
 <html>
   <head>
     <title>Testing Robodog</title>
-    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.css">
+    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.css">
   </head>
   <body>
     <form id="upload-form" action="/uploads" enctype="multipart/form-data" method="POST">
@@ -162,7 +162,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
       <button type="submit">Upload</button>
     </form>
 
-    <script src="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.js"></script>
     <script type="text/javascript">
     window.Robodog.form('#upload-form', {
       waitForEncoding: true,

+ 2 - 2
website/src/docs/robodog.md

@@ -31,8 +31,8 @@ require('@uppy/robodog/dist/robodog.css')
 If you are not using a bundler, you can also import Robodog using an HTML script tag.
 
 ```html
-<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.css">
-<script src="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.js"></script>
+<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.css">
+<script src="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.js"></script>
 <!-- you can now use: window.Robodog.pick() -->
 ```
 

+ 1 - 1
website/src/examples/dashboard/app.es6

@@ -154,7 +154,7 @@ function loadLocaleFromCDN (localeName) {
   var head = document.getElementsByTagName('head')[0]
   var js = document.createElement('script')
   js.type = 'text/javascript'
-  js.src = `https://transloadit.edgly.net/releases/uppy/locales/v1.11.1/${localeName}.min.js`
+  js.src = `https://transloadit.edgly.net/releases/uppy/locales/v1.11.2/${localeName}.min.js`
 
   head.appendChild(js)
 }

+ 3 - 3
website/src/examples/i18n/app.html

@@ -1,7 +1,7 @@
 <!-- Load Uppy CSS bundle. It is advisable to install Uppy 
   from npm/yarn instead, and pick and choose the plugins/styles you need.
   But for experimenting, you can use Transloadit’s CDN, Edgly: -->
-<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css">
+<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css">
 
 <div class="UppyDragDrop"></div>
 <div class="for-ProgressBar"></div>
@@ -12,8 +12,8 @@
 </div>
 
 <!-- Load Uppy JS bundle. -->
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
-<script src="https://transloadit.edgly.net/releases/uppy/locales/v1.11.1/ru_RU.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/locales/v1.11.2/ru_RU.min.js"></script>
 <script>
   var uppy = Uppy.Core({ 
     debug: true, 

+ 1 - 1
website/src/examples/markdown-snippets/app.es6

@@ -3,7 +3,7 @@ const marked = require('marked')
 const dragdrop = require('drag-drop')
 // Add Robodog JS. It is advisable to install Robodog from npm/yarn.
 // But for experimenting, you can use also Transloadit’s CDN, Edgly:
-// <script src="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.js"></script>
+// <script src="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.js"></script>
 const robodog = require('@uppy/robodog')
 
 const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0'

+ 1 - 1
website/src/examples/markdown-snippets/app.html

@@ -1,6 +1,6 @@
 <!-- Add Robodog styles. It is advisable to install Robodog from npm/yarn.
   But for experimenting, you can use also Transloadit’s CDN, Edgly:
-  <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.0/robodog.min.css"> -->
+  <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/robodog/v1.5.1/robodog.min.css"> -->
   <link rel="stylesheet" href="/uppy/robodog.min.css">
   <form id="new" class="form-snippet">
     <h2>Create a new snippet</h2>

+ 2 - 2
website/themes/uppy/layout/index.ejs

@@ -144,8 +144,8 @@
   <p>© <%- date(Date.now(), 'YYYY') %> <a href="https://transloadit.com" target="_blank">Transloadit</a></p>
 </footer>
 
-<link href="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.css" rel="stylesheet">
-<script src="https://transloadit.edgly.net/releases/uppy/v1.9.0/uppy.min.js"></script>
+<link href="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.css" rel="stylesheet">
+<script src="https://transloadit.edgly.net/releases/uppy/v1.9.1/uppy.min.js"></script>
 
 <script>
   var TUS_ENDPOINT = 'https://master.tus.io/files/'