giphy-api
Version:
JavaScript module for the giphy.com API that supports promises and callbacks.
53 lines (43 loc) • 1.47 kB
JavaScript
/* globals XMLHttpRequest */
exports.create = function () {
return this;
};
/**
* Browser based GET request
* @param options {Object}
* options.request {Object} - Request data including host and path
* options.https {Boolean} - Whether to utilize HTTPS library for requests or HTTP. Defaults to HTTP.
* options.timeout {Number} - Request timeout before returning an error. Defaults to 30000 milliseconds
* options.fmt {String} - Return results in html or json format (useful for viewing responses as GIFs to debug/test)
*/
exports.get = function (options, resolve, reject) {
var request = options.request;
var timeout = options.timeout;
var fmt = options.fmt;
var timerId = setTimeout(function () {
reject(new Error('Timeout while fetching asset'));
}, timeout);
var xhr = new XMLHttpRequest();
xhr.withCredentials = false;
var onFail = function (err) {
clearTimeout(timerId);
err = err || new Error('Giphy API request failed!');
reject(err);
};
xhr.addEventListener('error', onFail);
xhr.addEventListener('abort', onFail);
xhr.addEventListener('load', function () {
clearTimeout(timerId);
var body = xhr.response;
if (fmt !== 'html') {
body = JSON.parse(body);
}
resolve(body);
});
var protocol = options.https ? 'https' : 'http';
var host = request.host;
var path = request.path;
var url = protocol + '://' + host + path;
xhr.open('GET', url, true);
xhr.send();
};