@n8n/n8n-nodes-langchain 1.122.10 → 1.122.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,7 +23,7 @@ __export(Code_node_exports, {
23
23
  vmResolver: () => vmResolver
24
24
  });
25
25
  module.exports = __toCommonJS(Code_node_exports);
26
- var import_vm2 = require("@n8n/vm2");
26
+ var import_vm2 = require("vm2");
27
27
  var import_JavaScriptSandbox = require("n8n-nodes-base/dist/nodes/Code/JavaScriptSandbox");
28
28
  var import_Sandbox = require("n8n-nodes-base/dist/nodes/Code/Sandbox");
29
29
  var import_utils = require("n8n-nodes-base/dist/nodes/Code/utils");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/code/Code.node.ts"],"sourcesContent":["import type { Tool } from '@langchain/core/tools';\nimport { makeResolverFromLegacyOptions } from '@n8n/vm2';\nimport { JavaScriptSandbox } from 'n8n-nodes-base/dist/nodes/Code/JavaScriptSandbox';\nimport { getSandboxContext } from 'n8n-nodes-base/dist/nodes/Code/Sandbox';\nimport { standardizeOutput } from 'n8n-nodes-base/dist/nodes/Code/utils';\nimport { NodeOperationError, NodeConnectionTypes } from 'n8n-workflow';\nimport type {\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeDescription,\n\tINodeOutputConfiguration,\n\tSupplyData,\n\tISupplyDataFunctions,\n} from 'n8n-workflow';\n\n// TODO: Add support for execute function. Got already started but got commented out\n\nimport { logWrapper } from '@utils/logWrapper';\n\nconst { NODE_FUNCTION_ALLOW_BUILTIN: builtIn, NODE_FUNCTION_ALLOW_EXTERNAL: external } =\n\tprocess.env;\n\n// TODO: Replace\nconst connectorTypes = {\n\t[NodeConnectionTypes.AiChain]: 'Chain',\n\t[NodeConnectionTypes.AiDocument]: 'Document',\n\t[NodeConnectionTypes.AiEmbedding]: 'Embedding',\n\t[NodeConnectionTypes.AiLanguageModel]: 'Language Model',\n\t[NodeConnectionTypes.AiMemory]: 'Memory',\n\t[NodeConnectionTypes.AiOutputParser]: 'Output Parser',\n\t[NodeConnectionTypes.AiTextSplitter]: 'Text Splitter',\n\t[NodeConnectionTypes.AiTool]: 'Tool',\n\t[NodeConnectionTypes.AiVectorStore]: 'Vector Store',\n\t[NodeConnectionTypes.Main]: 'Main',\n};\n\nconst defaultCodeExecute = `const { PromptTemplate } = require('@langchain/core/prompts');\n\nconst query = 'Tell me a joke';\nconst prompt = PromptTemplate.fromTemplate(query);\n\n// If you are allowing more than one language model input connection (-1 or\n// anything greater than 1), getInputConnectionData returns an array, so you\n// will have to change the code below it to deal with that. For example, use\n// llm[0] in the chain definition\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nlet chain = prompt.pipe(llm);\nconst output = await chain.invoke();\nreturn [ {json: { output } } ];\n\n// NOTE: Old langchain imports (e.g., 'langchain/chains') are automatically\n// converted to '@langchain/classic' imports for backwards compatibility.`;\n\nconst defaultCodeSupplyData = `const { WikipediaQueryRun } = require( '@langchain/community/tools/wikipedia_query_run');\nreturn new WikipediaQueryRun();`;\n\n/**\n * Transforms old langchain import paths to @langchain/classic for backwards compatibility.\n * Only transforms paths that actually moved to the classic package.\n *\n * @param moduleName - The original module name from the import statement\n * @returns The transformed module name, or the original if no transformation is needed\n */\nexport function transformLegacyLangchainImport(moduleName: string): string {\n\t// List of langchain submodules that moved to @langchain/classic\n\t// Based on https://www.npmjs.com/package/@langchain/classic exports\n\tconst classicModules = [\n\t\t'agents',\n\t\t'callbacks',\n\t\t'chains',\n\t\t'chat_models/universal',\n\t\t'document',\n\t\t'document_loaders',\n\t\t'document_transformers',\n\t\t'embeddings/cache_backed',\n\t\t'embeddings/fake',\n\t\t'evaluation',\n\t\t'experimental',\n\t\t'hub',\n\t\t'indexes',\n\t\t'load',\n\t\t'memory',\n\t\t'output_parsers',\n\t\t'retrievers',\n\t\t'schema',\n\t\t'smith',\n\t\t'sql_db',\n\t\t'storage',\n\t\t'stores',\n\t\t'text_splitter',\n\t\t'tools',\n\t\t'util',\n\t\t'vectorstores',\n\t];\n\n\t// Check if this is a langchain/ import (old style)\n\tif (moduleName.startsWith('langchain/')) {\n\t\tconst subpath = moduleName.substring('langchain/'.length);\n\n\t\t// Check if this subpath or any parent path is in the classic modules list\n\t\tfor (const classicModule of classicModules) {\n\t\t\tif (subpath === classicModule || subpath.startsWith(classicModule + '/')) {\n\t\t\t\t// Transform to @langchain/classic\n\t\t\t\treturn `@langchain/classic/${subpath}`;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn moduleName;\n}\n\n/**\n * Transforms user code to replace old langchain require/import statements\n * with @langchain/classic equivalents.\n *\n * @param code - The user's code string\n * @returns The transformed code with updated import paths\n */\nfunction transformLegacyLangchainCode(code: string): string {\n\t// Transform require statements: require('langchain/...')\n\tlet transformedCode = code.replace(\n\t\t/require\\s*\\(\\s*['\"]langchain\\/([\\w/_]+)['\"]\\s*\\)/g,\n\t\t(match, subpath) => {\n\t\t\tconst oldPath = `langchain/${subpath}`;\n\t\t\tconst newPath = transformLegacyLangchainImport(oldPath);\n\t\t\treturn newPath === oldPath ? match : `require('${newPath}')`;\n\t\t},\n\t);\n\n\t// Transform import statements: from 'langchain/...'\n\ttransformedCode = transformedCode.replace(\n\t\t/from\\s+['\"]langchain\\/([\\w/_]+)['\"]/g,\n\t\t(match, subpath) => {\n\t\t\tconst oldPath = `langchain/${subpath}`;\n\t\t\tconst newPath = transformLegacyLangchainImport(oldPath);\n\t\t\treturn newPath === oldPath ? match : `from '${newPath}'`;\n\t\t},\n\t);\n\n\treturn transformedCode;\n}\n\nconst langchainModules = ['langchain', '@langchain/*'];\nexport const vmResolver = makeResolverFromLegacyOptions({\n\texternal: {\n\t\tmodules: external ? [...langchainModules, ...external.split(',')] : [...langchainModules],\n\t\ttransitive: false,\n\t},\n\tresolve(moduleName, parentDirname) {\n\t\tif (moduleName.match(/^langchain\\//) ?? moduleName.match(/^@langchain\\//)) {\n\t\t\treturn require.resolve(`@n8n/n8n-nodes-langchain/node_modules/${moduleName}.cjs`, {\n\t\t\t\tpaths: [parentDirname],\n\t\t\t});\n\t\t}\n\t\treturn;\n\t},\n\tbuiltin: builtIn?.split(',') ?? [],\n});\n\nfunction getSandbox(\n\tthis: IExecuteFunctions | ISupplyDataFunctions,\n\tcode: string,\n\toptions?: { addItems?: boolean; itemIndex?: number },\n) {\n\tconst itemIndex = options?.itemIndex ?? 0;\n\tconst node = this.getNode();\n\tconst workflowMode = this.getMode();\n\n\t// Transform legacy langchain imports to @langchain/classic\n\tconst transformedCode = transformLegacyLangchainCode(code);\n\n\tconst context = getSandboxContext.call(this, itemIndex);\n\tcontext.addInputData = this.addInputData.bind(this);\n\tcontext.addOutputData = this.addOutputData.bind(this);\n\tcontext.getInputConnectionData = this.getInputConnectionData.bind(this);\n\tcontext.getInputData = this.getInputData.bind(this);\n\tcontext.getNode = this.getNode.bind(this);\n\tcontext.getExecutionCancelSignal = this.getExecutionCancelSignal.bind(this);\n\tcontext.getNodeOutputs = this.getNodeOutputs.bind(this);\n\tcontext.executeWorkflow = this.executeWorkflow.bind(this);\n\tcontext.getWorkflowDataProxy = this.getWorkflowDataProxy.bind(this);\n\tcontext.logger = this.logger;\n\n\tif (options?.addItems) {\n\t\tcontext.items = context.$input.all();\n\t}\n\n\tconst sandbox = new JavaScriptSandbox(context, transformedCode, this.helpers, {\n\t\tresolver: vmResolver,\n\t});\n\n\tsandbox.on(\n\t\t'output',\n\t\tworkflowMode === 'manual'\n\t\t\t? this.sendMessageToUI.bind(this)\n\t\t\t: (...args: unknown[]) =>\n\t\t\t\t\tconsole.log(`[Workflow \"${this.getWorkflow().id}\"][Node \"${node.name}\"]`, ...args),\n\t);\n\treturn sandbox;\n}\n\nexport class Code implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'LangChain Code',\n\t\tname: 'code',\n\t\ticon: 'fa:code',\n\t\ticonColor: 'black',\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tdescription: 'LangChain Code Node',\n\t\tdefaults: {\n\t\t\tname: 'LangChain Code',\n\t\t},\n\t\tcodex: {\n\t\t\tcategories: ['AI'],\n\t\t\tsubcategories: {\n\t\t\t\tAI: ['Miscellaneous'],\n\t\t\t},\n\t\t\tresources: {\n\t\t\t\tprimaryDocumentation: [\n\t\t\t\t\t{\n\t\t\t\t\t\turl: 'https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code/',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tinputs: `={{ ((values) => { const connectorTypes = ${JSON.stringify(\n\t\t\tconnectorTypes,\n\t\t)}; return values.map(value => { return { type: value.type, required: value.required, maxConnections: value.maxConnections === -1 ? undefined : value.maxConnections, displayName: connectorTypes[value.type] !== 'Main' ? connectorTypes[value.type] : undefined } } ) })($parameter.inputs.input) }}`,\n\t\toutputs: `={{ ((values) => { const connectorTypes = ${JSON.stringify(\n\t\t\tconnectorTypes,\n\t\t)}; return values.map(value => { return { type: value.type, displayName: connectorTypes[value.type] !== 'Main' ? connectorTypes[value.type] : undefined } } ) })($parameter.outputs.output) }}`,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Code',\n\t\t\t\tname: 'code',\n\t\t\t\tplaceholder: 'Add Code',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'execute',\n\t\t\t\t\t\tdisplayName: 'Execute',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'JavaScript - Execute',\n\t\t\t\t\t\t\t\tname: 'code',\n\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\t\teditor: 'jsEditor',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdefault: defaultCodeExecute,\n\t\t\t\t\t\t\t\thint: 'This code will only run and return data if a \"Main\" input & output got created.',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'supplyData',\n\t\t\t\t\t\tdisplayName: 'Supply Data',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'JavaScript - Supply Data',\n\t\t\t\t\t\t\t\tname: 'code',\n\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\t\teditor: 'jsEditor',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdefault: defaultCodeSupplyData,\n\t\t\t\t\t\t\t\thint: 'This code will only run and return data if an output got created which is not \"Main\".',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\t// TODO: Add links to docs which provide additional information regarding functionality\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'You can import LangChain and use all available functionality. Debug by using <code>console.log()</code> statements and viewing their output in the browser console.',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Inputs',\n\t\t\t\tname: 'inputs',\n\t\t\t\tplaceholder: 'Add Input',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\tsortable: true,\n\t\t\t\t},\n\t\t\t\tdescription: 'The input to add',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'input',\n\t\t\t\t\t\tdisplayName: 'Input',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\t\toptions: Object.keys(connectorTypes).map((key) => ({\n\t\t\t\t\t\t\t\t\tname: connectorTypes[key as keyof typeof connectorTypes],\n\t\t\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription: 'The type of the input',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Max Connections',\n\t\t\t\t\t\t\t\tname: 'maxConnections',\n\t\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: -1,\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'How many nodes of this type are allowed to be connected. Set it to -1 for unlimited.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Required',\n\t\t\t\t\t\t\t\tname: 'required',\n\t\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription: 'Whether the input needs a connection',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Outputs',\n\t\t\t\tname: 'outputs',\n\t\t\t\tplaceholder: 'Add Output',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\tsortable: true,\n\t\t\t\t},\n\t\t\t\tdescription: 'The output to add',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'output',\n\t\t\t\t\t\tdisplayName: 'Output',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\t\toptions: Object.keys(connectorTypes).map((key) => ({\n\t\t\t\t\t\t\t\t\tname: connectorTypes[key as keyof typeof connectorTypes],\n\t\t\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription: 'The type of the input',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst itemIndex = 0;\n\n\t\tconst code = this.getNodeParameter('code', itemIndex) as { execute?: { code: string } };\n\n\t\tif (!code.execute?.code) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t`No code for \"Execute\" set on node \"${this.getNode().name}`,\n\t\t\t\t{\n\t\t\t\t\titemIndex,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst sandbox = getSandbox.call(this, code.execute.code, { addItems: true, itemIndex });\n\n\t\tconst outputs = this.getNodeOutputs();\n\t\tconst mainOutputs: INodeOutputConfiguration[] = outputs.filter(\n\t\t\t(output) => output.type === NodeConnectionTypes.Main,\n\t\t);\n\n\t\tconst options = { multiOutput: mainOutputs.length !== 1 };\n\n\t\tlet items: INodeExecutionData[] | INodeExecutionData[][];\n\t\ttry {\n\t\t\titems = await sandbox.runCodeAllItems(options);\n\t\t} catch (error) {\n\t\t\tif (!this.continueOnFail()) throw error;\n\t\t\titems = [{ json: { error: (error as Error).message } }];\n\t\t\tif (options.multiOutput) {\n\t\t\t\titems = [items];\n\t\t\t}\n\t\t}\n\n\t\tif (mainOutputs.length === 0) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t'The node does not have a \"Main\" output set. Please add one.',\n\t\t\t\t{\n\t\t\t\t\titemIndex,\n\t\t\t\t},\n\t\t\t);\n\t\t} else if (!options.multiOutput) {\n\t\t\tfor (const item of items as INodeExecutionData[]) {\n\t\t\t\tstandardizeOutput(item.json);\n\t\t\t}\n\t\t\treturn [items as INodeExecutionData[]];\n\t\t} else {\n\t\t\titems.forEach((data) => {\n\t\t\t\tfor (const item of data as INodeExecutionData[]) {\n\t\t\t\t\tstandardizeOutput(item.json);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn items as INodeExecutionData[][];\n\t\t}\n\t}\n\n\tasync supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData> {\n\t\tconst code = this.getNodeParameter('code', itemIndex) as { supplyData?: { code: string } };\n\n\t\tif (!code.supplyData?.code) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t`No code for \"Supply Data\" set on node \"${this.getNode().name}`,\n\t\t\t\t{\n\t\t\t\t\titemIndex,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst sandbox = getSandbox.call(this, code.supplyData.code, { itemIndex });\n\t\tconst response = await sandbox.runCode<Tool>();\n\n\t\treturn {\n\t\t\tresponse: logWrapper(response, this),\n\t\t};\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../nodes/code/Code.node.ts"],"sourcesContent":["import type { Tool } from '@langchain/core/tools';\nimport { makeResolverFromLegacyOptions } from 'vm2';\nimport { JavaScriptSandbox } from 'n8n-nodes-base/dist/nodes/Code/JavaScriptSandbox';\nimport { getSandboxContext } from 'n8n-nodes-base/dist/nodes/Code/Sandbox';\nimport { standardizeOutput } from 'n8n-nodes-base/dist/nodes/Code/utils';\nimport { NodeOperationError, NodeConnectionTypes } from 'n8n-workflow';\nimport type {\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeDescription,\n\tINodeOutputConfiguration,\n\tSupplyData,\n\tISupplyDataFunctions,\n} from 'n8n-workflow';\n\n// TODO: Add support for execute function. Got already started but got commented out\n\nimport { logWrapper } from '@utils/logWrapper';\n\nconst { NODE_FUNCTION_ALLOW_BUILTIN: builtIn, NODE_FUNCTION_ALLOW_EXTERNAL: external } =\n\tprocess.env;\n\n// TODO: Replace\nconst connectorTypes = {\n\t[NodeConnectionTypes.AiChain]: 'Chain',\n\t[NodeConnectionTypes.AiDocument]: 'Document',\n\t[NodeConnectionTypes.AiEmbedding]: 'Embedding',\n\t[NodeConnectionTypes.AiLanguageModel]: 'Language Model',\n\t[NodeConnectionTypes.AiMemory]: 'Memory',\n\t[NodeConnectionTypes.AiOutputParser]: 'Output Parser',\n\t[NodeConnectionTypes.AiTextSplitter]: 'Text Splitter',\n\t[NodeConnectionTypes.AiTool]: 'Tool',\n\t[NodeConnectionTypes.AiVectorStore]: 'Vector Store',\n\t[NodeConnectionTypes.Main]: 'Main',\n};\n\nconst defaultCodeExecute = `const { PromptTemplate } = require('@langchain/core/prompts');\n\nconst query = 'Tell me a joke';\nconst prompt = PromptTemplate.fromTemplate(query);\n\n// If you are allowing more than one language model input connection (-1 or\n// anything greater than 1), getInputConnectionData returns an array, so you\n// will have to change the code below it to deal with that. For example, use\n// llm[0] in the chain definition\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nlet chain = prompt.pipe(llm);\nconst output = await chain.invoke();\nreturn [ {json: { output } } ];\n\n// NOTE: Old langchain imports (e.g., 'langchain/chains') are automatically\n// converted to '@langchain/classic' imports for backwards compatibility.`;\n\nconst defaultCodeSupplyData = `const { WikipediaQueryRun } = require( '@langchain/community/tools/wikipedia_query_run');\nreturn new WikipediaQueryRun();`;\n\n/**\n * Transforms old langchain import paths to @langchain/classic for backwards compatibility.\n * Only transforms paths that actually moved to the classic package.\n *\n * @param moduleName - The original module name from the import statement\n * @returns The transformed module name, or the original if no transformation is needed\n */\nexport function transformLegacyLangchainImport(moduleName: string): string {\n\t// List of langchain submodules that moved to @langchain/classic\n\t// Based on https://www.npmjs.com/package/@langchain/classic exports\n\tconst classicModules = [\n\t\t'agents',\n\t\t'callbacks',\n\t\t'chains',\n\t\t'chat_models/universal',\n\t\t'document',\n\t\t'document_loaders',\n\t\t'document_transformers',\n\t\t'embeddings/cache_backed',\n\t\t'embeddings/fake',\n\t\t'evaluation',\n\t\t'experimental',\n\t\t'hub',\n\t\t'indexes',\n\t\t'load',\n\t\t'memory',\n\t\t'output_parsers',\n\t\t'retrievers',\n\t\t'schema',\n\t\t'smith',\n\t\t'sql_db',\n\t\t'storage',\n\t\t'stores',\n\t\t'text_splitter',\n\t\t'tools',\n\t\t'util',\n\t\t'vectorstores',\n\t];\n\n\t// Check if this is a langchain/ import (old style)\n\tif (moduleName.startsWith('langchain/')) {\n\t\tconst subpath = moduleName.substring('langchain/'.length);\n\n\t\t// Check if this subpath or any parent path is in the classic modules list\n\t\tfor (const classicModule of classicModules) {\n\t\t\tif (subpath === classicModule || subpath.startsWith(classicModule + '/')) {\n\t\t\t\t// Transform to @langchain/classic\n\t\t\t\treturn `@langchain/classic/${subpath}`;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn moduleName;\n}\n\n/**\n * Transforms user code to replace old langchain require/import statements\n * with @langchain/classic equivalents.\n *\n * @param code - The user's code string\n * @returns The transformed code with updated import paths\n */\nfunction transformLegacyLangchainCode(code: string): string {\n\t// Transform require statements: require('langchain/...')\n\tlet transformedCode = code.replace(\n\t\t/require\\s*\\(\\s*['\"]langchain\\/([\\w/_]+)['\"]\\s*\\)/g,\n\t\t(match, subpath) => {\n\t\t\tconst oldPath = `langchain/${subpath}`;\n\t\t\tconst newPath = transformLegacyLangchainImport(oldPath);\n\t\t\treturn newPath === oldPath ? match : `require('${newPath}')`;\n\t\t},\n\t);\n\n\t// Transform import statements: from 'langchain/...'\n\ttransformedCode = transformedCode.replace(\n\t\t/from\\s+['\"]langchain\\/([\\w/_]+)['\"]/g,\n\t\t(match, subpath) => {\n\t\t\tconst oldPath = `langchain/${subpath}`;\n\t\t\tconst newPath = transformLegacyLangchainImport(oldPath);\n\t\t\treturn newPath === oldPath ? match : `from '${newPath}'`;\n\t\t},\n\t);\n\n\treturn transformedCode;\n}\n\nconst langchainModules = ['langchain', '@langchain/*'];\nexport const vmResolver = makeResolverFromLegacyOptions({\n\texternal: {\n\t\tmodules: external ? [...langchainModules, ...external.split(',')] : [...langchainModules],\n\t\ttransitive: false,\n\t},\n\tresolve(moduleName, parentDirname) {\n\t\tif (moduleName.match(/^langchain\\//) ?? moduleName.match(/^@langchain\\//)) {\n\t\t\treturn require.resolve(`@n8n/n8n-nodes-langchain/node_modules/${moduleName}.cjs`, {\n\t\t\t\tpaths: [parentDirname],\n\t\t\t});\n\t\t}\n\t\treturn;\n\t},\n\tbuiltin: builtIn?.split(',') ?? [],\n});\n\nfunction getSandbox(\n\tthis: IExecuteFunctions | ISupplyDataFunctions,\n\tcode: string,\n\toptions?: { addItems?: boolean; itemIndex?: number },\n) {\n\tconst itemIndex = options?.itemIndex ?? 0;\n\tconst node = this.getNode();\n\tconst workflowMode = this.getMode();\n\n\t// Transform legacy langchain imports to @langchain/classic\n\tconst transformedCode = transformLegacyLangchainCode(code);\n\n\tconst context = getSandboxContext.call(this, itemIndex);\n\tcontext.addInputData = this.addInputData.bind(this);\n\tcontext.addOutputData = this.addOutputData.bind(this);\n\tcontext.getInputConnectionData = this.getInputConnectionData.bind(this);\n\tcontext.getInputData = this.getInputData.bind(this);\n\tcontext.getNode = this.getNode.bind(this);\n\tcontext.getExecutionCancelSignal = this.getExecutionCancelSignal.bind(this);\n\tcontext.getNodeOutputs = this.getNodeOutputs.bind(this);\n\tcontext.executeWorkflow = this.executeWorkflow.bind(this);\n\tcontext.getWorkflowDataProxy = this.getWorkflowDataProxy.bind(this);\n\tcontext.logger = this.logger;\n\n\tif (options?.addItems) {\n\t\tcontext.items = context.$input.all();\n\t}\n\n\tconst sandbox = new JavaScriptSandbox(context, transformedCode, this.helpers, {\n\t\tresolver: vmResolver,\n\t});\n\n\tsandbox.on(\n\t\t'output',\n\t\tworkflowMode === 'manual'\n\t\t\t? this.sendMessageToUI.bind(this)\n\t\t\t: (...args: unknown[]) =>\n\t\t\t\t\tconsole.log(`[Workflow \"${this.getWorkflow().id}\"][Node \"${node.name}\"]`, ...args),\n\t);\n\treturn sandbox;\n}\n\nexport class Code implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'LangChain Code',\n\t\tname: 'code',\n\t\ticon: 'fa:code',\n\t\ticonColor: 'black',\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tdescription: 'LangChain Code Node',\n\t\tdefaults: {\n\t\t\tname: 'LangChain Code',\n\t\t},\n\t\tcodex: {\n\t\t\tcategories: ['AI'],\n\t\t\tsubcategories: {\n\t\t\t\tAI: ['Miscellaneous'],\n\t\t\t},\n\t\t\tresources: {\n\t\t\t\tprimaryDocumentation: [\n\t\t\t\t\t{\n\t\t\t\t\t\turl: 'https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code/',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tinputs: `={{ ((values) => { const connectorTypes = ${JSON.stringify(\n\t\t\tconnectorTypes,\n\t\t)}; return values.map(value => { return { type: value.type, required: value.required, maxConnections: value.maxConnections === -1 ? undefined : value.maxConnections, displayName: connectorTypes[value.type] !== 'Main' ? connectorTypes[value.type] : undefined } } ) })($parameter.inputs.input) }}`,\n\t\toutputs: `={{ ((values) => { const connectorTypes = ${JSON.stringify(\n\t\t\tconnectorTypes,\n\t\t)}; return values.map(value => { return { type: value.type, displayName: connectorTypes[value.type] !== 'Main' ? connectorTypes[value.type] : undefined } } ) })($parameter.outputs.output) }}`,\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Code',\n\t\t\t\tname: 'code',\n\t\t\t\tplaceholder: 'Add Code',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'execute',\n\t\t\t\t\t\tdisplayName: 'Execute',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'JavaScript - Execute',\n\t\t\t\t\t\t\t\tname: 'code',\n\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\t\teditor: 'jsEditor',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdefault: defaultCodeExecute,\n\t\t\t\t\t\t\t\thint: 'This code will only run and return data if a \"Main\" input & output got created.',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'supplyData',\n\t\t\t\t\t\tdisplayName: 'Supply Data',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'JavaScript - Supply Data',\n\t\t\t\t\t\t\t\tname: 'code',\n\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\t\teditor: 'jsEditor',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdefault: defaultCodeSupplyData,\n\t\t\t\t\t\t\t\thint: 'This code will only run and return data if an output got created which is not \"Main\".',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\t// TODO: Add links to docs which provide additional information regarding functionality\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'You can import LangChain and use all available functionality. Debug by using <code>console.log()</code> statements and viewing their output in the browser console.',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Inputs',\n\t\t\t\tname: 'inputs',\n\t\t\t\tplaceholder: 'Add Input',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\tsortable: true,\n\t\t\t\t},\n\t\t\t\tdescription: 'The input to add',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'input',\n\t\t\t\t\t\tdisplayName: 'Input',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\t\toptions: Object.keys(connectorTypes).map((key) => ({\n\t\t\t\t\t\t\t\t\tname: connectorTypes[key as keyof typeof connectorTypes],\n\t\t\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription: 'The type of the input',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Max Connections',\n\t\t\t\t\t\t\t\tname: 'maxConnections',\n\t\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: -1,\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'How many nodes of this type are allowed to be connected. Set it to -1 for unlimited.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Required',\n\t\t\t\t\t\t\t\tname: 'required',\n\t\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription: 'Whether the input needs a connection',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Outputs',\n\t\t\t\tname: 'outputs',\n\t\t\t\tplaceholder: 'Add Output',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\tsortable: true,\n\t\t\t\t},\n\t\t\t\tdescription: 'The output to add',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'output',\n\t\t\t\t\t\tdisplayName: 'Output',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\t\toptions: Object.keys(connectorTypes).map((key) => ({\n\t\t\t\t\t\t\t\t\tname: connectorTypes[key as keyof typeof connectorTypes],\n\t\t\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tdescription: 'The type of the input',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst itemIndex = 0;\n\n\t\tconst code = this.getNodeParameter('code', itemIndex) as { execute?: { code: string } };\n\n\t\tif (!code.execute?.code) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t`No code for \"Execute\" set on node \"${this.getNode().name}`,\n\t\t\t\t{\n\t\t\t\t\titemIndex,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst sandbox = getSandbox.call(this, code.execute.code, { addItems: true, itemIndex });\n\n\t\tconst outputs = this.getNodeOutputs();\n\t\tconst mainOutputs: INodeOutputConfiguration[] = outputs.filter(\n\t\t\t(output) => output.type === NodeConnectionTypes.Main,\n\t\t);\n\n\t\tconst options = { multiOutput: mainOutputs.length !== 1 };\n\n\t\tlet items: INodeExecutionData[] | INodeExecutionData[][];\n\t\ttry {\n\t\t\titems = await sandbox.runCodeAllItems(options);\n\t\t} catch (error) {\n\t\t\tif (!this.continueOnFail()) throw error;\n\t\t\titems = [{ json: { error: (error as Error).message } }];\n\t\t\tif (options.multiOutput) {\n\t\t\t\titems = [items];\n\t\t\t}\n\t\t}\n\n\t\tif (mainOutputs.length === 0) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t'The node does not have a \"Main\" output set. Please add one.',\n\t\t\t\t{\n\t\t\t\t\titemIndex,\n\t\t\t\t},\n\t\t\t);\n\t\t} else if (!options.multiOutput) {\n\t\t\tfor (const item of items as INodeExecutionData[]) {\n\t\t\t\tstandardizeOutput(item.json);\n\t\t\t}\n\t\t\treturn [items as INodeExecutionData[]];\n\t\t} else {\n\t\t\titems.forEach((data) => {\n\t\t\t\tfor (const item of data as INodeExecutionData[]) {\n\t\t\t\t\tstandardizeOutput(item.json);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn items as INodeExecutionData[][];\n\t\t}\n\t}\n\n\tasync supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData> {\n\t\tconst code = this.getNodeParameter('code', itemIndex) as { supplyData?: { code: string } };\n\n\t\tif (!code.supplyData?.code) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t`No code for \"Supply Data\" set on node \"${this.getNode().name}`,\n\t\t\t\t{\n\t\t\t\t\titemIndex,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tconst sandbox = getSandbox.call(this, code.supplyData.code, { itemIndex });\n\t\tconst response = await sandbox.runCode<Tool>();\n\n\t\treturn {\n\t\t\tresponse: logWrapper(response, this),\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA8C;AAC9C,+BAAkC;AAClC,qBAAkC;AAClC,mBAAkC;AAClC,0BAAwD;AAaxD,wBAA2B;AAE3B,MAAM,EAAE,6BAA6B,SAAS,8BAA8B,SAAS,IACpF,QAAQ;AAGT,MAAM,iBAAiB;AAAA,EACtB,CAAC,wCAAoB,OAAO,GAAG;AAAA,EAC/B,CAAC,wCAAoB,UAAU,GAAG;AAAA,EAClC,CAAC,wCAAoB,WAAW,GAAG;AAAA,EACnC,CAAC,wCAAoB,eAAe,GAAG;AAAA,EACvC,CAAC,wCAAoB,QAAQ,GAAG;AAAA,EAChC,CAAC,wCAAoB,cAAc,GAAG;AAAA,EACtC,CAAC,wCAAoB,cAAc,GAAG;AAAA,EACtC,CAAC,wCAAoB,MAAM,GAAG;AAAA,EAC9B,CAAC,wCAAoB,aAAa,GAAG;AAAA,EACrC,CAAC,wCAAoB,IAAI,GAAG;AAC7B;AAEA,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB3B,MAAM,wBAAwB;AAAA;AAUvB,SAAS,+BAA+B,YAA4B;AAG1E,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAGA,MAAI,WAAW,WAAW,YAAY,GAAG;AACxC,UAAM,UAAU,WAAW,UAAU,aAAa,MAAM;AAGxD,eAAW,iBAAiB,gBAAgB;AAC3C,UAAI,YAAY,iBAAiB,QAAQ,WAAW,gBAAgB,GAAG,GAAG;AAEzE,eAAO,sBAAsB,OAAO;AAAA,MACrC;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AASA,SAAS,6BAA6B,MAAsB;AAE3D,MAAI,kBAAkB,KAAK;AAAA,IAC1B;AAAA,IACA,CAAC,OAAO,YAAY;AACnB,YAAM,UAAU,aAAa,OAAO;AACpC,YAAM,UAAU,+BAA+B,OAAO;AACtD,aAAO,YAAY,UAAU,QAAQ,YAAY,OAAO;AAAA,IACzD;AAAA,EACD;AAGA,oBAAkB,gBAAgB;AAAA,IACjC;AAAA,IACA,CAAC,OAAO,YAAY;AACnB,YAAM,UAAU,aAAa,OAAO;AACpC,YAAM,UAAU,+BAA+B,OAAO;AACtD,aAAO,YAAY,UAAU,QAAQ,SAAS,OAAO;AAAA,IACtD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,MAAM,mBAAmB,CAAC,aAAa,cAAc;AAC9C,MAAM,iBAAa,0CAA8B;AAAA,EACvD,UAAU;AAAA,IACT,SAAS,WAAW,CAAC,GAAG,kBAAkB,GAAG,SAAS,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,gBAAgB;AAAA,IACxF,YAAY;AAAA,EACb;AAAA,EACA,QAAQ,YAAY,eAAe;AAClC,QAAI,WAAW,MAAM,cAAc,KAAK,WAAW,MAAM,eAAe,GAAG;AAC1E,aAAO,QAAQ,QAAQ,yCAAyC,UAAU,QAAQ;AAAA,QACjF,OAAO,CAAC,aAAa;AAAA,MACtB,CAAC;AAAA,IACF;AACA;AAAA,EACD;AAAA,EACA,SAAS,SAAS,MAAM,GAAG,KAAK,CAAC;AAClC,CAAC;AAED,SAAS,WAER,MACA,SACC;AACD,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,eAAe,KAAK,QAAQ;AAGlC,QAAM,kBAAkB,6BAA6B,IAAI;AAEzD,QAAM,UAAU,iCAAkB,KAAK,MAAM,SAAS;AACtD,UAAQ,eAAe,KAAK,aAAa,KAAK,IAAI;AAClD,UAAQ,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACpD,UAAQ,yBAAyB,KAAK,uBAAuB,KAAK,IAAI;AACtE,UAAQ,eAAe,KAAK,aAAa,KAAK,IAAI;AAClD,UAAQ,UAAU,KAAK,QAAQ,KAAK,IAAI;AACxC,UAAQ,2BAA2B,KAAK,yBAAyB,KAAK,IAAI;AAC1E,UAAQ,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACtD,UAAQ,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACxD,UAAQ,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAClE,UAAQ,SAAS,KAAK;AAEtB,MAAI,SAAS,UAAU;AACtB,YAAQ,QAAQ,QAAQ,OAAO,IAAI;AAAA,EACpC;AAEA,QAAM,UAAU,IAAI,2CAAkB,SAAS,iBAAiB,KAAK,SAAS;AAAA,IAC7E,UAAU;AAAA,EACX,CAAC;AAED,UAAQ;AAAA,IACP;AAAA,IACA,iBAAiB,WACd,KAAK,gBAAgB,KAAK,IAAI,IAC9B,IAAI,SACJ,QAAQ,IAAI,cAAc,KAAK,YAAY,EAAE,EAAE,YAAY,KAAK,IAAI,MAAM,GAAG,IAAI;AAAA,EACrF;AACA,SAAO;AACR;AAEO,MAAM,KAA0B;AAAA,EAAhC;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,CAAC,WAAW;AAAA,MACnB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,UAAU;AAAA,QACT,MAAM;AAAA,MACP;AAAA,MACA,OAAO;AAAA,QACN,YAAY,CAAC,IAAI;AAAA,QACjB,eAAe;AAAA,UACd,IAAI,CAAC,eAAe;AAAA,QACrB;AAAA,QACA,WAAW;AAAA,UACV,sBAAsB;AAAA,YACrB;AAAA,cACC,KAAK;AAAA,YACN;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACA,QAAQ,6CAA6C,KAAK;AAAA,QACzD;AAAA,MACD,CAAC;AAAA,MACD,SAAS,6CAA6C,KAAK;AAAA,QAC1D;AAAA,MACD,CAAC;AAAA,MACD,YAAY;AAAA,QACX;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,aAAa;AAAA,UACb,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,SAAS,CAAC;AAAA,UACV,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,aAAa;AAAA,cACb,QAAQ;AAAA,gBACP;AAAA,kBACC,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,aAAa;AAAA,oBACZ,QAAQ;AAAA,kBACT;AAAA,kBACA,SAAS;AAAA,kBACT,MAAM;AAAA,kBACN,kBAAkB;AAAA,gBACnB;AAAA,cACD;AAAA,YACD;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,aAAa;AAAA,cACb,QAAQ;AAAA,gBACP;AAAA,kBACC,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,aAAa;AAAA,oBACZ,QAAQ;AAAA,kBACT;AAAA,kBACA,SAAS;AAAA,kBACT,MAAM;AAAA,kBACN,kBAAkB;AAAA,gBACnB;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA;AAAA,QAGA;AAAA,UACC,aACC;AAAA,UACD,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,aAAa;AAAA,UACb,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,aAAa;AAAA,YACZ,gBAAgB;AAAA,YAChB,UAAU;AAAA,UACX;AAAA,UACA,aAAa;AAAA,UACb,SAAS,CAAC;AAAA,UACV,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,aAAa;AAAA,cACb,QAAQ;AAAA,gBACP;AAAA,kBACC,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,SAAS,OAAO,KAAK,cAAc,EAAE,IAAI,CAAC,SAAS;AAAA,oBAClD,MAAM,eAAe,GAAkC;AAAA,oBACvD,OAAO;AAAA,kBACR,EAAE;AAAA,kBACF,kBAAkB;AAAA,kBAClB,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,aAAa;AAAA,gBACd;AAAA,gBACA;AAAA,kBACC,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,kBAAkB;AAAA,kBAClB,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,aACC;AAAA,gBACF;AAAA,gBACA;AAAA,kBACC,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,kBAAkB;AAAA,kBAClB,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,aAAa;AAAA,gBACd;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,aAAa;AAAA,UACb,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,aAAa;AAAA,YACZ,gBAAgB;AAAA,YAChB,UAAU;AAAA,UACX;AAAA,UACA,aAAa;AAAA,UACb,SAAS,CAAC;AAAA,UACV,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,aAAa;AAAA,cACb,QAAQ;AAAA,gBACP;AAAA,kBACC,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,SAAS,OAAO,KAAK,cAAc,EAAE,IAAI,CAAC,SAAS;AAAA,oBAClD,MAAM,eAAe,GAAkC;AAAA,oBACvD,OAAO;AAAA,kBACR,EAAE;AAAA,kBACF,kBAAkB;AAAA,kBAClB,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,aAAa;AAAA,gBACd;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAEA,MAAM,UAAkE;AACvE,UAAM,YAAY;AAElB,UAAM,OAAO,KAAK,iBAAiB,QAAQ,SAAS;AAEpD,QAAI,CAAC,KAAK,SAAS,MAAM;AACxB,YAAM,IAAI;AAAA,QACT,KAAK,QAAQ;AAAA,QACb,sCAAsC,KAAK,QAAQ,EAAE,IAAI;AAAA,QACzD;AAAA,UACC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU,WAAW,KAAK,MAAM,KAAK,QAAQ,MAAM,EAAE,UAAU,MAAM,UAAU,CAAC;AAEtF,UAAM,UAAU,KAAK,eAAe;AACpC,UAAM,cAA0C,QAAQ;AAAA,MACvD,CAAC,WAAW,OAAO,SAAS,wCAAoB;AAAA,IACjD;AAEA,UAAM,UAAU,EAAE,aAAa,YAAY,WAAW,EAAE;AAExD,QAAI;AACJ,QAAI;AACH,cAAQ,MAAM,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,SAAS,OAAO;AACf,UAAI,CAAC,KAAK,eAAe,EAAG,OAAM;AAClC,cAAQ,CAAC,EAAE,MAAM,EAAE,OAAQ,MAAgB,QAAQ,EAAE,CAAC;AACtD,UAAI,QAAQ,aAAa;AACxB,gBAAQ,CAAC,KAAK;AAAA,MACf;AAAA,IACD;AAEA,QAAI,YAAY,WAAW,GAAG;AAC7B,YAAM,IAAI;AAAA,QACT,KAAK,QAAQ;AAAA,QACb;AAAA,QACA;AAAA,UACC;AAAA,QACD;AAAA,MACD;AAAA,IACD,WAAW,CAAC,QAAQ,aAAa;AAChC,iBAAW,QAAQ,OAA+B;AACjD,4CAAkB,KAAK,IAAI;AAAA,MAC5B;AACA,aAAO,CAAC,KAA6B;AAAA,IACtC,OAAO;AACN,YAAM,QAAQ,CAAC,SAAS;AACvB,mBAAW,QAAQ,MAA8B;AAChD,8CAAkB,KAAK,IAAI;AAAA,QAC5B;AAAA,MACD,CAAC;AACD,aAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,MAAM,WAAuC,WAAwC;AACpF,UAAM,OAAO,KAAK,iBAAiB,QAAQ,SAAS;AAEpD,QAAI,CAAC,KAAK,YAAY,MAAM;AAC3B,YAAM,IAAI;AAAA,QACT,KAAK,QAAQ;AAAA,QACb,0CAA0C,KAAK,QAAQ,EAAE,IAAI;AAAA,QAC7D;AAAA,UACC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU,WAAW,KAAK,MAAM,KAAK,WAAW,MAAM,EAAE,UAAU,CAAC;AACzE,UAAM,WAAW,MAAM,QAAQ,QAAc;AAE7C,WAAO;AAAA,MACN,cAAU,8BAAW,UAAU,IAAI;AAAA,IACpC;AAAA,EACD;AACD;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/n8n-nodes-langchain",
