Browse Source

Merge stable branch

Antoine du Hamel 11 tháng trước cách đây
mục cha
commit
8090eacdf2

+ 18 - 0
CHANGELOG.md

@@ -309,6 +309,24 @@ Released: 2024-03-28
 - @uppy/vue: [v4.x] remove manual types (Antoine du Hamel / #4803)
 - meta: prepare release workflow for beta versions (Antoine du Hamel)
 
+## 3.25.4
+
+Released: 2024-05-22
+
+| Package         | Version | Package         | Version |
+| --------------- | ------- | --------------- | ------- |
+| @uppy/companion |  4.13.3 | @uppy/tus       |   3.5.5 |
+| @uppy/svelte    |   3.1.5 | uppy            |  3.25.4 |
+
+- @uppy/svelte: do not attempt removing plugin before it's created (Antoine du Hamel / #5186)
+- docs: Update `facebook.mdx` (Evgenia Karunus)
+- @uppy/tus: fix no headers passed to companion if argument is a function (netdown / #5182)
+- @uppy/companion: fix google drive gsuite export large size (Milan Nakum / #5144)
+- meta: Improve provider docs: Box & Zoom (Evgenia Karunus / #5166)
+- meta: add MDX file to `lint-staged` list (Antoine du Hamel / #5174)
+- @uppy/companion: handle ws `'error'` event (Mikael Finstad / #5167)
+
+
 ## 3.25.3
 
 Released: 2024-05-14

+ 6 - 47
README.md

@@ -203,48 +203,7 @@ server-side component, is needed for a plugin to work.
 
 ## Browser Support
 
-<<<<<<< HEAD We aim to support recent versions of Chrome, Firefox, and Safari.
-\======= We aim to support recent versions of Chrome, Firefox, Safari and Edge.
-
-We still provide a bundle which should work on IE11, but we are not running
-tests on it.
-
-### Polyfills
-
-Here’s a list of polyfills you’ll need to include to make Uppy work in older
-browsers, such as IE11:
-
-- [abortcontroller-polyfill](https://github.com/mo/abortcontroller-polyfill)
-- [core-js](https://github.com/zloirock/core-js)
-- [md-gum-polyfill](https://github.com/mozdevs/mediaDevices-getUserMedia-polyfill)
-- [resize-observer-polyfill](https://github.com/que-etc/resize-observer-polyfill)
-- [whatwg-fetch](https://github.com/github/fetch)
-
-If you’re using a bundler, you need to import them before Uppy:
-
-```js
-import 'core-js'
-import 'whatwg-fetch'
-import 'abortcontroller-polyfill/dist/polyfill-patch-fetch'
-// Order matters: AbortController needs fetch which needs Promise (provided by core-js).
-
-import 'md-gum-polyfill'
-import ResizeObserver from 'resize-observer-polyfill'
-
-window.ResizeObserver ??= ResizeObserver
-
-export { default } from '@uppy/core'
-export * from '@uppy/core'
-```
-
-If you’re using Uppy from CDN, those polyfills are already included in the
-legacy bundle, so no need to include anything additionally:
-
-```html
-<script src="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.legacy.min.js"></script>
-```
-
-> > > > > > > 86e2e6750192055bfba24abf62e227976be5e085
+We aim to support recent versions of Chrome, Firefox, and Safari.
 
 ## FAQ
 
@@ -350,11 +309,11 @@ Use Uppy in your project?
 <tr><td><a href=https://github.com/darthf1><img width="117" alt="darthf1" src="https://avatars.githubusercontent.com/u/17253332?v=4&s=117"></a></td><td><a href=https://github.com/fortrieb><img width="117" alt="fortrieb" src="https://avatars.githubusercontent.com/u/4126707?v=4&s=117"></a></td><td><a href=https://github.com/frederikhors><img width="117" alt="frederikhors" src="https://avatars.githubusercontent.com/u/41120635?v=4&s=117"></a></td><td><a href=https://github.com/heocoi><img width="117" alt="heocoi" src="https://avatars.githubusercontent.com/u/13751011?v=4&s=117"></a></td><td><a href=https://github.com/jarey><img width="117" alt="jarey" src="https://avatars.githubusercontent.com/u/5025224?v=4&s=117"></a></td><td><a href=https://github.com/muhammadInam><img width="117" alt="muhammadInam" src="https://avatars.githubusercontent.com/u/7801708?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/rettgerst><img width="117" alt="rettgerst" src="https://avatars.githubusercontent.com/u/11684948?v=4&s=117"></a></td><td><a href=https://github.com/mkabatek><img width="117" alt="mkabatek" src="https://avatars.githubusercontent.com/u/1764486?v=4&s=117"></a></td><td><a href=https://github.com/jukakoski><img width="117" alt="jukakoski" src="https://avatars.githubusercontent.com/u/52720967?v=4&s=117"></a></td><td><a href=https://github.com/olemoign><img width="117" alt="olemoign" src="https://avatars.githubusercontent.com/u/11632871?v=4&s=117"></a></td><td><a href=https://github.com/btrice><img width="117" alt="btrice" src="https://avatars.githubusercontent.com/u/4358225?v=4&s=117"></a></td><td><a href=https://github.com/5idereal><img width="117" alt="5idereal" src="https://avatars.githubusercontent.com/u/30827929?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/AndrwM><img width="117" alt="AndrwM" src="https://avatars.githubusercontent.com/u/565743?v=4&s=117"></a></td><td><a href=https://github.com/behnammodi><img width="117" alt="behnammodi" src="https://avatars.githubusercontent.com/u/1549069?v=4&s=117"></a></td><td><a href=https://github.com/BePo65><img width="117" alt="BePo65" src="https://avatars.githubusercontent.com/u/6582465?v=4&s=117"></a></td><td><a href=https://github.com/bradedelman><img width="117" alt="bradedelman" src="https://avatars.githubusercontent.com/u/124367?v=4&s=117"></a></td><td><a href=https://github.com/camiloforero><img width="117" alt="camiloforero" src="https://avatars.githubusercontent.com/u/6606686?v=4&s=117"></a></td><td><a href=https://github.com/command-tab><img width="117" alt="command-tab" src="https://avatars.githubusercontent.com/u/3069?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/craig-jennings><img width="117" alt="craig-jennings" src="https://avatars.githubusercontent.com/u/1683368?v=4&s=117"></a></td><td><a href=https://github.com/davekiss><img width="117" alt="davekiss" src="https://avatars.githubusercontent.com/u/1256071?v=4&s=117"></a></td><td><a href=https://github.com/denysdesign><img width="117" alt="denysdesign" src="https://avatars.githubusercontent.com/u/1041797?v=4&s=117"></a></td><td><a href=https://github.com/ethanwillis><img width="117" alt="ethanwillis" src="https://avatars.githubusercontent.com/u/182492?v=4&s=117"></a></td><td><a href=https://github.com/frobinsonj><img width="117" alt="frobinsonj" src="https://avatars.githubusercontent.com/u/16726902?v=4&s=117"></a></td><td><a href=https://github.com/richartkeil><img width="117" alt="richartkeil" src="https://avatars.githubusercontent.com/u/8680858?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/paescuj><img width="117" alt="paescuj" src="https://avatars.githubusercontent.com/u/5363448?v=4&s=117"></a></td><td><a href=https://github.com/richmeij><img width="117" alt="richmeij" src="https://avatars.githubusercontent.com/u/9741858?v=4&s=117"></a></td><td><a href=https://github.com/msand><img width="117" alt="msand" src="https://avatars.githubusercontent.com/u/1131362?v=4&s=117"></a></td><td><a href=https://github.com/martiuslim><img width="117" alt="martiuslim" src="https://avatars.githubusercontent.com/u/17944339?v=4&s=117"></a></td><td><a href=https://github.com/Martin005><img width="117" alt="Martin005" src="https://avatars.githubusercontent.com/u/10096404?v=4&s=117"></a></td><td><a href=https://github.com/mskelton><img width="117" alt="mskelton" src="https://avatars.githubusercontent.com/u/25914066?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/mactavishz><img width="117" alt="mactavishz" src="https://avatars.githubusercontent.com/u/12948083?v=4&s=117"></a></td><td><a href=https://github.com/lafe><img width="117" alt="lafe" src="https://avatars.githubusercontent.com/u/4070008?v=4&s=117"></a></td><td><a href=https://github.com/dogrocker><img width="117" alt="dogrocker" src="https://avatars.githubusercontent.com/u/8379027?v=4&s=117"></a></td><td><a href=https://github.com/jedwood><img width="117" alt="jedwood" src="https://avatars.githubusercontent.com/u/369060?v=4&s=117"></a></td><td><a href=https://github.com/jasonbosco><img width="117" alt="jasonbosco" src="https://avatars.githubusercontent.com/u/458383?v=4&s=117"></a></td><td><a href=https://github.com/ghasrfakhri><img width="117" alt="ghasrfakhri" src="https://avatars.githubusercontent.com/u/4945963?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/geertclerx><img width="117" alt="geertclerx" src="https://avatars.githubusercontent.com/u/1381327?v=4&s=117"></a></td><td><a href=https://github.com/eman8519><img width="117" alt="eman8519" src="https://avatars.githubusercontent.com/u/2380804?v=4&s=117"></a></td><td><a href=https://github.com/luarmr><img width="117" alt="luarmr" src="https://avatars.githubusercontent.com/u/817416?v=4&s=117"></a></td><td><a href=https://github.com/raulibanez><img width="117" alt="raulibanez" src="https://avatars.githubusercontent.com/u/1070825?v=4&s=117"></a></td><td><a href=https://github.com/refo><img width="117" alt="refo" src="https://avatars.githubusercontent.com/u/1114116?v=4&s=117"></a></td><td><a href=https://github.com/SxDx><img width="117" alt="SxDx" src="https://avatars.githubusercontent.com/u/2004247?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/robwilson1><img width="117" alt="robwilson1" src="https://avatars.githubusercontent.com/u/7114944?v=4&s=117"></a></td><td><a href=https://github.com/scherroman><img width="117" alt="scherroman" src="https://avatars.githubusercontent.com/u/7923938?v=4&s=117"></a></td><td><a href=https://github.com/Tashows><img width="117" alt="Tashows" src="https://avatars.githubusercontent.com/u/16656928?v=4&s=117"></a></td><td><a href=https://github.com/Pzoco><img width="117" alt="Pzoco" src="https://avatars.githubusercontent.com/u/3101348?v=4&s=117"></a></td><td><a href=https://github.com/ppadmavilasom><img width="117" alt="ppadmavilasom" src="https://avatars.githubusercontent.com/u/11167452?v=4&s=117"></a></td><td><a href=https://github.com/phillipalexander><img width="117" alt="phillipalexander" src="https://avatars.githubusercontent.com/u/1577682?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/craig-jennings><img width="117" alt="craig-jennings" src="https://avatars.githubusercontent.com/u/1683368?v=4&s=117"></a></td><td><a href=https://github.com/davekiss><img width="117" alt="davekiss" src="https://avatars.githubusercontent.com/u/1256071?v=4&s=117"></a></td><td><a href=https://github.com/denysdesign><img width="117" alt="denysdesign" src="https://avatars.githubusercontent.com/u/1041797?v=4&s=117"></a></td><td><a href=https://github.com/ethanwillis><img width="117" alt="ethanwillis" src="https://avatars.githubusercontent.com/u/182492?v=4&s=117"></a></td><td><a href=https://github.com/frobinsonj><img width="117" alt="frobinsonj" src="https://avatars.githubusercontent.com/u/16726902?v=4&s=117"></a></td><td><a href=https://github.com/richmeij><img width="117" alt="richmeij" src="https://avatars.githubusercontent.com/u/9741858?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/richartkeil><img width="117" alt="richartkeil" src="https://avatars.githubusercontent.com/u/8680858?v=4&s=117"></a></td><td><a href=https://github.com/paescuj><img width="117" alt="paescuj" src="https://avatars.githubusercontent.com/u/5363448?v=4&s=117"></a></td><td><a href=https://github.com/msand><img width="117" alt="msand" src="https://avatars.githubusercontent.com/u/1131362?v=4&s=117"></a></td><td><a href=https://github.com/martiuslim><img width="117" alt="martiuslim" src="https://avatars.githubusercontent.com/u/17944339?v=4&s=117"></a></td><td><a href=https://github.com/Martin005><img width="117" alt="Martin005" src="https://avatars.githubusercontent.com/u/10096404?v=4&s=117"></a></td><td><a href=https://github.com/mskelton><img width="117" alt="mskelton" src="https://avatars.githubusercontent.com/u/25914066?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/mactavishz><img width="117" alt="mactavishz" src="https://avatars.githubusercontent.com/u/12948083?v=4&s=117"></a></td><td><a href=https://github.com/lafe><img width="117" alt="lafe" src="https://avatars.githubusercontent.com/u/4070008?v=4&s=117"></a></td><td><a href=https://github.com/dogrocker><img width="117" alt="dogrocker" src="https://avatars.githubusercontent.com/u/8379027?v=4&s=117"></a></td><td><a href=https://github.com/jedwood><img width="117" alt="jedwood" src="https://avatars.githubusercontent.com/u/369060?v=4&s=117"></a></td><td><a href=https://github.com/geertclerx><img width="117" alt="geertclerx" src="https://avatars.githubusercontent.com/u/1381327?v=4&s=117"></a></td><td><a href=https://github.com/jasonbosco><img width="117" alt="jasonbosco" src="https://avatars.githubusercontent.com/u/458383?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/ghasrfakhri><img width="117" alt="ghasrfakhri" src="https://avatars.githubusercontent.com/u/4945963?v=4&s=117"></a></td><td><a href=https://github.com/rossng><img width="117" alt="rossng" src="https://avatars.githubusercontent.com/u/565371?v=4&s=117"></a></td><td><a href=https://github.com/scherroman><img width="117" alt="scherroman" src="https://avatars.githubusercontent.com/u/7923938?v=4&s=117"></a></td><td><a href=https://github.com/robwilson1><img width="117" alt="robwilson1" src="https://avatars.githubusercontent.com/u/7114944?v=4&s=117"></a></td><td><a href=https://github.com/SxDx><img width="117" alt="SxDx" src="https://avatars.githubusercontent.com/u/2004247?v=4&s=117"></a></td><td><a href=https://github.com/refo><img width="117" alt="refo" src="https://avatars.githubusercontent.com/u/1114116?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/raulibanez><img width="117" alt="raulibanez" src="https://avatars.githubusercontent.com/u/1070825?v=4&s=117"></a></td><td><a href=https://github.com/luarmr><img width="117" alt="luarmr" src="https://avatars.githubusercontent.com/u/817416?v=4&s=117"></a></td><td><a href=https://github.com/eman8519><img width="117" alt="eman8519" src="https://avatars.githubusercontent.com/u/2380804?v=4&s=117"></a></td><td><a href=https://github.com/Pzoco><img width="117" alt="Pzoco" src="https://avatars.githubusercontent.com/u/3101348?v=4&s=117"></a></td><td><a href=https://github.com/ppadmavilasom><img width="117" alt="ppadmavilasom" src="https://avatars.githubusercontent.com/u/11167452?v=4&s=117"></a></td><td><a href=https://github.com/phillipalexander><img width="117" alt="phillipalexander" src="https://avatars.githubusercontent.com/u/1577682?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/pmusaraj><img width="117" alt="pmusaraj" src="https://avatars.githubusercontent.com/u/368961?v=4&s=117"></a></td><td><a href=https://github.com/pedrofs><img width="117" alt="pedrofs" src="https://avatars.githubusercontent.com/u/56484?v=4&s=117"></a></td><td><a href=https://github.com/plneto><img width="117" alt="plneto" src="https://avatars.githubusercontent.com/u/5697434?v=4&s=117"></a></td><td><a href=https://github.com/patricklindsay><img width="117" alt="patricklindsay" src="https://avatars.githubusercontent.com/u/7923681?v=4&s=117"></a></td><td><a href=https://github.com/pascalwengerter><img width="117" alt="pascalwengerter" src="https://avatars.githubusercontent.com/u/16822008?v=4&s=117"></a></td><td><a href=https://github.com/ParsaArvanehPA><img width="117" alt="ParsaArvanehPA" src="https://avatars.githubusercontent.com/u/62149413?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/taj><img width="117" alt="taj" src="https://avatars.githubusercontent.com/u/16062635?v=4&s=117"></a></td><td><a href=https://github.com/strayer><img width="117" alt="strayer" src="https://avatars.githubusercontent.com/u/310624?v=4&s=117"></a></td><td><a href=https://github.com/sjauld><img width="117" alt="sjauld" src="https://avatars.githubusercontent.com/u/8232503?v=4&s=117"></a></td><td><a href=https://github.com/steverob><img width="117" alt="steverob" src="https://avatars.githubusercontent.com/u/1220480?v=4&s=117"></a></td><td><a href=https://github.com/amaitu><img width="117" alt="amaitu" src="https://avatars.githubusercontent.com/u/15688439?v=4&s=117"></a></td><td><a href=https://github.com/quigebo><img width="117" alt="quigebo" src="https://avatars.githubusercontent.com/u/741?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/waptik><img width="117" alt="waptik" src="https://avatars.githubusercontent.com/u/1687551?v=4&s=117"></a></td><td><a href=https://github.com/SpazzMarticus><img width="117" alt="SpazzMarticus" src="https://avatars.githubusercontent.com/u/5716457?v=4&s=117"></a></td><td><a href=https://github.com/szh><img width="117" alt="szh" src="https://avatars.githubusercontent.com/u/546965?v=4&s=117"></a></td><td><a href=https://github.com/sergei-zelinsky><img width="117" alt="sergei-zelinsky" src="https://avatars.githubusercontent.com/u/19428086?v=4&s=117"></a></td><td><a href=https://github.com/sebasegovia01><img width="117" alt="sebasegovia01" src="https://avatars.githubusercontent.com/u/35777287?v=4&s=117"></a></td><td><a href=https://github.com/sdebacker><img width="117" alt="sdebacker" src="https://avatars.githubusercontent.com/u/134503?v=4&s=117"></a></td></tr>

+ 2 - 1
docs/README.md

@@ -1,3 +1,4 @@
 # Uppy documentation
 
-To build the documentation, see <https://github.com/transloadit/uppy.io>.
+See instructions for linting this documentation and seeing this documentation in
+the browser in <https://github.com/transloadit/uppy.io>.

+ 1 - 2
docs/sources/companion-plugins/box.mdx

@@ -88,8 +88,7 @@ You can create a Box App on the
 
 Things to note:
 
-- Choose `Custom App` and select the `Standard OAuth 2.0 (User Authentication)`
-  app type.
+- Choose `Custom App` and select the `User Authentication (OAuth 2.0)` app type.
 - You must enable full write access, or you will get
   [403 when downloading files](https://support.box.com/hc/en-us/community/posts/360049195613-403-error-while-file-download-API-Call)
 

+ 1 - 1
docs/sources/companion-plugins/facebook.mdx

@@ -84,7 +84,7 @@ new Uppy()
 ### Use in Companion
 
 You can create a Facebook App on the
-[Facebook Developers site](https://developers.facebook.com/).
+[Facebook Developers site](https://developers.facebook.com/apps).
 
 The app page has a “Redirect URIs” field. Here, add:
 

+ 50 - 21
docs/sources/companion-plugins/zoom.mdx

@@ -9,8 +9,11 @@ import UppyCdnExample from '/src/components/UppyCdnExample';
 
 # Zoom
 
-The `@uppy/zoom` plugin lets users import files from their
-[Zoom](https://zoom.com) account.
+The `@uppy/zoom` plugin lets users import cloud video recordings from their
+[Zoom](https://zoom.com) account. Note that
+[only licensed](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0063923)
+Zoom accounts can store their recordings in the cloud, so this functionality
+will only be available to users with a paid Zoom account.
 
 :::tip
 
@@ -21,8 +24,8 @@ The `@uppy/zoom` plugin lets users import files from their
 
 ## When should I use this?
 
-When you want to let users import files from their [Zoom](https://zoom.com)
-account.
+When you want to let users import cloud video recordings from their
+[Zoom](https://zoom.com) account.
 
 A [Companion](/docs/companion) instance is required for the Zoom plugin to work.
 Companion handles authentication with Zoom, downloads the files, and uploads
@@ -83,26 +86,52 @@ new Uppy()
 
 ### Use in Companion
 
-Configure the Zoom key and secret. With the standalone Companion server, specify
-environment variables:
+To sign up for API keys, go through the following steps:
 
-```shell
-export COMPANION_ZOOM_KEY="Zoom API key"
-export COMPANION_ZOOM_SECRET="Zoom API secret"
-```
+1. Sign up on [Zoom Marketplace](https://marketplace.zoom.us)
 
-When using the Companion Node.js API, configure these options:
+2. Go to [https://marketplace.zoom.us](https://marketplace.zoom.us). There will
+   be a dropdown in the header called “Develop”. From that dropdown, select
+   “Build app”.
 
-```js
-companion.app({
-	providerOptions: {
-		zoom: {
-			key: 'Zoom API key',
-			secret: 'Zoom API secret',
-		},
-	},
-});
-```
+3. In the “Basic Information” tab, Zoom shows your new “Client ID” and “Client
+   Secret” - copy them.
+
+   With the standalone Companion server, specify environment variables:
+
+   ```shell
+   export COMPANION_ZOOM_KEY="Zoom API key"
+   export COMPANION_ZOOM_SECRET="Zoom API secret"
+   ```
+
+   When using the Companion Node.js API, configure these options:
+
+   ```js
+   companion.app({
+   	providerOptions: {
+   		zoom: {
+   			key: 'Zoom API key',
+   			secret: 'Zoom API secret',
+   		},
+   	},
+   });
+   ```
+
+4. In the “Basic Information” tab, set “OAuth Redirect URL” input field to:
+
+   ```
+   https://$YOUR_COMPANION_HOST_NAME/zoom/redirect
+   ```
+
+   If you are using Transloadit hosted Companion:
+
+   ```
+   https://api2.transloadit.com/companion/zoom/redirect
+   ```
+
+5. In the “Scopes” tab, add “cloud_recording:read:list_user_recordings” and
+   “user:read:user” scopes. If Zoom asks for further permissions when you
+   interact with your Zoom integration - add those too.
 
 ## API
 

+ 3 - 0
package.json

@@ -16,6 +16,9 @@
       "eslint --fix",
       "prettier -w",
       "eslint"
+    ],
+    "*.mdx": [
+      "prettier -w"
     ]
   },
   "remarkConfig": {

+ 8 - 0
packages/@uppy/companion/CHANGELOG.md

@@ -32,6 +32,14 @@ Included in: Uppy v4.0.0-beta.1
 - @uppy/companion: improve error msg (Mikael Finstad / #5010)
 - @uppy/companion: crash if trying to set path to / (Mikael Finstad / #5003)
 
+## 4.13.3
+
+Released: 2024-05-22
+Included in: Uppy v3.25.4
+
+- @uppy/companion: fix google drive gsuite export large size (Milan Nakum / #5144)
+- @uppy/companion: handle ws `'error'` event (Mikael Finstad / #5167)
+
 ## 4.13.2
 
 Released: 2024-05-03

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

@@ -16,7 +16,7 @@ const mockAccessTokenExpiredError = undefined
 // const mockAccessTokenExpiredError = true
 // const mockAccessTokenExpiredError = ''
 
-const DRIVE_FILE_FIELDS = 'kind,id,imageMediaMetadata,name,mimeType,ownedByMe,size,modifiedTime,iconLink,thumbnailLink,teamDriveId,videoMediaMetadata,shortcutDetails(targetId,targetMimeType)'
+const DRIVE_FILE_FIELDS = 'kind,id,imageMediaMetadata,name,mimeType,ownedByMe,size,modifiedTime,iconLink,thumbnailLink,teamDriveId,videoMediaMetadata,exportLinks,shortcutDetails(targetId,targetMimeType)'
 const DRIVE_FILES_FIELDS = `kind,nextPageToken,incompleteSearch,files(${DRIVE_FILE_FIELDS})`
 // using wildcard to get all 'drive' fields because specifying fields seems no to work for the /drives endpoint
 const SHARED_DRIVE_FIELDS = '*'
@@ -138,14 +138,29 @@ class Drive extends Provider {
     return this.#withErrorHandling('provider.drive.download.error', async () => {
       const client = await getClient({ token })
 
-      const { mimeType, id } = await getStats({ id: idIn, token })
+      const { mimeType, id, exportLinks } = await getStats({ id: idIn, token })
 
       let stream
 
       if (isGsuiteFile(mimeType)) {
         const mimeType2 = getGsuiteExportType(mimeType)
         logger.info(`calling google file export for ${id} to ${mimeType2}`, 'provider.drive.export')
-        stream = client.stream.get(`files/${encodeURIComponent(id)}/export`, { searchParams: { supportsAllDrives: true, mimeType: mimeType2 }, responseType: 'json' })
+
+        // GSuite files exported with large converted size results in error using standard export method.
+        // Error message: "This file is too large to be exported.".
+        // Issue logged in Google APIs: https://github.com/googleapis/google-api-nodejs-client/issues/3446
+        // Implemented based on the answer from StackOverflow: https://stackoverflow.com/a/59168288
+        const mimeTypeExportLink = exportLinks?.[mimeType2]
+        if (mimeTypeExportLink) {
+          const gSuiteFilesClient = got.extend({
+            headers: {
+              authorization: `Bearer ${token}`,
+            },
+          })
+          stream = gSuiteFilesClient.stream.get(mimeTypeExportLink, { responseType: 'json' })
+        } else {
+          stream = client.stream.get(`files/${encodeURIComponent(id)}/export`, { searchParams: { supportsAllDrives: true, mimeType: mimeType2 }, responseType: 'json' })
+        }
       } else {
         stream = client.stream.get(`files/${encodeURIComponent(id)}`, { searchParams: { alt: 'media', supportsAllDrives: true }, responseType: 'json' })
       }

+ 10 - 0
packages/@uppy/companion/src/server/socket.js

@@ -48,6 +48,16 @@ module.exports = (server) => {
     emitter().emit(`connection:${token}`)
     emitter().on(token, send)
 
+    ws.on('error', (err) => {
+      // https://github.com/websockets/ws/issues/1543
+      // https://github.com/websockets/ws/blob/b73b11828d166e9692a9bffe9c01a7e93bab04a8/test/receiver.test.js#L936
+      if (err?.name === 'RangeError' && 'code' in err && err.code === 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH') {
+        logger.error('WebSocket message too large', 'websocket.error', shortenToken(token))
+      } else {
+        logger.error(err, 'websocket.error', shortenToken(token))
+      }
+    })
+
     ws.on('message', (jsonData) => {
       const data = JSON.parse(jsonData.toString())
       // whitelist triggered actions

+ 1 - 1
packages/@uppy/companion/test/__tests__/providers.js

@@ -157,7 +157,7 @@ describe('list provider files', () => {
       kind: 'drive#driveList', drives: [],
     })
 
-    nock('https://www.googleapis.com').get('/drive/v3/files?fields=kind%2CnextPageToken%2CincompleteSearch%2Cfiles%28kind%2Cid%2CimageMediaMetadata%2Cname%2CmimeType%2CownedByMe%2Csize%2CmodifiedTime%2CiconLink%2CthumbnailLink%2CteamDriveId%2CvideoMediaMetadata%2CshortcutDetails%28targetId%2CtargetMimeType%29%29&q=%28%27root%27+in+parents%29+and+trashed%3Dfalse&pageSize=1000&orderBy=folder%2Cname&includeItemsFromAllDrives=true&supportsAllDrives=true').reply(200, {
+    nock('https://www.googleapis.com').get('/drive/v3/files?fields=kind%2CnextPageToken%2CincompleteSearch%2Cfiles%28kind%2Cid%2CimageMediaMetadata%2Cname%2CmimeType%2CownedByMe%2Csize%2CmodifiedTime%2CiconLink%2CthumbnailLink%2CteamDriveId%2CvideoMediaMetadata%2CexportLinks%2CshortcutDetails%28targetId%2CtargetMimeType%29%29&q=%28%27root%27+in+parents%29+and+trashed%3Dfalse&pageSize=1000&orderBy=folder%2Cname&includeItemsFromAllDrives=true&supportsAllDrives=true').reply(200, {
       kind: 'drive#fileList',
       nextPageToken: defaults.NEXT_PAGE_TOKEN,
       files: [

+ 1 - 1
packages/@uppy/companion/test/fixtures/drive.js

@@ -6,7 +6,7 @@ module.exports.expects = {}
 module.exports.nockGoogleDriveAboutCall = () => nock('https://www.googleapis.com').get((uri) => uri.includes('about')).reply(200, { user: { emailAddress: 'john.doe@transloadit.com' } })
 
 module.exports.nockGoogleDownloadFile = ({ times = 1 } = {}) => {
-  nock('https://www.googleapis.com').get(`/drive/v3/files/${defaults.ITEM_ID}?fields=kind%2Cid%2CimageMediaMetadata%2Cname%2CmimeType%2CownedByMe%2Csize%2CmodifiedTime%2CiconLink%2CthumbnailLink%2CteamDriveId%2CvideoMediaMetadata%2CshortcutDetails%28targetId%2CtargetMimeType%29&supportsAllDrives=true`).times(times).reply(200, {
+  nock('https://www.googleapis.com').get(`/drive/v3/files/${defaults.ITEM_ID}?fields=kind%2Cid%2CimageMediaMetadata%2Cname%2CmimeType%2CownedByMe%2Csize%2CmodifiedTime%2CiconLink%2CthumbnailLink%2CteamDriveId%2CvideoMediaMetadata%2CexportLinks%2CshortcutDetails%28targetId%2CtargetMimeType%29&supportsAllDrives=true`).times(times).reply(200, {
     kind: 'drive#file',
     id: defaults.ITEM_ID,
     name: 'MY DUMMY FILE NAME.mp4',

+ 6 - 0
packages/@uppy/svelte/CHANGELOG.md

@@ -14,6 +14,12 @@ Included in: Uppy v4.0.0-beta.1
 
 - @uppy/svelte: remove UMD output and make it use newer types (Antoine du Hamel / #5023)
 
+## 3.1.5
+
+Released: 2024-05-22
+Included in: Uppy v3.25.4
+
+- @uppy/svelte: do not attempt removing plugin before it's created (Antoine du Hamel / #5186)
 
 ## 3.1.4
 

+ 1 - 1
packages/@uppy/svelte/src/components/Dashboard.svelte

@@ -23,7 +23,7 @@
     plugin = uppy.getPlugin(options.id) as DashboardPlugin<M, B>;
   }
   const uninstallPlugin = (uppyInstance: Uppy<M, B> = uppy) => {
-    uppyInstance.removePlugin(plugin);
+    if (plugin != null) uppyInstance.removePlugin(plugin);
   }
 
   onMount(() => installPlugin())

+ 1 - 1
packages/@uppy/svelte/src/components/DashboardModal.svelte

@@ -26,7 +26,7 @@
     if(open) plugin.openModal();
   }
   const uninstallPlugin = (uppyInstance: Uppy<M, B> = uppy) => {
-    uppyInstance.removePlugin(plugin);
+    if (plugin != null) uppyInstance.removePlugin(plugin);
   }
 
   onMount(() => installPlugin())

+ 1 - 1
packages/@uppy/svelte/src/components/DragDrop.svelte

@@ -21,7 +21,7 @@
     plugin = uppy.getPlugin(options.id) as DragDropPlugin<M, B>;
   }
   const uninstallPlugin = (uppyInstance: Uppy<M, B> = uppy) => {
-    uppyInstance.removePlugin(plugin);
+    if (plugin != null) uppyInstance.removePlugin(plugin);
   }
 
   onMount(() => installPlugin())

+ 1 - 1
packages/@uppy/svelte/src/components/ProgressBar.svelte

@@ -21,7 +21,7 @@
     plugin = uppy.getPlugin(options.id) as ProgressBarPlugin<M, B>;
   }
   const uninstallPlugin = (uppyInstance: Uppy<M, B> = uppy) => {
-    uppyInstance.removePlugin(plugin);
+    if (plugin != null) uppyInstance.removePlugin(plugin);
   }
 
   onMount(() => installPlugin())

+ 1 - 1
packages/@uppy/svelte/src/components/StatusBar.svelte

@@ -21,7 +21,7 @@
     plugin = uppy.getPlugin(options.id) as StatusBarPlugin<M, B>;
   }
   const uninstallPlugin = (uppyInstance: Uppy<M, B> = uppy) => {
-    uppyInstance.removePlugin(plugin);
+    if (plugin != null) uppyInstance.removePlugin(plugin);
   }
 
   onMount(() => installPlugin())

+ 7 - 0
packages/@uppy/tus/CHANGELOG.md

@@ -14,6 +14,13 @@ Included in: Uppy v4.0.0-beta.1
 
 - @uppy/aws-s3-multipart,@uppy/tus,@uppy/utils,@uppy/xhr-upload: Make `allowedMetaFields` consistent (Merlijn Vos / #5011)
 
+## 3.5.5
+
+Released: 2024-05-22
+Included in: Uppy v3.25.4
+
+- @uppy/tus: fix no headers passed to companion if argument is a function (netdown / #5182)
+
 ## 3.5.1
 
 Released: 2024-02-19

+ 4 - 0
packages/@uppy/tus/src/index.ts

@@ -546,6 +546,10 @@ export default class Tus<M extends Meta, B extends Body> extends BasePlugin<
       Object.assign(opts, file.tus)
     }
 
+    if (typeof opts.headers === 'function') {
+      opts.headers = opts.headers(file)
+    }
+
     return {
       ...file.remote?.body,
       endpoint: opts.endpoint,

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 286 - 286
yarn.lock


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác