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.
223 lines (222 loc) • 7.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLanguageOptions = exports.getRegionOptions = exports.validateDateRange = exports.buildFilterSummary = exports.applyFiltersToSearch = exports.getSearchFilters = exports.DATE_RANGE_OPTIONS = exports.SUPPORTED_LANGUAGES = exports.SUPPORTED_REGIONS = void 0;
exports.SUPPORTED_REGIONS = {
'wt-wt': 'No Region',
'us-en': 'United States',
'uk-en': 'United Kingdom',
'ca-en': 'Canada',
'au-en': 'Australia',
'nz-en': 'New Zealand',
'ie-en': 'Ireland',
'za-en': 'South Africa',
'in-en': 'India',
'sg-en': 'Singapore',
'ph-en': 'Philippines',
'my-en': 'Malaysia',
'id-en': 'Indonesia',
'th-en': 'Thailand',
'vn-en': 'Vietnam',
'de-de': 'Germany',
'fr-fr': 'France',
'es-es': 'Spain',
'it-it': 'Italy',
'nl-nl': 'Netherlands',
'be-fr': 'Belgium (French)',
'be-nl': 'Belgium (Dutch)',
'ch-de': 'Switzerland (German)',
'ch-fr': 'Switzerland (French)',
'ch-it': 'Switzerland (Italian)',
'at-de': 'Austria',
'pt-pt': 'Portugal',
'br-pt': 'Brazil',
'mx-es': 'Mexico',
'ar-es': 'Argentina',
'cl-es': 'Chile',
'co-es': 'Colombia',
'pe-es': 'Peru',
've-es': 'Venezuela',
'ec-es': 'Ecuador',
'gt-es': 'Guatemala',
'cu-es': 'Cuba',
'bo-es': 'Bolivia',
'do-es': 'Dominican Republic',
'hn-es': 'Honduras',
'py-es': 'Paraguay',
'sv-es': 'El Salvador',
'ni-es': 'Nicaragua',
'cr-es': 'Costa Rica',
'pa-es': 'Panama',
'uy-es': 'Uruguay',
'pr-es': 'Puerto Rico',
'ru-ru': 'Russia',
'ua-uk': 'Ukraine',
'tr-tr': 'Turkey',
'gr-el': 'Greece',
'il-he': 'Israel',
'sa-ar': 'Saudi Arabia',
'ae-ar': 'United Arab Emirates',
'eg-ar': 'Egypt',
'jp-jp': 'Japan',
'cn-zh': 'China',
'tw-zh': 'Taiwan',
'hk-zh': 'Hong Kong',
'kr-kr': 'South Korea',
};
exports.SUPPORTED_LANGUAGES = {
'': 'All Languages',
'en': 'English',
'es': 'Spanish',
'fr': 'French',
'de': 'German',
'it': 'Italian',
'pt': 'Portuguese',
'nl': 'Dutch',
'sv': 'Swedish',
'no': 'Norwegian',
'da': 'Danish',
'fi': 'Finnish',
'ru': 'Russian',
'pl': 'Polish',
'tr': 'Turkish',
'cs': 'Czech',
'hu': 'Hungarian',
'ro': 'Romanian',
'el': 'Greek',
'uk': 'Ukrainian',
'he': 'Hebrew',
'ar': 'Arabic',
'fa': 'Persian',
'hi': 'Hindi',
'bn': 'Bengali',
'ta': 'Tamil',
'te': 'Telugu',
'mr': 'Marathi',
'gu': 'Gujarati',
'ja': 'Japanese',
'ko': 'Korean',
'zh': 'Chinese',
'id': 'Indonesian',
'ms': 'Malay',
'th': 'Thai',
'vi': 'Vietnamese',
};
exports.DATE_RANGE_OPTIONS = {
'day': 'd',
'week': 'w',
'month': 'm',
'year': 'y',
};
function getSearchFilters(context, itemIndex) {
const filters = {};
const useRegionFilter = context.getNodeParameter('useRegionFilter', itemIndex, false);
if (useRegionFilter) {
const region = context.getNodeParameter('region', itemIndex, 'wt-wt');
if (region && exports.SUPPORTED_REGIONS[region]) {
filters.region = region;
}
}
const useLanguageFilter = context.getNodeParameter('useLanguageFilter', itemIndex, false);
if (useLanguageFilter) {
const language = context.getNodeParameter('language', itemIndex, '');
if (language && exports.SUPPORTED_LANGUAGES[language] !== undefined) {
filters.language = language;
}
}
const useDateFilter = context.getNodeParameter('useDateFilter', itemIndex, false);
if (useDateFilter) {
const dateRangeType = context.getNodeParameter('dateRangeType', itemIndex, 'month');
filters.dateRange = {
type: dateRangeType,
};
if (dateRangeType === 'custom') {
const dateFrom = context.getNodeParameter('dateFrom', itemIndex, '');
const dateTo = context.getNodeParameter('dateTo', itemIndex, '');
if (dateFrom)
filters.dateRange.from = dateFrom;
if (dateTo)
filters.dateRange.to = dateTo;
}
}
const safeSearch = context.getNodeParameter('safeSearch', itemIndex, 'moderate');
filters.safeSearch = safeSearch;
return filters;
}
exports.getSearchFilters = getSearchFilters;
function applyFiltersToSearch(baseOptions, filters) {
const options = { ...baseOptions };
if (filters.region && filters.region !== 'wt-wt') {
options.locale = filters.region;
}
if (filters.safeSearch) {
options.safeSearch = filters.safeSearch === 'strict' ? 1 :
filters.safeSearch === 'moderate' ? 0 :
-1;
}
if (filters.dateRange) {
if (filters.dateRange.type === 'custom' && filters.dateRange.from && filters.dateRange.to) {
const fromDate = new Date(filters.dateRange.from).toISOString().split('T')[0];
const toDate = new Date(filters.dateRange.to).toISOString().split('T')[0];
options.time = `${fromDate}..${toDate}`;
}
else if (filters.dateRange.type !== 'custom' && exports.DATE_RANGE_OPTIONS[filters.dateRange.type]) {
options.time = exports.DATE_RANGE_OPTIONS[filters.dateRange.type];
}
}
return options;
}
exports.applyFiltersToSearch = applyFiltersToSearch;
function buildFilterSummary(filters) {
const parts = [];
if (filters.region && filters.region !== 'wt-wt') {
parts.push(`Region: ${exports.SUPPORTED_REGIONS[filters.region] || filters.region}`);
}
if (filters.language) {
parts.push(`Language: ${exports.SUPPORTED_LANGUAGES[filters.language] || filters.language}`);
}
if (filters.dateRange) {
if (filters.dateRange.type === 'custom') {
parts.push(`Date: ${filters.dateRange.from || 'any'} to ${filters.dateRange.to || 'now'}`);
}
else {
parts.push(`Date: Last ${filters.dateRange.type}`);
}
}
if (filters.safeSearch && filters.safeSearch !== 'moderate') {
parts.push(`SafeSearch: ${filters.safeSearch}`);
}
return parts.length > 0 ? `Filters: ${parts.join(', ')}` : 'No filters applied';
}
exports.buildFilterSummary = buildFilterSummary;
function validateDateRange(from, to) {
if (!from || !to) {
throw new Error('Both from and to dates are required for custom date range');
}
const fromDate = new Date(from);
const toDate = new Date(to);
if (isNaN(fromDate.getTime()) || isNaN(toDate.getTime())) {
throw new Error('Invalid date format. Please use YYYY-MM-DD format');
}
if (fromDate > toDate) {
throw new Error('From date must be before or equal to To date');
}
const now = new Date();
if (toDate > now) {
throw new Error('To date cannot be in the future');
}
}
exports.validateDateRange = validateDateRange;
function getRegionOptions() {
return Object.entries(exports.SUPPORTED_REGIONS).map(([value, name]) => ({
name,
value,
}));
}
exports.getRegionOptions = getRegionOptions;
function getLanguageOptions() {
return Object.entries(exports.SUPPORTED_LANGUAGES).map(([value, name]) => ({
name,
value,
}));
}
exports.getLanguageOptions = getLanguageOptions;