import { getBaseClasses, getCredentialData } from '../../../src/utils' import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface' import { Neo4jGraph } from '@langchain/community/graphs/neo4j_graph' class Neo4j_Graphs implements INode { label: string name: string version: number type: string icon: string category: string description: string baseClasses: string[] credential: INodeParams inputs: INodeParams[] constructor() { this.label = 'Neo4j' this.name = 'Neo4j' this.version = 1.0 this.type = 'Neo4j' this.icon = 'neo4j.svg' this.category = 'Graph' this.description = 'Connect with Neo4j graph database' this.baseClasses = [this.type, ...getBaseClasses(Neo4jGraph)] this.credential = { label: 'Connect Credential', name: 'credential', type: 'credential', credentialNames: ['neo4jApi'] } this.inputs = [ { label: 'Database', name: 'database', type: 'string', placeholder: 'neo4j', optional: true }, { label: 'Timeout (ms)', name: 'timeoutMs', type: 'number', default: 5000, optional: true }, { label: 'Enhanced Schema', name: 'enhancedSchema', type: 'boolean', default: false, optional: true } ] } async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { const database = nodeData.inputs?.database as string const timeoutMs = nodeData.inputs?.timeoutMs as number const enhancedSchema = nodeData.inputs?.enhancedSchema as boolean const credentialData = await getCredentialData(nodeData.credential ?? '', options) const neo4jConfig = { url: credentialData?.url, username: credentialData?.username, password: credentialData?.password } const neo4jGraph = await Neo4jGraph.initialize({ ...neo4jConfig, ...(database && { database }), ...(timeoutMs && { timeoutMs }), ...(enhancedSchema && { enhancedSchema }) }) return neo4jGraph } } module.exports = { nodeClass: Neo4j_Graphs }