Skip to content

Commit bfd0c8d

Browse files
committed
fixup! Add stall detection to recover from frozen uploads
1 parent 7f1ed76 commit bfd0c8d

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

lib/options.ts

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,45 +57,39 @@ export interface StallDetectionOptions {
5757
checkInterval: number // How often to check for stalls
5858
}
5959

60-
export type Part = { start: number; end: number }
61-
6260
export interface UploadOptions {
63-
endpoint?: string | null
64-
uploadUrl?: string | null
65-
metadata: Record<string, string>
66-
metadataForPartialUploads?: Record<string, string>
67-
uploadSize?: number | null
68-
onProgress: ((bytesSent: number, bytesTotal: number | null) => void) | null
69-
onChunkComplete:
70-
| ((chunkSize: number, bytesAccepted: number, bytesTotal: number | null) => void)
71-
| null
72-
onSuccess: ((payload: OnSuccessPayload) => void) | null
73-
onError: ((error: Error | DetailedError) => void) | null
74-
onUploadUrlAvailable: (() => void) | null
75-
onShouldRetry:
76-
| ((err: Error | DetailedError, retryAttempt: number, options: UploadOptions) => boolean)
77-
| null
61+
endpoint?: string
62+
63+
uploadUrl?: string
64+
metadata: { [key: string]: string }
65+
metadataForPartialUploads: UploadOptions['metadata']
66+
fingerprint: (file: UploadInput, options: UploadOptions) => Promise<string | null>
67+
uploadSize?: number
68+
69+
onProgress?: (bytesSent: number, bytesTotal: number | null) => void
70+
onChunkComplete?: (chunkSize: number, bytesAccepted: number, bytesTotal: number | null) => void
71+
onSuccess?: (payload: OnSuccessPayload) => void
72+
onError?: (error: Error | DetailedError) => void
73+
onShouldRetry?: (error: DetailedError, retryAttempt: number, options: UploadOptions) => boolean
74+
onUploadUrlAvailable?: () => void | Promise<void>
7875

7976
overridePatchMethod: boolean
80-
headers: Record<string, string>
77+
headers: { [key: string]: string }
8178
addRequestId: boolean
82-
83-
onBeforeRequest: ((req: HttpRequest) => void | Promise<void>) | null
84-
onAfterResponse: ((req: HttpRequest, res: HttpResponse) => void | Promise<void>) | null
79+
onBeforeRequest?: (req: HttpRequest) => void | Promise<void>
80+
onAfterResponse?: (req: HttpRequest, res: HttpResponse) => void | Promise<void>
8581

8682
chunkSize: number
87-
retryDelays: number[] | null
83+
retryDelays: number[]
8884
parallelUploads: number
89-
parallelUploadBoundaries?: Part[] | null
85+
parallelUploadBoundaries?: { start: number; end: number }[]
9086
storeFingerprintForResuming: boolean
9187
removeFingerprintOnSuccess: boolean
9288
uploadLengthDeferred: boolean
9389
uploadDataDuringCreation: boolean
9490

9591
urlStorage: UrlStorage
9692
fileReader: FileReader
97-
fingerprint: (file: UploadInput, options: UploadOptions) => Promise<string | null>
98-
// TODO: Types need to be double-checked
9993
httpStack: HttpStack
10094

10195
protocol: typeof PROTOCOL_TUS_V1 | typeof PROTOCOL_IETF_DRAFT_03 | typeof PROTOCOL_IETF_DRAFT_05
@@ -158,9 +152,6 @@ export type SliceResult =
158152
export interface HttpStack {
159153
createRequest(method: string, url: string): HttpRequest
160154
getName(): string
161-
// Indicates whether this HTTP stack implementation supports progress events
162-
// during upload. If false, stall detection will use overall transfer rate instead.
163-
supportsProgressEvents: () => boolean
164155
}
165156

166157
export type HttpProgressHandler = (bytesSent: number) => void
@@ -179,6 +170,10 @@ export interface HttpRequest {
179170

180171
// Return an environment specific object, e.g. the XMLHttpRequest object in browsers.
181172
getUnderlyingObject(): unknown
173+
174+
// Indicates whether this HTTP stack implementation supports progress events
175+
// during upload. If false, stall detection will use overall transfer rate instead.
176+
supportsProgressEvents: () => boolean
182177
}
183178

184179
export interface HttpResponse {

0 commit comments

Comments
 (0)