import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription, } from 'n8n-workflow'; import { executeObsidianCommand } from '../../shared/ObsidianApiClient'; import { buildArgs } from './argBuilders'; import { nodeDescription } from './description'; import { outputForResult } from './output'; export class ObsidianApi implements INodeType { description: INodeTypeDescription = nodeDescription; async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); const returnData: INodeExecutionData[] = []; for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { try { const resource = this.getNodeParameter('resource', itemIndex) as string; const operation = this.getNodeParameter('operation', itemIndex) as string; const additionalFields = this.getNodeParameter('additionalFields', itemIndex, {}) as Record; const vault = String(additionalFields.vault || ''); const timeout = Number(additionalFields.timeout ?? 60); const args = buildArgs(this, resource, operation, itemIndex, additionalFields); const result = await executeObsidianCommand(this, itemIndex, args, { vault, timeout }); returnData.push(outputForResult(result, resource, operation, itemIndex)); } catch (error) { if (this.continueOnFail()) { const message = error instanceof Error ? error.message : String(error); returnData.push({ json: { error: message }, pairedItem: { item: itemIndex } }); continue; } throw error; } } return [returnData]; } }