-
Notifications
You must be signed in to change notification settings - Fork 2
/
Transport.js
84 lines (74 loc) · 1.8 KB
/
Transport.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
'use strict';
let request = require('request');
let path = require('path');
let _ = require('lodash');
const APP_LIMITS_MAP = {
'x-limit-app-limit': 'limit',
'x-limit-app-remaining': 'remaining',
'x-limit-app-reset': 'reset',
};
/**
* Transport
*/
class Transport {
/**
* Constructor for transport
*
* @param {Client} client
*/
constructor(client) {
this.client = client;
}
/**
* Send request
*
* @param {object} options Request options
*
* @return {Promise} Promise for chaining
*/
sendRequest(options) {
var options = Object.assign(
{},
{
host: this.client.options.host,
method: 'GET',
path: '',
query: {},
body: {}
},
options
);
return new Promise(
(resolve, reject) => {
request(
{
method: options.method,
uri: options.host + path.join('/' + this.client.options.version, options.path),
qs: options.query,
form: options.body
},
(error, response, body) => {
if (error) {
return reject(new Error('Failed to make the request: ' + error));
}
try {
var result = JSON.parse(body);
} catch (err) {
return reject(new Error('Could not parse Pushover response'));
}
if (response.statusCode != 200) {
return reject(new Error(result.errors[0]));
}
for (let i in APP_LIMITS_MAP) {
if (_.has(response.headers, i)) {
this.client.app[APP_LIMITS_MAP[i]] = response.headers[i];
}
}
return resolve(result);
}
);
}
);
}
}
module.exports = Transport;