@budibase/server 1.0.123-alpha.0 → 1.0.123
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.68a7f4e3.css +6 -0
- package/builder/assets/index.8d4a5b33.js +1291 -0
- package/builder/assets/{vendor.5240f480.js → vendor.8e34a169.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +1763 -758
- package/coverage/coverage-final.json +43 -28
- package/coverage/lcov-report/api/controllers/analytics.js.html +3 -8
- package/coverage/lcov-report/api/controllers/apikeys.js.html +4 -9
- package/coverage/lcov-report/api/controllers/application.js.html +1436 -0
- package/coverage/lcov-report/api/controllers/auth.js.html +3 -8
- package/coverage/lcov-report/api/controllers/automation.js.html +3 -8
- package/coverage/lcov-report/api/controllers/backup.js.html +3 -8
- package/coverage/lcov-report/api/controllers/cloud.js.html +3 -8
- package/coverage/lcov-report/api/controllers/component.js.html +3 -8
- package/coverage/lcov-report/api/controllers/datasource.js.html +6 -11
- package/coverage/lcov-report/api/controllers/dev.js.html +3 -8
- package/coverage/lcov-report/api/controllers/index.html +26 -16
- package/coverage/lcov-report/api/controllers/integration.js.html +3 -8
- package/coverage/lcov-report/api/controllers/layout.js.html +3 -8
- package/coverage/lcov-report/api/controllers/metadata.js.html +3 -8
- package/coverage/lcov-report/api/controllers/migrations.js.html +3 -8
- package/coverage/lcov-report/api/controllers/permission.js.html +3 -8
- package/coverage/lcov-report/api/controllers/query/index.html +26 -16
- package/coverage/lcov-report/api/controllers/query/index.js.html +713 -0
- package/coverage/lcov-report/api/controllers/query/validation.js.html +3 -8
- package/coverage/lcov-report/api/controllers/role.js.html +5 -10
- package/coverage/lcov-report/api/controllers/routing.js.html +4 -9
- package/coverage/lcov-report/api/controllers/row/external.js.html +3 -8
- package/coverage/lcov-report/api/controllers/row/index.html +35 -25
- package/coverage/lcov-report/api/controllers/row/index.js.html +524 -0
- package/coverage/lcov-report/api/controllers/row/internal.js.html +24 -32
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +16 -21
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +19 -24
- package/coverage/lcov-report/api/controllers/row/utils.js.html +19 -33
- package/coverage/lcov-report/api/controllers/screen.js.html +4 -9
- package/coverage/lcov-report/api/controllers/script.js.html +3 -8
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +50 -55
- package/coverage/lcov-report/api/controllers/table/external.js.html +3 -8
- package/coverage/lcov-report/api/controllers/table/index.html +44 -19
- package/coverage/lcov-report/api/controllers/table/index.js.html +15 -20
- package/coverage/lcov-report/api/controllers/table/internal.js.html +620 -0
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1331 -0
- package/coverage/lcov-report/api/controllers/templates.js.html +3 -8
- package/coverage/lcov-report/api/controllers/user.js.html +3 -8
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +3 -8
- package/coverage/lcov-report/api/controllers/view/index.html +3 -8
- package/coverage/lcov-report/api/controllers/view/index.js.html +5 -10
- package/coverage/lcov-report/api/controllers/view/utils.js.html +3 -8
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -8
- package/coverage/lcov-report/api/controllers/webhook.js.html +5 -10
- package/coverage/lcov-report/api/index.html +13 -18
- package/coverage/lcov-report/api/index.js.html +8 -28
- package/coverage/lcov-report/api/routes/analytics.js.html +3 -8
- package/coverage/lcov-report/api/routes/apikeys.js.html +3 -8
- package/coverage/lcov-report/api/routes/application.js.html +179 -0
- package/coverage/lcov-report/api/routes/auth.js.html +3 -8
- package/coverage/lcov-report/api/routes/automation.js.html +3 -8
- package/coverage/lcov-report/api/routes/backup.js.html +3 -8
- package/coverage/lcov-report/api/routes/cloud.js.html +3 -8
- package/coverage/lcov-report/api/routes/component.js.html +3 -8
- package/coverage/lcov-report/api/routes/datasource.js.html +3 -8
- package/coverage/lcov-report/api/routes/deploy.js.html +3 -8
- package/coverage/lcov-report/api/routes/dev.js.html +4 -9
- package/coverage/lcov-report/api/routes/index.html +68 -13
- package/coverage/lcov-report/api/routes/index.js.html +266 -0
- package/coverage/lcov-report/api/routes/integration.js.html +3 -8
- package/coverage/lcov-report/api/routes/layout.js.html +3 -8
- package/coverage/lcov-report/api/routes/metadata.js.html +3 -8
- package/coverage/lcov-report/api/routes/migrations.js.html +3 -8
- package/coverage/lcov-report/api/routes/permission.js.html +3 -8
- package/coverage/lcov-report/api/routes/query.js.html +3 -8
- package/coverage/lcov-report/api/routes/role.js.html +3 -8
- package/coverage/lcov-report/api/routes/routing.js.html +3 -8
- package/coverage/lcov-report/api/routes/row.js.html +908 -0
- package/coverage/lcov-report/api/routes/screen.js.html +3 -8
- package/coverage/lcov-report/api/routes/script.js.html +3 -8
- package/coverage/lcov-report/{automations/steps/loop.js.html → api/routes/static.js.html} +80 -70
- package/coverage/lcov-report/api/routes/table.js.html +3 -8
- package/coverage/lcov-report/api/routes/templates.js.html +3 -8
- package/coverage/lcov-report/api/routes/user.js.html +3 -8
- package/coverage/lcov-report/api/routes/utils/index.html +3 -8
- package/coverage/lcov-report/api/routes/utils/validators.js.html +3 -8
- package/coverage/lcov-report/api/routes/view.js.html +3 -8
- package/coverage/lcov-report/api/routes/webhook.js.html +3 -8
- package/coverage/lcov-report/automations/actions.js.html +7 -21
- package/coverage/lcov-report/automations/automationUtils.js.html +23 -64
- package/coverage/lcov-report/automations/bullboard.js.html +3 -8
- package/coverage/lcov-report/automations/index.html +37 -27
- package/coverage/lcov-report/automations/index.js.html +3 -8
- package/coverage/lcov-report/automations/steps/bash.js.html +3 -8
- package/coverage/lcov-report/automations/steps/createRow.js.html +380 -0
- package/coverage/lcov-report/automations/steps/delay.js.html +3 -8
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +347 -0
- package/coverage/lcov-report/automations/steps/discord.js.html +3 -8
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +3 -8
- package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -8
- package/coverage/lcov-report/automations/steps/filter.js.html +3 -8
- package/coverage/lcov-report/automations/steps/index.html +41 -31
- package/coverage/lcov-report/automations/steps/integromat.js.html +3 -8
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +4 -9
- package/coverage/lcov-report/automations/steps/queryRows.js.html +4 -9
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +3 -8
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -8
- package/coverage/lcov-report/automations/steps/slack.js.html +3 -8
- package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -8
- package/coverage/lcov-report/automations/steps/utils.js.html +9 -14
- package/coverage/lcov-report/automations/steps/zapier.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/index.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +3 -8
- package/coverage/lcov-report/automations/triggers.js.html +11 -16
- package/coverage/lcov-report/automations/utils.js.html +665 -0
- package/coverage/lcov-report/block-navigation.js +0 -8
- package/coverage/lcov-report/constants/index.html +3 -8
- package/coverage/lcov-report/constants/index.js.html +42 -41
- package/coverage/lcov-report/constants/layouts.js.html +3 -8
- package/coverage/lcov-report/constants/screens.js.html +3 -8
- package/coverage/lcov-report/db/inMemoryView.js.html +3 -8
- package/coverage/lcov-report/db/index.html +3 -8
- package/coverage/lcov-report/db/index.js.html +4 -9
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +23 -25
- package/coverage/lcov-report/db/linkedRows/index.html +12 -17
- package/coverage/lcov-report/db/linkedRows/index.js.html +17 -22
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -12
- package/coverage/lcov-report/db/newid.js.html +6 -11
- package/coverage/lcov-report/db/utils.js.html +79 -84
- package/coverage/lcov-report/events/AutomationEmitter.js.html +9 -14
- package/coverage/lcov-report/events/index.html +3 -8
- package/coverage/lcov-report/events/index.js.html +4 -9
- package/coverage/lcov-report/events/utils.js.html +13 -18
- package/coverage/lcov-report/index.html +132 -137
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +3 -8
- package/coverage/lcov-report/integrations/tests/index.html +3 -8
- package/coverage/lcov-report/middleware/appInfo.js.html +3 -8
- package/coverage/lcov-report/middleware/authorized.js.html +458 -0
- package/coverage/lcov-report/middleware/builder.js.html +3 -8
- package/coverage/lcov-report/middleware/currentapp.js.html +15 -65
- package/coverage/lcov-report/middleware/index.html +50 -25
- package/coverage/lcov-report/middleware/joi-validator.js.html +4 -9
- package/coverage/lcov-report/middleware/publicApi.js.html +3 -8
- package/coverage/lcov-report/middleware/resourceId.js.html +3 -8
- package/coverage/lcov-report/middleware/selfhost.js.html +4 -9
- package/coverage/lcov-report/middleware/usageQuota.js.html +572 -0
- package/coverage/lcov-report/middleware/utils.js.html +3 -8
- package/coverage/lcov-report/sorter.js +0 -26
- package/coverage/lcov-report/threads/automation.js.html +90 -581
- package/coverage/lcov-report/threads/index.html +40 -30
- package/coverage/lcov-report/threads/index.js.html +296 -0
- package/coverage/lcov-report/threads/query.js.html +4 -9
- package/coverage/lcov-report/threads/utils.js.html +9 -17
- package/coverage/lcov-report/utilities/bcrypt.js.html +3 -8
- package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -8
- package/coverage/lcov-report/utilities/centralPath.js.html +3 -8
- package/coverage/lcov-report/utilities/csvParser.js.html +5 -10
- package/coverage/lcov-report/utilities/global.js.html +4 -9
- package/coverage/lcov-report/utilities/index.html +3 -8
- package/coverage/lcov-report/utilities/index.js.html +6 -11
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -32
- package/coverage/lcov-report/utilities/queue/index.html +7 -12
- package/coverage/lcov-report/utilities/routing/index.html +3 -8
- package/coverage/lcov-report/utilities/routing/index.js.html +3 -8
- package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -32
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +71 -67
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +106 -27
- package/coverage/lcov-report/utilities/scriptRunner.js.html +3 -8
- package/coverage/lcov-report/utilities/security.js.html +4 -9
- package/coverage/lcov-report/utilities/statusCodes.js.html +3 -8
- package/coverage/lcov-report/utilities/usageQuota/index.html +34 -24
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +39 -44
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +3 -8
- package/coverage/lcov-report/utilities/users.js.html +3 -8
- package/coverage/lcov-report/utilities/workerRequests.js.html +4 -9
- package/coverage/lcov.info +3061 -1290
- package/dist/api/controllers/application.js +73 -145
- package/dist/api/controllers/deploy/index.js +36 -68
- package/dist/api/controllers/public/applications.js +9 -29
- package/dist/api/controllers/public/queries.js +7 -27
- package/dist/api/controllers/public/rows.js +12 -32
- package/dist/api/controllers/public/tables.js +2 -2
- package/dist/api/controllers/public/users.js +8 -8
- package/dist/api/controllers/public/utils.js +1 -1
- package/dist/api/controllers/query/import/index.js +3 -3
- package/dist/api/controllers/query/index.js +44 -57
- package/dist/api/controllers/row/ExternalRequest.js +27 -27
- package/dist/api/controllers/row/index.js +60 -83
- package/dist/api/controllers/row/internal.js +1 -2
- package/dist/api/controllers/row/utils.js +1 -2
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -3
- package/dist/api/controllers/table/bulkFormula.js +1 -2
- package/dist/api/controllers/table/internal.js +55 -40
- package/dist/api/controllers/table/utils.js +229 -271
- package/dist/api/index.js +0 -5
- package/dist/api/routes/application.js +13 -39
- package/dist/api/routes/index.js +56 -61
- package/dist/api/routes/public/index.js +9 -6
- package/dist/api/routes/public/queries.js +1 -1
- package/dist/api/routes/public/rows.js +1 -1
- package/dist/api/routes/public/tables.js +3 -3
- package/dist/api/routes/public/users.js +1 -1
- package/dist/api/routes/row.js +17 -43
- package/dist/api/routes/static.js +13 -40
- package/dist/api/routes/tests/utilities/TestFunctions.js +33 -75
- package/dist/app.js +4 -8
- package/dist/automations/actions.js +0 -3
- package/dist/automations/automationUtils.js +0 -10
- package/dist/automations/steps/createRow.js +12 -12
- package/dist/automations/steps/deleteRow.js +16 -13
- package/dist/automations/tests/utilities/index.js +11 -13
- package/dist/automations/utils.js +133 -187
- package/dist/constants/index.js +7 -5
- package/dist/db/linkedRows/LinkController.js +1 -0
- package/dist/definitions/datasource.js +0 -1
- package/dist/environment.js +3 -2
- package/dist/index.js +0 -4
- package/dist/integrations/base/sql.js +2 -2
- package/dist/integrations/base/sqlTable.js +2 -2
- package/dist/integrations/googlesheets.js +1 -1
- package/dist/integrations/index.js +0 -4
- package/dist/integrations/microsoftSqlServer.js +8 -8
- package/dist/integrations/mysql.js +9 -9
- package/dist/integrations/oracle.js +7 -7
- package/dist/integrations/postgres.js +7 -7
- package/dist/integrations/queries/sql.js +2 -2
- package/dist/integrations/rest.js +1 -1
- package/dist/middleware/authorized.js +51 -51
- package/dist/middleware/currentapp.js +1 -15
- package/dist/middleware/usageQuota.js +154 -0
- package/dist/migrations/functions/appUrls.js +1 -1
- package/dist/migrations/functions/quotas1.js +2 -6
- package/dist/migrations/functions/usageQuotas/index.js +4 -0
- package/dist/migrations/functions/usageQuotas/syncApps.js +7 -4
- package/dist/migrations/functions/usageQuotas/syncRows.js +8 -5
- package/dist/migrations/index.js +1 -17
- package/dist/package.json +4 -10
- package/dist/threads/automation.js +27 -149
- package/dist/threads/index.js +10 -36
- package/dist/threads/utils.js +0 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utilities/queue/inMemoryQueue.js +1 -6
- package/dist/utilities/rowProcessor/index.js +11 -6
- package/dist/utilities/rowProcessor/utils.js +27 -1
- package/dist/utilities/usageQuota/index.js +86 -0
- package/nodemon.json +1 -1
- package/package.json +9 -15
- package/scripts/dev/manage.js +0 -2
- package/src/api/controllers/{application.ts → application.js} +51 -118
- package/src/api/controllers/deploy/{index.ts → index.js} +29 -53
- package/src/api/controllers/public/applications.ts +2 -2
- package/src/api/controllers/public/queries.ts +1 -1
- package/src/api/controllers/public/rows.ts +1 -1
- package/src/api/controllers/query/{index.ts → index.js} +48 -51
- package/src/api/controllers/row/ExternalRequest.ts +1 -1
- package/src/api/controllers/row/{index.ts → index.js} +17 -24
- package/src/api/controllers/row/internal.js +1 -2
- package/src/api/controllers/row/utils.js +1 -4
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -3
- package/src/api/controllers/table/bulkFormula.js +1 -1
- package/src/api/controllers/table/{internal.ts → internal.js} +48 -27
- package/src/api/controllers/table/{utils.ts → utils.js} +69 -86
- package/src/api/index.js +0 -5
- package/src/api/routes/{application.ts → application.js} +14 -8
- package/src/api/routes/index.js +62 -0
- package/src/api/routes/public/index.ts +4 -1
- package/src/api/routes/{row.ts → row.js} +15 -7
- package/src/api/routes/{static.ts → static.js} +11 -11
- package/src/api/routes/tests/misc.spec.js +37 -39
- package/src/api/routes/tests/routing.spec.js +0 -1
- package/src/api/routes/tests/utilities/{TestFunctions.ts → TestFunctions.js} +33 -57
- package/src/app.ts +2 -1
- package/src/automations/actions.js +0 -3
- package/src/automations/automationUtils.js +0 -12
- package/src/automations/steps/{createRow.ts → createRow.js} +15 -9
- package/src/automations/steps/{deleteRow.ts → deleteRow.js} +16 -10
- package/src/automations/tests/automation.spec.js +1 -0
- package/src/automations/tests/{createRow.spec.ts → createRow.spec.js} +15 -4
- package/src/automations/tests/{deleteRow.spec.ts → deleteRow.spec.js} +5 -3
- package/src/automations/tests/utilities/index.js +10 -12
- package/src/automations/{utils.ts → utils.js} +28 -39
- package/src/constants/index.js +8 -6
- package/src/db/linkedRows/LinkController.js +1 -0
- package/src/definitions/datasource.ts +0 -1
- package/src/environment.js +3 -2
- package/src/index.ts +0 -3
- package/src/integrations/index.ts +0 -4
- package/src/middleware/{authorized.ts → authorized.js} +14 -20
- package/src/middleware/currentapp.js +1 -16
- package/src/middleware/tests/usageQuota.spec.js +120 -0
- package/src/middleware/usageQuota.js +164 -0
- package/src/migrations/functions/tests/quotas1.spec.js +2 -0
- package/src/migrations/functions/usageQuotas/index.ts +5 -0
- package/src/migrations/functions/usageQuotas/syncApps.ts +6 -3
- package/src/migrations/functions/usageQuotas/syncRows.ts +6 -3
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +41 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +45 -0
- package/src/migrations/index.ts +1 -13
- package/src/threads/automation.js +34 -196
- package/src/threads/{index.ts → index.js} +14 -18
- package/src/threads/utils.js +0 -1
- package/src/utilities/queue/inMemoryQueue.js +1 -7
- package/src/utilities/rowProcessor/index.js +12 -9
- package/src/utilities/rowProcessor/utils.js +29 -1
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
- package/src/utilities/usageQuota/index.js +93 -0
- package/tsconfig.json +2 -2
- package/builder/assets/index.89795487.css +0 -6
- package/builder/assets/index.be9a1b80.js +0 -1299
- package/dist/automations/steps/loop.js +0 -51
- package/dist/integrations/redis.js +0 -158
- package/dist/migrations/functions/developerQuota.js +0 -49
- package/dist/migrations/functions/publishedAppsQuota.js +0 -47
- package/dist/migrations/functions/usageQuotas/syncDevelopers.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +0 -26
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/src/api/routes/index.ts +0 -60
- package/src/automations/steps/loop.js +0 -50
- package/src/integrations/redis.ts +0 -152
- package/src/integrations/tests/redis.spec.js +0 -60
- package/src/migrations/functions/developerQuota.ts +0 -15
- package/src/migrations/functions/publishedAppsQuota.ts +0 -13
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +0 -34
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +0 -40
- package/tsconfig.build.json +0 -10
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
const env = require("../../environment");
|
|
12
|
+
const { getGlobalDB, getTenantId } = require("@budibase/backend-core/tenancy");
|
|
13
|
+
const { StaticDatabases, generateNewUsageQuotaDoc, } = require("@budibase/backend-core/db");
|
|
14
|
+
exports.useQuotas = () => {
|
|
15
|
+
// check if quotas are enabled
|
|
16
|
+
if (env.USE_QUOTAS) {
|
|
17
|
+
// check if there are any tenants without limits
|
|
18
|
+
if (env.EXCLUDE_QUOTAS_TENANTS) {
|
|
19
|
+
const excludedTenants = env.EXCLUDE_QUOTAS_TENANTS.replace(/\s/g, "").split(",");
|
|
20
|
+
const tenantId = getTenantId();
|
|
21
|
+
if (excludedTenants.includes(tenantId)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
};
|
|
29
|
+
exports.Properties = {
|
|
30
|
+
ROW: "rows",
|
|
31
|
+
UPLOAD: "storage",
|
|
32
|
+
VIEW: "views",
|
|
33
|
+
USER: "users",
|
|
34
|
+
AUTOMATION: "automationRuns",
|
|
35
|
+
APPS: "apps",
|
|
36
|
+
EMAILS: "emails", // doesn't work yet
|
|
37
|
+
};
|
|
38
|
+
exports.getUsageQuotaDoc = (db) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
+
let quota;
|
|
40
|
+
try {
|
|
41
|
+
quota = yield db.get(StaticDatabases.GLOBAL.docs.usageQuota);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// doc doesn't exist. Create it
|
|
45
|
+
quota = generateNewUsageQuotaDoc();
|
|
46
|
+
const response = yield db.put(quota);
|
|
47
|
+
quota._rev = response.rev;
|
|
48
|
+
}
|
|
49
|
+
return quota;
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* Given a specified tenantId this will add to the usage object for the specified property.
|
|
53
|
+
* @param {string} property The property which is to be added to (within the nested usageQuota object).
|
|
54
|
+
* @param {number} usage The amount (this can be negative) to adjust the number by.
|
|
55
|
+
* @param {object} opts optional - options such as dryRun, to check what update will do.
|
|
56
|
+
* @returns {Promise<void>} When this completes the API key will now be up to date - the quota period may have
|
|
57
|
+
* also been reset after this call.
|
|
58
|
+
*/
|
|
59
|
+
exports.update = (property, usage, opts = { dryRun: false }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
+
if (!exports.useQuotas()) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const db = getGlobalDB();
|
|
65
|
+
const quota = yield exports.getUsageQuotaDoc(db);
|
|
66
|
+
// increment the quota
|
|
67
|
+
quota.usageQuota[property] += usage;
|
|
68
|
+
if (quota.usageQuota[property] > quota.usageLimits[property] &&
|
|
69
|
+
usage > 0 // allow for decrementing usage when the quota is already exceeded
|
|
70
|
+
) {
|
|
71
|
+
throw new Error(`You have exceeded your usage quota of ${quota.usageLimits[property]} ${property}.`);
|
|
72
|
+
}
|
|
73
|
+
if (quota.usageQuota[property] < 0) {
|
|
74
|
+
// never go negative if the quota has previously been exceeded
|
|
75
|
+
quota.usageQuota[property] = 0;
|
|
76
|
+
}
|
|
77
|
+
// update the usage quotas
|
|
78
|
+
if (!opts.dryRun) {
|
|
79
|
+
yield db.put(quota);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error(`Error updating usage quotas for ${property}`, err);
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
});
|
package/nodemon.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.123
|
|
4
|
+
"version": "1.0.123",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"url": "https://github.com/Budibase/budibase.git"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"build": "rimraf dist/ && tsc
|
|
12
|
+
"build": "rimraf dist/ && tsc && mv dist/src/* dist/ && rmdir dist/src/ && yarn postbuild",
|
|
13
13
|
"postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
|
|
14
14
|
"test": "jest --coverage --maxWorkers=2",
|
|
15
15
|
"test:watch": "jest --watch",
|
|
@@ -68,19 +68,16 @@
|
|
|
68
68
|
"license": "GPL-3.0",
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
71
|
-
"@budibase/backend-core": "^1.0.123
|
|
72
|
-
"@budibase/client": "^1.0.123
|
|
73
|
-
"@budibase/
|
|
74
|
-
"@budibase/string-templates": "^1.0.123-alpha.0",
|
|
71
|
+
"@budibase/backend-core": "^1.0.123",
|
|
72
|
+
"@budibase/client": "^1.0.123",
|
|
73
|
+
"@budibase/string-templates": "^1.0.123",
|
|
75
74
|
"@bull-board/api": "^3.7.0",
|
|
76
75
|
"@bull-board/koa": "^3.7.0",
|
|
77
76
|
"@elastic/elasticsearch": "7.10.0",
|
|
78
77
|
"@google-cloud/firestore": "^5.0.2",
|
|
79
78
|
"@koa/router": "8.0.0",
|
|
80
79
|
"@sendgrid/mail": "7.1.1",
|
|
81
|
-
"@sentry/node": "6.
|
|
82
|
-
"@types/global-agent": "^2.1.1",
|
|
83
|
-
"@types/koa__router": "^8.0.11",
|
|
80
|
+
"@sentry/node": "^6.0.0",
|
|
84
81
|
"airtable": "0.10.1",
|
|
85
82
|
"arangojs": "7.2.0",
|
|
86
83
|
"aws-sdk": "^2.767.0",
|
|
@@ -94,7 +91,6 @@
|
|
|
94
91
|
"fix-path": "3.0.0",
|
|
95
92
|
"form-data": "^4.0.0",
|
|
96
93
|
"fs-extra": "8.1.0",
|
|
97
|
-
"global-agent": "^3.0.0",
|
|
98
94
|
"google-auth-library": "^7.11.0",
|
|
99
95
|
"google-spreadsheet": "^3.2.0",
|
|
100
96
|
"jimp": "0.16.1",
|
|
@@ -147,20 +143,18 @@
|
|
|
147
143
|
"@types/apidoc": "^0.50.0",
|
|
148
144
|
"@types/bull": "^3.15.1",
|
|
149
145
|
"@types/google-spreadsheet": "^3.1.5",
|
|
150
|
-
"@types/jest": "^
|
|
146
|
+
"@types/jest": "^26.0.23",
|
|
151
147
|
"@types/koa": "^2.13.3",
|
|
152
148
|
"@types/koa-router": "^7.4.2",
|
|
153
149
|
"@types/lodash": "4.14.180",
|
|
154
150
|
"@types/node": "^15.12.4",
|
|
155
151
|
"@types/oracledb": "^5.2.1",
|
|
156
152
|
"@types/redis": "^4.0.11",
|
|
157
|
-
"@typescript-eslint/parser": "5.12.0",
|
|
158
153
|
"apidoc": "^0.50.2",
|
|
159
154
|
"babel-jest": "^27.0.2",
|
|
160
155
|
"copyfiles": "^2.4.1",
|
|
161
156
|
"docker-compose": "^0.23.6",
|
|
162
157
|
"eslint": "^6.8.0",
|
|
163
|
-
"ioredis-mock": "^7.2.0",
|
|
164
158
|
"is-wsl": "^2.2.0",
|
|
165
159
|
"jest": "^27.0.5",
|
|
166
160
|
"jest-openapi": "^0.14.2",
|
|
@@ -174,11 +168,11 @@
|
|
|
174
168
|
"swagger-jsdoc": "^6.1.0",
|
|
175
169
|
"ts-jest": "^27.0.3",
|
|
176
170
|
"ts-node": "^10.0.0",
|
|
177
|
-
"typescript": "^4.
|
|
171
|
+
"typescript": "^4.3.5",
|
|
178
172
|
"update-dotenv": "^1.1.1"
|
|
179
173
|
},
|
|
180
174
|
"optionalDependencies": {
|
|
181
175
|
"oracledb": "^5.3.0"
|
|
182
176
|
},
|
|
183
|
-
"gitHead": "
|
|
177
|
+
"gitHead": "db99c31b53d0dbbb788335126e45d1cc2f39fbf0"
|
|
184
178
|
}
|
package/scripts/dev/manage.js
CHANGED
|
@@ -42,8 +42,6 @@ async function init() {
|
|
|
42
42
|
REDIS_URL: "localhost:6379",
|
|
43
43
|
WORKER_URL: "http://localhost:4002",
|
|
44
44
|
INTERNAL_API_KEY: "budibase",
|
|
45
|
-
ACCOUNT_PORTAL_URL: "http://localhost:10001",
|
|
46
|
-
ACCOUNT_PORTAL_API_KEY: "budibase",
|
|
47
45
|
JWT_SECRET: "testsecret",
|
|
48
46
|
REDIS_PASSWORD: "budibase",
|
|
49
47
|
MINIO_ACCESS_KEY: "budibase",
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const env = require("../../environment")
|
|
2
|
+
const packageJson = require("../../../package.json")
|
|
3
|
+
const {
|
|
4
4
|
createLinkView,
|
|
5
5
|
createRoutingView,
|
|
6
6
|
createAllSearchIndex,
|
|
7
|
-
}
|
|
8
|
-
|
|
7
|
+
} = require("../../db/views/staticViews")
|
|
8
|
+
const {
|
|
9
9
|
getTemplateStream,
|
|
10
10
|
createApp,
|
|
11
11
|
deleteApp,
|
|
12
|
-
}
|
|
13
|
-
|
|
12
|
+
} = require("../../utilities/fileSystem")
|
|
13
|
+
const {
|
|
14
14
|
generateAppID,
|
|
15
15
|
getLayoutParams,
|
|
16
16
|
getScreenParams,
|
|
17
17
|
generateDevAppID,
|
|
18
18
|
DocumentTypes,
|
|
19
19
|
AppStatus,
|
|
20
|
-
}
|
|
20
|
+
} = require("../../db/utils")
|
|
21
21
|
const {
|
|
22
22
|
BUILTIN_ROLE_IDS,
|
|
23
23
|
AccessController,
|
|
24
24
|
} = require("@budibase/backend-core/roles")
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const { BASE_LAYOUTS } = require("../../constants/layouts")
|
|
26
|
+
const { cloneDeep } = require("lodash/fp")
|
|
27
27
|
const { processObject } = require("@budibase/string-templates")
|
|
28
28
|
const {
|
|
29
29
|
getAllApps,
|
|
@@ -31,27 +31,24 @@ const {
|
|
|
31
31
|
getProdAppID,
|
|
32
32
|
Replication,
|
|
33
33
|
} = require("@budibase/backend-core/db")
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
const { USERS_TABLE_SCHEMA } = require("../../constants")
|
|
35
|
+
const { removeAppFromUserRoles } = require("../../utilities/workerRequests")
|
|
36
|
+
const { clientLibraryPath, stringToReadStream } = require("../../utilities")
|
|
37
|
+
const { getAllLocks } = require("../../utilities/redis")
|
|
38
|
+
const {
|
|
39
39
|
updateClientLibrary,
|
|
40
40
|
backupClientLibrary,
|
|
41
41
|
revertClientLibrary,
|
|
42
|
-
}
|
|
42
|
+
} = require("../../utilities/fileSystem/clientLibrary")
|
|
43
43
|
const { getTenantId, isMultiTenant } = require("@budibase/backend-core/tenancy")
|
|
44
|
-
|
|
44
|
+
const { syncGlobalUsers } = require("./user")
|
|
45
45
|
const { app: appCache } = require("@budibase/backend-core/cache")
|
|
46
|
-
|
|
46
|
+
const { cleanupAutomations } = require("../../automations/utils")
|
|
47
47
|
const {
|
|
48
48
|
getAppDB,
|
|
49
49
|
getProdAppDB,
|
|
50
50
|
updateAppId,
|
|
51
51
|
} = require("@budibase/backend-core/context")
|
|
52
|
-
import { getUniqueRows } from "../../utilities/usageQuota/rows"
|
|
53
|
-
import { quotas } from "@budibase/pro"
|
|
54
|
-
import { errors } from "@budibase/backend-core"
|
|
55
52
|
|
|
56
53
|
const URL_REGEX_SLASH = /\/|\\/g
|
|
57
54
|
|
|
@@ -64,7 +61,7 @@ async function getLayouts() {
|
|
|
64
61
|
include_docs: true,
|
|
65
62
|
})
|
|
66
63
|
)
|
|
67
|
-
).rows.map(
|
|
64
|
+
).rows.map(row => row.doc)
|
|
68
65
|
}
|
|
69
66
|
|
|
70
67
|
async function getScreens() {
|
|
@@ -75,16 +72,16 @@ async function getScreens() {
|
|
|
75
72
|
include_docs: true,
|
|
76
73
|
})
|
|
77
74
|
)
|
|
78
|
-
).rows.map(
|
|
75
|
+
).rows.map(row => row.doc)
|
|
79
76
|
}
|
|
80
77
|
|
|
81
|
-
function getUserRoleId(ctx
|
|
78
|
+
function getUserRoleId(ctx) {
|
|
82
79
|
return !ctx.user.role || !ctx.user.role._id
|
|
83
80
|
? BUILTIN_ROLE_IDS.PUBLIC
|
|
84
81
|
: ctx.user.role._id
|
|
85
82
|
}
|
|
86
83
|
|
|
87
|
-
|
|
84
|
+
exports.getAppUrl = ctx => {
|
|
88
85
|
// construct the url
|
|
89
86
|
let url
|
|
90
87
|
if (ctx.request.body.url) {
|
|
@@ -100,34 +97,29 @@ export const getAppUrl = (ctx: any) => {
|
|
|
100
97
|
return url
|
|
101
98
|
}
|
|
102
99
|
|
|
103
|
-
const checkAppUrl = (ctx
|
|
100
|
+
const checkAppUrl = (ctx, apps, url, currentAppId) => {
|
|
104
101
|
if (currentAppId) {
|
|
105
|
-
apps = apps.filter(
|
|
102
|
+
apps = apps.filter(app => app.appId !== currentAppId)
|
|
106
103
|
}
|
|
107
|
-
if (apps.some(
|
|
104
|
+
if (apps.some(app => app.url === url)) {
|
|
108
105
|
ctx.throw(400, "App URL is already in use.")
|
|
109
106
|
}
|
|
110
107
|
}
|
|
111
108
|
|
|
112
|
-
const checkAppName = (
|
|
113
|
-
ctx: any,
|
|
114
|
-
apps: any,
|
|
115
|
-
name: any,
|
|
116
|
-
currentAppId?: string
|
|
117
|
-
) => {
|
|
109
|
+
const checkAppName = (ctx, apps, name, currentAppId) => {
|
|
118
110
|
// TODO: Replace with Joi
|
|
119
111
|
if (!name) {
|
|
120
112
|
ctx.throw(400, "Name is required")
|
|
121
113
|
}
|
|
122
114
|
if (currentAppId) {
|
|
123
|
-
apps = apps.filter(
|
|
115
|
+
apps = apps.filter(app => app.appId !== currentAppId)
|
|
124
116
|
}
|
|
125
|
-
if (apps.some(
|
|
117
|
+
if (apps.some(app => app.name === name)) {
|
|
126
118
|
ctx.throw(400, "App name is already in use.")
|
|
127
119
|
}
|
|
128
120
|
}
|
|
129
121
|
|
|
130
|
-
async function createInstance(template
|
|
122
|
+
async function createInstance(template) {
|
|
131
123
|
const tenantId = isMultiTenant() ? getTenantId() : null
|
|
132
124
|
const baseAppId = generateAppID(tenantId)
|
|
133
125
|
const appId = generateDevAppID(baseAppId)
|
|
@@ -168,7 +160,7 @@ async function createInstance(template: any) {
|
|
|
168
160
|
return { _id: appId }
|
|
169
161
|
}
|
|
170
162
|
|
|
171
|
-
|
|
163
|
+
exports.fetch = async ctx => {
|
|
172
164
|
const dev = ctx.query && ctx.query.status === AppStatus.DEV
|
|
173
165
|
const all = ctx.query && ctx.query.status === AppStatus.ALL
|
|
174
166
|
const apps = await getAllApps({ dev, all })
|
|
@@ -180,7 +172,7 @@ export const fetch = async (ctx: any) => {
|
|
|
180
172
|
if (app.status !== "development") {
|
|
181
173
|
continue
|
|
182
174
|
}
|
|
183
|
-
const lock = locks.find(
|
|
175
|
+
const lock = locks.find(lock => lock.appId === app.appId)
|
|
184
176
|
if (lock) {
|
|
185
177
|
app.lockedBy = lock.user
|
|
186
178
|
} else {
|
|
@@ -193,7 +185,7 @@ export const fetch = async (ctx: any) => {
|
|
|
193
185
|
ctx.body = apps
|
|
194
186
|
}
|
|
195
187
|
|
|
196
|
-
|
|
188
|
+
exports.fetchAppDefinition = async ctx => {
|
|
197
189
|
const layouts = await getLayouts()
|
|
198
190
|
const userRoleId = getUserRoleId(ctx)
|
|
199
191
|
const accessController = new AccessController()
|
|
@@ -208,7 +200,7 @@ export const fetchAppDefinition = async (ctx: any) => {
|
|
|
208
200
|
}
|
|
209
201
|
}
|
|
210
202
|
|
|
211
|
-
|
|
203
|
+
exports.fetchAppPackage = async ctx => {
|
|
212
204
|
const db = getAppDB()
|
|
213
205
|
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
214
206
|
const layouts = await getLayouts()
|
|
@@ -229,7 +221,7 @@ export const fetchAppPackage = async (ctx: any) => {
|
|
|
229
221
|
}
|
|
230
222
|
}
|
|
231
223
|
|
|
232
|
-
|
|
224
|
+
exports.create = async ctx => {
|
|
233
225
|
const apps = await getAllApps({ dev: true })
|
|
234
226
|
const name = ctx.request.body.name
|
|
235
227
|
checkAppName(ctx, apps, name)
|
|
@@ -237,7 +229,7 @@ const performAppCreate = async (ctx: any) => {
|
|
|
237
229
|
checkAppUrl(ctx, apps, url)
|
|
238
230
|
|
|
239
231
|
const { useTemplate, templateKey, templateString } = ctx.request.body
|
|
240
|
-
const instanceConfig
|
|
232
|
+
const instanceConfig = {
|
|
241
233
|
useTemplate,
|
|
242
234
|
key: templateKey,
|
|
243
235
|
templateString,
|
|
@@ -288,41 +280,13 @@ const performAppCreate = async (ctx: any) => {
|
|
|
288
280
|
}
|
|
289
281
|
|
|
290
282
|
await appCache.invalidateAppMetadata(appId, newApplication)
|
|
291
|
-
return newApplication
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
const appPostCreate = async (ctx: any, appId: string) => {
|
|
295
|
-
// app import & template creation
|
|
296
|
-
if (ctx.request.body.useTemplate === "true") {
|
|
297
|
-
const rows = await getUniqueRows([appId])
|
|
298
|
-
const rowCount = rows ? rows.length : 0
|
|
299
|
-
if (rowCount) {
|
|
300
|
-
try {
|
|
301
|
-
await quotas.addRows(rowCount)
|
|
302
|
-
} catch (err: any) {
|
|
303
|
-
if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {
|
|
304
|
-
// this import resulted in row usage exceeding the quota
|
|
305
|
-
// delete the app
|
|
306
|
-
// skip pre and post steps as no rows have been added to quotas yet
|
|
307
|
-
ctx.params.appId = appId
|
|
308
|
-
await destroyApp(ctx)
|
|
309
|
-
}
|
|
310
|
-
throw err
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
export const create = async (ctx: any) => {
|
|
317
|
-
const newApplication = await quotas.addApp(() => performAppCreate(ctx))
|
|
318
|
-
await appPostCreate(ctx, newApplication.appId)
|
|
319
|
-
ctx.body = newApplication
|
|
320
283
|
ctx.status = 200
|
|
284
|
+
ctx.body = newApplication
|
|
321
285
|
}
|
|
322
286
|
|
|
323
287
|
// This endpoint currently operates as a PATCH rather than a PUT
|
|
324
288
|
// Thus name and url fields are handled only if present
|
|
325
|
-
|
|
289
|
+
exports.update = async ctx => {
|
|
326
290
|
const apps = await getAllApps({ dev: true })
|
|
327
291
|
// validation
|
|
328
292
|
const name = ctx.request.body.name
|
|
@@ -340,7 +304,7 @@ export const update = async (ctx: any) => {
|
|
|
340
304
|
ctx.body = data
|
|
341
305
|
}
|
|
342
306
|
|
|
343
|
-
|
|
307
|
+
exports.updateClient = async ctx => {
|
|
344
308
|
// Get current app version
|
|
345
309
|
const db = getAppDB()
|
|
346
310
|
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
@@ -362,7 +326,7 @@ export const updateClient = async (ctx: any) => {
|
|
|
362
326
|
ctx.body = data
|
|
363
327
|
}
|
|
364
328
|
|
|
365
|
-
|
|
329
|
+
exports.revertClient = async ctx => {
|
|
366
330
|
// Check app can be reverted
|
|
367
331
|
const db = getAppDB()
|
|
368
332
|
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
@@ -385,57 +349,26 @@ export const revertClient = async (ctx: any) => {
|
|
|
385
349
|
ctx.body = data
|
|
386
350
|
}
|
|
387
351
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
let isUnpublish = ctx.query && ctx.query.unpublish
|
|
391
|
-
|
|
392
|
-
if (isUnpublish) {
|
|
393
|
-
appId = getProdAppID(appId)
|
|
394
|
-
}
|
|
352
|
+
exports.delete = async ctx => {
|
|
353
|
+
const db = getAppDB()
|
|
395
354
|
|
|
396
|
-
const db = isUnpublish ? getProdAppDB() : getAppDB()
|
|
397
355
|
const result = await db.destroy()
|
|
398
|
-
|
|
399
|
-
if (isUnpublish) {
|
|
400
|
-
await quotas.removePublishedApp()
|
|
401
|
-
} else {
|
|
402
|
-
await quotas.removeApp()
|
|
403
|
-
}
|
|
404
|
-
|
|
405
356
|
/* istanbul ignore next */
|
|
406
|
-
if (!env.isTest() && !
|
|
407
|
-
await deleteApp(appId)
|
|
357
|
+
if (!env.isTest() && !ctx.query.unpublish) {
|
|
358
|
+
await deleteApp(ctx.params.appId)
|
|
408
359
|
}
|
|
409
|
-
if (
|
|
410
|
-
await cleanupAutomations(appId)
|
|
360
|
+
if (ctx.query && ctx.query.unpublish) {
|
|
361
|
+
await cleanupAutomations(ctx.params.appId)
|
|
411
362
|
}
|
|
412
363
|
// make sure the app/role doesn't stick around after the app has been deleted
|
|
413
|
-
await removeAppFromUserRoles(ctx, appId)
|
|
414
|
-
await appCache.invalidateAppMetadata(appId)
|
|
415
|
-
return result
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
const preDestroyApp = async (ctx: any) => {
|
|
419
|
-
const rows = await getUniqueRows([ctx.params.appId])
|
|
420
|
-
ctx.rowCount = rows.length
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
const postDestroyApp = async (ctx: any) => {
|
|
424
|
-
const rowCount = ctx.rowCount
|
|
425
|
-
if (rowCount) {
|
|
426
|
-
await quotas.removeRows(rowCount)
|
|
427
|
-
}
|
|
428
|
-
}
|
|
364
|
+
await removeAppFromUserRoles(ctx, ctx.params.appId)
|
|
365
|
+
await appCache.invalidateAppMetadata(ctx.params.appId)
|
|
429
366
|
|
|
430
|
-
export const destroy = async (ctx: any) => {
|
|
431
|
-
await preDestroyApp(ctx)
|
|
432
|
-
const result = await destroyApp(ctx)
|
|
433
|
-
await postDestroyApp(ctx)
|
|
434
367
|
ctx.status = 200
|
|
435
368
|
ctx.body = result
|
|
436
369
|
}
|
|
437
370
|
|
|
438
|
-
|
|
371
|
+
exports.sync = async (ctx, next) => {
|
|
439
372
|
const appId = ctx.params.appId
|
|
440
373
|
if (!isDevAppID(appId)) {
|
|
441
374
|
ctx.throw(400, "This action cannot be performed for production apps")
|
|
@@ -465,7 +398,7 @@ export const sync = async (ctx: any, next: any) => {
|
|
|
465
398
|
let error
|
|
466
399
|
try {
|
|
467
400
|
await replication.replicate({
|
|
468
|
-
filter: function (doc
|
|
401
|
+
filter: function (doc) {
|
|
469
402
|
return doc._id !== DocumentTypes.APP_METADATA
|
|
470
403
|
},
|
|
471
404
|
})
|
|
@@ -487,7 +420,7 @@ export const sync = async (ctx: any, next: any) => {
|
|
|
487
420
|
}
|
|
488
421
|
}
|
|
489
422
|
|
|
490
|
-
const updateAppPackage = async (appPackage
|
|
423
|
+
const updateAppPackage = async (appPackage, appId) => {
|
|
491
424
|
const db = getAppDB()
|
|
492
425
|
const application = await db.get(DocumentTypes.APP_METADATA)
|
|
493
426
|
|
|
@@ -506,7 +439,7 @@ const updateAppPackage = async (appPackage: any, appId: any) => {
|
|
|
506
439
|
return response
|
|
507
440
|
}
|
|
508
441
|
|
|
509
|
-
const createEmptyAppPackage = async (ctx
|
|
442
|
+
const createEmptyAppPackage = async (ctx, app) => {
|
|
510
443
|
const db = getAppDB()
|
|
511
444
|
|
|
512
445
|
let screensAndLayouts = []
|