cfn-forge
Version:
CloudFormation deployment automation tool with git-based workflows
155 lines (140 loc) • 4.57 kB
JavaScript
/**
* S3 Client Interface
* Defines the contract for S3 operations to ensure portability
*/
class IS3Client {
/**
* Upload a file to S3
* @param {Object} params - Upload parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @param {Buffer|string} params.body - File content
* @param {Object} params.metadata - Object metadata
* @returns {Promise<Object>} Upload result
*/
async uploadFile(params) {
throw new Error('Not implemented');
}
/**
* Download a file from S3
* @param {Object} params - Download parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @returns {Promise<Buffer>} File content
*/
async downloadFile(params) {
throw new Error('Not implemented');
}
/**
* Delete a file from S3
* @param {Object} params - Delete parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @returns {Promise<void>}
*/
async deleteFile(params) {
throw new Error('Not implemented');
}
/**
* Check if an object exists in S3
* @param {Object} params - Check parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @returns {Promise<boolean>} True if object exists
*/
async objectExists(params) {
throw new Error('Not implemented');
}
/**
* List objects in S3 bucket
* @param {Object} params - List parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.prefix - Object key prefix
* @param {number} params.maxKeys - Maximum number of keys
* @returns {Promise<Array>} Array of objects
*/
async listObjects(params) {
throw new Error('Not implemented');
}
/**
* Get object metadata
* @param {Object} params - Metadata parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @returns {Promise<Object>} Object metadata
*/
async getObjectMetadata(params) {
throw new Error('Not implemented');
}
/**
* Generate presigned URL for object
* @param {Object} params - URL parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @param {number} params.expiresIn - URL expiration in seconds
* @param {string} params.operation - Operation (getObject, putObject)
* @returns {Promise<string>} Presigned URL
*/
async generatePresignedUrl(params) {
throw new Error('Not implemented');
}
/**
* Create a multipart upload
* @param {Object} params - Upload parameters
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @returns {Promise<Object>} Upload ID and metadata
*/
async createMultipartUpload(params) {
throw new Error('Not implemented');
}
/**
* Upload a part for multipart upload
* @param {Object} params - Part upload parameters
* @returns {Promise<Object>} Part upload result
*/
async uploadPart(params) {
throw new Error('Not implemented');
}
/**
* Complete multipart upload
* @param {Object} params - Complete parameters
* @returns {Promise<Object>} Complete result
*/
async completeMultipartUpload(params) {
throw new Error('Not implemented');
}
/**
* Abort multipart upload
* @param {Object} params - Abort parameters
* @returns {Promise<void>}
*/
async abortMultipartUpload(params) {
throw new Error('Not implemented');
}
/**
* Upload directory to S3
* @param {Object} params - Directory upload parameters
* @param {string} params.localPath - Local directory path
* @param {string} params.bucket - S3 bucket name
* @param {string} params.prefix - S3 key prefix
* @param {Function} params.progressCallback - Progress callback
* @returns {Promise<Array>} Array of upload results
*/
async uploadDirectory(params) {
throw new Error('Not implemented');
}
/**
* Create ZIP package and upload to S3
* @param {Object} params - Package parameters
* @param {string} params.sourcePath - Source directory
* @param {string} params.bucket - S3 bucket name
* @param {string} params.key - S3 object key
* @param {string[]} params.excludePatterns - Patterns to exclude
* @returns {Promise<Object>} Upload result with package info
*/
async uploadPackage(params) {
throw new Error('Not implemented');
}
}
module.exports = IS3Client;