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.

223 lines (222 loc) 7.58 kB
"use strict"; 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;