UNPKG

3.65 kBPlain TextView Raw
1#!/usr/bin/env node
2
3var repl = require('repl').start('aws-sdk> '),
4 replEval = repl.eval,
5 defaultOptions = {
6 logger: process.stdout,
7 region: process.env.AWS_REGION || 'us-east-1'
8 };
9
10
11function customEval(cmd, context, filename, callback) {
12 replEval(cmd, context, filename, function(err, value) {
13 if (err) {
14 callback(err, null);
15 return;
16 }
17
18 function consoleDataExtraction(resp) {
19 context.data = resp.data;
20 context.error = resp.error;
21 callback(resp.error, resp.data);
22 }
23
24 if (value && value.constructor === AWS.Request && !value.__hasBeenEval__) {
25
26 try {
27 value.__hasBeenEval__ = true;
28 if (value.response) value.response.__hasBeenEval__ = true;
29 context.request = value;
30 context.response = value.response || null;
31 context.data = null;
32 context.error = null;
33 if (value._asm.currentState === 'complete' && value.response) {
34 context.data = value.response.data || null;
35 context.error = value.response.error || null;
36 callback(value.response.error, value.response.data);
37 } else {
38 value.on('complete', consoleDataExtraction);
39 if (!value.__hasBeenSent__) {
40 if (context.autoSend) {
41 value.send();
42 } else {
43 callback(null, value);
44 }
45 }
46 }
47 } catch (err2) {
48 callback(err2, null);
49 return;
50 }
51
52 } else if (value && value.constructor === AWS.Response && !value.__hasBeenEval__) {
53 try {
54 value.__hasBeenEval__ = true;
55 context.response = value;
56 context.request = value.request || null;
57 context.data = value.data || null;
58 context.error = value.error || null;
59 if (value.request) {
60 value.request.__hasBeenEval__ = true;
61 if (value.request._asm.currentState === 'complete') {
62 callback(value.error, value.data);
63 } else {
64 value.request.on('complete', consoleDataExtraction);
65 }
66 }
67 } catch (err2) {
68 callback(err2, null);
69 return;
70 }
71 } else {
72 callback(null, value);
73 }
74 });
75}
76
77var AWS = repl.context.AWS = require('../lib/aws');
78repl.eval = customEval;
79
80// context variables
81repl.context.data = null;
82repl.context.error = null;
83repl.context.request = null;
84repl.context.response = null;
85
86// setup REPL history
87try {
88 var replHistory = require('repl.history');
89 replHistory(repl, process.env.HOME + '/.node_history');
90} catch (e) {
91 console.log("Missing repl.history package, history will not be supported.");
92 console.log(" Type `npm install repl.history` to enable history.");
93}
94
95// modify Request.prototype.send listener to track if the listener has been called
96var sendListener = AWS.Request.prototype.send;
97AWS.Request.prototype.send = function(callback) {
98 this.__hasBeenSent__ = true;
99 return sendListener.call(this, callback);
100};
101
102// flag to indicate that requests should be sent when callback is not provided
103// by default this is on, but can be turned off by setting `autoSend = false`
104repl.context.autoSend = true;
105
106// load services as defined instances
107for (var key in AWS) {
108 var id = AWS[key].serviceIdentifier;
109 if (id) {
110 if (id === 'cloudsearchdomain' || id === 'iotdata') continue; // this required an explicit endpoint
111
112 var svcClass = AWS[key];
113 var svc = new svcClass(defaultOptions);
114 svc.with = function(config) {
115 return new this.constructor.__super__(AWS.util.merge(this.config, config));
116 };
117 repl.context[svcClass.serviceIdentifier] = svc;
118 }
119}