UNPKG

aws-client

Version:

Minimalist Node.js client for AWS services

101 lines (85 loc) 2.9 kB
const { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsCommand, DeleteObjectsCommand } = require('@aws-sdk/client-s3') const errorMessage = require('./utils/error') const stream = require('./utils/stream') class S3 { constructor({ region, bucketName }) { this.bucketName = bucketName this.s3Clientv3 = new S3Client({ region }) } async putJSONv2({ key, item }) { const params = { Body: JSON.stringify(item), Bucket: this.bucketName, Key: `${key.replace('/', '-')}.json`, ContentType: 'application/json' } try { const results = await this.s3Clientv3.send(new PutObjectCommand(params)) return results } catch (error) { console.error(errorMessage({ source: S3.name, error, method: 'putJSON', item })) // an error occurred } } async getJSONv2({ key }) { const formattedKey = key.replace('/', '-') const params = { Bucket: this.bucketName, Key: `${formattedKey}.json` } try { const results = await this.s3Clientv3.send(new GetObjectCommand(params)) const rawData = await stream(results.Body) return JSON.parse(rawData) } catch (error) { if (error.message !== 'The specified key does not exist.') { console.error(errorMessage({ source: S3.name, error, method: 'getJSON' })) // an error occurred } return null } } async getObjectStreamv2({ filepath, filetype }) { const params = { Bucket: this.bucketName, Key: `${filepath}.${filetype}` } const results = await this.s3Clientv3.send(new GetObjectCommand(params)) return results.Body } async listObjectsv2({ maxKeys, prefix }) { const params = { Bucket: this.bucketName, MaxKeys: maxKeys, Prefix: prefix, } try { const results = await this.s3Clientv3.send(new ListObjectsCommand(params)) return results.Contents } catch (error) { console.error(errorMessage({ source: S3.name, error, method: 'listObjects' })) // an error occurred } } async deleteObjects({ keys }) { const params = { Bucket: this.bucketName, Delete: { Objects: keys.map(key => ({ Key: key })), Quiet: false } } try { await this.s3Clientv3.send(new DeleteObjectsCommand(params)) } catch (error) { console.error(errorMessage({ source: S3.name, error, method: 'deleteObjects' })) // an error occurred } } async clearBucketv2() { const allObjects = await this.listObjectsv2({}) if (!allObjects || allObjects.length === 0) { console.log(`[${this.bucketName}] Bucket Contents Empty`); return {} } await this.deleteObjects({ keys: allObjects.map(obj => obj.Key) }) return this.clearBucketv2() } } module.exports = S3