@budibase/server 2.3.18-alpha.2 → 2.3.18-alpha.21
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/__mocks__/node-fetch.ts +3 -0
- package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
- package/builder/assets/{index.bbe4c16b.js → index.baf0ac34.js} +430 -417
- package/builder/assets/index.dc0472d8.css +6 -0
- package/builder/assets/listScreenPreview.599c0aae.png +0 -0
- package/builder/index.html +2 -2
- package/dist/api/controllers/automation.js +11 -2
- package/dist/api/controllers/cloud.js +2 -2
- package/dist/api/controllers/row/ExternalRequest.js +49 -24
- package/dist/api/controllers/row/external.js +1 -1
- package/dist/api/controllers/row/internalSearch.js +6 -450
- package/dist/api/controllers/row/utils.js +1 -3
- package/dist/api/routes/automation.js +1 -1
- package/dist/api/routes/public/applications.js +7 -7
- package/dist/api/routes/public/queries.js +2 -2
- package/dist/api/routes/public/rows.js +5 -5
- package/dist/api/routes/public/tables.js +5 -5
- package/dist/api/routes/public/users.js +5 -5
- package/dist/app.js +2 -0
- package/dist/db/index.js +25 -2
- package/dist/db/utils.js +2 -5
- package/dist/db/views/staticViews.js +2 -1
- package/dist/integrations/base/sql.js +4 -8
- package/dist/integrations/googlesheets.js +17 -20
- package/dist/middleware/authorized.js +5 -3
- package/dist/middleware/builder.js +6 -3
- package/dist/migrations/functions/backfill/global/configs.js +10 -4
- package/dist/migrations/tests/helpers.js +1 -1
- package/dist/migrations/tests/structures.js +1 -1
- package/dist/package.json +9 -8
- package/dist/startup.js +3 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/jest.config.ts +1 -0
- package/package.json +10 -9
- package/scripts/test.sh +12 -0
- package/specs/{generate.js → generate.ts} +7 -9
- package/specs/openapi.json +24 -24
- package/specs/openapi.yaml +24 -24
- package/specs/{parameters.js → parameters.ts} +6 -6
- package/specs/resources/{application.js → application.ts} +4 -4
- package/specs/resources/{index.js → index.ts} +8 -8
- package/specs/resources/{misc.js → misc.ts} +3 -3
- package/specs/resources/{query.js → query.ts} +4 -4
- package/specs/resources/{row.js → row.ts} +3 -4
- package/specs/resources/{table.js → table.ts} +5 -5
- package/specs/resources/{user.js → user.ts} +3 -3
- package/specs/resources/utils/Resource.ts +39 -0
- package/specs/resources/utils/{index.js → index.ts} +1 -1
- package/specs/{security.js → security.ts} +1 -1
- package/src/api/controllers/automation.ts +13 -2
- package/src/api/controllers/cloud.ts +2 -2
- package/src/api/controllers/row/ExternalRequest.ts +95 -28
- package/src/api/controllers/row/external.ts +1 -1
- package/src/api/controllers/row/internalSearch.ts +11 -524
- package/src/api/controllers/row/utils.ts +1 -2
- package/src/api/routes/automation.ts +1 -1
- package/src/api/routes/public/applications.ts +7 -7
- package/src/api/routes/public/queries.ts +2 -2
- package/src/api/routes/public/rows.ts +5 -5
- package/src/api/routes/public/tables.ts +5 -5
- package/src/api/routes/public/tests/{compare.spec.js → compare.spec.ts} +44 -25
- package/src/api/routes/public/users.ts +5 -5
- package/src/api/routes/tests/{cloud.seq.spec.ts → cloud.spec.ts} +13 -20
- package/src/api/routes/tests/utilities/TestFunctions.ts +1 -2
- package/src/app.ts +2 -0
- package/src/db/index.ts +2 -2
- package/src/db/utils.ts +0 -4
- package/src/db/views/staticViews.ts +3 -3
- package/src/definitions/openapi.ts +449 -63
- package/src/integration-test/postgres.spec.ts +351 -81
- package/src/integrations/base/sql.ts +4 -8
- package/src/integrations/googlesheets.ts +21 -22
- package/src/integrations/tests/googlesheets.spec.ts +122 -0
- package/src/middleware/authorized.ts +6 -4
- package/src/middleware/builder.ts +8 -3
- package/src/migrations/functions/backfill/global/configs.ts +15 -9
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +3 -4
- package/src/migrations/tests/helpers.ts +2 -2
- package/src/migrations/tests/structures.ts +1 -0
- package/src/startup.ts +4 -1
- package/src/tests/jestEnv.ts +1 -0
- package/src/tests/utilities/TestConfiguration.ts +42 -30
- package/src/tests/utilities/structures.ts +0 -2
- package/builder/assets/index.7e76c039.css +0 -6
- package/dist/integrations/base/utils.js +0 -16
- package/specs/resources/utils/Resource.js +0 -26
- package/src/integrations/base/utils.ts +0 -12
|
@@ -11,7 +11,7 @@ const read = [], write = [];
|
|
|
11
11
|
* @openapi
|
|
12
12
|
* /users:
|
|
13
13
|
* post:
|
|
14
|
-
* operationId:
|
|
14
|
+
* operationId: userCreate
|
|
15
15
|
* summary: Create a user
|
|
16
16
|
* tags:
|
|
17
17
|
* - users
|
|
@@ -37,7 +37,7 @@ write.push(new Endpoint_1.default("post", "/users", users_1.default.create));
|
|
|
37
37
|
* @openapi
|
|
38
38
|
* /users/{userId}:
|
|
39
39
|
* put:
|
|
40
|
-
* operationId:
|
|
40
|
+
* operationId: userUpdate
|
|
41
41
|
* summary: Update a user
|
|
42
42
|
* tags:
|
|
43
43
|
* - users
|
|
@@ -65,7 +65,7 @@ write.push(new Endpoint_1.default("put", "/users/:userId", users_1.default.updat
|
|
|
65
65
|
* @openapi
|
|
66
66
|
* /users/{userId}:
|
|
67
67
|
* delete:
|
|
68
|
-
* operationId:
|
|
68
|
+
* operationId: userDestroy
|
|
69
69
|
* summary: Delete a user
|
|
70
70
|
* tags:
|
|
71
71
|
* - users
|
|
@@ -87,7 +87,7 @@ write.push(new Endpoint_1.default("delete", "/users/:userId", users_1.default.de
|
|
|
87
87
|
* @openapi
|
|
88
88
|
* /users/{userId}:
|
|
89
89
|
* get:
|
|
90
|
-
* operationId:
|
|
90
|
+
* operationId: userGetById
|
|
91
91
|
* summary: Retrieve a user
|
|
92
92
|
* tags:
|
|
93
93
|
* - users
|
|
@@ -109,7 +109,7 @@ read.push(new Endpoint_1.default("get", "/users/:userId", users_1.default.read))
|
|
|
109
109
|
* @openapi
|
|
110
110
|
* /users/search:
|
|
111
111
|
* post:
|
|
112
|
-
* operationId:
|
|
112
|
+
* operationId: userSearch
|
|
113
113
|
* summary: Search for users
|
|
114
114
|
* description: Based on user properties (currently only name) search for users.
|
|
115
115
|
* tags:
|
package/dist/app.js
CHANGED
|
@@ -64,6 +64,7 @@ const websocket_1 = require("./websocket");
|
|
|
64
64
|
const startup_1 = require("./startup");
|
|
65
65
|
const Sentry = require("@sentry/node");
|
|
66
66
|
const destroyable = require("server-destroy");
|
|
67
|
+
const { userAgent } = require("koa-useragent");
|
|
67
68
|
const app = new koa_1.default();
|
|
68
69
|
let mbNumber = parseInt(environment_1.default.HTTP_MB_LIMIT || "10");
|
|
69
70
|
if (!mbNumber || isNaN(mbNumber)) {
|
|
@@ -80,6 +81,7 @@ app.use((0, koa_body_1.default)({
|
|
|
80
81
|
parsedMethods: ["POST", "PUT", "PATCH", "DELETE"],
|
|
81
82
|
}));
|
|
82
83
|
app.use(backend_core_1.middleware.logging);
|
|
84
|
+
app.use(userAgent);
|
|
83
85
|
if (environment_1.default.isProd()) {
|
|
84
86
|
environment_1.default._set("NODE_ENV", "production");
|
|
85
87
|
Sentry.init();
|
package/dist/db/index.js
CHANGED
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
27
|
};
|
|
5
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
29
|
exports.init = void 0;
|
|
7
|
-
const
|
|
30
|
+
const core = __importStar(require("@budibase/backend-core"));
|
|
8
31
|
const environment_1 = __importDefault(require("../environment"));
|
|
9
32
|
function init() {
|
|
10
33
|
const dbConfig = {
|
|
@@ -15,6 +38,6 @@ function init() {
|
|
|
15
38
|
dbConfig.inMemory = true;
|
|
16
39
|
dbConfig.allDbs = true;
|
|
17
40
|
}
|
|
18
|
-
|
|
41
|
+
core.init({ db: dbConfig });
|
|
19
42
|
}
|
|
20
43
|
exports.init = init;
|
package/dist/db/utils.js
CHANGED
|
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.generateMemoryViewID = exports.getMetadataParams = exports.generateMetadataID = exports.generateUserFlagID = exports.getQueryParams = exports.getAutomationMetadataParams = exports.generateAutomationMetadataID = exports.generateQueryID = exports.getDatasourceParams = exports.generateDatasourceID = exports.getWebhookParams = exports.generateWebhookID = exports.getScreenParams = exports.generateScreenID = exports.getLayoutParams = exports.generateLayoutID = exports.getLinkParams = exports.generateLinkID = exports.generateAutomationID = exports.getAutomationParams = exports.getTableIDFromRowID = exports.generateTableID = exports.getTableParams = exports.getGlobalIDFromUserMetadataID = exports.generateUserMetadataID = exports.getUserMetadataParams = exports.generateRowID = exports.getRowParams = exports.getDocParams = exports.getQueryIndex = exports.getRoleParams = exports.generateRoleID = exports.generateDevAppID = exports.generateAppID = exports.UNICODE_MAX = exports.InternalTables = exports.ViewName = exports.TABLE_ROW_PREFIX = exports.LINK_USER_METADATA_PREFIX = exports.USER_METDATA_PREFIX = exports.isProdAppID = exports.isDevAppID = exports.APP_DEV_PREFIX = exports.APP_PREFIX = exports.DocumentType = exports.StaticDatabases = exports.SEPARATOR = exports.BudibaseInternalDB = exports.
|
|
7
|
-
exports.getMultiIDParams = exports.generatePluginID =
|
|
6
|
+
exports.getMemoryViewParams = exports.generateMemoryViewID = exports.getMetadataParams = exports.generateMetadataID = exports.generateUserFlagID = exports.getQueryParams = exports.getAutomationMetadataParams = exports.generateAutomationMetadataID = exports.generateQueryID = exports.getDatasourceParams = exports.generateDatasourceID = exports.getWebhookParams = exports.generateWebhookID = exports.getScreenParams = exports.generateScreenID = exports.getLayoutParams = exports.generateLayoutID = exports.getLinkParams = exports.generateLinkID = exports.generateAutomationID = exports.getAutomationParams = exports.getTableIDFromRowID = exports.generateTableID = exports.getTableParams = exports.getGlobalIDFromUserMetadataID = exports.generateUserMetadataID = exports.getUserMetadataParams = exports.generateRowID = exports.getRowParams = exports.getDocParams = exports.getQueryIndex = exports.getRoleParams = exports.generateRoleID = exports.generateDevAppID = exports.generateAppID = exports.UNICODE_MAX = exports.InternalTables = exports.ViewName = exports.TABLE_ROW_PREFIX = exports.LINK_USER_METADATA_PREFIX = exports.USER_METDATA_PREFIX = exports.isProdAppID = exports.isDevAppID = exports.APP_DEV_PREFIX = exports.APP_PREFIX = exports.DocumentType = exports.StaticDatabases = exports.SEPARATOR = exports.BudibaseInternalDB = exports.AppStatus = void 0;
|
|
7
|
+
exports.getMultiIDParams = exports.generatePluginID = void 0;
|
|
8
8
|
const newid_1 = __importDefault(require("./newid"));
|
|
9
9
|
const backend_core_1 = require("@budibase/backend-core");
|
|
10
10
|
exports.AppStatus = {
|
|
@@ -12,9 +12,6 @@ exports.AppStatus = {
|
|
|
12
12
|
ALL: "all",
|
|
13
13
|
DEPLOYED: "published",
|
|
14
14
|
};
|
|
15
|
-
exports.SearchIndexes = {
|
|
16
|
-
ROWS: "rows",
|
|
17
|
-
};
|
|
18
15
|
exports.BudibaseInternalDB = {
|
|
19
16
|
_id: "bb_internal",
|
|
20
17
|
type: backend_core_1.db.BUDIBASE_DATASOURCE_TYPE,
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.createAllSearchIndex = exports.createRoutingView = exports.createLinkView = void 0;
|
|
13
13
|
const backend_core_1 = require("@budibase/backend-core");
|
|
14
14
|
const utils_1 = require("../utils");
|
|
15
|
+
const types_1 = require("@budibase/types");
|
|
15
16
|
const SCREEN_PREFIX = utils_1.DocumentType.SCREEN + utils_1.SEPARATOR;
|
|
16
17
|
/**************************************************
|
|
17
18
|
* INFORMATION *
|
|
@@ -99,7 +100,7 @@ function searchIndex(indexName, fnString) {
|
|
|
99
100
|
}
|
|
100
101
|
function createAllSearchIndex() {
|
|
101
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
yield searchIndex(
|
|
103
|
+
yield searchIndex(types_1.SearchIndex.ROWS, function (doc) {
|
|
103
104
|
function idx(input, prev) {
|
|
104
105
|
for (let key of Object.keys(input)) {
|
|
105
106
|
let idxKey = prev != null ? `${prev}.${key}` : key;
|
|
@@ -14,10 +14,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const knex_1 = require("knex");
|
|
16
16
|
const types_1 = require("@budibase/types");
|
|
17
|
+
const backend_core_1 = require("@budibase/backend-core");
|
|
17
18
|
const utils_1 = require("../utils");
|
|
18
19
|
const sqlTable_1 = __importDefault(require("./sqlTable"));
|
|
19
20
|
const environment_1 = __importDefault(require("../../environment"));
|
|
20
|
-
const utils_2 = require("./utils");
|
|
21
21
|
const envLimit = environment_1.default.SQL_MAX_ROWS
|
|
22
22
|
? parseInt(environment_1.default.SQL_MAX_ROWS)
|
|
23
23
|
: null;
|
|
@@ -117,7 +117,7 @@ class InternalBuilder {
|
|
|
117
117
|
addFilters(query, filters, opts) {
|
|
118
118
|
function iterate(structure, fn) {
|
|
119
119
|
for (let [key, value] of Object.entries(structure)) {
|
|
120
|
-
const updatedKey =
|
|
120
|
+
const updatedKey = backend_core_1.db.removeKeyNumbering(key);
|
|
121
121
|
const isRelationshipField = updatedKey.includes(".");
|
|
122
122
|
if (!opts.relationship && !isRelationshipField) {
|
|
123
123
|
fn(`${opts.tableName}.${updatedKey}`, value);
|
|
@@ -382,9 +382,7 @@ class InternalBuilder {
|
|
|
382
382
|
return query.insert(parsedBody);
|
|
383
383
|
}
|
|
384
384
|
else {
|
|
385
|
-
return query
|
|
386
|
-
.insert(parsedBody)
|
|
387
|
-
.returning(generateSelectStatement(json, knex));
|
|
385
|
+
return query.insert(parsedBody).returning("*");
|
|
388
386
|
}
|
|
389
387
|
}
|
|
390
388
|
bulkCreate(knex, json) {
|
|
@@ -463,9 +461,7 @@ class InternalBuilder {
|
|
|
463
461
|
return query.update(parsedBody);
|
|
464
462
|
}
|
|
465
463
|
else {
|
|
466
|
-
return query
|
|
467
|
-
.update(parsedBody)
|
|
468
|
-
.returning(generateSelectStatement(json, knex));
|
|
464
|
+
return query.update(parsedBody).returning("*");
|
|
469
465
|
}
|
|
470
466
|
}
|
|
471
467
|
delete(knex, json, opts) {
|
|
@@ -17,9 +17,8 @@ const google_auth_library_1 = require("google-auth-library");
|
|
|
17
17
|
const utils_1 = require("./utils");
|
|
18
18
|
const constants_1 = require("../constants");
|
|
19
19
|
const google_spreadsheet_1 = require("google-spreadsheet");
|
|
20
|
-
const
|
|
20
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
21
21
|
const backend_core_1 = require("@budibase/backend-core");
|
|
22
|
-
const fetch = require("node-fetch");
|
|
23
22
|
const SCHEMA = {
|
|
24
23
|
plus: true,
|
|
25
24
|
auth: {
|
|
@@ -120,7 +119,7 @@ class GoogleSheetsIntegration {
|
|
|
120
119
|
}
|
|
121
120
|
fetchAccessToken(payload) {
|
|
122
121
|
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
-
const response = yield
|
|
122
|
+
const response = yield (0, node_fetch_1.default)("https://www.googleapis.com/oauth2/v4/token", {
|
|
124
123
|
method: "POST",
|
|
125
124
|
body: JSON.stringify(Object.assign(Object.assign({}, payload), { grant_type: "refresh_token" })),
|
|
126
125
|
headers: {
|
|
@@ -138,15 +137,9 @@ class GoogleSheetsIntegration {
|
|
|
138
137
|
return __awaiter(this, void 0, void 0, function* () {
|
|
139
138
|
try {
|
|
140
139
|
// Initialise oAuth client
|
|
141
|
-
|
|
142
|
-
let googleConfig = yield backend_core_1.db.getScopedConfig(db, {
|
|
143
|
-
type: backend_core_1.constants.Config.GOOGLE,
|
|
144
|
-
});
|
|
140
|
+
let googleConfig = yield backend_core_1.configs.getGoogleDatasourceConfig();
|
|
145
141
|
if (!googleConfig) {
|
|
146
|
-
|
|
147
|
-
clientID: environment_1.default.GOOGLE_CLIENT_ID,
|
|
148
|
-
clientSecret: environment_1.default.GOOGLE_CLIENT_SECRET,
|
|
149
|
-
};
|
|
142
|
+
throw new backend_core_1.HTTPError("Google config not found", 400);
|
|
150
143
|
}
|
|
151
144
|
const oauthClient = new google_auth_library_1.OAuth2Client({
|
|
152
145
|
clientId: googleConfig.clientID,
|
|
@@ -173,7 +166,7 @@ class GoogleSheetsIntegration {
|
|
|
173
166
|
buildSchema(datasourceId) {
|
|
174
167
|
return __awaiter(this, void 0, void 0, function* () {
|
|
175
168
|
yield this.connect();
|
|
176
|
-
const sheets =
|
|
169
|
+
const sheets = this.client.sheetsByIndex;
|
|
177
170
|
const tables = {};
|
|
178
171
|
for (let sheet of sheets) {
|
|
179
172
|
// must fetch rows to determine schema
|
|
@@ -254,7 +247,7 @@ class GoogleSheetsIntegration {
|
|
|
254
247
|
return __awaiter(this, void 0, void 0, function* () {
|
|
255
248
|
try {
|
|
256
249
|
yield this.connect();
|
|
257
|
-
const sheet =
|
|
250
|
+
const sheet = this.client.sheetsByTitle[table.name];
|
|
258
251
|
yield sheet.loadHeaderRow();
|
|
259
252
|
if (table._rename) {
|
|
260
253
|
const headers = [];
|
|
@@ -269,8 +262,12 @@ class GoogleSheetsIntegration {
|
|
|
269
262
|
yield sheet.setHeaderRow(headers);
|
|
270
263
|
}
|
|
271
264
|
else {
|
|
272
|
-
|
|
273
|
-
|
|
265
|
+
const updatedHeaderValues = [...sheet.headerValues];
|
|
266
|
+
const newField = Object.keys(table.schema).find(key => !sheet.headerValues.includes(key));
|
|
267
|
+
if (newField) {
|
|
268
|
+
updatedHeaderValues.push(newField);
|
|
269
|
+
}
|
|
270
|
+
yield sheet.setHeaderRow(updatedHeaderValues);
|
|
274
271
|
}
|
|
275
272
|
}
|
|
276
273
|
catch (err) {
|
|
@@ -283,7 +280,7 @@ class GoogleSheetsIntegration {
|
|
|
283
280
|
return __awaiter(this, void 0, void 0, function* () {
|
|
284
281
|
try {
|
|
285
282
|
yield this.connect();
|
|
286
|
-
const sheetToDelete =
|
|
283
|
+
const sheetToDelete = this.client.sheetsByTitle[sheet];
|
|
287
284
|
return yield sheetToDelete.delete();
|
|
288
285
|
}
|
|
289
286
|
catch (err) {
|
|
@@ -296,7 +293,7 @@ class GoogleSheetsIntegration {
|
|
|
296
293
|
return __awaiter(this, void 0, void 0, function* () {
|
|
297
294
|
try {
|
|
298
295
|
yield this.connect();
|
|
299
|
-
const sheet =
|
|
296
|
+
const sheet = this.client.sheetsByTitle[query.sheet];
|
|
300
297
|
const rowToInsert = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
|
|
301
298
|
const row = yield sheet.addRow(rowToInsert);
|
|
302
299
|
return [
|
|
@@ -313,7 +310,7 @@ class GoogleSheetsIntegration {
|
|
|
313
310
|
return __awaiter(this, void 0, void 0, function* () {
|
|
314
311
|
try {
|
|
315
312
|
yield this.connect();
|
|
316
|
-
const sheet =
|
|
313
|
+
const sheet = this.client.sheetsByTitle[query.sheet];
|
|
317
314
|
const rows = yield sheet.getRows();
|
|
318
315
|
const headerValues = sheet.headerValues;
|
|
319
316
|
const response = [];
|
|
@@ -332,7 +329,7 @@ class GoogleSheetsIntegration {
|
|
|
332
329
|
return __awaiter(this, void 0, void 0, function* () {
|
|
333
330
|
try {
|
|
334
331
|
yield this.connect();
|
|
335
|
-
const sheet =
|
|
332
|
+
const sheet = this.client.sheetsByTitle[query.sheet];
|
|
336
333
|
const rows = yield sheet.getRows();
|
|
337
334
|
const row = rows[query.rowIndex];
|
|
338
335
|
if (row) {
|
|
@@ -358,7 +355,7 @@ class GoogleSheetsIntegration {
|
|
|
358
355
|
delete(query) {
|
|
359
356
|
return __awaiter(this, void 0, void 0, function* () {
|
|
360
357
|
yield this.connect();
|
|
361
|
-
const sheet =
|
|
358
|
+
const sheet = this.client.sheetsByTitle[query.sheet];
|
|
362
359
|
const rows = yield sheet.getRows();
|
|
363
360
|
const row = rows[query.rowIndex];
|
|
364
361
|
if (row) {
|
|
@@ -66,9 +66,6 @@ exports.default = (permType, permLevel = null, opts = { schema: false }) => (ctx
|
|
|
66
66
|
if (!ctx.user) {
|
|
67
67
|
return ctx.throw(403, "No user info found");
|
|
68
68
|
}
|
|
69
|
-
// check general builder stuff, this middleware is a good way
|
|
70
|
-
// to find API endpoints which are builder focused
|
|
71
|
-
yield (0, builder_1.default)(ctx, permType);
|
|
72
69
|
// get the resource roles
|
|
73
70
|
let resourceRoles = [];
|
|
74
71
|
let otherLevelRoles = [];
|
|
@@ -92,6 +89,11 @@ exports.default = (permType, permLevel = null, opts = { schema: false }) => (ctx
|
|
|
92
89
|
if (!ctx.isAuthenticated) {
|
|
93
90
|
return ctx.throw(403, "Session not authenticated");
|
|
94
91
|
}
|
|
92
|
+
// check general builder stuff, this middleware is a good way
|
|
93
|
+
// to find API endpoints which are builder focused
|
|
94
|
+
if (permType === backend_core_1.permissions.PermissionType.BUILDER) {
|
|
95
|
+
yield (0, builder_1.default)(ctx);
|
|
96
|
+
}
|
|
95
97
|
try {
|
|
96
98
|
// check authorized
|
|
97
99
|
yield checkAuthorized(ctx, resourceRoles, permType, permLevel);
|
|
@@ -61,14 +61,17 @@ function updateAppUpdatedAt(ctx) {
|
|
|
61
61
|
}));
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
|
-
function builder(ctx
|
|
64
|
+
function builder(ctx) {
|
|
65
65
|
return __awaiter(this, void 0, void 0, function* () {
|
|
66
66
|
const appId = ctx.appId;
|
|
67
67
|
// this only functions within an app context
|
|
68
68
|
if (!appId) {
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
// check authenticated
|
|
72
|
+
if (!ctx.isAuthenticated) {
|
|
73
|
+
return ctx.throw(403, "Session not authenticated");
|
|
74
|
+
}
|
|
72
75
|
const referer = ctx.headers["referer"];
|
|
73
76
|
const overviewPath = "/builder/portal/overview/";
|
|
74
77
|
const overviewContext = !referer ? false : referer.includes(overviewPath);
|
|
@@ -78,7 +81,7 @@ function builder(ctx, permType) {
|
|
|
78
81
|
const hasAppId = !referer ? false : referer.includes(appId);
|
|
79
82
|
const editingApp = referer ? hasAppId : false;
|
|
80
83
|
// check this is a builder call and editing
|
|
81
|
-
if (!
|
|
84
|
+
if (!editingApp) {
|
|
82
85
|
return;
|
|
83
86
|
}
|
|
84
87
|
// check locks
|
|
@@ -12,14 +12,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.backfill = void 0;
|
|
15
|
+
exports.backfill = exports.getConfigParams = void 0;
|
|
16
16
|
const backend_core_1 = require("@budibase/backend-core");
|
|
17
17
|
const types_1 = require("@budibase/types");
|
|
18
18
|
const environment_1 = __importDefault(require("./../../../../environment"));
|
|
19
|
-
const
|
|
20
|
-
|
|
19
|
+
const getConfigParams = () => {
|
|
20
|
+
return {
|
|
21
21
|
include_docs: true,
|
|
22
|
-
|
|
22
|
+
startkey: `${backend_core_1.DocumentType.CONFIG}${backend_core_1.SEPARATOR}`,
|
|
23
|
+
endkey: `${backend_core_1.DocumentType.CONFIG}${backend_core_1.SEPARATOR}${backend_core_1.UNICODE_MAX}`,
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
exports.getConfigParams = getConfigParams;
|
|
27
|
+
const getConfigs = (globalDb) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
const response = yield globalDb.allDocs((0, exports.getConfigParams)());
|
|
23
29
|
return response.rows.map((row) => row.doc);
|
|
24
30
|
});
|
|
25
31
|
const backfill = (globalDb, timestamp) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -57,7 +57,7 @@ const saveSmtpConfig = (globalDb) => __awaiter(void 0, void 0, void 0, function*
|
|
|
57
57
|
});
|
|
58
58
|
exports.saveSmtpConfig = saveSmtpConfig;
|
|
59
59
|
const saveConfig = (config, globalDb) => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
-
config._id = backend_core_1.
|
|
60
|
+
config._id = backend_core_1.configs.generateConfigID(config.type);
|
|
61
61
|
let response;
|
|
62
62
|
try {
|
|
63
63
|
response = yield globalDb.get(config._id);
|
|
@@ -8,7 +8,7 @@ const oidc = (conf) => {
|
|
|
8
8
|
type: types_1.ConfigType.OIDC,
|
|
9
9
|
config: {
|
|
10
10
|
configs: [
|
|
11
|
-
Object.assign({ configUrl: "http://someconfigurl", clientID: "clientId", clientSecret: "clientSecret", logo: "Microsoft", name: "Active Directory", uuid: backend_core_1.utils.newid(), activated: true }, conf),
|
|
11
|
+
Object.assign({ configUrl: "http://someconfigurl", clientID: "clientId", clientSecret: "clientSecret", logo: "Microsoft", name: "Active Directory", uuid: backend_core_1.utils.newid(), activated: true, scopes: [] }, conf),
|
|
12
12
|
],
|
|
13
13
|
},
|
|
14
14
|
};
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "2.3.18-alpha.
|
|
4
|
+
"version": "2.3.18-alpha.20",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"build:dev": "yarn prebuild && tsc --build --watch --preserveWatchOutput",
|
|
15
15
|
"debug": "yarn build && node --expose-gc --inspect=9222 dist/index.js",
|
|
16
16
|
"postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
|
|
17
|
-
"test": "
|
|
17
|
+
"test": "bash scripts/test.sh",
|
|
18
18
|
"test:watch": "jest --watch",
|
|
19
19
|
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../client/manifest.json client",
|
|
20
20
|
"build:docker": "yarn run predocker && docker build . -t app-service --label version=$BUDIBASE_RELEASE_VERSION",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dev:stack:down": "node scripts/dev/manage.js down",
|
|
26
26
|
"dev:stack:nuke": "node scripts/dev/manage.js nuke",
|
|
27
27
|
"dev:builder": "yarn run dev:stack:up && nodemon",
|
|
28
|
-
"specs": "node specs/generate.
|
|
28
|
+
"specs": "ts-node specs/generate.ts && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
|
|
29
29
|
"initialise": "node scripts/initialise.js",
|
|
30
30
|
"env:multi:enable": "node scripts/multiTenancy.js enable",
|
|
31
31
|
"env:multi:disable": "node scripts/multiTenancy.js disable",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"license": "GPL-3.0",
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
46
|
-
"@budibase/backend-core": "2.3.18-alpha.
|
|
47
|
-
"@budibase/client": "2.3.18-alpha.
|
|
48
|
-
"@budibase/pro": "2.3.18-alpha.
|
|
49
|
-
"@budibase/string-templates": "2.3.18-alpha.
|
|
50
|
-
"@budibase/types": "2.3.18-alpha.
|
|
46
|
+
"@budibase/backend-core": "2.3.18-alpha.20",
|
|
47
|
+
"@budibase/client": "2.3.18-alpha.20",
|
|
48
|
+
"@budibase/pro": "2.3.18-alpha.20",
|
|
49
|
+
"@budibase/string-templates": "2.3.18-alpha.20",
|
|
50
|
+
"@budibase/types": "2.3.18-alpha.20",
|
|
51
51
|
"@bull-board/api": "3.7.0",
|
|
52
52
|
"@bull-board/koa": "3.9.4",
|
|
53
53
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"koa-send": "5.0.0",
|
|
88
88
|
"koa-session": "5.12.0",
|
|
89
89
|
"koa-static": "5.0.0",
|
|
90
|
+
"koa-useragent": "^4.1.0",
|
|
90
91
|
"koa2-ratelimit": "1.1.1",
|
|
91
92
|
"lodash": "4.17.21",
|
|
92
93
|
"memorystream": "0.3.1",
|
package/dist/startup.js
CHANGED
|
@@ -141,6 +141,9 @@ function startup(app, server) {
|
|
|
141
141
|
// get the references to the queue promises, don't await as
|
|
142
142
|
// they will never end, unless the processing stops
|
|
143
143
|
let queuePromises = [];
|
|
144
|
+
// configure events to use the pro audit log write
|
|
145
|
+
// can't integrate directly into backend-core due to cyclic issues
|
|
146
|
+
queuePromises.push(backend_core_1.events.processors.init(pro.sdk.auditLogs.write));
|
|
144
147
|
queuePromises.push(automations.init());
|
|
145
148
|
queuePromises.push(initPro());
|
|
146
149
|
if (app) {
|