UNPKG

@kobdev/yelp-fusion-plus

Version:

Node.js Client for Yelp Fusion Services

90 lines 6.76 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Client = void 0; const https = __importStar(require("https")); const axios_1 = __importDefault(require("axios")); const bottleneck_1 = __importDefault(require("bottleneck")); class Client { constructor(clientOptions) { this.baseUrl = 'https://api.yelp.com'; this.limiter = new bottleneck_1.default({ minTime: 200, // execute 6 requests per second }); 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_1.default.create({ headers: { Authorization: `Bearer ${apiKey}`, }, httpsAgent: httpsAgent, }); } } exports.Client = Client; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQStCO0FBUy9CLGtEQUE2QztBQUM3Qyw0REFBb0M7QUFPcEMsTUFBYSxNQUFNO0lBUWpCLFlBQVksYUFBNkI7UUFOakMsWUFBTyxHQUFHLHNCQUFzQixDQUFDO1FBRXpDLFlBQU8sR0FBRyxJQUFJLG9CQUFVLENBQUM7WUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQ0FBZ0M7U0FDL0MsQ0FBQyxDQUFDO1FBR0QsSUFBSSxhQUFhLENBQUMsYUFBYSxFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHO29CQUNwQyxhQUFhLEVBQUUsVUFBVSxhQUFhLENBQUMsTUFBTSxFQUFFO2lCQUNoRCxDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtJQUVuQixnQ0FBZ0M7SUFDaEMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQVU7UUFDbkMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQzVCLENBQUM7UUFDRixPQUFPLGFBQWEsQ0FBQyxJQUF1QixDQUFDO0lBQy9DLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEdBQWE7UUFDeEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxLQUFLLENBQUMscUJBQXFCLENBQ3pCLHVCQUVtQztRQUVuQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO2FBQzVDLEdBQUcsQ0FDRixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsQ0FDOUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQzdCLEVBQUUsQ0FDTjthQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8seUJBQXlCLEVBQUUsRUFBRSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBZ0MsQ0FBQztJQUM5RSxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLEtBQUssQ0FBQyw0QkFBNEIsQ0FDaEMsdUJBRW1DO1FBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFFLE9BQU87WUFDTCxVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN2QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7U0FDYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0I7SUFFWixzQkFBc0IsQ0FBQyxNQUFjO1FBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sZUFBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLFVBQVUsTUFBTSxFQUFFO2FBQ2xDO1lBQ0QsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkZELHdCQW1GQyJ9