diff --git a/lerna.json b/lerna.json index 66c3adff04..8348f248e6 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index c0f5bf6e02..c5a118774a 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/backend-core", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Budibase backend core libraries used in server and worker", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -20,7 +20,7 @@ "test:watch": "jest --watchAll" }, "dependencies": { - "@budibase/types": "^1.0.207-alpha.8", + "@budibase/types": "^1.0.207-alpha.10", "@techpass/passport-openidconnect": "0.3.2", "aws-sdk": "2.1030.0", "bcrypt": "5.0.1", diff --git a/packages/backend-core/src/db/pouch.js b/packages/backend-core/src/db/pouch.js index 76390ac644..59b7ff8ae7 100644 --- a/packages/backend-core/src/db/pouch.js +++ b/packages/backend-core/src/db/pouch.js @@ -1,21 +1,42 @@ const PouchDB = require("pouchdb") const env = require("../environment") -function getUrlInfo() { - let url = env.COUCH_DB_URL - let username, password, host - const [protocol, rest] = url.split("://") - if (url.includes("@")) { - const hostParts = rest.split("@") - host = hostParts[1] - const authParts = hostParts[0].split(":") - username = authParts[0] - password = authParts[1] - } else { - host = rest +exports.getUrlInfo = (url = env.COUCH_DB_URL) => { + let cleanUrl, username, password, host + if (url) { + // Ensure the URL starts with a protocol + const protoRegex = /^https?:\/\//i + if (!protoRegex.test(url)) { + url = `http://${url}` + } + + // Split into protocol and remainder + const split = url.split("://") + const protocol = split[0] + const rest = split.slice(1).join("://") + + // Extract auth if specified + if (url.includes("@")) { + // Split into host and remainder + let parts = rest.split("@") + host = parts[parts.length - 1] + let auth = parts.slice(0, -1).join("@") + + // Split auth into username and password + if (auth.includes(":")) { + const authParts = auth.split(":") + username = authParts[0] + password = authParts.slice(1).join(":") + } else { + username = auth + } + } else { + host = rest + } + cleanUrl = `${protocol}://${host}` } return { - url: `${protocol}://${host}`, + url: cleanUrl, auth: { username, password, @@ -24,7 +45,7 @@ function getUrlInfo() { } exports.getCouchInfo = () => { - const urlInfo = getUrlInfo() + const urlInfo = exports.getUrlInfo() let username let password if (env.COUCH_DB_USERNAME) { diff --git a/packages/backend-core/src/db/tests/pouch.spec.js b/packages/backend-core/src/db/tests/pouch.spec.js new file mode 100644 index 0000000000..30cdd0f5ec --- /dev/null +++ b/packages/backend-core/src/db/tests/pouch.spec.js @@ -0,0 +1,62 @@ +require("../../../tests/utilities/TestConfiguration") +const getUrlInfo = require("../pouch").getUrlInfo + +describe("pouch", () => { + describe("Couch DB URL parsing", () => { + it("should handle a null Couch DB URL", () => { + const info = getUrlInfo(null) + expect(info.url).toBeUndefined() + expect(info.auth.username).toBeUndefined() + }) + it("should be able to parse a basic Couch DB URL", () => { + const info = getUrlInfo("http://host.com") + expect(info.url).toBe("http://host.com") + expect(info.auth.username).toBeUndefined() + }) + it("should be able to parse a Couch DB basic URL with HTTPS", () => { + const info = getUrlInfo("https://host.com") + expect(info.url).toBe("https://host.com") + expect(info.auth.username).toBeUndefined() + }) + it("should be able to parse a basic Couch DB URL with a custom port", () => { + const info = getUrlInfo("https://host.com:1234") + expect(info.url).toBe("https://host.com:1234") + expect(info.auth.username).toBeUndefined() + }) + it("should be able to parse a Couch DB URL with auth", () => { + const info = getUrlInfo("https://user:pass@host.com:1234") + expect(info.url).toBe("https://host.com:1234") + expect(info.auth.username).toBe("user") + expect(info.auth.password).toBe("pass") + }) + it("should be able to parse a Couch DB URL with auth and special chars", () => { + const info = getUrlInfo("https://user:s:p@s://@://:d@;][~s@host.com:1234") + expect(info.url).toBe("https://host.com:1234") + expect(info.auth.username).toBe("user") + expect(info.auth.password).toBe("s:p@s://@://:d@;][~s") + }) + it("should be able to parse a Couch DB URL without a protocol", () => { + const info = getUrlInfo("host.com:1234") + expect(info.url).toBe("http://host.com:1234") + expect(info.auth.username).toBeUndefined() + }) + it("should be able to parse a Couch DB URL with auth and without a protocol", () => { + const info = getUrlInfo("user:s:p@s://@://:d@;][~s@host.com:1234") + expect(info.url).toBe("http://host.com:1234") + expect(info.auth.username).toBe("user") + expect(info.auth.password).toBe("s:p@s://@://:d@;][~s") + }) + it("should be able to parse a Couch DB URL with only username auth", () => { + const info = getUrlInfo("https://user@host.com:1234") + expect(info.url).toBe("https://host.com:1234") + expect(info.auth.username).toBe("user") + expect(info.auth.password).toBeUndefined() + }) + it("should be able to parse a Couch DB URL with only username auth and without a protocol", () => { + const info = getUrlInfo("user@host.com:1234") + expect(info.url).toBe("http://host.com:1234") + expect(info.auth.username).toBe("user") + expect(info.auth.password).toBeUndefined() + }) + }) +}) diff --git a/packages/bbui/package.json b/packages/bbui/package.json index dc5f87f506..ffffb267c7 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/bbui", "description": "A UI solution used in the different Budibase projects.", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "license": "MPL-2.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", @@ -38,7 +38,7 @@ ], "dependencies": { "@adobe/spectrum-css-workflow-icons": "^1.2.1", - "@budibase/string-templates": "^1.0.207-alpha.8", + "@budibase/string-templates": "^1.0.207-alpha.10", "@spectrum-css/actionbutton": "^1.0.1", "@spectrum-css/actiongroup": "^1.0.1", "@spectrum-css/avatar": "^3.0.2", diff --git a/packages/bbui/src/Typography/Detail.svelte b/packages/bbui/src/Typography/Detail.svelte index bb5c78c11e..76437ffb3c 100644 --- a/packages/bbui/src/Typography/Detail.svelte +++ b/packages/bbui/src/Typography/Detail.svelte @@ -1,9 +1,7 @@ diff --git a/packages/builder/cypress/support/commands.js b/packages/builder/cypress/support/commands.js index e638eb6cbb..29aabc4611 100644 --- a/packages/builder/cypress/support/commands.js +++ b/packages/builder/cypress/support/commands.js @@ -361,7 +361,7 @@ Cypress.Commands.add("createTable", (tableName, initialTable) => { cy.get(`[data-cy="new-table"]`).click() } cy.wait(5000) - cy.get(".spectrum-Dialog-grid") + cy.get(".item") .contains("Budibase DB") .click({ force: true }) .then(() => { diff --git a/packages/builder/package.json b/packages/builder/package.json index dea257c126..7effbc933e 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "license": "GPL-3.0", "private": true, "scripts": { @@ -69,10 +69,10 @@ } }, "dependencies": { - "@budibase/bbui": "^1.0.207-alpha.8", - "@budibase/client": "^1.0.207-alpha.8", - "@budibase/frontend-core": "^1.0.207-alpha.8", - "@budibase/string-templates": "^1.0.207-alpha.8", + "@budibase/bbui": "^1.0.207-alpha.10", + "@budibase/client": "^1.0.207-alpha.10", + "@budibase/frontend-core": "^1.0.207-alpha.10", + "@budibase/string-templates": "^1.0.207-alpha.10", "@sentry/browser": "5.19.1", "@spectrum-css/page": "^3.0.1", "@spectrum-css/vars": "^3.0.1", diff --git a/packages/builder/src/components/backend/DatasourceNavigator/modals/CreateDatasourceModal.svelte b/packages/builder/src/components/backend/DatasourceNavigator/modals/CreateDatasourceModal.svelte index 14adbfbd02..8d34c292f3 100644 --- a/packages/builder/src/components/backend/DatasourceNavigator/modals/CreateDatasourceModal.svelte +++ b/packages/builder/src/components/backend/DatasourceNavigator/modals/CreateDatasourceModal.svelte @@ -5,12 +5,13 @@ Body, Layout, Detail, + Heading, notifications, } from "@budibase/bbui" import { onMount } from "svelte" import ICONS from "../icons" import { API } from "api" - import { IntegrationNames, IntegrationTypes } from "constants/backend" + import { IntegrationTypes } from "constants/backend" import CreateTableModal from "components/backend/TableNavigator/modals/CreateTableModal.svelte" import DatasourceConfigModal from "components/backend/DatasourceNavigator/modals/DatasourceConfigModal.svelte" import GoogleDatasourceConfigModal from "components/backend/DatasourceNavigator/modals/GoogleDatasourceConfigModal.svelte" @@ -118,7 +119,7 @@ - - All apps need data. You can connect to a data source below, or add data - to your app using Budibase's built-in database. - + + Get started with Budibase DB
selectIntegration(IntegrationTypes.INTERNAL)} class="item hoverable" > -
- - Budibase DB +
+ +
+ Budibase DB + Non-relational +
- -
- Connect to data source -
+ + Connect to an external data source
{#each Object.entries(integrations).filter(([key]) => key !== IntegrationTypes.INTERNAL) as [integrationType, schema]}
selectIntegration(integrationType)} class="item hoverable" > -
+
- - - {schema.name || IntegrationNames[integrationType]} +
+ {schema.friendlyName} + {#if schema.type} + {schema.type || ""} + {/if} +
{/each} @@ -178,13 +177,6 @@ diff --git a/packages/cli/package.json b/packages/cli/package.json index 379724aaf2..da77cd44e1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/cli", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Budibase CLI, for developers, self hosting and migrations.", "main": "src/index.js", "bin": { diff --git a/packages/client/package.json b/packages/client/package.json index 5d7d7dfc98..40beab38a7 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "license": "MPL-2.0", "module": "dist/budibase-client.js", "main": "dist/budibase-client.js", @@ -19,9 +19,9 @@ "dev:builder": "rollup -cw" }, "dependencies": { - "@budibase/bbui": "^1.0.207-alpha.8", - "@budibase/frontend-core": "^1.0.207-alpha.8", - "@budibase/string-templates": "^1.0.207-alpha.8", + "@budibase/bbui": "^1.0.207-alpha.10", + "@budibase/frontend-core": "^1.0.207-alpha.10", + "@budibase/string-templates": "^1.0.207-alpha.10", "@spectrum-css/button": "^3.0.3", "@spectrum-css/card": "^3.0.3", "@spectrum-css/divider": "^1.0.3", diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json index d5d4aae51f..346253a35f 100644 --- a/packages/frontend-core/package.json +++ b/packages/frontend-core/package.json @@ -1,12 +1,12 @@ { "name": "@budibase/frontend-core", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Budibase frontend core libraries used in builder and client", "author": "Budibase", "license": "MPL-2.0", "svelte": "src/index.js", "dependencies": { - "@budibase/bbui": "^1.0.207-alpha.8", + "@budibase/bbui": "^1.0.207-alpha.10", "lodash": "^4.17.21", "svelte": "^3.46.2" } diff --git a/packages/server/package.json b/packages/server/package.json index ec16a7c97c..5da2eb9f17 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Budibase Web Server", "main": "src/index.ts", "repository": { @@ -77,11 +77,11 @@ "license": "GPL-3.0", "dependencies": { "@apidevtools/swagger-parser": "10.0.3", - "@budibase/backend-core": "^1.0.207-alpha.8", - "@budibase/client": "^1.0.207-alpha.8", - "@budibase/pro": "1.0.207-alpha.8", - "@budibase/string-templates": "^1.0.207-alpha.8", - "@budibase/types": "^1.0.207-alpha.8", + "@budibase/backend-core": "^1.0.207-alpha.10", + "@budibase/client": "^1.0.207-alpha.10", + "@budibase/pro": "1.0.207-alpha.10", + "@budibase/string-templates": "^1.0.207-alpha.10", + "@budibase/types": "^1.0.207-alpha.10", "@bull-board/api": "3.7.0", "@bull-board/koa": "3.9.4", "@elastic/elasticsearch": "7.10.0", diff --git a/packages/server/src/definitions/datasource.ts b/packages/server/src/definitions/datasource.ts index 2745329e41..90c81abe9f 100644 --- a/packages/server/src/definitions/datasource.ts +++ b/packages/server/src/definitions/datasource.ts @@ -94,6 +94,7 @@ export interface Integration { relationships?: boolean description: string friendlyName: string + type?: string datasource: {} query: { [key: string]: QueryDefinition diff --git a/packages/server/src/integrations/airtable.ts b/packages/server/src/integrations/airtable.ts index 50c0a01147..ec49bf5e40 100644 --- a/packages/server/src/integrations/airtable.ts +++ b/packages/server/src/integrations/airtable.ts @@ -18,6 +18,7 @@ module AirtableModule { description: "Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.", friendlyName: "Airtable", + type: "Spreadsheet", datasource: { apiKey: { type: DatasourceFieldTypes.PASSWORD, diff --git a/packages/server/src/integrations/arangodb.ts b/packages/server/src/integrations/arangodb.ts index 8d2597b86b..e6e2c0db35 100644 --- a/packages/server/src/integrations/arangodb.ts +++ b/packages/server/src/integrations/arangodb.ts @@ -19,6 +19,7 @@ module ArangoModule { const SCHEMA: Integration = { docs: "https://github.com/arangodb/arangojs", friendlyName: "ArangoDB", + type: "Non-relational", description: "ArangoDB is a scalable open-source multi-model database natively supporting graph, document and search. All supported data models & access patterns can be combined in queries allowing for maximal flexibility. ", datasource: { diff --git a/packages/server/src/integrations/couchdb.ts b/packages/server/src/integrations/couchdb.ts index ea7edb6136..6d33658988 100644 --- a/packages/server/src/integrations/couchdb.ts +++ b/packages/server/src/integrations/couchdb.ts @@ -16,6 +16,7 @@ module CouchDBModule { const SCHEMA: Integration = { docs: "https://docs.couchdb.org/en/stable/", friendlyName: "CouchDB", + type: "Non-relational", description: "Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.", datasource: { diff --git a/packages/server/src/integrations/dynamodb.ts b/packages/server/src/integrations/dynamodb.ts index 9ce4201a1e..f06bba02e9 100644 --- a/packages/server/src/integrations/dynamodb.ts +++ b/packages/server/src/integrations/dynamodb.ts @@ -21,6 +21,7 @@ module DynamoModule { description: "Amazon DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale.", friendlyName: "DynamoDB", + type: "Non-relational", datasource: { region: { type: DatasourceFieldTypes.STRING, diff --git a/packages/server/src/integrations/elasticsearch.ts b/packages/server/src/integrations/elasticsearch.ts index 723d68f578..eb27966df0 100644 --- a/packages/server/src/integrations/elasticsearch.ts +++ b/packages/server/src/integrations/elasticsearch.ts @@ -17,6 +17,7 @@ module ElasticsearchModule { description: "Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.", friendlyName: "ElasticSearch", + type: "Non-relational", datasource: { url: { type: DatasourceFieldTypes.STRING, diff --git a/packages/server/src/integrations/firebase.ts b/packages/server/src/integrations/firebase.ts index 8ed08befeb..c0f5d3c798 100644 --- a/packages/server/src/integrations/firebase.ts +++ b/packages/server/src/integrations/firebase.ts @@ -16,6 +16,7 @@ module Firebase { const SCHEMA: Integration = { docs: "https://firebase.google.com/docs/firestore/quickstart", friendlyName: "Firestore", + type: "Non-relational", description: "Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.", datasource: { diff --git a/packages/server/src/integrations/googlesheets.ts b/packages/server/src/integrations/googlesheets.ts index 7b17b7246d..d2562ddccf 100644 --- a/packages/server/src/integrations/googlesheets.ts +++ b/packages/server/src/integrations/googlesheets.ts @@ -49,6 +49,7 @@ module GoogleSheetsModule { description: "Create and collaborate on online spreadsheets in real-time and from any device. ", friendlyName: "Google Sheets", + type: "Spreadsheet", datasource: { spreadsheetId: { display: "Google Sheet URL", diff --git a/packages/server/src/integrations/microsoftSqlServer.ts b/packages/server/src/integrations/microsoftSqlServer.ts index 530e569405..1e5664748d 100644 --- a/packages/server/src/integrations/microsoftSqlServer.ts +++ b/packages/server/src/integrations/microsoftSqlServer.ts @@ -44,6 +44,7 @@ module MSSQLModule { description: "Microsoft SQL Server is a relational database management system developed by Microsoft. ", friendlyName: "MS SQL Server", + type: "Relational", datasource: { user: { type: DatasourceFieldTypes.STRING, diff --git a/packages/server/src/integrations/mongodb.ts b/packages/server/src/integrations/mongodb.ts index 3d851399f6..c81daff641 100644 --- a/packages/server/src/integrations/mongodb.ts +++ b/packages/server/src/integrations/mongodb.ts @@ -24,6 +24,7 @@ module MongoDBModule { const SCHEMA: Integration = { docs: "https://github.com/mongodb/node-mongodb-native", friendlyName: "MongoDB", + type: "Non-relational", description: "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.", datasource: { diff --git a/packages/server/src/integrations/mysql.ts b/packages/server/src/integrations/mysql.ts index 287817ef27..1fdab66701 100644 --- a/packages/server/src/integrations/mysql.ts +++ b/packages/server/src/integrations/mysql.ts @@ -36,6 +36,7 @@ module MySQLModule { docs: "https://github.com/sidorares/node-mysql2", plus: true, friendlyName: "MySQL", + type: "Relational", description: "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ", datasource: { diff --git a/packages/server/src/integrations/oracle.ts b/packages/server/src/integrations/oracle.ts index 94e51694c1..ab742d9009 100644 --- a/packages/server/src/integrations/oracle.ts +++ b/packages/server/src/integrations/oracle.ts @@ -40,6 +40,7 @@ module OracleModule { docs: "https://github.com/oracle/node-oracledb", plus: true, friendlyName: "Oracle", + type: "Relational", description: "Oracle Database is an object-relational database management system developed by Oracle Corporation", datasource: { diff --git a/packages/server/src/integrations/postgres.ts b/packages/server/src/integrations/postgres.ts index 0ac55a9cd0..7cc01bdc79 100644 --- a/packages/server/src/integrations/postgres.ts +++ b/packages/server/src/integrations/postgres.ts @@ -47,6 +47,7 @@ module PostgresModule { docs: "https://node-postgres.com", plus: true, friendlyName: "PostgreSQL", + type: "Relational", description: "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.", datasource: { diff --git a/packages/server/src/integrations/redis.ts b/packages/server/src/integrations/redis.ts index 29971c4b62..a1a9804cc0 100644 --- a/packages/server/src/integrations/redis.ts +++ b/packages/server/src/integrations/redis.ts @@ -17,6 +17,7 @@ module RedisModule { docs: "https://redis.io/docs/", description: "", friendlyName: "Redis", + type: "Non-relational", datasource: { host: { type: "string", diff --git a/packages/server/src/integrations/rest.ts b/packages/server/src/integrations/rest.ts index 6174613fc8..13956e5994 100644 --- a/packages/server/src/integrations/rest.ts +++ b/packages/server/src/integrations/rest.ts @@ -64,6 +64,7 @@ module RestModule { description: "With the REST API datasource, you can connect, query and pull data from multiple REST APIs. You can then use the retrieved data to build apps.", friendlyName: "REST API", + type: "API", datasource: { url: { type: DatasourceFieldTypes.STRING, diff --git a/packages/server/src/integrations/s3.ts b/packages/server/src/integrations/s3.ts index 273f221575..12371e703f 100644 --- a/packages/server/src/integrations/s3.ts +++ b/packages/server/src/integrations/s3.ts @@ -17,6 +17,7 @@ module S3Module { description: "Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.", friendlyName: "Amazon S3", + type: "Object store", datasource: { region: { type: "string", diff --git a/packages/server/src/integrations/snowflake.ts b/packages/server/src/integrations/snowflake.ts index 711647e5df..5e04e858e5 100644 --- a/packages/server/src/integrations/snowflake.ts +++ b/packages/server/src/integrations/snowflake.ts @@ -16,6 +16,7 @@ module SnowflakeModule { description: "Snowflake is a solution for data warehousing, data lakes, data engineering, data science, data application development, and securely sharing and consuming shared data.", friendlyName: "Snowflake", + type: "Relational", datasource: { account: { type: "string", diff --git a/packages/string-templates/package.json b/packages/string-templates/package.json index 3f0c9a72f3..02e9fd6e08 100644 --- a/packages/string-templates/package.json +++ b/packages/string-templates/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/string-templates", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Handlebars wrapper for Budibase templating.", "main": "src/index.cjs", "module": "dist/bundle.mjs", diff --git a/packages/types/package.json b/packages/types/package.json index 9d7b47c4e0..cf80150907 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/types", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Budibase types", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/worker/package.json b/packages/worker/package.json index 7a8eea477f..85d1f2cb4a 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/worker", "email": "hi@budibase.com", - "version": "1.0.207-alpha.8", + "version": "1.0.207-alpha.10", "description": "Budibase background service", "main": "src/index.ts", "repository": { @@ -34,10 +34,10 @@ "author": "Budibase", "license": "GPL-3.0", "dependencies": { - "@budibase/backend-core": "^1.0.207-alpha.8", - "@budibase/pro": "1.0.207-alpha.8", - "@budibase/string-templates": "^1.0.207-alpha.8", - "@budibase/types": "^1.0.207-alpha.8", + "@budibase/backend-core": "^1.0.207-alpha.10", + "@budibase/pro": "1.0.207-alpha.10", + "@budibase/string-templates": "^1.0.207-alpha.10", + "@budibase/types": "^1.0.207-alpha.10", "@koa/router": "8.0.8", "@sentry/node": "6.17.7", "@techpass/passport-openidconnect": "0.3.2",