-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
53 lines (46 loc) · 1.28 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
const http = require('http');
const request = require('request');
const _ = require('lodash');
let settings;
module.exports.register = (opts, dependencies, next) => {
if (!opts.serverUrl) {
return next(new Error('The serverUrl parameter is invalid'));
}
settings = opts;
return next();
};
module.exports.execute = () => ({
query: (options, headers, timeout) => new Promise((resolve, reject) => request({
body: {
query: options.query,
variables: options.variables,
operationName: options.operationName ? options.operationName : null,
},
headers: _.extend({ 'User-Agent': 'oc' }, headers),
json: true,
method: 'POST',
timeout,
url: settings.serverUrl,
}, (err, result, body) => {
if (err) {
return reject(new Error(err));
}
if (typeof body !== 'object' || body === null) {
return reject({
errors: [{
message: 'Invalid response from graphql server.',
http: {
status: http.STATUS_CODES[result.statusCode],
code: result.statusCode,
body,
},
}],
});
}
// http://facebook.github.io/graphql/October2016/#sec-Errors
if ('errors' in body || !('data' in body)) {
return reject(body);
}
return resolve(body);
})),
});