ts-foursquare
Version:
A simple library for Foursquare API
526 lines (476 loc) • 17.1 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var operators = require('rxjs/operators');
var pathToRegexp = require('path-to-regexp');
var throwError = require('rxjs/internal/observable/throwError');
var fetch = require('rxjs/fetch');
var httpResponseStatus = require('http-response-status');
var EApiDefaultParameters;
(function (EApiDefaultParameters) {
EApiDefaultParameters["ORIGIN"] = "https://api.foursquare.com";
EApiDefaultParameters["VERSION"] = "20191028";
})(EApiDefaultParameters || (EApiDefaultParameters = {}));
var EApiPathnames;
(function (EApiPathnames) {
EApiPathnames["LISTS"] = "/v2/lists/:listId";
EApiPathnames["PHOTOS_DETAILS"] = "/v2/photos/:photoId";
EApiPathnames["VENUES_CATEGORIES"] = "/v2/venues/categories";
EApiPathnames["VENUES_EXPLORE"] = "/v2/venues/explore";
EApiPathnames["VENUES_LIKES"] = "/v2/venues/:venueId/likes";
EApiPathnames["VENUES_LISTED"] = "/v2/venues/:venueId/listed";
EApiPathnames["VENUES_NEXT_VENUES"] = "/v2/venues/:venueId/nextvenues";
EApiPathnames["VENUES_SEARCH"] = "/v2/venues/search";
EApiPathnames["VENUES_SIMILAR"] = "/v2/venues/:venueId/similar";
EApiPathnames["VENUES_SUGGEST_COMPLETION"] = "/v2/venues/suggestcompletion";
EApiPathnames["VENUES_TRENDING"] = "/v2/venues/trending";
})(EApiPathnames || (EApiPathnames = {}));
var EAuthApiDefaultParameters;
(function (EAuthApiDefaultParameters) {
EAuthApiDefaultParameters["ORIGIN"] = "https://foursquare.com";
})(EAuthApiDefaultParameters || (EAuthApiDefaultParameters = {}));
var EAuthApiPathnames;
(function (EAuthApiPathnames) {
EAuthApiPathnames["AUTHENTICATE"] = "/oauth2/authenticate";
EAuthApiPathnames["ACCESS_TOKEN"] = "/oauth2/access_token";
})(EAuthApiPathnames || (EAuthApiPathnames = {}));
var EResponseType;
(function (EResponseType) {
EResponseType["CODE"] = "code";
})(EResponseType || (EResponseType = {}));
var EGrantType;
(function (EGrantType) {
EGrantType["AUTHORIZATION_CODE"] = "authorization_code";
})(EGrantType || (EGrantType = {}));
var compilePath = function compilePath(path) {
return pathToRegexp.compile(path);
};
/**
* Public API for generating a URL pathname from a path and parameters.
* https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/generatePath.js#L20
*/
var generatePath = function generatePath(path, params) {
if (path === void 0) {
path = '/';
}
if (params === void 0) {
params = {};
}
return path === '/' ? path : compilePath(path)(params);
};
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
var getLocationSearch = function getLocationSearch(_temp) {
var _ref = _temp === void 0 ? {
params: {}
} : _temp,
_ref$params = _ref.params,
params = _ref$params === void 0 ? {} : _ref$params;
var locationSearch = Object.keys(params).filter(function (key) {
return params[key] !== undefined && params[key] !== '';
}).map(function (key) {
return encodeURIComponent(key) + "=" + encodeURIComponent("" + params[key]);
}).join('&');
return !!locationSearch && "?" + locationSearch || '';
};
var getLocationHref = function getLocationHref(_ref2) {
var origin = _ref2.origin,
pathname = _ref2.pathname,
_ref2$params = _ref2.params,
params = _ref2$params === void 0 ? {} : _ref2$params;
return "" + origin + pathname + getLocationSearch({
params: params
});
};
var processFetchResponse = function processFetchResponse(response) {
if (response.ok) {
return response.json();
}
return throwError.throwError(new Error("Error " + response.status));
};
var processFetchError = function processFetchError(err) {
return throwError.throwError(new Error(err.message));
};
var getDefaultRequestParameters = function getDefaultRequestParameters(_ref) {
var config = _ref.config;
var clientId = config.clientId,
clientSecret = config.clientSecret,
accessToken = config.accessToken;
return accessToken ? {
oauth_token: accessToken,
v: EApiDefaultParameters.VERSION
} : {
client_id: clientId,
client_secret: clientSecret,
v: EApiDefaultParameters.VERSION
};
};
var enhancedFetch = function enhancedFetch(_ref2) {
var config = _ref2.config,
_ref2$params = _ref2.params,
params = _ref2$params === void 0 ? {} : _ref2$params,
pathname = _ref2.pathname;
return fetch.fromFetch(getLocationHref({
origin: EApiDefaultParameters.ORIGIN,
pathname: pathname,
params: _extends({}, getDefaultRequestParameters({
config: config
}), params)
}));
};
var adaptPayload = function adaptPayload(payload) {
return !!payload.meta && httpResponseStatus.getHttpStatusCategory(payload.meta.code) === httpResponseStatus.HTTP_STATUS_SUCCESS ? payload.response : undefined;
};
var ECommonError;
(function (ECommonError) {
ECommonError["RESPONSE_NOT_VALID"] = "Response is not valid";
})(ECommonError || (ECommonError = {}));
var adaptGetLists = function adaptGetLists(payload) {
var response = adaptPayload(payload);
if (!response || !response.list) {
throw new Error(ECommonError.RESPONSE_NOT_VALID);
}
return response.list;
};
var adaptGetPhotosDetails = function adaptGetPhotosDetails(payload) {
var response = adaptPayload(payload);
if (!response || !response.photo) {
throw new Error(ECommonError.RESPONSE_NOT_VALID);
}
return response.photo;
};
var adaptGetVenuesCategories = function adaptGetVenuesCategories(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.categories) || [];
};
var adaptGetVenuesExplore = function adaptGetVenuesExplore(payload) {
var _response$groups$;
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : (_response$groups$ = response.groups[0]) === null || _response$groups$ === void 0 ? void 0 : _response$groups$.items) || [];
};
var adaptGetVenuesLikes = function adaptGetVenuesLikes(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.likes) || {
count: 0,
items: [],
summary: '0 Likes'
};
};
var adaptGetVenuesListed = function adaptGetVenuesListed(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.lists) || {
count: 0,
groups: []
};
};
var adaptGetVenuesNextVenues = function adaptGetVenuesNextVenues(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.nextVenues.items) || [];
};
var adaptGetVenuesSearch = function adaptGetVenuesSearch(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.venues) || [];
};
var adaptGetVenuesSimilar = function adaptGetVenuesSimilar(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.similarVenues.items) || [];
};
var adaptGetVenuesSuggestCompletion = function adaptGetVenuesSuggestCompletion(payload) {
var response = adaptPayload(payload);
return (response === null || response === void 0 ? void 0 : response.minivenues) || [];
};
var adaptGetVenuesTrending = function adaptGetVenuesTrending(payload) {
return adaptGetVenuesSearch(payload);
};
var getObservableLists = function getObservableLists(_ref) {
var config = _ref.config,
payload = _ref.payload;
var listId = payload.listId;
return enhancedFetch({
config: config,
pathname: generatePath(EApiPathnames.LISTS, {
listId: listId
})
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetLists), operators.catchError(processFetchError));
};
var getLists = function getLists(_ref) {
var config = _ref.config;
return function (_ref2) {
var payload = _ref2.payload;
return getObservableLists({
config: config,
payload: payload
}).toPromise();
};
};
var getObservablePhotosDetails = function getObservablePhotosDetails(_ref) {
var config = _ref.config,
payload = _ref.payload;
var photoId = payload.photoId;
return enhancedFetch({
config: config,
pathname: generatePath(EApiPathnames.PHOTOS_DETAILS, {
photoId: photoId
})
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetPhotosDetails), operators.catchError(processFetchError));
};
var getPhotosDetails = function getPhotosDetails(_ref) {
var config = _ref.config;
return function (_ref2) {
var payload = _ref2.payload;
return getObservablePhotosDetails({
config: config,
payload: payload
}).toPromise();
};
};
var getObservableVenuesCategories = function getObservableVenuesCategories(_ref) {
var config = _ref.config;
return enhancedFetch({
config: config,
pathname: EApiPathnames.VENUES_CATEGORIES
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesCategories), operators.catchError(processFetchError));
};
var getObservableVenuesExplore = function getObservableVenuesExplore(_ref2) {
var config = _ref2.config,
payload = _ref2.payload;
return enhancedFetch({
config: config,
pathname: EApiPathnames.VENUES_EXPLORE,
params: _extends({}, payload)
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesExplore), operators.catchError(processFetchError));
};
var getObservableVenuesLikes = function getObservableVenuesLikes(_ref3) {
var config = _ref3.config,
payload = _ref3.payload;
var venueId = payload.venueId;
return enhancedFetch({
config: config,
pathname: generatePath(EApiPathnames.VENUES_LIKES, {
venueId: venueId
})
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesLikes), operators.catchError(processFetchError));
};
var getObservableVenuesListed = function getObservableVenuesListed(_ref4) {
var config = _ref4.config,
payload = _ref4.payload;
var venueId = payload.venueId;
return enhancedFetch({
config: config,
pathname: generatePath(EApiPathnames.VENUES_LISTED, {
venueId: venueId
})
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesListed), operators.catchError(processFetchError));
};
var getObservableVenuesNextVenues = function getObservableVenuesNextVenues(_ref5) {
var config = _ref5.config,
payload = _ref5.payload;
var venueId = payload.venueId;
return enhancedFetch({
config: config,
pathname: generatePath(EApiPathnames.VENUES_NEXT_VENUES, {
venueId: venueId
})
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesNextVenues), operators.catchError(processFetchError));
};
var getObservableVenuesSearch = function getObservableVenuesSearch(_ref6) {
var config = _ref6.config,
payload = _ref6.payload;
return enhancedFetch({
config: config,
pathname: EApiPathnames.VENUES_SEARCH,
params: _extends({}, payload)
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesSearch), operators.catchError(processFetchError));
};
var getObservableVenuesSimilar = function getObservableVenuesSimilar(_ref7) {
var config = _ref7.config,
payload = _ref7.payload;
var venueId = payload.venueId;
return enhancedFetch({
config: config,
pathname: generatePath(EApiPathnames.VENUES_SIMILAR, {
venueId: venueId
})
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesSimilar), operators.catchError(processFetchError));
};
var getObservableVenuesSuggestCompletion = function getObservableVenuesSuggestCompletion(_ref8) {
var config = _ref8.config,
payload = _ref8.payload;
return enhancedFetch({
config: config,
pathname: EApiPathnames.VENUES_SUGGEST_COMPLETION,
params: _extends({}, payload)
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesSuggestCompletion), operators.catchError(processFetchError));
};
var getObservableVenuesTrending = function getObservableVenuesTrending(_ref9) {
var config = _ref9.config,
payload = _ref9.payload;
return enhancedFetch({
config: config,
pathname: EApiPathnames.VENUES_TRENDING,
params: _extends({}, payload)
}).pipe(operators.switchMap(processFetchResponse), operators.map(adaptGetVenuesTrending), operators.catchError(processFetchError));
};
var getVenuesCategories = function getVenuesCategories(_ref) {
var config = _ref.config;
return function () {
return getObservableVenuesCategories({
config: config
}).toPromise();
};
};
var getVenuesExplore = function getVenuesExplore(_ref2) {
var config = _ref2.config;
return function (_ref3) {
var payload = _ref3.payload;
return getObservableVenuesExplore({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesLikes = function getVenuesLikes(_ref4) {
var config = _ref4.config;
return function (_ref5) {
var payload = _ref5.payload;
return getObservableVenuesLikes({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesListed = function getVenuesListed(_ref6) {
var config = _ref6.config;
return function (_ref7) {
var payload = _ref7.payload;
return getObservableVenuesListed({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesNextVenues = function getVenuesNextVenues(_ref8) {
var config = _ref8.config;
return function (_ref9) {
var payload = _ref9.payload;
return getObservableVenuesNextVenues({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesSearch = function getVenuesSearch(_ref10) {
var config = _ref10.config;
return function (_ref11) {
var payload = _ref11.payload;
return getObservableVenuesSearch({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesSimilar = function getVenuesSimilar(_ref12) {
var config = _ref12.config;
return function (_ref13) {
var payload = _ref13.payload;
return getObservableVenuesSimilar({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesSuggestCompletion = function getVenuesSuggestCompletion(_ref14) {
var config = _ref14.config;
return function (_ref15) {
var payload = _ref15.payload;
return getObservableVenuesSuggestCompletion({
config: config,
payload: payload
}).toPromise();
};
};
var getVenuesTrending = function getVenuesTrending(_ref16) {
var config = _ref16.config;
return function (_ref17) {
var payload = _ref17.payload;
return getObservableVenuesTrending({
config: config,
payload: payload
}).toPromise();
};
};
var actions = {
getLists: getLists,
getPhotosDetails: getPhotosDetails,
getVenuesCategories: getVenuesCategories,
getVenuesExplore: getVenuesExplore,
getVenuesLikes: getVenuesLikes,
getVenuesListed: getVenuesListed,
getVenuesNextVenues: getVenuesNextVenues,
getVenuesSearch: getVenuesSearch,
getVenuesSimilar: getVenuesSimilar,
getVenuesSuggestCompletion: getVenuesSuggestCompletion,
getVenuesTrending: getVenuesTrending
};
(function (EReturnType) {
EReturnType["OBSERVABLE"] = "OBSERVABLE";
EReturnType["PROMISE"] = "PROMISE";
})(exports.EReturnType || (exports.EReturnType = {}));
var tsFoursquare = function tsFoursquare(_ref) {
var clientId = _ref.clientId,
clientSecret = _ref.clientSecret,
_ref$returnType = _ref.returnType,
returnType = _ref$returnType === void 0 ? exports.EReturnType.PROMISE : _ref$returnType;
var config = {
clientId: clientId,
clientSecret: clientSecret,
returnType: returnType
};
this.getLists = actions.getLists({
config: config
});
this.getPhotosDetails = actions.getPhotosDetails({
config: config
});
this.getVenuesCategories = actions.getVenuesCategories({
config: config
});
this.getVenuesExplore = actions.getVenuesExplore({
config: config
});
this.getVenuesLikes = actions.getVenuesLikes({
config: config
});
this.getVenuesListed = actions.getVenuesListed({
config: config
});
this.getVenuesNextVenues = actions.getVenuesNextVenues({
config: config
});
this.getVenuesSearch = actions.getVenuesSearch({
config: config
});
this.getVenuesSimilar = actions.getVenuesSimilar({
config: config
});
this.getVenuesSuggestCompletion = actions.getVenuesSuggestCompletion({
config: config
});
this.getVenuesTrending = actions.getVenuesTrending({
config: config
});
};
require('isomorphic-fetch');
exports.tsFoursquare = tsFoursquare;
//# sourceMappingURL=ts-foursquare.cjs.development.js.map