3 let assert = require('assert');
4 let http = require('http');
5 let https = require('https');
7 let RemoteAPI = new (class RemoteAPI {
18 assert(server.scheme === 'http' || server.scheme === 'https');
19 assert.equal(typeof(server.host), 'string');
20 assert(!server.port || typeof(server.port) == 'number');
21 assert(!server.auth || typeof(server.auth) == 'object');
22 this._server = server;
27 let contentType = null;
29 contentType = 'application/json';
30 data = JSON.stringify(data);
32 return this.sendHttpRequest(path, 'GET', contentType, data).then(function (result) {
33 return JSON.parse(result.responseText);
37 fetchJSONWithStatus(path, data)
39 return this.fetchJSON(path, data).then(function (result) {
40 if (result['status'] != 'OK')
41 return Promise.reject(result);
46 sendHttpRequest(path, method, contentType, content)
48 let server = this._server;
49 return new Promise(function (resolve, reject) {
51 hostname: server.host,
52 port: server.port || 80,
58 let request = (server.scheme == 'http' ? http : https).request(options, function (response) {
59 let responseText = '';
60 response.setEncoding('utf8');
61 response.on('data', function (chunk) { responseText += chunk; });
62 response.on('end', function () { resolve({statusCode: response.statusCode, responseText: responseText}); });
65 request.on('error', reject);
68 request.setHeader('Content-Type', contentType);
71 request.write(content);
78 if (typeof module != 'undefined')
79 module.exports.RemoteAPI = RemoteAPI;