3
- "version": "1.122.10",
3
+ "version": "1.122.12",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -160,7 +160,7 @@
160
160
  "jest-mock-extended": "^3.0.4",
161
161
  "tsup": "^8.5.0",
162
162
  "@n8n/eslint-plugin-community-nodes": "0.7.0",
163
- "n8n-core": "1.122.9"
163
+ "n8n-core": "1.122.11"
164
164
  },
165
165
  "dependencies": {
166
166
  "@aws-sdk/client-sso-oidc": "3.808.0",
@@ -192,7 +192,7 @@
192
192
  "@modelcontextprotocol/sdk": "1.20.0",
193
193
  "@mozilla/readability": "0.6.0",
194
194
  "@n8n/typeorm": "0.3.20-15",
195
- "@n8n/vm2": "3.9.25",
195
+ "vm2": "^3.10.2",
196
196
  "@pinecone-database/pinecone": "^5.0.2",
197
197
  "@qdrant/js-client-rest": "^1.15.0",
198
198
  "@supabase/supabase-js": "2.49.9",
@@ -229,14 +229,14 @@
229
229
  "weaviate-client": "3.6.2",
230
230
  "zod": "3.25.67",
231
231
  "zod-to-json-schema": "3.23.3",
232
- "@n8n/client-oauth2": "0.33.0",
233
232
  "@n8n/di": "0.10.0",
234
233
  "@n8n/config": "1.65.2",
234
+ "@n8n/client-oauth2": "0.33.0",
235
235
  "@n8n/errors": "0.5.0",
236
- "@n8n/json-schema-to-zod": "1.6.0",
237
- "n8n-nodes-base": "1.121.9",
238
236
  "@n8n/typescript-config": "1.3.0",
239
- "n8n-workflow": "1.120.5"
237
+ "@n8n/json-schema-to-zod": "1.6.0",
238
+ "n8n-workflow": "1.120.7",
239
+ "n8n-nodes-base": "1.121.11"
240
240
  },
241
241
  "license": "SEE LICENSE IN LICENSE.md",
242
242
  "homepage": "https://n8n.io",