@budibase/server 2.6.19-alpha.2 → 2.6.19-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/.dockerignore +7 -6
- package/Dockerfile +16 -8
- package/builder/assets/{index.6c1171e2.js → index.47cc7efc.js} +343 -334
- package/builder/assets/{index.07382a47.css → index.ffb6a106.css} +2 -2
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32364 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +44582 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24345 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +30 -13
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +16 -0
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/datasource.ts +5 -0
- package/src/api/routes/static.ts +3 -1
- package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
- package/src/api/routes/tests/datasource.spec.ts +1 -1
- package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/automations/actions.ts +8 -0
- package/src/automations/steps/bash.ts +4 -0
- package/src/automations/steps/collect.ts +58 -0
- package/src/automations/steps/createRow.ts +4 -0
- package/src/automations/steps/delay.ts +1 -0
- package/src/automations/steps/deleteRow.ts +4 -0
- package/src/automations/steps/discord.ts +4 -0
- package/src/automations/steps/executeQuery.ts +4 -0
- package/src/automations/steps/executeScript.ts +4 -0
- package/src/automations/steps/filter.ts +1 -0
- package/src/automations/steps/loop.ts +1 -0
- package/src/automations/steps/make.ts +4 -0
- package/src/automations/steps/openai.ts +106 -0
- package/src/automations/steps/outgoingWebhook.ts +4 -0
- package/src/automations/steps/queryRows.ts +4 -0
- package/src/automations/steps/sendSmtpEmail.ts +4 -0
- package/src/automations/steps/serverLog.ts +4 -0
- package/src/automations/steps/slack.ts +4 -0
- package/src/automations/steps/updateRow.ts +4 -0
- package/src/automations/steps/zapier.ts +4 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/inMemoryView.ts +1 -0
- package/src/environment.ts +2 -0
- package/src/integration-test/postgres.spec.ts +47 -4
- package/src/integrations/airtable.ts +3 -1
- package/src/integrations/arangodb.ts +3 -1
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +3 -1
- package/src/integrations/dynamodb.ts +3 -1
- package/src/integrations/elasticsearch.ts +3 -1
- package/src/integrations/firebase.ts +3 -1
- package/src/integrations/googlesheets.ts +11 -3
- package/src/integrations/microsoftSqlServer.ts +18 -2
- package/src/integrations/mongodb.ts +3 -1
- package/src/integrations/mysql.ts +27 -11
- package/src/integrations/oracle.ts +11 -1
- package/src/integrations/postgres.ts +27 -10
- package/src/integrations/redis.ts +3 -1
- package/src/integrations/s3.ts +3 -1
- package/src/integrations/snowflake.ts +3 -1
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +39 -0
- package/src/utilities/fileSystem/app.ts +1 -1
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- package/dist/api/controllers/analytics.js +0 -46
- package/dist/api/controllers/apikeys.js +0 -72
- package/dist/api/controllers/application.js +0 -574
- package/dist/api/controllers/auth.js +0 -80
- package/dist/api/controllers/automation.js +0 -303
- package/dist/api/controllers/backup.js +0 -37
- package/dist/api/controllers/component.js +0 -59
- package/dist/api/controllers/datasource.js +0 -337
- package/dist/api/controllers/deploy/Deployment.js +0 -53
- package/dist/api/controllers/deploy/index.js +0 -198
- package/dist/api/controllers/dev.js +0 -146
- package/dist/api/controllers/integration.js +0 -28
- package/dist/api/controllers/layout.js +0 -49
- package/dist/api/controllers/metadata.js +0 -63
- package/dist/api/controllers/migrations.js +0 -29
- package/dist/api/controllers/ops.js +0 -40
- package/dist/api/controllers/permission.js +0 -162
- package/dist/api/controllers/plugin/file.js +0 -24
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -112
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/url.js +0 -24
- package/dist/api/controllers/plugin/utils.js +0 -27
- package/dist/api/controllers/public/applications.js +0 -146
- package/dist/api/controllers/public/mapping/applications.js +0 -29
- package/dist/api/controllers/public/mapping/index.js +0 -11
- package/dist/api/controllers/public/mapping/queries.js +0 -36
- package/dist/api/controllers/public/mapping/rows.js +0 -24
- package/dist/api/controllers/public/mapping/tables.js +0 -23
- package/dist/api/controllers/public/mapping/types.js +0 -2
- package/dist/api/controllers/public/mapping/users.js +0 -29
- package/dist/api/controllers/public/metrics.js +0 -113
- package/dist/api/controllers/public/queries.js +0 -58
- package/dist/api/controllers/public/rows.js +0 -120
- package/dist/api/controllers/public/tables.js +0 -95
- package/dist/api/controllers/public/users.js +0 -93
- package/dist/api/controllers/public/utils.js +0 -56
- package/dist/api/controllers/query/import/index.js +0 -87
- package/dist/api/controllers/query/import/sources/base/index.js +0 -75
- package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
- package/dist/api/controllers/query/import/sources/curl.js +0 -99
- package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
- package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/dist/api/controllers/query/index.js +0 -299
- package/dist/api/controllers/query/validation.js +0 -53
- package/dist/api/controllers/role.js +0 -109
- package/dist/api/controllers/routing.js +0 -105
- package/dist/api/controllers/row/ExternalRequest.js +0 -683
- package/dist/api/controllers/row/external.js +0 -339
- package/dist/api/controllers/row/index.js +0 -203
- package/dist/api/controllers/row/internal.js +0 -509
- package/dist/api/controllers/row/internalSearch.js +0 -28
- package/dist/api/controllers/row/staticFormula.js +0 -165
- package/dist/api/controllers/row/utils.js +0 -183
- package/dist/api/controllers/screen.js +0 -110
- package/dist/api/controllers/script.js +0 -30
- package/dist/api/controllers/static/index.js +0 -268
- package/dist/api/controllers/table/bulkFormula.js +0 -173
- package/dist/api/controllers/table/external.js +0 -279
- package/dist/api/controllers/table/index.js +0 -179
- package/dist/api/controllers/table/internal.js +0 -197
- package/dist/api/controllers/table/utils.js +0 -379
- package/dist/api/controllers/templates.js +0 -56
- package/dist/api/controllers/user.js +0 -124
- package/dist/api/controllers/view/exporters.js +0 -46
- package/dist/api/controllers/view/index.js +0 -193
- package/dist/api/controllers/view/utils.js +0 -177
- package/dist/api/controllers/view/viewBuilder.js +0 -158
- package/dist/api/controllers/webhook.js +0 -134
- package/dist/api/index.js +0 -55
- package/dist/api/routes/analytics.js +0 -34
- package/dist/api/routes/apikeys.js +0 -37
- package/dist/api/routes/application.js +0 -48
- package/dist/api/routes/auth.js +0 -33
- package/dist/api/routes/automation.js +0 -50
- package/dist/api/routes/backup.js +0 -35
- package/dist/api/routes/component.js +0 -35
- package/dist/api/routes/datasource.js +0 -44
- package/dist/api/routes/deploy.js +0 -37
- package/dist/api/routes/dev.js +0 -49
- package/dist/api/routes/index.js +0 -75
- package/dist/api/routes/integration.js +0 -37
- package/dist/api/routes/layout.js +0 -37
- package/dist/api/routes/metadata.js +0 -40
- package/dist/api/routes/migrations.js +0 -36
- package/dist/api/routes/ops.js +0 -52
- package/dist/api/routes/permission.js +0 -44
- package/dist/api/routes/plugin.js +0 -39
- package/dist/api/routes/public/applications.js +0 -174
- package/dist/api/routes/public/index.js +0 -140
- package/dist/api/routes/public/metrics.js +0 -30
- package/dist/api/routes/public/middleware/mapper.js +0 -97
- package/dist/api/routes/public/queries.js +0 -72
- package/dist/api/routes/public/rows.js +0 -158
- package/dist/api/routes/public/tables.js +0 -152
- package/dist/api/routes/public/users.js +0 -135
- package/dist/api/routes/public/utils/Endpoint.js +0 -36
- package/dist/api/routes/query.js +0 -47
- package/dist/api/routes/role.js +0 -40
- package/dist/api/routes/routing.js +0 -39
- package/dist/api/routes/row.js +0 -239
- package/dist/api/routes/screen.js +0 -39
- package/dist/api/routes/script.js +0 -35
- package/dist/api/routes/static.js +0 -80
- package/dist/api/routes/table.js +0 -163
- package/dist/api/routes/templates.js +0 -37
- package/dist/api/routes/user.js +0 -43
- package/dist/api/routes/utils/validators.js +0 -238
- package/dist/api/routes/view.js +0 -42
- package/dist/api/routes/webhook.js +0 -43
- package/dist/app.js +0 -132
- package/dist/automations/actions.js +0 -137
- package/dist/automations/automationUtils.js +0 -173
- package/dist/automations/bullboard.js +0 -71
- package/dist/automations/index.js +0 -43
- package/dist/automations/logging/index.js +0 -53
- package/dist/automations/steps/bash.js +0 -111
- package/dist/automations/steps/createRow.js +0 -108
- package/dist/automations/steps/delay.js +0 -53
- package/dist/automations/steps/deleteRow.js +0 -96
- package/dist/automations/steps/discord.js +0 -116
- package/dist/automations/steps/executeQuery.js +0 -134
- package/dist/automations/steps/executeScript.js +0 -106
- package/dist/automations/steps/filter.js +0 -112
- package/dist/automations/steps/loop.js +0 -54
- package/dist/automations/steps/make.js +0 -134
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -216
- package/dist/automations/steps/sendSmtpEmail.js +0 -115
- package/dist/automations/steps/serverLog.js +0 -65
- package/dist/automations/steps/slack.js +0 -98
- package/dist/automations/steps/updateRow.js +0 -144
- package/dist/automations/steps/utils.js +0 -56
- package/dist/automations/steps/zapier.js +0 -130
- package/dist/automations/triggerInfo/app.js +0 -36
- package/dist/automations/triggerInfo/cron.js +0 -35
- package/dist/automations/triggerInfo/index.js +0 -40
- package/dist/automations/triggerInfo/rowDeleted.js +0 -36
- package/dist/automations/triggerInfo/rowSaved.js +0 -44
- package/dist/automations/triggerInfo/rowUpdated.js +0 -44
- package/dist/automations/triggerInfo/webhook.js +0 -40
- package/dist/automations/triggers.js +0 -181
- package/dist/automations/utils.js +0 -275
- package/dist/constants/definitions.js +0 -2
- package/dist/constants/index.js +0 -181
- package/dist/constants/layouts.js +0 -148
- package/dist/constants/screens.js +0 -51
- package/dist/db/defaultData/datasource_bb_default.js +0 -574
- package/dist/db/defaultData/employeeImport.js +0 -155
- package/dist/db/defaultData/expensesImport.js +0 -117
- package/dist/db/defaultData/inventoryImport.js +0 -109
- package/dist/db/defaultData/jobsImport.js +0 -152
- package/dist/db/dynamoClient.js +0 -124
- package/dist/db/inMemoryView.js +0 -62
- package/dist/db/index.js +0 -43
- package/dist/db/linkedRows/LinkController.js +0 -392
- package/dist/db/linkedRows/LinkDocument.js +0 -33
- package/dist/db/linkedRows/index.js +0 -206
- package/dist/db/linkedRows/linkUtils.js +0 -131
- package/dist/db/newid.js +0 -7
- package/dist/db/utils.js +0 -248
- package/dist/db/views/staticViews.js +0 -144
- package/dist/ddApm.js +0 -11
- package/dist/definitions/automations.js +0 -8
- package/dist/definitions/common.js +0 -2
- package/dist/definitions/datasource.js +0 -7
- package/dist/definitions/openapi.js +0 -6
- package/dist/environment.js +0 -109
- package/dist/events/AutomationEmitter.js +0 -53
- package/dist/events/BudibaseEmitter.js +0 -25
- package/dist/events/docUpdates/index.js +0 -17
- package/dist/events/docUpdates/processors.js +0 -18
- package/dist/events/docUpdates/syncUsers.js +0 -49
- package/dist/events/index.js +0 -11
- package/dist/events/utils.js +0 -43
- package/dist/integrations/airtable.js +0 -173
- package/dist/integrations/arangodb.js +0 -119
- package/dist/integrations/base/query.js +0 -32
- package/dist/integrations/base/sql.js +0 -600
- package/dist/integrations/base/sqlTable.js +0 -167
- package/dist/integrations/base/types.js +0 -2
- package/dist/integrations/couchdb.js +0 -140
- package/dist/integrations/dynamodb.js +0 -210
- package/dist/integrations/elasticsearch.js +0 -201
- package/dist/integrations/firebase.js +0 -189
- package/dist/integrations/googlesheets.js +0 -484
- package/dist/integrations/index.js +0 -138
- package/dist/integrations/microsoftSqlServer.js +0 -289
- package/dist/integrations/mongodb.js +0 -630
- package/dist/integrations/mysql.js +0 -272
- package/dist/integrations/oracle.js +0 -404
- package/dist/integrations/postgres.js +0 -319
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -187
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -256
- package/dist/integrations/snowflake.js +0 -114
- package/dist/integrations/utils.js +0 -295
- package/dist/middleware/appInfo.js +0 -22
- package/dist/middleware/authorized.js +0 -112
- package/dist/middleware/builder.js +0 -93
- package/dist/middleware/currentapp.js +0 -103
- package/dist/middleware/joi-validator.js +0 -43
- package/dist/middleware/publicApi.js +0 -25
- package/dist/middleware/resourceId.js +0 -59
- package/dist/middleware/selfhost.js +0 -24
- package/dist/middleware/utils.js +0 -8
- package/dist/migrations/functions/appUrls.js +0 -42
- package/dist/migrations/functions/backfill/app/automations.js +0 -31
- package/dist/migrations/functions/backfill/app/datasources.js +0 -28
- package/dist/migrations/functions/backfill/app/layouts.js +0 -33
- package/dist/migrations/functions/backfill/app/queries.js +0 -49
- package/dist/migrations/functions/backfill/app/roles.js +0 -28
- package/dist/migrations/functions/backfill/app/screens.js +0 -28
- package/dist/migrations/functions/backfill/app/tables.js +0 -37
- package/dist/migrations/functions/backfill/app.js +0 -176
- package/dist/migrations/functions/backfill/global/configs.js +0 -67
- package/dist/migrations/functions/backfill/global/quotas.js +0 -60
- package/dist/migrations/functions/backfill/global/users.js +0 -50
- package/dist/migrations/functions/backfill/global.js +0 -205
- package/dist/migrations/functions/backfill/index.js +0 -32
- package/dist/migrations/functions/backfill/installation.js +0 -80
- package/dist/migrations/functions/syncQuotas.js +0 -52
- package/dist/migrations/functions/tableSettings.js +0 -130
- package/dist/migrations/functions/usageQuotas/index.js +0 -16
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -111
- package/dist/migrations/tests/helpers.js +0 -72
- package/dist/migrations/tests/structures.js +0 -37
- package/dist/sdk/app/applications/index.js +0 -28
- package/dist/sdk/app/applications/sync.js +0 -164
- package/dist/sdk/app/applications/utils.js +0 -21
- package/dist/sdk/app/automations/index.js +0 -29
- package/dist/sdk/app/automations/webhook.js +0 -54
- package/dist/sdk/app/backups/constants.js +0 -6
- package/dist/sdk/app/backups/exports.js +0 -160
- package/dist/sdk/app/backups/imports.js +0 -170
- package/dist/sdk/app/backups/index.js +0 -29
- package/dist/sdk/app/backups/statistics.js +0 -73
- package/dist/sdk/app/datasources/datasources.js +0 -173
- package/dist/sdk/app/datasources/index.js +0 -27
- package/dist/sdk/app/queries/index.js +0 -27
- package/dist/sdk/app/queries/queries.js +0 -60
- package/dist/sdk/app/rows/attachments.js +0 -61
- package/dist/sdk/app/rows/index.js +0 -28
- package/dist/sdk/app/rows/rows.js +0 -30
- package/dist/sdk/app/tables/index.js +0 -65
- package/dist/sdk/index.js +0 -27
- package/dist/sdk/plugins/index.js +0 -27
- package/dist/sdk/plugins/plugins.js +0 -53
- package/dist/sdk/users/index.js +0 -27
- package/dist/sdk/users/utils.js +0 -87
- package/dist/sdk/utils/index.js +0 -29
- package/dist/startup.js +0 -158
- package/dist/threads/automation.js +0 -450
- package/dist/threads/definitions.js +0 -2
- package/dist/threads/index.js +0 -140
- package/dist/threads/query.js +0 -265
- package/dist/threads/utils.js +0 -120
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utilities/appDirectoryTemplate/package.json +0 -10
- package/dist/utilities/budibaseDir.js +0 -5
- package/dist/utilities/centralPath.js +0 -27
- package/dist/utilities/csv.js +0 -33
- package/dist/utilities/fileSystem/app.js +0 -88
- package/dist/utilities/fileSystem/clientLibrary.js +0 -138
- package/dist/utilities/fileSystem/filesystem.js +0 -180
- package/dist/utilities/fileSystem/index.js +0 -21
- package/dist/utilities/fileSystem/plugin.js +0 -76
- package/dist/utilities/fileSystem/processor.js +0 -34
- package/dist/utilities/fileSystem/template.js +0 -47
- package/dist/utilities/global.js +0 -149
- package/dist/utilities/index.js +0 -143
- package/dist/utilities/redis.js +0 -117
- package/dist/utilities/retry.js +0 -30
- package/dist/utilities/routing/index.js +0 -39
- package/dist/utilities/rowProcessor/index.js +0 -282
- package/dist/utilities/rowProcessor/map.js +0 -116
- package/dist/utilities/rowProcessor/utils.js +0 -87
- package/dist/utilities/schema.js +0 -112
- package/dist/utilities/scriptRunner.js +0 -26
- package/dist/utilities/security.js +0 -57
- package/dist/utilities/statusCodes.js +0 -9
- package/dist/utilities/usageQuota/rows.js +0 -88
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/dist/utilities/users.js +0 -57
- package/dist/utilities/workerRequests.js +0 -171
- package/dist/watch.js +0 -53
- package/dist/websockets/client.js +0 -14
- package/dist/websockets/grid.js +0 -60
- package/dist/websockets/index.js +0 -17
- package/dist/websockets/websocket.js +0 -78
- /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
- /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
- /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
|
@@ -1,72 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.update = exports.fetch = void 0;
|
|
13
|
-
const backend_core_1 = require("@budibase/backend-core");
|
|
14
|
-
const KEYS_DOC = backend_core_1.db.StaticDatabases.GLOBAL.docs.apiKeys;
|
|
15
|
-
function getBuilderMainDoc() {
|
|
16
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
-
const db = backend_core_1.tenancy.getGlobalDB();
|
|
18
|
-
try {
|
|
19
|
-
return yield db.get(KEYS_DOC);
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
// doesn't exist yet, nothing to get
|
|
23
|
-
return {
|
|
24
|
-
_id: KEYS_DOC,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function setBuilderMainDoc(doc) {
|
|
30
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
// make sure to override the ID
|
|
32
|
-
doc._id = KEYS_DOC;
|
|
33
|
-
const db = backend_core_1.tenancy.getGlobalDB();
|
|
34
|
-
return db.put(doc);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function fetch(ctx) {
|
|
38
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
try {
|
|
40
|
-
const mainDoc = yield getBuilderMainDoc();
|
|
41
|
-
ctx.body = mainDoc.apiKeys ? mainDoc.apiKeys : {};
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
/* istanbul ignore next */
|
|
45
|
-
ctx.throw(400, err);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
exports.fetch = fetch;
|
|
50
|
-
function update(ctx) {
|
|
51
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
const key = ctx.params.key;
|
|
53
|
-
const value = ctx.request.body.value;
|
|
54
|
-
try {
|
|
55
|
-
const mainDoc = yield getBuilderMainDoc();
|
|
56
|
-
if (mainDoc.apiKeys == null) {
|
|
57
|
-
mainDoc.apiKeys = {};
|
|
58
|
-
}
|
|
59
|
-
mainDoc.apiKeys[key] = value;
|
|
60
|
-
const resp = yield setBuilderMainDoc(mainDoc);
|
|
61
|
-
ctx.body = {
|
|
62
|
-
_id: resp.id,
|
|
63
|
-
_rev: resp.rev,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
/* istanbul ignore next */
|
|
68
|
-
ctx.throw(400, err);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
exports.update = update;
|
|
@@ -1,574 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.updateAppPackage = exports.sync = exports.unpublish = exports.destroy = exports.revertClient = exports.updateClient = exports.update = exports.create = exports.fetchAppPackage = exports.fetchAppDefinition = exports.fetch = void 0;
|
|
16
|
-
const environment_1 = __importDefault(require("../../environment"));
|
|
17
|
-
const staticViews_1 = require("../../db/views/staticViews");
|
|
18
|
-
const fileSystem_1 = require("../../utilities/fileSystem");
|
|
19
|
-
const utils_1 = require("../../db/utils");
|
|
20
|
-
const backend_core_1 = require("@budibase/backend-core");
|
|
21
|
-
const constants_1 = require("../../constants");
|
|
22
|
-
const datasource_bb_default_1 = require("../../db/defaultData/datasource_bb_default");
|
|
23
|
-
const workerRequests_1 = require("../../utilities/workerRequests");
|
|
24
|
-
const utilities_1 = require("../../utilities");
|
|
25
|
-
const redis_1 = require("../../utilities/redis");
|
|
26
|
-
const fileSystem_2 = require("../../utilities/fileSystem");
|
|
27
|
-
const utils_2 = require("../../automations/utils");
|
|
28
|
-
const logging_1 = require("../../automations/logging");
|
|
29
|
-
const rows_1 = require("../../utilities/usageQuota/rows");
|
|
30
|
-
const pro_1 = require("@budibase/pro");
|
|
31
|
-
const types_1 = require("@budibase/types");
|
|
32
|
-
const layouts_1 = require("../../constants/layouts");
|
|
33
|
-
const sdk_1 = __importDefault(require("../../sdk"));
|
|
34
|
-
// utility function, need to do away with this
|
|
35
|
-
function getLayouts() {
|
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
const db = backend_core_1.context.getAppDB();
|
|
38
|
-
return (yield db.allDocs((0, utils_1.getLayoutParams)(null, {
|
|
39
|
-
include_docs: true,
|
|
40
|
-
}))).rows.map((row) => row.doc);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
function getScreens() {
|
|
44
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
const db = backend_core_1.context.getAppDB();
|
|
46
|
-
return (yield db.allDocs((0, utils_1.getScreenParams)(null, {
|
|
47
|
-
include_docs: true,
|
|
48
|
-
}))).rows.map((row) => row.doc);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
function getUserRoleId(ctx) {
|
|
52
|
-
var _a;
|
|
53
|
-
return !((_a = ctx.user) === null || _a === void 0 ? void 0 : _a.role) || !ctx.user.role._id
|
|
54
|
-
? backend_core_1.roles.BUILTIN_ROLE_IDS.PUBLIC
|
|
55
|
-
: ctx.user.role._id;
|
|
56
|
-
}
|
|
57
|
-
function checkAppUrl(ctx, apps, url, currentAppId) {
|
|
58
|
-
if (currentAppId) {
|
|
59
|
-
apps = apps.filter((app) => app.appId !== currentAppId);
|
|
60
|
-
}
|
|
61
|
-
if (apps.some((app) => app.url === url)) {
|
|
62
|
-
ctx.throw(400, "App URL is already in use.");
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
function checkAppName(ctx, apps, name, currentAppId) {
|
|
66
|
-
// TODO: Replace with Joi
|
|
67
|
-
if (!name) {
|
|
68
|
-
ctx.throw(400, "Name is required");
|
|
69
|
-
}
|
|
70
|
-
if (currentAppId) {
|
|
71
|
-
apps = apps.filter((app) => app.appId !== currentAppId);
|
|
72
|
-
}
|
|
73
|
-
if (apps.some((app) => app.name === name)) {
|
|
74
|
-
ctx.throw(400, "App name is already in use.");
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function createInstance(appId, template, includeSampleData) {
|
|
78
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
const db = backend_core_1.context.getAppDB();
|
|
80
|
-
yield db.put({
|
|
81
|
-
_id: "_design/database",
|
|
82
|
-
// view collation information, read before writing any complex views:
|
|
83
|
-
// https://docs.couchdb.org/en/master/ddocs/views/collation.html#collation-specification
|
|
84
|
-
views: {},
|
|
85
|
-
});
|
|
86
|
-
// NOTE: indexes need to be created before any tables/templates
|
|
87
|
-
// add view for linked rows
|
|
88
|
-
yield (0, staticViews_1.createLinkView)();
|
|
89
|
-
yield (0, staticViews_1.createRoutingView)();
|
|
90
|
-
yield (0, staticViews_1.createAllSearchIndex)();
|
|
91
|
-
// replicate the template data to the instance DB
|
|
92
|
-
// this is currently very hard to test, downloading and importing template files
|
|
93
|
-
if (template && template.templateString) {
|
|
94
|
-
const { ok } = yield db.load((0, utilities_1.stringToReadStream)(template.templateString));
|
|
95
|
-
if (!ok) {
|
|
96
|
-
throw "Error loading database dump from memory.";
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else if (template && template.useTemplate === "true") {
|
|
100
|
-
yield sdk_1.default.backups.importApp(appId, db, template);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
// create the users table
|
|
104
|
-
yield db.put(constants_1.USERS_TABLE_SCHEMA);
|
|
105
|
-
if (includeSampleData) {
|
|
106
|
-
// create ootb stock db
|
|
107
|
-
yield addDefaultTables(db);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return { _id: appId };
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
function addDefaultTables(db) {
|
|
114
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
-
const defaultDbDocs = (0, datasource_bb_default_1.buildDefaultDocs)();
|
|
116
|
-
// add in the default db data docs - tables, datasource, rows and links
|
|
117
|
-
yield db.bulkDocs([...defaultDbDocs]);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
function fetch(ctx) {
|
|
121
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
122
|
-
const dev = ctx.query && ctx.query.status === utils_1.AppStatus.DEV;
|
|
123
|
-
const all = ctx.query && ctx.query.status === utils_1.AppStatus.ALL;
|
|
124
|
-
const apps = (yield backend_core_1.db.getAllApps({ dev, all }));
|
|
125
|
-
const appIds = apps
|
|
126
|
-
.filter((app) => app.status === "development")
|
|
127
|
-
.map((app) => app.appId);
|
|
128
|
-
// get the locks for all the dev apps
|
|
129
|
-
if (dev || all) {
|
|
130
|
-
const locks = yield (0, redis_1.getLocksById)(appIds);
|
|
131
|
-
for (let app of apps) {
|
|
132
|
-
const lock = locks[app.appId];
|
|
133
|
-
if (lock) {
|
|
134
|
-
app.lockedBy = lock;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
// make sure its definitely not present
|
|
138
|
-
delete app.lockedBy;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
ctx.body = yield (0, logging_1.checkAppMetadata)(apps);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
exports.fetch = fetch;
|
|
146
|
-
function fetchAppDefinition(ctx) {
|
|
147
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
-
const layouts = yield getLayouts();
|
|
149
|
-
const userRoleId = getUserRoleId(ctx);
|
|
150
|
-
const accessController = new backend_core_1.roles.AccessController();
|
|
151
|
-
const screens = yield accessController.checkScreensAccess(yield getScreens(), userRoleId);
|
|
152
|
-
ctx.body = {
|
|
153
|
-
layouts,
|
|
154
|
-
screens,
|
|
155
|
-
libraries: ["@budibase/standard-components"],
|
|
156
|
-
};
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
exports.fetchAppDefinition = fetchAppDefinition;
|
|
160
|
-
function fetchAppPackage(ctx) {
|
|
161
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
-
const db = backend_core_1.context.getAppDB();
|
|
163
|
-
let application = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
164
|
-
const layouts = yield getLayouts();
|
|
165
|
-
let screens = yield getScreens();
|
|
166
|
-
// Enrich plugin URLs
|
|
167
|
-
application.usedPlugins = backend_core_1.objectStore.enrichPluginURLs(application.usedPlugins);
|
|
168
|
-
// Only filter screens if the user is not a builder
|
|
169
|
-
if (!(ctx.user.builder && ctx.user.builder.global)) {
|
|
170
|
-
const userRoleId = getUserRoleId(ctx);
|
|
171
|
-
const accessController = new backend_core_1.roles.AccessController();
|
|
172
|
-
screens = yield accessController.checkScreensAccess(screens, userRoleId);
|
|
173
|
-
}
|
|
174
|
-
const clientLibPath = backend_core_1.objectStore.clientLibraryUrl(ctx.params.appId, application.version);
|
|
175
|
-
ctx.body = {
|
|
176
|
-
application: Object.assign(Object.assign({}, application), { upgradableVersion: backend_core_1.env.VERSION }),
|
|
177
|
-
screens,
|
|
178
|
-
layouts,
|
|
179
|
-
clientLibPath,
|
|
180
|
-
};
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
exports.fetchAppPackage = fetchAppPackage;
|
|
184
|
-
function performAppCreate(ctx) {
|
|
185
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
186
|
-
const apps = (yield backend_core_1.db.getAllApps({ dev: true }));
|
|
187
|
-
const name = ctx.request.body.name, possibleUrl = ctx.request.body.url;
|
|
188
|
-
checkAppName(ctx, apps, name);
|
|
189
|
-
const url = sdk_1.default.applications.getAppUrl({ name, url: possibleUrl });
|
|
190
|
-
checkAppUrl(ctx, apps, url);
|
|
191
|
-
const { useTemplate, templateKey, templateString } = ctx.request.body;
|
|
192
|
-
const instanceConfig = {
|
|
193
|
-
useTemplate,
|
|
194
|
-
key: templateKey,
|
|
195
|
-
templateString,
|
|
196
|
-
};
|
|
197
|
-
if (ctx.request.files && ctx.request.files.templateFile) {
|
|
198
|
-
instanceConfig.file = ctx.request.files.templateFile;
|
|
199
|
-
}
|
|
200
|
-
const includeSampleData = (0, utilities_1.isQsTrue)(ctx.request.body.sampleData);
|
|
201
|
-
const tenantId = backend_core_1.tenancy.isMultiTenant() ? backend_core_1.tenancy.getTenantId() : null;
|
|
202
|
-
const appId = (0, utils_1.generateDevAppID)((0, utils_1.generateAppID)(tenantId));
|
|
203
|
-
return yield backend_core_1.context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
204
|
-
const instance = yield createInstance(appId, instanceConfig, includeSampleData);
|
|
205
|
-
const db = backend_core_1.context.getAppDB();
|
|
206
|
-
let newApplication = {
|
|
207
|
-
_id: utils_1.DocumentType.APP_METADATA,
|
|
208
|
-
_rev: undefined,
|
|
209
|
-
appId,
|
|
210
|
-
type: "app",
|
|
211
|
-
version: backend_core_1.env.VERSION,
|
|
212
|
-
componentLibraries: ["@budibase/standard-components"],
|
|
213
|
-
name: name,
|
|
214
|
-
url: url,
|
|
215
|
-
template: templateKey,
|
|
216
|
-
instance,
|
|
217
|
-
tenantId: backend_core_1.tenancy.getTenantId(),
|
|
218
|
-
updatedAt: new Date().toISOString(),
|
|
219
|
-
createdAt: new Date().toISOString(),
|
|
220
|
-
status: utils_1.AppStatus.DEV,
|
|
221
|
-
navigation: {
|
|
222
|
-
navigation: "Top",
|
|
223
|
-
title: name,
|
|
224
|
-
navWidth: "Large",
|
|
225
|
-
navBackground: "var(--spectrum-global-color-gray-100)",
|
|
226
|
-
links: [
|
|
227
|
-
{
|
|
228
|
-
url: "/home",
|
|
229
|
-
text: "Home",
|
|
230
|
-
},
|
|
231
|
-
],
|
|
232
|
-
},
|
|
233
|
-
theme: "spectrum--light",
|
|
234
|
-
customTheme: {
|
|
235
|
-
buttonBorderRadius: "16px",
|
|
236
|
-
},
|
|
237
|
-
};
|
|
238
|
-
// If we used a template or imported an app there will be an existing doc.
|
|
239
|
-
// Fetch and migrate some metadata from the existing app.
|
|
240
|
-
try {
|
|
241
|
-
const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
242
|
-
const keys = [
|
|
243
|
-
"_rev",
|
|
244
|
-
"navigation",
|
|
245
|
-
"theme",
|
|
246
|
-
"customTheme",
|
|
247
|
-
"icon",
|
|
248
|
-
];
|
|
249
|
-
keys.forEach(key => {
|
|
250
|
-
if (existing[key]) {
|
|
251
|
-
// @ts-ignore
|
|
252
|
-
newApplication[key] = existing[key];
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
// Migrate navigation settings and screens if required
|
|
256
|
-
if (existing) {
|
|
257
|
-
const navigation = yield migrateAppNavigation();
|
|
258
|
-
if (navigation) {
|
|
259
|
-
newApplication.navigation = navigation;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
catch (err) {
|
|
264
|
-
// Nothing to do
|
|
265
|
-
}
|
|
266
|
-
const response = yield db.put(newApplication, { force: true });
|
|
267
|
-
newApplication._rev = response.rev;
|
|
268
|
-
/* istanbul ignore next */
|
|
269
|
-
if (!environment_1.default.isTest()) {
|
|
270
|
-
yield (0, fileSystem_1.createApp)(appId);
|
|
271
|
-
}
|
|
272
|
-
yield backend_core_1.cache.app.invalidateAppMetadata(appId, newApplication);
|
|
273
|
-
return newApplication;
|
|
274
|
-
}));
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
function creationEvents(request, app) {
|
|
278
|
-
var _a;
|
|
279
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
280
|
-
let creationFns = [];
|
|
281
|
-
const body = request.body;
|
|
282
|
-
if (body.useTemplate === "true") {
|
|
283
|
-
// from template
|
|
284
|
-
if (body.templateKey && body.templateKey !== "undefined") {
|
|
285
|
-
creationFns.push(a => backend_core_1.events.app.templateImported(a, body.templateKey));
|
|
286
|
-
}
|
|
287
|
-
// from file
|
|
288
|
-
else if ((_a = request.files) === null || _a === void 0 ? void 0 : _a.templateFile) {
|
|
289
|
-
creationFns.push(a => backend_core_1.events.app.fileImported(a));
|
|
290
|
-
}
|
|
291
|
-
// unknown
|
|
292
|
-
else {
|
|
293
|
-
console.error("Could not determine template creation event");
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
creationFns.push(a => backend_core_1.events.app.created(a));
|
|
297
|
-
for (let fn of creationFns) {
|
|
298
|
-
yield fn(app);
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
function appPostCreate(ctx, app) {
|
|
303
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
304
|
-
const tenantId = backend_core_1.tenancy.getTenantId();
|
|
305
|
-
yield backend_core_1.migrations.backPopulateMigrations({
|
|
306
|
-
type: types_1.MigrationType.APP,
|
|
307
|
-
tenantId,
|
|
308
|
-
appId: app.appId,
|
|
309
|
-
});
|
|
310
|
-
yield creationEvents(ctx.request, app);
|
|
311
|
-
// app import & template creation
|
|
312
|
-
if (ctx.request.body.useTemplate === "true") {
|
|
313
|
-
const { rows } = yield (0, rows_1.getUniqueRows)([app.appId]);
|
|
314
|
-
const rowCount = rows ? rows.length : 0;
|
|
315
|
-
if (rowCount) {
|
|
316
|
-
try {
|
|
317
|
-
yield backend_core_1.context.doInAppContext(app.appId, () => {
|
|
318
|
-
return pro_1.quotas.addRows(rowCount);
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
catch (err) {
|
|
322
|
-
if (err.code && err.code === backend_core_1.ErrorCode.USAGE_LIMIT_EXCEEDED) {
|
|
323
|
-
// this import resulted in row usage exceeding the quota
|
|
324
|
-
// delete the app
|
|
325
|
-
// skip pre and post-steps as no rows have been added to quotas yet
|
|
326
|
-
ctx.params.appId = app.appId;
|
|
327
|
-
yield destroyApp(ctx);
|
|
328
|
-
}
|
|
329
|
-
throw err;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
function create(ctx) {
|
|
336
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
337
|
-
const newApplication = yield pro_1.quotas.addApp(() => performAppCreate(ctx));
|
|
338
|
-
yield appPostCreate(ctx, newApplication);
|
|
339
|
-
yield backend_core_1.cache.bustCache(backend_core_1.cache.CacheKey.CHECKLIST);
|
|
340
|
-
ctx.body = newApplication;
|
|
341
|
-
ctx.status = 200;
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
exports.create = create;
|
|
345
|
-
// This endpoint currently operates as a PATCH rather than a PUT
|
|
346
|
-
// Thus name and url fields are handled only if present
|
|
347
|
-
function update(ctx) {
|
|
348
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
349
|
-
const apps = (yield backend_core_1.db.getAllApps({ dev: true }));
|
|
350
|
-
// validation
|
|
351
|
-
const name = ctx.request.body.name, possibleUrl = ctx.request.body.url;
|
|
352
|
-
if (name) {
|
|
353
|
-
checkAppName(ctx, apps, name, ctx.params.appId);
|
|
354
|
-
}
|
|
355
|
-
const url = sdk_1.default.applications.getAppUrl({ name, url: possibleUrl });
|
|
356
|
-
if (url) {
|
|
357
|
-
checkAppUrl(ctx, apps, url, ctx.params.appId);
|
|
358
|
-
ctx.request.body.url = url;
|
|
359
|
-
}
|
|
360
|
-
const app = yield updateAppPackage(ctx.request.body, ctx.params.appId);
|
|
361
|
-
yield backend_core_1.events.app.updated(app);
|
|
362
|
-
ctx.status = 200;
|
|
363
|
-
ctx.body = app;
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
exports.update = update;
|
|
367
|
-
function updateClient(ctx) {
|
|
368
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
369
|
-
// Get current app version
|
|
370
|
-
const db = backend_core_1.context.getAppDB();
|
|
371
|
-
const application = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
372
|
-
const currentVersion = application.version;
|
|
373
|
-
// Update client library and manifest
|
|
374
|
-
if (!environment_1.default.isTest()) {
|
|
375
|
-
yield (0, fileSystem_2.backupClientLibrary)(ctx.params.appId);
|
|
376
|
-
yield (0, fileSystem_2.updateClientLibrary)(ctx.params.appId);
|
|
377
|
-
}
|
|
378
|
-
// Update versions in app package
|
|
379
|
-
const updatedToVersion = backend_core_1.env.VERSION;
|
|
380
|
-
const appPackageUpdates = {
|
|
381
|
-
version: updatedToVersion,
|
|
382
|
-
revertableVersion: currentVersion,
|
|
383
|
-
};
|
|
384
|
-
const app = yield updateAppPackage(appPackageUpdates, ctx.params.appId);
|
|
385
|
-
yield backend_core_1.events.app.versionUpdated(app, currentVersion, updatedToVersion);
|
|
386
|
-
ctx.status = 200;
|
|
387
|
-
ctx.body = app;
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
exports.updateClient = updateClient;
|
|
391
|
-
function revertClient(ctx) {
|
|
392
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
393
|
-
// Check app can be reverted
|
|
394
|
-
const db = backend_core_1.context.getAppDB();
|
|
395
|
-
const application = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
396
|
-
if (!application.revertableVersion) {
|
|
397
|
-
ctx.throw(400, "There is no version to revert to");
|
|
398
|
-
}
|
|
399
|
-
// Update client library and manifest
|
|
400
|
-
if (!environment_1.default.isTest()) {
|
|
401
|
-
yield (0, fileSystem_2.revertClientLibrary)(ctx.params.appId);
|
|
402
|
-
}
|
|
403
|
-
// Update versions in app package
|
|
404
|
-
const currentVersion = application.version;
|
|
405
|
-
const revertedToVersion = application.revertableVersion;
|
|
406
|
-
const appPackageUpdates = {
|
|
407
|
-
version: revertedToVersion,
|
|
408
|
-
revertableVersion: null,
|
|
409
|
-
};
|
|
410
|
-
const app = yield updateAppPackage(appPackageUpdates, ctx.params.appId);
|
|
411
|
-
yield backend_core_1.events.app.versionReverted(app, currentVersion, revertedToVersion);
|
|
412
|
-
ctx.status = 200;
|
|
413
|
-
ctx.body = app;
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
exports.revertClient = revertClient;
|
|
417
|
-
function unpublishApp(ctx) {
|
|
418
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
419
|
-
let appId = ctx.params.appId;
|
|
420
|
-
appId = backend_core_1.db.getProdAppID(appId);
|
|
421
|
-
const db = backend_core_1.context.getProdAppDB();
|
|
422
|
-
const result = yield db.destroy();
|
|
423
|
-
yield backend_core_1.events.app.unpublished({ appId });
|
|
424
|
-
// automations only in production
|
|
425
|
-
yield (0, utils_2.cleanupAutomations)(appId);
|
|
426
|
-
yield backend_core_1.cache.app.invalidateAppMetadata(appId);
|
|
427
|
-
return result;
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
function destroyApp(ctx) {
|
|
431
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
432
|
-
let appId = ctx.params.appId;
|
|
433
|
-
appId = backend_core_1.db.getProdAppID(appId);
|
|
434
|
-
const devAppId = backend_core_1.db.getDevAppID(appId);
|
|
435
|
-
// check if we need to unpublish first
|
|
436
|
-
if (yield backend_core_1.db.dbExists(appId)) {
|
|
437
|
-
// app is deployed, run through unpublish flow
|
|
438
|
-
yield sdk_1.default.applications.syncApp(devAppId);
|
|
439
|
-
yield unpublishApp(ctx);
|
|
440
|
-
}
|
|
441
|
-
const db = backend_core_1.db.getDB(devAppId);
|
|
442
|
-
// standard app deletion flow
|
|
443
|
-
const app = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
444
|
-
const result = yield db.destroy();
|
|
445
|
-
yield pro_1.quotas.removeApp();
|
|
446
|
-
yield backend_core_1.events.app.deleted(app);
|
|
447
|
-
if (!environment_1.default.isTest()) {
|
|
448
|
-
yield (0, fileSystem_1.deleteApp)(appId);
|
|
449
|
-
}
|
|
450
|
-
yield (0, workerRequests_1.removeAppFromUserRoles)(ctx, appId);
|
|
451
|
-
yield backend_core_1.cache.app.invalidateAppMetadata(devAppId);
|
|
452
|
-
return result;
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
function preDestroyApp(ctx) {
|
|
456
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
457
|
-
const { rows } = yield (0, rows_1.getUniqueRows)([ctx.params.appId]);
|
|
458
|
-
ctx.rowCount = rows.length;
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
function postDestroyApp(ctx) {
|
|
462
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
463
|
-
const rowCount = ctx.rowCount;
|
|
464
|
-
yield pro_1.groups.cleanupApp(ctx.params.appId);
|
|
465
|
-
if (rowCount) {
|
|
466
|
-
yield pro_1.quotas.removeRows(rowCount);
|
|
467
|
-
}
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
function destroy(ctx) {
|
|
471
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
472
|
-
yield preDestroyApp(ctx);
|
|
473
|
-
const result = yield destroyApp(ctx);
|
|
474
|
-
yield postDestroyApp(ctx);
|
|
475
|
-
ctx.status = 200;
|
|
476
|
-
ctx.body = result;
|
|
477
|
-
});
|
|
478
|
-
}
|
|
479
|
-
exports.destroy = destroy;
|
|
480
|
-
function unpublish(ctx) {
|
|
481
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
482
|
-
const prodAppId = backend_core_1.db.getProdAppID(ctx.params.appId);
|
|
483
|
-
const dbExists = yield backend_core_1.db.dbExists(prodAppId);
|
|
484
|
-
// check app has been published
|
|
485
|
-
if (!dbExists) {
|
|
486
|
-
return ctx.throw(400, "App has not been published.");
|
|
487
|
-
}
|
|
488
|
-
yield preDestroyApp(ctx);
|
|
489
|
-
yield unpublishApp(ctx);
|
|
490
|
-
yield postDestroyApp(ctx);
|
|
491
|
-
ctx.status = 204;
|
|
492
|
-
});
|
|
493
|
-
}
|
|
494
|
-
exports.unpublish = unpublish;
|
|
495
|
-
function sync(ctx) {
|
|
496
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
497
|
-
const appId = ctx.params.appId;
|
|
498
|
-
try {
|
|
499
|
-
ctx.body = yield sdk_1.default.applications.syncApp(appId);
|
|
500
|
-
}
|
|
501
|
-
catch (err) {
|
|
502
|
-
ctx.throw(err.status || 400, err.message);
|
|
503
|
-
}
|
|
504
|
-
});
|
|
505
|
-
}
|
|
506
|
-
exports.sync = sync;
|
|
507
|
-
function updateAppPackage(appPackage, appId) {
|
|
508
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
509
|
-
return backend_core_1.context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
510
|
-
const db = backend_core_1.context.getAppDB();
|
|
511
|
-
const application = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
512
|
-
const newAppPackage = Object.assign(Object.assign({}, application), appPackage);
|
|
513
|
-
if (appPackage._rev !== application._rev) {
|
|
514
|
-
newAppPackage._rev = application._rev;
|
|
515
|
-
}
|
|
516
|
-
// the locked by property is attached by server but generated from
|
|
517
|
-
// Redis, shouldn't ever store it
|
|
518
|
-
delete newAppPackage.lockedBy;
|
|
519
|
-
yield db.put(newAppPackage);
|
|
520
|
-
// remove any cached metadata, so that it will be updated
|
|
521
|
-
yield backend_core_1.cache.app.invalidateAppMetadata(appId);
|
|
522
|
-
return newAppPackage;
|
|
523
|
-
}));
|
|
524
|
-
});
|
|
525
|
-
}
|
|
526
|
-
exports.updateAppPackage = updateAppPackage;
|
|
527
|
-
function migrateAppNavigation() {
|
|
528
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
529
|
-
const db = backend_core_1.context.getAppDB();
|
|
530
|
-
const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
531
|
-
const layouts = yield getLayouts();
|
|
532
|
-
const screens = yield getScreens();
|
|
533
|
-
// Migrate all screens, removing custom layouts
|
|
534
|
-
for (let screen of screens) {
|
|
535
|
-
if (!screen.layoutId) {
|
|
536
|
-
continue;
|
|
537
|
-
}
|
|
538
|
-
const layout = layouts.find(layout => layout._id === screen.layoutId);
|
|
539
|
-
screen.layoutId = undefined;
|
|
540
|
-
screen.showNavigation = (layout === null || layout === void 0 ? void 0 : layout.props.navigation) !== "None";
|
|
541
|
-
screen.width = (layout === null || layout === void 0 ? void 0 : layout.props.width) || "Large";
|
|
542
|
-
yield db.put(screen);
|
|
543
|
-
}
|
|
544
|
-
// Migrate layout navigation settings
|
|
545
|
-
const { name, customTheme } = existing;
|
|
546
|
-
const layout = layouts === null || layouts === void 0 ? void 0 : layouts.find((layout) => layout._id === layouts_1.BASE_LAYOUT_PROP_IDS.PRIVATE);
|
|
547
|
-
if (layout && !existing.navigation) {
|
|
548
|
-
let navigationSettings = {
|
|
549
|
-
navigation: "Top",
|
|
550
|
-
title: name,
|
|
551
|
-
navWidth: "Large",
|
|
552
|
-
navBackground: (customTheme === null || customTheme === void 0 ? void 0 : customTheme.navBackground) || "var(--spectrum-global-color-gray-50)",
|
|
553
|
-
navTextColor: (customTheme === null || customTheme === void 0 ? void 0 : customTheme.navTextColor) || "var(--spectrum-global-color-gray-800)",
|
|
554
|
-
};
|
|
555
|
-
if (layout) {
|
|
556
|
-
navigationSettings.hideLogo = layout.props.hideLogo;
|
|
557
|
-
navigationSettings.hideTitle = layout.props.hideTitle;
|
|
558
|
-
navigationSettings.title = layout.props.title || name;
|
|
559
|
-
navigationSettings.logoUrl = layout.props.logoUrl;
|
|
560
|
-
navigationSettings.links = layout.props.links;
|
|
561
|
-
navigationSettings.navigation = layout.props.navigation || "Top";
|
|
562
|
-
navigationSettings.sticky = layout.props.sticky;
|
|
563
|
-
navigationSettings.navWidth = layout.props.width || "Large";
|
|
564
|
-
if (navigationSettings.navigation === "None") {
|
|
565
|
-
navigationSettings.navigation = "Top";
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
return navigationSettings;
|
|
569
|
-
}
|
|
570
|
-
else {
|
|
571
|
-
return null;
|
|
572
|
-
}
|
|
573
|
-
});
|
|
574
|
-
}
|