mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 15:00:57 +03:00
feature: modularized express routes for reusability, testability, composability and performance (#2030)
* transition GET /api/v1/apikey * transition POST /api/v1/apikey * transition PUT /api/v1/apikey/:id * transition DELETE /api/v1/apikey/:id * Enable e2e tests for api/v1/apikey routes * remove unused addChatflowsCount * Enable e2e tests for api/v1/variables routes * Enable Cypress in GitHub Action * Update main.yml * Update main.yml * Transition GET /api/v1/variables * Enable cypress on github workflow * Transition POST /api/v1/variables * Transition PUT /api/v1/variables * Transition DELETE /api/v1/variables * Transition GET /api/v1/variables * Transition GET /api/v1/chatflows * Transition GET /api/v1/chatflows/:id * Transition POST /api/v1/chatflows * Transition DELETE /api/v1/chatflows/:id * Transition PUT /api/v1/chatflows/:id * Transition GET /api/v1/chatflows/apikey/:apiKey * Transition GET /api/v1/credentials * Transition POST /api/v1/credentials * Transition GET /api/v1/credentials/:id * Transition PUT /api/v1/credentials/:id * Transition DELETE /api/v1/credentials/:id * Transition GET /api/v1/tools * Transition GET /api/v1/tools/:id * Transition POST /api/v1/tools * Transition PUT & DELETE /api/v1/tools/:id * Transition /api/v1/assistants routes * Transition /api/v1/nodes routes * Transition GET /api/v1/chatflows-streaming/:id & GET /api/v1/chatflows-uploads/:id * wip-all-routes * Transition GET /api/v1/public-chatflows/:id & /api/v1/public-chatbotConfig/:id * Remove ts-ignore annotations * Transition GET /api/v1/chatmessage/:id * Transition POST /api/v1/chatmessage/:id * delete /api/v1/chatmessage/:id * transition /api/v1/feedback/:id routes * transition /api/v1/stats/:id * Transition GET /api/v1/openai-assistants/:id * Transition GET /api/v1/openai-assistants * Transition POST /api/v1/openai-assistants-file * transition GET /api/v1/get-upload-path * transition GET /api/v1/get-upload-file * transition GET /api/v1/flow-config/:id * transition POST /api/v1/node-config * transition GET /api/v1/version * transition GET /api/v1/fetch-links * transition POST /api/v1/vector/upsert/:id * transition POST /api/v1/vector/internal-upsert/:id * transition POST /api/v1/load-prompt * Update index.ts * transition POST /api/v1/prompts-list * transition predictions * Update index.ts * transition GET /api/v1/marketplaces/templates * Router update modularity cleanup * extend request interface - express namespace * Update index.ts * add errorMiddleware * Add custom application error handler * Fix pnpm lock file * prediction return and vector upsert * Move the getUploadsConfig into its own file * Remove lint warnings * fix undefined variable value * Fix node-load-method api call * standardize the error message display * Apply review comment bugfixes * Update index.ts * standardize error message display in snack notifications * Error message standard in the UI * Rename flowXpressApp to appServer * Upload middleware fix and axios update * fix async await --------- Co-authored-by: Henry <hzj94@hotmail.com>
This commit is contained in:
committed by
GitHub
parent
ea255db15d
commit
957694a912
@@ -0,0 +1,126 @@
|
||||
import { omit } from 'lodash'
|
||||
import { getRunningExpressApp } from '../../utils/getRunningExpressApp'
|
||||
import { Credential } from '../../database/entities/Credential'
|
||||
import { transformToCredentialEntity, decryptCredentialData } from '../../utils'
|
||||
import { ICredentialReturnResponse } from '../../Interface'
|
||||
|
||||
const createCredential = async (requestBody: any) => {
|
||||
try {
|
||||
const appServer = getRunningExpressApp()
|
||||
const newCredential = await transformToCredentialEntity(requestBody)
|
||||
const credential = await appServer.AppDataSource.getRepository(Credential).create(newCredential)
|
||||
const dbResponse = await appServer.AppDataSource.getRepository(Credential).save(credential)
|
||||
return dbResponse
|
||||
} catch (error) {
|
||||
throw new Error(`Error: credentialsService.createCredential - ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
// Delete all credentials from chatflowid
|
||||
const deleteCredentials = async (credentialId: string): Promise<any> => {
|
||||
try {
|
||||
const appServer = getRunningExpressApp()
|
||||
const dbResponse = await appServer.AppDataSource.getRepository(Credential).delete({ id: credentialId })
|
||||
if (!dbResponse) {
|
||||
return {
|
||||
executionError: true,
|
||||
status: 404,
|
||||
msg: `Credential ${credentialId} not found`
|
||||
}
|
||||
}
|
||||
return dbResponse
|
||||
} catch (error) {
|
||||
throw new Error(`Error: credentialsService.deleteCredential - ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
const getAllCredentials = async (paramCredentialName: any) => {
|
||||
try {
|
||||
const appServer = getRunningExpressApp()
|
||||
let dbResponse = []
|
||||
if (paramCredentialName) {
|
||||
if (Array.isArray(paramCredentialName)) {
|
||||
for (let i = 0; i < paramCredentialName.length; i += 1) {
|
||||
const name = paramCredentialName[i] as string
|
||||
const credentials = await appServer.AppDataSource.getRepository(Credential).findBy({
|
||||
credentialName: name
|
||||
})
|
||||
dbResponse.push(...credentials)
|
||||
}
|
||||
} else {
|
||||
const credentials = await appServer.AppDataSource.getRepository(Credential).findBy({
|
||||
credentialName: paramCredentialName as string
|
||||
})
|
||||
dbResponse = [...credentials]
|
||||
}
|
||||
} else {
|
||||
const credentials = await appServer.AppDataSource.getRepository(Credential).find()
|
||||
for (const credential of credentials) {
|
||||
dbResponse.push(omit(credential, ['encryptedData']))
|
||||
}
|
||||
}
|
||||
return dbResponse
|
||||
} catch (error) {
|
||||
throw new Error(`Error: credentialsService.getAllCredentials - ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
const getCredentialById = async (credentialId: string): Promise<any> => {
|
||||
try {
|
||||
const appServer = getRunningExpressApp()
|
||||
const credential = await appServer.AppDataSource.getRepository(Credential).findOneBy({
|
||||
id: credentialId
|
||||
})
|
||||
if (!credential) {
|
||||
return {
|
||||
executionError: true,
|
||||
status: 404,
|
||||
msg: `Credential ${credentialId} not found`
|
||||
}
|
||||
}
|
||||
// Decrpyt credentialData
|
||||
const decryptedCredentialData = await decryptCredentialData(
|
||||
credential.encryptedData,
|
||||
credential.credentialName,
|
||||
appServer.nodesPool.componentCredentials
|
||||
)
|
||||
const returnCredential: ICredentialReturnResponse = {
|
||||
...credential,
|
||||
plainDataObj: decryptedCredentialData
|
||||
}
|
||||
const dbResponse = omit(returnCredential, ['encryptedData'])
|
||||
return dbResponse
|
||||
} catch (error) {
|
||||
throw new Error(`Error: credentialsService.createCredential - ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
const updateCredential = async (credentialId: string, requestBody: any): Promise<any> => {
|
||||
try {
|
||||
const appServer = getRunningExpressApp()
|
||||
const credential = await appServer.AppDataSource.getRepository(Credential).findOneBy({
|
||||
id: credentialId
|
||||
})
|
||||
if (!credential) {
|
||||
return {
|
||||
executionError: true,
|
||||
status: 404,
|
||||
msg: `Credential ${credentialId} not found`
|
||||
}
|
||||
}
|
||||
const updateCredential = await transformToCredentialEntity(requestBody)
|
||||
await appServer.AppDataSource.getRepository(Credential).merge(credential, updateCredential)
|
||||
const dbResponse = await appServer.AppDataSource.getRepository(Credential).save(credential)
|
||||
return dbResponse
|
||||
} catch (error) {
|
||||
throw new Error(`Error: credentialsService.updateCredential - ${error}`)
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
createCredential,
|
||||
deleteCredentials,
|
||||
getAllCredentials,
|
||||
getCredentialById,
|
||||
updateCredential
|
||||
}
|
||||
Reference in New Issue
Block a user