exports.__esModule = true; exports.ConnectionManager = void 0; var path = require("path"); var fs_1 = require("fs"); var Logger_1 = require("./Logger"); var fs = require("fs-extra"); var ensureDir = fs.ensureDir, pathExists = fs.pathExists, readJson = fs.readJson; var ConnectionManager = /** @class */ (function () { function ConnectionManager() { } ConnectionManager.prototype.load = function (callback) { var _this_1 = this; this.managerConfigPath = path.join(Undecked.dataPath, 'connections.json'); this.connections = {}; this.loadConfig(function () { var integration_count = 0; var device_count = 0; for (var integrationID in _this_1.connections) { integration_count++; device_count = device_count + Object.keys(_this_1.connections[integrationID]).length; } Logger_1.Log('info', "Loaded " + device_count + " device(s) across " + integration_count + " integration(s)"); callback(); }); }; ConnectionManager.prototype.loadConfig = function (callback) { var _this_1 = this; pathExists(this.managerConfigPath, function (err, exists) { if (err) throw err; if (exists) { readJson(_this_1.managerConfigPath, function (err, json) { if (err) throw err; _this_1.connections = json.connections; for (var integrationID in _this_1.connections) for (var connectionType in _this_1.connections[integrationID]) for (var connectionID in _this_1.connections[integrationID][connectionType]) { var connection = _this_1.connections[integrationID][connectionType][connectionID]; _this_1.validate(integrationID, connectionType, connectionID, connection.properties, function (valid, error) { Logger_1.Log(valid ? 'info' : 'warn', valid ? "Loaded " + connectionType + " '" + connection.name + "' from '" + integrationID + "'" : "Unable to load " + connectionType + " '" + connection.name + "' from '" + integrationID + "'"); }); } callback(); }); } else { _this_1.connections = defaultConnectionConfig.connections; _this_1.saveConfig(callback); } }); }; ConnectionManager.prototype.saveConfig = function (callback) { var connections = {}; for (var integrationID in this.connections) { connections[integrationID] = {}; for (var connectionType in this.connections[integrationID]) { connections[integrationID][connectionType] = {}; for (var connectionID in this.connections[integrationID][connectionType]) { connections[integrationID][connectionType][connectionID] = this.connections[integrationID][connectionType][connectionID]; if (connections[integrationID][connectionType][connectionID].instance != undefined) delete connections[integrationID][connectionType][connectionID].instance; } } } var toSave = { connections: connections }; for (var integrationID in toSave.connections) for (var connectionType in toSave.connections[integrationID]) for (var connectionID in toSave.connections[integrationID][connectionType]) if (toSave.connections[integrationID][connectionType][connectionID].instance != undefined) delete toSave.connections[integrationID][connectionType][connectionID].instance; fs_1.writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), function (err) { if (err) Logger_1.Log('error', 'Error whilst saving device manager config', err.message); if (callback) callback(); }); }; ConnectionManager.prototype.create = function (integrationID, connectionType, properties, callback) { var _this_1 = this; var _this = this; if (this.connections == undefined) this.connections = {}; if (this.connections[integrationID] == undefined) this.connections[integrationID] = {}; if (this.connections[integrationID][connectionType] == undefined) this.connections[integrationID][connectionType] = {}; var connectionID = Undecked.generateRandom(8, function (checkValid) { return _this.connections[integrationID][connectionType][checkValid] == undefined; }); this.validate(integrationID, connectionType, connectionID, properties, function (valid, error) { if (valid == true) { var name = properties._internal_name; delete properties._internal_name; var instance = _this.connections[integrationID][connectionType] != undefined && _this.connections[integrationID][connectionType][connectionID] != undefined && _this.connections[integrationID][connectionType][connectionID].instance != undefined ? _this.connections[integrationID][connectionType][connectionID].instance : null; _this.connections[integrationID][connectionType][connectionID] = { connectedSince: Date.now(), lastSeen: Date.now(), connectionID: connectionID, name: name, online: true, properties: properties, instance: instance }; Undecked.SocketServer.broadcastTo('home', 'connectedlist', _this_1.getList()); _this.saveConfig(); callback(true); } else callback(false, error); }); }; ConnectionManager.prototype.validate = function (integrationID, connectionType, connectionID, properties, callback) { var _this = this; if (Undecked.Integrations.exists(integrationID)) { var integration = Undecked.Integrations.get(integrationID); if (integration.api.hasValidator(connectionType)) { var validator = integration.api.getValidator(connectionType); var connectionValidatorAPI = { properties: properties, callback: callback, instance: _this.getConnectionInstance(integrationID, connectionType, connectionID), setInstance: function (instance) { _this.setConnectionInstance(integrationID, connectionType, connectionID, instance); } }; validator(connectionValidatorAPI); } else callback(false, "No validator found for connection type " + connectionType); } }; ConnectionManager.prototype.getConnectionRequestData = function (integrationID, connectionType) { if (Undecked.Integrations.exists(integrationID)) { var integrationwrapper = Undecked.Integrations.get(integrationID); if (integrationwrapper.integration.connections != undefined) { for (var i = 0; i < integrationwrapper.integration.connections.length; i++) { var connection = integrationwrapper.integration.connections[i]; if (connection.type == connectionType) return { fields: connection.fields, message: connection.message, link: connection.link }; } } } return null; }; ConnectionManager.prototype.getList = function () { var list = []; for (var integrationID in this.connections) { if (Undecked.Integrations.exists(integrationID)) { var integration = Undecked.Integrations.get(integrationID); for (var connectionType in this.connections[integrationID]) { for (var connectionID in this.connections[integrationID][connectionType]) { var connection = this.connections[integrationID][connectionType][connectionID]; list.push({ connectionID: connectionID, integrationName: integration.integration.name, connectionType: integration.connectionsmap[connectionType].name, name: connection.name, online: connection.online }); } } } } return list; }; ConnectionManager.prototype.getConnections = function (integrationID, connectionType) { var connections = []; if (this.connections != undefined) { if (this.connections[integrationID] != undefined) { if (this.connections[integrationID][connectionType] != undefined) { for (var connectionID in this.connections[integrationID][connectionType]) { var connection = this.connections[integrationID][connectionType][connectionID]; connections.push({ id: connection.connectionID, text: connection.name }); } } } } return connections; }; ConnectionManager.prototype.getConnection = function (integrationID, connectionType, connectionID) { if (this.connections != undefined) { if (this.connections[integrationID] != undefined) { if (this.connections[integrationID][connectionType] != undefined) { if (this.connections[integrationID][connectionType][connectionID] != undefined) { return this.connections[integrationID][connectionType][connectionID]; } } } } return null; }; ConnectionManager.prototype.setConnectionInstance = function (integrationID, connectionType, connectionID, instance) { if (this.connections == undefined) this.connections = {}; if (this.connections[integrationID] == undefined) this.connections[integrationID] = {}; if (this.connections[integrationID][connectionType] == undefined) this.connections[integrationID][connectionType] = {}; if (this.connections[integrationID][connectionType][connectionID] == undefined) this.connections[integrationID][connectionType][connectionID] = {}; this.connections[integrationID][connectionType][connectionID].instance = instance; return true; }; ConnectionManager.prototype.getConnectionInstance = function (integrationID, connectionType, connectionID) { if (this.connections != undefined) { if (this.connections[integrationID] != undefined) { if (this.connections[integrationID][connectionType] != undefined) { if (this.connections[integrationID][connectionType][connectionID] != undefined) { return this.connections[integrationID][connectionType][connectionID].instance; } } } } return null; }; return ConnectionManager; }()); exports.ConnectionManager = ConnectionManager; var defaultConnectionConfig = { connections: {} }; //# sourceMappingURL=ConnectionManager.js.map