// classes.smartbucket.ts import * as plugins from './plugins.js'; import { Bucket } from './classes.bucket.js'; export class SmartBucket { public config: plugins.tsclass.storage.IS3Descriptor; public s3Client: plugins.s3.S3Client; /** * the constructor of SmartBucket */ /** * the constructor of SmartBucket */ constructor(configArg: plugins.tsclass.storage.IS3Descriptor) { this.config = configArg; const protocol = configArg.useSsl === false ? 'http' : 'https'; const port = configArg.port ? `:${configArg.port}` : ''; const endpoint = `${protocol}://${configArg.endpoint}${port}`; this.s3Client = new plugins.s3.S3Client({ endpoint, region: configArg.region || 'us-east-1', credentials: { accessKeyId: configArg.accessKey, secretAccessKey: configArg.accessSecret, }, forcePathStyle: true, // Necessary for S3-compatible storage like MinIO or Wasabi }); } public async createBucket(bucketNameArg: string) { const bucket = await Bucket.createBucketByName(this, bucketNameArg); return bucket; } public async removeBucket(bucketName: string) { await Bucket.removeBucketByName(this, bucketName); } public async getBucketByName(bucketNameArg: string) { return Bucket.getBucketByName(this, bucketNameArg); } public async getBucketByNameStrict(...args: Parameters) { const bucket = await this.getBucketByName(...args); if (!bucket) { throw new Error(`Bucket ${args[0]} does not exist.`); } return bucket; } }