UNPKG

n8n-nodes-duckduckgo-search

Version:

A powerful and comprehensive n8n community node that seamlessly integrates DuckDuckGo search capabilities into your workflows. Search the web, find images, discover news, and explore videos - all with privacy-focused, reliable results.

207 lines (206 loc) 7.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processError = exports.processVideoSearchResults = exports.processNewsSearchResults = exports.processImageSearchResults = exports.processWebSearchResults = void 0; const utils_1 = require("./utils"); function processWebSearchResults(results, itemIndex, rawResponse) { if (!results || !Array.isArray(results)) { return []; } const processedResults = []; const organicResults = results .filter(item => item && typeof item === 'object' && item.title && item.url) .map((item, index) => ({ json: { position: index + 1, title: (0, utils_1.decodeHtmlEntities)(item.title || '') || '', description: (0, utils_1.decodeHtmlEntities)(item.description || '') || '', snippet: (0, utils_1.decodeHtmlEntities)(item.description || '') || '', url: item.url || '', hostname: item.hostname || '', favicon: item.icon || '', sourceType: 'web', raw_description: item.description || '', ...((rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.vqd) && { vqd: rawResponse.vqd }), search_metadata: { engine: 'duckduckgo', timestamp: new Date().toISOString(), result_type: 'organic' } }, pairedItem: { item: itemIndex, }, })); processedResults.push(...organicResults); if (rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.knowledge_graph) { const kg = rawResponse.knowledge_graph; processedResults.push({ json: { sourceType: 'knowledge_graph', title: kg.title || '', subtitle: kg.subtitle || '', description: kg.description || '', website: kg.website || '', facts: kg.facts || {}, profiles: kg.profiles || [], people_also_search_for: kg.people_also_search_for || [], thumbnail: kg.thumbnail || '', search_metadata: { engine: 'duckduckgo', timestamp: new Date().toISOString(), result_type: 'knowledge_graph' } }, pairedItem: { item: itemIndex } }); } if (rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.ai_overview) { const ai = rawResponse.ai_overview; processedResults.push({ json: { sourceType: 'ai_overview', answer: ai.answer || '', sources: ai.sources || [], search_metadata: { engine: 'duckduckgo', timestamp: new Date().toISOString(), result_type: 'ai_overview' } }, pairedItem: { item: itemIndex } }); } if ((rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.top_stories) && Array.isArray(rawResponse.top_stories)) { rawResponse.top_stories.forEach((story, index) => { processedResults.push({ json: { sourceType: 'top_story', position: index + 1, title: story.title || '', link: story.link || '', source: story.source || '', date: story.date || '', snippet: story.snippet || '', thumbnail: story.thumbnail || '', search_metadata: { engine: 'duckduckgo', timestamp: new Date().toISOString(), result_type: 'top_story' } }, pairedItem: { item: itemIndex } }); }); } if ((rawResponse === null || rawResponse === void 0 ? void 0 : rawResponse.related_searches) && Array.isArray(rawResponse.related_searches)) { processedResults.push({ json: { sourceType: 'related_searches', searches: rawResponse.related_searches.map((search) => ({ query: search.query || '', link: search.link || '' })), search_metadata: { engine: 'duckduckgo', timestamp: new Date().toISOString(), result_type: 'related_searches' } }, pairedItem: { item: itemIndex } }); } return processedResults; } exports.processWebSearchResults = processWebSearchResults; function processImageSearchResults(results, itemIndex) { if (!results || !Array.isArray(results)) { return []; } return results .filter(item => item && typeof item === 'object' && item.image) .map((item) => ({ json: { title: (0, utils_1.decodeHtmlEntities)(item.title || '') || '', description: null, url: item.url || '', imageUrl: item.image || '', thumbnailUrl: item.thumbnail || '', width: item.width || null, height: item.height || null, source: item.source || '', sourceType: 'image', }, pairedItem: { item: itemIndex, }, })); } exports.processImageSearchResults = processImageSearchResults; function processNewsSearchResults(results, itemIndex) { return results.map((item) => ({ json: { title: (0, utils_1.decodeHtmlEntities)(item.title), description: (0, utils_1.decodeHtmlEntities)(item.excerpt), url: item.url, imageUrl: item.image, date: (0, utils_1.formatDate)(item.date), relativeTime: item.relativeTime, syndicate: item.syndicate, isOld: item.isOld, sourceType: 'news', }, pairedItem: { item: itemIndex, }, })); } exports.processNewsSearchResults = processNewsSearchResults; function processVideoSearchResults(results, itemIndex) { return results.map((item) => ({ json: { title: (0, utils_1.decodeHtmlEntities)(item.title), description: (0, utils_1.decodeHtmlEntities)(item.description), url: item.url, imageUrl: item.image, duration: item.duration, published: item.published, publishedOn: item.publishedOn, publisher: item.publisher, viewCount: item.viewCount, sourceType: 'video', }, pairedItem: { item: itemIndex, }, })); } exports.processVideoSearchResults = processVideoSearchResults; function processError(error, itemData, itemIndex, debug = false, operation, options) { const errorMessage = error.message || 'Unknown error occurred'; const errorObject = { ...itemData, success: false, error: errorMessage, timestamp: new Date().toISOString(), }; if (operation) { errorObject.operation = operation; } if (debug) { errorObject.errorDetails = { stack: error.stack, name: error.name, cause: error.cause, }; if (options) { errorObject.requestOptions = options; } } return { json: errorObject, pairedItem: { item: itemIndex, }, }; } exports.processError = processError;