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
JavaScript
;
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;