@ducktors/storagebus-s3
v0.12.1
Published
[](https://www.npmjs.com/package/@ducktors/storagebus-s3) [](https://opensource.org/licenses/MIT)
Readme
@ducktors/storagebus-s3
AWS S3 storage adapter for Storagebus.
Installation
npm install @ducktors/storagebus-s3
# or
pnpm add @ducktors/storagebus-s3
# or
yarn add @ducktors/storagebus-s3Usage
import { Storage } from '@ducktors/storagebus-s3'
import { Readable } from 'node:stream'
// Using explicit credentials
const storage = new Storage({
bucket: 'your-s3-bucket',
region: 'us-east-1',
accessKeyId: 'your-access-key-id',
secretAccessKey: 'your-secret-access-key',
})
// Or using default credentials (IAM role, environment variables, etc.)
const storageWithDefaultCreds = new Storage({
bucket: 'your-s3-bucket',
region: 'us-east-1',
})
async function main() {
const readable = Readable.from('Hello, world!')
// Write a file
const writtenFile = await storage.write('path/to/file.txt', readable)
// Write with progress tracking
await storage.write('path/to/large-file.txt', readable, {
progress: (p) => console.log(`Uploaded: ${p.loaded} bytes`),
})
// Write with server-side encryption
await storage.write('path/to/encrypted.txt', readable, {
entryption: {
ServerSideEncryption: 'aws:kms',
SSEKMSKeyId: 'your-kms-key-id',
},
})
// Check if file exists
const exists = await storage.exists('path/to/file.txt')
// Read a file
const fileStream = await storage.read('path/to/file.txt')
// Copy a file
const copiedFile = await storage.copy('path/to/file.txt', 'path/to/copy.txt')
// Copy to a different bucket
await storage.copy('path/to/file.txt', 'path/to/copy.txt', {
destBucket: 'another-bucket',
})
// Move a file
const movedFile = await storage.move('path/to/copy.txt', 'new/path/file.txt')
// Delete a file
await storage.remove('path/to/file.txt')
}API
Constructor Options
| Option | Type | Required | Description |
|--------|------|----------|-------------|
| bucket | string | Yes | S3 bucket name |
| region | string | No | AWS region (e.g., us-east-1) |
| accessKeyId | string | No | AWS access key ID (optional if using IAM roles or environment variables) |
| secretAccessKey | string | No | AWS secret access key (optional if using IAM roles or environment variables) |
| debug | boolean | No | Enable debug logging |
| logger | Logger | No | Custom logger instance |
| sanitizeKey | boolean \| (key: string) => string | No | Sanitize file keys |
Methods
| Method | Signature | Description |
|--------|-----------|-------------|
| write | (key: string, fileReadable: Readable, opts?: WriteOpts) => Promise<string> | Write a file to storage. Automatically sets Content-Type based on file extension |
| exists | (key: string) => Promise<boolean> | Check if a file exists |
| read | (key: string) => Promise<Readable> | Read a file from storage |
| remove | (key: string) => Promise<void> | Delete a file from storage |
| copy | (key: string, destKey: string, opts?: CopyOpts) => Promise<string> | Copy a file within or between buckets |
| move | (key: string, destKey: string, opts?: MoveOpts) => Promise<string> | Move a file within the bucket |
WriteOpts
| Option | Type | Description |
|--------|------|-------------|
| progress | (p: Progress) => void | Callback function for upload progress |
| entryption.ServerSideEncryption | string | Server-side encryption algorithm (AES256, aws:kms, aws:kms:dsse) |
| entryption.SSEKMSKeyId | string | KMS key ID for encryption |
CopyOpts
| Option | Type | Description |
|--------|------|-------------|
| destBucket | string | Destination bucket (defaults to source bucket) |
| entryption.ServerSideEncryption | string | Server-side encryption algorithm |
| entryption.SSEKMSKeyId | string | KMS key ID for encryption |
MoveOpts
| Option | Type | Description |
|--------|------|-------------|
| entryption.ServerSideEncryption | string | Server-side encryption algorithm |
| entryption.SSEKMSKeyId | string | KMS key ID for encryption |
Authentication
This adapter supports multiple authentication methods:
- Explicit Credentials: Pass
accessKeyIdandsecretAccessKeyto the constructor - Environment Variables: Set
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY - IAM Roles: When running on AWS infrastructure (EC2, Lambda, ECS, etc.)
- AWS Credentials File:
~/.aws/credentials
See AWS SDK credentials documentation for more details.
License
MIT
