node package manager


small abstraction over various s3 clients


small abstraction over various s3 clients

npm install s3shield
var s3shield = require('s3shield');
var clientProvider = s3shield.S3ClientProviderFactory.get('knox', /* optional s3 config to override rc*/); // can also use 'faulty' to get a client that simulates errors and works against local file system but with same api
var client = clientProvider.get('mybucket');
client.put('mykey', 'mydata', callback);
client.putFile('mykey', 'a/file/some/where.log', callback);
var http = require('http');
http.createServer(function(request, response) {
    client.putStream('myKey', request, function(err) {
// .s3shieldrc: (remove comments, json doesnt allow for them)
    // aws config
    "aws": {
        "region": "your region",
        "accessKeyId": "your access key",
        "secretAccessKey": "your secret"
    "clientType": "knox" || "aws-sdk" || "faulty" || "local", // default is knox
    // see lru-cache for all the options
    // used by knox client provider to catch a client per bucket
    "lru": {
        "max": 100,
        "maxAge": 86400000
    // if enabled will gzip a message or a file to local file before uploading
    "gzip": {
        "enabled": false,
        // see
        "options": undefined,
        // if enabled the unzipped file will be deleted after upload (but not the zipped one)
        // this only applies to file messages
        "deleteFileAfterUpload": false
    // if set to true, deletes files (this doesn't apply to put() or putStream()) after successful upload
    deleteAfterUpload: false,
    // in put() functions where a string or an object is provided (and not a buffer) this enconding
    // will be used when turning the data into a buffer
    "uploadEncoding": "utf8",
    // "faulty s3 client is used for testing"
    "faulty": {
        // how many time should I fail
        "failures": 3

see RC module for further details

        "bucket": "name of the bucket",
        "key": "path in the bucket",
        "data": "some data to write",
        "url": "instead of embedding the data in the message, zero-s3 will issue an http request to get this data and upload to s3 - not implemented fully yet"
        "path": "instead of embedding the data in the message, zero-s3 will upload a local file to s3"

if both url and data exist in the message, there is no guarentee which will take effect

_(Coming soon)_

(Coming soon)

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

(Nothing yet)

Copyright (c) 2013 Yaniv Kessler. Licensed under the MIT license.