@budibase/server 1.1.29 → 1.1.32-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builder/assets/index.55714cd6.js +977 -0
- package/builder/assets/{index.2b959037.css → index.aa03d5f4.css} +2 -2
- package/builder/assets/{vendor.162098da.js → vendor.6bcafa60.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +407 -711
- package/coverage/coverage-final.json +15 -18
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +1 -1
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +2 -2
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +18 -18
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +94 -49
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +15 -15
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +2 -2
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +17 -17
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +5 -2
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +25 -25
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +73 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +27 -9
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +18 -18
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +5 -14
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +19 -19
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +1 -1
- package/coverage/lcov-report/db/utils.js.html +61 -13
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +66 -81
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- package/coverage/lcov-report/middleware/index.html +21 -21
- package/coverage/lcov-report/middleware/joi-validator.js.html +43 -43
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +67 -13
- package/coverage/lcov-report/utilities/index.html +20 -20
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +26 -14
- package/coverage/lcov-report/utilities/queue/index.html +17 -17
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +2 -2
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +747 -1245
- package/dist/api/controllers/deploy/index.js +1 -0
- package/dist/api/controllers/query/index.js +1 -1
- package/dist/api/controllers/query/validation.js +1 -1
- package/dist/api/controllers/row/internalSearch.js +30 -16
- package/dist/api/routes/utils/validators.js +1 -1
- package/dist/automations/steps/queryRows.js +21 -1
- package/dist/automations/steps/serverLog.js +8 -2
- package/dist/automations/utils.js +47 -1
- package/dist/constants/index.js +1 -4
- package/dist/db/utils.js +14 -1
- package/dist/definitions/automations.js +8 -0
- package/dist/integrations/base/sql.js +43 -14
- package/dist/package.json +8 -8
- package/dist/threads/automation.js +147 -54
- package/dist/threads/definitions.js +2 -0
- package/dist/threads/index.js +27 -20
- package/dist/threads/query.js +23 -15
- package/dist/threads/utils.js +47 -24
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/global.js +21 -4
- package/dist/utilities/queue/inMemoryQueue.js +5 -0
- package/package.json +9 -9
- package/src/api/controllers/deploy/index.ts +6 -1
- package/src/api/controllers/query/index.ts +1 -1
- package/src/api/controllers/query/validation.js +1 -1
- package/src/api/controllers/row/internalSearch.js +35 -20
- package/src/api/routes/tests/user.spec.js +2 -0
- package/src/api/routes/utils/validators.js +1 -1
- package/src/automations/steps/executeQuery.js +1 -0
- package/src/automations/steps/queryRows.js +22 -1
- package/src/automations/steps/serverLog.js +8 -2
- package/src/automations/tests/automation.spec.js +2 -2
- package/src/automations/utils.ts +54 -1
- package/src/constants/index.js +2 -5
- package/src/db/utils.js +16 -0
- package/src/definitions/automations.ts +49 -0
- package/src/definitions/datasource.ts +3 -0
- package/src/integrations/base/sql.ts +44 -13
- package/src/integrations/tests/sql.spec.js +50 -4
- package/src/middleware/tests/currentapp.spec.js +11 -0
- package/src/threads/{automation.js → automation.ts} +172 -48
- package/src/threads/definitions.ts +18 -0
- package/src/threads/index.ts +31 -23
- package/src/threads/{query.js → query.ts} +32 -12
- package/src/threads/{utils.js → utils.ts} +31 -12
- package/src/utilities/global.js +20 -2
- package/src/utilities/queue/inMemoryQueue.js +4 -0
- package/builder/assets/index.f116ac7f.js +0 -978
- package/coverage/lcov-report/threads/automation.js.html +0 -1114
- package/coverage/lcov-report/threads/index.html +0 -146
- package/coverage/lcov-report/threads/query.js.html +0 -916
- package/coverage/lcov-report/threads/utils.js.html +0 -319
|
@@ -74,6 +74,7 @@ function initDeployedApp(prodAppId) {
|
|
|
74
74
|
const automations = (yield db.allDocs((0, utils_1.getAutomationParams)(null, {
|
|
75
75
|
include_docs: true,
|
|
76
76
|
}))).rows.map((row) => row.doc);
|
|
77
|
+
yield (0, utils_2.clearMetadata)();
|
|
77
78
|
console.log("You have " + automations.length + " automations");
|
|
78
79
|
const promises = [];
|
|
79
80
|
console.log("Disabling prod crons..");
|
|
@@ -241,7 +241,7 @@ function execute(ctx, opts = { rowsOnly: false, isAutomation: false }) {
|
|
|
241
241
|
}
|
|
242
242
|
function executeV1(ctx) {
|
|
243
243
|
return __awaiter(this, void 0, void 0, function* () {
|
|
244
|
-
return execute(ctx, { rowsOnly: true });
|
|
244
|
+
return execute(ctx, { rowsOnly: true, isAutomation: false });
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
exports.executeV1 = executeV1;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const joiValidator = require("
|
|
2
|
+
const { joiValidator } = require("@budibase/backend-core/auth");
|
|
3
3
|
const Joi = require("joi");
|
|
4
4
|
const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("");
|
|
5
5
|
exports.queryValidation = () => {
|
|
@@ -18,7 +18,7 @@ const { getAppId } = require("@budibase/backend-core/context");
|
|
|
18
18
|
*/
|
|
19
19
|
class QueryBuilder {
|
|
20
20
|
constructor(base) {
|
|
21
|
-
this.query = Object.assign({ allOr: false, string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {}, oneOf: {} }, base);
|
|
21
|
+
this.query = Object.assign({ allOr: false, string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {}, oneOf: {}, contains: {} }, base);
|
|
22
22
|
this.limit = 50;
|
|
23
23
|
this.sortOrder = "ascending";
|
|
24
24
|
this.sortType = "string";
|
|
@@ -100,6 +100,10 @@ class QueryBuilder {
|
|
|
100
100
|
this.query.oneOf[key] = value;
|
|
101
101
|
return this;
|
|
102
102
|
}
|
|
103
|
+
addContains(key, value) {
|
|
104
|
+
this.query.contains[key] = value;
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
103
107
|
/**
|
|
104
108
|
* Preprocesses a value before going into a lucene search.
|
|
105
109
|
* Transforms strings to lowercase and wraps strings and bools in quotes.
|
|
@@ -142,6 +146,27 @@ class QueryBuilder {
|
|
|
142
146
|
}
|
|
143
147
|
return `${key}:${builder.preprocess(value, allPreProcessingOpts)}`;
|
|
144
148
|
};
|
|
149
|
+
const contains = (key, value) => {
|
|
150
|
+
if (!value && value !== 0) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return `${key}:${builder.preprocess(value, { escape: true })}`;
|
|
154
|
+
};
|
|
155
|
+
const oneOf = (key, value) => {
|
|
156
|
+
if (!Array.isArray(value)) {
|
|
157
|
+
if (typeof value === "string") {
|
|
158
|
+
value = value.split(",");
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return "";
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`;
|
|
165
|
+
for (let i = 1; i < value.length; i++) {
|
|
166
|
+
orStatement += ` OR ${builder.preprocess(value[i], allPreProcessingOpts)}`;
|
|
167
|
+
}
|
|
168
|
+
return `${key}:(${orStatement})`;
|
|
169
|
+
};
|
|
145
170
|
function build(structure, queryFn) {
|
|
146
171
|
for (let [key, value] of Object.entries(structure)) {
|
|
147
172
|
key = builder.preprocess(key.replace(/ /g, "_"), {
|
|
@@ -216,21 +241,10 @@ class QueryBuilder {
|
|
|
216
241
|
build(this.query.notEmpty, key => `${key}:["" TO *]`);
|
|
217
242
|
}
|
|
218
243
|
if (this.query.oneOf) {
|
|
219
|
-
build(this.query.oneOf,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
return "";
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`;
|
|
229
|
-
for (let i = 1; i < value.length; i++) {
|
|
230
|
-
orStatement += ` OR ${builder.preprocess(value[i], allPreProcessingOpts)}`;
|
|
231
|
-
}
|
|
232
|
-
return `${key}:(${orStatement})`;
|
|
233
|
-
});
|
|
244
|
+
build(this.query.oneOf, oneOf);
|
|
245
|
+
}
|
|
246
|
+
if (this.query.contains) {
|
|
247
|
+
build(this.query.contains, contains);
|
|
234
248
|
}
|
|
235
249
|
// make sure table ID is always added as an AND
|
|
236
250
|
if (tableId) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const joiValidator = require("
|
|
2
|
+
const { joiValidator } = require("@budibase/backend-core/auth");
|
|
3
3
|
const { DataSourceOperation } = require("../../../constants");
|
|
4
4
|
const { WebhookType } = require("../../../constants");
|
|
5
5
|
const { BUILTIN_PERMISSION_IDS, PermissionLevels, } = require("@budibase/backend-core/permissions");
|
|
@@ -89,6 +89,26 @@ function getTable(appId, tableId) {
|
|
|
89
89
|
return ctx.body;
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
|
+
function typeCoercion(filters, table) {
|
|
93
|
+
if (!filters || !table) {
|
|
94
|
+
return filters;
|
|
95
|
+
}
|
|
96
|
+
for (let key of Object.keys(filters)) {
|
|
97
|
+
if (typeof filters[key] === "object") {
|
|
98
|
+
for (let [property, value] of Object.entries(filters[key])) {
|
|
99
|
+
const column = table.schema[property];
|
|
100
|
+
// convert string inputs
|
|
101
|
+
if (!column || typeof value !== "string") {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (column.type === FieldTypes.NUMBER) {
|
|
105
|
+
filters[key][property] = parseFloat(value);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return filters;
|
|
111
|
+
}
|
|
92
112
|
exports.run = function ({ inputs, appId }) {
|
|
93
113
|
return __awaiter(this, void 0, void 0, function* () {
|
|
94
114
|
const { tableId, filters, sortColumn, sortOrder, limit } = inputs;
|
|
@@ -107,7 +127,7 @@ exports.run = function ({ inputs, appId }) {
|
|
|
107
127
|
sortType,
|
|
108
128
|
limit,
|
|
109
129
|
sort: sortColumn,
|
|
110
|
-
query: filters || {},
|
|
130
|
+
query: typeCoercion(filters || {}, table),
|
|
111
131
|
// default to ascending, like data tab
|
|
112
132
|
sortOrder: sortOrder || SortOrders.ASCENDING,
|
|
113
133
|
},
|
|
@@ -40,16 +40,22 @@ exports.definition = {
|
|
|
40
40
|
type: "boolean",
|
|
41
41
|
description: "Whether the action was successful",
|
|
42
42
|
},
|
|
43
|
+
message: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "What was output",
|
|
46
|
+
},
|
|
43
47
|
},
|
|
44
|
-
required: ["success"],
|
|
48
|
+
required: ["success", "message"],
|
|
45
49
|
},
|
|
46
50
|
},
|
|
47
51
|
};
|
|
48
52
|
exports.run = function ({ inputs, appId }) {
|
|
49
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
|
|
54
|
+
const message = `App ${appId} - ${inputs.text}`;
|
|
55
|
+
console.log(message);
|
|
51
56
|
return {
|
|
52
57
|
success: true,
|
|
58
|
+
message,
|
|
53
59
|
};
|
|
54
60
|
});
|
|
55
61
|
};
|
|
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.cleanupAutomations = exports.checkForWebhooks = exports.enableCronTrigger = exports.disableAllCrons = exports.removeDeprecated = exports.updateTestHistory = exports.processEvent = void 0;
|
|
38
|
+
exports.isErrorInOutput = exports.isRecurring = exports.cleanupAutomations = exports.checkForWebhooks = exports.enableCronTrigger = exports.clearMetadata = exports.disableCron = exports.disableAllCrons = exports.removeDeprecated = exports.updateTestHistory = exports.processEvent = void 0;
|
|
39
39
|
const threads_1 = require("../threads");
|
|
40
40
|
const triggerInfo_1 = require("./triggerInfo");
|
|
41
41
|
const webhooks = __importStar(require("../api/controllers/webhook"));
|
|
@@ -44,6 +44,7 @@ const newid_1 = __importDefault(require("../db/newid"));
|
|
|
44
44
|
const utilities_1 = require("../utilities");
|
|
45
45
|
const constants_1 = require("../constants");
|
|
46
46
|
const db_1 = require("@budibase/backend-core/db");
|
|
47
|
+
const utils_1 = require("../db/utils");
|
|
47
48
|
const fp_1 = require("lodash/fp");
|
|
48
49
|
const context_1 = require("@budibase/backend-core/context");
|
|
49
50
|
const backend_core_1 = require("@budibase/backend-core");
|
|
@@ -114,6 +115,26 @@ function disableAllCrons(appId) {
|
|
|
114
115
|
});
|
|
115
116
|
}
|
|
116
117
|
exports.disableAllCrons = disableAllCrons;
|
|
118
|
+
function disableCron(jobId, jobKey) {
|
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
yield bullboard_1.queue.removeRepeatableByKey(jobKey);
|
|
121
|
+
yield bullboard_1.queue.removeJobs(jobId);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
exports.disableCron = disableCron;
|
|
125
|
+
function clearMetadata() {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
const db = (0, context_1.getProdAppDB)();
|
|
128
|
+
const automationMetadata = (yield db.allDocs((0, utils_1.getAutomationMetadataParams)({
|
|
129
|
+
include_docs: true,
|
|
130
|
+
}))).rows.map((row) => row.doc);
|
|
131
|
+
for (let metadata of automationMetadata) {
|
|
132
|
+
metadata._deleted = true;
|
|
133
|
+
}
|
|
134
|
+
yield db.bulkDocs(automationMetadata);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
exports.clearMetadata = clearMetadata;
|
|
117
138
|
/**
|
|
118
139
|
* This function handles checking of any cron jobs that need to be enabled/updated.
|
|
119
140
|
* @param {string} appId The ID of the app in which we are checking for webhooks
|
|
@@ -228,3 +249,28 @@ function cleanupAutomations(appId) {
|
|
|
228
249
|
});
|
|
229
250
|
}
|
|
230
251
|
exports.cleanupAutomations = cleanupAutomations;
|
|
252
|
+
/**
|
|
253
|
+
* Checks if the supplied automation is of a recurring type.
|
|
254
|
+
* @param automation The automation to check.
|
|
255
|
+
* @return {boolean} if it is recurring (cron).
|
|
256
|
+
*/
|
|
257
|
+
function isRecurring(automation) {
|
|
258
|
+
return automation.definition.trigger.stepId === triggerInfo_1.definitions.CRON.stepId;
|
|
259
|
+
}
|
|
260
|
+
exports.isRecurring = isRecurring;
|
|
261
|
+
function isErrorInOutput(output) {
|
|
262
|
+
var _a;
|
|
263
|
+
let first = true, error = false;
|
|
264
|
+
for (let step of output.steps) {
|
|
265
|
+
// skip the trigger, its always successful if automation ran
|
|
266
|
+
if (first) {
|
|
267
|
+
first = false;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (!((_a = step.outputs) === null || _a === void 0 ? void 0 : _a.success)) {
|
|
271
|
+
error = true;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return error;
|
|
275
|
+
}
|
|
276
|
+
exports.isErrorInOutput = isErrorInOutput;
|
package/dist/constants/index.js
CHANGED
|
@@ -185,9 +185,6 @@ exports.AutomationErrors = {
|
|
|
185
185
|
MAX_ITERATIONS: "MAX_ITERATIONS_REACHED",
|
|
186
186
|
FAILURE_CONDITION: "FAILURE_CONDITION_MET",
|
|
187
187
|
};
|
|
188
|
-
exports.LoopStepTypes = {
|
|
189
|
-
ARRAY: "Array",
|
|
190
|
-
STRING: "String",
|
|
191
|
-
};
|
|
192
188
|
// pass through the list from the auth/core lib
|
|
193
189
|
exports.ObjectStoreBuckets = ObjectStoreBuckets;
|
|
190
|
+
exports.MAX_AUTOMATION_RECURRING_ERRORS = 5;
|
package/dist/db/utils.js
CHANGED
|
@@ -7,7 +7,7 @@ const AppStatus = {
|
|
|
7
7
|
ALL: "all",
|
|
8
8
|
DEPLOYED: "published",
|
|
9
9
|
};
|
|
10
|
-
const DocumentTypes = Object.assign(Object.assign({}, CoreDocTypes), { TABLE: "ta", ROW: "ro", USER: "us", AUTOMATION: "au", LINK: "li", WEBHOOK: "wh", INSTANCE: "inst", LAYOUT: "layout", SCREEN: "screen", DATASOURCE: "datasource", DATASOURCE_PLUS: "datasource_plus", QUERY: "query", DEPLOYMENTS: "deployments", METADATA: "metadata", MEM_VIEW: "view", USER_FLAG: "flag" });
|
|
10
|
+
const DocumentTypes = Object.assign(Object.assign({}, CoreDocTypes), { TABLE: "ta", ROW: "ro", USER: "us", AUTOMATION: "au", LINK: "li", WEBHOOK: "wh", INSTANCE: "inst", LAYOUT: "layout", SCREEN: "screen", DATASOURCE: "datasource", DATASOURCE_PLUS: "datasource_plus", QUERY: "query", DEPLOYMENTS: "deployments", METADATA: "metadata", MEM_VIEW: "view", USER_FLAG: "flag", AUTOMATION_METADATA: "meta_au" });
|
|
11
11
|
const InternalTables = {
|
|
12
12
|
USER_METADATA: "ta_users",
|
|
13
13
|
};
|
|
@@ -229,6 +229,19 @@ exports.getDatasourceParams = (datasourceId = null, otherProps = {}) => {
|
|
|
229
229
|
exports.generateQueryID = datasourceId => {
|
|
230
230
|
return `${DocumentTypes.QUERY}${SEPARATOR}${datasourceId}${SEPARATOR}${newid()}`;
|
|
231
231
|
};
|
|
232
|
+
/**
|
|
233
|
+
* Generates a metadata ID for automations, used to track errors in recurring
|
|
234
|
+
* automations etc.
|
|
235
|
+
*/
|
|
236
|
+
exports.generateAutomationMetadataID = automationId => {
|
|
237
|
+
return `${DocumentTypes.AUTOMATION_METADATA}${SEPARATOR}${automationId}`;
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Retrieve all automation metadata in an app database.
|
|
241
|
+
*/
|
|
242
|
+
exports.getAutomationMetadataParams = (otherProps = {}) => {
|
|
243
|
+
return getDocParams(DocumentTypes.AUTOMATION_METADATA, null, otherProps);
|
|
244
|
+
};
|
|
232
245
|
/**
|
|
233
246
|
* Gets parameters for retrieving a query, this is a utility function for the getDocParams function.
|
|
234
247
|
*/
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoopStepTypes = void 0;
|
|
4
|
+
var LoopStepTypes;
|
|
5
|
+
(function (LoopStepTypes) {
|
|
6
|
+
LoopStepTypes["ARRAY"] = "Array";
|
|
7
|
+
LoopStepTypes["STRING"] = "String";
|
|
8
|
+
})(LoopStepTypes = exports.LoopStepTypes || (exports.LoopStepTypes = {}));
|
|
@@ -125,6 +125,20 @@ class InternalBuilder {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
+
const like = (key, value) => {
|
|
129
|
+
const fnc = allOr ? "orWhere" : "where";
|
|
130
|
+
// postgres supports ilike, nothing else does
|
|
131
|
+
if (this.client === utils_1.SqlClients.POSTGRES) {
|
|
132
|
+
query = query[fnc](key, "ilike", `%${value}%`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const rawFnc = `${fnc}Raw`;
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
|
|
138
|
+
`%${value}%`,
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
128
142
|
if (!filters) {
|
|
129
143
|
return query;
|
|
130
144
|
}
|
|
@@ -152,20 +166,7 @@ class InternalBuilder {
|
|
|
152
166
|
});
|
|
153
167
|
}
|
|
154
168
|
if (filters.fuzzy) {
|
|
155
|
-
iterate(filters.fuzzy,
|
|
156
|
-
const fnc = allOr ? "orWhere" : "where";
|
|
157
|
-
// postgres supports ilike, nothing else does
|
|
158
|
-
if (this.client === utils_1.SqlClients.POSTGRES) {
|
|
159
|
-
query = query[fnc](key, "ilike", `%${value}%`);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
const rawFnc = `${fnc}Raw`;
|
|
163
|
-
// @ts-ignore
|
|
164
|
-
query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
|
|
165
|
-
`%${value}%`,
|
|
166
|
-
]);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
+
iterate(filters.fuzzy, like);
|
|
169
170
|
}
|
|
170
171
|
if (filters.range) {
|
|
171
172
|
iterate(filters.range, (key, value) => {
|
|
@@ -210,6 +211,34 @@ class InternalBuilder {
|
|
|
210
211
|
query = query[fnc](key);
|
|
211
212
|
});
|
|
212
213
|
}
|
|
214
|
+
if (filters.contains) {
|
|
215
|
+
const fnc = allOr ? "orWhere" : "where";
|
|
216
|
+
const rawFnc = `${fnc}Raw`;
|
|
217
|
+
if (this.client === utils_1.SqlClients.POSTGRES) {
|
|
218
|
+
iterate(filters.contains, (key, value) => {
|
|
219
|
+
const fieldNames = key.split(/\./g);
|
|
220
|
+
const tableName = fieldNames[0];
|
|
221
|
+
const columnName = fieldNames[1];
|
|
222
|
+
if (typeof value === "string") {
|
|
223
|
+
value = `"${value}"`;
|
|
224
|
+
}
|
|
225
|
+
// @ts-ignore
|
|
226
|
+
query = query[rawFnc](`"${tableName}"."${columnName}"::jsonb @> '[${value}]'`);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
else if (this.client === utils_1.SqlClients.MY_SQL) {
|
|
230
|
+
iterate(filters.contains, (key, value) => {
|
|
231
|
+
if (typeof value === "string") {
|
|
232
|
+
value = `"${value}"`;
|
|
233
|
+
}
|
|
234
|
+
// @ts-ignore
|
|
235
|
+
query = query[rawFnc](`JSON_CONTAINS(${key}, '${value}')`);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
iterate(filters.contains, like);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
213
242
|
return query;
|
|
214
243
|
}
|
|
215
244
|
addSorting(query, json) {
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.31",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"license": "GPL-3.0",
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
80
|
-
"@budibase/backend-core": "^1.1.
|
|
81
|
-
"@budibase/client": "^1.1.
|
|
82
|
-
"@budibase/pro": "1.1.
|
|
83
|
-
"@budibase/string-templates": "^1.1.
|
|
84
|
-
"@budibase/types": "^1.1.
|
|
80
|
+
"@budibase/backend-core": "^1.1.31",
|
|
81
|
+
"@budibase/client": "^1.1.31",
|
|
82
|
+
"@budibase/pro": "1.1.31",
|
|
83
|
+
"@budibase/string-templates": "^1.1.31",
|
|
84
|
+
"@budibase/types": "^1.1.31",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"koa-send": "5.0.0",
|
|
119
119
|
"koa-session": "5.12.0",
|
|
120
120
|
"koa-static": "5.0.0",
|
|
121
|
-
"koa2-ratelimit": "1.1.
|
|
121
|
+
"koa2-ratelimit": "1.1.1",
|
|
122
122
|
"lodash": "4.17.21",
|
|
123
123
|
"memorystream": "0.3.1",
|
|
124
124
|
"mongodb": "3.6.3",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"redis": "4",
|
|
138
138
|
"server-destroy": "1.0.1",
|
|
139
139
|
"snowflake-promise": "^4.5.0",
|
|
140
|
-
"svelte": "3.
|
|
140
|
+
"svelte": "3.49.0",
|
|
141
141
|
"swagger-parser": "10.0.3",
|
|
142
142
|
"to-json-schema": "0.2.5",
|
|
143
143
|
"uuid": "3.3.2",
|