mirror of
https://github.com/transloadit/uppy.git
synced 2026-07-17 16:50:22 +00:00
Merge stable branch
This commit is contained in:
commit
8090eacdf2
21 changed files with 910 additions and 845 deletions
18
CHANGELOG.md
18
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
|
||||
|
|
|
|||
53
README.md
53
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>
|
||||
|
|
|
|||
|
|
@ -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>.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@
|
|||
"eslint --fix",
|
||||
"prettier -w",
|
||||
"eslint"
|
||||
],
|
||||
"*.mdx": [
|
||||
"prettier -w"
|
||||
]
|
||||
},
|
||||
"remarkConfig": {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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' })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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: [
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue