From ca145967dccd9f2e484550acc0f9e3a62fa988d3 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 07:52:30 +0200 Subject: [PATCH 01/20] SYNC: Merge branch 'feature/firestore' --- packages/api/.env | 1 + packages/api/src/utility/crypting.js | 24 ++++---- packages/types/engines.d.ts | 2 +- .../web/src/forms/FormFileInputField.svelte | 58 +++++++++++++++++++ .../settings/ConnectionDriverFields.svelte | 8 +-- packages/web/src/utility/parseFileAsJson.js | 23 -------- packages/web/src/utility/parseFileAsString.js | 15 +++++ 7 files changed, 91 insertions(+), 40 deletions(-) create mode 100644 packages/web/src/forms/FormFileInputField.svelte create mode 100644 packages/web/src/utility/parseFileAsString.js diff --git a/packages/api/.env b/packages/api/.env index 9ab8fc3d2..244811b8c 100644 --- a/packages/api/.env +++ b/packages/api/.env @@ -25,3 +25,4 @@ DEVWEB=1 # LOGIN_PASSWORD_test=test # LOGIN_PERMISSIONS_test=~*, widgets/database # WORKSPACE_DIR=/home/jena/dbgate-data-2 +DBGATE_LICENSE=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InNhbGVzQGRiZ2F0ZS5ldSIsIm5hbWUiOiJEYkdhdGUgdGVzdCIsImxpY2Vuc2VJZCI6Ijk2ODJhODhiLTkwOWYtNDhiMS1hZGJmLWMwMzYyMjg4NDQyMSIsImNyZWF0ZWQiOiIyMDI1LTA2LTEyVDE1OjQ0OjAwLjY0NloiLCJlbmQiOjE3ODEyNzkwNDEsImV4cCI6MTc4MTg4Mzg0MSwiaWF0IjoxNzQ5NzQzMDQwfQ.h-pYymeb8ivJMo695PLo-tKxqfr3ZBiyZA4GllnAZbLDwBtxKY54BKfI2j70AtckuohAhn4i6VZn7UG_MIQSZVE7z8pwZyP4Jj8NUt9fYpCOFUfJMl_3iP6WOQ0eb9cyHfNsbKkXbi9wEuXoblLDCi2ve76ODqByPwA7FfCuY97zrxe9Zzth09Z4M0KjfeX7L50tQzMBVqW2rQAH1yc48fsaRbX8IABUqpvIjmhQBAgKlNltZlQrUfd1Egyi8TBSqvXhgqDz-gnJW_oe5eb2-emWZln38p7QwQy4smvvtOVZuUozv0boLS3wfzp9JaDZ4SXjWpBx-la7vm8L6wQYBQ diff --git a/packages/api/src/utility/crypting.js b/packages/api/src/utility/crypting.js index 4ff5df522..822d74c1b 100644 --- a/packages/api/src/utility/crypting.js +++ b/packages/api/src/utility/crypting.js @@ -101,24 +101,26 @@ function decryptObjectPasswordField(obj, field, encryptor = null) { return obj; } +const fieldsToEncrypt = ['password', 'sshPassword', 'sshKeyfilePassword', 'connectionDefinition']; + function encryptConnection(connection, encryptor = null) { if (connection.passwordMode != 'saveRaw') { - connection = encryptObjectPasswordField(connection, 'password', encryptor); - connection = encryptObjectPasswordField(connection, 'sshPassword', encryptor); - connection = encryptObjectPasswordField(connection, 'sshKeyfilePassword', encryptor); + for (const field of fieldsToEncrypt) { + connection = encryptObjectPasswordField(connection, field, encryptor); + } } return connection; } function maskConnection(connection) { if (!connection) return connection; - return _.omit(connection, ['password', 'sshPassword', 'sshKeyfilePassword']); + return _.omit(connection, fieldsToEncrypt); } -function decryptConnection(connection, encryptor = null) { - connection = decryptObjectPasswordField(connection, 'password', encryptor); - connection = decryptObjectPasswordField(connection, 'sshPassword', encryptor); - connection = decryptObjectPasswordField(connection, 'sshKeyfilePassword', encryptor); +function decryptConnection(connection) { + for (const field of fieldsToEncrypt) { + connection = decryptObjectPasswordField(connection, field); + } return connection; } @@ -188,9 +190,9 @@ function recryptObjectPasswordFieldInPlace(obj, field, decryptEncryptor, encrypt } function recryptConnection(connection, decryptEncryptor, encryptEncryptor) { - connection = recryptObjectPasswordField(connection, 'password', decryptEncryptor, encryptEncryptor); - connection = recryptObjectPasswordField(connection, 'sshPassword', decryptEncryptor, encryptEncryptor); - connection = recryptObjectPasswordField(connection, 'sshKeyfilePassword', decryptEncryptor, encryptEncryptor); + for (const field of fieldsToEncrypt) { + connection = recryptObjectPasswordField(connection, field, decryptEncryptor, encryptEncryptor); + } return connection; } diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index c74010947..12fba070f 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -241,7 +241,7 @@ export interface EngineDriver extends FilterBehaviourProvider { defaultSocketPath?: string; authTypeLabel?: string; importExportArgs?: any[]; - connect({ server, port, user, password, database, certificateJson }): Promise>; + connect({ server, port, user, password, database, connectionDefinition }): Promise>; close(dbhan: DatabaseHandle): Promise; query(dbhan: DatabaseHandle, sql: string, options?: QueryOptions): Promise; stream(dbhan: DatabaseHandle, sql: string, options: StreamOptions); diff --git a/packages/web/src/forms/FormFileInputField.svelte b/packages/web/src/forms/FormFileInputField.svelte new file mode 100644 index 000000000..be7205d3e --- /dev/null +++ b/packages/web/src/forms/FormFileInputField.svelte @@ -0,0 +1,58 @@ + + + + + diff --git a/packages/web/src/settings/ConnectionDriverFields.svelte b/packages/web/src/settings/ConnectionDriverFields.svelte index 0e578d650..8830861d3 100644 --- a/packages/web/src/settings/ConnectionDriverFields.svelte +++ b/packages/web/src/settings/ConnectionDriverFields.svelte @@ -18,9 +18,7 @@ import FormDropDownTextField from '../forms/FormDropDownTextField.svelte'; import { getConnectionLabel } from 'dbgate-tools'; import { _t } from '../translations'; - import FilesInput from '../impexp/FilesInput.svelte'; - import SimpleFilesInput from '../impexp/SimpleFilesInput.svelte'; - import FormJsonFileInputField from '../forms/FormJsonFileInputField.svelte'; + import FormFileInputField from '../forms/FormFileInputField.svelte'; export let getDatabaseList; export let currentConnection; @@ -465,8 +463,8 @@ /> {/if} -{#if driver?.showConnectionField('certificateJson', $values, showConnectionFieldArgs)} - +{#if driver?.showConnectionField('connectionDefinition', $values, showConnectionFieldArgs)} + {/if} {#if driver} diff --git a/packages/web/src/utility/parseFileAsJson.js b/packages/web/src/utility/parseFileAsJson.js index 079e284c1..0d0ed8a09 100644 --- a/packages/web/src/utility/parseFileAsJson.js +++ b/packages/web/src/utility/parseFileAsJson.js @@ -1,26 +1,3 @@ -/** - * @template [T = any] - * @typedef {Object} FileParseResultSuccess - * @property {true} success - * @property {T} data - */ - -/** - * @typedef {Object} FileParseResultError - * @property {false} success - * @property {string} error - */ - -/** - * @template [T = any] - * @typedef {FileParseResultSuccess | FileParseResultError} FileParseResult - */ - -/** - * @template [T = any] - * @param {File} file - * @returns {Promise>} - */ export async function parseFileAsJson(file) { try { const text = await file.text(); diff --git a/packages/web/src/utility/parseFileAsString.js b/packages/web/src/utility/parseFileAsString.js new file mode 100644 index 000000000..f34676746 --- /dev/null +++ b/packages/web/src/utility/parseFileAsString.js @@ -0,0 +1,15 @@ +export async function parseFileAsString(file) { + try { + const text = await file.text(); + const data = text; + return { + success: true, + data, + }; + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown parsing error', + }; + } +} From 5ca878680242c3e7209c703d76b570e147cc3c21 Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 05:53:44 +0000 Subject: [PATCH 02/20] Update pro ref --- workflow-templates/includes.tpl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow-templates/includes.tpl.yaml b/workflow-templates/includes.tpl.yaml index 23ec8c1f8..bbad159de 100644 --- a/workflow-templates/includes.tpl.yaml +++ b/workflow-templates/includes.tpl.yaml @@ -7,7 +7,7 @@ checkout-and-merge-pro: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From 39df72d1632553e4ce6da7f3907bc55063394954 Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 05:54:02 +0000 Subject: [PATCH 03/20] chore: auto-update github workflows --- .github/workflows/build-app-pro-beta.yaml | 2 +- .github/workflows/build-app-pro.yaml | 2 +- .github/workflows/build-cloud-pro.yaml | 2 +- .github/workflows/build-docker-pro.yaml | 2 +- .github/workflows/build-npm-pro.yaml | 2 +- .github/workflows/e2e-pro.yaml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-app-pro-beta.yaml b/.github/workflows/build-app-pro-beta.yaml index 7b2681c28..f00ea90f1 100644 --- a/.github/workflows/build-app-pro-beta.yaml +++ b/.github/workflows/build-app-pro-beta.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-app-pro.yaml b/.github/workflows/build-app-pro.yaml index e16d302d5..3c5004ca0 100644 --- a/.github/workflows/build-app-pro.yaml +++ b/.github/workflows/build-app-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-cloud-pro.yaml b/.github/workflows/build-cloud-pro.yaml index 66a624fca..f92835497 100644 --- a/.github/workflows/build-cloud-pro.yaml +++ b/.github/workflows/build-cloud-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-docker-pro.yaml b/.github/workflows/build-docker-pro.yaml index cf7c7644d..f0f2f7792 100644 --- a/.github/workflows/build-docker-pro.yaml +++ b/.github/workflows/build-docker-pro.yaml @@ -44,7 +44,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-npm-pro.yaml b/.github/workflows/build-npm-pro.yaml index de8f2fbc2..87118009d 100644 --- a/.github/workflows/build-npm-pro.yaml +++ b/.github/workflows/build-npm-pro.yaml @@ -32,7 +32,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/e2e-pro.yaml b/.github/workflows/e2e-pro.yaml index bc731b80b..1b7313d14 100644 --- a/.github/workflows/e2e-pro.yaml +++ b/.github/workflows/e2e-pro.yaml @@ -26,7 +26,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 8a4dc2732a7097b5c4c48b4feb62609111cdf3e0 + ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From 85f847a4f3555a1c8d8d8e36d1961df6da91f24c Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 08:01:08 +0200 Subject: [PATCH 04/20] SYNC: fix --- packages/api/.env | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/api/.env b/packages/api/.env index 244811b8c..9ab8fc3d2 100644 --- a/packages/api/.env +++ b/packages/api/.env @@ -25,4 +25,3 @@ DEVWEB=1 # LOGIN_PASSWORD_test=test # LOGIN_PERMISSIONS_test=~*, widgets/database # WORKSPACE_DIR=/home/jena/dbgate-data-2 -DBGATE_LICENSE=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InNhbGVzQGRiZ2F0ZS5ldSIsIm5hbWUiOiJEYkdhdGUgdGVzdCIsImxpY2Vuc2VJZCI6Ijk2ODJhODhiLTkwOWYtNDhiMS1hZGJmLWMwMzYyMjg4NDQyMSIsImNyZWF0ZWQiOiIyMDI1LTA2LTEyVDE1OjQ0OjAwLjY0NloiLCJlbmQiOjE3ODEyNzkwNDEsImV4cCI6MTc4MTg4Mzg0MSwiaWF0IjoxNzQ5NzQzMDQwfQ.h-pYymeb8ivJMo695PLo-tKxqfr3ZBiyZA4GllnAZbLDwBtxKY54BKfI2j70AtckuohAhn4i6VZn7UG_MIQSZVE7z8pwZyP4Jj8NUt9fYpCOFUfJMl_3iP6WOQ0eb9cyHfNsbKkXbi9wEuXoblLDCi2ve76ODqByPwA7FfCuY97zrxe9Zzth09Z4M0KjfeX7L50tQzMBVqW2rQAH1yc48fsaRbX8IABUqpvIjmhQBAgKlNltZlQrUfd1Egyi8TBSqvXhgqDz-gnJW_oe5eb2-emWZln38p7QwQy4smvvtOVZuUozv0boLS3wfzp9JaDZ4SXjWpBx-la7vm8L6wQYBQ From 74fa1c66289329be2e1a77ebdf01b75880d2bb76 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 08:03:10 +0200 Subject: [PATCH 05/20] SYNC: store connection definition in storagedb --- packages/api/src/storageModel.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/api/src/storageModel.js b/packages/api/src/storageModel.js index 9cb9fa942..4086a5b43 100644 --- a/packages/api/src/storageModel.js +++ b/packages/api/src/storageModel.js @@ -674,6 +674,12 @@ module.exports = { "columnName": "awsRegion", "dataType": "varchar(250)", "notNull": false + }, + { + "pureName": "connections", + "columnName": "connectionDefinition", + "dataType": "text", + "notNull": false } ], "foreignKeys": [], From 6860e1f085167c5eb806d88e9cf30a7d9a023a26 Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 06:03:56 +0000 Subject: [PATCH 06/20] Update pro ref --- workflow-templates/includes.tpl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow-templates/includes.tpl.yaml b/workflow-templates/includes.tpl.yaml index bbad159de..9a13f617b 100644 --- a/workflow-templates/includes.tpl.yaml +++ b/workflow-templates/includes.tpl.yaml @@ -7,7 +7,7 @@ checkout-and-merge-pro: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From 13b3ae35edbd789b546ea06423ff6f6331517703 Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 06:04:12 +0000 Subject: [PATCH 07/20] chore: auto-update github workflows --- .github/workflows/build-app-pro-beta.yaml | 2 +- .github/workflows/build-app-pro.yaml | 2 +- .github/workflows/build-cloud-pro.yaml | 2 +- .github/workflows/build-docker-pro.yaml | 2 +- .github/workflows/build-npm-pro.yaml | 2 +- .github/workflows/e2e-pro.yaml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-app-pro-beta.yaml b/.github/workflows/build-app-pro-beta.yaml index f00ea90f1..993d61aa4 100644 --- a/.github/workflows/build-app-pro-beta.yaml +++ b/.github/workflows/build-app-pro-beta.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-app-pro.yaml b/.github/workflows/build-app-pro.yaml index 3c5004ca0..bedb8aef9 100644 --- a/.github/workflows/build-app-pro.yaml +++ b/.github/workflows/build-app-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-cloud-pro.yaml b/.github/workflows/build-cloud-pro.yaml index f92835497..94661ee80 100644 --- a/.github/workflows/build-cloud-pro.yaml +++ b/.github/workflows/build-cloud-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-docker-pro.yaml b/.github/workflows/build-docker-pro.yaml index f0f2f7792..6854a58f9 100644 --- a/.github/workflows/build-docker-pro.yaml +++ b/.github/workflows/build-docker-pro.yaml @@ -44,7 +44,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-npm-pro.yaml b/.github/workflows/build-npm-pro.yaml index 87118009d..158d906ff 100644 --- a/.github/workflows/build-npm-pro.yaml +++ b/.github/workflows/build-npm-pro.yaml @@ -32,7 +32,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/e2e-pro.yaml b/.github/workflows/e2e-pro.yaml index 1b7313d14..e7f2877ba 100644 --- a/.github/workflows/e2e-pro.yaml +++ b/.github/workflows/e2e-pro.yaml @@ -26,7 +26,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 6803e11e31a18b877fbdc375650db8e036c6ee89 + ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From d24670e14eef7391ed264a707ba84c3bbbb66c1e Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 08:22:30 +0200 Subject: [PATCH 08/20] SYNC: chat & chart permission --- packages/web/src/appobj/DatabaseAppObject.svelte | 3 ++- packages/web/src/commands/stdCommands.ts | 3 ++- packages/web/src/datagrid/DataGridCore.svelte | 2 ++ packages/web/src/tabs/QueryTab.svelte | 5 +++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte index 6233e5734..e307d6970 100644 --- a/packages/web/src/appobj/DatabaseAppObject.svelte +++ b/packages/web/src/appobj/DatabaseAppObject.svelte @@ -511,7 +511,8 @@ await dbgateApi.executeQuery(${JSON.stringify( text: _t('database.exportDbModel', { defaultMessage: 'Export DB model' }), }, isProApp() && - driver?.databaseEngineTypes?.includes('sql') && { + driver?.databaseEngineTypes?.includes('sql') && + hasPermission('dbops/chat') && { onClick: handleDatabaseChat, text: _t('database.databaseChat', { defaultMessage: 'Database chat' }), }, diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index e37bd9b1a..c61029a7d 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -723,7 +723,8 @@ if (isProApp()) { icon: 'icon ai', testEnabled: () => getCurrentDatabase() != null && - findEngineDriver(getCurrentDatabase()?.connection, getExtensions())?.databaseEngineTypes?.includes('sql'), + findEngineDriver(getCurrentDatabase()?.connection, getExtensions())?.databaseEngineTypes?.includes('sql') && + hasPermission('dbops/chat'), onClick: () => { openNewTab({ title: 'Chat', diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index d2f772e4a..9e898a46c 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -424,6 +424,7 @@ import { _t } from '../translations'; import { isProApp } from '../utility/proTools'; import SaveArchiveModal from '../modals/SaveArchiveModal.svelte'; + import hasPermission from '../utility/hasPermission'; export let onLoadNextData = undefined; export let grider = undefined; @@ -1848,6 +1849,7 @@ // }, isProApp() && { command: 'dataGrid.sendToDataDeploy' }, isProApp() && + hasPermission('dbops/charts') && onOpenChart && { text: 'Open chart', onClick: () => onOpenChart(), diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte index a2102fa72..41fc77599 100644 --- a/packages/web/src/tabs/QueryTab.svelte +++ b/packages/web/src/tabs/QueryTab.svelte @@ -154,6 +154,7 @@ import RowsLimitModal from '../modals/RowsLimitModal.svelte'; import _ from 'lodash'; import FontIcon from '../icons/FontIcon.svelte'; + import hasPermission from '../utility/hasPermission'; export let tabid; export let conid; @@ -794,7 +795,7 @@ hideDisabled /> - {#if isProApp() && visibleResultTabs && !busy} + {#if isProApp() && visibleResultTabs && !busy && hasPermission('dbops/charts')} {/if} - {#if isProApp() && !visibleResultTabs} + {#if isProApp() && !visibleResultTabs && hasPermission('dbops/charts')} Date: Fri, 25 Jul 2025 06:23:11 +0000 Subject: [PATCH 09/20] Update pro ref --- workflow-templates/includes.tpl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow-templates/includes.tpl.yaml b/workflow-templates/includes.tpl.yaml index 9a13f617b..c5ae53f51 100644 --- a/workflow-templates/includes.tpl.yaml +++ b/workflow-templates/includes.tpl.yaml @@ -7,7 +7,7 @@ checkout-and-merge-pro: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From a56de91b1eb5c4ee326eb7e3652f1f9cba5c1e47 Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 06:23:26 +0000 Subject: [PATCH 10/20] chore: auto-update github workflows --- .github/workflows/build-app-pro-beta.yaml | 2 +- .github/workflows/build-app-pro.yaml | 2 +- .github/workflows/build-cloud-pro.yaml | 2 +- .github/workflows/build-docker-pro.yaml | 2 +- .github/workflows/build-npm-pro.yaml | 2 +- .github/workflows/e2e-pro.yaml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-app-pro-beta.yaml b/.github/workflows/build-app-pro-beta.yaml index 993d61aa4..4396ac3bc 100644 --- a/.github/workflows/build-app-pro-beta.yaml +++ b/.github/workflows/build-app-pro-beta.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-app-pro.yaml b/.github/workflows/build-app-pro.yaml index bedb8aef9..7171c0282 100644 --- a/.github/workflows/build-app-pro.yaml +++ b/.github/workflows/build-app-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-cloud-pro.yaml b/.github/workflows/build-cloud-pro.yaml index 94661ee80..4f081bdbf 100644 --- a/.github/workflows/build-cloud-pro.yaml +++ b/.github/workflows/build-cloud-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-docker-pro.yaml b/.github/workflows/build-docker-pro.yaml index 6854a58f9..6d41b2ab8 100644 --- a/.github/workflows/build-docker-pro.yaml +++ b/.github/workflows/build-docker-pro.yaml @@ -44,7 +44,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-npm-pro.yaml b/.github/workflows/build-npm-pro.yaml index 158d906ff..e677bf282 100644 --- a/.github/workflows/build-npm-pro.yaml +++ b/.github/workflows/build-npm-pro.yaml @@ -32,7 +32,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/e2e-pro.yaml b/.github/workflows/e2e-pro.yaml index e7f2877ba..bd7345160 100644 --- a/.github/workflows/e2e-pro.yaml +++ b/.github/workflows/e2e-pro.yaml @@ -26,7 +26,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 940ff41b3ad8f5b567f29be02a683f6c02d3bf52 + ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From 4b1932fe52820dc1825965ce551e630a624c5586 Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 06:29:48 +0000 Subject: [PATCH 11/20] Update pro ref --- workflow-templates/includes.tpl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow-templates/includes.tpl.yaml b/workflow-templates/includes.tpl.yaml index c5ae53f51..076c0138d 100644 --- a/workflow-templates/includes.tpl.yaml +++ b/workflow-templates/includes.tpl.yaml @@ -7,7 +7,7 @@ checkout-and-merge-pro: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From 76d07b967e87b3c97602ee8e27bc47694b2eea1a Mon Sep 17 00:00:00 2001 From: CI workflows Date: Fri, 25 Jul 2025 06:30:06 +0000 Subject: [PATCH 12/20] chore: auto-update github workflows --- .github/workflows/build-app-pro-beta.yaml | 2 +- .github/workflows/build-app-pro.yaml | 2 +- .github/workflows/build-cloud-pro.yaml | 2 +- .github/workflows/build-docker-pro.yaml | 2 +- .github/workflows/build-npm-pro.yaml | 2 +- .github/workflows/e2e-pro.yaml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-app-pro-beta.yaml b/.github/workflows/build-app-pro-beta.yaml index 4396ac3bc..90ac92766 100644 --- a/.github/workflows/build-app-pro-beta.yaml +++ b/.github/workflows/build-app-pro-beta.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-app-pro.yaml b/.github/workflows/build-app-pro.yaml index 7171c0282..7bb5e6c0a 100644 --- a/.github/workflows/build-app-pro.yaml +++ b/.github/workflows/build-app-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-cloud-pro.yaml b/.github/workflows/build-cloud-pro.yaml index 4f081bdbf..29a74adfa 100644 --- a/.github/workflows/build-cloud-pro.yaml +++ b/.github/workflows/build-cloud-pro.yaml @@ -39,7 +39,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-docker-pro.yaml b/.github/workflows/build-docker-pro.yaml index 6d41b2ab8..b076fc8ba 100644 --- a/.github/workflows/build-docker-pro.yaml +++ b/.github/workflows/build-docker-pro.yaml @@ -44,7 +44,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/build-npm-pro.yaml b/.github/workflows/build-npm-pro.yaml index e677bf282..74ed76051 100644 --- a/.github/workflows/build-npm-pro.yaml +++ b/.github/workflows/build-npm-pro.yaml @@ -32,7 +32,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro diff --git a/.github/workflows/e2e-pro.yaml b/.github/workflows/e2e-pro.yaml index bd7345160..cda79f687 100644 --- a/.github/workflows/e2e-pro.yaml +++ b/.github/workflows/e2e-pro.yaml @@ -26,7 +26,7 @@ jobs: repository: dbgate/dbgate-pro token: ${{ secrets.GH_TOKEN }} path: dbgate-pro - ref: 4660d21649f2fb7bc1ce26da8f48bc8a8737d7e7 + ref: 36b6ce878c3c0a0c9623163c8a8b3bdeefc7da53 - name: Merge dbgate/dbgate-pro run: | mkdir ../dbgate-pro From 5b1bfe7379d03eb494e7d3eb0b30b4cec211f2b2 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 08:39:02 +0200 Subject: [PATCH 13/20] v6.5.7-beta.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 81122113c..618b60c5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "6.5.7-premium-beta.3", + "version": "6.5.7-beta.5", "name": "dbgate-all", "workspaces": [ "packages/*", From e3b86e4d4177240c656bd73df70e7baaa9b9777e Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 08:39:12 +0200 Subject: [PATCH 14/20] v6.5.7-premium-beta.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 618b60c5f..e088d72fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "6.5.7-beta.5", + "version": "6.5.7-premium-beta.6", "name": "dbgate-all", "workspaces": [ "packages/*", From 0e06d283357effa6271515c6fe300ed348b4e662 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 09:21:25 +0200 Subject: [PATCH 15/20] v6.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e088d72fc..489a49e4d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "6.5.7-premium-beta.6", + "version": "6.6.0", "name": "dbgate-all", "workspaces": [ "packages/*", From 7af6d9b2ce651fa31f0440f4ab8eeb8e61cd75e3 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 09:22:55 +0200 Subject: [PATCH 16/20] test wait --- e2e-tests/cypress/e2e/browse-data.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/cypress/e2e/browse-data.cy.js b/e2e-tests/cypress/e2e/browse-data.cy.js index 8f9914b7a..409ff66d2 100644 --- a/e2e-tests/cypress/e2e/browse-data.cy.js +++ b/e2e-tests/cypress/e2e/browse-data.cy.js @@ -390,7 +390,7 @@ describe('Data browser data', () => { cy.get('body').realType('find most popular artist'); cy.get('body').realPress('{enter}'); cy.testid('DatabaseChatTab_executeAllQueries', { timeout: 20000 }).click(); - cy.wait(4000); + cy.wait(20000); // cy.contains('Iron Maiden'); cy.themeshot('database-chat'); From aa9fdd4fc98483e2fdeb4fa76c91f6d087bba618 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 09:24:22 +0200 Subject: [PATCH 17/20] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a4b1a6cb..230c916b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ Builds: - linux - application for linux - win - application for Windows +## 6.6.0 +- ADDED: Database chat - AI powered chatbot, which knows your database +- ADDED: Firestore support (Premium) + ## 6.5.6 - ADDED: New object window - quick access to most common functions - ADDED: Possibility to disable split query by empty line #1162 From 27e5d639efd53b7cab5e1b581326722e4f3ee9d2 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 09:27:45 +0200 Subject: [PATCH 18/20] changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 230c916b8..d1c2f15d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,10 @@ Builds: - win - application for Windows ## 6.6.0 -- ADDED: Database chat - AI powered chatbot, which knows your database +- ADDED: Database chat - AI powered chatbot, which knows your database (Premium) - ADDED: Firestore support (Premium) +- REMOVED: Query AI assistant (replaced by Database Chat) (Premium) +- FIXED: Chart permissions were ignored (Premium) ## 6.5.6 - ADDED: New object window - quick access to most common functions From c0574bc738992c9e4785b100d60ae1e33551f8e9 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 12:25:02 +0200 Subject: [PATCH 19/20] readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2752c9d1c..bd7f381d8 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ DbGate is licensed under GPL-3.0 license and is free to use for any purpose. * libSQL/Turso (Premium) * DuckDB * Firebird +* Firestore (Premium) @@ -81,6 +82,7 @@ DbGate is licensed under GPL-3.0 license and is free to use for any purpose. * Archives - backup your data in NDJSON files on local filesystem (or on DbGate server, when using web application) * NDJSON data viewer and editor - browse NDJSON data, edit data and structure directly on NDJSON files. Works also for big NDSON files * Charts, export chart to HTML page +* AI powered database chat * Show GEO data on map, export map to HTML page * For detailed info, how to run DbGate in docker container, visit [docker hub](https://hub.docker.com/r/dbgate/dbgate) * Extensible plugin architecture From 43aaf192a2529f13b6e955fff8ccd46491d73df9 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 25 Jul 2025 13:04:21 +0200 Subject: [PATCH 20/20] promo widget --- packages/web/src/widgets/AdminPremiumPromoWidget.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web/src/widgets/AdminPremiumPromoWidget.svelte b/packages/web/src/widgets/AdminPremiumPromoWidget.svelte index 6d8ef125d..7145fb45e 100644 --- a/packages/web/src/widgets/AdminPremiumPromoWidget.svelte +++ b/packages/web/src/widgets/AdminPremiumPromoWidget.svelte @@ -11,6 +11,7 @@
  • Query designer
  • +
  • AI powered database chat
  • Unlimited DbGate Cloud storage
  • Shared cloud folders
  • Charts from query result
  • @@ -19,8 +20,7 @@
  • Backup & restore database
  • Advanced ER diagram settings
  • Export database model
  • -
  • AI assistant
  • -
  • libSQL, Turso, CosmosDB, Redshift support
  • +
  • Firestore, libSQL, Turso, CosmosDB, Redshift support
  • Amazon and Azure identity providers
  • E-mail support