@kobdev/yelp-fusion-plus
Version:
Node.js Client for Yelp Fusion Services
90 lines • 6.76 kB
JavaScript
;
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