diff --git a/README.md b/README.md index 7ba0851..76a03f3 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ const s3 = new S3({ endpointURL: Deno.env.get("S3_ENDPOINT_URL"), }); -const myBucket = s3.createBucket("my-bucket", { acl: "private" }); +const myBucket = await s3.createBucket("my-bucket", { acl: "private" }); // Create a bucket instance from an existing bucket. const bucket = new S3Bucket({ diff --git a/src/bucket.ts b/src/bucket.ts index e6bac67..12c8796 100644 --- a/src/bucket.ts +++ b/src/bucket.ts @@ -284,7 +284,6 @@ export class S3Bucket { const res = await doRequest({ host: this.#host, signer: this.#signer, - path: `/`, method: "GET", params, headers, diff --git a/src/client.ts b/src/client.ts index 2b1d809..33a4193 100644 --- a/src/client.ts +++ b/src/client.ts @@ -28,6 +28,13 @@ export class S3 { this.#config = { ...config }; } + getBucket(bucket: string): S3Bucket { + return new S3Bucket({ + ...this.#config, + bucket, + }); + } + async createBucket( bucket: string, options?: CreateBucketOptions, @@ -83,10 +90,7 @@ export class S3 { // clean up http body await resp.arrayBuffer(); - return new S3Bucket({ - ...this.#config, - bucket, - }); + return this.getBucket(bucket); } async deleteBucket( diff --git a/src/client_test.ts b/src/client_test.ts index eb6227e..4001abb 100644 --- a/src/client_test.ts +++ b/src/client_test.ts @@ -11,6 +11,23 @@ const s3 = new S3({ endpointURL: Deno.env.get("S3_ENDPOINT_URL"), }); +Deno.test({ + name: "[client] should get an existing bucket", + async fn() { + const bucket = await s3.getBucket("test"); + assert(bucket instanceof S3Bucket); + + // Check if returned bucket instance is working. + await bucket.putObject("test", encoder.encode("test")); + const resp = await bucket.getObject("test"); + const body = await new Response(resp?.body).text(); + assertEquals(body, "test"); + + // teardown + await bucket.deleteObject("test"); + }, +}); + Deno.test({ name: "[client] should create a new bucket", async fn() { @@ -20,13 +37,13 @@ Deno.test({ assert(bucket instanceof S3Bucket); // Check if returned bucket instance is working. - await bucket.putObject("foo", encoder.encode("bar")); - const resp = await bucket.getObject("foo"); + await bucket.putObject("test", encoder.encode("test")); + const resp = await bucket.getObject("test"); const body = await new Response(resp?.body).text(); - assertEquals(body, "bar"); + assertEquals(body, "test"); // teardown - await bucket.deleteObject("foo"); + await bucket.deleteObject("test"); }, }); diff --git a/src/request.ts b/src/request.ts index fc5a62c..05ac574 100644 --- a/src/request.ts +++ b/src/request.ts @@ -10,8 +10,8 @@ export const encoder = new TextEncoder(); interface S3RequestOptions { host: string; signer: Signer; - path: string; method: string; + path?: string; params?: Params; headers?: Params; body?: Uint8Array | undefined; @@ -20,7 +20,7 @@ interface S3RequestOptions { export async function doRequest({ host, signer, - path, + path = "/", params, method, headers,