mirror of
				https://github.com/cderche/greenlock-storage-s3
				synced 2025-11-03 22:02:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env node
 | 
						|
 | 
						|
var repl = require('repl').start('aws-sdk> '),
 | 
						|
    replEval = repl.eval,
 | 
						|
    defaultOptions = {
 | 
						|
      logger: process.stdout,
 | 
						|
      region: process.env.AWS_REGION || 'us-east-1'
 | 
						|
    };
 | 
						|
 | 
						|
 | 
						|
function customEval(cmd, context, filename, callback) {
 | 
						|
  replEval(cmd, context, filename, function(err, value) {
 | 
						|
    if (err) {
 | 
						|
      callback(err, null);
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    function consoleDataExtraction(resp) {
 | 
						|
      context.data = resp.data;
 | 
						|
      context.error = resp.error;
 | 
						|
      callback(resp.error, resp.data);
 | 
						|
    }
 | 
						|
    
 | 
						|
    if (value && value.constructor === AWS.Request && !value.__hasBeenEval__) {
 | 
						|
      
 | 
						|
      try {
 | 
						|
        value.__hasBeenEval__ = true;
 | 
						|
        if (value.response) value.response.__hasBeenEval__ = true;
 | 
						|
        context.request = value;
 | 
						|
        context.response = value.response || null;
 | 
						|
        context.data = null;
 | 
						|
        context.error = null;
 | 
						|
        if (value._asm.currentState === 'complete' && value.response) {
 | 
						|
          context.data = value.response.data || null;
 | 
						|
          context.error = value.response.error || null;
 | 
						|
          callback(value.response.error, value.response.data);
 | 
						|
        } else {
 | 
						|
          value.on('complete', consoleDataExtraction);
 | 
						|
          if (!value.__hasBeenSent__) {
 | 
						|
            if (context.autoSend) {
 | 
						|
              value.send();
 | 
						|
            } else {
 | 
						|
              callback(null, value);
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      } catch (err2) {
 | 
						|
        callback(err2, null);
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
    } else if (value && value.constructor === AWS.Response && !value.__hasBeenEval__) {
 | 
						|
      try {
 | 
						|
        value.__hasBeenEval__ = true;
 | 
						|
        context.response = value;
 | 
						|
        context.request = value.request || null;
 | 
						|
        context.data = value.data || null;
 | 
						|
        context.error = value.error || null;
 | 
						|
        if (value.request) {
 | 
						|
          value.request.__hasBeenEval__ = true;
 | 
						|
          if (value.request._asm.currentState === 'complete') {
 | 
						|
            callback(value.error, value.data);
 | 
						|
          } else {
 | 
						|
            value.request.on('complete', consoleDataExtraction);
 | 
						|
          }
 | 
						|
        }
 | 
						|
      } catch (err2) {
 | 
						|
        callback(err2, null);
 | 
						|
        return;
 | 
						|
      }
 | 
						|
    } else {
 | 
						|
      callback(null, value);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
var AWS = repl.context.AWS = require('../lib/aws');
 | 
						|
repl.eval = customEval;
 | 
						|
 | 
						|
// context variables
 | 
						|
repl.context.data = null;
 | 
						|
repl.context.error = null;
 | 
						|
repl.context.request = null;
 | 
						|
repl.context.response = null;
 | 
						|
 | 
						|
// setup REPL history
 | 
						|
try {
 | 
						|
  var replHistory = require('repl.history');
 | 
						|
  replHistory(repl, process.env.HOME + '/.node_history');
 | 
						|
} catch (e) {
 | 
						|
  console.log("Missing repl.history package, history will not be supported.");
 | 
						|
  console.log("  Type `npm install repl.history` to enable history.");
 | 
						|
}
 | 
						|
 | 
						|
// modify Request.prototype.send listener to track if the listener has been called
 | 
						|
var sendListener = AWS.Request.prototype.send;
 | 
						|
AWS.Request.prototype.send = function(callback) {
 | 
						|
  this.__hasBeenSent__ = true;
 | 
						|
  return sendListener.call(this, callback);
 | 
						|
};
 | 
						|
 | 
						|
// flag to indicate that requests should be sent when callback is not provided
 | 
						|
// by default this is on, but can be turned off by setting `autoSend = false`
 | 
						|
repl.context.autoSend = true;
 | 
						|
 | 
						|
// load services as defined instances
 | 
						|
for (var key in AWS) {
 | 
						|
  var id = AWS[key].serviceIdentifier;
 | 
						|
  if (id) {
 | 
						|
    if (id === 'cloudsearchdomain' || id === 'iotdata') continue; // this required an explicit endpoint
 | 
						|
 | 
						|
    var svcClass = AWS[key];
 | 
						|
    var svc = new svcClass(defaultOptions);
 | 
						|
    svc.with = function(config) {
 | 
						|
      return new this.constructor.__super__(AWS.util.merge(this.config, config));
 | 
						|
    };
 | 
						|
    repl.context[svcClass.serviceIdentifier] = svc;
 | 
						|
  }
 | 
						|
}
 |