mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-22 09:01:09 +03:00
5df09a15b8
* feat: Require workspace ID for API key operations - Added validation to ensure `activeWorkspaceId` is present in user requests for all API key operations (get, create, update, import, delete). - Updated `getWorkspaceSearchOptions` and `getWorkspaceSearchOptionsFromReq` to throw an error if `workspaceId` is not provided. - Modified service methods to enforce `workspaceId` as a required parameter for database operations related to API keys. * feat: Enforce workspace ID as a required field across multiple interfaces and services - Updated various interfaces to make `workspaceId` a mandatory field instead of optional. - Enhanced assistant and export-import service methods to require `workspaceId` for operations, ensuring proper validation and error handling. - Modified database entity definitions to reflect the change in `workspaceId` from optional to required. - Improved error handling in controllers to check for `activeWorkspaceId` before proceeding with requests. * Require workspace ID in various controllers and services - Updated controllers for credentials, datasets, document stores, evaluations, evaluators, and variables to enforce the presence of `workspaceId`. - Enhanced error handling to throw appropriate errors when `workspaceId` is not provided. - Modified service methods to accept `workspaceId` as a mandatory parameter for operations, ensuring consistent validation across the application. * Update EvaluatorRunner and index to require workspaceId for evaluator retrieval - Modified the runAdditionalEvaluators function to accept workspaceId as a parameter. * lint fixes * Enhancement/Integrate workspaceId in chatflow and flow-config services - Updated chatflow and flow-config controllers to require workspaceId for fetching chatflows. - Modified service methods to accept workspaceId as a parameter, ensuring proper context for chatflow retrieval. * lint fix * get rid of redundant isApiKeyValidated * refactor: update permission checks for chatflows and agentflows routes - Enhanced permission checks in chatflows routes to include agentflows permissions for create, read, update, and delete operations. - Updated navigation paths in authentication views to redirect to the home page instead of chatflows after successful login or registration. * fix(DefaultRedirect.jsx): add redirect unauthenticated users to login * fix(RequireAuth.jsx): check permissions for routes without display property * fix(DefaultRedirect.jsx): WorkspaceSwitcher api spam * fix(routes/chatflows/index.ts): use checkAnyPermission for chatflow/has-changed/:id/:lastUpdatedDateTime * fix(routes/chatflows/index.ts): use checkAnyPermission for delete request chatflow/:id * fix(controllers/text-to-speech/index.ts): add workspace ID validation in generateTextToSpeech * fix(controllers/internal-predictions/index.ts): add chatflow retrieval and validation using workspaceId * feat(services\credentials\index.ts): add filter by workspaceId for getCredentialById * chore(routes/chat-messages/index.ts): unused chat-messages route * feat(services/chatflows/index.ts): add filter by workspaceId for deleteChatflow * feat(services/marketplaces/index.ts): add filter by workspaceId for deleteCustomTemplate * feat(tools): add filter by workspaceId for read, update, and delete --------- Co-authored-by: Vinod Paidimarry <vinodkiran@outlook.in> Co-authored-by: Yau <33013947+chungyau97@users.noreply.github.com> Co-authored-by: chungyau97 <chungyau97@gmail.com>
63 lines
2.3 KiB
TypeScript
63 lines
2.3 KiB
TypeScript
import { NextFunction, Request, Response } from 'express'
|
|
import { StatusCodes } from 'http-status-codes'
|
|
import { InternalFlowiseError } from '../../errors/internalFlowiseError'
|
|
import { getErrorMessage } from '../../errors/utils'
|
|
import { MODE } from '../../Interface'
|
|
import chatflowService from '../../services/chatflows'
|
|
import { utilBuildChatflow } from '../../utils/buildChatflow'
|
|
import { getRunningExpressApp } from '../../utils/getRunningExpressApp'
|
|
|
|
// Send input message and get prediction result (Internal)
|
|
const createInternalPrediction = async (req: Request, res: Response, next: NextFunction) => {
|
|
try {
|
|
const workspaceId = req.user?.activeWorkspaceId
|
|
|
|
const chatflow = await chatflowService.getChatflowById(req.params.id, workspaceId)
|
|
if (!chatflow) {
|
|
throw new InternalFlowiseError(StatusCodes.NOT_FOUND, `Chatflow ${req.params.id} not found`)
|
|
}
|
|
|
|
if (req.body.streaming || req.body.streaming === 'true') {
|
|
createAndStreamInternalPrediction(req, res, next)
|
|
return
|
|
} else {
|
|
const apiResponse = await utilBuildChatflow(req, true)
|
|
if (apiResponse) return res.json(apiResponse)
|
|
}
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
// Send input message and stream prediction result using SSE (Internal)
|
|
const createAndStreamInternalPrediction = async (req: Request, res: Response, next: NextFunction) => {
|
|
const chatId = req.body.chatId
|
|
const sseStreamer = getRunningExpressApp().sseStreamer
|
|
|
|
try {
|
|
sseStreamer.addClient(chatId, res)
|
|
res.setHeader('Content-Type', 'text/event-stream')
|
|
res.setHeader('Cache-Control', 'no-cache')
|
|
res.setHeader('Connection', 'keep-alive')
|
|
res.setHeader('X-Accel-Buffering', 'no') //nginx config: https://serverfault.com/a/801629
|
|
res.flushHeaders()
|
|
|
|
if (process.env.MODE === MODE.QUEUE) {
|
|
getRunningExpressApp().redisSubscriber.subscribe(chatId)
|
|
}
|
|
|
|
const apiResponse = await utilBuildChatflow(req, true)
|
|
sseStreamer.streamMetadataEvent(apiResponse.chatId, apiResponse)
|
|
} catch (error) {
|
|
if (chatId) {
|
|
sseStreamer.streamErrorEvent(chatId, getErrorMessage(error))
|
|
}
|
|
next(error)
|
|
} finally {
|
|
sseStreamer.removeClient(chatId)
|
|
}
|
|
}
|
|
export default {
|
|
createInternalPrediction
|
|
}
|