File
Blob: src/workerd/api/r2-multipart.h
| 1 | // Copyright (c) 2017-2022 Cloudflare, Inc. |
| 2 | // Licensed under the Apache 2.0 license found in the LICENSE file or at: |
| 3 | // https://opensource.org/licenses/Apache-2.0 |
| 4 | |
| 5 | #pragma once |
| 6 | |
| 7 | #include "r2-bucket.h" |
| 8 | |
| 9 | #include <workerd/jsg/jsg.h> |
| 10 | |
| 11 | namespace workerd::api::public_beta { |
| 12 | |
| 13 | class R2MultipartUpload: public jsg::Object { |
| 14 | public: |
| 15 | struct UploadedPart { |
| 16 | int partNumber; |
| 17 | kj::String etag; |
| 18 | |
| 19 | JSG_STRUCT(partNumber, etag); |
| 20 | JSG_STRUCT_TS_OVERRIDE(R2UploadedPart); |
| 21 | }; |
| 22 | struct UploadPartOptions { |
| 23 | jsg::Optional<kj::OneOf<kj::Array<byte>, kj::String>> ssecKey; |
| 24 | |
| 25 | JSG_STRUCT(ssecKey); |
| 26 | JSG_STRUCT_TS_OVERRIDE(R2UploadPartOptions); |
| 27 | }; |
| 28 | |
| 29 | R2MultipartUpload(kj::String key, kj::String uploadId, jsg::Ref<R2Bucket> bucket) |
| 30 | : key(kj::mv(key)), |
| 31 | uploadId(kj::mv(uploadId)), |
| 32 | bucket(kj::mv(bucket)) {} |
| 33 | |
| 34 | kj::StringPtr getKey() const { |
| 35 | return key; |
| 36 | } |
| 37 | kj::StringPtr getUploadId() const { |
| 38 | return uploadId; |
| 39 | } |
| 40 | |
| 41 | jsg::Promise<UploadedPart> uploadPart(jsg::Lock& js, |
| 42 | int partNumber, |
| 43 | R2PutValue value, |
| 44 | jsg::Optional<UploadPartOptions> options, |
| 45 | const jsg::TypeHandler<jsg::Ref<R2Error>>& errorType); |
| 46 | jsg::Promise<void> abort(jsg::Lock& js, const jsg::TypeHandler<jsg::Ref<R2Error>>& errorType); |
| 47 | jsg::Promise<jsg::Ref<R2Bucket::HeadResult>> complete(jsg::Lock& js, |
| 48 | kj::Array<UploadedPart> uploadedParts, |
| 49 | const jsg::TypeHandler<jsg::Ref<R2Error>>& errorType); |
| 50 | |
| 51 | JSG_RESOURCE_TYPE(R2MultipartUpload) { |
| 52 | JSG_LAZY_READONLY_INSTANCE_PROPERTY(key, getKey); |
| 53 | JSG_LAZY_READONLY_INSTANCE_PROPERTY(uploadId, getUploadId); |
| 54 | JSG_METHOD(uploadPart); |
| 55 | JSG_METHOD(abort); |
| 56 | JSG_METHOD(complete); |
| 57 | } |
| 58 | |
| 59 | void visitForMemoryInfo(jsg::MemoryTracker& tracker) const { |
| 60 | tracker.trackField("key", key); |
| 61 | tracker.trackField("uploadId", uploadId); |
| 62 | tracker.trackField("bucket", bucket); |
| 63 | } |
| 64 | |
| 65 | protected: |
| 66 | kj::String key; |
| 67 | kj::String uploadId; |
| 68 | jsg::Ref<R2Bucket> bucket; |
| 69 | |
| 70 | private: |
| 71 | void visitForGc(jsg::GcVisitor& visitor) { |
| 72 | visitor.visit(bucket); |
| 73 | } |
| 74 | }; |
| 75 | |
| 76 | } // namespace workerd::api::public_beta |