diff --git a/packages/n8n-nodes-obsidian-api/nodes/ObsidianApi/ObsidianApi.node.ts b/packages/n8n-nodes-obsidian-api/nodes/ObsidianApi/ObsidianApi.node.ts index b008622..d971906 100644 --- a/packages/n8n-nodes-obsidian-api/nodes/ObsidianApi/ObsidianApi.node.ts +++ b/packages/n8n-nodes-obsidian-api/nodes/ObsidianApi/ObsidianApi.node.ts @@ -264,9 +264,9 @@ export class ObsidianApi implements INodeType { // Always keep n8n output minimal/clean. // - Prefer parsed stdout (e.g. vault/vaults) // - Otherwise keep stdout as-is - const stdoutValue = (result as any).parsed_stdout ?? result.stdout; - const out: any = { stdout: stdoutValue }; - if (result.stderr) out.stderr = result.stderr; + const parsed = (result as any).parsed_stdout; + const out: any = parsed ? parsed : { stdout: result.stdout }; + if (!parsed && result.stderr) out.stderr = result.stderr; if (result.timed_out) out.timed_out = result.timed_out; returnData.push({ json: out, pairedItem: { item: itemIndex } }); diff --git a/packages/n8n-nodes-obsidian-api/package-lock.json b/packages/n8n-nodes-obsidian-api/package-lock.json index 520588a..d4e67ac 100644 --- a/packages/n8n-nodes-obsidian-api/package-lock.json +++ b/packages/n8n-nodes-obsidian-api/package-lock.json @@ -1,12 +1,12 @@ { "name": "n8n-nodes-obsidian-cli-api", - "version": "0.2.2", + "version": "0.2.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "n8n-nodes-obsidian-cli-api", - "version": "0.2.2", + "version": "0.2.3", "license": "MIT", "devDependencies": { "@types/node": "^24.0.0", diff --git a/packages/n8n-nodes-obsidian-api/package.json b/packages/n8n-nodes-obsidian-api/package.json index 9ff084b..7488161 100644 --- a/packages/n8n-nodes-obsidian-api/package.json +++ b/packages/n8n-nodes-obsidian-api/package.json @@ -1,6 +1,6 @@ { "name": "n8n-nodes-obsidian-cli-api", - "version": "0.2.2", + "version": "0.2.3", "description": "n8n community nodes for the Obsidian API Docker service backed by the official Obsidian CLI.", "license": "MIT", "homepage": "https://git.yiprawr.dev/Docker/obsidian-api", diff --git a/packages/n8n-nodes-obsidian-api/shared/ObsidianApiClient.ts b/packages/n8n-nodes-obsidian-api/shared/ObsidianApiClient.ts index 35a01b7..01da8bd 100644 --- a/packages/n8n-nodes-obsidian-api/shared/ObsidianApiClient.ts +++ b/packages/n8n-nodes-obsidian-api/shared/ObsidianApiClient.ts @@ -144,14 +144,12 @@ function extractErrorMessage(body: unknown): string { } function maybeParseStdout(result: ObsidianCommandResult): IDataObject | undefined { - const lastArg = result.command[result.command.length - 1]; - if (lastArg !== 'vault' && lastArg !== 'vaults') return undefined; + const cmd = result.command; + const hasVault = cmd.includes('vault'); + const hasVaults = cmd.includes('vaults'); + + if (!hasVault && !hasVaults) return undefined; - // Obsidian CLI prints either: - // vault: - // keyvalue\nkeyvalue\n... - // vaults: - // often one vault per line (names) or a similar tabular output. const lines = (result.stdout || '') .split(/\r?\n/) .map((l) => l.trim()) @@ -159,11 +157,24 @@ function maybeParseStdout(result: ObsidianCommandResult): IDataObject | undefine if (!lines.length) return undefined; - const isKv = lines.some((l) => l.includes('\t')); - if (!isKv && lastArg === 'vaults') { - return { vaults: lines }; + // vaults output is typically a 2-col tabular format: \t + if (hasVaults) { + const vaults: Array<{ name: string; path: string }> = []; + for (const line of lines) { + const parts = line.split('\t'); + if (parts.length < 2) continue; + const name = parts[0].trim(); + const path = parts.slice(1).join('\t').trim(); + if (!name || !path) continue; + vaults.push({ name, path }); + } + + // Fallback: if parsing failed, return raw lines + if (!vaults.length) return { vaults: lines }; + return { vaults }; } + // vault output is often key\tvalue pairs const kv: Record = {}; for (const line of lines) { const parts = line.split('\t');