UNPKG

@kobdev/yelp-fusion-plus

Version:

Node.js Client for Yelp Fusion Services

65 lines 5.61 kB
import * as https from 'https'; import axios from 'axios'; import Bottleneck from 'bottleneck'; export class Client { axiosInstance; baseUrl = 'https://api.yelp.com'; limiter = new Bottleneck({ minTime: 200, // execute 6 requests per second }); constructor(clientOptions) { if (clientOptions.axiosInstance) { this.axiosInstance = clientOptions.axiosInstance; if (!this.axiosInstance.defaults.headers.Authorization) { this.axiosInstance.defaults.headers = { Authorization: `Bearer ${clientOptions.apiKey}`, }; } } else { this.axiosInstance = this.createNewAxiosInstance(clientOptions.apiKey); } } // public functions /** returns detailed business */ async businessDetailsAsync(id) { const url = `${this.baseUrl}/v3/businesses/${id}`; const axiosResponse = await this.limiter.schedule(() => this.axiosInstance.get(url)); return axiosResponse.data; } /** return detailed business for ids */ async businessesDetailsAsync(ids) { const promises = ids.map((id) => this.businessDetailsAsync(id)); return await Promise.all(promises); } /** returns businesses based on the provided search criteria */ async businessesSearchAsync(businessesSearchRequest) { const qs = Object.keys(businessesSearchRequest) .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(businessesSearchRequest[key])}`) .join('&'); const url = `${this.baseUrl}/v3/businesses/search?${qs}`; return (await this.axiosInstance.get(url)).data; } /** returns detailed businesses based on the provided search criteria */ async businessesSearchDetailsAsync(businessesSearchRequest) { const response = await this.businessesSearchAsync(businessesSearchRequest); const businessIDs = response.businesses.map((b) => b.id); const detailedBusinesses = await this.businessesDetailsAsync(businessIDs); return { businesses: detailedBusinesses, region: response.region, total: response.total, }; } // private functions createNewAxiosInstance(apiKey) { const httpsAgent = new https.Agent({ keepAlive: true }); return axios.create({ headers: { Authorization: `Bearer ${apiKey}`, }, httpsAgent: httpsAgent, }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVMvQixPQUFPLEtBQXdCLE1BQU0sT0FBTyxDQUFDO0FBQzdDLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQU9wQyxNQUFNLE9BQU8sTUFBTTtJQUNULGFBQWEsQ0FBZ0I7SUFDN0IsT0FBTyxHQUFHLHNCQUFzQixDQUFDO0lBRXpDLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQztRQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLGdDQUFnQztLQUMvQyxDQUFDLENBQUM7SUFFSCxZQUFZLGFBQTZCO1FBQ3ZDLElBQUksYUFBYSxDQUFDLGFBQWEsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRztvQkFDcEMsYUFBYSxFQUFFLFVBQVUsYUFBYSxDQUFDLE1BQU0sRUFBRTtpQkFDaEQsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7SUFFRCxtQkFBbUI7SUFFbkIsZ0NBQWdDO0lBQ2hDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFVO1FBQ25DLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUM1QixDQUFDO1FBQ0YsT0FBTyxhQUFhLENBQUMsSUFBdUIsQ0FBQztJQUMvQyxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxHQUFhO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsS0FBSyxDQUFDLHFCQUFxQixDQUN6Qix1QkFFbUM7UUFFbkMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQzthQUM1QyxHQUFHLENBQ0YsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksa0JBQWtCLENBQzlDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUM3QixFQUFFLENBQ047YUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztRQUN6RCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQWdDLENBQUM7SUFDOUUsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLHVCQUVtQztRQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRSxPQUFPO1lBQ0wsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1NBQ2EsQ0FBQztJQUN2QyxDQUFDO0lBRUQsb0JBQW9CO0lBRVosc0JBQXNCLENBQUMsTUFBYztRQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxVQUFVLE1BQU0sRUFBRTthQUNsQztZQUNELFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiJ9