aws.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. ;module.exports = (function(a, own){
  2. function s3(opt){
  3. if(!(this instanceof s3)){
  4. return new s3(opt);
  5. }
  6. var s = this;
  7. opt = opt || {};
  8. opt.bucket = opt.bucket || opt.Bucket || process.env.AWS_S3_BUCKET;
  9. opt.region = opt.region || process.AWS_REGION || "us-east-1";
  10. opt.accessKeyId = opt.key = opt.key || opt.accessKeyId || process.env.AWS_ACCESS_KEY_ID;
  11. opt.secretAccessKey = opt.secret = opt.secret || opt.secretAccessKey || process.env.AWS_SECRET_ACCESS_KEY;
  12. if(!opt.accessKeyId || !opt.secretAccessKey){
  13. return 0;
  14. }
  15. s.config = opt;
  16. s.AWS = require('aws-sdk');
  17. s.on = a.on;
  18. if(s.config.fakes3 = s.config.fakes3 || opt.fakes3 || process.env.fakes3){
  19. s.AWS.config.endpoint = s.config.endpoint = opt.fakes3 || s.config.fakes3 || process.env.fakes3;
  20. s.AWS.config.sslEnabled = s.config.sslEnabled = false;
  21. s.AWS.config.bucket = s.config.bucket = s.config.bucket.replace('.','p');
  22. }
  23. s.AWS.config.update(s.config);
  24. s.S3 = function(){
  25. var s = new this.AWS.S3();
  26. if(this.config.fakes3){
  27. s.endpoint = s.config.endpoint;
  28. }
  29. return s;
  30. }
  31. return s;
  32. };
  33. s3.id = function(m){ return m.Bucket +'/'+ m.Key }
  34. s3.chain = s3.prototype;
  35. s3.chain.PUT = function(key, o, cb, m){
  36. if(!key){ return }
  37. m = m || {}
  38. m.Bucket = m.Bucket || this.config.bucket;
  39. m.Key = m.Key || key;
  40. if(a.obj.is(o) || a.list.is(o)){
  41. m.Body = a.text.ify(o);
  42. m.ContentType = 'application/json';
  43. } else {
  44. m.Body = a.text.is(o)? o : a.text.ify(o);
  45. }
  46. this.S3().putObject(m, function(e,r){
  47. //a.log('saved', e,r);
  48. if(!cb){ return }
  49. cb(e,r);
  50. });
  51. return this;
  52. }
  53. s3.chain.GET = function(key, cb, o){
  54. if(!key){ return }
  55. var s = this
  56. , m = {
  57. Bucket: s.config.bucket
  58. ,Key: key
  59. }, id = s3.id(m);
  60. s.on(id, function(arg){
  61. var e = arg[0], d = arg[1], t = arg[2], m = arg[3], r = arg[4];
  62. this.off();
  63. delete s.batch[id];
  64. if(!a.fn.is(cb)){ return }
  65. try{ cb(e,d,t,m,r);
  66. }catch(e){
  67. console.log(e);
  68. }
  69. });
  70. s.batch = s.batch || {};
  71. if(s.batch[id]){ return s }
  72. s.batch[id] = (s.batch[id] || 0) + 1;
  73. s.S3().getObject(m, function(e,r){
  74. var d, t, m;
  75. r = r || (this && this.httpResponse);
  76. if(e || !r){ return s.on(id, [e]) }
  77. r.Text = r.text = t = (r.Body||r.body||'').toString('utf8');
  78. r.Type = r.type = r.ContentType || (r.headers||{})['content-type'];
  79. if(r.type && 'application/json' === r.type){
  80. d = a.obj.ify(t);
  81. }
  82. m = r.Metadata;
  83. 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.
  84. });
  85. return s;
  86. }
  87. s3.chain.del = function(key, cb){
  88. if(!key){ return }
  89. var m = {
  90. Bucket: this.config.bucket
  91. ,Key: key
  92. }
  93. this.S3().deleteObject(m, function(e,r){
  94. if(!cb){ return }
  95. cb(e, r);
  96. });
  97. return this;
  98. }
  99. s3.chain.dbs = function(o, cb){
  100. cb = cb || o;
  101. var m = {}
  102. this.S3().listBuckets(m, function(e,r){
  103. //a.log('dbs',e);
  104. a.list.map((r||{}).Contents, function(v){console.log(v);});
  105. //a.log('---end list---');
  106. if(!a.fn.is(cb)) return;
  107. cb(e,r);
  108. });
  109. return this;
  110. }
  111. s3.chain.keys = function(from, upto, cb){
  112. cb = cb || upto || from;
  113. var m = {
  114. Bucket: this.config.bucket
  115. }
  116. if(a.text.is(from)){
  117. m.Prefix = from;
  118. }
  119. if(a.text.is(upto)){
  120. m.Delimiter = upto;
  121. }
  122. this.S3().listObjects(m, function(e,r){
  123. //a.log('list',e);
  124. a.list.map((r||{}).Contents, function(v){console.log(v)});
  125. //a.log('---end list---');
  126. if(!a.fn.is(cb)) return;
  127. cb(e,r);
  128. });
  129. return this;
  130. }
  131. return s3;
  132. })(require('../gun'), {});
  133. /**
  134. Knox S3 Config is:
  135. knox.createClient({
  136. key: ''
  137. , secret: ''
  138. , bucket: ''
  139. , endpoint: 'us-standard'
  140. , port: 0
  141. , secure: true
  142. , token: ''
  143. , style: ''
  144. , agent: ''
  145. });
  146. aws-sdk for s3 is:
  147. { "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-west-2" }
  148. AWS.config.loadFromPath('./config.json');
  149. {
  150. accessKeyId: process.env.AWS_ACCESS_KEY_ID = ''
  151. ,secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY = ''
  152. ,Bucket: process.env.s3Bucket = ''
  153. ,region: process.env.AWS_REGION = "us-east-1"
  154. ,sslEnabled: ''
  155. }
  156. **/