New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

aurorajs

Package Overview
Dependencies
Maintainers
1
Versions
59
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aurorajs - npm Package Compare versions

Comparing version 0.1.36 to 0.1.37

tests/check.js

149

index.js

@@ -5,6 +5,34 @@ "use strict";

var Os = require("os");
var lsusbdev = require("lsusbdev");
var async = require("async");
function checking(checkanswer, cmd) {
return new Promise(function (resolve, reject) {
exec(cmd).then(function (data) {
var lines = data.split("\n");
for (var i = 0; i < lines.length; i++) {
if (lines[i].split("erial Number:").length > 1) {
checkanswer.serial = lines[i].split("erial Number: ")[1];
}
if (lines[i].split("irmware:").length > 1) {
checkanswer.firmware = lines[i].split("irmware: ")[1];
}
if (lines[i].split("anufacturing Date:").length > 1) {
checkanswer.dateprod = lines[i].split("anufacturing Date: ")[1];
}
}
if (checkanswer.serial && checkanswer.serial !== "" && checkanswer.firmware && checkanswer.firmware !== "" && checkanswer.dateprod && checkanswer.dateprod !== "") {
resolve(checkanswer);
}
else {
reject("malformed answer");
}
}).catch(function (err) {
reject(err);
});
});
}
function prepare_address(addresses) {
var readdr = [];
for (var i = 0; i < addresses.length; i++) {
readdr[i] = { uuid: addresses[i].uuid, dev: addresses[i].dev, address: addresses[i].address };
readdr[i] = { uuid: addresses[i].uuid, dev: addresses[i].hub, address: addresses[i].address };
}

@@ -23,15 +51,11 @@ return JSON.stringify(readdr);

if (Os.arch() === "arm") {
console.log("CMD aurora arm");
cmd = __dirname + "/bin/rasp2/aurora.bin";
}
else if (Os.arch() === "x64") {
console.log("CMD aurora x64");
cmd = __dirname + "/bin/x64/aurora.bin";
}
else if (Os.arch() === "ia32") {
console.log("CMD aurora ia32");
cmd = __dirname + "/bin/ia32/aurora.bin";
}
else {
console.log("CMD aurora");
cmd = "aurora";

@@ -44,8 +68,93 @@ }

var exe = this.exec;
var addresses = prepare_address(this.addresses);
var timezone = this.timezone;
var prepared_addresses = prepare_address(this.addresses);
var that = this;
return new Promise(function (resolve, reject) {
exec(__dirname + "/aurora.sh -a \"" + addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function (data) {
resolve(JSON.parse(data));
if (!that.addresses[0].serial) {
that.checkAll().then(function (a) {
that.addresses = a;
exec(__dirname + "/aurora.sh -a \"" + prepared_addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function (data) {
var apians = JSON.parse(data);
for (var i = 0; i < apians.length; i++) {
for (var f = 0; f < a.length; f++) {
if (apians[i].uid === a[f].uuid) {
apians[i].firmware = a[f].firmware;
apians[i].dateprod = a[f].dateprod;
apians[i].serial = a[f].serial;
apians[i].address = a[f].address;
}
}
}
resolve(apians);
}).catch(function (err) {
reject(err);
});
}).catch(function () {
exec(__dirname + "/aurora.sh -a \"" + prepared_addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function (data) {
resolve(JSON.parse(data));
}).catch(function (err) {
reject(err);
});
});
}
else {
var a_1 = that.addresses;
exec(__dirname + "/aurora.sh -a \"" + prepared_addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function (data) {
var apians = JSON.parse(data);
for (var i = 0; i < apians.length; i++) {
for (var f = 0; f < a_1.length; f++) {
if (apians[i].uid === a_1[f].uuid) {
apians[i].firmware = a_1[f].firmware;
apians[i].dateprod = a_1[f].dateprod;
apians[i].serial = a_1[f].serial;
apians[i].address = a_1[f].address;
}
}
}
resolve(apians);
}).catch(function (err) {
reject(err);
});
}
});
};
AJS.prototype.check = function (uuid) {
if (!uuid)
throw Error("no uid provided");
var exe = this.exec;
var addresses = this.addresses;
var checkanswer = { uuid: uuid };
return new Promise(function (resolve, reject) {
for (var i = 0; i < addresses.length; i++) {
if (addresses[i].uuid === uuid) {
checkanswer.hub = addresses[i].hub;
checkanswer.address = addresses[i].address;
}
}
lsusbdev().then(function (devis) {
for (var i = 0; i < devis.length; i++) {
if (devis[i].hub === checkanswer.hub) {
checkanswer.dev = devis[i].dev;
}
}
var cmd = exe + " -a " + checkanswer.address + " -Y 20 -n -f -g " + checkanswer.dev;
checking(checkanswer, cmd).then(function (a) {
resolve(a);
}).catch(function () {
checking(checkanswer, cmd).then(function (a) {
resolve(a);
}).catch(function () {
checking(checkanswer, cmd).then(function (a) {
resolve(a);
}).catch(function () {
checking(checkanswer, cmd).then(function (a) {
resolve(a);
}).catch(function (err) {
reject(err);
});
});
});
});
}).catch(function (err) {
console.error("errrrrr2");
reject(err);

@@ -55,2 +164,24 @@ });

};
AJS.prototype.checkAll = function () {
var addresses = this.addresses;
var that = this;
var allanswers = [];
return new Promise(function (resolve, reject) {
async.each(addresses, function (iterator, callback) {
that.check(iterator.uuid).then(function (chkansw) {
allanswers.push(chkansw);
callback();
}).catch(function () {
callback();
});
}, function (err) {
if (err) {
reject(err);
}
else {
resolve(allanswers);
}
});
});
};
AJS.prototype.reconfigure = function (opt) {

@@ -70,2 +201,2 @@ if (opt) {

//# sourceMappingURL=data:application/json;base64,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QUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVMsR0FBRztnQkFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QseUJBQVcsR0FBWCxVQUFZLEdBQWlFO1FBQ3pFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDTixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUMvQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUNMLFVBQUM7QUFBRCxDQS9DQSxBQStDQyxJQUFBO0FBQ0QsaUJBQVMsR0FBRyxDQUFBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IGV4ZWMgPSByZXF1aXJlKFwicHJvbWlzZWQtZXhlY1wiKTtcbmltcG9ydCAqIGFzIFByb21pc2UgZnJvbSBcImJsdWViaXJkXCI7XG5pbXBvcnQgKiBhcyBPcyBmcm9tIFwib3NcIjtcblxuZnVuY3Rpb24gcHJlcGFyZV9hZGRyZXNzKGFkZHJlc3NlczogSUFkZHJlc3NbXSkge1xuICAgIGxldCByZWFkZHIgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZWFkZHJbaV0gPSB7IHV1aWQ6IGFkZHJlc3Nlc1tpXS51dWlkLCBkZXY6IGFkZHJlc3Nlc1tpXS5kZXYsIGFkZHJlc3M6IGFkZHJlc3Nlc1tpXS5hZGRyZXNzIH07XG5cbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlYWRkcik7XG59XG5pbnRlcmZhY2UgSXN0cmluZyB7XG4gICAgdm9sdGFnZTogbnVtYmVyO1xuICAgIGN1cnJlbnQ6IG51bWJlcjtcbiAgICBwb3dlcjogbnVtYmVyO1xufVxuXG5cblxuaW50ZXJmYWNlIElBUEkge1xuXG4gICAgX2lkOiBzdHJpbmc7XG4gICAgdWlkOiBzdHJpbmc7XG4gICAgYm9vdElkOiBzdHJpbmc7XG4gICAgYm9vdFRpbWU6IG51bWJlcjtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgdXBkYXRlZEF0OiBudW1iZXI7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIHN0cmluZ3M6IElzdHJpbmdbXTtcbiAgICBncmlkOiB7XG4gICAgICAgIHZvbHRhZ2U6IG51bWJlcjtcbiAgICAgICAgY3VycmVudDogbnVtYmVyO1xuICAgICAgICBwb3dlcjogbnVtYmVyO1xuICAgICAgICBoejogbnVtYmVyO1xuICAgIH07XG4gICAgRGNBY0N2ckVmZjogbnVtYmVyO1xuICAgIGludlRlbXA6IG51bWJlcjtcbiAgICBlbnZUZW1wOiBudW1iZXI7XG4gICAgZGFpbHlFbmVyZ3k6IG51bWJlcjtcbiAgICB3ZWVrbHlFbmVyZ3k6IG51bWJlcjtcbiAgICBsYXN0N0RheXNFbmVyZ3k6IG51bWJlcjtcbiAgICBtb250aGx5RW5lcmd5OiBudW1iZXI7XG4gICAgeWVhcmx5RW5lcmd5OiBudW1iZXI7XG4gICAgdG90YWxFbmVyZ3k6IG51bWJlcjtcbiAgICBwYXJ0aWFsRW5lcmd5OiBudW1iZXI7XG4gICAgYnVsa1Y6IG51bWJlcjtcbiAgICBidWxrTVY6IG51bWJlcjtcbiAgICBidWxrREM6IG51bWJlcjtcbiAgICBpc29SZXM6IG51bWJlcjtcbiAgICBncmlkVkRDOiBudW1iZXI7XG4gICAgZ3JpZEF2Z1Y6IG51bWJlcjtcbiAgICBncmlkRENIejogbnVtYmVyO1xuICAgIHBlYWtNYXg6IG51bWJlcjtcbiAgICBwZWFrRGF5OiBudW1iZXI7XG4gICAgcGluMVc6IG51bWJlcjtcbiAgICBwaW4yVzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSUFkZHJlc3Mge1xuICAgIHV1aWQ6IHN0cmluZztcbiAgICBkZXY6IHN0cmluZztcbiAgICBhZGRyZXNzOiBudW1iZXI7XG59XG5cbmNsYXNzIEFKUyB7XG4gICAgYWRkcmVzc2VzOiBJQWRkcmVzc1tdO1xuICAgIHRpbWV6b25lOiBzdHJpbmc7XG4gICAgZXhlYzogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGFkZHJlc3NlczogSUFkZHJlc3NbXSwgdGltZXpvbmU6IHN0cmluZywgZXhlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWRkcmVzc2VzID0gYWRkcmVzc2VzO1xuICAgICAgICB0aGlzLnRpbWV6b25lID0gdGltZXpvbmU7XG4gICAgICAgIGxldCBjbWQ6IHN0cmluZztcbiAgICAgICAgaWYgKGV4ZSkge1xuICAgICAgICAgICAgY21kID0gZXhlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9zLmFyY2goKSA9PT0gXCJhcm1cIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ01EIGF1cm9yYSBhcm1cIik7XG4gICAgICAgICAgICAgICAgY21kID0gX19kaXJuYW1lICsgXCIvYmluL3Jhc3AyL2F1cm9yYS5iaW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoT3MuYXJjaCgpID09PSBcIng2NFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDTUQgYXVyb3JhIHg2NFwiKTtcbiAgICAgICAgICAgICAgICBjbWQgPSBfX2Rpcm5hbWUgKyBcIi9iaW4veDY0L2F1cm9yYS5iaW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoT3MuYXJjaCgpID09PSBcImlhMzJcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ01EIGF1cm9yYSBpYTMyXCIpO1xuICAgICAgICAgICAgICAgIGNtZCA9IF9fZGlybmFtZSArIFwiL2Jpbi9pYTMyL2F1cm9yYS5iaW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDTUQgYXVyb3JhXCIpO1xuICAgICAgICAgICAgICAgIGNtZCA9IFwiYXVyb3JhXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4ZWMgPSBjbWQ7XG4gICAgfVxuICAgIGRhdGEoKSB7XG4gICAgICAgIGxldCBleGUgPSB0aGlzLmV4ZWM7XG4gICAgICAgIGxldCBhZGRyZXNzZXMgPSBwcmVwYXJlX2FkZHJlc3ModGhpcy5hZGRyZXNzZXMpO1xuICAgICAgICBsZXQgdGltZXpvbmUgPSB0aGlzLnRpbWV6b25lO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SUFQSVtdPihmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGV4ZWMoX19kaXJuYW1lICsgXCIvYXVyb3JhLnNoIC1hIFxcXCJcIiArIGFkZHJlc3NlcyArIFwiXFxcIiAtdCBcXFwiXCIgKyB0aW1lem9uZSArIFwiXFxcIiAtZSBcXFwiXCIgKyBleGUgKyBcIlxcXCJcIikudGhlbihmdW5jdGlvbihkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoZGF0YSkpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlY29uZmlndXJlKG9wdDogeyBhZGRyZXNzZXM/OiBJQWRkcmVzc1tdLCB0aW1lem9uZT86IHN0cmluZywgZXhlYz86IHN0cmluZyB9KSB7XG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIGlmIChvcHQuYWRkcmVzc2VzKSB0aGlzLmFkZHJlc3NlcyA9IG9wdC5hZGRyZXNzZXM7XG4gICAgICAgICAgICBpZiAob3B0LnRpbWV6b25lKSB0aGlzLnRpbWV6b25lID0gb3B0LnRpbWV6b25lO1xuICAgICAgICAgICAgaWYgKG9wdC5leGVjKSB0aGlzLmV4ZWMgPSBvcHQuZXhlYztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCA9IEFKU1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9
//# sourceMappingURL=data:application/json;base64,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QUFRLENBQUM7WUFDL0MsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUM7SUFDTCxVQUFDO0FBQUQsQ0EvT0EsQUErT0MsSUFBQTtBQUNELGlCQUFTLEdBQUcsQ0FBQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImxldCBleGVjID0gcmVxdWlyZShcInByb21pc2VkLWV4ZWNcIik7XG5pbXBvcnQgKiBhcyBQcm9taXNlIGZyb20gXCJibHVlYmlyZFwiO1xuaW1wb3J0ICogYXMgT3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgbHN1c2JkZXYgPSByZXF1aXJlKFwibHN1c2JkZXZcIik7XG5pbXBvcnQgYXN5bmMgPSByZXF1aXJlKFwiYXN5bmNcIik7XG5cblxuXG5mdW5jdGlvbiBjaGVja2luZyhjaGVja2Fuc3dlciwgY21kKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPElBZGRyZXNzPihmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuXG4gICAgICAgIGV4ZWMoY21kKS50aGVuKGZ1bmN0aW9uKGRhdGEpIHsgLy8gZmlybXdhcmVcbiAgICAgICAgICAgIGxldCBsaW5lcyA9IGRhdGEuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZXNbaV0uc3BsaXQoXCJlcmlhbCBOdW1iZXI6XCIpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2thbnN3ZXIuc2VyaWFsID0gbGluZXNbaV0uc3BsaXQoXCJlcmlhbCBOdW1iZXI6IFwiKVsxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZXNbaV0uc3BsaXQoXCJpcm13YXJlOlwiKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrYW5zd2VyLmZpcm13YXJlID0gbGluZXNbaV0uc3BsaXQoXCJpcm13YXJlOiBcIilbMV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmVzW2ldLnNwbGl0KFwiYW51ZmFjdHVyaW5nIERhdGU6XCIpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2thbnN3ZXIuZGF0ZXByb2QgPSBsaW5lc1tpXS5zcGxpdChcImFudWZhY3R1cmluZyBEYXRlOiBcIilbMV07XG4gICAgICAgICAgICAgICAgfVxuXG5cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hlY2thbnN3ZXIuc2VyaWFsICYmIGNoZWNrYW5zd2VyLnNlcmlhbCAhPT0gXCJcIiAmJiBjaGVja2Fuc3dlci5maXJtd2FyZSAmJiBjaGVja2Fuc3dlci5maXJtd2FyZSAhPT0gXCJcIiAmJiBjaGVja2Fuc3dlci5kYXRlcHJvZCAmJiBjaGVja2Fuc3dlci5kYXRlcHJvZCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoY2hlY2thbnN3ZXIpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChcIm1hbGZvcm1lZCBhbnN3ZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vICAgY2hlY2thbnN3ZXIuZmlybXdhcmUgPSBkYXRhO1xuXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuXG5cblxuICAgIH0pO1xuXG59XG5cblxuXG5mdW5jdGlvbiBwcmVwYXJlX2FkZHJlc3MoYWRkcmVzc2VzOiBJQWRkcmVzc1tdKSB7XG4gICAgbGV0IHJlYWRkciA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlYWRkcltpXSA9IHsgdXVpZDogYWRkcmVzc2VzW2ldLnV1aWQsIGRldjogYWRkcmVzc2VzW2ldLmh1YiwgYWRkcmVzczogYWRkcmVzc2VzW2ldLmFkZHJlc3MgfTtcblxuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVhZGRyKTtcbn1cblxuXG5cbmludGVyZmFjZSBJc3RyaW5nIHtcbiAgICB2b2x0YWdlOiBudW1iZXI7XG4gICAgY3VycmVudDogbnVtYmVyO1xuICAgIHBvd2VyOiBudW1iZXI7XG59XG5cblxuXG5pbnRlcmZhY2UgSUFQSSB7XG5cbiAgICBfaWQ6IHN0cmluZztcbiAgICB1aWQ6IHN0cmluZztcbiAgICBib290SWQ6IHN0cmluZztcbiAgICBib290VGltZTogbnVtYmVyO1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICB1cGRhdGVkQXQ6IG51bWJlcjtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgc3RyaW5nczogSXN0cmluZ1tdO1xuICAgIGdyaWQ6IHtcbiAgICAgICAgdm9sdGFnZTogbnVtYmVyO1xuICAgICAgICBjdXJyZW50OiBudW1iZXI7XG4gICAgICAgIHBvd2VyOiBudW1iZXI7XG4gICAgICAgIGh6OiBudW1iZXI7XG4gICAgfTtcbiAgICBEY0FjQ3ZyRWZmOiBudW1iZXI7XG4gICAgaW52VGVtcDogbnVtYmVyO1xuICAgIGVudlRlbXA6IG51bWJlcjtcbiAgICBkYWlseUVuZXJneTogbnVtYmVyO1xuICAgIHdlZWtseUVuZXJneTogbnVtYmVyO1xuICAgIGxhc3Q3RGF5c0VuZXJneTogbnVtYmVyO1xuICAgIG1vbnRobHlFbmVyZ3k6IG51bWJlcjtcbiAgICB5ZWFybHlFbmVyZ3k6IG51bWJlcjtcbiAgICB0b3RhbEVuZXJneTogbnVtYmVyO1xuICAgIHBhcnRpYWxFbmVyZ3k6IG51bWJlcjtcbiAgICBidWxrVjogbnVtYmVyO1xuICAgIGJ1bGtNVjogbnVtYmVyO1xuICAgIGJ1bGtEQzogbnVtYmVyO1xuICAgIGlzb1JlczogbnVtYmVyO1xuICAgIGdyaWRWREM6IG51bWJlcjtcbiAgICBncmlkQXZnVjogbnVtYmVyO1xuICAgIGdyaWREQ0h6OiBudW1iZXI7XG4gICAgcGVha01heDogbnVtYmVyO1xuICAgIHBlYWtEYXk6IG51bWJlcjtcbiAgICBwaW4xVzogbnVtYmVyO1xuICAgIHBpbjJXOiBudW1iZXI7XG5cbiAgICBmaXJtd2FyZTogc3RyaW5nO1xuICAgIGRhdGVwcm9kOiBzdHJpbmc7XG4gICAgc2VyaWFsOiBzdHJpbmc7XG4gICAgYWRkcmVzczogbnVtYmVyO1xuXG59XG5cblxuXG5pbnRlcmZhY2UgSUFkZHJlc3Mge1xuICAgIHV1aWQ6IHN0cmluZztcbiAgICBkZXY/OiBzdHJpbmc7XG4gICAgYWRkcmVzczogbnVtYmVyO1xuICAgIGh1Yj86IHN0cmluZztcbiAgICBmaXJtd2FyZT86IHN0cmluZztcbiAgICBkYXRlcHJvZD86IHN0cmluZztcbiAgICBzZXJpYWw/OiBzdHJpbmc7XG5cblxufVxuXG5jbGFzcyBBSlMge1xuICAgIGFkZHJlc3NlczogSUFkZHJlc3NbXTtcbiAgICB0aW1lem9uZTogc3RyaW5nO1xuICAgIGV4ZWM6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzZXM6IElBZGRyZXNzW10sIHRpbWV6b25lOiBzdHJpbmcsIGV4ZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLmFkZHJlc3NlcyA9IGFkZHJlc3NlcztcbiAgICAgICAgdGhpcy50aW1lem9uZSA9IHRpbWV6b25lO1xuICAgICAgICBsZXQgY21kOiBzdHJpbmc7XG4gICAgICAgIGlmIChleGUpIHtcbiAgICAgICAgICAgIGNtZCA9IGV4ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChPcy5hcmNoKCkgPT09IFwiYXJtXCIpIHtcbiAgICAgICAgICAgICAgICBjbWQgPSBfX2Rpcm5hbWUgKyBcIi9iaW4vcmFzcDIvYXVyb3JhLmJpblwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChPcy5hcmNoKCkgPT09IFwieDY0XCIpIHtcbiAgICAgICAgICAgICAgICBjbWQgPSBfX2Rpcm5hbWUgKyBcIi9iaW4veDY0L2F1cm9yYS5iaW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoT3MuYXJjaCgpID09PSBcImlhMzJcIikge1xuICAgICAgICAgICAgICAgIGNtZCA9IF9fZGlybmFtZSArIFwiL2Jpbi9pYTMyL2F1cm9yYS5iaW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY21kID0gXCJhdXJvcmFcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhlYyA9IGNtZDtcbiAgICB9XG4gICAgZGF0YSgpIHtcbiAgICAgICAgbGV0IGV4ZSA9IHRoaXMuZXhlYztcbiAgICAgICAgbGV0IHRpbWV6b25lID0gdGhpcy50aW1lem9uZTtcblxuICAgICAgICBsZXQgcHJlcGFyZWRfYWRkcmVzc2VzID0gcHJlcGFyZV9hZGRyZXNzKHRoaXMuYWRkcmVzc2VzKTtcblxuICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElBUElbXT4oZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICAgICAgICAgIGlmICghdGhhdC5hZGRyZXNzZXNbMF0uc2VyaWFsKSB7XG5cbiAgICAgICAgICAgICAgICB0aGF0LmNoZWNrQWxsKCkudGhlbihmdW5jdGlvbihhKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGRyZXNzZXMgPSBhO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4ZWMoX19kaXJuYW1lICsgXCIvYXVyb3JhLnNoIC1hIFxcXCJcIiArIHByZXBhcmVkX2FkZHJlc3NlcyArIFwiXFxcIiAtdCBcXFwiXCIgKyB0aW1lem9uZSArIFwiXFxcIiAtZSBcXFwiXCIgKyBleGUgKyBcIlxcXCJcIikudGhlbihmdW5jdGlvbihkYXRhOiBzdHJpbmcpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwaWFuczogSUFQSVtdID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXBpYW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZiA9IDA7IGYgPCBhLmxlbmd0aDsgZisrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwaWFuc1tpXS51aWQgPT09IGFbZl0udXVpZCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlhbnNbaV0uZmlybXdhcmUgPSBhW2ZdLmZpcm13YXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpYW5zW2ldLmRhdGVwcm9kID0gYVtmXS5kYXRlcHJvZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaWFuc1tpXS5zZXJpYWwgPSBhW2ZdLnNlcmlhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaWFuc1tpXS5hZGRyZXNzID0gYVtmXS5hZGRyZXNzO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFwaWFucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4ZWMoX19kaXJuYW1lICsgXCIvYXVyb3JhLnNoIC1hIFxcXCJcIiArIHByZXBhcmVkX2FkZHJlc3NlcyArIFwiXFxcIiAtdCBcXFwiXCIgKyB0aW1lem9uZSArIFwiXFxcIiAtZSBcXFwiXCIgKyBleGUgKyBcIlxcXCJcIikudGhlbihmdW5jdGlvbihkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gdGhhdC5hZGRyZXNzZXM7XG5cblxuXG4gICAgICAgICAgICAgICAgZXhlYyhfX2Rpcm5hbWUgKyBcIi9hdXJvcmEuc2ggLWEgXFxcIlwiICsgcHJlcGFyZWRfYWRkcmVzc2VzICsgXCJcXFwiIC10IFxcXCJcIiArIHRpbWV6b25lICsgXCJcXFwiIC1lIFxcXCJcIiArIGV4ZSArIFwiXFxcIlwiKS50aGVuKGZ1bmN0aW9uKGRhdGE6IHN0cmluZykge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcGlhbnM6IElBUElbXSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXBpYW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBmID0gMDsgZiA8IGEubGVuZ3RoOyBmKyspIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcGlhbnNbaV0udWlkID09PSBhW2ZdLnV1aWQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlhbnNbaV0uZmlybXdhcmUgPSBhW2ZdLmZpcm13YXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlhbnNbaV0uZGF0ZXByb2QgPSBhW2ZdLmRhdGVwcm9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlhbnNbaV0uc2VyaWFsID0gYVtmXS5zZXJpYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaWFuc1tpXS5hZGRyZXNzID0gYVtmXS5hZGRyZXNzO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYXBpYW5zKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGNoZWNrKHV1aWQ6IHN0cmluZykgeyAvLyBnZXQgbW9kZWwsIGZpcm13YXJlLCBwcm9kdWN0aW9uIGRhdGVcblxuXG4gICAgICAgIGlmICghdXVpZCkgdGhyb3cgRXJyb3IoXCJubyB1aWQgcHJvdmlkZWRcIik7XG5cblxuICAgICAgICBsZXQgZXhlID0gdGhpcy5leGVjO1xuXG4gICAgICAgIGxldCBhZGRyZXNzZXMgPSB0aGlzLmFkZHJlc3NlcztcblxuXG5cbiAgICAgICAgbGV0IGNoZWNrYW5zd2VyID0gPElBZGRyZXNzPnsgdXVpZDogdXVpZCB9O1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJQWRkcmVzcz4oZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc2VzW2ldLnV1aWQgPT09IHV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2thbnN3ZXIuaHViID0gYWRkcmVzc2VzW2ldLmh1YjtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2thbnN3ZXIuYWRkcmVzcyA9IGFkZHJlc3Nlc1tpXS5hZGRyZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBsc3VzYmRldigpLnRoZW4oZnVuY3Rpb24oZGV2aXMpIHtcblxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXZpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aXNbaV0uaHViID09PSBjaGVja2Fuc3dlci5odWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYW5zd2VyLmRldiA9IGRldmlzW2ldLmRldjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IGV4ZSArIFwiIC1hIFwiICsgY2hlY2thbnN3ZXIuYWRkcmVzcyArIFwiIC1ZIDIwIC1uIC1mIC1nIFwiICsgY2hlY2thbnN3ZXIuZGV2O1xuXG4gICAgICAgICAgICAgICAgY2hlY2tpbmcoY2hlY2thbnN3ZXIsIGNtZCkudGhlbihmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNraW5nKGNoZWNrYW5zd2VyLCBjbWQpLnRoZW4oZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2luZyhjaGVja2Fuc3dlciwgY21kKS50aGVuKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcoY2hlY2thbnN3ZXIsIGNtZCkudGhlbihmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cblxuXG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImVycnJycnIyXCIpO1xuXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cblxuICAgIGNoZWNrQWxsKCkge1xuXG4gICAgICAgIGxldCBhZGRyZXNzZXMgPSB0aGlzLmFkZHJlc3NlcztcblxuICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGFsbGFuc3dlcnM6IElBZGRyZXNzW10gPSBbXTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SUFkZHJlc3NbXT4oZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cblxuICAgICAgICAgICAgYXN5bmMuZWFjaChhZGRyZXNzZXMsIGZ1bmN0aW9uKGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuXG4gICAgICAgICAgICAgICAgdGhhdC5jaGVjayhpdGVyYXRvci51dWlkKS50aGVuKGZ1bmN0aW9uKGNoa2Fuc3cpIHtcblxuICAgICAgICAgICAgICAgICAgICBhbGxhbnN3ZXJzLnB1c2goY2hrYW5zdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25lIG9mIHRoZSBpdGVyYXRpb25zIHByb2R1Y2VkIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICAvLyBBbGwgcHJvY2Vzc2luZyB3aWxsIG5vdyBzdG9wLlxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYWxsYW5zd2Vycyk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG5cblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9XG5cblxuICAgIHJlY29uZmlndXJlKG9wdDogeyBhZGRyZXNzZXM/OiBJQWRkcmVzc1tdLCB0aW1lem9uZT86IHN0cmluZywgZXhlYz86IHN0cmluZyB9KSB7XG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIGlmIChvcHQuYWRkcmVzc2VzKSB0aGlzLmFkZHJlc3NlcyA9IG9wdC5hZGRyZXNzZXM7XG4gICAgICAgICAgICBpZiAob3B0LnRpbWV6b25lKSB0aGlzLnRpbWV6b25lID0gb3B0LnRpbWV6b25lO1xuICAgICAgICAgICAgaWYgKG9wdC5leGVjKSB0aGlzLmV4ZWMgPSBvcHQuZXhlYztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCA9IEFKU1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9
let exec = require("promised-exec");
import * as Promise from "bluebird";
import * as Os from "os";
import lsusbdev = require("lsusbdev");
import async = require("async");
function checking(checkanswer, cmd) {
return new Promise<IAddress>(function(resolve, reject) {
exec(cmd).then(function(data) { // firmware
let lines = data.split("\n");
for (let i = 0; i < lines.length; i++) {
if (lines[i].split("erial Number:").length > 1) {
checkanswer.serial = lines[i].split("erial Number: ")[1];
}
if (lines[i].split("irmware:").length > 1) {
checkanswer.firmware = lines[i].split("irmware: ")[1];
}
if (lines[i].split("anufacturing Date:").length > 1) {
checkanswer.dateprod = lines[i].split("anufacturing Date: ")[1];
}
}
if (checkanswer.serial && checkanswer.serial !== "" && checkanswer.firmware && checkanswer.firmware !== "" && checkanswer.dateprod && checkanswer.dateprod !== "") {
resolve(checkanswer);
} else {
reject("malformed answer");
}
// checkanswer.firmware = data;
}).catch(function(err) {
reject(err);
});
});
}
function prepare_address(addresses: IAddress[]) {
let readdr = [];
for (let i = 0; i < addresses.length; i++) {
readdr[i] = { uuid: addresses[i].uuid, dev: addresses[i].dev, address: addresses[i].address };
readdr[i] = { uuid: addresses[i].uuid, dev: addresses[i].hub, address: addresses[i].address };

@@ -13,2 +62,5 @@ }

}
interface Istring {

@@ -59,8 +111,22 @@ voltage: number;

pin2W: number;
firmware: string;
dateprod: string;
serial: string;
address: number;
}
interface IAddress {
uuid: string;
dev: string;
dev?: string;
address: number;
hub?: string;
firmware?: string;
dateprod?: string;
serial?: string;
}

@@ -80,12 +146,8 @@

if (Os.arch() === "arm") {
console.log("CMD aurora arm");
cmd = __dirname + "/bin/rasp2/aurora.bin";
} else if (Os.arch() === "x64") {
console.log("CMD aurora x64");
cmd = __dirname + "/bin/x64/aurora.bin";
} else if (Os.arch() === "ia32") {
console.log("CMD aurora ia32");
cmd = __dirname + "/bin/ia32/aurora.bin";
} else {
console.log("CMD aurora");
cmd = "aurora";

@@ -99,12 +161,208 @@ }

let exe = this.exec;
let addresses = prepare_address(this.addresses);
let timezone = this.timezone;
let prepared_addresses = prepare_address(this.addresses);
let that = this;
return new Promise<IAPI[]>(function(resolve, reject) {
exec(__dirname + "/aurora.sh -a \"" + addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function(data: string) {
resolve(JSON.parse(data));
if (!that.addresses[0].serial) {
that.checkAll().then(function(a) {
that.addresses = a;
exec(__dirname + "/aurora.sh -a \"" + prepared_addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function(data: string) {
let apians: IAPI[] = JSON.parse(data);
for (let i = 0; i < apians.length; i++) {
for (let f = 0; f < a.length; f++) {
if (apians[i].uid === a[f].uuid) {
apians[i].firmware = a[f].firmware;
apians[i].dateprod = a[f].dateprod;
apians[i].serial = a[f].serial;
apians[i].address = a[f].address;
}
}
}
resolve(apians);
}).catch(function(err) {
reject(err);
});
}).catch(function() {
exec(__dirname + "/aurora.sh -a \"" + prepared_addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function(data: string) {
resolve(JSON.parse(data));
}).catch(function(err) {
reject(err);
});
});
} else {
let a = that.addresses;
exec(__dirname + "/aurora.sh -a \"" + prepared_addresses + "\" -t \"" + timezone + "\" -e \"" + exe + "\"").then(function(data: string) {
let apians: IAPI[] = JSON.parse(data);
for (let i = 0; i < apians.length; i++) {
for (let f = 0; f < a.length; f++) {
if (apians[i].uid === a[f].uuid) {
apians[i].firmware = a[f].firmware;
apians[i].dateprod = a[f].dateprod;
apians[i].serial = a[f].serial;
apians[i].address = a[f].address;
}
}
}
resolve(apians);
}).catch(function(err) {
reject(err);
});
}
});
}
check(uuid: string) { // get model, firmware, production date
if (!uuid) throw Error("no uid provided");
let exe = this.exec;
let addresses = this.addresses;
let checkanswer = <IAddress>{ uuid: uuid };
return new Promise<IAddress>(function(resolve, reject) {
for (let i = 0; i < addresses.length; i++) {
if (addresses[i].uuid === uuid) {
checkanswer.hub = addresses[i].hub;
checkanswer.address = addresses[i].address;
}
}
lsusbdev().then(function(devis) {
for (let i = 0; i < devis.length; i++) {
if (devis[i].hub === checkanswer.hub) {
checkanswer.dev = devis[i].dev;
}
}
let cmd = exe + " -a " + checkanswer.address + " -Y 20 -n -f -g " + checkanswer.dev;
checking(checkanswer, cmd).then(function(a) {
resolve(a);
}).catch(function() {
checking(checkanswer, cmd).then(function(a) {
resolve(a);
}).catch(function() {
checking(checkanswer, cmd).then(function(a) {
resolve(a);
}).catch(function() {
checking(checkanswer, cmd).then(function(a) {
resolve(a);
}).catch(function(err) {
reject(err);
});
});
});
});
}).catch(function(err) {
console.error("errrrrr2");
reject(err);
});
});
}
checkAll() {
let addresses = this.addresses;
let that = this;
let allanswers: IAddress[] = [];
return new Promise<IAddress[]>(function(resolve, reject) {
async.each(addresses, function(iterator, callback) {
that.check(iterator.uuid).then(function(chkansw) {
allanswers.push(chkansw);
callback();
}).catch(function() {
callback();
});
}, function(err) {
if (err) {
// One of the iterations produced an error.
// All processing will now stop.
reject(err);
} else {
resolve(allanswers);
}
});
});
}
reconfigure(opt: { addresses?: IAddress[], timezone?: string, exec?: string }) {

@@ -111,0 +369,0 @@ if (opt) {

6

package.json
{
"name": "aurorajs",
"version": "0.1.36",
"apiVersion": "0.0.2",
"version": "0.1.37",
"apiVersion": "0.0.3",
"main": "index.js",

@@ -16,3 +16,5 @@ "scripts": {

"dependencies": {
"async": "^2.0.0-rc.4",
"bluebird": "^3.1.1",
"lsusbdev": "0.0.10",
"promised-exec": "^1.0.1",

@@ -19,0 +21,0 @@ "verbo": "0.0.9"

var Aurora=require('../index.js');
var aurorajs=new Aurora([{"uuid":"dkhlih","hub":"1-1.3","address":2}],"Europe/Rome");
var aurorajs=new Aurora([{"uuid":"dkhlih","dev":"1-1.3","address":2}],"Europe/Rome");
aurorajs.data().then(function(doc){

@@ -7,0 +7,0 @@ if(doc){

{
"ambientDependencies": {
"Q": "github:DefinitelyTyped/DefinitelyTyped/q/Q.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"assertion-error": "github:DefinitelyTyped/DefinitelyTyped/assertion-error/assertion-error.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"async": "registry:dt/async#1.4.2+20160501155344",
"bluebird": "github:DefinitelyTyped/DefinitelyTyped/bluebird/bluebird.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"chai": "github:DefinitelyTyped/DefinitelyTyped/chai/chai.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"chalk": "github:DefinitelyTyped/DefinitelyTyped/chalk/chalk.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"gulp": "github:DefinitelyTyped/DefinitelyTyped/gulp/gulp.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"gulp-concat": "github:DefinitelyTyped/DefinitelyTyped/gulp-concat/gulp-concat.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"assertion-error": "github:DefinitelyTyped/DefinitelyTyped/assertion-error/assertion-error.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"bluebird": "github:DefinitelyTyped/DefinitelyTyped/bluebird/bluebird.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"gulp-filter": "github:DefinitelyTyped/DefinitelyTyped/gulp-filter/gulp-filter.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"vinyl": "github:DefinitelyTyped/DefinitelyTyped/vinyl/vinyl.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"minimatch": "github:DefinitelyTyped/DefinitelyTyped/minimatch/minimatch.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"mocha": "github:DefinitelyTyped/DefinitelyTyped/mocha/mocha.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"gulp-mocha": "github:DefinitelyTyped/DefinitelyTyped/gulp-mocha/gulp-mocha.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",

@@ -15,9 +16,9 @@ "gulp-sourcemaps": "github:DefinitelyTyped/DefinitelyTyped/gulp-sourcemaps/gulp-sourcemaps.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",

"gulp-util": "github:DefinitelyTyped/DefinitelyTyped/gulp-util/gulp-util.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"through2": "github:DefinitelyTyped/DefinitelyTyped/through2/through2.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"chalk": "github:DefinitelyTyped/DefinitelyTyped/chalk/chalk.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"minimatch": "github:DefinitelyTyped/DefinitelyTyped/minimatch/minimatch.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"mocha": "github:DefinitelyTyped/DefinitelyTyped/mocha/mocha.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"gulp": "github:DefinitelyTyped/DefinitelyTyped/gulp/gulp.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"orchestrator": "github:DefinitelyTyped/DefinitelyTyped/orchestrator/orchestrator.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"Q": "github:DefinitelyTyped/DefinitelyTyped/q/Q.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e"
"through2": "github:DefinitelyTyped/DefinitelyTyped/through2/through2.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e",
"vinyl": "github:DefinitelyTyped/DefinitelyTyped/vinyl/vinyl.d.ts#70bf7e2bfeb0d5b1b651ef3219bcc65c8eec117e"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc