Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@uppy/tus: add file argument to onBeforeRequest #3984

Merged
merged 1 commit into from Aug 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/@uppy/tus/src/index.js
Expand Up @@ -217,7 +217,7 @@ export default class Tus extends BasePlugin {

let userProvidedPromise
if (typeof opts.onBeforeRequest === 'function') {
userProvidedPromise = opts.onBeforeRequest(req)
userProvidedPromise = opts.onBeforeRequest(req, file)
}

if (hasProperty(queuedRequest, 'shouldBeRequeued')) {
Expand Down
6 changes: 4 additions & 2 deletions packages/@uppy/tus/types/index.d.ts
@@ -1,9 +1,10 @@
import type { PluginOptions, BasePlugin } from '@uppy/core'
import type { UploadOptions } from 'tus-js-client'
import type { PluginOptions, BasePlugin, UppyFile } from '@uppy/core'
import type { UploadOptions, HttpRequest } from 'tus-js-client'

type TusUploadOptions = Pick<UploadOptions, Exclude<keyof UploadOptions,
| 'fingerprint'
| 'metadata'
| 'onBeforeRequest'
| 'onProgress'
| 'onChunkComplete'
| 'onShouldRetry'
Expand All @@ -21,6 +22,7 @@ export interface TusOptions extends PluginOptions, TusUploadOptions {
useFastRemoteRetry?: boolean
withCredentials?: boolean
onShouldRetry?: (err: Error | undefined, retryAttempt: number, options: TusOptions, next: Next) => boolean
onBeforeRequest?: (req: HttpRequest, file: UppyFile) => Promise<void>
}

declare class Tus extends BasePlugin<TusOptions> {}
Expand Down
6 changes: 5 additions & 1 deletion website/src/docs/tus.md
Expand Up @@ -37,7 +37,7 @@ const { Tus } = Uppy

## Options

**Note**: all options are passed to `tus-js-client` and we document the ones here that we added or changed. This means you can also pass functions like [`onBeforeRequest`](https://github.com/tus/tus-js-client/blob/master/docs/api.md#onbeforerequest) and [`onAfterResponse`](https://github.com/tus/tus-js-client/blob/master/docs/api.md#onafterresponse).
**Note**: all options are passed to `tus-js-client` and we document the ones here that we added or changed. This means you can also pass functions like [`onAfterResponse`](https://github.com/tus/tus-js-client/blob/master/docs/api.md#onafterresponse).

We recommended taking a look at the [API reference](https://github.com/tus/tus-js-client/blob/master/docs/api.md) from `tus-js-client` to know what is supported.

Expand Down Expand Up @@ -91,6 +91,10 @@ When uploading a chunk fails, automatically try again after the millisecond inte

Set to `null` to disable automatic retries, and fail instantly if any chunk fails to upload.

### `onBeforeRequest(req, file)`

Behaves like the [`onBeforeRequest`](https://github.com/tus/tus-js-client/blob/master/docs/api.md#onbeforerequest) function from `tus-js-client` but with the added `file` argument.

### `onShouldRetry: (err, retryAttempt, options, next) => next(err)`

When an upload fails `onShouldRetry` is called with the error and the default retry logic as the second argument. The default retry logic is an [exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff) algorithm triggered on HTTP 429 (Too Many Requests) errors. Meaning if your server (or proxy) returns HTTP 429 because it’s being overloaded, @uppy/tus will find the ideal sweet spot to keep uploading without overloading.
Expand Down