@budibase/server 2.1.43-alpha.1 → 2.1.43-alpha.11
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.071ce1a2.css +6 -0
- package/builder/assets/{index.8935424b.js → index.9e365981.js} +314 -314
- package/builder/index.html +2 -2
- package/coverage/clover.xml +3534 -3470
- package/coverage/coverage-final.json +258 -252
- package/coverage/lcov-report/index.html +115 -70
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/application.ts.html +163 -310
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +27 -27
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +15 -12
- package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +15 -15
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +81 -81
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/index.html +28 -28
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +15 -15
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/public/index.html +18 -18
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +80 -29
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +21 -21
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +22 -13
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/row/index.html +4 -4
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +29 -29
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +13 -13
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/script.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +24 -24
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +17 -17
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +27 -27
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/user.ts.html +26 -197
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +17 -17
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +13 -13
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +14 -14
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +33 -33
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/application.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
- package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/index.ts.html +34 -34
- package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
- package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +21 -21
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/tests/index.html +116 -0
- package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +169 -0
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +15 -15
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +32 -32
- package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
- package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
- package/coverage/lcov-report/src/app.ts.html +32 -32
- package/coverage/lcov-report/src/automations/actions.ts.html +25 -25
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +8 -8
- package/coverage/lcov-report/src/automations/bullboard.ts.html +11 -11
- package/coverage/lcov-report/src/automations/index.html +1 -1
- package/coverage/lcov-report/src/automations/index.ts.html +13 -13
- package/coverage/lcov-report/src/automations/logging/index.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +8 -8
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +8 -8
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/index.html +1 -1
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +14 -14
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +17 -17
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +4 -4
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +3 -3
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +6 -6
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggers.ts.html +21 -21
- package/coverage/lcov-report/src/automations/utils.ts.html +45 -45
- package/coverage/lcov-report/src/constants/index.html +1 -1
- package/coverage/lcov-report/src/constants/index.ts.html +92 -92
- package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
- package/coverage/lcov-report/src/constants/screens.ts.html +4 -4
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +23 -23
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +16 -16
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +5 -5
- package/coverage/lcov-report/src/db/index.html +1 -1
- package/coverage/lcov-report/src/db/index.ts.html +9 -9
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +8 -8
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
- package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +15 -15
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +12 -12
- package/coverage/lcov-report/src/db/newid.ts.html +4 -4
- package/coverage/lcov-report/src/db/utils.ts.html +58 -58
- package/coverage/lcov-report/src/definitions/automations.ts.html +4 -4
- package/coverage/lcov-report/src/definitions/datasource.ts.html +4 -4
- package/coverage/lcov-report/src/definitions/index.html +1 -1
- package/coverage/lcov-report/src/environment.ts.html +19 -19
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
- package/coverage/lcov-report/src/events/index.html +1 -1
- package/coverage/lcov-report/src/events/index.ts.html +4 -4
- package/coverage/lcov-report/src/events/utils.ts.html +3 -3
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/base/index.html +1 -1
- package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +12 -12
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +7 -7
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +3 -3
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
- package/coverage/lcov-report/src/integrations/index.html +30 -30
- package/coverage/lcov-report/src/integrations/index.ts.html +30 -30
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +38 -32
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/mysql.ts.html +16 -13
- package/coverage/lcov-report/src/integrations/oracle.ts.html +47 -134
- package/coverage/lcov-report/src/integrations/postgres.ts.html +34 -16
- package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/rest.ts.html +16 -16
- package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/src/integrations/utils.ts.html +31 -31
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +7 -7
- package/coverage/lcov-report/src/middleware/authorized.ts.html +30 -30
- package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +39 -39
- package/coverage/lcov-report/src/middleware/index.html +1 -1
- package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/publicApi.ts.html +8 -8
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +28 -28
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +10 -31
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/index.html +11 -11
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
- package/coverage/lcov-report/src/migrations/index.html +1 -1
- package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
- package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
- package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/index.html +146 -0
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +106 -0
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +244 -0
- package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +136 -0
- package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +17 -17
- package/coverage/lcov-report/src/sdk/app/backups/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +7 -7
- package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/index.html +5 -5
- package/coverage/lcov-report/src/sdk/index.ts.html +15 -12
- package/coverage/lcov-report/src/sdk/users/index.html +131 -0
- package/coverage/lcov-report/src/sdk/users/index.ts.html +100 -0
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +277 -0
- package/coverage/lcov-report/src/startup.ts.html +41 -41
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +97 -97
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
- package/coverage/lcov-report/src/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +26 -26
- package/coverage/lcov-report/src/threads/automation.ts.html +23 -23
- package/coverage/lcov-report/src/threads/index.html +1 -1
- package/coverage/lcov-report/src/threads/index.ts.html +11 -11
- package/coverage/lcov-report/src/threads/query.ts.html +1 -1
- package/coverage/lcov-report/src/threads/utils.ts.html +15 -15
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +11 -11
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +42 -42
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/global.ts.html +41 -41
- package/coverage/lcov-report/src/utilities/index.html +15 -15
- package/coverage/lcov-report/src/utilities/index.ts.html +26 -26
- package/coverage/lcov-report/src/utilities/plugins.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/redis.ts.html +22 -22
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +17 -17
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +6 -6
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
- package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/usageQuota/index.html +15 -15
- package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +17 -17
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/users.ts.html +23 -23
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +3 -3
- package/coverage/lcov-report/src/watch.ts.html +9 -9
- package/coverage/lcov-report/src/websocket.ts.html +6 -6
- package/coverage/lcov.info +4646 -4535
- package/dist/api/controllers/application.js +419 -438
- package/dist/api/controllers/cloud.js +1 -0
- package/dist/api/controllers/public/users.js +16 -0
- package/dist/api/controllers/row/ExternalRequest.js +2 -1
- package/dist/api/controllers/user.js +7 -48
- package/dist/api/routes/public/tests/utils.js +33 -0
- package/dist/integrations/base/types.js +2 -0
- package/dist/integrations/microsoftSqlServer.js +8 -3
- package/dist/integrations/oracle.js +8 -1
- package/dist/integrations/postgres.js +6 -3
- package/dist/migrations/functions/appUrls.js +5 -9
- package/dist/package.json +6 -6
- package/dist/sdk/app/applications/index.js +28 -0
- package/dist/sdk/app/applications/sync.js +66 -0
- package/dist/sdk/app/applications/utils.js +21 -0
- package/dist/sdk/index.js +4 -2
- package/dist/sdk/users/index.js +27 -0
- package/dist/sdk/users/utils.js +65 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/scripts/integrations/mssql/data/setup.sql +3 -3
- package/scripts/integrations/postgres/emp-skill.sql +46 -0
- package/src/api/controllers/application.ts +55 -104
- package/src/api/controllers/cloud.ts +1 -0
- package/src/api/controllers/public/users.ts +23 -6
- package/src/api/controllers/row/ExternalRequest.ts +4 -1
- package/src/api/controllers/user.ts +4 -61
- package/src/api/routes/public/tests/compare.spec.js +3 -21
- package/src/api/routes/public/tests/users.spec.js +38 -0
- package/src/api/routes/public/tests/utils.ts +28 -0
- package/src/api/routes/tests/application.spec.js +0 -1
- package/src/integrations/base/types.ts +134 -0
- package/src/integrations/microsoftSqlServer.ts +14 -12
- package/src/integrations/mysql.ts +4 -3
- package/src/integrations/oracle.ts +17 -46
- package/src/integrations/postgres.ts +8 -2
- package/src/migrations/functions/appUrls.ts +2 -9
- package/src/sdk/app/applications/index.ts +7 -0
- package/src/sdk/app/applications/sync.ts +53 -0
- package/src/sdk/app/applications/utils.ts +17 -0
- package/src/sdk/index.ts +4 -3
- package/src/sdk/users/index.ts +5 -0
- package/src/sdk/users/utils.ts +64 -0
- package/src/utilities/workerRequests.ts +2 -2
- package/builder/assets/index.0c44dac3.css +0 -6
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const setup = require("../../tests/utilities")
|
|
2
|
+
const { generateMakeRequest } = require("./utils")
|
|
3
|
+
|
|
4
|
+
const workerRequests = require("../../../../utilities/workerRequests")
|
|
5
|
+
|
|
6
|
+
let config = setup.getConfig()
|
|
7
|
+
let apiKey, globalUser, makeRequest
|
|
8
|
+
|
|
9
|
+
beforeAll(async () => {
|
|
10
|
+
await config.init()
|
|
11
|
+
globalUser = await config.globalUser()
|
|
12
|
+
apiKey = await config.generateApiKey(globalUser._id)
|
|
13
|
+
makeRequest = generateMakeRequest(apiKey, setup)
|
|
14
|
+
workerRequests.readGlobalUser.mockReturnValue(globalUser)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
afterAll(setup.afterAll)
|
|
18
|
+
|
|
19
|
+
describe("check user endpoints", () => {
|
|
20
|
+
it("should not allow a user to update their own roles", async () => {
|
|
21
|
+
const res = await makeRequest("put", `/users/${globalUser._id}`, {
|
|
22
|
+
...globalUser,
|
|
23
|
+
roles: {
|
|
24
|
+
"app_1": "ADMIN",
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
expect(workerRequests.saveGlobalUser.mock.lastCall[0].body.data.roles["app_1"]).toBeUndefined()
|
|
28
|
+
expect(res.status).toBe(200)
|
|
29
|
+
expect(res.body.data.roles["app_1"]).toBeUndefined()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it("should not allow a user to delete themselves", async () => {
|
|
33
|
+
const res = await makeRequest("delete", `/users/${globalUser._id}`)
|
|
34
|
+
expect(res.status).toBe(405)
|
|
35
|
+
expect(workerRequests.deleteGlobalUser.mock.lastCall).toBeUndefined()
|
|
36
|
+
})
|
|
37
|
+
})
|
|
38
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { checkSlashesInUrl } from "../../../../utilities"
|
|
2
|
+
|
|
3
|
+
export function generateMakeRequest(apiKey: string, setup: any) {
|
|
4
|
+
const request = setup.getRequest()
|
|
5
|
+
const config = setup.getConfig()
|
|
6
|
+
return async (
|
|
7
|
+
method: string,
|
|
8
|
+
endpoint: string,
|
|
9
|
+
body?: any,
|
|
10
|
+
intAppId: string = config.getAppId()
|
|
11
|
+
) => {
|
|
12
|
+
const extraHeaders: any = {
|
|
13
|
+
"x-budibase-api-key": apiKey,
|
|
14
|
+
}
|
|
15
|
+
if (intAppId) {
|
|
16
|
+
extraHeaders["x-budibase-app-id"] = intAppId
|
|
17
|
+
}
|
|
18
|
+
const req = request[method](
|
|
19
|
+
checkSlashesInUrl(`/api/public/v1/${endpoint}`)
|
|
20
|
+
).set(config.defaultHeaders(extraHeaders))
|
|
21
|
+
if (body) {
|
|
22
|
+
req.send(body)
|
|
23
|
+
}
|
|
24
|
+
const res = await req
|
|
25
|
+
expect(res.body).toBeDefined()
|
|
26
|
+
return res
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -17,7 +17,6 @@ const {
|
|
|
17
17
|
checkBuilderEndpoint,
|
|
18
18
|
} = require("./utilities/TestFunctions")
|
|
19
19
|
const setup = require("./utilities")
|
|
20
|
-
const { basicScreen, basicLayout } = setup.structures
|
|
21
20
|
const { AppStatus } = require("../../../db/utils")
|
|
22
21
|
const { events } = require("@budibase/backend-core")
|
|
23
22
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export interface MSSQLTablesResponse {
|
|
2
|
+
TABLE_CATALOG: string
|
|
3
|
+
TABLE_SCHEMA: string
|
|
4
|
+
TABLE_NAME: string
|
|
5
|
+
TABLE_TYPE: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface MSSQLColumn {
|
|
9
|
+
IS_COMPUTED: number
|
|
10
|
+
IS_IDENTITY: number
|
|
11
|
+
TABLE_CATALOG: string
|
|
12
|
+
TABLE_SCHEMA: string
|
|
13
|
+
TABLE_NAME: string
|
|
14
|
+
COLUMN_NAME: string
|
|
15
|
+
ORDINAL_POSITION: number
|
|
16
|
+
COLUMN_DEFAULT: null | any
|
|
17
|
+
IS_NULLABLE: "NO" | "YES"
|
|
18
|
+
DATA_TYPE: string
|
|
19
|
+
CHARACTER_MAXIMUM_LENGTH: null | number
|
|
20
|
+
CHARACTER_OCTET_LENGTH: null | number
|
|
21
|
+
NUMERIC_PRECISION: null | number
|
|
22
|
+
NUMERIC_PRECISION_RADIX: null | number
|
|
23
|
+
NUMERIC_SCALE: null | number
|
|
24
|
+
DATETIME_PRECISION: null | string
|
|
25
|
+
CHARACTER_SET_CATALOG: null | string
|
|
26
|
+
CHARACTER_SET_SCHEMA: null | string
|
|
27
|
+
CHARACTER_SET_NAME: null | string
|
|
28
|
+
COLLATION_CATALOG: null | string
|
|
29
|
+
COLLATION_SCHEMA: null | string
|
|
30
|
+
COLLATION_NAME: null | string
|
|
31
|
+
DOMAIN_CATALOG: null | string
|
|
32
|
+
DOMAIN_SCHEMA: null | string
|
|
33
|
+
DOMAIN_NAME: null | string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface PostgresColumn {
|
|
37
|
+
table_catalog: string
|
|
38
|
+
table_schema: string
|
|
39
|
+
table_name: string
|
|
40
|
+
column_name: string
|
|
41
|
+
ordinal_position: number
|
|
42
|
+
column_default: null | any
|
|
43
|
+
is_nullable: "NO" | "YES"
|
|
44
|
+
data_type: string
|
|
45
|
+
character_maximum_length: null | number
|
|
46
|
+
character_octet_length: null | number
|
|
47
|
+
numeric_precision: null | number
|
|
48
|
+
numeric_precision_radix: null | number
|
|
49
|
+
numeric_scale: null | number
|
|
50
|
+
datetime_precision: null | string
|
|
51
|
+
interval_type: null | string
|
|
52
|
+
interval_precision: null | string
|
|
53
|
+
character_set_catalog: null | string
|
|
54
|
+
character_set_schema: null | string
|
|
55
|
+
character_set_name: null | string
|
|
56
|
+
collation_catalog: null | string
|
|
57
|
+
collation_schema: null | string
|
|
58
|
+
collation_name: null | string
|
|
59
|
+
domain_catalog: null | string
|
|
60
|
+
domain_schema: null | string
|
|
61
|
+
domain_name: null | string
|
|
62
|
+
udt_catalog: string
|
|
63
|
+
udt_schema: string
|
|
64
|
+
udt_name: string
|
|
65
|
+
scope_catalog: null | string
|
|
66
|
+
scope_schema: null | string
|
|
67
|
+
scope_name: null | string
|
|
68
|
+
maximum_cardinality: null | string
|
|
69
|
+
dtd_identifier: string
|
|
70
|
+
is_self_referencing: "NO" | "YES"
|
|
71
|
+
is_identity: "NO" | "YES"
|
|
72
|
+
identity_generation: null | number
|
|
73
|
+
identity_start: null | number
|
|
74
|
+
identity_increment: null | number
|
|
75
|
+
identity_maximum: null | number
|
|
76
|
+
identity_minimum: null | number
|
|
77
|
+
identity_cycle: "NO" | "YES"
|
|
78
|
+
is_generated: "NEVER"
|
|
79
|
+
generation_expression: null | string
|
|
80
|
+
is_updatable: "NO" | "YES"
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface MySQLColumn {
|
|
84
|
+
Field: string
|
|
85
|
+
Type: string
|
|
86
|
+
Null: "NO" | "YES"
|
|
87
|
+
Key: "PRI" | "MUL" | ""
|
|
88
|
+
Default: null | any
|
|
89
|
+
Extra: null | string
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Raw query response
|
|
94
|
+
*/
|
|
95
|
+
export interface OracleColumnsResponse {
|
|
96
|
+
TABLE_NAME: string
|
|
97
|
+
COLUMN_NAME: string
|
|
98
|
+
DATA_TYPE: string
|
|
99
|
+
DATA_DEFAULT: null | string
|
|
100
|
+
COLUMN_ID: number
|
|
101
|
+
CONSTRAINT_NAME: null | string
|
|
102
|
+
CONSTRAINT_TYPE: null | string
|
|
103
|
+
R_CONSTRAINT_NAME: null | string
|
|
104
|
+
SEARCH_CONDITION: null | string
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* An oracle constraint
|
|
109
|
+
*/
|
|
110
|
+
export interface OracleConstraint {
|
|
111
|
+
name: string
|
|
112
|
+
type: string
|
|
113
|
+
relatedConstraintName: null | string
|
|
114
|
+
searchCondition: null | string
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* An oracle column and it's related constraints
|
|
119
|
+
*/
|
|
120
|
+
export interface OracleColumn {
|
|
121
|
+
name: string
|
|
122
|
+
type: string
|
|
123
|
+
default: null | string
|
|
124
|
+
id: number
|
|
125
|
+
constraints: { [key: string]: OracleConstraint }
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* An oracle table and it's related columns
|
|
130
|
+
*/
|
|
131
|
+
export interface OracleTable {
|
|
132
|
+
name: string
|
|
133
|
+
columns: { [key: string]: OracleColumn }
|
|
134
|
+
}
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
SqlClient,
|
|
18
18
|
} from "./utils"
|
|
19
19
|
import Sql from "./base/sql"
|
|
20
|
+
import { MSSQLTablesResponse, MSSQLColumn } from "./base/types"
|
|
20
21
|
|
|
21
22
|
const sqlServer = require("mssql")
|
|
22
23
|
const DEFAULT_SCHEMA = "dbo"
|
|
@@ -31,13 +32,6 @@ interface MSSQLConfig {
|
|
|
31
32
|
encrypt?: boolean
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
interface TablesResponse {
|
|
35
|
-
TABLE_CATALOG: string
|
|
36
|
-
TABLE_SCHEMA: string
|
|
37
|
-
TABLE_NAME: string
|
|
38
|
-
TABLE_TYPE: string
|
|
39
|
-
}
|
|
40
|
-
|
|
41
35
|
const SCHEMA: Integration = {
|
|
42
36
|
docs: "https://github.com/tediousjs/node-mssql",
|
|
43
37
|
plus: true,
|
|
@@ -210,7 +204,7 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|
|
210
204
|
*/
|
|
211
205
|
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
|
|
212
206
|
await this.connect()
|
|
213
|
-
let tableInfo:
|
|
207
|
+
let tableInfo: MSSQLTablesResponse[] = await this.runSQL(this.TABLES_SQL)
|
|
214
208
|
if (tableInfo == null || !Array.isArray(tableInfo)) {
|
|
215
209
|
throw "Unable to get list of tables in database"
|
|
216
210
|
}
|
|
@@ -228,15 +222,20 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|
|
228
222
|
// find primary key constraints
|
|
229
223
|
const constraints = await this.runSQL(this.getConstraintsSQL(tableName))
|
|
230
224
|
// find the computed and identity columns (auto columns)
|
|
231
|
-
const columns = await this.runSQL(
|
|
225
|
+
const columns: MSSQLColumn[] = await this.runSQL(
|
|
226
|
+
this.getAutoColumnsSQL(tableName)
|
|
227
|
+
)
|
|
232
228
|
const primaryKeys = constraints
|
|
233
229
|
.filter(
|
|
234
230
|
(constraint: any) => constraint.CONSTRAINT_TYPE === "PRIMARY KEY"
|
|
235
231
|
)
|
|
236
232
|
.map((constraint: any) => constraint.COLUMN_NAME)
|
|
237
233
|
const autoColumns = columns
|
|
238
|
-
.filter(
|
|
239
|
-
.map(
|
|
234
|
+
.filter(col => col.IS_COMPUTED || col.IS_IDENTITY)
|
|
235
|
+
.map(col => col.COLUMN_NAME)
|
|
236
|
+
const requiredColumns = columns
|
|
237
|
+
.filter(col => col.IS_NULLABLE === "NO")
|
|
238
|
+
.map(col => col.COLUMN_NAME)
|
|
240
239
|
|
|
241
240
|
let schema: TableSchema = {}
|
|
242
241
|
for (let def of definition) {
|
|
@@ -245,8 +244,11 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|
|
245
244
|
continue
|
|
246
245
|
}
|
|
247
246
|
schema[name] = {
|
|
248
|
-
autocolumn: !!autoColumns.find(
|
|
247
|
+
autocolumn: !!autoColumns.find(col => col === name),
|
|
249
248
|
name: name,
|
|
249
|
+
constraints: {
|
|
250
|
+
presence: requiredColumns.find(col => col === name),
|
|
251
|
+
},
|
|
250
252
|
...convertSqlType(def.DATA_TYPE),
|
|
251
253
|
externalType: def.DATA_TYPE,
|
|
252
254
|
}
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
import dayjs from "dayjs"
|
|
19
19
|
const { NUMBER_REGEX } = require("../utilities")
|
|
20
20
|
import Sql from "./base/sql"
|
|
21
|
+
import { MySQLColumn } from "./base/types"
|
|
21
22
|
|
|
22
23
|
const mysql = require("mysql2/promise")
|
|
23
24
|
|
|
@@ -203,11 +204,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
|
|
|
203
204
|
|
|
204
205
|
try {
|
|
205
206
|
// get the tables first
|
|
206
|
-
const tablesResp = await this.internalQuery(
|
|
207
|
+
const tablesResp: Record<string, string>[] = await this.internalQuery(
|
|
207
208
|
{ sql: "SHOW TABLES;" },
|
|
208
209
|
{ connect: false }
|
|
209
210
|
)
|
|
210
|
-
const tableNames = tablesResp.map(
|
|
211
|
+
const tableNames: string[] = tablesResp.map(
|
|
211
212
|
(obj: any) =>
|
|
212
213
|
obj[`Tables_in_${database}`] ||
|
|
213
214
|
obj[`Tables_in_${database.toLowerCase()}`]
|
|
@@ -215,7 +216,7 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
|
|
|
215
216
|
for (let tableName of tableNames) {
|
|
216
217
|
const primaryKeys = []
|
|
217
218
|
const schema: TableSchema = {}
|
|
218
|
-
const descResp = await this.internalQuery(
|
|
219
|
+
const descResp: MySQLColumn[] = await this.internalQuery(
|
|
219
220
|
{ sql: `DESCRIBE \`${tableName}\`;` },
|
|
220
221
|
{ connect: false }
|
|
221
222
|
)
|
|
@@ -24,6 +24,12 @@ import {
|
|
|
24
24
|
ExecuteOptions,
|
|
25
25
|
Result,
|
|
26
26
|
} from "oracledb"
|
|
27
|
+
import {
|
|
28
|
+
OracleTable,
|
|
29
|
+
OracleColumn,
|
|
30
|
+
OracleColumnsResponse,
|
|
31
|
+
OracleConstraint,
|
|
32
|
+
} from "./base/types"
|
|
27
33
|
let oracledb: any
|
|
28
34
|
try {
|
|
29
35
|
oracledb = require("oracledb")
|
|
@@ -89,50 +95,6 @@ const SCHEMA: Integration = {
|
|
|
89
95
|
|
|
90
96
|
const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"]
|
|
91
97
|
|
|
92
|
-
/**
|
|
93
|
-
* Raw query response
|
|
94
|
-
*/
|
|
95
|
-
interface ColumnsResponse {
|
|
96
|
-
TABLE_NAME: string
|
|
97
|
-
COLUMN_NAME: string
|
|
98
|
-
DATA_TYPE: string
|
|
99
|
-
DATA_DEFAULT: string | null
|
|
100
|
-
COLUMN_ID: number
|
|
101
|
-
CONSTRAINT_NAME: string | null
|
|
102
|
-
CONSTRAINT_TYPE: string | null
|
|
103
|
-
R_CONSTRAINT_NAME: string | null
|
|
104
|
-
SEARCH_CONDITION: string | null
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* An oracle constraint
|
|
109
|
-
*/
|
|
110
|
-
interface OracleConstraint {
|
|
111
|
-
name: string
|
|
112
|
-
type: string
|
|
113
|
-
relatedConstraintName: string | null
|
|
114
|
-
searchCondition: string | null
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* An oracle column and it's related constraints
|
|
119
|
-
*/
|
|
120
|
-
interface OracleColumn {
|
|
121
|
-
name: string
|
|
122
|
-
type: string
|
|
123
|
-
default: string | null
|
|
124
|
-
id: number
|
|
125
|
-
constraints: { [key: string]: OracleConstraint }
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* An oracle table and it's related columns
|
|
130
|
-
*/
|
|
131
|
-
interface OracleTable {
|
|
132
|
-
name: string
|
|
133
|
-
columns: { [key: string]: OracleColumn }
|
|
134
|
-
}
|
|
135
|
-
|
|
136
98
|
const OracleContraintTypes = {
|
|
137
99
|
PRIMARY: "P",
|
|
138
100
|
NOT_NULL_OR_CHECK: "C",
|
|
@@ -195,7 +157,7 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|
|
195
157
|
/**
|
|
196
158
|
* Map the flat tabular columns and constraints data into a nested object
|
|
197
159
|
*/
|
|
198
|
-
private mapColumns(result: Result<
|
|
160
|
+
private mapColumns(result: Result<OracleColumnsResponse>): {
|
|
199
161
|
[key: string]: OracleTable
|
|
200
162
|
} {
|
|
201
163
|
const oracleTables: { [key: string]: OracleTable } = {}
|
|
@@ -299,7 +261,7 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|
|
299
261
|
* @param entities - the tables that are to be built
|
|
300
262
|
*/
|
|
301
263
|
async buildSchema(datasourceId: string, entities: Record<string, Table>) {
|
|
302
|
-
const columnsResponse = await this.internalQuery<
|
|
264
|
+
const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
|
|
303
265
|
sql: this.COLUMNS_SQL,
|
|
304
266
|
})
|
|
305
267
|
const oracleTables = this.mapColumns(columnsResponse)
|
|
@@ -334,6 +296,9 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|
|
334
296
|
fieldSchema = {
|
|
335
297
|
autocolumn: OracleIntegration.isAutoColumn(oracleColumn),
|
|
336
298
|
name: columnName,
|
|
299
|
+
constraints: {
|
|
300
|
+
presence: false,
|
|
301
|
+
},
|
|
337
302
|
...this.internalConvertType(oracleColumn),
|
|
338
303
|
}
|
|
339
304
|
table.schema[columnName] = fieldSchema
|
|
@@ -343,6 +308,12 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|
|
343
308
|
Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
|
|
344
309
|
if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
|
|
345
310
|
table.primary!.push(columnName)
|
|
311
|
+
} else if (
|
|
312
|
+
oracleConstraint.type === OracleContraintTypes.NOT_NULL_OR_CHECK
|
|
313
|
+
) {
|
|
314
|
+
table.schema[columnName].constraints = {
|
|
315
|
+
presence: true,
|
|
316
|
+
}
|
|
346
317
|
}
|
|
347
318
|
})
|
|
348
319
|
})
|
|
@@ -15,9 +15,10 @@ import {
|
|
|
15
15
|
SqlClient,
|
|
16
16
|
} from "./utils"
|
|
17
17
|
import Sql from "./base/sql"
|
|
18
|
+
import { PostgresColumn } from "./base/types"
|
|
19
|
+
import { escapeDangerousCharacters } from "../utilities"
|
|
18
20
|
|
|
19
21
|
const { Client, types } = require("pg")
|
|
20
|
-
const { escapeDangerousCharacters } = require("../utilities")
|
|
21
22
|
|
|
22
23
|
// Return "date" and "timestamp" types as plain strings.
|
|
23
24
|
// This lets us reference the original stored timezone.
|
|
@@ -237,7 +238,8 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
|
237
238
|
}
|
|
238
239
|
|
|
239
240
|
try {
|
|
240
|
-
const columnsResponse
|
|
241
|
+
const columnsResponse: { rows: PostgresColumn[] } =
|
|
242
|
+
await this.client.query(this.COLUMNS_SQL)
|
|
241
243
|
|
|
242
244
|
const tables: { [key: string]: Table } = {}
|
|
243
245
|
|
|
@@ -260,6 +262,9 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
|
260
262
|
column.identity_start ||
|
|
261
263
|
column.identity_increment
|
|
262
264
|
)
|
|
265
|
+
const constraints = {
|
|
266
|
+
presence: column.is_nullable === "NO",
|
|
267
|
+
}
|
|
263
268
|
const hasDefault =
|
|
264
269
|
typeof column.column_default === "string" &&
|
|
265
270
|
column.column_default.startsWith("nextval")
|
|
@@ -269,6 +274,7 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
|
269
274
|
tables[tableName].schema[columnName] = {
|
|
270
275
|
autocolumn: isAuto,
|
|
271
276
|
name: columnName,
|
|
277
|
+
constraints,
|
|
272
278
|
...convertSqlType(column.data_type),
|
|
273
279
|
externalType: column.data_type,
|
|
274
280
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { db as dbCore } from "@budibase/backend-core"
|
|
2
|
-
import
|
|
2
|
+
import sdk from "../../sdk"
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Date:
|
|
@@ -20,14 +20,7 @@ export const run = async (appDb: any) => {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
if (!metadata.url) {
|
|
23
|
-
|
|
24
|
-
request: {
|
|
25
|
-
body: {
|
|
26
|
-
name: metadata.name,
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
}
|
|
30
|
-
metadata.url = getAppUrl(context)
|
|
23
|
+
metadata.url = sdk.applications.getAppUrl({ name: metadata.name })
|
|
31
24
|
console.log(`Adding url to app: ${metadata.url}`)
|
|
32
25
|
await appDb.put(metadata)
|
|
33
26
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import env from "../../../environment"
|
|
2
|
+
import { db as dbCore, context } from "@budibase/backend-core"
|
|
3
|
+
import sdk from "../../"
|
|
4
|
+
|
|
5
|
+
export async function syncApp(appId: string) {
|
|
6
|
+
if (env.DISABLE_AUTO_PROD_APP_SYNC) {
|
|
7
|
+
return {
|
|
8
|
+
message:
|
|
9
|
+
"App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable.",
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (dbCore.isProdAppID(appId)) {
|
|
14
|
+
throw new Error("This action cannot be performed for production apps")
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// replicate prod to dev
|
|
18
|
+
const prodAppId = dbCore.getProdAppID(appId)
|
|
19
|
+
|
|
20
|
+
// specific case, want to make sure setup is skipped
|
|
21
|
+
const prodDb = context.getProdAppDB({ skip_setup: true })
|
|
22
|
+
const exists = await prodDb.exists()
|
|
23
|
+
if (!exists) {
|
|
24
|
+
// the database doesn't exist. Don't replicate
|
|
25
|
+
return {
|
|
26
|
+
message: "App sync not required, app not deployed.",
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const replication = new dbCore.Replication({
|
|
31
|
+
source: prodAppId,
|
|
32
|
+
target: appId,
|
|
33
|
+
})
|
|
34
|
+
let error
|
|
35
|
+
try {
|
|
36
|
+
await replication.replicate(replication.appReplicateOpts())
|
|
37
|
+
} catch (err) {
|
|
38
|
+
error = err
|
|
39
|
+
} finally {
|
|
40
|
+
await replication.close()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// sync the users
|
|
44
|
+
await sdk.users.syncGlobalUsers()
|
|
45
|
+
|
|
46
|
+
if (error) {
|
|
47
|
+
throw error
|
|
48
|
+
} else {
|
|
49
|
+
return {
|
|
50
|
+
message: "App sync completed successfully.",
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const URL_REGEX_SLASH = /\/|\\/g
|
|
2
|
+
|
|
3
|
+
export function getAppUrl(opts?: { name?: string; url?: string }) {
|
|
4
|
+
// construct the url
|
|
5
|
+
let url
|
|
6
|
+
if (opts?.url) {
|
|
7
|
+
// if the url is provided, use that
|
|
8
|
+
url = encodeURI(opts?.url)
|
|
9
|
+
} else if (opts?.name) {
|
|
10
|
+
// otherwise use the name
|
|
11
|
+
url = encodeURI(`${opts?.name}`)
|
|
12
|
+
}
|
|
13
|
+
if (url) {
|
|
14
|
+
url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
|
|
15
|
+
}
|
|
16
|
+
return url as string
|
|
17
|
+
}
|
package/src/sdk/index.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { default as backups } from "./app/backups"
|
|
2
2
|
import { default as tables } from "./app/tables"
|
|
3
3
|
import { default as automations } from "./app/automations"
|
|
4
|
+
import { default as applications } from "./app/applications"
|
|
5
|
+
import { default as users } from "./users"
|
|
4
6
|
|
|
5
7
|
const sdk = {
|
|
6
8
|
backups,
|
|
7
9
|
tables,
|
|
8
10
|
automations,
|
|
11
|
+
applications,
|
|
12
|
+
users,
|
|
9
13
|
}
|
|
10
14
|
|
|
11
15
|
// default export for TS
|
|
12
16
|
export default sdk
|
|
13
|
-
|
|
14
|
-
// default export for JS
|
|
15
|
-
module.exports = sdk
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { getGlobalUsers } from "../../utilities/global"
|
|
2
|
+
import { context, roles as rolesCore } from "@budibase/backend-core"
|
|
3
|
+
import {
|
|
4
|
+
generateUserMetadataID,
|
|
5
|
+
getUserMetadataParams,
|
|
6
|
+
InternalTables,
|
|
7
|
+
} from "../../db/utils"
|
|
8
|
+
import { isEqual } from "lodash"
|
|
9
|
+
|
|
10
|
+
export function combineMetadataAndUser(user: any, metadata: any) {
|
|
11
|
+
// skip users with no access
|
|
12
|
+
if (user.roleId === rolesCore.BUILTIN_ROLE_IDS.PUBLIC) {
|
|
13
|
+
return null
|
|
14
|
+
}
|
|
15
|
+
delete user._rev
|
|
16
|
+
const metadataId = generateUserMetadataID(user._id)
|
|
17
|
+
const newDoc = {
|
|
18
|
+
...user,
|
|
19
|
+
_id: metadataId,
|
|
20
|
+
tableId: InternalTables.USER_METADATA,
|
|
21
|
+
}
|
|
22
|
+
const found = Array.isArray(metadata)
|
|
23
|
+
? metadata.find(doc => doc._id === metadataId)
|
|
24
|
+
: metadata
|
|
25
|
+
// copy rev over for the purposes of equality check
|
|
26
|
+
if (found) {
|
|
27
|
+
newDoc._rev = found._rev
|
|
28
|
+
}
|
|
29
|
+
if (found == null || !isEqual(newDoc, found)) {
|
|
30
|
+
return {
|
|
31
|
+
...found,
|
|
32
|
+
...newDoc,
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export async function rawUserMetadata() {
|
|
39
|
+
const db = context.getAppDB()
|
|
40
|
+
return (
|
|
41
|
+
await db.allDocs(
|
|
42
|
+
getUserMetadataParams(null, {
|
|
43
|
+
include_docs: true,
|
|
44
|
+
})
|
|
45
|
+
)
|
|
46
|
+
).rows.map(row => row.doc)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function syncGlobalUsers() {
|
|
50
|
+
// sync user metadata
|
|
51
|
+
const db = context.getAppDB()
|
|
52
|
+
const [users, metadata] = await Promise.all([
|
|
53
|
+
getGlobalUsers(),
|
|
54
|
+
rawUserMetadata(),
|
|
55
|
+
])
|
|
56
|
+
const toWrite = []
|
|
57
|
+
for (let user of users) {
|
|
58
|
+
const combined = await combineMetadataAndUser(user, metadata)
|
|
59
|
+
if (combined) {
|
|
60
|
+
toWrite.push(combined)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await db.bulkDocs(toWrite)
|
|
64
|
+
}
|
|
@@ -3,7 +3,7 @@ import env from "../environment"
|
|
|
3
3
|
import { checkSlashesInUrl } from "./index"
|
|
4
4
|
import { db as dbCore, constants, tenancy } from "@budibase/backend-core"
|
|
5
5
|
import { updateAppRole } from "./global"
|
|
6
|
-
import { BBContext,
|
|
6
|
+
import { BBContext, User } from "@budibase/types"
|
|
7
7
|
|
|
8
8
|
export function request(ctx?: BBContext, request?: any) {
|
|
9
9
|
if (!request.headers) {
|
|
@@ -138,7 +138,7 @@ export async function deleteGlobalUser(ctx: BBContext) {
|
|
|
138
138
|
return checkResponse(response, "delete user", { ctx })
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
export async function readGlobalUser(ctx: BBContext) {
|
|
141
|
+
export async function readGlobalUser(ctx: BBContext): Promise<User> {
|
|
142
142
|
const response = await fetch(
|
|
143
143
|
checkSlashesInUrl(
|
|
144
144
|
env.WORKER_URL + `/api/global/users/${ctx.params.userId}`
|