UNPKG

autotrader-connect-api

Version:

Production-ready TypeScript wrapper for Auto Trader UK Connect APIs

222 lines 8.46 kB
"use strict"; /** * Search module for AutoTrader API * Handles search-related endpoints and operations */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMarketInsights = exports.getRelatedSearches = exports.trackSearchInteraction = exports.getSearchAnalytics = exports.getPopularSearches = exports.compareVehicles = exports.executeSavedSearch = exports.deleteSavedSearch = exports.updateSavedSearch = exports.getSavedSearches = exports.saveSearch = exports.getSearchSuggestions = exports.quickSearch = exports.searchVehicles = void 0; const client_1 = __importDefault(require("../client")); /** * Perform enhanced vehicle search with facets and suggestions * @param filters Search filters and parameters * @returns Promise resolving to enhanced search results */ async function searchVehicles(filters = {}) { const response = await client_1.default.get('/search', { params: { // Basic filters make: Array.isArray(filters.make) ? filters.make.join(',') : filters.make, model: Array.isArray(filters.model) ? filters.model.join(',') : filters.model, // Price and year ranges priceFrom: filters.priceRange?.min, priceTo: filters.priceRange?.max, yearFrom: filters.yearRange?.min, yearTo: filters.yearRange?.max, mileageFrom: filters.mileageRange?.min, mileageTo: filters.mileageRange?.max, // Location postcode: filters.postcode, radius: filters.radius, // Vehicle types fuelType: Array.isArray(filters.fuelType) ? filters.fuelType.join(',') : filters.fuelType, transmission: Array.isArray(filters.transmission) ? filters.transmission.join(',') : filters.transmission, bodyType: Array.isArray(filters.bodyType) ? filters.bodyType.join(',') : filters.bodyType, condition: Array.isArray(filters.condition) ? filters.condition.join(',') : filters.condition, // Advanced options includeNationwide: filters.includeNationwide, hideTradeSellerAds: filters.hideTradeSellerAds, hideDuplicateAds: filters.hideDuplicateAds, onlyRecentlyAdded: filters.onlyRecentlyAdded, onlyPriceReduced: filters.onlyPriceReduced, onlyWithPhotos: filters.onlyWithPhotos, onlyWithVideo: filters.onlyWithVideo, // Dealer preferences preferredDealers: filters.preferredDealers?.join(','), excludedDealers: filters.excludedDealers?.join(','), dealerRatingMin: filters.dealerRatingMin, // Finance financeRequired: filters.financeRequired, monthlyBudget: filters.monthlyBudget, depositAmount: filters.depositAmount, creditRating: filters.creditRating, // Sorting and pagination sortBy: filters.sortBy || 'relevance', sortOrder: filters.sortOrder || 'desc', page: filters.page || 1, pageSize: filters.pageSize || 25, // Request additional data includeFacets: true, includeSuggestions: true, includeMarketInsights: true, }, }); return response; } exports.searchVehicles = searchVehicles; /** * Quick search for autocomplete and suggestions * @param params Quick search parameters * @returns Promise resolving to quick search results */ async function quickSearch(params) { const response = await client_1.default.get('/search/quick', { params: { query: params.query, make: params.make, model: params.model, postcode: params.postcode, maxPrice: params.maxPrice, radius: params.radius, limit: params.limit || 10, }, }); return response.data; } exports.quickSearch = quickSearch; /** * Get search suggestions based on partial input * @param query Partial search query * @param type Type of suggestions to get * @returns Promise resolving to suggestions */ async function getSearchSuggestions(query, type) { const response = await client_1.default.get('/search/suggestions', { params: { query, type: type || 'all' }, }); return response.data; } exports.getSearchSuggestions = getSearchSuggestions; /** * Save a search for future alerts * @param searchData Search data to save * @returns Promise resolving to saved search */ async function saveSearch(searchData) { const response = await client_1.default.post('/search/saved', searchData); return response.data; } exports.saveSearch = saveSearch; /** * Get user's saved searches * @returns Promise resolving to array of saved searches */ async function getSavedSearches() { const response = await client_1.default.get('/search/saved'); return response.data; } exports.getSavedSearches = getSavedSearches; /** * Update a saved search * @param searchId Saved search ID * @param updateData Updated search data * @returns Promise resolving to updated saved search */ async function updateSavedSearch(searchId, updateData) { const response = await client_1.default.put(`/search/saved/${searchId}`, updateData); return response.data; } exports.updateSavedSearch = updateSavedSearch; /** * Delete a saved search * @param searchId Saved search ID * @returns Promise resolving to deletion confirmation */ async function deleteSavedSearch(searchId) { const response = await client_1.default.delete(`/search/saved/${searchId}`); return response.data; } exports.deleteSavedSearch = deleteSavedSearch; /** * Execute a saved search * @param searchId Saved search ID * @returns Promise resolving to search results */ async function executeSavedSearch(searchId) { const response = await client_1.default.get(`/search/saved/${searchId}/execute`); return response; } exports.executeSavedSearch = executeSavedSearch; /** * Compare multiple vehicles * @param vehicleIds Array of vehicle IDs to compare * @returns Promise resolving to comparison data */ async function compareVehicles(vehicleIds) { const response = await client_1.default.post('/search/compare', { vehicleIds, }); return response.data; } exports.compareVehicles = compareVehicles; /** * Get popular searches * @param category Optional category filter * @returns Promise resolving to popular searches */ async function getPopularSearches(category) { const response = await client_1.default.get('/search/popular', { params: { category }, }); return response.data; } exports.getPopularSearches = getPopularSearches; /** * Get search analytics and insights * @param timeframe Time period for analytics * @returns Promise resolving to search analytics */ async function getSearchAnalytics(timeframe = 'month') { const response = await client_1.default.get('/search/analytics', { params: { timeframe }, }); return response.data; } exports.getSearchAnalytics = getSearchAnalytics; /** * Track search interaction * @param searchId Search ID * @param interaction Interaction data * @returns Promise resolving to tracking confirmation */ async function trackSearchInteraction(searchId, interaction) { const response = await client_1.default.post(`/search/${searchId}/track`, { ...interaction, timestamp: interaction.timestamp || new Date().toISOString(), }); return response.data; } exports.trackSearchInteraction = trackSearchInteraction; /** * Get related searches based on current search * @param filters Current search filters * @returns Promise resolving to related search suggestions */ async function getRelatedSearches(filters) { const response = await client_1.default.post('/search/related', { filters }); return response.data; } exports.getRelatedSearches = getRelatedSearches; /** * Get market insights for search results * @param filters Search filters to analyze * @returns Promise resolving to market insights */ async function getMarketInsights(filters) { const response = await client_1.default.post('/search/market-insights', { filters }); return response.data; } exports.getMarketInsights = getMarketInsights; //# sourceMappingURL=search.js.map