Initial commit
This commit is contained in:
267
Backend/dist/Integrations/IntegrationsManager.js
vendored
Normal file
267
Backend/dist/Integrations/IntegrationsManager.js
vendored
Normal file
@@ -0,0 +1,267 @@
|
||||
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
||||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
||||
to[j] = from[i];
|
||||
return to;
|
||||
};
|
||||
exports.__esModule = true;
|
||||
exports.IntegrationsManager = void 0;
|
||||
var path = require("path");
|
||||
var Logger_1 = require("../Logger");
|
||||
var IntegrationApi_1 = require("./IntegrationApi");
|
||||
var EditorAPI_1 = require("./EditorAPI");
|
||||
var fs = require("fs-extra");
|
||||
var ensureDir = fs.ensureDir, pathExists = fs.pathExists, readdir = fs.readdir, readJSON = fs.readJSON, readJson = fs.readJson;
|
||||
var IntegrationsManager = /** @class */ (function () {
|
||||
function IntegrationsManager() {
|
||||
this.integrations = {};
|
||||
this.openEditors = {};
|
||||
}
|
||||
IntegrationsManager.prototype.load = function (callback) {
|
||||
var _this = this;
|
||||
Logger_1.Log('info', 'Loading integrations');
|
||||
ensureDir(path.join(Undecked.dataPath, 'custom_integrations'), function (err) {
|
||||
if (err)
|
||||
throw err;
|
||||
_this.loadIntegrations(callback);
|
||||
});
|
||||
};
|
||||
IntegrationsManager.prototype.loadIntegrations = function (callback) {
|
||||
var instance = this;
|
||||
var integrations = { buildin: [], custom: [] };
|
||||
readdir(path.join(__filename, '..', 'buildin'), function (err, buildinfiles) {
|
||||
if (err)
|
||||
throw err;
|
||||
integrations.buildin = buildinfiles;
|
||||
readdir(path.join(Undecked.dataPath, 'custom_integrations'), function (err, customfiles) {
|
||||
if (err)
|
||||
throw err;
|
||||
integrations.custom = customfiles;
|
||||
var loaded = { buildin: 0, custom: 0 };
|
||||
function loadIntegrations(type, cb, i) {
|
||||
if (i === void 0) { i = 0; }
|
||||
if (integrations[type][i]) {
|
||||
var integrationID = integrations[type][i];
|
||||
var integrationAddress = type == 'buildin'
|
||||
? path.join(__filename, '..', 'buildin', integrationID, 'integration')
|
||||
: path.join(Undecked.dataPath, 'custom_integrations', integrationID, 'integration');
|
||||
var waitInterval;
|
||||
try {
|
||||
instance.integrations[integrationID] = {
|
||||
type: type,
|
||||
api: null,
|
||||
connectionslist: [],
|
||||
connectionsmap: {},
|
||||
integration: require(integrationAddress)
|
||||
};
|
||||
var waitCounter = 0;
|
||||
waitInterval = setInterval(function () {
|
||||
if (instance.integrations[integrationID].integration != undefined &&
|
||||
instance.integrations[integrationID].integration.main != undefined) {
|
||||
clearInterval(waitInterval);
|
||||
loaded[type]++;
|
||||
loadIntegrations(type, function () {
|
||||
Logger_1.Log('info', "Loaded " + type + " integration '" + integrationID + "'");
|
||||
cb();
|
||||
}, i + 1);
|
||||
}
|
||||
else {
|
||||
waitCounter++;
|
||||
if (waitCounter > 200) {
|
||||
clearInterval(waitInterval);
|
||||
delete instance.integrations[integrationID];
|
||||
Logger_1.Log('error', "Unable to load " + type + " integration '" + integrationID + "': Loading timeout");
|
||||
loadIntegrations(type, cb, i + 1);
|
||||
}
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
catch (error) {
|
||||
clearInterval(waitInterval);
|
||||
Logger_1.Log('error', "Unable to load " + type + " integration '" + integrationID + "': " + error.message);
|
||||
loadIntegrations(type, cb, i + 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
cb();
|
||||
}
|
||||
loadIntegrations('buildin', function () {
|
||||
loadIntegrations('custom', function () {
|
||||
for (var integrationID in instance.integrations) {
|
||||
var integration = instance.integrations[integrationID];
|
||||
// for (let i = 0; i < integration.integration.actions.length; i++) {
|
||||
// if (integration.integration.actions[i] != undefined)
|
||||
// integration.actionslist.push(integration.integration.actions[i].id);
|
||||
// else
|
||||
// Log(
|
||||
// `warn`,
|
||||
// `Invalid action of ${integrationID} ${JSON.stringify(
|
||||
// integration.integration.actions[i],
|
||||
// null,
|
||||
// 4
|
||||
// )}`
|
||||
// );
|
||||
// }
|
||||
if (integration.integration.connections != undefined)
|
||||
for (var i = 0; i < integration.integration.connections.length; i++) {
|
||||
integration.connectionslist.push(integration.integration.connections[i].type);
|
||||
integration.connectionsmap[integration.integration.connections[i].type] =
|
||||
integration.integration.connections[i];
|
||||
}
|
||||
integration.api = new IntegrationApi_1.IntegrationAPI({ integrationID: integrationID, integration: integration });
|
||||
try {
|
||||
integration.integration.main(integration.api);
|
||||
}
|
||||
catch (error) {
|
||||
Logger_1.Log('error', "Error in '" + integrationID + "'", error.message, error.stack);
|
||||
}
|
||||
}
|
||||
Logger_1.Log('info', "Loaded " + loaded.buildin + " buildin integrations and " + loaded.custom + " integrations");
|
||||
callback();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
IntegrationsManager.prototype.exists = function (integrationID) {
|
||||
return this.integrations[integrationID] != undefined;
|
||||
};
|
||||
IntegrationsManager.prototype.get = function (integrationID) {
|
||||
if (this.exists(integrationID))
|
||||
return this.integrations[integrationID];
|
||||
return null;
|
||||
};
|
||||
IntegrationsManager.prototype.getActions = function () {
|
||||
var actions = [];
|
||||
for (var integrationID in this.integrations) {
|
||||
var integration = this.integrations[integrationID];
|
||||
actions = actions.concat(integration.api.getActionList().map(function (action) {
|
||||
return {
|
||||
integrationID: integrationID,
|
||||
integrationName: integration.integration.name,
|
||||
actionID: action.id,
|
||||
actionName: action.name
|
||||
};
|
||||
}));
|
||||
}
|
||||
return actions;
|
||||
};
|
||||
IntegrationsManager.prototype.getConnections = function () {
|
||||
var connections = [];
|
||||
for (var integrationID in this.integrations) {
|
||||
var integration = this.integrations[integrationID];
|
||||
if (integration.integration.connections != undefined)
|
||||
for (var i = 0; i < integration.integration.connections.length; i++) {
|
||||
var con = integration.integration.connections[i];
|
||||
connections.push({
|
||||
integrationID: integrationID,
|
||||
integrationName: integration.integration.name,
|
||||
connectionType: con.type,
|
||||
connectionName: con.name
|
||||
});
|
||||
}
|
||||
}
|
||||
connections.sort(function (a, b) {
|
||||
if (a.integrationName == b.integrationName)
|
||||
return 0;
|
||||
return a.integrationName > b.integrationName ? 1 : -1;
|
||||
});
|
||||
return connections;
|
||||
};
|
||||
IntegrationsManager.prototype.startEditor = function (settings) {
|
||||
var _this = this;
|
||||
if (this.exists(settings.integrationID)) {
|
||||
var integrationWrapper = this.get(settings.integrationID);
|
||||
var integration = integrationWrapper.integration;
|
||||
var integrationAPI = integrationWrapper.api;
|
||||
if (integrationAPI.hasAction(settings.actionID)) {
|
||||
var action = integrationAPI.getAction(settings.actionID);
|
||||
if (Undecked.Pages.exists(settings.pageID)) {
|
||||
var page = Undecked.Pages.get(settings.pageID);
|
||||
if (page.hasKey(settings.keyX, settings.keyY)) {
|
||||
var key = page.getKey(settings.keyX, settings.keyY);
|
||||
var actionInstance = page.getActionInstance(key, settings.actionInstanceID);
|
||||
if (actionInstance) {
|
||||
var editorID = Undecked.generateRandom(8, function (generatedValid) {
|
||||
return !_this.exists(generatedValid);
|
||||
});
|
||||
var editorAPI = new EditorAPI_1.EditorAPI({
|
||||
actionInstance: actionInstance,
|
||||
integrationID: settings.integrationID,
|
||||
pageID: settings.pageID,
|
||||
editorID: editorID,
|
||||
x: settings.keyX,
|
||||
y: settings.keyY,
|
||||
key: key
|
||||
});
|
||||
this.openEditors[editorID] = {
|
||||
editor: editorAPI,
|
||||
editorID: editorID,
|
||||
ready: function () {
|
||||
editorAPI.isOpen = true;
|
||||
action._openEditor(editorAPI, actionInstance.properties);
|
||||
},
|
||||
destroy: function () {
|
||||
if (_this.openEditors[editorID] != undefined) {
|
||||
_this.openEditors[editorID].editor.close();
|
||||
delete _this.openEditors[editorID];
|
||||
}
|
||||
}
|
||||
};
|
||||
return { actionEditorID: editorID, properties: {} };
|
||||
}
|
||||
else
|
||||
return { error: "Key does not have this actioninstance" };
|
||||
}
|
||||
else
|
||||
return { error: "Key does not exist" };
|
||||
}
|
||||
else
|
||||
return { error: "Page '" + settings.pageID + "' does not exist" };
|
||||
}
|
||||
else
|
||||
return { error: "Action '" + settings.actionID + "' does not exist" };
|
||||
}
|
||||
else
|
||||
return { error: "Integration '" + settings.integrationID + "' does not exist" };
|
||||
};
|
||||
IntegrationsManager.prototype.editorExists = function (editorID) {
|
||||
return this.openEditors[editorID] != undefined;
|
||||
};
|
||||
IntegrationsManager.prototype.getEditor = function (editorID) {
|
||||
if (this.editorExists(editorID))
|
||||
return this.openEditors[editorID];
|
||||
return null;
|
||||
};
|
||||
IntegrationsManager.prototype.executeActions = function (actions, deck) {
|
||||
for (var actionInstanceID in actions) {
|
||||
var actionInstance = actions[actionInstanceID];
|
||||
if (Undecked.Integrations.exists(actionInstance.integrationID)) {
|
||||
var integration = Undecked.Integrations.get(actionInstance.integrationID);
|
||||
if (integration.api.hasAction(actionInstance.actionID)) {
|
||||
var action = integration.api.getAction(actionInstance.actionID);
|
||||
if (typeof action._hdl == 'function')
|
||||
action._hdl(actionInstance.properties, function (text, type) {
|
||||
if (type === void 0) { type = 'info'; }
|
||||
if (actionInstance.logs == undefined)
|
||||
actionInstance.logs = [];
|
||||
actionInstance.logs = __spreadArray([
|
||||
{ timestamp: Date.now(), type: type, text: text }
|
||||
], actionInstance.logs);
|
||||
if (actionInstance.logs.length > 20)
|
||||
actionInstance.logs.splice(20, actionInstance.logs.length - 20);
|
||||
// Log(
|
||||
// <any>type.replace('warning', 'warn'),
|
||||
// `[Deck:${deck != null ? deck.getName() : 'Internal'}][Integration:${integration
|
||||
// .integration.name}][Action:${actionInstance.actionID}] ${text}`
|
||||
// );
|
||||
}, deck);
|
||||
else
|
||||
Logger_1.Log('warn', "Tried calling non-exisintg handler for action '" + actionInstance.actionID + "' of integration '" + actionInstance.integrationID + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return IntegrationsManager;
|
||||
}());
|
||||
exports.IntegrationsManager = IntegrationsManager;
|
||||
//# sourceMappingURL=IntegrationsManager.js.map
|
||||
Reference in New Issue
Block a user