@budibase/server 2.1.43-alpha.7 → 2.1.43-alpha.9
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.183b181c.css +6 -0
- package/builder/assets/{index.cb835f03.js → index.1c5913ba.js} +253 -253
- package/builder/index.html +2 -2
- package/coverage/clover.xml +543 -515
- package/coverage/coverage-final.json +21 -16
- package/coverage/lcov-report/index.html +64 -34
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/application.ts.html +86 -233
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +5 -2
- package/coverage/lcov-report/src/api/controllers/component.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/index.html +28 -28
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +1 -1
- 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 +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/role.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/user.ts.html +13 -184
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +1 -1
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/application.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/auth.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/automation.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/backup.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/component.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/dev.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/integration.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/layout.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/permission.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/query.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/role.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/routing.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/row.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/screen.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/static.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/table.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/templates.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/user.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/view.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/app.ts.html +1 -1
- package/coverage/lcov-report/src/automations/actions.ts.html +1 -1
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +1 -1
- package/coverage/lcov-report/src/automations/bullboard.ts.html +1 -1
- package/coverage/lcov-report/src/automations/index.html +1 -1
- package/coverage/lcov-report/src/automations/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/index.html +1 -1
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +1 -1
- package/coverage/lcov-report/src/automations/triggers.ts.html +1 -1
- package/coverage/lcov-report/src/automations/utils.ts.html +1 -1
- package/coverage/lcov-report/src/constants/index.html +1 -1
- package/coverage/lcov-report/src/constants/index.ts.html +1 -1
- package/coverage/lcov-report/src/constants/layouts.ts.html +1 -1
- package/coverage/lcov-report/src/constants/screens.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +1 -1
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +1 -1
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +1 -1
- package/coverage/lcov-report/src/db/index.html +1 -1
- package/coverage/lcov-report/src/db/index.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +1 -1
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +1 -1
- package/coverage/lcov-report/src/db/newid.ts.html +1 -1
- package/coverage/lcov-report/src/db/utils.ts.html +1 -1
- package/coverage/lcov-report/src/definitions/automations.ts.html +1 -1
- package/coverage/lcov-report/src/definitions/datasource.ts.html +1 -1
- package/coverage/lcov-report/src/definitions/index.html +1 -1
- package/coverage/lcov-report/src/environment.ts.html +1 -1
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +1 -1
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +1 -1
- package/coverage/lcov-report/src/events/index.html +1 -1
- package/coverage/lcov-report/src/events/index.ts.html +1 -1
- package/coverage/lcov-report/src/events/utils.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/index.html +1 -1
- package/coverage/lcov-report/src/integrations/base/query.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/firebase.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/index.html +1 -1
- package/coverage/lcov-report/src/integrations/index.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/mysql.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/oracle.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/postgres.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/integrations/rest.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/s3.ts.html +1 -1
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/authorized.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/builder.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/utils.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +8 -29
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/index.html +11 -11
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/index.html +1 -1
- package/coverage/lcov-report/src/migrations/index.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/src/threads/automation.ts.html +1 -1
- package/coverage/lcov-report/src/threads/index.html +1 -1
- package/coverage/lcov-report/src/threads/index.ts.html +1 -1
- package/coverage/lcov-report/src/threads/query.ts.html +1 -1
- package/coverage/lcov-report/src/threads/utils.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/csvParser.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +2 -2
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/global.ts.html +34 -34
- package/coverage/lcov-report/src/utilities/index.html +1 -1
- package/coverage/lcov-report/src/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/plugins.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/redis.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/security.ts.html +1 -1
- 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 +13 -13
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/users.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +1 -1
- package/coverage/lcov-report/src/watch.ts.html +1 -1
- package/coverage/lcov-report/src/websocket.ts.html +1 -1
- package/coverage/lcov.info +888 -844
- package/dist/api/controllers/application.js +419 -438
- package/dist/api/controllers/cloud.js +1 -0
- package/dist/api/controllers/user.js +7 -48
- 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/src/api/controllers/application.ts +55 -104
- package/src/api/controllers/cloud.ts +1 -0
- package/src/api/controllers/user.ts +4 -61
- package/src/api/routes/tests/application.spec.js +0 -1
- 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/builder/assets/index.0c44dac3.css +0 -6
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">88.8% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>246/277</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">68.03% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>83/122</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">92.85% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>39/42</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">88.38% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>236/267</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -665,56 +665,7 @@
|
|
|
665
665
|
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
666
|
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
667
|
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
-
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
-
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
-
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
-
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
-
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
-
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
-
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
-
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
-
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
-
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
-
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
-
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
-
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
-
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
-
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
-
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
-
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
-
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
-
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
-
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
-
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
-
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
-
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
-
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
-
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
-
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
-
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
-
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
-
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
-
<a name='L632'></a><a href='#L632'>632</a>
|
|
698
|
-
<a name='L633'></a><a href='#L633'>633</a>
|
|
699
|
-
<a name='L634'></a><a href='#L634'>634</a>
|
|
700
|
-
<a name='L635'></a><a href='#L635'>635</a>
|
|
701
|
-
<a name='L636'></a><a href='#L636'>636</a>
|
|
702
|
-
<a name='L637'></a><a href='#L637'>637</a>
|
|
703
|
-
<a name='L638'></a><a href='#L638'>638</a>
|
|
704
|
-
<a name='L639'></a><a href='#L639'>639</a>
|
|
705
|
-
<a name='L640'></a><a href='#L640'>640</a>
|
|
706
|
-
<a name='L641'></a><a href='#L641'>641</a>
|
|
707
|
-
<a name='L642'></a><a href='#L642'>642</a>
|
|
708
|
-
<a name='L643'></a><a href='#L643'>643</a>
|
|
709
|
-
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
|
-
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
|
-
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
-
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
-
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
-
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
-
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
-
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
-
<a name='L652'></a><a href='#L652'>652</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">45x</span>
|
|
668
|
+
<a name='L603'></a><a href='#L603'>603</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">45x</span>
|
|
718
669
|
<span class="cline-any cline-yes">45x</span>
|
|
719
670
|
<span class="cline-any cline-yes">45x</span>
|
|
720
671
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -742,7 +693,6 @@
|
|
|
742
693
|
<span class="cline-any cline-neutral"> </span>
|
|
743
694
|
<span class="cline-any cline-yes">45x</span>
|
|
744
695
|
<span class="cline-any cline-yes">45x</span>
|
|
745
|
-
<span class="cline-any cline-neutral"> </span>
|
|
746
696
|
<span class="cline-any cline-yes">45x</span>
|
|
747
697
|
<span class="cline-any cline-yes">45x</span>
|
|
748
698
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -760,12 +710,16 @@
|
|
|
760
710
|
<span class="cline-any cline-yes">45x</span>
|
|
761
711
|
<span class="cline-any cline-yes">45x</span>
|
|
762
712
|
<span class="cline-any cline-yes">45x</span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
720
|
<span class="cline-any cline-yes">45x</span>
|
|
764
721
|
<span class="cline-any cline-yes">45x</span>
|
|
765
722
|
<span class="cline-any cline-yes">45x</span>
|
|
766
|
-
<span class="cline-any cline-yes">45x</span>
|
|
767
|
-
<span class="cline-any cline-neutral"> </span>
|
|
768
|
-
<span class="cline-any cline-yes">45x</span>
|
|
769
723
|
<span class="cline-any cline-neutral"> </span>
|
|
770
724
|
<span class="cline-any cline-neutral"> </span>
|
|
771
725
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -796,23 +750,12 @@
|
|
|
796
750
|
<span class="cline-any cline-neutral"> </span>
|
|
797
751
|
<span class="cline-any cline-neutral"> </span>
|
|
798
752
|
<span class="cline-any cline-neutral"> </span>
|
|
799
|
-
<span class="cline-any cline-yes">45x</span>
|
|
800
|
-
<span class="cline-any cline-neutral"> </span>
|
|
801
|
-
<span class="cline-any cline-neutral"> </span>
|
|
802
|
-
<span class="cline-any cline-yes">254x</span>
|
|
803
753
|
<span class="cline-any cline-neutral"> </span>
|
|
804
|
-
<span class="cline-any cline-yes">1x</span>
|
|
805
|
-
<span class="cline-any cline-yes">253x</span>
|
|
806
754
|
<span class="cline-any cline-neutral"> </span>
|
|
807
|
-
<span class="cline-any cline-yes">253x</span>
|
|
808
755
|
<span class="cline-any cline-neutral"> </span>
|
|
809
|
-
<span class="cline-any cline-yes">254x</span>
|
|
810
|
-
<span class="cline-any cline-yes">254x</span>
|
|
811
756
|
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-yes">254x</span>
|
|
813
757
|
<span class="cline-any cline-neutral"> </span>
|
|
814
758
|
<span class="cline-any cline-neutral"> </span>
|
|
815
|
-
<span class="cline-any cline-yes">45x</span>
|
|
816
759
|
<span class="cline-any cline-yes">253x</span>
|
|
817
760
|
<span class="cline-any cline-yes">4x</span>
|
|
818
761
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -821,7 +764,7 @@
|
|
|
821
764
|
<span class="cline-any cline-neutral"> </span>
|
|
822
765
|
<span class="cline-any cline-neutral"> </span>
|
|
823
766
|
<span class="cline-any cline-neutral"> </span>
|
|
824
|
-
<span class="cline-any cline-
|
|
767
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
768
|
<span class="cline-any cline-neutral"> </span>
|
|
826
769
|
<span class="cline-any cline-neutral"> </span>
|
|
827
770
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -881,7 +824,7 @@
|
|
|
881
824
|
<span class="cline-any cline-yes">250x</span>
|
|
882
825
|
<span class="cline-any cline-neutral"> </span>
|
|
883
826
|
<span class="cline-any cline-neutral"> </span>
|
|
884
|
-
<span class="cline-any cline-
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
885
828
|
<span class="cline-any cline-no"> </span>
|
|
886
829
|
<span class="cline-any cline-neutral"> </span>
|
|
887
830
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -952,6 +895,7 @@
|
|
|
952
895
|
<span class="cline-any cline-neutral"> </span>
|
|
953
896
|
<span class="cline-any cline-neutral"> </span>
|
|
954
897
|
<span class="cline-any cline-neutral"> </span>
|
|
898
|
+
<span class="cline-any cline-neutral"> </span>
|
|
955
899
|
<span class="cline-any cline-yes">250x</span>
|
|
956
900
|
<span class="cline-any cline-yes">250x</span>
|
|
957
901
|
<span class="cline-any cline-yes">250x</span>
|
|
@@ -1047,7 +991,7 @@
|
|
|
1047
991
|
<span class="cline-any cline-yes">250x</span>
|
|
1048
992
|
<span class="cline-any cline-neutral"> </span>
|
|
1049
993
|
<span class="cline-any cline-neutral"> </span>
|
|
1050
|
-
<span class="cline-any cline-
|
|
994
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1051
995
|
<span class="cline-any cline-yes">250x</span>
|
|
1052
996
|
<span class="cline-any cline-neutral"> </span>
|
|
1053
997
|
<span class="cline-any cline-yes">250x</span>
|
|
@@ -1072,7 +1016,7 @@
|
|
|
1072
1016
|
<span class="cline-any cline-neutral"> </span>
|
|
1073
1017
|
<span class="cline-any cline-neutral"> </span>
|
|
1074
1018
|
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
-
<span class="cline-any cline-
|
|
1019
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1076
1020
|
<span class="cline-any cline-yes">250x</span>
|
|
1077
1021
|
<span class="cline-any cline-yes">250x</span>
|
|
1078
1022
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1103,7 +1047,7 @@
|
|
|
1103
1047
|
<span class="cline-any cline-neutral"> </span>
|
|
1104
1048
|
<span class="cline-any cline-neutral"> </span>
|
|
1105
1049
|
<span class="cline-any cline-neutral"> </span>
|
|
1106
|
-
<span class="cline-any cline-yes">
|
|
1050
|
+
<span class="cline-any cline-yes">45x</span>
|
|
1107
1051
|
<span class="cline-any cline-yes">250x</span>
|
|
1108
1052
|
<span class="cline-any cline-yes">250x</span>
|
|
1109
1053
|
<span class="cline-any cline-yes">250x</span>
|
|
@@ -1119,6 +1063,7 @@
|
|
|
1119
1063
|
<span class="cline-any cline-yes">3x</span>
|
|
1120
1064
|
<span class="cline-any cline-yes">3x</span>
|
|
1121
1065
|
<span class="cline-any cline-yes">3x</span>
|
|
1066
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1122
1067
|
<span class="cline-any cline-neutral"> </span>
|
|
1123
1068
|
<span class="cline-any cline-yes">3x</span>
|
|
1124
1069
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -1182,12 +1127,15 @@
|
|
|
1182
1127
|
<span class="cline-any cline-yes">1x</span>
|
|
1183
1128
|
<span class="cline-any cline-neutral"> </span>
|
|
1184
1129
|
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
-
<span class="cline-any cline-
|
|
1130
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1186
1131
|
<span class="cline-any cline-yes">23x</span>
|
|
1187
1132
|
<span class="cline-any cline-yes">23x</span>
|
|
1188
1133
|
<span class="cline-any cline-neutral"> </span>
|
|
1189
1134
|
<span class="cline-any cline-yes">23x</span>
|
|
1190
1135
|
<span class="cline-any cline-yes">1x</span>
|
|
1136
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1138
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1191
1139
|
<span class="cline-any cline-neutral"> </span>
|
|
1192
1140
|
<span class="cline-any cline-neutral"> </span>
|
|
1193
1141
|
<span class="cline-any cline-yes">23x</span>
|
|
@@ -1217,12 +1165,12 @@
|
|
|
1217
1165
|
<span class="cline-any cline-yes">23x</span>
|
|
1218
1166
|
<span class="cline-any cline-neutral"> </span>
|
|
1219
1167
|
<span class="cline-any cline-neutral"> </span>
|
|
1220
|
-
<span class="cline-any cline-
|
|
1168
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1221
1169
|
<span class="cline-any cline-yes">23x</span>
|
|
1222
1170
|
<span class="cline-any cline-yes">23x</span>
|
|
1223
1171
|
<span class="cline-any cline-neutral"> </span>
|
|
1224
1172
|
<span class="cline-any cline-neutral"> </span>
|
|
1225
|
-
<span class="cline-any cline-
|
|
1173
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1226
1174
|
<span class="cline-any cline-yes">23x</span>
|
|
1227
1175
|
<span class="cline-any cline-yes">23x</span>
|
|
1228
1176
|
<span class="cline-any cline-yes">23x</span>
|
|
@@ -1243,56 +1191,10 @@
|
|
|
1243
1191
|
<span class="cline-any cline-no"> </span>
|
|
1244
1192
|
<span class="cline-any cline-no"> </span>
|
|
1245
1193
|
<span class="cline-any cline-neutral"> </span>
|
|
1246
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1247
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1248
|
-
<span class="cline-any cline-no"> </span>
|
|
1249
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1250
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1251
|
-
<span class="cline-any cline-no"> </span>
|
|
1252
|
-
<span class="cline-any cline-no"> </span>
|
|
1253
|
-
<span class="cline-any cline-no"> </span>
|
|
1254
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1255
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1256
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1257
|
-
<span class="cline-any cline-no"> </span>
|
|
1258
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1259
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
-
<span class="cline-any cline-no"> </span>
|
|
1261
|
-
<span class="cline-any cline-no"> </span>
|
|
1262
|
-
<span class="cline-any cline-no"> </span>
|
|
1263
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1264
|
-
<span class="cline-any cline-no"> </span>
|
|
1265
|
-
<span class="cline-any cline-no"> </span>
|
|
1266
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1267
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1268
|
-
<span class="cline-any cline-no"> </span>
|
|
1269
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1271
|
-
<span class="cline-any cline-no"> </span>
|
|
1272
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1274
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1275
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1276
|
-
<span class="cline-any cline-no"> </span>
|
|
1277
|
-
<span class="cline-any cline-no"> </span>
|
|
1278
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1279
|
-
<span class="cline-any cline-no"> </span>
|
|
1280
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1281
|
-
<span class="cline-any cline-no"> </span>
|
|
1282
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1284
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
-
<span class="cline-any cline-no"> </span>
|
|
1286
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1287
|
-
<span class="cline-any cline-no"> </span>
|
|
1288
|
-
<span class="cline-any cline-no"> </span>
|
|
1289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1290
1194
|
<span class="cline-any cline-no"> </span>
|
|
1291
1195
|
<span class="cline-any cline-neutral"> </span>
|
|
1292
1196
|
<span class="cline-any cline-neutral"> </span>
|
|
1293
1197
|
<span class="cline-any cline-neutral"> </span>
|
|
1294
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1296
1198
|
<span class="cline-any cline-yes">45x</span>
|
|
1297
1199
|
<span class="cline-any cline-yes">6x</span>
|
|
1298
1200
|
<span class="cline-any cline-yes">6x</span>
|
|
@@ -1314,7 +1216,7 @@
|
|
|
1314
1216
|
<span class="cline-any cline-neutral"> </span>
|
|
1315
1217
|
<span class="cline-any cline-neutral"> </span>
|
|
1316
1218
|
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
-
<span class="cline-any cline-
|
|
1219
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1318
1220
|
<span class="cline-any cline-yes">1x</span>
|
|
1319
1221
|
<span class="cline-any cline-yes">1x</span>
|
|
1320
1222
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -1393,7 +1295,6 @@ import {
|
|
|
1393
1295
|
} from "@budibase/backend-core"
|
|
1394
1296
|
import { USERS_TABLE_SCHEMA } from "../../constants"
|
|
1395
1297
|
import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
|
|
1396
|
-
|
|
1397
1298
|
import { removeAppFromUserRoles } from "../../utilities/workerRequests"
|
|
1398
1299
|
import {
|
|
1399
1300
|
clientLibraryPath,
|
|
@@ -1406,18 +1307,22 @@ import {
|
|
|
1406
1307
|
backupClientLibrary,
|
|
1407
1308
|
revertClientLibrary,
|
|
1408
1309
|
} from "../../utilities/fileSystem/clientLibrary"
|
|
1409
|
-
import { syncGlobalUsers } from "./user"
|
|
1410
1310
|
import { cleanupAutomations } from "../../automations/utils"
|
|
1411
1311
|
import { checkAppMetadata } from "../../automations/logging"
|
|
1412
1312
|
import { getUniqueRows } from "../../utilities/usageQuota/rows"
|
|
1413
1313
|
import { quotas, groups } from "@budibase/pro"
|
|
1414
|
-
import {
|
|
1314
|
+
import {
|
|
1315
|
+
App,
|
|
1316
|
+
Layout,
|
|
1317
|
+
Screen,
|
|
1318
|
+
MigrationType,
|
|
1319
|
+
BBContext,
|
|
1320
|
+
Database,
|
|
1321
|
+
} from "@budibase/types"
|
|
1415
1322
|
import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
|
|
1416
1323
|
import { enrichPluginURLs } from "../../utilities/plugins"
|
|
1417
1324
|
import sdk from "../../sdk"
|
|
1418
1325
|
|
|
1419
|
-
const URL_REGEX_SLASH = /\/|\\/g
|
|
1420
|
-
|
|
1421
1326
|
// utility function, need to do away with this
|
|
1422
1327
|
async function getLayouts() {
|
|
1423
1328
|
const db = context.getAppDB()
|
|
@@ -1441,29 +1346,18 @@ async function getScreens() {
|
|
|
1441
1346
|
).rows.map((row: any) => row.doc)
|
|
1442
1347
|
}
|
|
1443
1348
|
|
|
1444
|
-
function getUserRoleId(ctx:
|
|
1445
|
-
return !ctx.user
|
|
1349
|
+
function getUserRoleId(ctx: BBContext) {
|
|
1350
|
+
return !ctx.user<span class="branch-0 cbranch-no" title="branch not covered" >?.r</span>ole || !ctx.user.role._id
|
|
1446
1351
|
? <span class="branch-0 cbranch-no" title="branch not covered" >roles.BUILTIN_ROLE_IDS.PUBLIC</span>
|
|
1447
1352
|
: ctx.user.role._id
|
|
1448
1353
|
}
|
|
1449
1354
|
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
} else if (ctx.request.body.name) {
|
|
1457
|
-
// otherwise use the name
|
|
1458
|
-
url = encodeURI(`${ctx.request.body.name}`)
|
|
1459
|
-
}
|
|
1460
|
-
if (url) {
|
|
1461
|
-
url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
|
|
1462
|
-
}
|
|
1463
|
-
return url
|
|
1464
|
-
}
|
|
1465
|
-
|
|
1466
|
-
const checkAppUrl = (ctx: any, apps: any, url: any, currentAppId?: string) => {
|
|
1355
|
+
function checkAppUrl(
|
|
1356
|
+
ctx: BBContext,
|
|
1357
|
+
apps: App[],
|
|
1358
|
+
url: string,
|
|
1359
|
+
currentAppId?: string
|
|
1360
|
+
) {
|
|
1467
1361
|
if (currentAppId) {
|
|
1468
1362
|
apps = apps.filter((app: any) => app.appId !== currentAppId)
|
|
1469
1363
|
}
|
|
@@ -1472,12 +1366,12 @@ const checkAppUrl = (ctx: any, apps: any, url: any, currentAppId?: string) =>
|
|
|
1472
1366
|
}
|
|
1473
1367
|
}
|
|
1474
1368
|
|
|
1475
|
-
|
|
1476
|
-
ctx:
|
|
1477
|
-
apps:
|
|
1478
|
-
name:
|
|
1369
|
+
function checkAppName(
|
|
1370
|
+
ctx: BBContext,
|
|
1371
|
+
apps: App[],
|
|
1372
|
+
name: string,
|
|
1479
1373
|
currentAppId?: string
|
|
1480
|
-
)
|
|
1374
|
+
) {
|
|
1481
1375
|
// TODO: Replace with Joi
|
|
1482
1376
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!name) {
|
|
1483
1377
|
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "Name is required")</span>
|
|
@@ -1532,14 +1426,14 @@ async function createInstance(template: any, includeSampleData: boolean) {
|
|
|
1532
1426
|
return { _id: appId }
|
|
1533
1427
|
}
|
|
1534
1428
|
|
|
1535
|
-
|
|
1429
|
+
async function <span class="fstat-no" title="function not covered" >addDefaultTables(</span>db: Database) {
|
|
1536
1430
|
const defaultDbDocs = <span class="cstat-no" title="statement not covered" >buildDefaultDocs()</span>
|
|
1537
1431
|
|
|
1538
1432
|
// add in the default db data docs - tables, datasource, rows and links
|
|
1539
1433
|
<span class="cstat-no" title="statement not covered" > await db.bulkDocs([...defaultDbDocs])</span>
|
|
1540
1434
|
}
|
|
1541
1435
|
|
|
1542
|
-
export
|
|
1436
|
+
export async function fetch(ctx: BBContext) {
|
|
1543
1437
|
const dev = ctx.query && ctx.query.status === AppStatus.DEV
|
|
1544
1438
|
const all = ctx.query && ctx.query.status === AppStatus.ALL
|
|
1545
1439
|
const apps = (await dbCore.getAllApps({ dev, all })) as App[]
|
|
@@ -1564,7 +1458,7 @@ export const fetch = async (ctx: any) => {
|
|
|
1564
1458
|
ctx.body = await checkAppMetadata(apps)
|
|
1565
1459
|
}
|
|
1566
1460
|
|
|
1567
|
-
export
|
|
1461
|
+
export async function fetchAppDefinition(ctx: BBContext) {
|
|
1568
1462
|
const layouts = await getLayouts()
|
|
1569
1463
|
const userRoleId = getUserRoleId(ctx)
|
|
1570
1464
|
const accessController = new roles.AccessController()
|
|
@@ -1579,7 +1473,7 @@ export const fetchAppDefinition = async (ctx: any) => {
|
|
|
1579
1473
|
}
|
|
1580
1474
|
}
|
|
1581
1475
|
|
|
1582
|
-
export
|
|
1476
|
+
export async function fetchAppPackage(ctx: BBContext) {
|
|
1583
1477
|
const db = context.getAppDB()
|
|
1584
1478
|
let application = await db.get(DocumentType.APP_METADATA)
|
|
1585
1479
|
const layouts = await getLayouts()
|
|
@@ -1589,7 +1483,7 @@ export const fetchAppPackage = async (ctx: any) => {
|
|
|
1589
1483
|
application.usedPlugins = enrichPluginURLs(application.usedPlugins)
|
|
1590
1484
|
|
|
1591
1485
|
// Only filter screens if the user is not a builder
|
|
1592
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!(ctx.user
|
|
1486
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!(ctx.user<span class="branch-0 cbranch-no" title="branch not covered" >?.b</span>uilder && ctx.user.builder.global)) {
|
|
1593
1487
|
const userRoleId = <span class="cstat-no" title="statement not covered" >getUserRoleId(ctx)</span>
|
|
1594
1488
|
const accessController = <span class="cstat-no" title="statement not covered" >new roles.AccessController()</span>
|
|
1595
1489
|
<span class="cstat-no" title="statement not covered" > screens = await accessController.checkScreensAccess(screens, userRoleId)</span>
|
|
@@ -1603,11 +1497,12 @@ export const fetchAppPackage = async (ctx: any) => {
|
|
|
1603
1497
|
}
|
|
1604
1498
|
}
|
|
1605
1499
|
|
|
1606
|
-
|
|
1607
|
-
const apps = await dbCore.getAllApps({ dev: true })
|
|
1608
|
-
const name = ctx.request.body.name
|
|
1500
|
+
async function performAppCreate(ctx: BBContext) {
|
|
1501
|
+
const apps = (await dbCore.getAllApps({ dev: true })) as App[]
|
|
1502
|
+
const name = ctx.request.body.name,
|
|
1503
|
+
possibleUrl = ctx.request.body.url
|
|
1609
1504
|
checkAppName(ctx, apps, name)
|
|
1610
|
-
const url = getAppUrl(
|
|
1505
|
+
const url = sdk.applications.getAppUrl({ name, url: possibleUrl })
|
|
1611
1506
|
checkAppUrl(ctx, apps, url)
|
|
1612
1507
|
|
|
1613
1508
|
const { useTemplate, templateKey, templateString } = ctx.request.body
|
|
@@ -1698,7 +1593,7 @@ const performAppCreate = async (ctx: any) => {
|
|
|
1698
1593
|
return newApplication
|
|
1699
1594
|
}
|
|
1700
1595
|
|
|
1701
|
-
|
|
1596
|
+
async function creationEvents(request: any, app: App) {
|
|
1702
1597
|
let creationFns: ((app: App) => Promise<void>)[] = []
|
|
1703
1598
|
|
|
1704
1599
|
const body = request.body
|
|
@@ -1723,7 +1618,7 @@ const creationEvents = async (request: any, app: App) => {
|
|
|
1723
1618
|
}
|
|
1724
1619
|
}
|
|
1725
1620
|
|
|
1726
|
-
|
|
1621
|
+
async function appPostCreate(ctx: BBContext, app: App) {
|
|
1727
1622
|
const tenantId = tenancy.getTenantId()
|
|
1728
1623
|
await migrations.backPopulateMigrations({
|
|
1729
1624
|
type: MigrationType.APP,
|
|
@@ -1744,7 +1639,7 @@ const appPostCreate = async (ctx: any, app: App) => {
|
|
|
1744
1639
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {</span>
|
|
1745
1640
|
// this import resulted in row usage exceeding the quota
|
|
1746
1641
|
// delete the app
|
|
1747
|
-
// skip pre and post
|
|
1642
|
+
// skip pre- and post-steps as no rows have been added to quotas yet
|
|
1748
1643
|
<span class="cstat-no" title="statement not covered" > ctx.params.appId = app.appId</span>
|
|
1749
1644
|
<span class="cstat-no" title="statement not covered" > await destroyApp(ctx)</span>
|
|
1750
1645
|
}
|
|
@@ -1754,7 +1649,7 @@ const appPostCreate = async (ctx: any, app: App) => {
|
|
|
1754
1649
|
}
|
|
1755
1650
|
}
|
|
1756
1651
|
|
|
1757
|
-
export
|
|
1652
|
+
export async function create(ctx: BBContext) {
|
|
1758
1653
|
const newApplication = await quotas.addApp(() => performAppCreate(ctx))
|
|
1759
1654
|
await appPostCreate(ctx, newApplication)
|
|
1760
1655
|
await cache.bustCache(cache.CacheKey.CHECKLIST)
|
|
@@ -1764,14 +1659,15 @@ export const create = async (ctx: any) => {
|
|
|
1764
1659
|
|
|
1765
1660
|
// This endpoint currently operates as a PATCH rather than a PUT
|
|
1766
1661
|
// Thus name and url fields are handled only if present
|
|
1767
|
-
export
|
|
1768
|
-
const apps = await dbCore.getAllApps({ dev: true })
|
|
1662
|
+
export async function update(ctx: BBContext) {
|
|
1663
|
+
const apps = (await dbCore.getAllApps({ dev: true })) as App[]
|
|
1769
1664
|
// validation
|
|
1770
|
-
const name = ctx.request.body.name
|
|
1665
|
+
const name = ctx.request.body.name,
|
|
1666
|
+
possibleUrl = ctx.request.body.url
|
|
1771
1667
|
if (name) {
|
|
1772
1668
|
checkAppName(ctx, apps, name, ctx.params.appId)
|
|
1773
1669
|
}
|
|
1774
|
-
const url = getAppUrl(
|
|
1670
|
+
const url = sdk.applications.getAppUrl({ name, url: possibleUrl })
|
|
1775
1671
|
if (url) {
|
|
1776
1672
|
checkAppUrl(ctx, apps, url, ctx.params.appId)
|
|
1777
1673
|
ctx.request.body.url = url
|
|
@@ -1783,7 +1679,7 @@ export const update = async (ctx: any) => {
|
|
|
1783
1679
|
ctx.body = app
|
|
1784
1680
|
}
|
|
1785
1681
|
|
|
1786
|
-
export
|
|
1682
|
+
export async function updateClient(ctx: BBContext) {
|
|
1787
1683
|
// Get current app version
|
|
1788
1684
|
const db = context.getAppDB()
|
|
1789
1685
|
const application = await db.get(DocumentType.APP_METADATA)
|
|
@@ -1807,7 +1703,7 @@ export const updateClient = async (ctx: any) => {
|
|
|
1807
1703
|
ctx.body = app
|
|
1808
1704
|
}
|
|
1809
1705
|
|
|
1810
|
-
export
|
|
1706
|
+
export async function revertClient(ctx: BBContext) {
|
|
1811
1707
|
// Check app can be reverted
|
|
1812
1708
|
const db = context.getAppDB()
|
|
1813
1709
|
const application = await db.get(DocumentType.APP_METADATA)
|
|
@@ -1833,12 +1729,15 @@ export const revertClient = async (ctx: any) => {
|
|
|
1833
1729
|
ctx.body = app
|
|
1834
1730
|
}
|
|
1835
1731
|
|
|
1836
|
-
|
|
1732
|
+
async function destroyApp(ctx: BBContext) {
|
|
1837
1733
|
let appId = ctx.params.appId
|
|
1838
1734
|
let isUnpublish = ctx.query && ctx.query.unpublish
|
|
1839
1735
|
|
|
1840
1736
|
if (isUnpublish) {
|
|
1841
1737
|
appId = dbCore.getProdAppID(appId)
|
|
1738
|
+
const devAppId = dbCore.getDevAppID(appId)
|
|
1739
|
+
// sync before removing the published app
|
|
1740
|
+
await sdk.applications.syncApp(devAppId)
|
|
1842
1741
|
}
|
|
1843
1742
|
|
|
1844
1743
|
const db = isUnpublish ? context.getProdAppDB() : context.getAppDB()
|
|
@@ -1868,12 +1767,12 @@ const destroyApp = async (ctx: any) => {
|
|
|
1868
1767
|
return result
|
|
1869
1768
|
}
|
|
1870
1769
|
|
|
1871
|
-
|
|
1770
|
+
async function preDestroyApp(ctx: BBContext) {
|
|
1872
1771
|
const { rows } = await getUniqueRows([ctx.params.appId])
|
|
1873
1772
|
ctx.rowCount = rows.length
|
|
1874
1773
|
}
|
|
1875
1774
|
|
|
1876
|
-
|
|
1775
|
+
async function postDestroyApp(ctx: BBContext) {
|
|
1877
1776
|
const rowCount = ctx.rowCount
|
|
1878
1777
|
await groups.cleanupApp(ctx.params.appId)
|
|
1879
1778
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (rowCount) {
|
|
@@ -1881,7 +1780,7 @@ const postDestroyApp = async (ctx: any) => {
|
|
|
1881
1780
|
}
|
|
1882
1781
|
}
|
|
1883
1782
|
|
|
1884
|
-
export
|
|
1783
|
+
export async function destroy(ctx: BBContext) {
|
|
1885
1784
|
await preDestroyApp(ctx)
|
|
1886
1785
|
const result = await destroyApp(ctx)
|
|
1887
1786
|
await postDestroyApp(ctx)
|
|
@@ -1889,62 +1788,16 @@ export const destroy = async (ctx: any) => {
|
|
|
1889
1788
|
ctx.body = result
|
|
1890
1789
|
}
|
|
1891
1790
|
|
|
1892
|
-
export
|
|
1893
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (env.DISABLE_AUTO_PROD_APP_SYNC) {</span>
|
|
1894
|
-
<span class="cstat-no" title="statement not covered" > ctx.status = 200</span>
|
|
1895
|
-
<span class="cstat-no" title="statement not covered" > ctx.body = {</span>
|
|
1896
|
-
message:
|
|
1897
|
-
"App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable.",
|
|
1898
|
-
}
|
|
1899
|
-
<span class="cstat-no" title="statement not covered" > return next()</span>
|
|
1900
|
-
}
|
|
1901
|
-
|
|
1791
|
+
export async function <span class="fstat-no" title="function not covered" >sync(</span>ctx: BBContext) {
|
|
1902
1792
|
const appId = <span class="cstat-no" title="statement not covered" >ctx.params.appId</span>
|
|
1903
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!dbCore.isDevAppID(appId)) {</span>
|
|
1904
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, "This action cannot be performed for production apps")</span>
|
|
1905
|
-
}
|
|
1906
|
-
|
|
1907
|
-
// replicate prod to dev
|
|
1908
|
-
const prodAppId = <span class="cstat-no" title="statement not covered" >dbCore.getProdAppID(appId)</span>
|
|
1909
|
-
|
|
1910
|
-
// specific case, want to make sure setup is skipped
|
|
1911
|
-
const prodDb = <span class="cstat-no" title="statement not covered" >context.getProdAppDB({ skip_setup: true })</span>
|
|
1912
|
-
const exists = <span class="cstat-no" title="statement not covered" >await prodDb.exists()</span>
|
|
1913
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!exists) {</span>
|
|
1914
|
-
// the database doesn't exist. Don't replicate
|
|
1915
|
-
<span class="cstat-no" title="statement not covered" > ctx.status = 200</span>
|
|
1916
|
-
<span class="cstat-no" title="statement not covered" > ctx.body = {</span>
|
|
1917
|
-
message: "App sync not required, app not deployed.",
|
|
1918
|
-
}
|
|
1919
|
-
<span class="cstat-no" title="statement not covered" > return next()</span>
|
|
1920
|
-
}
|
|
1921
|
-
|
|
1922
|
-
const replication = <span class="cstat-no" title="statement not covered" >new dbCore.Replication({</span>
|
|
1923
|
-
source: prodAppId,
|
|
1924
|
-
target: appId,
|
|
1925
|
-
})
|
|
1926
|
-
let error
|
|
1927
1793
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1928
|
-
<span class="cstat-no" title="statement not covered" > await
|
|
1929
|
-
} catch (err) {
|
|
1930
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1931
|
-
} finally {
|
|
1932
|
-
<span class="cstat-no" title="statement not covered" > await replication.close()</span>
|
|
1933
|
-
}
|
|
1934
|
-
|
|
1935
|
-
// sync the users
|
|
1936
|
-
<span class="cstat-no" title="statement not covered" > await syncGlobalUsers()</span>
|
|
1937
|
-
|
|
1938
|
-
<span class="cstat-no" title="statement not covered" > if (error) {</span>
|
|
1939
|
-
<span class="cstat-no" title="statement not covered" > ctx.throw(400, error)</span>
|
|
1940
|
-
} else {
|
|
1941
|
-
<span class="cstat-no" title="statement not covered" > ctx.body = {</span>
|
|
1942
|
-
message: "App sync completed successfully.",
|
|
1943
|
-
}
|
|
1794
|
+
<span class="cstat-no" title="statement not covered" > ctx.body = await sdk.applications.syncApp(appId)</span>
|
|
1795
|
+
} catch (err: any) {
|
|
1796
|
+
<span class="cstat-no" title="statement not covered" > ctx.throw(err.status || 400, err.message)</span>
|
|
1944
1797
|
}
|
|
1945
1798
|
}
|
|
1946
1799
|
|
|
1947
|
-
export
|
|
1800
|
+
export async function updateAppPackage(appPackage: any, appId: any) {
|
|
1948
1801
|
return context.doInAppContext(appId, async () => {
|
|
1949
1802
|
const db = context.getAppDB()
|
|
1950
1803
|
const application = await db.get(DocumentType.APP_METADATA)
|
|
@@ -1965,7 +1818,7 @@ export const updateAppPackage = async (appPackage: any, appId: any) => {
|
|
|
1965
1818
|
})
|
|
1966
1819
|
}
|
|
1967
1820
|
|
|
1968
|
-
|
|
1821
|
+
async function migrateAppNavigation() {
|
|
1969
1822
|
const db = context.getAppDB()
|
|
1970
1823
|
const existing: App = await db.get(DocumentType.APP_METADATA)
|
|
1971
1824
|
const layouts: Layout[] = await getLayouts()
|
|
@@ -2023,7 +1876,7 @@ const migrateAppNavigation = async () => {
|
|
|
2023
1876
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2024
1877
|
Code coverage generated by
|
|
2025
1878
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2026
|
-
at Tue Dec 06 2022
|
|
1879
|
+
at Tue Dec 06 2022 14:58:39 GMT+0000 (Coordinated Universal Time)
|
|
2027
1880
|
</div>
|
|
2028
1881
|
<script src="../../../prettify.js"></script>
|
|
2029
1882
|
<script>
|