UNPKG

ts-foursquare

Version:
526 lines (476 loc) 17.1 kB
'use strict'; 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