Commit graph

112 commits

Author SHA1 Message Date
Merlijn Vos
6e65cd8c51
Import types consistently from @uppy/core (#5589)
* Import types consistently from @uppy/core

* Add new eslint rule

* Clean up exports
2025-01-09 11:03:43 +01:00
Merlijn Vos
3e2aa9f3c8
Use .js(x) for all imports instead .ts(x) (#5573) 2025-01-06 13:29:55 +01:00
Mikael Finstad
24fd4158a9
Companion stream upload unknown size files (#5489)
* stream upload unknown size files

behind a new option streamingUploadSizeless
COMPANION_STREAMING_UPLOAD_SIZELESS
for tus

* allow for all upload protocols

seems to be working
closes #5305

* refactor

and fix bug where progress was not always emitted

* fix type

* fix progress throttling

only do it on total progress

* Improve progress in UI

- only show progress percent and total bytes for files that we know the size of. (but all files will still be included in number of files)
- use `null` as an unknown value for progress and ETA, allowing us to remove ETA from UI when unknown
- `percentage` make use of `undefined` when progress is not yet known - don't show percentage in UI when unknown
- add a new state field `progress` that's the same as `totalProgress` but can also be `null`

* fix build error

* format

* fix progress when upload complete

* use execa for companion load balancer

if not, then it leaves zombie companion instances running in the background when e2e stops
have to be manually killed before running e2e again

* update docs and tests for new state.progress

* revert progress/totalProgress

* improve doc

* remove option streamingUploadSizeless

we agreed that this can be considered not a breaking change

* change progress the to "of unknown"

* revert

* remove companion doc

* add e2e test
2024-12-07 10:30:00 +08:00
Mikael Finstad
8ebdf73c68
Fix allowed origins (#5536)
* fix typo

* escape regex in default companionAllowedHosts

- also fail early if invalid regex supplied
- and add unit tests

* Remove todo comment

Co-authored-by: Mikael Finstad <finstaden@gmail.com>

---------

Co-authored-by: Merlijn Vos <merlijn@soverin.net>
2024-12-04 23:04:42 +08:00
Mikael Finstad
afd4befee2
Google Picker (#5443)
* initial poc

* improvements

- split into two plugins
- implement photos picker
- auto login
- save access token in local storage
- document
- handle photos/files picked and send to companion
- add new hook useStore for making it easier to use localStorage data in react
- add new hook useUppyState for making it easier to use uppy state from react
- add new hook useUppyPluginState for making it easier to plugin state from react
- fix css error

* implement picker in companion

* type todo

* fix ts error

which occurs in dev when js has been built before build:ts gets called

* reuse docs

* imrpve type safety

* simplify async wrapper

* improve doc

* fix lint

* fix build error

* check if token is valid

* fix broken logging code

* pull logic out from react component

* remove docs

* improve auth ui

* fix bug

* remove unused useUppyState

* try to fix build error
2024-12-02 18:34:50 +08:00
Merlijn Vos
38bf2a720c
@uppy/remote-sources: support companionKeysParams (#5434)
* @uppy/remote-sources: support companionKeysParams

* fix doc reference
2024-08-28 16:29:39 +02:00
Antoine du Hamel
9e69b7fc26
meta: enforce .ts extension for relative import types (#5393) 2024-08-13 16:08:35 +02:00
Antoine du Hamel
489ca6de55
meta: enforce use of extension in import type declarations (#5316) 2024-07-09 14:35:58 +02:00
Mikael Finstad
7891bf1950
don't close socket when pausing (#4821)
* don't close socket when pausing

because it prevented us from canceling an upload that is paused
note that we here sacrifice the ability to pause uploads and have other uploads take over the paused upload's rate limit queue spot.
this is sacrificed because we will soon remove the ability to pause/resume uploads anyways

(cherry picked from commit e4dbe77d2f)

* add migration guide entry
2024-07-08 11:58:08 +02:00
Antoine du Hamel
37ad27d5d1
Merge branch main 2024-07-02 16:15:36 +02:00
Antoine du Hamel
e849827824
@uppy/companion: add oauthOrigin option (#5297)
Co-authored-by: Mikael Finstad <finstaden@gmail.com>
2024-07-02 15:33:55 +02:00
Evgenia Karunus
4dc28609d7
Provider views rewrite (.files, .folders => .partialTree) (#5050)
* ProviderView.tsx - fix onedrive breadcrumbs

* providers - correct ch-unch-indeterminate states

* providers - made .breadcrumbs derived from .partialTree

* everywhere - { files, folders, isChecked } => .partialTree

GoogleDrive
- travelling down into folders works
- checking a file works
- breadcrumbs DONT work

* GoogleDrive - made breadcrumbs work

* .getFolder() - remove the `name` argument

* <Breadcrumbs/> - refactors "/"

* Instagram - made files get fetched onScroll

* clearSelection() - recover the functionality

* GoogleDrive - recover custom `.toggleCheckbox()` functionality

* providers - recover `.isDisabled` functionality

* <SearchProviderView/> - made Unsplash use .partialTree

* Facebook - change `.files, .folders` => `.partialTree`

* everywhere - we don't need to ! `partialTreeFile.data` anymore

* <ProviderView/> - implement folder caching

* <View/> - enable shift-clicking

* everywhere - get rid of unnecessary `.getNextFolder()`

* everywhere - fixing types

* <ProviderView/> - rename `requestPath` to `folderId`

* all providers - get rid of `.onFirstRender()`

* provider views - get rid of `.onFirstRender()`

* <ProviderView/> - make the root folder cacheable too

* TEMP - setup for working with FOLDERS + LAZY_LOADING

* <ProviderView/> - get rid of `.#listFilesAndFolders`

* <ProviderView/> - make `this.nextPagePath` per-folder

* everywhere - more refined types

* types - reintroduce `StatusInPartialTree`

* <SearchProviderView/> - made Unsplash work with the new structure

* <ProviderView/> - preemptive cleaning of `.absDirPath` and `.relDirPath`

* <ProviderView/> - give `.nextPagePath` a rigorous type

* <ProviderView/> - make `.nextPagePath` & `.cached` a composite key

* <ListItem/> - remove unnecessary indirection level

* css - factor out `.statusClassName`

* everywhere - refactor `.validateRestrictions()`

* nOfSelectedFiles - make "Selected (n)" as smart as possible

* <ProviderViews/> - prevent shift-clicking from highlighting file names

* `.validateRestrictions()` - make it accept a `CompanionFile` instead of `PartialTree`'s file

* `.getFolder()` - simplify code

* everywhere - account for `restrictions` in `.partialTree`

* `PartialTreeUtils.ts` - factor out `getPartialTreeAfterTogglingCheckboxes()`

* `PartialTreeUtils.ts` - factor out `clickOnFolder()`

* `PartialTreeUtils.ts` - factor out `getPartialTreeAfterScroll()`

* `PartialTreeUtils.ts` - rename methods

* `.donePicking()` - implement using recursion

* `.donePicking()` - integrate with `<ProviderView/>`

* `donePicking()` - show notifications after addition

* `#list()` - get rid of unnecessary indirection

* ProviderView.tsx - add `signal` everywhere, reduce try/catch indents everywhere

* `handleError()` - make error handling uniform

* `state.isSearchVisible` - remove, it's just not used anywhere

* state - reuse default state

* state - reset state on close panel (like we discussed in the uppy call)

* methods - remove unnecessary indirection in state setting

* `<CloseWrapper/>` - remove CloseWrappers, this is unnecessary indirection now too

* `this.requestClientId` - remove, again - this was unnecessary indirection

* `getTagFile()` - factor out into a separate file

* `recordShiftKeyPress()` - fix chaotic shift-clicking in Grid providers, remove endless prop drilling while we're at it

* `getNOfSelectedFiles.ts`, `filterItems.ts` - factor out, this removes props drilling

* <Browser/> - pass `displayedPartialTree` right away (because Search&NormalProvider have wildly different logics!)

* `searchTerm`, `filterInput` - we only need one of these of course!

* <SearchProvider/> - fix the issue where `afterToggleCheckbox()` thinks we should always filter by `searchString`

* <SearchProvider/> - remove `this.nextPageQuery`

Also: fix the issue where <SearchProvider/> upon searching for "ocean" and then "pajama" would just be adding pajama pictures after the ocean ones

* <Browser/> - remove unnecessary prop indirection

Typescript didn't actually know some of these props aren't used (removed those now)! It only discovers unused props upon normal props passing, like we do now.

* <SearchFilterInput/> - make the form controlled, hugely simplifies everything

* `filterItems.ts` - move to <ProviderView/>, because it's only used there

* /utils/PartialTreeUtils.ts - put every util in a separate file

* `shouldHandleScroll.ts` - factor out into a util

This brings all references to `this.isHandlingScroll` into a single place, and makes `shouldHandleScroll()` a self-contained simple function

* this.state - make sure state is reset 1. on cancel 2. on close

* `this.xxx` - never leave `this.xxx` variables undefined

* `this.username` - should be in `this.state`

Also - when there is no username, stop showing the little dot

* `SearchProviderPluginState` type - simplify this type, never leave state vars undefined

* <Header/> - remove completely unnecessary indirection, remove unused props

* Facebook.tsx - more sane `viewOptions` code

* providers - properly type `opts`

* `this.isShiftKeyPressed` - move this variable into <Browser/>

* `this.handleError()` - move to /utils

* `this.isHandlingScroll` - move to child classes

* `this.registerRequestClient()` - move to child classes

* `this.lastCheckbox` - move to child classes

* `this.setLoading()` - move to child classes

* `this.validateRestrictions()` - move to utils

* types - fully simplify provider types, remove `View.ts` parent class

* index.d.ts - we're not using `OnFirstRenderer` anymore

* <ProviderView/>, <SearchProviderView/> - more precise typing for options

* package.json - remove nanoid

* GoogleDrive - make shift-clicking work

* everywhere - fix types across uppy

* `afterToggleCheckbox.ts` - less redundant args, pass `ourItem.id` instead of `ourItem`

* tests - create `afterToggleCheckbox()` tests

* `getClickedRange.ts` - decouple `getClickedRange()` from `afterToggleCheckbox()`

* tests - wrote tests for `afterToggleCheckbox.ts`

* tests - wrote tests for `afterClickOnFolder.ts`

* everywhere - finally rename `getFolder` => `openFolder`

* tests - wrote tests for `afterScrollFolder.ts`

* getPaths.ts - make `absDirPath`, `relDirPath` work like in docs & add tests for that

* injectPaths.ts - improve performance

* getTagFile.ts - handle path injection all in one place

* getTagFile.ts - refactor

Just makes it easier to read the structure of TagFile

* fill.ts - `provider.list(currentPath, { signal })` => `apiList`

(remove the dependency on provider, just pass a callback)

* tests - wrote tests for `fill.ts`

* tests - wrote tests for `getNOfSelectedFiles.ts`

* everywhere - change `JSON.stringify()` => `clone()`

* `PartialTreeUtils.ts` - more consistent function naming + alphabetical order in tests

* `donePicking()` - superseded a notification to i18n one

* GoogleDrive - make the shared drive checkable

* `Item.tsx` - standardize names; remove unnecessary question marks from props

* ProviderView.tsx - clicking "Cancel" should make all files "unchecked"

* everywhere - move `document.getSelection()?.removeAllRanges()` to <Browser/> to avoid repetition

* everywhere - standardize names and types of passed props

* <Browser/> - only leave "list of files" to the browser

Moves stuff closer to where it's used, prevents props drilling

* TEMP - easier pageSize for alex to play with

When it's set to 5 pages you have to reduce the browser window to make it scrollable

* everywhere - only handle individual-file restrictions

* everywhere - add aggregate restrictions on top

* SearchProvider, NormalProvider - unite the way we addFiles()

Same notifications, same code, same everything

* `getTagFile.ts` - pass fewer arguments

* `addFiles.ts` - move conversion to tagFiles into `addFiles()`

* `uppy.validateRestrictions()` - remove legacy method

* `uppy.validateAggregateRestrictions()` - make aggregate restricter report aggregate error

* <FooterActions/> css - make aggregate errors look nice

* `PartialTreeUtils/index.test.ts` - accommodate tests to the latest changes

* tests - make all uppy tests work

* prettiness - run `yarn format`

* prettiness - run `yarn lint:fix`

* package.json - add `vitest` as a dev dependency

* eslint - fixing 1

eslint - fixing 2

eslint - fixing 3

* <SearchFilterInput/> - add default props as per eslint

* <SearchFilterInput/> - rename to <SearchInput/>

* eslint - fixing 4 (clone.ts)

* Uppy.ts - rewrite `partialTree` docs

* eslint - fixing 5

* eslint - fixing 6

* `getBreadcrumbs.ts` - factor out

* tests - fixing 7

* everywhere - remove `.toReversed()`, because it's not yet supported in all browsers

* dev/Dashboard.js - restore to pristine version

* prettiness - run `yarn format`

* fixing 8 (`yarn run build:ts`)

* fixing 9 (run `corepack yarn`)

* prettier - undo indentation harm done by prettier

* `getBreadcrumbs()` - add tests, and rewrite to avoid using `.toReversed()`

Clarification: `.toReversed()` is no supported by all browsers

* `<SearchInput/>` - make it work for eslint

* everywhere - remove `eslint-disable react/require-default-props`

* <GridItem/>, <ListItem/> - refactor to avoid prop drilling

* <ListItem/> - disable checkboxes for GoogleDrive team drives

See #5232

* merge (fixing up some lines from the previous merge)

* merge (fixing up some lines from the previous merge)

* everywhere - remove TEMP development values

* `this.validateSingleFile()` - switch to `.restrictionError`

* `afterToggleCheckbox.ts` - refactor, add comments

* `afterToggleCheckbox.ts` - refactor to use ids instead of whole objects

* `afterToggleCheckbox.ts` - try to satisfy prettier

* fixing 10 (try to satisfy `npx webpack`)

* fixing 11 (try to satisfy `npx webpack`)

* Antoine: use Math.min & Math.max in `getClickedRange()`

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>

* fixing 12 (run `yarn run format`)

* `clone.ts` - rename to `shallowClone.ts`

* Antoine: in `package.json`, move `devDependencies` up

* Antoine: rename `getNOfSelectedFiles()` to `getNumberOfSelectedFiles()`

* `getNumberOfSelectedFiles()` - better comments

* Antoine: remove `<form/>` tag

* Antoine: change `{}` to `Object.create(null)`, write tests

* Antoine: `<SearchInput/>` - return dynamic <form/> element

* `<SearchInput/>` - return `buttonCSSClassName`

* `GoogleDrive.tsx` - make team drive checkboxes visible

* merge (more)

* Mifi: update packages/@uppy/provider-views/src/ProviderView/ProviderView.tsx

Co-authored-by: Mikael Finstad <finstaden@gmail.com>

* merge (more changes)

* `Facebook.tsx`, `GooglePhotos.tsx` - render in 'grid' style on per-folder basis

* `<GridItem/>` - use the `.thumbnail` whenever possible (improves image quality, adds video icons)

* `prettier` - ensure `PartialTree` is always strongly indented in tests

---------

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>
Co-authored-by: Mikael Finstad <finstaden@gmail.com>
2024-06-21 04:43:59 +04:00
Mikael Finstad
ba2fb67afe
@uppy/companion-client: do not allow boolean RequestOptions (#5198) 2024-05-30 17:22:48 +02:00
Mikael Finstad
f62ff7bdba
@uppy/companion-client: remove deprecated options (#5198)
`serverUrl` and `serverPattern` were deprecated, this commit removes
them.
2024-05-30 17:22:48 +02:00
Mikael Finstad
dceda79a97
@uppy/companion-client: make supportsRefreshToken default (#5198) 2024-05-30 17:22:48 +02:00
Mikael Finstad
60c513ab7d
@uppy/companion-client: remove optional chaining (#5198) 2024-05-30 17:22:48 +02:00
Mikael Finstad
2db071c893
@uppy/companion-client: remove Socket (#5198) 2024-05-30 17:22:47 +02:00
Merlijn Vos
453eb0f9b5
@uppy/core: pass file to events consistently (#5136) 2024-05-29 13:09:34 +02:00
Antoine du Hamel
f72138ff4b
@uppy/core: remove reason (#5159) 2024-05-23 18:52:48 +02:00
Merlijn Vos
1634263c6b
Use title consistently from locales (#5134) 2024-05-08 12:54:25 +02:00
github-actions[bot]
b8f8f8a9dd
Release: uppy@4.0.0-beta.4 (#5130)
| Package                |      Version | Package                |      Version |
| ---------------------- | ------------ | ---------------------- | ------------ |
| @uppy/angular          | 0.7.0-beta.4 | @uppy/instagram        | 4.0.0-beta.4 |
| @uppy/audio            | 2.0.0-beta.4 | @uppy/onedrive         | 4.0.0-beta.4 |
| @uppy/aws-s3-multipart | 4.0.0-beta.4 | @uppy/provider-views   | 4.0.0-beta.4 |
| @uppy/box              | 3.0.0-beta.4 | @uppy/react            | 4.0.0-beta.4 |
| @uppy/companion        | 5.0.0-beta.4 | @uppy/status-bar       | 4.0.0-beta.4 |
| @uppy/companion-client | 4.0.0-beta.4 | @uppy/store-redux      | 4.0.0-beta.2 |
| @uppy/compressor       | 2.0.0-beta.4 | @uppy/svelte           | 4.0.0-beta.2 |
| @uppy/core             | 4.0.0-beta.4 | @uppy/transloadit      | 4.0.0-beta.4 |
| @uppy/dashboard        | 4.0.0-beta.4 | @uppy/unsplash         | 4.0.0-beta.4 |
| @uppy/drop-target      | 3.0.0-beta.4 | @uppy/url              | 4.0.0-beta.4 |
| @uppy/dropbox          | 4.0.0-beta.4 | @uppy/utils            | 6.0.0-beta.4 |
| @uppy/facebook         | 4.0.0-beta.4 | @uppy/webcam           | 4.0.0-beta.4 |
| @uppy/file-input       | 4.0.0-beta.4 | @uppy/xhr-upload       | 4.0.0-beta.2 |
| @uppy/form             | 4.0.0-beta.2 | @uppy/zoom             | 3.0.0-beta.4 |
| @uppy/google-drive     | 4.0.0-beta.4 | uppy                   | 4.0.0-beta.4 |
| @uppy/image-editor     | 3.0.0-beta.2 |                        |              |

- meta: Upgrade Yarn to 4.x (Merlijn Vos / #4849)
- @uppy/utils: fix fetcher export (Murderlon)
- @uppy/xhr-upload: refactor to use `fetcher` (Merlijn Vos / #5074)
- docs: use StackBlitz for all examples/issue template (Merlijn Vos / #5125)
- meta: Update yarn.lock (Murderlon)
- @uppy/svelte: Add svelte 5 as peer dep (frederikhors / #5122)
- meta: Bump docker/setup-buildx-action from 2 to 3 (dependabot[bot] / #5124)
- meta: Bump actions/checkout from 3 to 4 (dependabot[bot] / #5123)
- @uppy/dashboard,@uppy/provider-views: Remove JSX global type everywhere (Merlijn Vos / #5117)
- @uppy/utils: improve return type of `dataURItoFile` (Antoine du Hamel / #5112)
- @uppy/drop-target: change drop event type to DragEvent (Alireza Heydari / #5107)
- @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111)
- meta: bump Prettier version (Antoine du Hamel / #5114)
- @uppy/provider-views: bring back "loaded X files..." (Mikael Finstad / #5097)
- @uppy/dashboard: fix type of trigger option (Merlijn Vos / #5106)
- meta: fix linter (Antoine du Hamel)
- @uppy/companion: bump Node.js version support matrix (Antoine du Hamel / #5035)
- @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (Merlijn Vos / #5058)
- meta: Bump docker/build-push-action from 3 to 5 (dependabot[bot] / #5105)
- meta: Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (dependabot[bot] / #5102)
- meta: Bump docker/login-action from 2 to 3 (dependabot[bot] / #5101)
- meta: Bump actions/download-artifact from 3 to 4 (dependabot[bot])
- meta: Bump actions/upload-artifact from 3 to 4 (dependabot[bot])
- @uppy/react: remove `useUppy` & reintroduce `useUppyState` (Merlijn Vos / #5059)
- meta: docs: add back markdown files (Antoine du Hamel / #5064)
- meta: fix custom provider example (Merlijn Vos / #5079)
- @uppy/utils: add fetcher (Merlijn Vos / #5073)
- meta: Fix prettier (Murderlon)
- @uppy/dashboard: add missing `x-zip-compress` archive type (Younes / #5081)
- meta: Bump docker/metadata-action from 4 to 5 (dependabot[bot] / #5086)
- meta: Bump actions/setup-node from 3 to 4 (dependabot[bot] / #5087)
- meta: Bump docker/setup-qemu-action from 2 to 3 (dependabot[bot] / #5089)
- meta: bump supercharge/redis-github-action from 1.4.0 to 1.8.0 (dependabot[bot] / #5090)
- meta: bump actions/cache from 3 to 4 (dependabot[bot] / #5088)
- meta: add `dependabot.yml` to keep GHA up-to-date (Antoine du Hamel / #5083)
- @uppy/core: Release: uppy@3.24.2 (github-actions[bot] / #5084)
- @uppy/core: fix `setOptions` not re-rendereing plugin UI (Antoine du Hamel / #5082)
- meta: bump vite from 5.0.12 to 5.0.13 (dependabot[bot] / #5060)
- meta: bump tar from 6.1.11 to 6.2.1 (dependabot[bot] / #5068)
- @uppy/companion,@uppy/file-input: Release: uppy@3.24.1 (github-actions[bot] / #5069)
- @uppy/companion: upgrade redis (Mikael Finstad / #5065)
- meta: fix `watch:*` scripts (Antoine du Hamel / #5046)
- meta: include more packages in `compare_diff` CI (Antoine du Hamel / #5044)
- @uppy/file-input: add missing export (Antoine du Hamel / #5045)
- meta: Bump express from 4.18.1 to 4.19.2 in /packages/@uppy/companion (dependabot[bot] / #5036)
- @uppy/companion: Bump express from 4.18.1 to 4.19.2 (dependabot[bot] / #5037)





| Package                | Version | Package                | Version |
| ---------------------- | ------- | ---------------------- | ------- |
| @uppy/audio            |   1.1.9 | @uppy/instagram        |   3.3.1 |
| @uppy/aws-s3-multipart |  3.11.1 | @uppy/onedrive         |   3.3.1 |
| @uppy/box              |   2.3.1 | @uppy/provider-views   |  3.12.0 |
| @uppy/companion-client |   3.8.1 | @uppy/react            |   3.3.1 |
| @uppy/compressor       |   1.1.3 | @uppy/status-bar       |   3.3.2 |
| @uppy/core             |  3.11.0 | @uppy/svelte           |   3.1.4 |
| @uppy/dashboard        |   3.8.2 | @uppy/transloadit      |   3.6.1 |
| @uppy/drop-target      |   2.1.0 | @uppy/unsplash         |   3.3.1 |
| @uppy/dropbox          |   3.3.1 | @uppy/url              |   3.6.1 |
| @uppy/facebook         |   3.3.1 | @uppy/utils            |   5.9.0 |
| @uppy/file-input       |   3.1.2 | @uppy/webcam           |   3.4.1 |
| @uppy/form             |   3.2.1 | @uppy/xhr-upload       |   3.6.5 |
| @uppy/google-drive     |   3.5.1 | @uppy/zoom             |   2.3.1 |
| @uppy/image-editor     |   2.4.5 | uppy                   |  3.25.0 |

- meta: enforce use of `.js` extension in `import type` declarations (Antoine du Hamel / #5126)
- @uppy/core: add instance ID to generated IDs (Merlijn Vos / #5080)
- @uppy/core: reference updated i18n in Restricter (Merlijn Vos / #5118)
- @uppy/xhr-upload: refactor to use `fetcher` (Merlijn Vos / #5074)
- meta: docs: use StackBlitz for all examples/issue template (Merlijn Vos / #5125)
- meta: Update yarn.lock (Murderlon)
- @uppy/svelte: Add svelte 5 as peer dep (frederikhors / #5122)
- meta: Bump docker/setup-buildx-action from 2 to 3 (dependabot[bot] / #5124)
- meta: Bump actions/checkout from 3 to 4 (dependabot[bot] / #5123)
- @uppy/dashboard,@uppy/provider-views: Remove JSX global type everywhere (Merlijn Vos / #5117)
- @uppy/utils: improve return type of `dataURItoFile` (Antoine du Hamel / #5112)
- @uppy/drop-target: change drop event type to DragEvent (Alireza Heydari / #5107)
- @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111)
- meta: bump Prettier version (Antoine du Hamel / #5114)
- @uppy/provider-views: bring back "loaded X files..." (Mikael Finstad / #5097)
- @uppy/dashboard: fix type of trigger option (Merlijn Vos / #5106)
- meta: fix linter (Antoine du Hamel)
- @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (Merlijn Vos / #5058)
- meta: Bump docker/build-push-action from 3 to 5 (dependabot[bot] / #5105)
- meta: Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (dependabot[bot] / #5102)
- meta: Bump docker/login-action from 2 to 3 (dependabot[bot] / #5101)
- meta: Bump actions/download-artifact from 3 to 4 (dependabot[bot])
- meta: Bump actions/upload-artifact from 3 to 4 (dependabot[bot])
2024-04-29 20:12:59 +00:00
Antoine du Hamel
faceaf0da3
meta: enforce use of .js extension in import type declarations (#5126) 2024-04-29 16:23:28 +02:00
Antoine du Hamel
00405fb24c
fix type imports (#5038)
We sometimes where importing source files, which may not be available in
production. Instead we should target extension-less paths in `lib/`
folders so the generated `.d.ts` files are used.
2024-03-27 14:32:45 +01:00
Murderlon
c8f1af8d12
@uppy/box: refactor to TypeScript (#4979) 2024-03-10 11:22:34 +01:00
Merlijn Vos
9b771f4d7c
Replace Provider.initPlugin with composition (#4977)
Co-authored-by: Antoine du Hamel <antoine@transloadit.com>
2024-02-29 14:18:26 +01:00
Mikael Finstad
8dba0272ab
improvements for #4922 (#4960)
* prevent "any" which disables typechecking

* make body optional in response (because it is)

* add comment
2024-02-28 16:57:16 +08:00
Merlijn Vos
3d8ff79464
@uppy/companion-client: fix body/url on upload-success (#4922)
* @uppy/companion-client: fix body/url on upload-success

* Fix url inside Companion instead

* try/catch JSON.parse
2024-02-22 11:44:46 +01:00
Antoine du Hamel
9fb5162bd2
meta: disable @typescript-eslint/no-non-null-assertion lint rule (#4945) 2024-02-21 13:24:55 +01:00
Antoine du Hamel
89a2fc5d24
remove unnecessary 'use strict' directives (#4943) 2024-02-21 10:49:45 +01:00
Antoine du Hamel
d7e577a449
@uppy/companion-client: type changes for provider-views (#4938) 2024-02-21 10:19:39 +01:00
Antoine du Hamel
448ccc8849
@uppy/companion-client: update types (#4927) 2024-02-20 15:25:33 +01:00
Antoine du Hamel
a0b7d1654e
update UppyFile objects before emitting events (#4928) 2024-02-19 16:25:01 +01:00
Antoine du Hamel
66bd526ab3
meta: validate defaultOptions for stricter option types (#4901) 2024-02-01 14:06:42 +01:00
Merlijn Vos
c51032c9d1
@uppy/xhr-upload: migrate to TS (#4892) 2024-01-29 10:12:26 +01:00
Antoine du Hamel
c0baaef17b
@uppy/companion-client: fix tests and linter (#4890) 2024-01-24 14:51:21 +01:00
Merlijn Vos
a0050bd79f
@uppy/companion-client: migrate to TS (#4864) 2024-01-24 14:19:38 +01:00
Antoine du Hamel
c2cb2a3a58
@uppy/companion-client: fix TypeError
`companionUrl` might be undefined if not provided by the user.
2023-12-13 11:22:04 +01:00
Mikael Finstad
ec4bc58508
Provider user sessions (#4619)
New concept "simple auth" - authentication that happens immediately (in one http request) without redirecting to any third party.

uppyAuthToken initially used to simply contain an encrypted & json encoded OAuth2 access_token for a specific provider. Then we added refresh tokens as well inside uppyAuthToken #4448. Now we also allow storing other state or parameters needed for that specific provider, like username, password, host name, webdav URL etc... This is needed for providers like webdav, ftp etc, where the user needs to give some more input data while authenticating

Companion:
- `providerTokens` has been renamed to `providerUserSession` because it now includes not only tokens, but a user's session with a provider.

Companion `Provider` class:
- New `hasSimpleAuth` static boolean property - whether this provider uses simple auth
- uppyAuthToken expiry default 24hr again for providers that don't support refresh tokens
- make uppyAuthToken expiry configurable per provider - new `authStateExpiry` static property (defaults to 24hr)
- new static property `grantDynamicToUserSession`, allows providers to specify which state from Grant `dynamic` to include into the provider's `providerUserSession`.
2023-12-05 22:55:41 +01:00
Antoine du Hamel
f55b24c378
@uppy/companion-client: avoid unnecessary preflight requests (#4462)
According to https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests, we have so many preflight requests because we add `Uppy-Versions` header and `Content-Type: application/json` to each request. It's particularly not useful for for requests with no body / an empty body because the remote Companion doesn't check `Content-Type`.

It was added in b25f243627, and since f0f1105ef0, it is only used for log 
purposes.

Co-authored-by: Mikael Finstad <finstaden@gmail.com>
2023-12-05 12:30:41 +01:00
Mikael Finstad
9699e58b5a
@uppy/companion-client: fix log type error (#4766)
* fix logging bug

* Update Provider.js
2023-11-21 11:10:40 +01:00
Antoine du Hamel
a67f0ffdf2
@uppy/companion-client: revert breaking change (#4801)
Revert breaking change

This reverts parts of commit 17826da517.
2023-11-20 15:50:44 +01:00
Mikael Finstad
17826da517
Companion+client stability fixes, error handling and retry (#4734)
* respond with 500 if unhandled upload error

400 seems inappropriate

* add todo

* fix companion download error

respond with correct response code when calling /get
and request to the upstream server fail

also add a unit test for this

* forward 429 from provider

allows us to retry it

* rename fn

* add a way to test refresh tokens

* fix race condtiion with refreshing token

* implement retry and fix socket

- Make sure we don't instantiate a new Provider for every file uploaded (reuse the original provider instead) - this caused the refresh token synchronization not to work
- Retry most errors when uploading (`/get`) using companion, but for HTTP, only retry certain HTTP status codes
- Reimplement the websocket code to be more stable and retry as well

* remove unused socket wrapper

* remove useFastRemoteRetry

because it isn't supported in Companion as far as I can tell

* fix error handling

* remove unneeded logic

* apply review suggestion

* retry awaiting for companion socket too

* retry whole operation instead of individually

or else we risk getting stuck retrying just half of the operation, which might never recover

* improvements

- rewrite so we can use p-retry for exponential backoff for socket reconnect too
- improve logging
- simplify/reuse code

* Update packages/@uppy/utils/src/fetchWithNetworkError.js

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>

* Explain requestClient Symbol with comment

Co-authored-by: Mikael Finstad <finstaden@gmail.com>

* Update packages/@uppy/provider-views/src/View.js

* fixes

preventing socket.send when the socket is not in the connected state
catch errors in handlers

* log if trying to refresh with no token

* log whether we got a refresh token

* dont log retrying when in reality not

* always prompt: consent

for google drive

* add signal to post

* refactor away eventmanager

and event handler error catching

* don't fail with upload-error

if a file is canceled

* fix expect

* add capabilities support

* make requestClient non-enumerable

---------

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>
Co-authored-by: Merlijn Vos <merlijn@soverin.net>
2023-11-02 21:31:34 +09:00
Antoine du Hamel
2c432b12cd
test: migrate to Vitest for Uppy core and Uppy plugins (#4700) 2023-09-26 17:23:17 +02:00
Mikael Finstad
b1e4a5b915
fix a refresh token race condition (#4695)
that would be triggered when uploading multiple files in parallell
if a 401 occurs, it would cause multiple refresh-token requests to be fired in parallel
also only call refresh-token if we have a token
and reset the token if refresh-token fails with 401
2023-09-25 18:52:18 +08:00
Merlijn Vos
ef613e6a9f
Move remote file upload logic into companion-client (#4573) 2023-08-24 14:27:28 +02:00
Dominik Schmidt
79ff451a4d
@uppy/companion-client,@uppy/provider-views: make authentication optional (#4556)
* @uppy/companion-client,@uppy/provider-views: make authentication optional in ProviderView

* try different approach

* Move authAborted translation to companion-client

* @uppy/companion-client: do not reject login promise on events from incorrect source, but always return after rejections

While these events should be ignored they might be unrelated and should not reject the whole login

* Revert "Move authAborted translation to companion-client"

This reverts commit ce7f90e455.

* Check unused core locale strings in companion-client

---------

Co-authored-by: Murderlon <merlijn@soverin.net>
2023-08-06 23:05:39 +02:00
Mikael Finstad
ecdecd1dd6
@uppy/provider-views: fix race conditions with folder loading (#4578)
* fix multiple race conditions

multiple race conditions / bugs:
- If you open a folder in e.g. facebook and you scroll down, triggering the infinity scroll, and then go back (one folder up) before the infinity scroll has finished loading, you could end up with the contents of the scrolled folder instead of the previous folder
- if you select a folder structure (e.g. deep structure with many files) and then click "cancel" while loading, it will still continue loading recursively in the background even after cancelled and potentially cause more issues down the road

* Apply suggestions from code review

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>

* merge conditions

---------

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>
Co-authored-by: Murderlon <merlijn@soverin.net>
2023-07-20 15:20:48 +02:00
Merlijn Vos
9efd865a1f
Load Google Drive / OneDrive lists 5-10x faster & always load all files (#4513)
Co-authored-by: Mikael Finstad <finstaden@gmail.com>
Co-authored-by: Artur Paikin <artur@arturpaikin.com>
2023-07-10 10:15:35 +02:00
Mikael Finstad
2c75ddacfe
@uppy/companion: implement refresh for authentication tokens (#4448)
* allow storing multiple tokens

inside uppy auth token

* de-duplicate uploadRemote

by creating a new superclass UploaderPlugin

* pull out requestSocketToken

from MiniXHRUpload

* add class UploaderPlugin

* refactor

* refactor

* refactor/reuse

* refactor/make getAuthToken private

* fix bug

* implement refresh token

for dropbox and google drive

closes #2721

* fix test

* also update auth token cookie
when refreshing token

* fix build error on node 14

* increase auth token expiry

to workaround expiry

* Update packages/@uppy/companion-client/src/RequestClient.js

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>

* make queueRequestSocketToken private

* rename arg

* fix lint

* log error message

* fix s3

* Update packages/@uppy/companion-client/src/Provider.js

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>

---------

Co-authored-by: Antoine du Hamel <antoine@transloadit.com>
2023-06-22 11:18:48 +02:00
Artur Paikin
5ce2da5b4a
@uppy/companion-client: do not open socket more than once
This also has the upside of letting the JS engine garbage collect the
underlying `WebSocket` instance.

Co-authored-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
2023-03-22 12:58:50 +01:00