Skip to content

Commit 0b6a772

Browse files
committed
refactor to not rely on babel
1 parent d45fcbd commit 0b6a772

File tree

7 files changed

+81
-326
lines changed

7 files changed

+81
-326
lines changed

.babelrc

Lines changed: 0 additions & 12 deletions
This file was deleted.

.eslintrc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
extends: eslint:recommended
2-
parser: babel-eslint
2+
33
rules:
44
strict: 0
55

66
env:
77
node: true
88
es6: true
9-

connector.js

Lines changed: 73 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use strict';
2+
13
/**
24
* A connection handler for Amazon ES.
35
*
@@ -9,125 +11,116 @@
911
* @class HttpConnector
1012
*/
1113

12-
import AWS from 'aws-sdk';
13-
import HttpConnector from 'elasticsearch/src/lib/connectors/http'
14-
import _ from 'elasticsearch/src/lib/utils';
15-
import zlib from 'zlib';
14+
const AWS = require('aws-sdk');
15+
const HttpConnector = require('elasticsearch/src/lib/connectors/http');
16+
const zlib = require('zlib');
1617

1718
class HttpAmazonESConnector extends HttpConnector {
1819
constructor(host, config) {
1920
super(host, config);
20-
const { protocol, port } = host;
21+
22+
const protocol = host.protocol;
23+
const port = host.port;
2124
const endpoint = new AWS.Endpoint(host.host);
2225

2326
if (protocol) endpoint.protocol = protocol.replace(/:?$/, ":");
2427
if (port) endpoint.port = port;
2528

26-
this.AWS = AWS;
2729
this.awsConfig = config.awsConfig || AWS.config;
2830
this.endpoint = endpoint;
2931
this.httpOptions = config.httpOptions || this.awsConfig.httpOptions;
32+
this.httpClient = new AWS.NodeHttpClient();
3033
}
3134

32-
async request(params, cb) {
33-
let incoming;
34-
let timeoutId;
35-
let request;
35+
request(params, cb) {
36+
const reqParams = this.makeReqParams(params);
37+
const request = this.createRequest(params, reqParams);
38+
const signer = new AWS.Signers.V4(request, 'es');
39+
3640
let req;
3741
let status = 0;
3842
let headers = {};
39-
let log = this.log;
4043
let response;
41-
const AWS = this.AWS;
44+
let incoming;
4245

43-
let reqParams = this.makeReqParams(params);
4446
// general clean-up procedure to run after the request
4547
// completes, has an error, or is aborted.
46-
let cleanUp = _.bind(function (err) {
47-
clearTimeout(timeoutId);
48-
48+
const cleanUp = (err) => {
4949
req && req.removeAllListeners();
5050
incoming && incoming.removeAllListeners();
5151

52-
if ((err instanceof Error) === false) {
53-
err = void 0;
54-
}
55-
56-
log.trace(params.method, reqParams, params.body, response, status);
57-
if (err) {
52+
this.log.trace(params.method, reqParams, params.body, response, status);
53+
if (err instanceof Error) {
5854
cb(err);
5955
} else {
60-
cb(err, response, status, headers);
56+
cb(null, response, status, headers);
6157
}
62-
}, this);
63-
64-
request = new AWS.HttpRequest(this.endpoint);
65-
66-
// copy across params
67-
for (let p in reqParams) {
68-
request[p] = reqParams[p];
69-
}
70-
request.region = this.awsConfig.region;
71-
if (params.body) request.body = params.body;
72-
if (!request.headers) request.headers = {};
73-
request.headers['presigned-expires'] = false;
74-
request.headers['Host'] = this.endpoint.host;
58+
};
7559

7660
// load creds
77-
let CREDS;
78-
try {
79-
CREDS = await this.getAWSCredentials();
80-
81-
// Sign the request (Sigv4)
82-
let signer = new AWS.Signers.V4(request, 'es');
83-
signer.addAuthorization(CREDS, new Date());
84-
} catch (e) {
85-
if (e && e.message) e.message = `AWS Credentials error: ${e.message}`;
86-
cleanUp(e);
87-
return () => {};
88-
}
89-
90-
let send = new AWS.NodeHttpClient();
91-
req = send.handleRequest(request, this.httpOptions, function (_incoming) {
92-
incoming = _incoming;
93-
status = incoming.statusCode;
94-
headers = incoming.headers;
95-
response = '';
96-
97-
let encoding = (headers['content-encoding'] || '').toLowerCase();
98-
if (encoding === 'gzip' || encoding === 'deflate') {
99-
incoming = incoming.pipe(zlib.createUnzip());
100-
}
101-
102-
incoming.setEncoding('utf8');
103-
incoming.on('data', function (d) {
104-
response += d;
61+
return this.getAWSCredentials()
62+
.then(creds => {
63+
// Sign the request (Sigv4)
64+
signer.addAuthorization(creds, new Date());
65+
66+
req = this.httpClient.handleRequest(request, this.httpOptions, function (_incoming) {
67+
incoming = _incoming;
68+
status = incoming.statusCode;
69+
headers = incoming.headers;
70+
response = '';
71+
72+
let encoding = (headers['content-encoding'] || '').toLowerCase();
73+
if (encoding === 'gzip' || encoding === 'deflate') {
74+
incoming = incoming.pipe(zlib.createUnzip());
75+
}
76+
77+
incoming.setEncoding('utf8');
78+
incoming.on('data', function (d) {
79+
response += d;
80+
});
81+
82+
incoming.on('error', cleanUp);
83+
incoming.on('end', cleanUp);
84+
}, cleanUp);
85+
86+
req.on('error', cleanUp);
87+
88+
req.setNoDelay(true);
89+
req.setSocketKeepAlive(true);
90+
})
91+
.then(() => {
92+
return () => req.abort();
93+
})
94+
.catch(e => {
95+
if (e && e.message) e.message = `AWS Credentials error: ${e.message}`;
96+
cleanUp(e);
97+
return () => {};
10598
});
106-
107-
incoming.on('error', cleanUp);
108-
incoming.on('end', cleanUp);
109-
}, cleanUp);
110-
111-
req.on('error', cleanUp);
112-
113-
req.setNoDelay(true);
114-
req.setSocketKeepAlive(true);
115-
116-
return function () {
117-
req.abort();
118-
};
11999
}
120100

121101
getAWSCredentials() {
122-
const { awsConfig } = this;
123-
124102
return new Promise((resolve, reject) => {
125-
awsConfig.getCredentials((err, creds) => {
103+
this.awsConfig.getCredentials((err, creds) => {
126104
if (err) return reject(err);
127105
return resolve(creds);
128106
});
129107
});
130108
}
109+
110+
createRequest(params, reqParams) {
111+
const request = new AWS.HttpRequest(this.endpoint);
112+
113+
// copy across params
114+
Object.assign(request, reqParams);
115+
116+
request.region = this.awsConfig.region;
117+
if (params.body) request.body = params.body;
118+
if (!request.headers) request.headers = {};
119+
request.headers['presigned-expires'] = false;
120+
request.headers['Host'] = this.endpoint.host;
121+
122+
return request;
123+
}
131124
}
132125

133126
module.exports = HttpAmazonESConnector;

0 commit comments

Comments
 (0)