From 1f2aee44440fc077a1472916d92859fbf82da81f Mon Sep 17 00:00:00 2001 From: Max Techera Date: Wed, 25 Feb 2026 12:31:36 -0300 Subject: [PATCH 1/3] fix: restore credential when editing document store loader (AGENT-710) --- .../ui/src/views/docstore/LoaderConfigPreviewChunks.jsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx b/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx index 618d67c135e..ce8d3c24e3b 100644 --- a/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx +++ b/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx @@ -312,6 +312,13 @@ const LoaderConfigPreviewChunks = () => { nodeData.inputs = existingLoaderFromDocStoreTable.loaderConfig setLoaderName(existingLoaderFromDocStoreTable.loaderName) } + // Restore credential from the separate credential field (fixes AGENT-710: + // credential-gated loaders failing on process/preview despite being authorized) + if (existingLoaderFromDocStoreTable?.credential) { + nodeData.credential = existingLoaderFromDocStoreTable.credential + if (!nodeData.inputs) nodeData.inputs = {} + nodeData.inputs['FLOWISE_CREDENTIAL_ID'] = existingLoaderFromDocStoreTable.credential + } setSelectedDocumentLoader(nodeData) // Check if the loader has a text splitter, if yes, get the text splitter nodes From 38a86c67f25b258c54a995460f3f14fa386b228f Mon Sep 17 00:00:00 2001 From: Max Techera Date: Wed, 25 Feb 2026 13:06:23 -0300 Subject: [PATCH 2/3] refactor: use FLOWISE_CREDENTIAL_ID constant and expand restore comment --- .../views/docstore/LoaderConfigPreviewChunks.jsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx b/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx index ce8d3c24e3b..a224b487277 100644 --- a/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx +++ b/packages/ui/src/views/docstore/LoaderConfigPreviewChunks.jsx @@ -30,7 +30,7 @@ import documentStoreApi from '@/api/documentstore' import documentsApi from '@/api/documentstore' // Const -import { baseURL, gridSpacing } from '@/store/constant' +import { baseURL, gridSpacing, FLOWISE_CREDENTIAL_ID } from '@/store/constant' import { closeSnackbar as closeSnackbarAction, enqueueSnackbar as enqueueSnackbarAction } from '@/store/actions' import { useError } from '@/store/context/ErrorContext' @@ -145,7 +145,7 @@ const LoaderConfigPreviewChunks = () => { if ( inputParam.type === 'credential' && !selectedDocumentLoader.credential && - !selectedDocumentLoader.inputs['FLOWISE_CREDENTIAL_ID'] + !selectedDocumentLoader.inputs[FLOWISE_CREDENTIAL_ID] ) { canSubmit = false missingFields.push(inputParam.label || inputParam.name) @@ -312,12 +312,17 @@ const LoaderConfigPreviewChunks = () => { nodeData.inputs = existingLoaderFromDocStoreTable.loaderConfig setLoaderName(existingLoaderFromDocStoreTable.loaderName) } - // Restore credential from the separate credential field (fixes AGENT-710: - // credential-gated loaders failing on process/preview despite being authorized) + // Restore credential from the separate `credential` field on the loader entity. + // This block intentionally runs outside the loaderConfig guard above because + // `loader.credential` is persisted as its own DB column — independent of + // loaderConfig — and may be the *only* place the credential ID is stored for + // loaders created before FLOWISE_CREDENTIAL_ID was written into inputs. + // Without this, checkMandatoryFields and prepareConfig both miss the credential, + // causing a false "Connect Credential" validation error on process/preview. if (existingLoaderFromDocStoreTable?.credential) { nodeData.credential = existingLoaderFromDocStoreTable.credential if (!nodeData.inputs) nodeData.inputs = {} - nodeData.inputs['FLOWISE_CREDENTIAL_ID'] = existingLoaderFromDocStoreTable.credential + nodeData.inputs[FLOWISE_CREDENTIAL_ID] = existingLoaderFromDocStoreTable.credential } setSelectedDocumentLoader(nodeData) From 9c6079352add57227c9cb8e51f37e7b7cb90a6c7 Mon Sep 17 00:00:00 2001 From: Max Techera Date: Wed, 25 Feb 2026 14:00:30 -0300 Subject: [PATCH 3/3] fix: add drive scope to googleSheetsOAuth2 to enable listing all spreadsheets --- packages/components/credentials/GoogleSheetsOAuth2.credential.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/components/credentials/GoogleSheetsOAuth2.credential.ts b/packages/components/credentials/GoogleSheetsOAuth2.credential.ts index 3e21479224f..259bfc31747 100644 --- a/packages/components/credentials/GoogleSheetsOAuth2.credential.ts +++ b/packages/components/credentials/GoogleSheetsOAuth2.credential.ts @@ -1,5 +1,6 @@ import { INodeParams, INodeCredential } from '../src/Interface' const scopes = [ + 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.metadata'