Skip to content

Instantly share code, notes, and snippets.

@johnspurlock-skymethod
Created November 28, 2022 18:46
Show Gist options
  • Save johnspurlock-skymethod/742481924a3ee908a1ba405824626fb0 to your computer and use it in GitHub Desktop.
Save johnspurlock-skymethod/742481924a3ee908a1ba405824626fb0 to your computer and use it in GitHub Desktop.
Typescript types for the newly-announced R2 worker bindings for multipart uploads.

Typescript types for the newly-announced R2 worker bindings for multipart uploads.

// https://github.com/cloudflare/workerd/blob/main/src/workerd/api/r2-bucket.h
export interface R2BucketWithMultipart extends R2Bucket {
    createMultipartUpload(key: string, opts?: R2MultipartOptions): Promise<R2MultipartUpload>;
    resumeMultipartUpload(key: string, uploadId: string): Promise<R2MultipartUpload>;
}

export interface R2MultipartOptions {
    readonly httpMetadata?: R2HTTPMetadata | Headers;
    readonly customMetadata?: Record<string, string>;
}

// https://github.com/cloudflare/workerd/blob/main/src/workerd/api/r2-multipart.h
export interface R2MultipartUpload {
    readonly key: string;
    readonly uploadId: string;

    uploadPart(partNumber: number, value: ReadableStream | ArrayBuffer | ArrayBufferView | string | null | Blob): Promise<R2UploadedPart>;
    abort(): Promise<void>;
    complete(uploadedParts: R2UploadedPart[]): Promise<R2Object>;
}

export interface R2UploadedPart {
    readonly partNumber: number;
    readonly etag: string;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment