lix-website/themes/lix/assets/bootstrap/node_modules/browserstack/lib/client.js
2024-04-26 22:49:34 -06:00

91 lines
2.1 KiB
JavaScript

var https = require("https");
var http = require("http");
var extend = require("./extend");
var HttpsProxyAgent = require("https-proxy-agent");
var userAgent = getUA();
function getUA() {
var os = require("os");
var version = require("../package.json").version;
return os.platform() + "/" + os.release() + " " +
"node/" + process.versions.node + " " +
"node-browserstack/" + version;
}
var BaseClient = function(settings) {
if (!settings.username) {
throw new Error("Username is required.");
}
if (!settings.password) {
throw new Error("Password is required.");
}
extend(this, settings);
this.authHeader = "Basic " +
Buffer.from(this.username + ":" + this.password).toString("base64");
};
BaseClient.prototype.request = function(options, data, fn) {
if (typeof data === "function") {
fn = data;
data = null;
}
fn = fn || function() {};
var reqOptions = extend({
host: this.server.host,
port: this.server.port,
method: "GET",
headers: {
authorization: this.authHeader,
"content-type": "application/json",
"user-agent": userAgent,
"content-length": typeof data === "string" ? data.length : 0
},
agent: (this.proxy) ? new HttpsProxyAgent(this.proxy) : null
}, options);
var req = (this.useHttp ? http : https).request(reqOptions, function(res) {
var response = "";
res.setEncoding("utf8");
res.on("data", function(chunk) {
response += chunk;
});
res.on("end", function() {
if (res.statusCode !== 200) {
var message;
if (res.headers["content-type"].indexOf("json") !== -1) {
response = JSON.parse(response);
message = response.message;
if (response.errors && response.errors.length) {
message += " - " + response.errors.map(function(error) {
return "`" + error.field + "` " + error.code;
}).join(", ");
}
} else {
message = response;
}
if (!message && res.statusCode === 403) {
message = "Forbidden";
}
fn(new Error(message));
} else {
fn(null, JSON.parse(response));
}
});
});
req.on("error", fn);
if (data) {
req.write(data);
}
req.end();
};
module.exports = BaseClient;