multi-provider-storage-wrapper
v1.0.0
Published
A unified Node.js/TypeScript API for AWS S3, Google Cloud Storage, and Azure Blob Storage. Switch providers by simply changing your configuration.
Readme
Multi-Provider Storage Wrapper
A unified Node.js/TypeScript API for AWS S3, Google Cloud Storage, and Azure Blob Storage. Switch providers by simply changing your configuration.
Features
- Unified Interface: Use
upload,download,delete,existsacross all providers. - TypeScript Support: First-class types for configuration and return values.
- Pluggable: Easy to switch between AWS, GCP, and Azure.
- Stream Support: Efficiently handle large files using Node.js Streams.
Installation
npm install multi-provider-storage-wrapper
# Or
pnpm add multi-provider-storage-wrapperYou also need to install the SDKs for the providers you intend to use:
# For AWS
pnpm add @aws-sdk/client-s3 @aws-sdk/lib-storage
# For Google Cloud
pnpm add @google-cloud/storage
# For Azure
pnpm add @azure/storage-blobUsage
1. Initialize the Storage Manager
import { StorageManager, StorageConfig } from 'multi-provider-storage-wrapper';
// AWS S3 Configuration
const awsConfig: StorageConfig = {
provider: 'aws',
aws: {
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
bucketName: 'my-app-bucket',
},
};
const storage = new StorageManager(awsConfig);
// OR Google Cloud Storage
const gcpConfig: StorageConfig = {
provider: 'gcp',
gcp: {
keyFilename: 'path/to/key.json',
bucketName: 'my-gcp-bucket',
},
};
// OR Azure Blob Storage
const azureConfig: StorageConfig = {
provider: 'azure',
azure: {
connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING!,
containerName: 'my-container',
},
};2. Perform Operations
Since the interface is unified, the following code works for ANY provider:
import { Readable } from 'stream';
import fs from 'fs';
async function main() {
const provider = storage.getProvider();
// Upload string
const url = await provider.upload('hello.txt', 'Hello World!');
console.log('Uploaded to:', url);
// Upload Stream
const fileStream = fs.createReadStream('large-video.mp4');
await provider.upload('videos/video.mp4', fileStream, {
contentType: 'video/mp4',
isPublic: true,
});
// Check Exists
const exists = await provider.exists('hello.txt');
console.log('Exists:', exists);
// Download
const readStream = await provider.download('hello.txt');
readStream.pipe(process.stdout);
// Delete
await provider.delete('hello.txt');
}
main().catch(console.error);API Reference
IStorageProvider
upload(path, content, options?): Uploads file. Content can be string, Buffer, or Readable stream.download(path): Returns a Readable stream.delete(path): Deletes the file.exists(path): Returns boolean.getSignedUrl(path, expiresInSeconds?): (AWS/GCS only) Returns signed URL.
License
ISC
