From ad2f9eabd9a7ed4b73942378c0bfa91d03dd24df Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 29 Dec 2021 00:05:16 +0100 Subject: [PATCH 01/17] website: update december 2021 blog post (#3396) --- website/src/_posts/2021-12-2.1-2.3.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/website/src/_posts/2021-12-2.1-2.3.md b/website/src/_posts/2021-12-2.1-2.3.md index 3b6a0da40b..a8780a7c06 100644 --- a/website/src/_posts/2021-12-2.1-2.3.md +++ b/website/src/_posts/2021-12-2.1-2.3.md @@ -10,9 +10,11 @@ image: https://uppy.io/images/blog/2.1-2.3/audio-cover.jpg published: true --- + + Last Christmas, we gave you [Uppy 1.24](https://uppy.io/blog/2020/12/1.24/), but this very next year, we’ll take it away (since it’s outdated by now) and give you a brand-new Uppy 2.3 🎁! -After the [release](https://uppy.io/blog/2021/08/2.0/) of our latest major version, 2.0.0, we’ve been busy with many things. First of all is the long-awaited Audio plugin to record and upload live audio directly. We then worked on adding a fast and efficient streaming interface to Companion and made Unsplash production ready. Housekeeping was also part of the job: we made Status Bar improvements, moved from NPM to Yarn 3, did some refactoring, and updated dependencies. +After the [release](https://uppy.io/blog/2021/08/2.0/) of our latest major version, 2.0.0, we’ve been busy with many things. First of all is the long-awaited Audio plugin to record and upload live audio directly. We then worked on adding a fast and efficient streaming interface to Companion and made Unsplash production ready. Housekeeping was also part of the job: we made Status Bar improvements, moved from npm to Yarn 3, did some refactoring, and updated dependencies. Last but not least, we got the issue count down from around 110 since 2.0.0 to around 45 now. @@ -58,7 +60,7 @@ The Status Bar plugin would get confused about upload errors in Uppy, and we’v ## Internal housekeeping -### Yarn v3 instead of NPM +### Yarn v3 instead of npm We’ve switched the Uppy repo to Yarn 3 to improve package install performance. With our complex dependency graph and over thirty packages in a monorepo, we are seeing install times reduced by more than a few minutes! @@ -88,7 +90,7 @@ Here are some highlights: * A changelog will be generated. * The contributions table will be updated. * GitHub Actions will create a release candidate pull request. -* When approved, GitHub Actions automatically merges, publishes to NPM, and creates CDN bundles. +* When approved, GitHub Actions automatically merges, publishes to the npm public registry, and creates CDN bundles. [View the PR](https://github.com/transloadit/uppy/pull/3304). From 8d7c6beee8bb3f87cde09b6cdcf1c971922e48e0 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 29 Dec 2021 11:59:18 +0100 Subject: [PATCH 02/17] @uppy/drag-drop: fix `undefined is not a function` TypeError (#3397) * @uppy/drag-drop: fix typo in `handleDragOver` Fixes: https://github.com/transloadit/uppy/issues/3385 * @uppy/drag-drop: fix typo in `handleDragLeave` --- packages/@uppy/drag-drop/src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@uppy/drag-drop/src/index.js b/packages/@uppy/drag-drop/src/index.js index e50e009ad0..c16a0ec46e 100644 --- a/packages/@uppy/drag-drop/src/index.js +++ b/packages/@uppy/drag-drop/src/index.js @@ -110,7 +110,7 @@ module.exports = class DragDrop extends UIPlugin { clearTimeout(this.removeDragOverClassTimeout) this.setPluginState({ isDraggingOver: true }) - this.opts?.onDragOver(event) + this.opts.onDragOver?.(event) } handleDragLeave (event) { @@ -124,7 +124,7 @@ module.exports = class DragDrop extends UIPlugin { this.setPluginState({ isDraggingOver: false }) }, 50) - this.opts?.onDragLeave(event) + this.opts.onDragLeave?.(event) } handleDrop = async (event) => { From 9014c1ced61d0182983da3da6777a92d1e1685be Mon Sep 17 00:00:00 2001 From: Mustafa Navruz Date: Mon, 3 Jan 2022 14:04:05 +0300 Subject: [PATCH 03/17] Add missing option to the screen capture types (#3400) --- packages/@uppy/screen-capture/types/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@uppy/screen-capture/types/index.d.ts b/packages/@uppy/screen-capture/types/index.d.ts index d43e81ad3c..8aef1a57e4 100644 --- a/packages/@uppy/screen-capture/types/index.d.ts +++ b/packages/@uppy/screen-capture/types/index.d.ts @@ -1,4 +1,4 @@ -import type { PluginOptions, UIPlugin } from '@uppy/core' +import type { PluginOptions, UIPlugin, PluginTarget } from '@uppy/core' // https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints#Properties_of_shared_screen_tracks // TODO: use the global DisplayMediaStreamConstraints once typescript includes it by default @@ -12,6 +12,7 @@ import type { PluginOptions, UIPlugin } from '@uppy/core' } export interface ScreenCaptureOptions extends PluginOptions { + target?: PluginTarget displayMediaConstraints?: DisplayMediaStreamConstraints, userMediaConstraints?: MediaStreamConstraints, preferredVideoMimeType?: string From 2e36a40091dcbfac038ddb6d6b4e9b2364c5fcee Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Tue, 4 Jan 2022 17:02:44 +0700 Subject: [PATCH 04/17] improve private ip check (#3403) https://huntr.dev/bounties/c1c03ef6-3f18-4976-a9ad-08c251279122/ --- packages/@uppy/companion/package.json | 2 +- .../companion/src/server/helpers/request.js | 84 +++---------------- yarn.lock | 56 +------------ 3 files changed, 14 insertions(+), 128 deletions(-) diff --git a/packages/@uppy/companion/package.json b/packages/@uppy/companion/package.json index de1701087b..153c72799a 100644 --- a/packages/@uppy/companion/package.json +++ b/packages/@uppy/companion/package.json @@ -45,7 +45,7 @@ "express-session": "1.17.1", "grant": "4.7.0", "helmet": "^4.6.0", - "ip-address": "6.2.0", + "ipaddr.js": "^2.0.1", "isobject": "3.0.1", "jsonwebtoken": "8.5.1", "lodash.merge": "^4.6.2", diff --git a/packages/@uppy/companion/src/server/helpers/request.js b/packages/@uppy/companion/src/server/helpers/request.js index bdd5bb4a23..48125a9682 100644 --- a/packages/@uppy/companion/src/server/helpers/request.js +++ b/packages/@uppy/companion/src/server/helpers/request.js @@ -1,83 +1,19 @@ +// eslint-disable-next-line max-classes-per-file const http = require('http') const https = require('https') const { URL } = require('url') const dns = require('dns') -const ipAddress = require('ip-address') const request = require('request') +const ipaddr = require('ipaddr.js') + const logger = require('../logger') const FORBIDDEN_IP_ADDRESS = 'Forbidden IP address' -function isIPAddress (address) { - const addressAsV6 = new ipAddress.Address6(address) - const addressAsV4 = new ipAddress.Address4(address) - return addressAsV6.isValid() || addressAsV4.isValid() -} - -/* eslint-disable max-len */ -/** - * Determine if a IP address provided is a private one. - * Return TRUE if it's the case, FALSE otherwise. - * Excerpt from: - * https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html#case-2---application-can-send-requests-to-any-external-ip-address-or-domain-name - * - * @param {string} ipAddress the ip address to validate - * @returns {boolean} - */ -/* eslint-enable max-len */ -function isPrivateIP (ipAddress) { - let isPrivate = false - // Build the list of IP prefix for V4 and V6 addresses - const ipPrefix = [] - // Add prefix for loopback addresses - ipPrefix.push('127.') - ipPrefix.push('0.') - // Add IP V4 prefix for private addresses - // See https://en.wikipedia.org/wiki/Private_network - ipPrefix.push('10.') - ipPrefix.push('172.16.') - ipPrefix.push('172.17.') - ipPrefix.push('172.18.') - ipPrefix.push('172.19.') - ipPrefix.push('172.20.') - ipPrefix.push('172.21.') - ipPrefix.push('172.22.') - ipPrefix.push('172.23.') - ipPrefix.push('172.24.') - ipPrefix.push('172.25.') - ipPrefix.push('172.26.') - ipPrefix.push('172.27.') - ipPrefix.push('172.28.') - ipPrefix.push('172.29.') - ipPrefix.push('172.30.') - ipPrefix.push('172.31.') - ipPrefix.push('192.168.') - ipPrefix.push('169.254.') - // Add IP V6 prefix for private addresses - // See https://en.wikipedia.org/wiki/Unique_local_address - // See https://en.wikipedia.org/wiki/Private_network - // See https://simpledns.com/private-ipv6 - ipPrefix.push('fc') - ipPrefix.push('fd') - ipPrefix.push('fe') - ipPrefix.push('ff') - ipPrefix.push('::1') - // Verify the provided IP address - // Remove whitespace characters from the beginning/end of the string - // and convert it to lower case - // Lower case is for preventing any IPV6 case bypass using mixed case - // depending on the source used to get the IP address - const ipToVerify = ipAddress.trim().toLowerCase() - // Perform the check against the list of prefix - for (const prefix of ipPrefix) { - if (ipToVerify.startsWith(prefix)) { - isPrivate = true - break - } - } - - return isPrivate -} +// Example scary IPs that should return false (ipv6-to-ipv4 mapped): +// ::FFFF:127.0.0.1 +// ::ffff:7f00:1 +const isDisallowedIP = (ipAddress) => ipaddr.parse(ipAddress).range() !== 'unicast' module.exports.FORBIDDEN_IP_ADDRESS = FORBIDDEN_IP_ADDRESS @@ -115,7 +51,7 @@ function dnsLookup (hostname, options, callback) { const toValidate = Array.isArray(addresses) ? addresses : [{ address: addresses }] for (const record of toValidate) { - if (isPrivateIP(record.address)) { + if (isDisallowedIP(record.address)) { callback(new Error(FORBIDDEN_IP_ADDRESS), addresses, maybeFamily) return } @@ -127,7 +63,7 @@ function dnsLookup (hostname, options, callback) { class HttpAgent extends http.Agent { createConnection (options, callback) { - if (isIPAddress(options.host) && isPrivateIP(options.host)) { + if (ipaddr.isValid(options.host) && isDisallowedIP(options.host)) { callback(new Error(FORBIDDEN_IP_ADDRESS)) return undefined } @@ -138,7 +74,7 @@ class HttpAgent extends http.Agent { class HttpsAgent extends https.Agent { createConnection (options, callback) { - if (isIPAddress(options.host) && isPrivateIP(options.host)) { + if (ipaddr.isValid(options.host) && isDisallowedIP(options.host)) { callback(new Error(FORBIDDEN_IP_ADDRESS)) return undefined } diff --git a/yarn.lock b/yarn.lock index bb517c5744..e85818443f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8100,7 +8100,7 @@ __metadata: grant: 4.7.0 helmet: ^4.6.0 into-stream: ^6.0.0 - ip-address: 6.2.0 + ipaddr.js: ^2.0.1 isobject: 3.0.1 jsonwebtoken: 8.5.1 lodash.merge: ^4.6.2 @@ -23125,21 +23125,6 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"ip-address@npm:6.2.0": - version: 6.2.0 - resolution: "ip-address@npm:6.2.0" - dependencies: - jsbn: 1.1.0 - lodash.find: 4.6.0 - lodash.max: 4.0.1 - lodash.merge: 4.6.2 - lodash.padstart: 4.6.1 - lodash.repeat: 4.1.0 - sprintf-js: 1.1.2 - checksum: bcb93b4b13b3bf17d033fafce45850bf14c56366659ab627d3adbcd7a87ec64e219e7c6dc5cf990dddff5ac59db76520f2b1c7b5b05ea8d069162ca8a5112e44 - languageName: node - linkType: hard - "ip-regex@npm:^2.1.0": version: 2.1.0 resolution: "ip-regex@npm:2.1.0" @@ -25047,13 +25032,6 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 - languageName: node - linkType: hard - "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -26431,13 +26409,6 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"lodash.find@npm:4.6.0": - version: 4.6.0 - resolution: "lodash.find@npm:4.6.0" - checksum: b737f849a4fe36f5c3664ea636780dda2fde18335021faf80cdfdcb300ed75441da6f55cfd6de119092d8bb2ddbc4433f4a8de4b99c0b9c8640465b0901c717c - languageName: node - linkType: hard - "lodash.flatten@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flatten@npm:4.4.0" @@ -26543,13 +26514,6 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"lodash.max@npm:4.0.1": - version: 4.0.1 - resolution: "lodash.max@npm:4.0.1" - checksum: f887b68db054edabe3a4f4877a7b7d0bef6e4a29e9371ea4d711a6ed0ca2393659a879158c609649aabd0337528ec58ed5b1e9581fed536ec0b8ae45a6e5f278 - languageName: node - linkType: hard - "lodash.memoize@npm:4.1.2, lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -26564,7 +26528,7 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.1, lodash.merge@npm:^4.6.2": +"lodash.merge@npm:^4.6.1, lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 @@ -26585,13 +26549,6 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"lodash.padstart@npm:4.6.1": - version: 4.6.1 - resolution: "lodash.padstart@npm:4.6.1" - checksum: 0d6ad92c626d351db85de539e41df3238d7d36c5fbfc5f57c4f060c90c73ad9f1db566463487795fdf0bf290a8f133189a0bd91d051032f6eb2d15b7e1863b5e - languageName: node - linkType: hard - "lodash.pick@npm:^4.4.0": version: 4.4.0 resolution: "lodash.pick@npm:4.4.0" @@ -26606,13 +26563,6 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"lodash.repeat@npm:4.1.0": - version: 4.1.0 - resolution: "lodash.repeat@npm:4.1.0" - checksum: dac15fc59ed783678e1a9f986fefa180bfdbf95280852165965ecc8e15b871c6f0eaf7b325768a176014594d5186f1d6558fb72a18527bddd82539fb3ef8a4d3 - languageName: node - linkType: hard - "lodash.set@npm:^4.3.2": version: 4.3.2 resolution: "lodash.set@npm:4.3.2" @@ -37701,7 +37651,7 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"sprintf-js@npm:1.1.2, sprintf-js@npm:^1.0.3, sprintf-js@npm:^1.1.2": +"sprintf-js@npm:^1.0.3, sprintf-js@npm:^1.1.2": version: 1.1.2 resolution: "sprintf-js@npm:1.1.2" checksum: d4bb46464632b335e5faed381bd331157e0af64915a98ede833452663bc672823db49d7531c32d58798e85236581fb7342fd0270531ffc8f914e186187bf1c90 From d1bcd86e2541db347c50df2855f69548233c52fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 16:52:17 +0000 Subject: [PATCH 05/17] Release: uppy@2.3.3 (#3410) | Package | Version | Package | Version | | --------------- | ------- | --------------- | ------- | | @uppy/companion | 3.1.5 | uppy | 2.3.3 | - @uppy/companion: improve private ip check (Mikael Finstad / #3403) --- BUNDLE-README.md | 2 +- CHANGELOG.md | 11 +++ README.md | 98 +++++++++---------- examples/cdn-example/index.html | 4 +- .../uppy-with-companion/client/index.html | 4 +- packages/@uppy/companion/CHANGELOG.md | 7 ++ packages/@uppy/companion/package.json | 2 +- packages/@uppy/robodog/README.md | 4 +- packages/uppy/package.json | 2 +- website/src/docs/index.md | 10 +- website/src/docs/locales.md | 2 +- website/src/docs/migration-guides.md | 6 +- website/src/examples/i18n/app.html | 4 +- website/themes/uppy/layout/index.ejs | 4 +- 14 files changed, 89 insertions(+), 71 deletions(-) diff --git a/BUNDLE-README.md b/BUNDLE-README.md index dce5c3f7cc..5b79180d90 100644 --- a/BUNDLE-README.md +++ b/BUNDLE-README.md @@ -1,7 +1,7 @@ # Uppy Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can use -this from a CDN (``) or bundle it with your webapp. +this from a CDN (``) or bundle it with your webapp. Note that the recommended way to use Uppy is to install it with yarn/npm and use a bundler like Webpack so that you can create a smaller custom build with only the diff --git a/CHANGELOG.md b/CHANGELOG.md index d2ea2f9d4b..8e5f215f6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,17 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 2.3.3 + +Released: 2022-01-04 + +| Package | Version | Package | Version | +| --------------- | ------- | --------------- | ------- | +| @uppy/companion | 3.1.5 | uppy | 2.3.3 | + +- @uppy/companion: improve private ip check (Mikael Finstad / #3403) + + ## 2.3.2 Released: 2021-12-21 diff --git a/README.md b/README.md index 8db41dde61..224d51d141 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,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://releases.transloadit.com/uppy/v2.3.2/uppy.min.css), either to your HTML page’s `` 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://releases.transloadit.com/uppy/v2.3.3/uppy.min.css), either to your HTML page’s `` 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. @@ -77,10 +77,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - +
@@ -190,7 +190,7 @@ If you’re using Uppy from CDN, those polyfills are already included in the leg bundle, so no need to include anything additionally: ```html - + ``` ## FAQ @@ -251,9 +251,9 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[AJvanLoon](https://github.com/AJvanLoon) | -[nqst](https://github.com/nqst) |[aduh95](https://github.com/aduh95) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | +[aduh95](https://github.com/aduh95) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | :---: |:---: |:---: |:---: |:---: |:---: | -[nqst](https://github.com/nqst) |[aduh95](https://github.com/aduh95) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | +[aduh95](https://github.com/aduh95) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | [sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[dependabot[bot]](https://github.com/apps/dependabot) |[zcallan](https://github.com/zcallan) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -283,33 +283,33 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [sksavant](https://github.com/sksavant) |[suchoproduction](https://github.com/suchoproduction) |[sunil-shrestha](https://github.com/sunil-shrestha) |[timodwhit](https://github.com/timodwhit) |[yonahforst](https://github.com/yonahforst) |[a-kriya](https://github.com/a-kriya) | -[bencergazda](https://github.com/bencergazda) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) |[btrice](https://github.com/btrice) | +[bencergazda](https://github.com/bencergazda) |[github-actions[bot]](https://github.com/apps/github-actions) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) | :---: |:---: |:---: |:---: |:---: |:---: | -[bencergazda](https://github.com/bencergazda) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) |[btrice](https://github.com/btrice) | +[bencergazda](https://github.com/bencergazda) |[github-actions[bot]](https://github.com/apps/github-actions) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) | -[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) | +[btrice](https://github.com/btrice) |[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) | :---: |:---: |:---: |:---: |:---: |:---: | -[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) | +[btrice](https://github.com/btrice) |[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) | -[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) | +[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) | :---: |:---: |:---: |:---: |:---: |:---: | -[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) | +[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) | -[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) | +[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) | :---: |:---: |:---: |:---: |:---: |:---: | -[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) | +[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) | -[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) | +[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) | :---: |:---: |:---: |:---: |:---: |:---: | -[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) | +[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) | -[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) | +[richmeij](https://github.com/richmeij) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) | :---: |:---: |:---: |:---: |:---: |:---: | -[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) | +[richmeij](https://github.com/richmeij) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) | -[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[github-actions[bot]](https://github.com/apps/github-actions) |[jarey](https://github.com/jarey) | +[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) | :---: |:---: |:---: |:---: |:---: |:---: | -[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[github-actions[bot]](https://github.com/apps/github-actions) |[jarey](https://github.com/jarey) | +[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) | [muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -395,61 +395,61 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) | -[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | +[navruzm](https://github.com/navruzm) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) | :---: |:---: |:---: |:---: |:---: |:---: | -[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | +[navruzm](https://github.com/navruzm) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) | -[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) | +[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | :---: |:---: |:---: |:---: |:---: |:---: | -[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) | +[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | -[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) | +[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | :---: |:---: |:---: |:---: |:---: |:---: | -[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) | +[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | -[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) | +[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | :---: |:---: |:---: |:---: |:---: |:---: | -[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) | +[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | -[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) | +[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | :---: |:---: |:---: |:---: |:---: |:---: | -[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) | +[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | -[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) | +[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) | :---: |:---: |:---: |:---: |:---: |:---: | -[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) | +[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) | -[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | +[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) | :---: |:---: |:---: |:---: |:---: |:---: | -[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | +[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) | -[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) | +[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) | :---: |:---: |:---: |:---: |:---: |:---: | -[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) | +[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) | -[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) | +[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) | :---: |:---: |:---: |:---: |:---: |:---: | -[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) | +[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) | -[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) | +[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) | :---: |:---: |:---: |:---: |:---: |:---: | -[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) | +[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) | -[green-mike](https://github.com/green-mike) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) | +[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) | :---: |:---: |:---: |:---: |:---: |:---: | -[green-mike](https://github.com/green-mike) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) | +[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) | -[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) | +[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) | :---: |:---: |:---: |:---: |:---: |:---: | -[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) | +[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) | -[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) | +[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) | :---: |:---: |:---: |:---: |:---: |:---: | -[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) | +[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) | -[JimmyLv](https://github.com/JimmyLv) | -:---: | -[JimmyLv](https://github.com/JimmyLv) | +[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | +:---: |:---: |:---: | +[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index 2c022018f6..e04d48bfba 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@ - + - + + + + ``` Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog). diff --git a/packages/uppy/package.json b/packages/uppy/package.json index 46e0d59ce4..7d7d6594bd 100644 --- a/packages/uppy/package.json +++ b/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": "2.3.2", + "version": "2.3.3", "license": "MIT", "main": "index.js", "module": "index.mjs", diff --git a/website/src/docs/index.md b/website/src/docs/index.md index 2d110d3718..8aaee4f86f 100644 --- a/website/src/docs/index.md +++ b/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 Uppy - +
- + + ``` 2\. Add CSS to ``: ```html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -183,5 +183,5 @@ export * from '@uppy/core' If you’re using Uppy from CDN, those polyfills are already included in the bundle, no need to include anything additionally: ```html - + ``` diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md index b8c7bcda99..35856fe298 100644 --- a/website/src/docs/locales.md +++ b/website/src/docs/locales.md @@ -34,7 +34,7 @@ const uppy = new Uppy({ Add a ` + + - - + + ``` Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore. diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index d0339f9f47..83588a6cc8 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,7 +1,7 @@ - +
@@ -12,7 +12,7 @@
Uploaded files:
- + + + + diff --git a/examples/aws-presigned-url/main.js b/examples/aws-presigned-url/main.js index 12ed1877c8..927b5fe9c6 100644 --- a/examples/aws-presigned-url/main.js +++ b/examples/aws-presigned-url/main.js @@ -1,6 +1,6 @@ -const Uppy = require('@uppy/core') -const Dashboard = require('@uppy/dashboard') -const AwsS3 = require('@uppy/aws-s3') +import Uppy from '@uppy/core' +import Dashboard from '@uppy/dashboard' +import AwsS3 from '@uppy/aws-s3' const uppy = new Uppy({ debug: true, diff --git a/examples/aws-presigned-url/package.json b/examples/aws-presigned-url/package.json index e154024299..59bdc2ecd5 100644 --- a/examples/aws-presigned-url/package.json +++ b/examples/aws-presigned-url/package.json @@ -2,17 +2,18 @@ "name": "@uppy-example/aws-presigned-url", "version": "0.0.0", "dependencies": { - "@babel/core": "^7.4.4", "@uppy/aws-s3": "workspace:*", "@uppy/core": "workspace:*", "@uppy/dashboard": "workspace:*", - "babelify": "^10.0.0", - "browserify": "^17.0.0", - "fs-write-stream-atomic": "^1.0.10", - "watchify": "^4.0.0" + "uppy": "workspace:*" + }, + "devDependencies": { + "esbuild": "^0.14.1" }, "private": true, + "type": "module", "scripts": { - "start": "node ./serve.js" + "start": "php -S localhost:8080 serve.php", + "outputBundle": "esbuild --format=esm --sourcemap=inline --bundle ./main.js" } } diff --git a/examples/aws-presigned-url/readme.md b/examples/aws-presigned-url/readme.md index bd760fe457..990f9fbab1 100644 --- a/examples/aws-presigned-url/readme.md +++ b/examples/aws-presigned-url/readme.md @@ -7,18 +7,17 @@ This example uses a server-side PHP endpoint to sign uploads to S3. To run this example, make sure you've correctly installed the **repository root**: ```bash -npm install -npm run build +yarn || corepack yarn install +yarn build || corepack yarn build ``` That will also install the npm dependencies for this example. This example also uses the AWS PHP SDK. -To install it, [get composer](https://getcomposer.org) and run `composer update` in **this** folder. +To install it, [get composer](https://getcomposer.org) and run `composer update` in this folder. ```bash -cd ./examples/aws-presigned-url -composer update +corepack yarn workspace @uppy-example/aws-presigned-url exec "composer update" ``` Configure AWS S3 credentials using [environment variables](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#environment-credentials) or a [credentials file in `~/.aws/credentials`](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#credential-profiles). @@ -27,22 +26,16 @@ Configure a bucket name and region in the `s3-sign.php` file. Then, again in the **repository root**, start this example by doing: ```bash -npm run example aws-presigned-url +corepack yarn workspace @uppy-example/aws-presigned-url start ``` The demo should now be available at http://localhost:8080. -Optionally, provide a port in the `PORT` environment variable: - -```bash -PORT=8080 npm run example aws-presigned-url -``` - You can use a different S3-compatible service like GCS by configuring that service in `~/.aws/config` and `~/.aws/credentials`, and then providing appropriate environment variables: ```bash AWS_PROFILE="gcs" \ COMPANION_AWS_ENDPOINT="https://storage.googleapis.com" \ COMPANION_AWS_BUCKET="test-bucket-name" \ - npm run example aws-presigned-url + corepack yarn run example aws-presigned-url ``` diff --git a/examples/aws-presigned-url/serve.js b/examples/aws-presigned-url/serve.js deleted file mode 100644 index 8896d843ee..0000000000 --- a/examples/aws-presigned-url/serve.js +++ /dev/null @@ -1,41 +0,0 @@ -const { spawn } = require('child_process') -const path = require('path') -const fs = require('fs') -const createWriteStream = require('fs-write-stream-atomic') -const browserify = require('browserify') -const watchify = require('watchify') -const babelify = require('babelify') - -const port = process.env.PORT || 8080 - -const b = browserify({ - cache: {}, - packageCache: {}, - debug: true, - entries: path.join(__dirname, './main.js'), -}) - -b.plugin(watchify) -b.transform(babelify) - -function bundle () { - return b.bundle((err) => { - if (err) console.error(err.stack) - else console.log('bundle complete') - }).pipe(createWriteStream(path.join(__dirname, './bundle.js'))) -} - -b.on('log', console.log) -b.on('update', bundle) -b.on('error', console.error) - -fs.createReadStream(path.join(__dirname, '../../packages/uppy/dist/uppy.min.css')) - .pipe(fs.createWriteStream(path.join(__dirname, './uppy.min.css'))) - -console.log('bundling...') -bundle().on('finish', () => { - // Start the PHP delevopment server. - spawn('php', ['-S', `localhost:${port}`], { - stdio: 'inherit', - }) -}) diff --git a/examples/aws-presigned-url/serve.php b/examples/aws-presigned-url/serve.php new file mode 100644 index 0000000000..984197dc94 --- /dev/null +++ b/examples/aws-presigned-url/serve.php @@ -0,0 +1,17 @@ + Date: Mon, 10 Jan 2022 11:03:49 +0100 Subject: [PATCH 08/17] Fix Companion deploys (#3388) * Change compilation to postinstall * Deploy * Restore shape * Reduce builds * Use docker instead * Use port as second variable * Change * Minor fixes * Update .github/workflows/companion-deploy.yml Co-authored-by: Mikael Finstad Co-authored-by: Mikael Finstad --- .github/workflows/companion-deploy.yml | 6 +++++- packages/@uppy/companion/Procfile | 1 - packages/@uppy/companion/heroku.yml | 3 +++ packages/@uppy/companion/src/standalone/start-server.js | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) delete mode 100644 packages/@uppy/companion/Procfile create mode 100644 packages/@uppy/companion/heroku.yml diff --git a/.github/workflows/companion-deploy.yml b/.github/workflows/companion-deploy.yml index 9d08465c34..d55a98d1be 100644 --- a/.github/workflows/companion-deploy.yml +++ b/.github/workflows/companion-deploy.yml @@ -1,5 +1,6 @@ name: Companion Deploy + on: push: branches: [main] @@ -43,10 +44,13 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v2 + - name: Alter dockerfile + run: | + sed -i 's/^EXPOSE 3020$/EXPOSE $PORT/g' Dockerfile - name: Deploy to heroku uses: akhileshns/heroku-deploy@v3.12.12 with: - appdir: packages/@uppy/companion heroku_api_key: ${{secrets.HEROKU_API_KEY}} heroku_app_name: companion-demo heroku_email: ${{secrets.HEROKU_EMAIL}} + usedocker: true diff --git a/packages/@uppy/companion/Procfile b/packages/@uppy/companion/Procfile deleted file mode 100644 index 7af495ec69..0000000000 --- a/packages/@uppy/companion/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: COMPANION_PORT=$PORT node ./src/standalone/start-server diff --git a/packages/@uppy/companion/heroku.yml b/packages/@uppy/companion/heroku.yml new file mode 100644 index 0000000000..8eec25b9c9 --- /dev/null +++ b/packages/@uppy/companion/heroku.yml @@ -0,0 +1,3 @@ +build: + docker: + web: Dockerfile diff --git a/packages/@uppy/companion/src/standalone/start-server.js b/packages/@uppy/companion/src/standalone/start-server.js index ec0a366e01..7b03f517eb 100755 --- a/packages/@uppy/companion/src/standalone/start-server.js +++ b/packages/@uppy/companion/src/standalone/start-server.js @@ -4,7 +4,7 @@ const companion = require('../companion') const { version } = require('../../package.json') const standalone = require('.') -const port = process.env.COMPANION_PORT || 3020 +const port = process.env.COMPANION_PORT || process.env.PORT || 3020 const { app } = standalone() From d8ed86180b78b5a37a99be6cdd96a5ccf5827557 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Mon, 10 Jan 2022 13:21:43 +0000 Subject: [PATCH 09/17] Update BACKLOG.md --- BACKLOG.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/BACKLOG.md b/BACKLOG.md index 47ba7868cc..1d0f8189d4 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -5,15 +5,13 @@ These are ideas that are planned for specific versions or act as a backlog without a clear date. PRs are welcome! Please do open an issue to discuss first if it's a big feature, priorities may have changed after something was added here. -## `2.3.0` +## `2.4.0` -To be released: 2021-11-29 +To be released: 2022-01-27 -- [ ] plugin: audio/memo recording similar to Webcam #143 #198 (@arturi) - [ ] compressor: move to Uppy repo, add resizing (@arturi) -- [ ] providers: Box on hosted Companion +- [ ] providers: Box on hosted Companion (@arturi, @mifi) - [ ] robodog: research simplifing Robodog — yes to easy “few lines of code Dashboard+Providers+(?Transloadit) experience”, but currently it’s hard to choose between modes, decide what you need (@Murderlon) -- [ ] build: add release automations (@aduh95) ## `3.0.0` From 2f589c9c4050afaf6782598eab89bd60ce221092 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Mon, 10 Jan 2022 15:33:05 +0100 Subject: [PATCH 10/17] @uppy/transloadit: better defaults for rate limiting (#3414) --- packages/@uppy/transloadit/src/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/@uppy/transloadit/src/index.js b/packages/@uppy/transloadit/src/index.js index 50d9f6c041..2766adb08c 100644 --- a/packages/@uppy/transloadit/src/index.js +++ b/packages/@uppy/transloadit/src/index.js @@ -53,7 +53,8 @@ module.exports = class Transloadit extends BasePlugin { params: null, fields: {}, getAssemblyOptions: defaultGetAssemblyOptions, - limit: 0, + limit: 20, + retryDelays: [7_000, 10_000, 15_000, 20_000], } this.opts = { ...defaultOptions, ...opts } @@ -751,6 +752,7 @@ module.exports = class Transloadit extends BasePlugin { metaFields: ['assembly_url', 'filename', 'fieldname'], // Pass the limit option to @uppy/tus limit: this.opts.limit, + retryDelays: this.opts.retryDelays, }) } From 99ae31741b48d84c9165ff2d112ac43a1560a32e Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Mon, 10 Jan 2022 16:41:52 +0100 Subject: [PATCH 11/17] @uppy/tus: pause all requests in response to server rate limiting (#3394) * @uppy/tus: pause all requests in response to server rate limiting When the remote server responds with HTTP 429, all requests are paused for a while in the hope that it can resolve the rate limiting. Failed requests are also now queued up after the retry delay. Before that, they were simply scheduled which would sometimes end up overflowing the `limit` option. * Address review comments * fix requests bypassing queue pause state * Auto rate limiting * fix `RateLimitedQueue` --- packages/@uppy/tus/src/index.js | 89 +++++++++++++++----- packages/@uppy/utils/src/RateLimitedQueue.js | 77 ++++++++++++++++- 2 files changed, 142 insertions(+), 24 deletions(-) diff --git a/packages/@uppy/tus/src/index.js b/packages/@uppy/tus/src/index.js index 75586f5b61..5ff2b3388d 100644 --- a/packages/@uppy/tus/src/index.js +++ b/packages/@uppy/tus/src/index.js @@ -40,7 +40,7 @@ const tusDefaultOptions = { addRequestId: false, chunkSize: Infinity, - retryDelays: [0, 1000, 3000, 5000], + retryDelays: [100, 1000, 3000, 5000], parallelUploads: 1, removeFingerprintOnSuccess: false, uploadLengthDeferred: false, @@ -51,8 +51,11 @@ const tusDefaultOptions = { * Tus resumable file uploader */ module.exports = class Tus extends BasePlugin { + // eslint-disable-next-line global-require static VERSION = require('../package.json').version + #retryDelayIterator + /** * @param {Uppy} uppy * @param {TusOptions} opts @@ -66,8 +69,8 @@ module.exports = class Tus extends BasePlugin { // set default options const defaultOptions = { useFastRemoteRetry: true, - limit: 5, - retryDelays: [0, 1000, 3000, 5000], + limit: 20, + retryDelays: tusDefaultOptions.retryDelays, withCredentials: false, } @@ -85,6 +88,7 @@ module.exports = class Tus extends BasePlugin { * @type {RateLimitedQueue} */ this.requests = new RateLimitedQueue(this.opts.limit) + this.#retryDelayIterator = this.opts.retryDelays?.values() this.uploaders = Object.create(null) this.uploaderEvents = Object.create(null) @@ -178,6 +182,9 @@ module.exports = class Tus extends BasePlugin { // Create a new tus upload return new Promise((resolve, reject) => { + let queuedRequest + let qRequest + this.uppy.emit('upload-started', file) const opts = { @@ -219,7 +226,7 @@ module.exports = class Tus extends BasePlugin { } this.resetUploaderReferences(file.id) - queuedRequest.done() + queuedRequest.abort() this.uppy.emit('upload-error', file, err) @@ -252,6 +259,46 @@ module.exports = class Tus extends BasePlugin { resolve(upload) } + uploadOptions.onShouldRetry = (err, retryAttempt, options) => { + const status = err?.originalResponse?.getStatus() + if (status === 429) { + // HTTP 429 Too Many Requests => to avoid the whole download to fail, pause all requests. + if (!this.requests.isPaused) { + const next = this.#retryDelayIterator?.next() + if (next == null || next.done) { + return false + } + this.requests.rateLimit(next.value) + } + queuedRequest.abort() + queuedRequest = this.requests.run(qRequest) + } else if (status > 400 && status < 500 && status !== 409) { + // HTTP 4xx, the server won't send anything, it's doesn't make sense to retry + return false + } else if (typeof navigator !== 'undefined' && navigator.onLine === false) { + // The navigator is offline, let's wait for it to come back online. + if (!this.requests.isPaused) { + this.requests.pause() + window.addEventListener('online', () => { + this.requests.resume() + }, { once: true }) + } + queuedRequest.abort() + queuedRequest = this.requests.run(qRequest) + } else { + // For a non-4xx error, we can re-queue the request. + setTimeout(() => { + queuedRequest.abort() + queuedRequest = this.requests.run(qRequest) + }, options.retryDelays[retryAttempt]) + } + // Aborting the timeout set by tus-js-client to not short-circuit the rate limiting. + // eslint-disable-next-line no-underscore-dangle + queueMicrotask(() => clearTimeout(queuedRequest._retryTimeout)) + // We need to return true here so tus-js-client increments the retryAttempt and do not emit an error event. + return true + } + const copyProp = (obj, srcProp, destProp) => { if (hasProperty(obj, srcProp) && !hasProperty(obj, destProp)) { obj[destProp] = obj[srcProp] @@ -278,15 +325,7 @@ module.exports = class Tus extends BasePlugin { this.uploaders[file.id] = upload this.uploaderEvents[file.id] = new EventTracker(this.uppy) - upload.findPreviousUploads().then((previousUploads) => { - const previousUpload = previousUploads[0] - if (previousUpload) { - this.uppy.log(`[Tus] Resuming upload of ${file.id} started at ${previousUpload.creationTime}`) - upload.resumeFromPreviousUpload(previousUpload) - } - }) - - let queuedRequest = this.requests.run(() => { + qRequest = () => { if (!file.isPaused) { upload.start() } @@ -297,8 +336,18 @@ module.exports = class Tus extends BasePlugin { // Also, we need to remove the request from the queue _without_ destroying everything // related to this upload to handle pauses. return () => {} + } + + upload.findPreviousUploads().then((previousUploads) => { + const previousUpload = previousUploads[0] + if (previousUpload) { + this.uppy.log(`[Tus] Resuming upload of ${file.id} started at ${previousUpload.creationTime}`) + upload.resumeFromPreviousUpload(previousUpload) + } }) + queuedRequest = this.requests.run(qRequest) + this.onFileRemove(file.id, (targetFileID) => { queuedRequest.abort() this.resetUploaderReferences(file.id, { abort: !!upload.url }) @@ -314,10 +363,7 @@ module.exports = class Tus extends BasePlugin { // Resuming an upload should be queued, else you could pause and then // resume a queued upload to make it skip the queue. queuedRequest.abort() - queuedRequest = this.requests.run(() => { - upload.start() - return () => {} - }) + queuedRequest = this.requests.run(qRequest) } }) @@ -337,10 +383,7 @@ module.exports = class Tus extends BasePlugin { if (file.error) { upload.abort() } - queuedRequest = this.requests.run(() => { - upload.start() - return () => {} - }) + queuedRequest = this.requests.run(qRequest) }) }).catch((err) => { this.uppy.emit('upload-error', file, err) @@ -412,6 +455,8 @@ module.exports = class Tus extends BasePlugin { this.uploaderSockets[file.id] = socket this.uploaderEvents[file.id] = new EventTracker(this.uppy) + let queuedRequest + this.onFileRemove(file.id, () => { queuedRequest.abort() socket.send('cancel', {}) @@ -512,7 +557,7 @@ module.exports = class Tus extends BasePlugin { resolve() }) - let queuedRequest = this.requests.run(() => { + queuedRequest = this.requests.run(() => { socket.open() if (file.isPaused) { socket.send('pause', {}) diff --git a/packages/@uppy/utils/src/RateLimitedQueue.js b/packages/@uppy/utils/src/RateLimitedQueue.js index 77e0589c2a..56bf3ac502 100644 --- a/packages/@uppy/utils/src/RateLimitedQueue.js +++ b/packages/@uppy/utils/src/RateLimitedQueue.js @@ -7,6 +7,16 @@ class RateLimitedQueue { #queuedHandlers = [] + #paused = false + + #pauseTimer + + #downLimit = 1 + + #upperLimit + + #rateLimitingTimer + constructor (limit) { if (typeof limit !== 'number' || limit === 0) { this.limit = Infinity @@ -54,7 +64,7 @@ class RateLimitedQueue { } #next () { - if (this.#activeRequests >= this.limit) { + if (this.#paused || this.#activeRequests >= this.limit) { return } if (this.#queuedHandlers.length === 0) { @@ -101,7 +111,7 @@ class RateLimitedQueue { } run (fn, queueOptions) { - if (this.#activeRequests < this.limit) { + if (!this.#paused && this.#activeRequests < this.limit) { return this.#call(fn) } return this.#queue(fn, queueOptions) @@ -149,6 +159,69 @@ class RateLimitedQueue { return outerPromise } } + + resume () { + this.#paused = false + clearTimeout(this.#pauseTimer) + for (let i = 0; i < this.limit; i++) { + this.#queueNext() + } + } + + #resume = () => this.resume() + + /** + * Freezes the queue for a while or indefinitely. + * + * @param {number | null } [duration] Duration for the pause to happen, in milliseconds. + * If omitted, the queue won't resume automatically. + */ + pause (duration = null) { + this.#paused = true + clearTimeout(this.#pauseTimer) + if (duration != null) { + this.#pauseTimer = setTimeout(this.#resume, duration) + } + } + + /** + * Pauses the queue for a duration, and lower the limit of concurrent requests + * when the queue resumes. When the queue resumes, it tries to progressively + * increase the limit in `this.#increaseLimit` until another call is made to + * `this.rateLimit`. + * Call this function when using the RateLimitedQueue for network requests and + * the remote server responds with 429 HTTP code. + * + * @param {number} duration in milliseconds. + */ + rateLimit (duration) { + clearTimeout(this.#rateLimitingTimer) + this.pause(duration) + if (this.limit > 1 && Number.isFinite(this.limit)) { + this.#upperLimit = this.limit - 1 + this.limit = this.#downLimit + this.#rateLimitingTimer = setTimeout(this.#increaseLimit, duration) + } + } + + #increaseLimit = () => { + if (this.#paused) { + this.#rateLimitingTimer = setTimeout(this.#increaseLimit, 0) + return + } + this.#downLimit = this.limit + this.limit = Math.ceil((this.#upperLimit + this.#downLimit) / 2) + for (let i = this.#downLimit; i <= this.limit; i++) { + this.#queueNext() + } + if (this.#upperLimit - this.#downLimit > 3) { + this.#rateLimitingTimer = setTimeout(this.#increaseLimit, 2000) + } else { + this.#downLimit = Math.floor(this.#downLimit / 2) + } + } + + get isPaused () { return this.#paused } } module.exports = { From 37737aaa78cbdf845a8df399fbc01b4c1dafd205 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Mon, 10 Jan 2022 19:36:13 +0100 Subject: [PATCH 12/17] @uppy/transloadit: ignore rate limiting errors when polling (#3418) Fixes: https://github.com/transloadit/uppy/issues/3156 --- packages/@uppy/transloadit/src/Assembly.js | 50 +++++++++++++--------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/packages/@uppy/transloadit/src/Assembly.js b/packages/@uppy/transloadit/src/Assembly.js index 136bb5e2a3..5c2f1099be 100644 --- a/packages/@uppy/transloadit/src/Assembly.js +++ b/packages/@uppy/transloadit/src/Assembly.js @@ -79,11 +79,6 @@ class TransloaditAssembly extends Emitter { this.emit('connect') }) - socket.on('connect_failed', () => { - this.#onError(new NetworkError('Transloadit Socket.io connection error')) - this.socket = null - }) - socket.on('connect_error', () => { socket.disconnect() this.socket = null @@ -126,6 +121,7 @@ class TransloaditAssembly extends Emitter { #onError (err) { this.emit('error', Object.assign(new Error(err.message), err)) + this.close() } /** @@ -148,21 +144,35 @@ class TransloaditAssembly extends Emitter { * Pass `diff: false` to avoid emitting diff events, instead only emitting * 'status'. */ - #fetchStatus ({ diff = true } = {}) { - return fetchWithNetworkError(this.status.assembly_ssl_url) - .then((response) => response.json()) - .then((status) => { - // Avoid updating if we closed during this request's lifetime. - if (this.closed) return - this.emit('status', status) - - if (diff) { - this.updateStatus(status) - } else { - this.status = status - } - }) - .catch((err) => this.#onError(err)) + async #fetchStatus ({ diff = true } = {}) { + if (this.closed) return + + try { + const response = await fetchWithNetworkError(this.status.assembly_ssl_url) + + if (this.closed) return + + // In case of rate-limiting, ignore the error. + if (response.status === 429) return + + if (!response.ok) { + this.#onError(new NetworkError(response.statusText)) + return + } + + const status = await response.json() + // Avoid updating if we closed during this request's lifetime. + if (this.closed) return + this.emit('status', status) + + if (diff) { + this.updateStatus(status) + } else { + this.status = status + } + } catch (err) { + this.#onError(err) + } } update () { From c4787705bdd4f25fbb060a606256005f970ca507 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Jan 2022 19:43:52 +0000 Subject: [PATCH 13/17] Release: uppy@2.4.0 (#3420) | Package | Version | Package | Version | | -------------------- | ------- | -------------------- | ------- | | @uppy/drag-drop | 2.0.6 | @uppy/tus | 2.2.0 | | @uppy/image-editor | 1.1.1 | @uppy/utils | 4.0.5 | | @uppy/screen-capture | 2.0.6 | @uppy/robodog | 2.2.0 | | @uppy/transloadit | 2.1.0 | uppy | 2.4.0 | - @uppy/transloadit: ignore rate limiting errors when polling (Antoine du Hamel / #3418) - @uppy/tus: pause all requests in response to server rate limiting (Antoine du Hamel / #3394) - @uppy/transloadit: better defaults for rate limiting (Antoine du Hamel / #3414) - @uppy/companion: Fix Companion deploys (kiloreux / #3388) - meta: update aws-presigned-url example to use esm (Antoine du Hamel / #3413) - @uppy/image-editor: namespace input range css (Merlijn Vos / #3406) - @uppy/screen-capture: Add missing option to the screen capture types (Mustafa Navruz / #3400) - @uppy/drag-drop: fix `undefined is not a function` TypeError (Antoine du Hamel / #3397) - website: update december 2021 blog post (Antoine du Hamel / #3396) - website: Polished the latest update blog (AJvanLoon / #3390) - website: docs: fix typo in audio.md (heocoi / #3389) - website: 2.0-2.3 post draft (Artur Paikin / #3370) --- BUNDLE-README.md | 2 +- CHANGELOG.md | 25 ++++ README.md | 114 +++++++++--------- examples/cdn-example/index.html | 4 +- examples/transloadit-textarea/index.html | 2 +- .../uppy-with-companion/client/index.html | 4 +- packages/@uppy/drag-drop/CHANGELOG.md | 7 ++ packages/@uppy/drag-drop/package.json | 2 +- packages/@uppy/image-editor/CHANGELOG.md | 7 ++ packages/@uppy/image-editor/package.json | 2 +- packages/@uppy/robodog/README.md | 4 +- packages/@uppy/robodog/package.json | 2 +- packages/@uppy/screen-capture/CHANGELOG.md | 7 ++ packages/@uppy/screen-capture/package.json | 2 +- packages/@uppy/transloadit/CHANGELOG.md | 8 ++ packages/@uppy/transloadit/package.json | 2 +- packages/@uppy/tus/CHANGELOG.md | 8 ++ packages/@uppy/tus/package.json | 2 +- packages/@uppy/utils/package.json | 2 +- packages/uppy/package.json | 2 +- website/src/docs/index.md | 10 +- website/src/docs/locales.md | 2 +- website/src/docs/migration-guides.md | 6 +- website/src/docs/robodog-form.md | 6 +- website/src/docs/robodog.md | 4 +- website/src/examples/i18n/app.html | 4 +- .../src/examples/markdown-snippets/app.es6 | 2 +- .../src/examples/markdown-snippets/app.html | 2 +- website/themes/uppy/layout/index.ejs | 4 +- 29 files changed, 155 insertions(+), 93 deletions(-) create mode 100644 packages/@uppy/tus/CHANGELOG.md diff --git a/BUNDLE-README.md b/BUNDLE-README.md index 5b79180d90..7e3e2b26cf 100644 --- a/BUNDLE-README.md +++ b/BUNDLE-README.md @@ -1,7 +1,7 @@ # Uppy Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can use -this from a CDN (``) or bundle it with your webapp. +this from a CDN (``) or bundle it with your webapp. Note that the recommended way to use Uppy is to install it with yarn/npm and use a bundler like Webpack so that you can create a smaller custom build with only the diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e5f215f6a..ff704fd259 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,31 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 2.4.0 + +Released: 2022-01-10 + +| Package | Version | Package | Version | +| -------------------- | ------- | -------------------- | ------- | +| @uppy/drag-drop | 2.0.6 | @uppy/tus | 2.2.0 | +| @uppy/image-editor | 1.1.1 | @uppy/utils | 4.0.5 | +| @uppy/screen-capture | 2.0.6 | @uppy/robodog | 2.2.0 | +| @uppy/transloadit | 2.1.0 | uppy | 2.4.0 | + +- @uppy/transloadit: ignore rate limiting errors when polling (Antoine du Hamel / #3418) +- @uppy/tus: pause all requests in response to server rate limiting (Antoine du Hamel / #3394) +- @uppy/transloadit: better defaults for rate limiting (Antoine du Hamel / #3414) +- @uppy/companion: Fix Companion deploys (kiloreux / #3388) +- meta: update aws-presigned-url example to use esm (Antoine du Hamel / #3413) +- @uppy/image-editor: namespace input range css (Merlijn Vos / #3406) +- @uppy/screen-capture: Add missing option to the screen capture types (Mustafa Navruz / #3400) +- @uppy/drag-drop: fix `undefined is not a function` TypeError (Antoine du Hamel / #3397) +- website: update december 2021 blog post (Antoine du Hamel / #3396) +- website: Polished the latest update blog (AJvanLoon / #3390) +- website: docs: fix typo in audio.md (heocoi / #3389) +- website: 2.0-2.3 post draft (Artur Paikin / #3370) + + ## 2.3.3 Released: 2022-01-04 diff --git a/README.md b/README.md index 224d51d141..9fe5787cba 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,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://releases.transloadit.com/uppy/v2.3.3/uppy.min.css), either to your HTML page’s `` 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://releases.transloadit.com/uppy/v2.4.0/uppy.min.css), either to your HTML page’s `` 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. @@ -77,10 +77,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - +
@@ -190,7 +190,7 @@ If you’re using Uppy from CDN, those polyfills are already included in the leg bundle, so no need to include anything additionally: ```html - + ``` ## FAQ @@ -247,13 +247,13 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu ## Contributors -[arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[AJvanLoon](https://github.com/AJvanLoon) | +[arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[aduh95](https://github.com/aduh95) | :---: |:---: |:---: |:---: |:---: |:---: | -[arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[AJvanLoon](https://github.com/AJvanLoon) | +[arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[aduh95](https://github.com/aduh95) | -[aduh95](https://github.com/aduh95) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | +[AJvanLoon](https://github.com/AJvanLoon) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | :---: |:---: |:---: |:---: |:---: |:---: | -[aduh95](https://github.com/aduh95) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | +[AJvanLoon](https://github.com/AJvanLoon) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | [sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[dependabot[bot]](https://github.com/apps/dependabot) |[zcallan](https://github.com/zcallan) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -271,21 +271,21 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [elenalape](https://github.com/elenalape) |[mejiaej](https://github.com/mejiaej) |[gavboulton](https://github.com/gavboulton) |[Hawxy](https://github.com/Hawxy) |[bertho-zero](https://github.com/bertho-zero) |[tranvansang](https://github.com/tranvansang) | -[ap--](https://github.com/ap--) |[mrbatista](https://github.com/mrbatista) |[MikeKovarik](https://github.com/MikeKovarik) |[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) |[ofhope](https://github.com/ofhope) | +[ap--](https://github.com/ap--) |[github-actions[bot]](https://github.com/apps/github-actions) |[mrbatista](https://github.com/mrbatista) |[MikeKovarik](https://github.com/MikeKovarik) |[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) | :---: |:---: |:---: |:---: |:---: |:---: | -[ap--](https://github.com/ap--) |[mrbatista](https://github.com/mrbatista) |[MikeKovarik](https://github.com/MikeKovarik) |[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) |[ofhope](https://github.com/ofhope) | +[ap--](https://github.com/ap--) |[github-actions[bot]](https://github.com/apps/github-actions) |[mrbatista](https://github.com/mrbatista) |[MikeKovarik](https://github.com/MikeKovarik) |[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) | -[johnnyperkins](https://github.com/johnnyperkins) |[dargmuesli](https://github.com/dargmuesli) |[juliangruber](https://github.com/juliangruber) |[manuelkiessling](https://github.com/manuelkiessling) |[nndevstudio](https://github.com/nndevstudio) |[ogtfaber](https://github.com/ogtfaber) | +[ofhope](https://github.com/ofhope) |[johnnyperkins](https://github.com/johnnyperkins) |[dargmuesli](https://github.com/dargmuesli) |[juliangruber](https://github.com/juliangruber) |[manuelkiessling](https://github.com/manuelkiessling) |[nndevstudio](https://github.com/nndevstudio) | :---: |:---: |:---: |:---: |:---: |:---: | -[johnnyperkins](https://github.com/johnnyperkins) |[dargmuesli](https://github.com/dargmuesli) |[juliangruber](https://github.com/juliangruber) |[manuelkiessling](https://github.com/manuelkiessling) |[nndevstudio](https://github.com/nndevstudio) |[ogtfaber](https://github.com/ogtfaber) | +[ofhope](https://github.com/ofhope) |[johnnyperkins](https://github.com/johnnyperkins) |[dargmuesli](https://github.com/dargmuesli) |[juliangruber](https://github.com/juliangruber) |[manuelkiessling](https://github.com/manuelkiessling) |[nndevstudio](https://github.com/nndevstudio) | -[sksavant](https://github.com/sksavant) |[suchoproduction](https://github.com/suchoproduction) |[sunil-shrestha](https://github.com/sunil-shrestha) |[timodwhit](https://github.com/timodwhit) |[yonahforst](https://github.com/yonahforst) |[a-kriya](https://github.com/a-kriya) | +[ogtfaber](https://github.com/ogtfaber) |[sksavant](https://github.com/sksavant) |[suchoproduction](https://github.com/suchoproduction) |[sunil-shrestha](https://github.com/sunil-shrestha) |[timodwhit](https://github.com/timodwhit) |[yonahforst](https://github.com/yonahforst) | :---: |:---: |:---: |:---: |:---: |:---: | -[sksavant](https://github.com/sksavant) |[suchoproduction](https://github.com/suchoproduction) |[sunil-shrestha](https://github.com/sunil-shrestha) |[timodwhit](https://github.com/timodwhit) |[yonahforst](https://github.com/yonahforst) |[a-kriya](https://github.com/a-kriya) | +[ogtfaber](https://github.com/ogtfaber) |[sksavant](https://github.com/sksavant) |[suchoproduction](https://github.com/suchoproduction) |[sunil-shrestha](https://github.com/sunil-shrestha) |[timodwhit](https://github.com/timodwhit) |[yonahforst](https://github.com/yonahforst) | -[bencergazda](https://github.com/bencergazda) |[github-actions[bot]](https://github.com/apps/github-actions) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) | +[a-kriya](https://github.com/a-kriya) |[bencergazda](https://github.com/bencergazda) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) | :---: |:---: |:---: |:---: |:---: |:---: | -[bencergazda](https://github.com/bencergazda) |[github-actions[bot]](https://github.com/apps/github-actions) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) | +[a-kriya](https://github.com/a-kriya) |[bencergazda](https://github.com/bencergazda) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) | [btrice](https://github.com/btrice) |[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -371,85 +371,85 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) |[profsmallpine](https://github.com/profsmallpine) | -[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jonathanly](https://github.com/jonathanly) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) | +[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[julianocomg](https://github.com/julianocomg) | :---: |:---: |:---: |:---: |:---: |:---: | -[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jonathanly](https://github.com/jonathanly) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) | +[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[julianocomg](https://github.com/julianocomg) | -[julianocomg](https://github.com/julianocomg) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) | +[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) | :---: |:---: |:---: |:---: |:---: |:---: | -[julianocomg](https://github.com/julianocomg) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) | +[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) | -[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) | +[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) | :---: |:---: |:---: |:---: |:---: |:---: | -[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) | +[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) | -[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) | +[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) | :---: |:---: |:---: |:---: |:---: |:---: | -[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) | +[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) | -[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[hrsh](https://github.com/hrsh) | +[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) | :---: |:---: |:---: |:---: |:---: |:---: | -[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[hrsh](https://github.com/hrsh) | +[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) | -[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) | +[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) | :---: |:---: |:---: |:---: |:---: |:---: | -[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) | +[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) | -[navruzm](https://github.com/navruzm) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) | +[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | :---: |:---: |:---: |:---: |:---: |:---: | -[navruzm](https://github.com/navruzm) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) | +[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | -[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | +[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) | :---: |:---: |:---: |:---: |:---: |:---: | -[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | +[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) | -[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | +[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) | :---: |:---: |:---: |:---: |:---: |:---: | -[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | +[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) | -[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | +[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) | :---: |:---: |:---: |:---: |:---: |:---: | -[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | +[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) | -[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | +[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) | :---: |:---: |:---: |:---: |:---: |:---: | -[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | +[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) | -[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) | +[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) | :---: |:---: |:---: |:---: |:---: |:---: | -[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) | +[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) | -[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) | +[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | :---: |:---: |:---: |:---: |:---: |:---: | -[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) | +[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | -[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) | +[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) | :---: |:---: |:---: |:---: |:---: |:---: | -[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) | +[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) | -[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) | +[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) | :---: |:---: |:---: |:---: |:---: |:---: | -[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) | +[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) | -[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) | +[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) | :---: |:---: |:---: |:---: |:---: |:---: | -[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) | +[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) | -[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) | +[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[magumbo](https://github.com/magumbo) | :---: |:---: |:---: |:---: |:---: |:---: | -[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) | +[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[magumbo](https://github.com/magumbo) | -[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) | +[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) | :---: |:---: |:---: |:---: |:---: |:---: | -[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) | +[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) | -[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) | +[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) | :---: |:---: |:---: |:---: |:---: |:---: | -[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) | +[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) | -[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | -:---: |:---: |:---: | -[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | +[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | +:---: |:---: | +[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index e04d48bfba..f329d71beb 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@ - + - + + + + ``` Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog). diff --git a/packages/@uppy/robodog/package.json b/packages/@uppy/robodog/package.json index 9008213e3c..7f8396efc8 100644 --- a/packages/@uppy/robodog/package.json +++ b/packages/@uppy/robodog/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/robodog", "description": "Transloadit SDK for browsers based on Uppy", - "version": "2.1.5", + "version": "2.2.0", "license": "MIT", "main": "lib/index.js", "jsnext:main": "src/index.js", diff --git a/packages/@uppy/screen-capture/CHANGELOG.md b/packages/@uppy/screen-capture/CHANGELOG.md index 1145efb967..272d4a7c40 100644 --- a/packages/@uppy/screen-capture/CHANGELOG.md +++ b/packages/@uppy/screen-capture/CHANGELOG.md @@ -1,5 +1,12 @@ # @uppy/screen-capture +## 2.0.6 + +Released: 2022-01-10 +Included in: Uppy v2.4.0 + +- @uppy/screen-capture: Add missing option to the screen capture types (Mustafa Navruz / #3400) + ## 2.0.5 Released: 2021-12-07 diff --git a/packages/@uppy/screen-capture/package.json b/packages/@uppy/screen-capture/package.json index 02abd00996..98b2d1938d 100644 --- a/packages/@uppy/screen-capture/package.json +++ b/packages/@uppy/screen-capture/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/screen-capture", "description": "Uppy plugin that captures video from display or application.", - "version": "2.0.5", + "version": "2.0.6", "license": "MIT", "main": "lib/index.js", "style": "dist/style.min.css", diff --git a/packages/@uppy/transloadit/CHANGELOG.md b/packages/@uppy/transloadit/CHANGELOG.md index cccd2c9871..8939a086dc 100644 --- a/packages/@uppy/transloadit/CHANGELOG.md +++ b/packages/@uppy/transloadit/CHANGELOG.md @@ -1,5 +1,13 @@ # @uppy/transloadit +## 2.1.0 + +Released: 2022-01-10 +Included in: Uppy v2.4.0 + +- @uppy/transloadit: ignore rate limiting errors when polling (Antoine du Hamel / #3418) +- @uppy/transloadit: better defaults for rate limiting (Antoine du Hamel / #3414) + ## 2.0.5 Released: 2021-12-07 diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index c860dd7e8a..aa50b0d87a 100644 --- a/packages/@uppy/transloadit/package.json +++ b/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": "2.0.5", + "version": "2.1.0", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/tus/CHANGELOG.md b/packages/@uppy/tus/CHANGELOG.md new file mode 100644 index 0000000000..9e8ca7b8a8 --- /dev/null +++ b/packages/@uppy/tus/CHANGELOG.md @@ -0,0 +1,8 @@ +# @uppy/tus + +## 2.2.0 + +Released: 2022-01-10 +Included in: Uppy v2.4.0 + +- @uppy/tus: pause all requests in response to server rate limiting (Antoine du Hamel / #3394) diff --git a/packages/@uppy/tus/package.json b/packages/@uppy/tus/package.json index 4239c0eba2..abe49d30d3 100644 --- a/packages/@uppy/tus/package.json +++ b/packages/@uppy/tus/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/tus", "description": "Resumable uploads for Uppy using Tus.io", - "version": "2.1.2", + "version": "2.2.0", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/utils/package.json b/packages/@uppy/utils/package.json index 650ce6cc6c..26051f0d3d 100644 --- a/packages/@uppy/utils/package.json +++ b/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": "4.0.4", + "version": "4.0.5", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/uppy/package.json b/packages/uppy/package.json index 0df124b95f..bfa17e66a7 100644 --- a/packages/uppy/package.json +++ b/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": "2.3.3", + "version": "2.4.0", "license": "MIT", "main": "index.js", "module": "index.mjs", diff --git a/website/src/docs/index.md b/website/src/docs/index.md index 8aaee4f86f..2d9693b19b 100644 --- a/website/src/docs/index.md +++ b/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 Uppy - +
- + + ``` 2\. Add CSS to ``: ```html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -183,5 +183,5 @@ export * from '@uppy/core' If you’re using Uppy from CDN, those polyfills are already included in the bundle, no need to include anything additionally: ```html - + ``` diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md index 35856fe298..8ad952f579 100644 --- a/website/src/docs/locales.md +++ b/website/src/docs/locales.md @@ -34,7 +34,7 @@ const uppy = new Uppy({ Add a ` + + - - + + ``` Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore. diff --git a/website/src/docs/robodog-form.md b/website/src/docs/robodog-form.md index c0d544b1cd..9ec2b8501b 100644 --- a/website/src/docs/robodog-form.md +++ b/website/src/docs/robodog-form.md @@ -150,7 +150,7 @@ Make sure to also include the Uppy css file in your `` tag in case you wan ```html - + ``` @@ -162,7 +162,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra Testing Robodog - +
@@ -172,7 +172,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
- + + + ``` diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index 83588a6cc8..27606833a8 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,7 +1,7 @@ - +
@@ -12,7 +12,7 @@
Uploaded files:
- + +// const robodog = require('@uppy/robodog') const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0' diff --git a/website/src/examples/markdown-snippets/app.html b/website/src/examples/markdown-snippets/app.html index 1b32625a03..592becd7bd 100644 --- a/website/src/examples/markdown-snippets/app.html +++ b/website/src/examples/markdown-snippets/app.html @@ -1,6 +1,6 @@ + -->

Create a new snippet

diff --git a/website/themes/uppy/layout/index.ejs b/website/themes/uppy/layout/index.ejs index 5100b42274..fa94b3326f 100644 --- a/website/themes/uppy/layout/index.ejs +++ b/website/themes/uppy/layout/index.ejs @@ -187,8 +187,8 @@

© <%- date(Date.now(), 'YYYY') %> Transloadit

- - + +