@budibase/server 1.3.19-alpha.1 → 1.3.19
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__/mongodb.ts +1 -1
- package/builder/assets/index.9ce4f8c5.css +6 -0
- package/builder/assets/index.a1f7532b.js +876 -0
- package/builder/assets/vendor.5e1fe644.css +1 -0
- package/builder/assets/vendor.67dbd8fa.js +248 -0
- package/builder/index.html +4 -2
- package/coverage/clover.xml +388 -441
- package/coverage/coverage-final.json +20 -20
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
- 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 +11 -68
- package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +46 -46
- package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
- 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 +1 -1
- 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 +2 -2
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- 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 +12 -207
- 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 +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +13 -13
- 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 +2 -2
- 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 +5 -5
- package/coverage/lcov-report/api/routes/utils/validators.js.html +6 -9
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- 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 +18 -18
- 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 +2 -2
- package/coverage/lcov-report/db/utils.js.html +20 -56
- package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
- 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 +37 -37
- 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 +12 -12
- package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
- package/coverage/lcov-report/middleware/index.html +15 -15
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +16 -16
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +24 -24
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- 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 +667 -780
- package/dist/api/controllers/application.js +5 -5
- package/dist/api/controllers/auth.js +0 -9
- package/dist/api/controllers/component.js +1 -14
- package/dist/api/controllers/datasource.js +8 -21
- package/dist/api/controllers/deploy/index.js +8 -1
- package/dist/api/controllers/integration.js +4 -4
- package/dist/api/controllers/row/external.js +1 -1
- package/dist/api/controllers/screen.js +2 -52
- package/dist/api/controllers/static/index.js +0 -1
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/dist/api/controllers/static/templates/preview.hbs +1 -5
- package/dist/api/index.js +1 -1
- package/dist/api/routes/application.js +2 -3
- package/dist/api/routes/index.js +0 -2
- package/dist/api/routes/public/tables.js +1 -1
- package/dist/api/routes/table.js +1 -1
- package/dist/api/routes/utils/validators.js +1 -2
- package/dist/app.js +0 -11
- package/dist/db/utils.js +1 -10
- package/dist/environment.js +0 -1
- package/dist/integrations/airtable.js +129 -126
- package/dist/integrations/arangodb.js +89 -86
- package/dist/integrations/base/query.js +2 -2
- package/dist/integrations/base/sqlTable.js +1 -3
- package/dist/integrations/couchdb.js +83 -80
- package/dist/integrations/dynamodb.js +164 -161
- package/dist/integrations/elasticsearch.js +138 -135
- package/dist/integrations/firebase.js +157 -154
- package/dist/integrations/googlesheets.js +327 -323
- package/dist/integrations/index.js +51 -99
- package/dist/integrations/microsoftSqlServer.js +243 -240
- package/dist/integrations/mongodb.js +242 -239
- package/dist/integrations/mysql.js +219 -215
- package/dist/integrations/oracle.js +322 -318
- package/dist/integrations/postgres.js +265 -262
- package/dist/integrations/redis.js +139 -134
- package/dist/integrations/rest.js +292 -289
- package/dist/integrations/s3.js +64 -61
- package/dist/integrations/snowflake.js +86 -83
- package/dist/middleware/currentapp.js +0 -2
- package/dist/migrations/functions/backfill/global.js +3 -0
- package/dist/migrations/functions/developerQuota.js +49 -0
- package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
- package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
- package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
- package/dist/migrations/index.js +10 -0
- package/dist/package.json +6 -9
- package/dist/tests/utilities/TestConfiguration.js +1 -1
- package/dist/threads/query.js +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +1 -110
- package/package.json +7 -10
- package/scripts/dev/manage.js +0 -1
- package/scripts/localdomain.js +1 -3
- package/specs/openapi.json +3 -3
- package/specs/openapi.yaml +3 -3
- package/specs/resources/query.js +1 -1
- package/src/api/controllers/application.ts +2 -1
- package/src/api/controllers/auth.js +0 -11
- package/src/api/controllers/component.js +2 -21
- package/src/api/controllers/datasource.js +8 -21
- package/src/api/controllers/deploy/index.ts +6 -1
- package/src/api/controllers/integration.js +4 -4
- package/src/api/controllers/row/external.js +1 -1
- package/src/api/controllers/screen.js +1 -66
- package/src/api/controllers/static/index.ts +1 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/src/api/controllers/static/templates/preview.hbs +1 -5
- package/src/api/index.js +1 -1
- package/src/api/routes/application.ts +2 -13
- package/src/api/routes/index.ts +0 -2
- package/src/api/routes/public/tables.ts +1 -1
- package/src/api/routes/table.js +1 -1
- package/src/api/routes/tests/query.spec.js +25 -8
- package/src/api/routes/tests/user.spec.js +2 -0
- package/src/api/routes/utils/validators.js +1 -2
- package/src/app.ts +0 -14
- package/src/db/utils.js +0 -12
- package/src/definitions/openapi.ts +3 -3
- package/src/environment.js +0 -1
- package/src/integrations/airtable.ts +118 -116
- package/src/integrations/arangodb.ts +89 -87
- package/src/integrations/base/query.ts +2 -2
- package/src/integrations/base/sqlTable.ts +1 -3
- package/src/integrations/couchdb.ts +89 -83
- package/src/integrations/dynamodb.ts +175 -173
- package/src/integrations/elasticsearch.ts +122 -120
- package/src/integrations/firebase.ts +159 -157
- package/src/integrations/googlesheets.ts +338 -328
- package/src/integrations/index.ts +21 -64
- package/src/integrations/microsoftSqlServer.ts +251 -249
- package/src/integrations/mongodb.ts +258 -261
- package/src/integrations/mysql.ts +234 -229
- package/src/integrations/oracle.ts +380 -373
- package/src/integrations/postgres.ts +268 -264
- package/src/integrations/redis.ts +132 -128
- package/src/integrations/rest.ts +329 -324
- package/src/integrations/s3.ts +71 -68
- package/src/integrations/snowflake.ts +82 -80
- package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
- package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
- package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
- package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
- package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
- package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
- package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
- package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
- package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
- package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
- package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
- package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
- package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
- package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
- package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
- package/src/middleware/currentapp.js +0 -2
- package/src/migrations/functions/backfill/global.ts +3 -0
- package/src/migrations/functions/developerQuota.ts +15 -0
- package/src/migrations/functions/publishedAppsQuota.ts +13 -0
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
- package/src/migrations/index.ts +16 -0
- package/src/module.d.ts +0 -2
- package/src/tests/utilities/TestConfiguration.js +1 -1
- package/src/threads/query.ts +2 -2
- package/src/utilities/fileSystem/index.js +0 -129
- package/builder/assets/index.1709d1b3.js +0 -1005
- package/builder/assets/index.8f621053.css +0 -6
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -200
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/utils.js +0 -26
- package/dist/watch.js +0 -77
- package/dist/websocket.js +0 -22
- package/src/api/controllers/plugin/file.ts +0 -15
- package/src/api/controllers/plugin/github.ts +0 -75
- package/src/api/controllers/plugin/index.ts +0 -215
- package/src/api/controllers/plugin/npm.ts +0 -56
- package/src/api/controllers/plugin/uploaders.ts +0 -4
- package/src/api/controllers/plugin/url.ts +0 -12
- package/src/api/controllers/plugin/utils.ts +0 -19
- package/src/api/routes/plugin.ts +0 -14
- package/src/watch.ts +0 -38
- package/src/websocket.ts +0 -26
|
@@ -14,18 +14,14 @@ const { join } = require("path");
|
|
|
14
14
|
const uuid = require("uuid/v4");
|
|
15
15
|
const { doWithDB, dangerousGetDB, closeDB, } = require("@budibase/backend-core/db");
|
|
16
16
|
const { ObjectStoreBuckets } = require("../../constants");
|
|
17
|
-
const { upload, retrieve, retrieveToTmp, streamUpload, deleteFolder, downloadTarball,
|
|
17
|
+
const { upload, retrieve, retrieveToTmp, streamUpload, deleteFolder, downloadTarball, deleteFiles, } = require("./utilities");
|
|
18
18
|
const { updateClientLibrary } = require("./clientLibrary");
|
|
19
|
-
const { checkSlashesInUrl } = require("../");
|
|
20
19
|
const env = require("../../environment");
|
|
21
20
|
const { USER_METDATA_PREFIX, LINK_USER_METADATA_PREFIX, TABLE_ROW_PREFIX, } = require("../../db/utils");
|
|
22
21
|
const MemoryStream = require("memorystream");
|
|
23
22
|
const { getAppId } = require("@budibase/backend-core/context");
|
|
24
|
-
const tar = require("tar");
|
|
25
|
-
const fetch = require("node-fetch");
|
|
26
23
|
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..");
|
|
27
24
|
const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules");
|
|
28
|
-
const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
|
|
29
25
|
/**
|
|
30
26
|
* The single stack system (Cloud and Builder) should not make use of the file system where possible,
|
|
31
27
|
* this file handles all of the file access for the system with the intention of limiting it all to one
|
|
@@ -100,12 +96,6 @@ exports.getTemplateStream = (template) => __awaiter(void 0, void 0, void 0, func
|
|
|
100
96
|
exports.loadHandlebarsFile = path => {
|
|
101
97
|
return fs.readFileSync(path, "utf8");
|
|
102
98
|
};
|
|
103
|
-
/**
|
|
104
|
-
* Same as above just with a different name.
|
|
105
|
-
*/
|
|
106
|
-
exports.loadJSFile = (directory, name) => {
|
|
107
|
-
return fs.readFileSync(join(directory, name), "utf8");
|
|
108
|
-
};
|
|
109
99
|
/**
|
|
110
100
|
* When return a file from the API need to write the file to the system temporarily so we
|
|
111
101
|
* can create a read stream to send.
|
|
@@ -304,104 +294,6 @@ exports.cleanup = appIds => {
|
|
|
304
294
|
}
|
|
305
295
|
}
|
|
306
296
|
};
|
|
307
|
-
const createTempFolder = item => {
|
|
308
|
-
const path = join(budibaseTempDir(), item);
|
|
309
|
-
try {
|
|
310
|
-
// remove old tmp directories automatically - don't combine
|
|
311
|
-
if (fs.existsSync(path)) {
|
|
312
|
-
fs.rmSync(path, { recursive: true, force: true });
|
|
313
|
-
}
|
|
314
|
-
fs.mkdirSync(path);
|
|
315
|
-
}
|
|
316
|
-
catch (err) {
|
|
317
|
-
throw new Error(`Path cannot be created: ${err.message}`);
|
|
318
|
-
}
|
|
319
|
-
return path;
|
|
320
|
-
};
|
|
321
|
-
exports.createTempFolder = createTempFolder;
|
|
322
|
-
const extractTarball = (fromFilePath, toPath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
323
|
-
yield tar.extract({
|
|
324
|
-
file: fromFilePath,
|
|
325
|
-
C: toPath,
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
|
-
exports.extractTarball = extractTarball;
|
|
329
|
-
const getPluginMetadata = (path) => __awaiter(void 0, void 0, void 0, function* () {
|
|
330
|
-
let metadata = {};
|
|
331
|
-
try {
|
|
332
|
-
const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
|
|
333
|
-
const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
|
|
334
|
-
metadata.schema = JSON.parse(schema);
|
|
335
|
-
metadata.package = JSON.parse(pkg);
|
|
336
|
-
if (!metadata.package.name ||
|
|
337
|
-
!metadata.package.version ||
|
|
338
|
-
!metadata.package.description) {
|
|
339
|
-
throw new Error("package.json is missing one of 'name', 'version' or 'description'.");
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
catch (err) {
|
|
343
|
-
throw new Error(`Unable to process schema.json/package.json in plugin. ${err.message}`);
|
|
344
|
-
}
|
|
345
|
-
return { metadata, directory: path };
|
|
346
|
-
});
|
|
347
|
-
exports.getPluginMetadata = getPluginMetadata;
|
|
348
|
-
exports.getDatasourcePlugin = (name, url, hash) => __awaiter(void 0, void 0, void 0, function* () {
|
|
349
|
-
if (!fs.existsSync(DATASOURCE_PATH)) {
|
|
350
|
-
fs.mkdirSync(DATASOURCE_PATH);
|
|
351
|
-
}
|
|
352
|
-
const filename = join(DATASOURCE_PATH, name);
|
|
353
|
-
const metadataName = `${filename}.bbmetadata`;
|
|
354
|
-
if (fs.existsSync(filename)) {
|
|
355
|
-
const currentHash = fs.readFileSync(metadataName, "utf8");
|
|
356
|
-
// if hash is the same return the file, otherwise remove it and re-download
|
|
357
|
-
if (currentHash === hash) {
|
|
358
|
-
return require(filename);
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
console.log(`Updating plugin: ${name}`);
|
|
362
|
-
fs.unlinkSync(filename);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
const fullUrl = checkSlashesInUrl(`${env.MINIO_URL}/${ObjectStoreBuckets.PLUGINS}/${url}`);
|
|
366
|
-
const response = yield fetch(fullUrl);
|
|
367
|
-
if (response.status === 200) {
|
|
368
|
-
const content = yield response.text();
|
|
369
|
-
fs.writeFileSync(filename, content);
|
|
370
|
-
fs.writeFileSync(metadataName, hash);
|
|
371
|
-
return require(filename);
|
|
372
|
-
}
|
|
373
|
-
else {
|
|
374
|
-
throw new Error(`Unable to retrieve plugin - reason: ${yield response.text()}`);
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
/**
|
|
378
|
-
* Find for a file recursively from start path applying filter, return first match
|
|
379
|
-
*/
|
|
380
|
-
exports.findFileRec = (startPath, filter) => {
|
|
381
|
-
if (!fs.existsSync(startPath)) {
|
|
382
|
-
return;
|
|
383
|
-
}
|
|
384
|
-
const files = fs.readdirSync(startPath);
|
|
385
|
-
for (let i = 0, len = files.length; i < len; i++) {
|
|
386
|
-
const filename = join(startPath, files[i]);
|
|
387
|
-
const stat = fs.lstatSync(filename);
|
|
388
|
-
if (stat.isDirectory()) {
|
|
389
|
-
return exports.findFileRec(filename, filter);
|
|
390
|
-
}
|
|
391
|
-
else if (filename.endsWith(filter)) {
|
|
392
|
-
return filename;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
};
|
|
396
|
-
/**
|
|
397
|
-
* Remove a folder which is not empty from the file system
|
|
398
|
-
*/
|
|
399
|
-
exports.deleteFolderFileSystem = path => {
|
|
400
|
-
if (!fs.existsSync(path)) {
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
fs.rmSync(path, { recursive: true, force: true });
|
|
404
|
-
};
|
|
405
297
|
/**
|
|
406
298
|
* Full function definition for below can be found in the utilities.
|
|
407
299
|
*/
|
|
@@ -409,6 +301,5 @@ exports.upload = upload;
|
|
|
409
301
|
exports.retrieve = retrieve;
|
|
410
302
|
exports.retrieveToTmp = retrieveToTmp;
|
|
411
303
|
exports.deleteFiles = deleteFiles;
|
|
412
|
-
exports.downloadTarballDirect = downloadTarballDirect;
|
|
413
304
|
exports.TOP_LEVEL_PATH = TOP_LEVEL_PATH;
|
|
414
305
|
exports.NODE_MODULES_PATH = NODE_MODULES_PATH;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.3.19
|
|
4
|
+
"version": "1.3.19",
|
|
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.3.19
|
|
81
|
-
"@budibase/client": "1.3.19
|
|
82
|
-
"@budibase/pro": "1.3.
|
|
83
|
-
"@budibase/string-templates": "1.3.19
|
|
84
|
-
"@budibase/types": "1.3.19
|
|
80
|
+
"@budibase/backend-core": "^1.3.19",
|
|
81
|
+
"@budibase/client": "^1.3.19",
|
|
82
|
+
"@budibase/pro": "1.3.18",
|
|
83
|
+
"@budibase/string-templates": "^1.3.19",
|
|
84
|
+
"@budibase/types": "^1.3.19",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -95,7 +95,6 @@
|
|
|
95
95
|
"bcryptjs": "2.4.3",
|
|
96
96
|
"bull": "4.8.5",
|
|
97
97
|
"chmodr": "1.2.0",
|
|
98
|
-
"chokidar": "3.5.3",
|
|
99
98
|
"csvtojson": "2.0.10",
|
|
100
99
|
"curlconverter": "3.21.0",
|
|
101
100
|
"dotenv": "8.2.0",
|
|
@@ -139,10 +138,8 @@
|
|
|
139
138
|
"redis": "4",
|
|
140
139
|
"server-destroy": "1.0.1",
|
|
141
140
|
"snowflake-promise": "^4.5.0",
|
|
142
|
-
"socket.io": "^4.5.1",
|
|
143
141
|
"svelte": "3.49.0",
|
|
144
142
|
"swagger-parser": "10.0.3",
|
|
145
|
-
"tar": "6.1.11",
|
|
146
143
|
"to-json-schema": "0.2.5",
|
|
147
144
|
"uuid": "3.3.2",
|
|
148
145
|
"validate.js": "0.13.1",
|
|
@@ -199,5 +196,5 @@
|
|
|
199
196
|
"optionalDependencies": {
|
|
200
197
|
"oracledb": "5.3.0"
|
|
201
198
|
},
|
|
202
|
-
"gitHead": "
|
|
199
|
+
"gitHead": "1e621da16bad75ae6a2dfcd732e676cf0b56a2a4"
|
|
203
200
|
}
|
package/scripts/dev/manage.js
CHANGED
package/scripts/localdomain.js
CHANGED
|
@@ -17,8 +17,6 @@ const arg = process.argv.slice(2)[0]
|
|
|
17
17
|
*/
|
|
18
18
|
updateDotEnv({
|
|
19
19
|
ACCOUNT_PORTAL_URL:
|
|
20
|
-
arg === "enable"
|
|
21
|
-
? "http://account.local.com:10001"
|
|
22
|
-
: "http://localhost:10001",
|
|
20
|
+
arg === "enable" ? "http://local.com:10001" : "http://localhost:10001",
|
|
23
21
|
COOKIE_DOMAIN: arg === "enable" ? ".local.com" : "",
|
|
24
22
|
}).then(() => console.log("Updated worker!"))
|
package/specs/openapi.json
CHANGED
|
@@ -1327,7 +1327,7 @@
|
|
|
1327
1327
|
"type": "string"
|
|
1328
1328
|
},
|
|
1329
1329
|
"datasourceId": {
|
|
1330
|
-
"description": "The ID of the
|
|
1330
|
+
"description": "The ID of the data source the query belongs to.",
|
|
1331
1331
|
"type": "string"
|
|
1332
1332
|
},
|
|
1333
1333
|
"parameters": {
|
|
@@ -1386,7 +1386,7 @@
|
|
|
1386
1386
|
"type": "string"
|
|
1387
1387
|
},
|
|
1388
1388
|
"datasourceId": {
|
|
1389
|
-
"description": "The ID of the
|
|
1389
|
+
"description": "The ID of the data source the query belongs to.",
|
|
1390
1390
|
"type": "string"
|
|
1391
1391
|
},
|
|
1392
1392
|
"parameters": {
|
|
@@ -2289,7 +2289,7 @@
|
|
|
2289
2289
|
},
|
|
2290
2290
|
"responses": {
|
|
2291
2291
|
"200": {
|
|
2292
|
-
"description": "Returns the created table, including the ID which has been generated for it. This can be internal or external
|
|
2292
|
+
"description": "Returns the created table, including the ID which has been generated for it. This can be internal or external data sources.",
|
|
2293
2293
|
"content": {
|
|
2294
2294
|
"application/json": {
|
|
2295
2295
|
"schema": {
|
package/specs/openapi.yaml
CHANGED
|
@@ -1004,7 +1004,7 @@ components:
|
|
|
1004
1004
|
description: The ID of the query.
|
|
1005
1005
|
type: string
|
|
1006
1006
|
datasourceId:
|
|
1007
|
-
description: The ID of the
|
|
1007
|
+
description: The ID of the data source the query belongs to.
|
|
1008
1008
|
type: string
|
|
1009
1009
|
parameters:
|
|
1010
1010
|
description: The bindings which are required to perform this query.
|
|
@@ -1051,7 +1051,7 @@ components:
|
|
|
1051
1051
|
description: The ID of the query.
|
|
1052
1052
|
type: string
|
|
1053
1053
|
datasourceId:
|
|
1054
|
-
description: The ID of the
|
|
1054
|
+
description: The ID of the data source the query belongs to.
|
|
1055
1055
|
type: string
|
|
1056
1056
|
parameters:
|
|
1057
1057
|
description: The bindings which are required to perform this query.
|
|
@@ -1665,7 +1665,7 @@ paths:
|
|
|
1665
1665
|
responses:
|
|
1666
1666
|
"200":
|
|
1667
1667
|
description: Returns the created table, including the ID which has been
|
|
1668
|
-
generated for it. This can be internal or external
|
|
1668
|
+
generated for it. This can be internal or external data sources.
|
|
1669
1669
|
content:
|
|
1670
1670
|
application/json:
|
|
1671
1671
|
schema:
|
package/specs/resources/query.js
CHANGED
|
@@ -472,6 +472,7 @@ const destroyApp = async (ctx: any) => {
|
|
|
472
472
|
const result = await db.destroy()
|
|
473
473
|
|
|
474
474
|
if (isUnpublish) {
|
|
475
|
+
await quotas.removePublishedApp()
|
|
475
476
|
await events.app.unpublished(app)
|
|
476
477
|
} else {
|
|
477
478
|
await quotas.removeApp()
|
|
@@ -571,7 +572,7 @@ export const sync = async (ctx: any, next: any) => {
|
|
|
571
572
|
}
|
|
572
573
|
}
|
|
573
574
|
|
|
574
|
-
|
|
575
|
+
const updateAppPackage = async (appPackage: any, appId: any) => {
|
|
575
576
|
return context.doInAppContext(appId, async () => {
|
|
576
577
|
const db = context.getAppDB()
|
|
577
578
|
const application = await db.get(DocumentType.APP_METADATA)
|
|
@@ -4,15 +4,6 @@ const { getFullUser } = require("../../utilities/users")
|
|
|
4
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
5
5
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Add the attributes that are session based to the current user.
|
|
9
|
-
*/
|
|
10
|
-
const addSessionAttributesToUser = ctx => {
|
|
11
|
-
if (ctx.user) {
|
|
12
|
-
ctx.body.license = ctx.user.license
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
7
|
exports.fetchSelf = async ctx => {
|
|
17
8
|
let userId = ctx.user.userId || ctx.user._id
|
|
18
9
|
/* istanbul ignore next */
|
|
@@ -64,6 +55,4 @@ exports.fetchSelf = async ctx => {
|
|
|
64
55
|
} else {
|
|
65
56
|
ctx.body = user
|
|
66
57
|
}
|
|
67
|
-
|
|
68
|
-
addSessionAttributesToUser(ctx)
|
|
69
58
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
const { DocumentType
|
|
1
|
+
const { DocumentType } = require("../../db/utils")
|
|
2
2
|
const { getComponentLibraryManifest } = require("../../utilities/fileSystem")
|
|
3
3
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
4
|
-
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
5
4
|
|
|
6
5
|
exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
7
6
|
try {
|
|
@@ -11,6 +10,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
|
11
10
|
let componentManifests = await Promise.all(
|
|
12
11
|
app.componentLibraries.map(async library => {
|
|
13
12
|
let manifest = await getComponentLibraryManifest(library)
|
|
13
|
+
|
|
14
14
|
return {
|
|
15
15
|
manifest,
|
|
16
16
|
library,
|
|
@@ -31,25 +31,6 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
// Add custom components
|
|
36
|
-
const globalDB = getGlobalDB()
|
|
37
|
-
const response = await globalDB.allDocs(
|
|
38
|
-
getPluginParams(null, {
|
|
39
|
-
include_docs: true,
|
|
40
|
-
})
|
|
41
|
-
)
|
|
42
|
-
response.rows
|
|
43
|
-
.map(row => row.doc)
|
|
44
|
-
.filter(plugin => plugin.schema.type === "component")
|
|
45
|
-
.forEach(plugin => {
|
|
46
|
-
const fullComponentName = `plugin/${plugin.name}`
|
|
47
|
-
definitions[fullComponentName] = {
|
|
48
|
-
component: fullComponentName,
|
|
49
|
-
...plugin.schema.schema,
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
|
|
53
34
|
ctx.body = definitions
|
|
54
35
|
} catch (err) {
|
|
55
36
|
console.error(`component-definitions=failed`, err)
|
|
@@ -7,7 +7,7 @@ const {
|
|
|
7
7
|
getTableParams,
|
|
8
8
|
} = require("../../db/utils")
|
|
9
9
|
const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
|
|
10
|
-
const {
|
|
10
|
+
const { integrations } = require("../../integrations")
|
|
11
11
|
const { getDatasourceAndQuery } = require("./row/utils")
|
|
12
12
|
const { invalidateDynamicVariables } = require("../../threads/utils")
|
|
13
13
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
@@ -50,23 +50,9 @@ exports.fetch = async function (ctx) {
|
|
|
50
50
|
exports.buildSchemaFromDb = async function (ctx) {
|
|
51
51
|
const db = getAppDB()
|
|
52
52
|
const datasource = await db.get(ctx.params.datasourceId)
|
|
53
|
-
const tablesFilter = ctx.request.body.tablesFilter
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (!datasource.entities) {
|
|
58
|
-
datasource.entities = {}
|
|
59
|
-
}
|
|
60
|
-
for (let key in tables) {
|
|
61
|
-
if (
|
|
62
|
-
tablesFilter.some(filter => filter.toLowerCase() === key.toLowerCase())
|
|
63
|
-
) {
|
|
64
|
-
datasource.entities[key] = tables[key]
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
datasource.entities = tables
|
|
69
|
-
}
|
|
54
|
+
const { tables, error } = await buildSchemaHelper(datasource)
|
|
55
|
+
datasource.entities = tables
|
|
70
56
|
|
|
71
57
|
const dbResp = await db.put(datasource)
|
|
72
58
|
datasource._rev = dbResp.rev
|
|
@@ -128,7 +114,7 @@ exports.update = async function (ctx) {
|
|
|
128
114
|
|
|
129
115
|
// Drain connection pools when configuration is changed
|
|
130
116
|
if (datasource.source) {
|
|
131
|
-
const source =
|
|
117
|
+
const source = integrations[datasource.source]
|
|
132
118
|
if (source && source.pool) {
|
|
133
119
|
await source.pool.end()
|
|
134
120
|
}
|
|
@@ -163,7 +149,7 @@ exports.save = async function (ctx) {
|
|
|
163
149
|
|
|
164
150
|
// Drain connection pools when configuration is changed
|
|
165
151
|
if (datasource.source) {
|
|
166
|
-
const source =
|
|
152
|
+
const source = integrations[datasource.source]
|
|
167
153
|
if (source && source.pool) {
|
|
168
154
|
await source.pool.end()
|
|
169
155
|
}
|
|
@@ -232,14 +218,15 @@ function updateError(error, newError, tables) {
|
|
|
232
218
|
}
|
|
233
219
|
|
|
234
220
|
const buildSchemaHelper = async datasource => {
|
|
235
|
-
const Connector =
|
|
221
|
+
const Connector = integrations[datasource.source]
|
|
236
222
|
|
|
237
223
|
// Connect to the DB and build the schema
|
|
238
224
|
const connector = new Connector(datasource.config)
|
|
239
225
|
await connector.buildSchema(datasource._id, datasource.entities)
|
|
226
|
+
datasource.entities = connector.tables
|
|
240
227
|
|
|
241
228
|
// make sure they all have a display name selected
|
|
242
|
-
for (let entity of Object.values(datasource.entities
|
|
229
|
+
for (let entity of Object.values(datasource.entities)) {
|
|
243
230
|
if (entity.primaryDisplay) {
|
|
244
231
|
continue
|
|
245
232
|
}
|
|
@@ -206,7 +206,12 @@ const _deployApp = async function (ctx: any) {
|
|
|
206
206
|
|
|
207
207
|
console.log("Deploying app...")
|
|
208
208
|
|
|
209
|
-
let app
|
|
209
|
+
let app
|
|
210
|
+
if (await isFirstDeploy()) {
|
|
211
|
+
app = await quotas.addPublishedApp(() => deployApp(deployment))
|
|
212
|
+
} else {
|
|
213
|
+
app = await deployApp(deployment)
|
|
214
|
+
}
|
|
210
215
|
|
|
211
216
|
await events.app.published(app)
|
|
212
217
|
ctx.body = deployment
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { cloneDeep } = require("lodash")
|
|
2
|
+
const { definitions } = require("../../integrations")
|
|
2
3
|
const { SourceName } = require("@budibase/types")
|
|
3
4
|
const googlesheets = require("../../integrations/googlesheets")
|
|
4
5
|
const { featureFlags } = require("@budibase/backend-core")
|
|
5
6
|
|
|
6
7
|
exports.fetch = async function (ctx) {
|
|
7
8
|
ctx.status = 200
|
|
8
|
-
const defs =
|
|
9
|
+
const defs = cloneDeep(definitions)
|
|
9
10
|
|
|
10
11
|
// for google sheets integration google verification
|
|
11
12
|
if (featureFlags.isEnabled(featureFlags.FeatureFlag.GOOGLE_SHEETS)) {
|
|
@@ -16,7 +17,6 @@ exports.fetch = async function (ctx) {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
exports.find = async function (ctx) {
|
|
19
|
-
const defs = await getDefinitions()
|
|
20
20
|
ctx.status = 200
|
|
21
|
-
ctx.body =
|
|
21
|
+
ctx.body = definitions[ctx.params.type]
|
|
22
22
|
}
|
|
@@ -53,7 +53,7 @@ exports.save = async ctx => {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
exports.fetchView = async ctx => {
|
|
56
|
-
// there are no views in external
|
|
56
|
+
// there are no views in external data sources, shouldn't ever be called
|
|
57
57
|
// for now just fetch
|
|
58
58
|
const split = ctx.params.viewName.split("all_")
|
|
59
59
|
ctx.params.tableId = split[1] ? split[1] : split[0]
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
const {
|
|
2
|
-
getScreenParams,
|
|
3
|
-
generateScreenID,
|
|
4
|
-
getPluginParams,
|
|
5
|
-
DocumentType,
|
|
6
|
-
} = require("../../db/utils")
|
|
1
|
+
const { getScreenParams, generateScreenID } = require("../../db/utils")
|
|
7
2
|
const { AccessController } = require("@budibase/backend-core/roles")
|
|
8
3
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
9
4
|
const { events } = require("@budibase/backend-core")
|
|
10
|
-
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
11
|
-
const { updateAppPackage } = require("./application")
|
|
12
5
|
|
|
13
6
|
exports.fetch = async ctx => {
|
|
14
7
|
const db = getAppDB()
|
|
@@ -39,48 +32,6 @@ exports.save = async ctx => {
|
|
|
39
32
|
|
|
40
33
|
const response = await db.put(screen)
|
|
41
34
|
|
|
42
|
-
// Find any custom components being used
|
|
43
|
-
let pluginNames = []
|
|
44
|
-
let pluginAdded = false
|
|
45
|
-
findPlugins(screen.props, pluginNames)
|
|
46
|
-
if (pluginNames.length) {
|
|
47
|
-
const globalDB = getGlobalDB()
|
|
48
|
-
const pluginsResponse = await globalDB.allDocs(
|
|
49
|
-
getPluginParams(null, {
|
|
50
|
-
include_docs: true,
|
|
51
|
-
})
|
|
52
|
-
)
|
|
53
|
-
const requiredPlugins = pluginsResponse.rows
|
|
54
|
-
.map(row => row.doc)
|
|
55
|
-
.filter(plugin => {
|
|
56
|
-
return (
|
|
57
|
-
plugin.schema.type === "component" &&
|
|
58
|
-
pluginNames.includes(`plugin/${plugin.name}`)
|
|
59
|
-
)
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
// Update the app metadata
|
|
63
|
-
const application = await db.get(DocumentType.APP_METADATA)
|
|
64
|
-
let usedPlugins = application.usedPlugins || []
|
|
65
|
-
|
|
66
|
-
requiredPlugins.forEach(plugin => {
|
|
67
|
-
if (!usedPlugins.find(x => x._id === plugin._id)) {
|
|
68
|
-
pluginAdded = true
|
|
69
|
-
usedPlugins.push({
|
|
70
|
-
_id: plugin._id,
|
|
71
|
-
name: plugin.name,
|
|
72
|
-
version: plugin.version,
|
|
73
|
-
jsUrl: plugin.jsUrl,
|
|
74
|
-
hash: plugin.hash,
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
if (pluginAdded) {
|
|
80
|
-
await updateAppPackage({ usedPlugins }, ctx.appId)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
35
|
if (eventFn) {
|
|
85
36
|
await eventFn(screen)
|
|
86
37
|
}
|
|
@@ -89,7 +40,6 @@ exports.save = async ctx => {
|
|
|
89
40
|
...screen,
|
|
90
41
|
_id: response.id,
|
|
91
42
|
_rev: response.rev,
|
|
92
|
-
pluginAdded,
|
|
93
43
|
}
|
|
94
44
|
}
|
|
95
45
|
|
|
@@ -106,18 +56,3 @@ exports.destroy = async ctx => {
|
|
|
106
56
|
}
|
|
107
57
|
ctx.status = 200
|
|
108
58
|
}
|
|
109
|
-
|
|
110
|
-
const findPlugins = (component, foundPlugins) => {
|
|
111
|
-
if (!component) {
|
|
112
|
-
return
|
|
113
|
-
}
|
|
114
|
-
if (component._component.startsWith("plugin")) {
|
|
115
|
-
if (!foundPlugins.includes(component._component)) {
|
|
116
|
-
foundPlugins.push(component._component)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (!component._children || !component._children.length) {
|
|
120
|
-
return
|
|
121
|
-
}
|
|
122
|
-
component._children.forEach(child => findPlugins(child, foundPlugins))
|
|
123
|
-
}
|
|
@@ -18,6 +18,7 @@ const { DocumentType } = require("../../../db/utils")
|
|
|
18
18
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
19
19
|
const { setCookie, clearCookie } = require("@budibase/backend-core/utils")
|
|
20
20
|
const AWS = require("aws-sdk")
|
|
21
|
+
|
|
21
22
|
const fs = require("fs")
|
|
22
23
|
const {
|
|
23
24
|
downloadTarballDirect,
|
|
@@ -112,7 +113,6 @@ export const serveApp = async function (ctx: any) {
|
|
|
112
113
|
production: env.isProd(),
|
|
113
114
|
appId,
|
|
114
115
|
clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
|
|
115
|
-
usedPlugins: appInfo.usedPlugins,
|
|
116
116
|
})
|
|
117
117
|
|
|
118
118
|
const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
export let favicon = ""
|
|
4
4
|
|
|
5
5
|
export let clientLibPath
|
|
6
|
-
export let usedPlugins
|
|
7
6
|
</script>
|
|
8
7
|
|
|
9
8
|
<svelte:head>
|
|
@@ -84,15 +83,6 @@
|
|
|
84
83
|
</script>
|
|
85
84
|
<script type="application/javascript" src={clientLibPath}>
|
|
86
85
|
</script>
|
|
87
|
-
<!-- Custom components need inserted after the core client library -->
|
|
88
|
-
<!-- But before loadBudibase is called -->
|
|
89
|
-
{#if usedPlugins?.length}
|
|
90
|
-
{#each usedPlugins as plugin}
|
|
91
|
-
<script
|
|
92
|
-
type="application/javascript"
|
|
93
|
-
src={`/plugins/${plugin.jsUrl}`}></script>
|
|
94
|
-
{/each}
|
|
95
|
-
{/if}
|
|
96
86
|
<script type="application/javascript">
|
|
97
87
|
if (window.loadBudibase) {
|
|
98
88
|
window.loadBudibase()
|
|
@@ -66,9 +66,7 @@
|
|
|
66
66
|
customTheme,
|
|
67
67
|
previewDevice,
|
|
68
68
|
navigation,
|
|
69
|
-
hiddenComponentIds
|
|
70
|
-
usedPlugins,
|
|
71
|
-
location
|
|
69
|
+
hiddenComponentIds
|
|
72
70
|
} = parsed
|
|
73
71
|
|
|
74
72
|
// Set some flags so the app knows we're in the builder
|
|
@@ -83,8 +81,6 @@
|
|
|
83
81
|
window["##BUDIBASE_PREVIEW_DEVICE##"] = previewDevice
|
|
84
82
|
window["##BUDIBASE_PREVIEW_NAVIGATION##"] = navigation
|
|
85
83
|
window["##BUDIBASE_HIDDEN_COMPONENT_IDS##"] = hiddenComponentIds
|
|
86
|
-
window["##BUDIBASE_USED_PLUGINS##"] = usedPlugins
|
|
87
|
-
window["##BUDIBASE_LOCATION##"] = location
|
|
88
84
|
|
|
89
85
|
// Initialise app
|
|
90
86
|
try {
|
package/src/api/index.js
CHANGED
|
@@ -2,27 +2,16 @@ import Router from "@koa/router"
|
|
|
2
2
|
import * as controller from "../controllers/application"
|
|
3
3
|
import authorized from "../../middleware/authorized"
|
|
4
4
|
import { BUILDER } from "@budibase/backend-core/permissions"
|
|
5
|
-
import { applicationValidator } from "./utils/validators"
|
|
6
5
|
|
|
7
6
|
const router = new Router()
|
|
8
7
|
|
|
9
8
|
router
|
|
10
9
|
.post("/api/applications/:appId/sync", authorized(BUILDER), controller.sync)
|
|
11
|
-
.post(
|
|
12
|
-
"/api/applications",
|
|
13
|
-
authorized(BUILDER),
|
|
14
|
-
applicationValidator(),
|
|
15
|
-
controller.create
|
|
16
|
-
)
|
|
10
|
+
.post("/api/applications", authorized(BUILDER), controller.create)
|
|
17
11
|
.get("/api/applications/:appId/definition", controller.fetchAppDefinition)
|
|
18
12
|
.get("/api/applications", controller.fetch)
|
|
19
13
|
.get("/api/applications/:appId/appPackage", controller.fetchAppPackage)
|
|
20
|
-
.put(
|
|
21
|
-
"/api/applications/:appId",
|
|
22
|
-
authorized(BUILDER),
|
|
23
|
-
applicationValidator(),
|
|
24
|
-
controller.update
|
|
25
|
-
)
|
|
14
|
+
.put("/api/applications/:appId", authorized(BUILDER), controller.update)
|
|
26
15
|
.post(
|
|
27
16
|
"/api/applications/:appId/client/update",
|
|
28
17
|
authorized(BUILDER),
|