3 let assert = require('assert');
4 let http = require('http');
5 let https = require('https');
6 let querystring = require('querystring');
13 this.configure(server);
18 let scheme = this._server.scheme;
19 let port = this._server.port;
20 let portSuffix = this._server.port == this._server.defaultPort ? '' : `:${port}`;
21 if (path.charAt(0) != '/')
23 return `${scheme}://${this._server.host}${portSuffix}${path}`;
28 assert(server.scheme === 'http' || server.scheme === 'https');
29 assert.equal(typeof(server.host), 'string', 'host should be a string');
30 assert(!server.port || typeof(server.port) == 'number', 'port should be a number');
34 assert.equal(typeof(server.auth), 'object', 'auth should be a dictionary with username and password as keys');
35 assert.equal(typeof(server.auth.username), 'string', 'auth should contain a string username');
36 assert.equal(typeof(server.auth.password), 'string', 'auth should contain a string password');
38 username: server.auth.username,
39 password: server.auth.password,
43 const defaultPort = server.scheme == 'http' ? 80 : 443;
45 scheme: server.scheme,
47 port: server.port || defaultPort,
48 defaultPort: defaultPort,
55 return this.sendHttpRequest(path, 'GET', null, null).then(function (result) {
56 return JSON.parse(result.responseText);
60 getJSONWithStatus(path)
62 return this.getJSON(path).then(function (result) {
63 if (result['status'] != 'OK')
64 return Promise.reject(result);
71 const contentType = 'application/json';
72 const payload = JSON.stringify(data);
73 return this.sendHttpRequest(path, 'POST', 'application/json', payload).then(function (result) {
74 return JSON.parse(result.responseText);
78 postFormUrlencodedData(path, data)
80 const contentType = 'application/x-www-form-urlencoded';
81 const payload = querystring.stringify(data);
82 return this.sendHttpRequest(path, 'POST', contentType, payload).then(function (result) {
83 return result.responseText;
87 sendHttpRequest(path, method, contentType, content)
89 let server = this._server;
90 return new Promise(function (resolve, reject) {
92 hostname: server.host,
94 auth: server.auth ? server.auth.username + ':' + server.auth.password : null,
99 let request = (server.scheme == 'http' ? http : https).request(options, function (response) {
100 let responseText = '';
101 response.setEncoding('utf8');
102 response.on('data', function (chunk) { responseText += chunk; });
103 response.on('end', function () { resolve({statusCode: response.statusCode, responseText: responseText}); });
106 request.on('error', reject);
109 request.setHeader('Content-Type', contentType);
112 request.write(content);
119 if (typeof module != 'undefined')
120 module.exports.RemoteAPI = RemoteAPI;