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 = (scheme == 'http' && port == 80) || (scheme == 'https' && port == 443) ? '' : `:${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');
30 assert(!server.port || typeof(server.port) == 'number');
31 assert(!server.auth || typeof(server.auth) == 'object');
32 this._server = server;
37 return this.sendHttpRequest(path, 'GET', null, null).then(function (result) {
38 return JSON.parse(result.responseText);
42 getJSONWithStatus(path)
44 return this.getJSON(path).then(function (result) {
45 if (result['status'] != 'OK')
46 return Promise.reject(result);
53 const contentType = 'application/json';
54 const payload = JSON.stringify(data);
55 return this.sendHttpRequest(path, 'POST', 'application/json', payload).then(function (result) {
56 return JSON.parse(result.responseText);
60 postFormUrlencodedData(path, data)
62 const contentType = 'application/x-www-form-urlencoded';
63 const payload = querystring.stringify(data);
64 return this.sendHttpRequest(path, 'POST', contentType, payload).then(function (result) {
65 return result.responseText;
69 sendHttpRequest(path, method, contentType, content)
71 let server = this._server;
72 return new Promise(function (resolve, reject) {
74 hostname: server.host,
75 port: server.port || 80,
76 auth: server.auth ? server.auth.username + ':' + server.auth.password : null,
81 let request = (server.scheme == 'http' ? http : https).request(options, function (response) {
82 let responseText = '';
83 response.setEncoding('utf8');
84 response.on('data', function (chunk) { responseText += chunk; });
85 response.on('end', function () { resolve({statusCode: response.statusCode, responseText: responseText}); });
88 request.on('error', reject);
91 request.setHeader('Content-Type', contentType);
94 request.write(content);
101 if (typeof module != 'undefined')
102 module.exports.RemoteAPI = RemoteAPI;