@grouparoo/core
Version:
The Grouparoo Core
88 lines (87 loc) • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteApps = exports.loadApp = void 0;
const codeConfig_1 = require("../../classes/codeConfig");
const __1 = require("../.."); // configLoader imports need to be from root
const sequelize_1 = require("sequelize");
const configWriter_1 = require("../configWriter");
const AppRefreshQuery_1 = require("../../models/AppRefreshQuery");
async function loadApp(configObject, externallyValidate, validate = false) {
var _a, _b, _c, _d, _e;
let isNew = false;
(0, codeConfig_1.validateConfigObjectKeys)(__1.App, configObject, ["options", "refresh"]);
let app = await __1.App.scope(null).findOne({
where: {
id: configObject.id,
[sequelize_1.Op.or]: {
locked: (0, codeConfig_1.getCodeConfigLockKey)(),
state: "deleted",
},
},
});
if (!app) {
isNew = true;
app = await __1.App.create({
id: configObject.id,
name: configObject.name,
type: configObject.type,
});
}
await app.update({
type: configObject.type,
name: configObject.name,
locked: configWriter_1.ConfigWriter.getLockKey(configObject),
});
const options = (0, codeConfig_1.extractNonNullParts)(configObject, "options");
if (options)
await app.setOptions(options, externallyValidate);
if (externallyValidate) {
const response = await app.test((0, codeConfig_1.extractNonNullParts)(configObject, "options"));
if (!response.success) {
throw new Error(`error testing app ${app.name} (${app.id}) - ${response.error}`);
}
}
await app.update({ state: "ready" });
(0, codeConfig_1.logModel)(app, validate ? "validated" : isNew ? "created" : "updated");
if (((_a = configObject.refresh) === null || _a === void 0 ? void 0 : _a.query.length) > 1) {
let appRefreshQuery;
appRefreshQuery = await AppRefreshQuery_1.AppRefreshQuery.findOne({
where: {
appId: configObject.id,
},
});
if (!appRefreshQuery) {
appRefreshQuery = await AppRefreshQuery_1.AppRefreshQuery.create({
appId: configObject.id,
refreshQuery: (_b = configObject.refresh) === null || _b === void 0 ? void 0 : _b.query,
recurringFrequency: (_c = configObject.refresh) === null || _c === void 0 ? void 0 : _c.recurringFrequency,
locked: configWriter_1.ConfigWriter.getLockKey(configObject),
state: "ready",
});
isNew = true;
}
else {
await appRefreshQuery.update({
appId: configObject.id,
refreshQuery: (_d = configObject.refresh) === null || _d === void 0 ? void 0 : _d.query,
recurringFrequency: (_e = configObject.refresh) === null || _e === void 0 ? void 0 : _e.recurringFrequency,
locked: configWriter_1.ConfigWriter.getLockKey(configObject),
state: "ready",
});
}
(0, codeConfig_1.logModel)(appRefreshQuery, validate ? "validated" : isNew ? "created" : "updated");
}
return { app: [app.id] };
}
exports.loadApp = loadApp;
async function deleteApps(ids) {
const apps = await __1.App.scope(null).findAll({
where: { locked: (0, codeConfig_1.getCodeConfigLockKey)(), id: { [sequelize_1.Op.notIn]: ids } },
});
for (const i in apps) {
await apps[i].update({ state: "deleted", locked: null });
(0, codeConfig_1.logModel)(apps[i], "deleted");
}
return apps.map((instance) => instance.id);
}
exports.deleteApps = deleteApps;