Skip to content

Commit 75090f1

Browse files
authored
Add support for generating bucket CID (#11)
1 parent 1b6fa88 commit 75090f1

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

src/bucketManager.js

+34-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
DeleteBucketCommand,
44
GetBucketAclCommand,
55
ListBucketsCommand,
6-
PutBucketAclCommand,
6+
PutBucketAclCommand, PutBucketTaggingCommand,
77
S3Client,
88
} from "@aws-sdk/client-s3";
99

@@ -130,6 +130,39 @@ class BucketManager {
130130
});
131131
return !(typeof readPermission !== "undefined");
132132
}
133+
134+
/**
135+
* @summary Generates the IPFS Directory/Folder CID for a given bucket
136+
* @param {string} name - The name of the bucket to use.
137+
* @returns {Promise<boolean>} A promise that resolves with the CID of the new directory/folder
138+
*/
139+
async generateCid(name) {
140+
const command = new PutBucketTaggingCommand({
141+
Bucket: name,
142+
Tagging: {
143+
TagSet: [
144+
{
145+
Key: "generateBucketCid",
146+
Value: "true"
147+
}
148+
]
149+
}
150+
});
151+
152+
let cid = false;
153+
command.middlewareStack.add(
154+
(next) => async (args) => {
155+
const response = await next(args);
156+
157+
// Get cid from headers
158+
cid = response.response.headers["x-amz-meta-cid"];
159+
return response;
160+
}
161+
);
162+
163+
await this.#client.send(command);
164+
return cid;
165+
}
133166
}
134167

135168
export default BucketManager;

test/bucketManager.spec.cjs

+23
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,29 @@ test("create bucket", async () => {
3030
}
3131
});
3232

33+
test("generate bucket cid", async () => {
34+
// Initialize BucketManager
35+
const bucketManager = new BucketManager(
36+
process.env.TEST_S3_KEY || process.env.TEST_KEY,
37+
process.env.TEST_S3_SECRET || process.env.TEST_SECRET,
38+
);
39+
40+
// Create bucket `create-bucket-test-pass`
41+
const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`;
42+
await bucketManager.create(bucketNameToGenerate);
43+
44+
try {
45+
// Generate bucket CID
46+
const generatedCid = await bucketManager.generateCid(bucketNameToGenerate);
47+
48+
// Assert new bucket exists
49+
assert.equal(generatedCid, "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354");
50+
} finally {
51+
// Delete new bucket
52+
await bucketManager.delete(bucketNameToGenerate);
53+
}
54+
});
55+
3356
test("list buckets", async () => {
3457
const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`,
3558
bucketManager = new BucketManager(

test/bucketManager.spec.mjs

+23
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,29 @@ test("create bucket", async () => {
3030
}
3131
});
3232

33+
test("generate bucket cid", async () => {
34+
// Initialize BucketManager
35+
const bucketManager = new BucketManager(
36+
process.env.TEST_S3_KEY || process.env.TEST_KEY,
37+
process.env.TEST_S3_SECRET || process.env.TEST_SECRET,
38+
);
39+
40+
// Create bucket `create-bucket-test-pass`
41+
const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`;
42+
await bucketManager.create(bucketNameToGenerate);
43+
44+
try {
45+
// Generate bucket CID
46+
const generatedCid = await bucketManager.generateCid(bucketNameToGenerate);
47+
48+
// Assert new bucket exists
49+
assert.equal(generatedCid, "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354");
50+
} finally {
51+
// Delete new bucket
52+
await bucketManager.delete(bucketNameToGenerate);
53+
}
54+
});
55+
3356
test("list buckets", async () => {
3457
const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`,
3558
bucketManager = new BucketManager(

0 commit comments

Comments
 (0)