;module.exports = (function(a, own){ function s3(opt){ if(!(this instanceof s3)){ return new s3(opt); } var s = this; opt = opt || {}; opt.bucket = opt.bucket || opt.Bucket || process.env.AWS_S3_BUCKET; opt.region = opt.region || process.AWS_REGION || "us-east-1"; opt.accessKeyId = opt.key = opt.key || opt.accessKeyId || process.env.AWS_ACCESS_KEY_ID; opt.secretAccessKey = opt.secret = opt.secret || opt.secretAccessKey || process.env.AWS_SECRET_ACCESS_KEY; if(!opt.accessKeyId || !opt.secretAccessKey){ return 0; } s.config = opt; s.AWS = require('aws-sdk'); s.on = a.on; if(s.config.fakes3 = s.config.fakes3 || opt.fakes3 || process.env.fakes3){ s.AWS.config.endpoint = s.config.endpoint = opt.fakes3 || s.config.fakes3 || process.env.fakes3; s.AWS.config.sslEnabled = s.config.sslEnabled = false; s.AWS.config.bucket = s.config.bucket = s.config.bucket.replace('.','p'); } s.AWS.config.update(s.config); s.S3 = function(){ var s = new this.AWS.S3(); if(this.config.fakes3){ s.endpoint = s.config.endpoint; } return s; } return s; }; s3.id = function(m){ return m.Bucket +'/'+ m.Key } s3.chain = s3.prototype; s3.chain.PUT = function(key, o, cb, m){ if(!key){ return } m = m || {} m.Bucket = m.Bucket || this.config.bucket; m.Key = m.Key || key; if(a.obj.is(o) || a.list.is(o)){ m.Body = a.text.ify(o); m.ContentType = 'application/json'; } else { m.Body = a.text.is(o)? o : a.text.ify(o); } this.S3().putObject(m, function(e,r){ //a.log('saved', e,r); if(!cb){ return } cb(e,r); }); return this; } s3.chain.GET = function(key, cb, o){ if(!key){ return } var s = this , m = { Bucket: s.config.bucket ,Key: key }, id = s3.id(m); s.on(id, function(arg){ var e = arg[0], d = arg[1], t = arg[2], m = arg[3], r = arg[4]; this.off(); delete s.batch[id]; if(!a.fn.is(cb)){ return } try{ cb(e,d,t,m,r); }catch(e){ console.log(e); } }); s.batch = s.batch || {}; if(s.batch[id]){ return s } s.batch[id] = (s.batch[id] || 0) + 1; s.S3().getObject(m, function(e,r){ var d, t, m; r = r || (this && this.httpResponse); if(e || !r){ return s.on(id, [e]) } r.Text = r.text = t = (r.Body||r.body||'').toString('utf8'); r.Type = r.type = r.ContentType || (r.headers||{})['content-type']; if(r.type && 'application/json' === r.type){ d = a.obj.ify(t); } m = r.Metadata; s.on(id, [e, d, t, m, r]); // Warning about the r parameter, is is the raw response and may result in stupid SAX errors. }); return s; } s3.chain.del = function(key, cb){ if(!key){ return } var m = { Bucket: this.config.bucket ,Key: key } this.S3().deleteObject(m, function(e,r){ if(!cb){ return } cb(e, r); }); return this; } s3.chain.dbs = function(o, cb){ cb = cb || o; var m = {} this.S3().listBuckets(m, function(e,r){ //a.log('dbs',e); a.list.map((r||{}).Contents, function(v){console.log(v);}); //a.log('---end list---'); if(!a.fn.is(cb)) return; cb(e,r); }); return this; } s3.chain.keys = function(from, upto, cb){ cb = cb || upto || from; var m = { Bucket: this.config.bucket } if(a.text.is(from)){ m.Prefix = from; } if(a.text.is(upto)){ m.Delimiter = upto; } this.S3().listObjects(m, function(e,r){ //a.log('list',e); a.list.map((r||{}).Contents, function(v){console.log(v)}); //a.log('---end list---'); if(!a.fn.is(cb)) return; cb(e,r); }); return this; } return s3; })(require('../gun'), {}); /** Knox S3 Config is: knox.createClient({ key: '' , secret: '' , bucket: '' , endpoint: 'us-standard' , port: 0 , secure: true , token: '' , style: '' , agent: '' }); aws-sdk for s3 is: { "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-west-2" } AWS.config.loadFromPath('./config.json'); { accessKeyId: process.env.AWS_ACCESS_KEY_ID = '' ,secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY = '' ,Bucket: process.env.s3Bucket = '' ,region: process.env.AWS_REGION = "us-east-1" ,sslEnabled: '' } **/